]> lifelog.hopto.org Git - LifeLog.git/commitdiff
Initial commit
authorwill <redacted>
Thu, 16 Nov 2023 23:08:18 +0000 (17:08 -0600)
committerwill <redacted>
Thu, 16 Nov 2023 23:08:18 +0000 (17:08 -0600)
224 files changed:
CNF_Specs.md [new file with mode: 0644]
Current Development Check List.md [new file with mode: 0644]
Installation.txt [new file with mode: 0644]
Installation_LightHTTPD.txt [new file with mode: 0644]
Installation_PostgreSQL.txt [new file with mode: 0644]
Life Log.mm [new file with mode: 0644]
LifeLogLighttpd.service [new file with mode: 0644]
LifeLogLighttpd_8080.cnf [new file with mode: 0644]
README.md [new file with mode: 0644]
ReleaseTestCheckupList-v-2.2.md [new file with mode: 0644]
VS-on-METABOX-25.png [new file with mode: 0644]
VS-on-METABOX-34.png [new file with mode: 0644]
VS-on-METABOX-42.png [new file with mode: 0644]
backupDBLifeLog.sh [new file with mode: 0755]
dbLifeLog/bck_20230831092352_SQLite_admin.osz [new file with mode: 0644]
dbLifeLog/bck_20230901234627_SQLite_admin.osz [new file with mode: 0644]
dbLifeLog/bck_20231002203006_SQLite_admin.osz [new file with mode: 0644]
dbLifeLog/bck_20231029112533_SQLite_admin.osz [new file with mode: 0644]
dbLifeLog/bck_20231114135916_SQLite_admin.osz [new file with mode: 0644]
dbLifeLog/current_theme [new file with mode: 0755]
dbLifeLog/data_CHONGER_log.db [new file with mode: 0644]
dbLifeLog/data_a_new_log.db [new file with mode: 0644]
dbLifeLog/data_abc_log.db [new file with mode: 0644]
dbLifeLog/data_admin_log.db [new file with mode: 0755]
dbLifeLog/data_nabilbaroud@hotmail.com _log.db [new file with mode: 0644]
dbLifeLog/data_test_log.db [new file with mode: 0755]
dbLifeLog/main.cnf [new file with mode: 0644]
dbLifeLog/zone.csv [new file with mode: 0644]
htdocs/cgi-bin/.redirect [new file with mode: 0644]
htdocs/cgi-bin/CNFServices.cgi [new file with mode: 0755]
htdocs/cgi-bin/config.cgi [new file with mode: 0755]
htdocs/cgi-bin/data.cgi [new file with mode: 0755]
htdocs/cgi-bin/docs/About.md [new file with mode: 0644]
htdocs/cgi-bin/docs/LogTagsHelp.md [new file with mode: 0644]
htdocs/cgi-bin/docs/PerlCNF/AdoptedPerlProgrammingPractices.md [new file with mode: 0644]
htdocs/cgi-bin/docs/PerlCNF/Mermaid_Diagrams.md [new file with mode: 0644]
htdocs/cgi-bin/docs/PerlCNF/PerlCNFConstantAnonExplained.md [new file with mode: 0644]
htdocs/cgi-bin/docs/PerlCNF/README.md [new file with mode: 0644]
htdocs/cgi-bin/docs/PerlCNF/Specifications_For_CNF_ReadMe.md [new file with mode: 0644]
htdocs/cgi-bin/docs/Squeezed In Between Poetry/pix/arrDbl_left.gif [new file with mode: 0644]
htdocs/cgi-bin/docs/Squeezed In Between Poetry/pix/arrDbl_right.gif [new file with mode: 0644]
htdocs/cgi-bin/docs/Squeezed In Between Poetry/pix/arrDbl_top.gif [new file with mode: 0644]
htdocs/cgi-bin/docs/Squeezed In Between Poetry/pix/thournwhaul_logo.jpg [new file with mode: 0644]
htdocs/cgi-bin/docs/Squeezed In Between Poetry/vol1.html [new file with mode: 0644]
htdocs/cgi-bin/docs/Squeezed In Between Poetry/vol2.html [new file with mode: 0644]
htdocs/cgi-bin/e_vars.pl [new file with mode: 0644]
htdocs/cgi-bin/env.html [new file with mode: 0644]
htdocs/cgi-bin/favicon.ico [new file with mode: 0644]
htdocs/cgi-bin/images/VS-on-METABOX-42.png [new file with mode: 0644]
htdocs/cgi-bin/images/Wedges-9.1s-64px.png [new file with mode: 0644]
htdocs/cgi-bin/images/WelloffHighlevelAlpinegoat.webp [new file with mode: 0644]
htdocs/cgi-bin/images/paw_to_hand_deal_done.jpg [new file with mode: 0644]
htdocs/cgi-bin/images/paw_to_hand_deal_done_frm.png [new file with mode: 0644]
htdocs/cgi-bin/index.cgi [new file with mode: 0755]
htdocs/cgi-bin/index.cnf [new file with mode: 0644]
htdocs/cgi-bin/index.html [new file with mode: 0644]
htdocs/cgi-bin/json.cgi [new file with mode: 0755]
htdocs/cgi-bin/login_ctr.cgi [new file with mode: 0755]
htdocs/cgi-bin/main.cgi [new file with mode: 0755]
htdocs/cgi-bin/markdown.cgi [new file with mode: 0755]
htdocs/cgi-bin/modern.cgi [new file with mode: 0755]
htdocs/cgi-bin/rss_output/rss_CPAN.rdf [new file with mode: 0644]
htdocs/cgi-bin/rss_output/rss_Life_Hacker.rdf [new file with mode: 0644]
htdocs/cgi-bin/rss_output/rss_Perl_Weekly.rdf [new file with mode: 0644]
htdocs/cgi-bin/rss_output/rss_Politico.rdf [new file with mode: 0644]
htdocs/cgi-bin/rss_output/rss_The_Perl_Foundation_RSS_Feed.rdf [new file with mode: 0644]
htdocs/cgi-bin/rss_output/rss_The_Sydney_Morning_Herald___World_RSS_Feed.rdf [new file with mode: 0644]
htdocs/cgi-bin/rss_output/rss_Viral_Now.rdf [new file with mode: 0644]
htdocs/cgi-bin/rss_output/tree_feed_CPAN.cnf [new file with mode: 0644]
htdocs/cgi-bin/rss_output/tree_feed_Life_Hacker.cnf [new file with mode: 0644]
htdocs/cgi-bin/rss_output/tree_feed_Perl_Weekly.cnf [new file with mode: 0644]
htdocs/cgi-bin/rss_output/tree_feed_Politico.cnf [new file with mode: 0644]
htdocs/cgi-bin/rss_output/tree_feed_The_Perl_Foundation_RSS_Feed.cnf [new file with mode: 0644]
htdocs/cgi-bin/rss_output/tree_feed_The_Sydney_Morning_Herald___World_RSS_Feed.cnf [new file with mode: 0644]
htdocs/cgi-bin/rss_output/tree_feed_Viral_Now.cnf [new file with mode: 0644]
htdocs/cgi-bin/search.cgi [new file with mode: 0755]
htdocs/cgi-bin/static [new symlink]
htdocs/cgi-bin/stats.cgi [new file with mode: 0755]
htdocs/cgi-bin/system/modules/CNFDateTime.pm [new file with mode: 0644]
htdocs/cgi-bin/system/modules/CNFJSON.pm [new file with mode: 0644]
htdocs/cgi-bin/system/modules/CNFMeta.pm [new file with mode: 0644]
htdocs/cgi-bin/system/modules/CNFNode.pm [new file with mode: 0644]
htdocs/cgi-bin/system/modules/CNFParser.pm [new file with mode: 0644]
htdocs/cgi-bin/system/modules/CNFtoJSON.pm [new file with mode: 0644]
htdocs/cgi-bin/system/modules/HTMLIndexProcessorPlugin.pm [new file with mode: 0644]
htdocs/cgi-bin/system/modules/HTMLProcessorPlugin.pm [new file with mode: 0644]
htdocs/cgi-bin/system/modules/MarkdownPlugin.pm [new file with mode: 0644]
htdocs/cgi-bin/system/modules/PerlKeywords.pm [new file with mode: 0644]
htdocs/cgi-bin/system/modules/RSSFeedsPlugin.pm [new file with mode: 0644]
htdocs/cgi-bin/system/modules/Settings.pm [new file with mode: 0644]
htdocs/cgi-bin/testJQUERYCode.html [new file with mode: 0644]
htdocs/cgi-bin/testPGDB.pl [new file with mode: 0644]
htdocs/cgi-bin/time_zones.cgi [new file with mode: 0755]
htdocs/cgi-bin/tz.map [new file with mode: 0644]
htdocs/cgi-bin/wsrc/Miki-Matsubara-WASH-WASH.mp3 [new file with mode: 0644]
htdocs/cgi-bin/wsrc/Store_Door_Chime-Mike_Koenig-570742973.mp3 [new file with mode: 0644]
htdocs/cgi-bin/wsrc/bckanim.js [new file with mode: 0644]
htdocs/cgi-bin/wsrc/dutchie-close.mp3 [new file with mode: 0644]
htdocs/cgi-bin/wsrc/dutchie.mp3 [new file with mode: 0644]
htdocs/cgi-bin/wsrc/effects.css [new file with mode: 0644]
htdocs/cgi-bin/wsrc/feeds.css [new file with mode: 0644]
htdocs/cgi-bin/wsrc/feeds.js [new file with mode: 0644]
htdocs/cgi-bin/wsrc/feeds_viral_now.css [new file with mode: 0644]
htdocs/cgi-bin/wsrc/fonts/fontawesome-webfont.woff2 [new file with mode: 0644]
htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-af.js [new file with mode: 0644]
htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-am.js [new file with mode: 0644]
htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-bg.js [new file with mode: 0644]
htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-ca.js [new file with mode: 0644]
htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-cs.js [new file with mode: 0644]
htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-da.js [new file with mode: 0644]
htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-de.js [new file with mode: 0644]
htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-el.js [new file with mode: 0644]
htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-es.js [new file with mode: 0644]
htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-et.js [new file with mode: 0644]
htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-eu.js [new file with mode: 0644]
htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-fa.js [new file with mode: 0644]
htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-fi.js [new file with mode: 0644]
htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-fr.js [new file with mode: 0644]
htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-gl.js [new file with mode: 0644]
htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-he.js [new file with mode: 0644]
htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-hr.js [new file with mode: 0644]
htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-hu.js [new file with mode: 0644]
htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-id.js [new file with mode: 0644]
htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-it.js [new file with mode: 0644]
htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-ja.js [new file with mode: 0644]
htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-ko.js [new file with mode: 0644]
htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-lt.js [new file with mode: 0644]
htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-lv.js [new file with mode: 0644]
htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-mk.js [new file with mode: 0644]
htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-nl.js [new file with mode: 0644]
htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-no.js [new file with mode: 0644]
htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-pl.js [new file with mode: 0644]
htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-pt-BR.js [new file with mode: 0644]
htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-pt.js [new file with mode: 0644]
htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-ro.js [new file with mode: 0644]
htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-ru.js [new file with mode: 0644]
htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-sk.js [new file with mode: 0644]
htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-sl.js [new file with mode: 0644]
htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-sq.js [new file with mode: 0644]
htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-sr-RS.js [new file with mode: 0644]
htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-sr-YU.js [new file with mode: 0644]
htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-sv.js [new file with mode: 0644]
htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-th.js [new file with mode: 0644]
htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-tr.js [new file with mode: 0644]
htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-uk.js [new file with mode: 0644]
htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-vi.js [new file with mode: 0644]
htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-zh-CN.js [new file with mode: 0644]
htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-zh-TW.js [new file with mode: 0644]
htdocs/cgi-bin/wsrc/images/Sun-Rotating.gif [new file with mode: 0644]
htdocs/cgi-bin/wsrc/images/page-bck-earth.png [new file with mode: 0644]
htdocs/cgi-bin/wsrc/images/page-bck-moon.png [new file with mode: 0644]
htdocs/cgi-bin/wsrc/images/page-bck-std.png [new file with mode: 0644]
htdocs/cgi-bin/wsrc/images/page-bck-sun.png [new file with mode: 0644]
htdocs/cgi-bin/wsrc/images/pingy.svg [new file with mode: 0644]
htdocs/cgi-bin/wsrc/images/std--login-bck.png [new file with mode: 0644]
htdocs/cgi-bin/wsrc/images/std-log-lbl-bck.png [new file with mode: 0644]
htdocs/cgi-bin/wsrc/images/ui-bg_diagonals-thick_90_eeeeee_40x40.png [new file with mode: 0644]
htdocs/cgi-bin/wsrc/images/ui-bg_glass_100_e4f1fb_1x400.png [new file with mode: 0644]
htdocs/cgi-bin/wsrc/images/ui-bg_glass_50_3baae3_1x400.png [new file with mode: 0644]
htdocs/cgi-bin/wsrc/images/ui-bg_glass_80_d7ebf9_1x400.png [new file with mode: 0644]
htdocs/cgi-bin/wsrc/images/ui-bg_highlight-hard_100_f2f5f7_1x100.png [new file with mode: 0644]
htdocs/cgi-bin/wsrc/images/ui-bg_highlight-hard_70_000000_1x100.png [new file with mode: 0644]
htdocs/cgi-bin/wsrc/images/ui-bg_highlight-soft_100_deedf7_1x100 (copy).png [new file with mode: 0644]
htdocs/cgi-bin/wsrc/images/ui-bg_highlight-soft_100_deedf7_1x100.png [new file with mode: 0644]
htdocs/cgi-bin/wsrc/images/ui-bg_highlight-soft_25_ffef8f_1x100.png [new file with mode: 0644]
htdocs/cgi-bin/wsrc/images/ui-icons_2694e8_256x240.png [new file with mode: 0644]
htdocs/cgi-bin/wsrc/images/ui-icons_2e83ff_256x240.png [new file with mode: 0644]
htdocs/cgi-bin/wsrc/images/ui-icons_3d80b3_256x240.png [new file with mode: 0644]
htdocs/cgi-bin/wsrc/images/ui-icons_72a7cf_256x240.png [new file with mode: 0644]
htdocs/cgi-bin/wsrc/images/ui-icons_ffffff_256x240.png [new file with mode: 0644]
htdocs/cgi-bin/wsrc/jquery-ui-sliderAccess.js [new file with mode: 0644]
htdocs/cgi-bin/wsrc/jquery-ui-timepicker-addon.css [new file with mode: 0644]
htdocs/cgi-bin/wsrc/jquery-ui-timepicker-addon.js [new file with mode: 0644]
htdocs/cgi-bin/wsrc/jquery-ui.css [new file with mode: 0644]
htdocs/cgi-bin/wsrc/jquery-ui.js [new file with mode: 0644]
htdocs/cgi-bin/wsrc/jquery-ui.structure.css [new file with mode: 0644]
htdocs/cgi-bin/wsrc/jquery-ui.theme.css [new file with mode: 0644]
htdocs/cgi-bin/wsrc/jquery.js [new file with mode: 0644]
htdocs/cgi-bin/wsrc/jquery.poshytip.js [new file with mode: 0644]
htdocs/cgi-bin/wsrc/jquery.sweet-dropdown.css [new file with mode: 0644]
htdocs/cgi-bin/wsrc/jquery.sweet-dropdown.js [new file with mode: 0644]
htdocs/cgi-bin/wsrc/jquery.transit.js [new file with mode: 0644]
htdocs/cgi-bin/wsrc/jscolor.js [new file with mode: 0644]
htdocs/cgi-bin/wsrc/main.css [new file with mode: 0644]
htdocs/cgi-bin/wsrc/main.js [new file with mode: 0644]
htdocs/cgi-bin/wsrc/main_earth.css [new file with mode: 0644]
htdocs/cgi-bin/wsrc/main_moon.css [new file with mode: 0644]
htdocs/cgi-bin/wsrc/main_sun.css [new file with mode: 0644]
htdocs/cgi-bin/wsrc/moment-timezone-with-data.js [new file with mode: 0644]
htdocs/cgi-bin/wsrc/moment.js [new file with mode: 0644]
htdocs/cgi-bin/wsrc/print.css [new file with mode: 0644]
htdocs/cgi-bin/wsrc/quill/examples/bubble.html [new file with mode: 0644]
htdocs/cgi-bin/wsrc/quill/examples/full.html [new file with mode: 0644]
htdocs/cgi-bin/wsrc/quill/examples/snow.html [new file with mode: 0644]
htdocs/cgi-bin/wsrc/quill/highlight.min.js [new file with mode: 0644]
htdocs/cgi-bin/wsrc/quill/katex.min.css [new file with mode: 0644]
htdocs/cgi-bin/wsrc/quill/katex.min.js [new file with mode: 0644]
htdocs/cgi-bin/wsrc/quill/monokai-sublime.min.css [new file with mode: 0644]
htdocs/cgi-bin/wsrc/quill/quill.bubble.css [new file with mode: 0644]
htdocs/cgi-bin/wsrc/quill/quill.core.css [new file with mode: 0644]
htdocs/cgi-bin/wsrc/quill/quill.core.js [new file with mode: 0644]
htdocs/cgi-bin/wsrc/quill/quill.js [new file with mode: 0644]
htdocs/cgi-bin/wsrc/quill/quill.min.js [new file with mode: 0644]
htdocs/cgi-bin/wsrc/quill/quill.min.js.map [new file with mode: 0644]
htdocs/cgi-bin/wsrc/quill/quill.snow.css [new file with mode: 0644]
htdocs/cgi-bin/wsrc/tip-yellowsimple/tip-yellowsimple.css [new file with mode: 0644]
htdocs/cgi-bin/wsrc/tip-yellowsimple/tip-yellowsimple_arrows.gif [new file with mode: 0644]
htdocs/test.html [new file with mode: 0644]
install.sh [new file with mode: 0755]
install_as_system_modules.sh [new file with mode: 0755]
install_cpan_modules_required.pl [new file with mode: 0755]
install_lifelog_req_modules_2.4.sh [new file with mode: 0755]
lifelog.er [new file with mode: 0644]
lighttpd.conf [new file with mode: 0644]
lighttpd_server.log [new file with mode: 0644]
log.pl [new file with mode: 0755]
rss_output/tree_feed_CPAN.cnf [new file with mode: 0644]
runWebServer.sh [new file with mode: 0755]
scripted_sample_log_data_file.cnf [new file with mode: 0644]
startDevWebServer.sh [new file with mode: 0755]
startLightHTTPServer.sh [new file with mode: 0755]
stopDevWebServer.sh [new file with mode: 0755]
tash clear [new file with mode: 0644]
thttpd.conf [new file with mode: 0644]

diff --git a/CNF_Specs.md b/CNF_Specs.md
new file mode 100644 (file)
index 0000000..d86aa10
--- /dev/null
@@ -0,0 +1,278 @@
+# Configuration Network File Format Specifications
+
+
+## Introduction
+
+This is a simple and fast file format. That allows setting up of network applications with initial configuration values.
+These are usually standard, property and value pairs. Containing possible also SQL database structures statements with basic data.
+It is designed to accommodate a parser to read and provide for CNF property tags. These can be of three types, using all a textual similar presentation.
+In general are recognised as constants, anons or sqlites.
+
+Operating system environmental settings or variables are considered only as the last resort to provide for a value.
+This is however to be avoided as it hides the attention and expectation for a setting.
+
+With this type of an application configuration system. Global settings can also be individual scripted with an meaningful description.
+Which is pretty much welcomed and encouraged.
+
+## General CNF Formatting Rules
+
+1. Text that isn't CNF tagged is ignored in the file and can be used as comments.
+2. CNF tag begins with an **<<** or **<<<** and ends with an **>>>** or **>>**.
+3. If instruction is contained the tag begins with **<<** and ends with a **>>**.
+4. Multi line values are tag ended on a separate line with an **>>>**.
+5. CNF tag value can post processed by placing macros making it a template.
+6. Standard markup of a macro is to enclose the property name or number with a triple dollar signifier **\$\$\$**{macro}**\$\$\$**.
+    1. Presedence of resloving the property name/value is by first passed macros, then config anons and finally the looking up constances.
+    2. Nested macros resolving from linked in other properties is currently not supported.
+7. CNF instructions and constants are uppercase.
+    1. Example 1 format with instruction: ```<<<CONST\n{name=value\n..}\n>>>``` autonoumus const, with inner properties.
+    2. Example 2 format with instruction: ```<<{$sig}{NAME}<CONST {multi line value}>>>``` A single const property with a multi line value.
+    3. Example 3 format with instruction: ```<<CONST<{$sig}{NAME}\n {multi line value}>>>``` A single const property with a multi line value.
+    4. Example 4 format with instruction: ```<<{NAME}<{INSTRUCTION}<{value}>>>``` A anon.
+    5. Example 5 format with instruction: ```<<{$sig}{NAME}<{INSTRUCTION}\n{value}\n>>>```.
+
+8. CNF instructions are all uppercase and unique, to the processor.
+9. A CNF constant in its property name is prefixed with an '**$**' signifier.
+10. Constants are usually scripted at the beginning of the file, or parsed first in a separate file.
+11. The instruction processor can use them if signifier $ surrounds the constant name. Therefore, replacing it with the constants value if further found in the file.
+
+```HTML
+     <<<CONST $APP_PATH=~/MyApplication>>>
+     <<app_path<$APP_PATH$/module/main>>>
+ ```
+
+12. Property names, Constant, Anon refer to the programmatically assinged variable name.
+13. CNF Constant values are store specific.
+14. Constants can't be changed for the life of the application or service issued.
+15. Storage of CNF constants declared can be preceded to the file based one.
+16. i.e. If stored in a database or on a network node. After the file declaration fact.
+17. Missing file based storage settings can be next queried from the environmental one.
+    1. This is to be avoided if possible.
+18. File storage encountered constants override system environmental ones.
+    1. i.e. System administrator has set them.
+19. Database storage encountered constants override file set ones.
+    1. i.e. User of application has set them.
+20. CNF Constant values can be changed in the script file.
+    1. If not present in script file, then an application setting must procede with its default.
+    2. CNF Constants can be declared only once during initial parsing of script files.
+    3. Rule of thumb is that Constants are synchonized with an applications release version.
+    4. Static constants, are script or code only assigned values.
+    5. CNF Anons can overide in contrast previously assigned value.
+21. A CNF Anon is similar to constants but a more simpler property and value only pair.
+    1. Anons are so called because they are unknown or unexpected by the configuration framework, store to object intermidiate.
+    2. Constants that turn up in the anon list, are a good indicator that they are not handled from script. Forgotten become anons.
+    3. Anons similar to constants, once in the database, overtake the scripted or application default settings value.
+    4. Static anons, are those that are set in the database, and/or are not merged with application defaults.
+    5. Anons hashed are programatically accessed separately to constants.
+       1. It is fine to have several different applications, to share same storage, even if they have different implementation.
+       2. Contants will be specific to application, while anons can change in different purpose script files.
+22. Anon is not instruction processed. Hence anonymous in nature for its value.
+23. Anon has no signifier, and doesn't need to have an application default.
+24. Anon value is global to the application and its value can be modified.
+
+    ```HTML
+            <<USE_SWITCH<true>>>
+            <<DIALOG_TITLE_EN<MyApplication Title>>>
+    ```
+    1.  Anon value can be scripted to contain template like but numbered parameters.
+    2.  When querying for an anon value, replacement parameter array can be passed.
+    3.  Numbering is from **\$\$\$1\$\$\$**..**$$$(n...)\$\$\$** to be part of its value. Strategically placed.
+
+    ```HTML
+        <<GET_SUB_URL<https://www.$$$1$$$.acme.com/$$$2$$$>>>
+    ```
+    ```PERL
+       # Perl language
+       my $url = $cnf->anon('GET_SUB_URL',('tech','main.cgi'));
+       # $url now should be: https://www.tech.acme.com/main.cgi
+       eval ($url =~ m/https:\.*/)
+             or warn "Failed to obtain expected URL when querying anon -> GET_SUB_URL"
+    ```
+
+## CNF Tag Formats
+
+### Property Value Tag
+
+    ```HTML
+        <<{name}<{value}>>>
+    ```
+
+### Instruction Value Tag
+
+    ```HTML
+        <<<{INSTRUCTION}
+        {value\n...valuen\n}>>>
+    ```
+
+### Full Tag
+
+    ```javascript
+        <<{$sig}{name}<{INSTRUCTION}
+            {value\n...value\n}
+        >>>
+    ```
+
+**Examples:**
+
+    ```HTML
+        <<$HELP<CONST
+            Sorry help is currently.
+            Not available.
+        >>
+        <<<CONST
+            $RELEASE_VER = 1.8
+            $SYS_1 =    10
+            $SYS_2 = 20
+            $SYS_3 =      "   Some Nice Text!   "
+        >>
+        <<PRINT_TO_HELP<true>>
+    ```
+
+## Database and SQL Instruction Formatting
+
+(Note - this documentation section not complete, as of 2020-02-14)
+
+### About
+
+CNF supports basic SQL Database structure statement generation. This is done via instruction based CNF tags. Named **sqlites**.
+
+1. Supported is table, view, index and data creation statements.
+2. Database statements are generic text, that is not further processed.
+3. There is limited database interaction, handling or processing to be provided.
+   1. Mainly for storage transfer of CNF constants, from file to database.
+   2. File changes precede database storage only in newly assigned constants.
+4. Database generated is expected to have a system  SYS_CNF_CONFIG table, containing the constants unique name value pairs, with optional description for each.
+   1. This is a reserved table and name.
+   2. This table must contain a **$RELEASE_VER** constants record at least.
+
+### SQLite Formatting
+
+* SQLites have the following reserved instructions:
+1. TABLE
+
+    ```HTML
+        <<MyAliasTable<TABLE
+                    ID INT PRIMARY KEY NOT NULL,
+                    ALIAS VCHAR(16) UNIQUE CONSTRAINT,
+                    EMAIL VCHAR(28),
+                    FULL_NAME VCHAR(128)
+        >>>
+    ```
+2. INDEX
+
+    ```HTML
+        <<MyAliasTable<INDEX
+            idx_alias on MyAliasTable (ALIAS);
+        >>>
+    ```
+3. SQL
+     1. SQL statements are actual full SQL placed in the tag body value.
+
+    ```HTML
+        <<VW_ALIASES>VIEW
+            CREATE VIEW VW_ALIASES AS SELECT ID,ALIAS ORDER BY ALIAS;
+        >>>
+    ```
+
+4. DATA
+    1. Data rows are ended with the **~** delimiter. In the tag body.
+    2. Data columns are delimited with the invert quote **`** (back tick) within a row.
+    3. These should appear as last in the config file as they are translated into insert statements.
+    4. First column is taken as the unique and record identity column (UID).
+    5. Data is to be updated in storage if any column other than the UID, has its contents changed in the file.
+      1. This behaviour can be controlled by disabling something like  an auto file storage update. i.e. during application upgrades. To prevent user set settings to reset to factory defaults.
+      2. The result would then be that database already stored data remains, and only new ones are added. This exercise is out of scope of this specification.
+
+    ```HTML
+        <<MyAliasTable<DATA
+        01`admin`admin@inc.com`Super User
+        02`chef`chef@inc.com`Bruno Allinoise
+        03`juicy`sfox@inc.com`Samantha Fox
+        >>
+    ```
+
+1. FILE
+    1.  Expects a file name assigned value, file containing actual further CNF DATA rows instructions, separately.
+    2.  The file is expected to be located next to the main config file.
+    3.  File is to be sequentially buffer read and processed instead as a whole in one go.
+    4.  The same principles apply in the file as to the DATA instruction CNF tag format, expected to be contained in it.
+
+    ```HTML
+        <<MyItemsTbl<FILE data_my_app.cnf>
+    ```
+
+2. MIGRATE
+   1. Migration are brute sql statements to be run based on currently installed previous version of the SQL database.
+   2. Migration is to be run from version upwards as stated and in the previous database encountered.
+      1. i.e. If encountered old v.1.5, it will be upgraded to v.1.6 first, then v.1.7...
+   3.  Migration is not run on newly created databases. These create the expected latest data structure.
+   4.  SQL Statements a separated by ';' terminator. To be executed one by one.
+
+    ```HTML
+        <<1.6<MIGRATE
+                ALTER TABLE LOG ADD STICKY BOOL DEFAULT 0;
+        >>
+        <<1.8<MIGRATE
+            CREATE TABLE notes_temp_table (LID INTEGER PRIMARY KEY NOT NULL, DOC TEXT);
+            INSERT INTO notes_temp_table SELECT `LID`,`DOC` FROM `NOTES`;
+            DROP TABLE `NOTES`;
+            ALTER TABLE `notes_temp_table` RENAME TO `NOTES`;
+        >>
+    ```
+
+## Sample Perl Language Usage
+
+**~/my_application.pl** file contents:
+```PERL
+
+use lib "system/modules";
+use lib $ENV{'PWD'}.'/perl_dev/WB_CNF/system/modules';
+require CNFParser;
+require Settings;
+
+my @expected = ("$MY_APP_LIB_RELATIVE", "$MY_APP_DB_RELATIVE");
+my $path = $ENV{'PWD'}."/perl_dev/WB_CNF/db/configuration.cnf";
+# Loading twice config here with object constructor with and without path.
+# To show dual purpose use.
+my $cnf1  = CNFParser->new($path);
+# Nothing parsed yet construct.
+my $cnf2  = CNFParser->new();
+   # We relay that the OS environment has been set for CNF constant settings if missing
+   # in the configuration file. Adding after parse has no effect if found in file.
+   $cnf2 -> addENVList(@expected);
+   # Parse finally now. Parse can be called on multiple different files, if desired.
+   $cnf2 -> parse($path);
+my $LIB_PATH;
+
+print "List of constants in file: $path\n";
+foreach my $prp ($cnf->constants()){
+    print "$prp=", $cnf->constant($prp),"\n";
+}
+if(!$cnf->constant('$MY_APP_LIB_RELATIVE')){
+    warn 'Missing $MY_APP_LIB_RELATIVE setting.';
+    $LIB_PATH = $cnf2->constant('$MY_APP_LIB_RELATIVE');
+    die  'Unable to get required $MY_APP_LIB_RELATIVE setting!' if(not $LIB_PATH)
+}
+
+print "Welcome to ", $cnf->constant('$APP_NAME'), " version ", $cnf->constant('$RELEASE_VER'), ".\n";
+
+```
+**~//perl_dev/WB_CNF/db/configuration.cnf** file contents:
+```HTML
+# List command anon with the name of 'list'.
+<<list>ls -lh dev|sort>
+<<<CONST
+$RELEASE_VER = 1.0
+$APP_NAME="My Application Sample"
+>>>
+
+```
+
+***
+
+   Document is from project ->  <https://github.com/wbudic/LifeLog/>
+
+   An open source application.
+
+<center>Moon Stage - v.1.1 2020</center>
+
diff --git a/Current Development Check List.md b/Current Development Check List.md
new file mode 100644 (file)
index 0000000..1224cac
--- /dev/null
@@ -0,0 +1,342 @@
+# Branch Development Life Log in Perl
+
+*This page lists current development and issues being worked on in the LifeLog app.*
+
+## Life Log Application Development
+
+### New Development v.2.3+
+
+* [ ] Backup options revisited/retested.
+* [ ] Categories display and intereaction to be bettered.
+* [ ] Bug 37 Keywords only search not wotking on detecting very old items.
+* [x] Fix uninitialized $scalars and warnings. My style of programming uses this as a perl feature, as unutilized is also null or empty. Linter disagrees with that. Empty or null  isn't also 0 for it. Null, empty, undef, and zero should be the same thing in scalar context and logic.
+* [ ] Stats and config page should check github for latest version, as background pull.
+* [ ] Implement template based CGI processing (slower but better separation of concerns).
+  * This separation of concern currently not really necessary as at the main.cgi is the whole file, that also incorporates buffering and complex database rendering. Thereby a slight performance penalty would be having to read and process also an template. Buffering is also directly compressed to client. Giving fast pages that some webservers might not have inbuilt or provide (rare). We will see. Templates are good, as the page layout is easier to change and rearrange.
+* [ ] Module installation script should check, on main.cnf and on perl soundness and compatibility.
+  * Should check and display autonomes that contain expected defaults changed or disabled in configuration. i.e AUTO_LOGIN or DBI_MULTI_USER_DB
+  * A trouble_shoot_configuration.pl should  be available to perform this, and be independently available from the main directory.
+* [ ] Process actions.
+  * Configured in main.cnf, to import perl action to execute, in parallel of returning pages.
+  * Action programable are on login, logout, row. 
+    * Where the row action processed is pushed back to browser on each main.cgi page call, logout action is pushed back to login_ctr.cgi page. 
+
+    ```html
+      # Separate process actions to execute in parallel.
+      <<ACTION$$<login>actions/reminders.pl>>
+      <<ACTION$$<row>actions/log.pl>>
+      <<ACTION$$<logout>actions/log.pl>>
+     ```
+
+* [ ] Search panel revisited.
+  * [ ] Search and previous view setup made fully session persisted.
+  * [ ] Provide button reset search.
+  * [x] Some longer keywords, even repeating from log to log, don't  show in autocomplete.
+* [x] Sums and dynamic calculations, interactions further to be refined.
+  * Canceling submit, leaves the translated '**\n**' for transfer not reverted.
+* [x] Setting should provide page color defaults in form of an hash.
+  * These should/can change based on selected theme. That possibly in future can be changed via config.
+  * colBG,colFG, colSHDW, etc...
+* [x] Printout page to include Amount column if category of items has valued asset, expense or income set. Providing also totals. Of Assets, and total on income and expense.
+  * Introduce Currency setting, to replace amount '#'. Even though it could be number of, something not currency related.
+* [x] Interaction - When editing an existing log entry, it needs confirmation, if it isn't a copy (now button wasn't pressed), before overwriting.
+  * i.e, Warning! - Existing entry has been changed, are you sure do you want to overwrite it?
+* [x] Configuration needs to be updated, to use CNF 2.2, for system reset, etc.
+  * Config file "Data Fix* reset of settings updated to properly revert to factory defaults.
+  * We need to also display stats for log file of the web server.
+    * Maybe provide an rotational purge on config page access. i.e. if line count is over 1000, purge to tail -n 1000.
+      * This sure an config file setting. i.e. <<WEB_SERVER_LOG_TAIL_LIMIT><1000>>>
+* [x] Backup/Restore made various db engine aware and compatible. As the data is the same.
+  * The data is the same, Structure, binary data and password handling is different, engine dependant.
+* [x] Fix themes. Themes don't display and set consistently the pages throughout.
+  * Login page should use standard default or last set theme.
+  * All provided themes to have background image.
+  * Stats page needs, new layout.
+* [x] Add AUTO_LOGOFF setting. Default is no.
+  * On session expired makes the page semi usable and still visible.
+* [x] RTF load of the zero document if present. When RTF attaching to a new log, you can save the rtf,
+  it is called a zero document (not assigned), as the log hasn't been saved yet. This reload can be useful, as it is always stored...
+* [x] Implement backup/restore on Pg based data. Restore only partially works from older backup.
+* &#10004; Bug 35. SQL migration, version update, not working for PG based databases.
+* &#10004; JS - Event, on expense sum in log numbers found at beginning of lines.
+* &#10004; Update to CNF v.2.2, branch to $RELEASE_VER = 2.3, Earth Stage initial.
+  
+#### Not Urgent New Development ( In Planning/Suggestions )
+
+* Plugins
+  * Perl files enabled by being including them in main.cnf file under the <<PLUGINS<>>> list, and placed in the plugins directory.
+  * This plugin perl file is then be executed, to provide auto installation and checks.
+  * The plugins are further stored and made available to the system via database settings and dynamics.
+    * Removed entry in config file, will also start the process of removing it from the database settings.
+* Config file custom SQL tables.
+* Bank Statements Page
+  * Import/Display by Account
+    * CSV Format, stored in separate table.
+      * BANK_ACCOUNT  = ID, BANK, ACC_NAME(16), ACC_NUMBER(20) 
+      * BANK_TRANSACTIONS = ACC_ID, DATE, AMOUNT, DETAILS(64)
+* Email selected log entries.
+  * Sendmail must be working, and configuration file has an jason property <<JS_SENDMAIL>>>.
+  * Selection on foot might need an menu instead of buttons.
+
+ ``` JSON
+        <<JS_SENDMAIL< 
+        {
+          From:""
+          To_emails_choise:[
+            "1","2","3"
+          ]
+          mailhub: default
+          body_head:""
+          body_foot:""
+        }
+        >>> 
+ ```
+
+* Migration from SQLite to Server SQL script provided.
+  * This one will use the new config settings in main.cnf to migrate log data from and SQLite local db file.
+* Global view overrides. These get generated in the db if set on logon. And used instead of the normal view.
+* Overrides must always show todays log entries, regardless of criteria.
+* VIEW_OVERRIDE_SYSLOGS={0/1}, anon if set 1-true, will hide older than today system logs. Doesn't affect category and keywords searches/views.
+* VIEW_OVERRIDE_WHERE={""/{your where clause}}, allows your own WHERE override. Doesn't affect category and keywords searches/views.
+  * i.e. <<VIEW_OVERRIDE_WHERE<"RTF==1 OR STICKY==1">>>, will show only these type of log entries.  
+  * i.e. <<VIEW_OVERRIDE_WHERE<"DATE > DATE('now','start of month', '-2 month')">>>, will show only logs from current last two months.
+  * i.e. <<VIEW_OVERRIDE_WHERE<"ID_CAT!==(select id from cat where name like 'system log')>>>, same as setting <<VIEW_OVERRIDE_SYSLOGS<<1>>>.
+* Page section plugins.
+  * Appears and is rendered in page section, via dynamic loading, json rendered html, server side in real time.
+  * Configured in main.cnf.
+  * Accessed via side menu to appear.
+  * Default is to link to documentation, and about page.
+  * Plugin behavior is to be invoked in real time on demand, utilizing in most complex scenario JSON as medium.
+    * i.e. News or service feed, special view, file interaction.
+  
+### v.2.2 SUN STABLE
+  
+* Search keep in session should preserve and always set options as selection till it is ticked.
+  * Reset Whole View to page view, should still set the search option till it is ticked.
+  * Unticking Keep in Session should be honored on next browsing.
+  * Keyword should be stripped from, punctuations.
+* Deleting multiple items, RTF, should mark for vacuum on next logout.
+* Order by Categories added to search/view.
+* Search on multiple words should rank by encounter of words specified and display first. (That one is difficult)
+* Auto collapse/expand on multi line logs by 0-none as default. Setting to 1 or more shows only that number of lines. (That one is difficult)
+* &#10004; Send to system log, password change, backup issued, main.inf page view changes.
+* &#10004; Command line logging, server side. i.e. LifeLog/log.pl -database {name} {-alias} {-password:}
+  * Update CNFParser v.2.0.
+* &#10004; Bug 34 - DB fix in config, removes associated RTF documents to logs, for some reason.
+* &#10004; Page categories exclusion option in main.cnf. Log view server side is modified not to include excluded categories 
+older by certain amount of days, default is 0, for from today older.
+
+### v.2.1 RC1
+
+*It has been 2 years, 4 months, 8 hours, 56 minutes, and 55 seconds
+between 2018-08-22 04:13:55 **Moon Stable** production release and this
+2020-12-22 13:10:50 **Sun Stable v.2.1**, next and final is the Earth release stage.*
+
+* &#10004; Print View Selected.
+* &#10004; Config. page set session expires times has to be validated not to be under 2 minutes.
+* &#10004; Implement mapped provision of named timezones via main.inf, for cities not available in global zone list.
+  * Javascript also needs to be updated to translate this properly.
+* &#10004; PostgreSQL to be further tested. Implement server managed database.
+  * On errors sessions appear not to be closed by driver, maybe this is required and they expire?
+  * Not all sql has been translated or proper database everywhere established.
+* &#10004; Session expired should disable the log entry form.
+* &#10004; Implement log text field limit setting.  0 - Unlimited, 1024 - Default n>128 as minimum size.
+* &#10004; System configuration variables should be sorted and listed by name and grouped by type. Anons presented at the bottom.
+* &#10004; Provide office share public link for main.inf linked categories, No login required but no log creation or search is possible.
+* &#10004; main.inf - Make the dbname uniform across all source types with Settings, as backups use the file format, not the database name.
+* &#10004; Edit button to show if hidden is the log entry section.
+* &#10004; Implement title bolding on logs using markdown, so tags can be avoided, for multiline logs.
+* &#10004; Multi db driver type support. Earth stage requires same SQL related code to work on at least one more DBMS type other than SQLight.
+  * PostgreSQL is the candidate as MySQL is not easy to install and bulky for all systems.
+  * Developing and adopting to MySQL or any other system is not prerogative, as it works well as it is with inbuilt simplicity.
+* &#10004; Single database, multi-user login.
+* Static pages setting for the pages directory.
+* Provide markdown text functionality to html pages. For quick vanilla plain documentation.
+
+### v.2.0 SUN RC2 Encountered
+
+* Sub users list with passwords in config to be provided, with access and category, permissions settings. Default enabled permission is Event view category.
+* [Scrapt] Multiple search views and their settings, should be preserved as last preset. Maybe even have named multiple ones in a dropdown or part of the page menu.
+  * Scrapt -> as view display is different to actual time based normal page display of records. Maybe in the future.
+* [Scrapt] Multiple category assignment to be enabled, where the first selected is the primary, others put in a separate cross reference table, parseed as hashtags maybe.
+  * Scrapt -> as many categories per log complex and not necessary as many categories per view is already there.
+* &#10004; Export to CVS button on selected logs.
+* &#10004; RTF based view of log entries.
+* &#10004; Check and test cross release migration.
+* &#10004; Minimise Log form when in View Mode.
+* &#10004; Restore of backup on different version of LifeLog should fail with detecting this in provided error.
+  * Provided Backup/Restore Specifications, and message that restoration has been invalidated as that is an invalid backup file.
+
+### v.1.9 SUN RC1 Encountered
+
+* &#10004; Hover over log entries, to make more visible what log entry is being ticked on wider screens.
+* &#10004; Implement gzip http page encoding compression of traffic.
+* &#10004; Autocompletion picks up long false words, in html and code type logs.
+
+### v.1.8 SUN STABLE Encountered/Fixed
+
+* &#10004; Implement View by Amount Type, reset button for categories.
+* &#10004; Introduce a new column header background colour.
+* &#10004; Autologin bypasses actual wanted login.
+  * This is bug 20.
+
+### v.1.7 MOON STAGE Encountered?Fixed 
+
+* &#10004; Database backup tgz ball, upload and download button on config page.
+  * You must have the password you logged in to unscramble the backup.
+    * Alias -> pass -> backup password. Information required.
+* Application log needed in the background for System based logs.
+* New CNF Development.
+  * &#10004; Migration is currently hard to maintain and data export and import is wrongly reliant to CVS.
+  * &#10004; Anons to be enabled.
+  * CVS imports/exports of full database are to be made obsolete in the future. It is not safe.
+    * This will be still available via command line.
+* RTF Documents header lister page, to provide for, new log entry assignment, deletion, edits.
+  * There isnt and shouldn't be a full relationship to docs. Hence new log entries can link to existing, docs.
+* &#10004;Use the pages cat_list meta data elements for dealing with categories in java scripts.
+* &#10004; New Categories dropdown, grouping in ascending order and presenting in columns of five at a time.
+* &#10004; Sticky rows bg colour, to be a shade different to other normal rows.
+* &#10004; Login system log and out to be implemented. With system variable $TRACK_LOGINS to disable/enable.
+* &#10004;Change all code to use Exceptions as project is becoming hard to manage.
+  * The harder it is to foresee possible problems, the less likely you will add unnecessary complexity. -- bud@
+* &#10004; Notes to Log table should be other way in relationship direction.
+  * LOG.ID_RTF -> NOTES.rowid
+  * This is currently causing problems when the log renumerates, or entries are imported.
+* &#10004; In config page Categories section to appear after system settings. As less likely to be changed.
+  * System Configuration section is to be sorted. As in future it is more likelly to grow.
+* &#10004; New system setting, $VIEW_ALL_LMT=1000. To limit view all records displayed on huge databases.
+* &#10004; Provide system logs on stats page runs.
+* &#10004; Menus updated in other pages to have button look.
+* &#10004; main.cnf newer versions should have precedence to id and entry name to previously set or stored in db.
+* &#10004; Config stored list of excludes. Provide multiple excludes view.
+* &#10004; Settings module requires subroutines for debug logging and db properties access.
+* &#10004; LifeLog codebase release version upgrade tracking and procedures with older databases.
+* &#10004; JS based session logout timer warning to be implemented.
+* &#10004; Mutli new alias access flood attack security trigger implementation.
+* &#10004; Debug system settings implementation.
+* &#10004; Delete page updated to show better display of entries.
+* &#10004; Login page to identify host.
+* &#10004; Session cleanup on autologin not clearing properly.
+  * A dbfix, should clear older entries as well.
+
+### v.1.6 and less
+
+* &#10004; $CUR_MTH_SVIEW - Start view page is for current month, and the sticky set.
+* &#10004; Some System settings to be stored in session. As these are  known even before logon.
+  * i.e. $SESSN_EXPR, $RELEASE_VER, $TIME_ZONE, $LOG_PATH
+* &#10004; Various system setups, not dealing well with $ENV{'home'} in multi perl environment, releases.
+
+## Urgent FIXES and Known Issues
+
+* &#10004; CVS Export and Import has not been implemented for RTF type log entries.
+  * CVS feature has been made obsolete, it shouldn't be used.
+* &#10004; Expired sessions, swallow submits into void.
+* &#10004; Dynamic toggle of page sections, interaction fixed, bettered.
+
+## Planned New Possible Features of Minor Relevance
+
+* Plugin subpages.
+  * Configured in main.cnf
+  * Appear on menu or as dropdouwn in the header.
+  * Downloaded/Configured from the configuration page.
+* View save feature. Where you name and save to config or session a dropdown of views.
+* Fit to page log. Making log subpage scrollable rather than whole page to see the bottom.
+* Make session timeout sub pages aware via JSON.
+* Multiple category assignment table (set via hashtags and end of a post).
+* Log cards Export/Import. Send log entries via email or USB, why not?
+* Provide sub alias login that sets data visible to only a set of categories.
+  * View specific based login on a different password.
+* &#10004; Table sort in config system settings by variable name.
+* Enable automatic bold title heading for specified cattegories.
+* Theme colours to be revisited, bettered
+* Enable file attachment to log entries.
+* Enable Armour Mode
+  * In this mode settings page is disabled. And can be enabled only by System Admin.
+* Provide About button and info.
+
+## Life Log RTF Documents using Quill Javascript RTF API
+
+* Deal with export/import of RTF Documents.
+
+## Bugs
+
+### v. 2.3+ Encountered/Fixed
+
+* Bug 37 Keywords only search not wotking on detecting very old items.
+* &#10004; Bug 36.1, Introduced bug, old backup delete not working.
+* &#10004; Bug 36, DBFix not fully working on PG based install and restore not working from backups made with older versions of OpenSSL.
+  * Also, restore not working on uploaded backups, from local computer.
+  
+### v. 2.2 Encountered/Fixed
+
+* &#10004; Bug 35, Migration and version updating SQL is wrong for PG database, it doesn't have rowid's.
+* Bug 34, DB fix in config, removes associated RTF documents, for some reason.
+* &#10004; Bug 33 Changing session timeout in config to an lib. background unparsable format cause unrecoverable system error.
+  * i.e. Putting +1hr instead of +1h.
+* &#10004; Bug 32 RTF creating/saving is broken.
+
+### v. 2.1 Encountered/Fixed
+
+* &#10004; Bug 31 PostgreSQL new created log view is not being created.
+  * On  newly created database the view without the schema specified are seen as temporary views.
+* &#10004; Bug 30 Wrongly entered or modified locale can't be reset no more to an valid one.
+
+### v. 2.0 Encountered/Fixed
+
+* &#10004; Bug 29 HTML output is incorrect since introducing buffering and content compression. Browser corrects, hence it was not noticed before.
+
+### v. 1.9 Encountered/Fixed
+
+* &#10004; Bug 28 - System info stats logs not reporting host anymore.
+* Bug 27 - Restore of old backups not working anymore.
+* Bug 26 - In Chrome editing log entry not working. Something refreshes page, after 5 seconds.
+* &#10004; Bug 25 - SQLite view not properly sorting in new databases. Newer records listed last.
+  * View should order by time function desc, ascended is default.
+* &#10004; Bug 24 - Logs row sum calculation not working/wrong, with negative and positive values.
+* &#10004; Bug 23 - Delete not working in view mode.
+* &#10004; Bug 22 - Delete selection of entries not working after a while, db fix in config page required.
+* &#10004; Bug 21 - Income sum for year in stats is displayed wrong.
+* &#10004; Bug 20 - Autologin bypasses, wanted new alias login (on logoff).
+
+### v. 1.8 Encountered/Fixed
+
+* &#10004; Bug 19 - Same day datediff is displaying wrong report in time stack on the page.
+* &#10004; Issue 18 - Setting excludes for views, deliveres page but long delays with server finished exchange (page doesn't hang).
+  * The page is server delivered, if sections contain external internet links, this timeouts page browser delivery if the internet is down.
+* &#10004; Bug 17 - Editing of entries on occasions, duplicates entries.
+* &#10004; Bug 16 - Saving new log entries with rtf overides previous log entries rtf.
+  * Issue 16.1 - Currently importing of records linked to rtf notes is not supported.
+* &#10004; Issue 15 Date diff, showes upside down first range by current date with multiple selections.
+  * Range should be selected from date in selected latest to current date last as inbetween difference.
+* &#10004; Issue 14 Subpages pages links to main, restart main page session counter, making the main page fully usable.
+  * Not really a bug. Session will expire but time remaining will be displayed wrong on the main page.
+  * All subpages need either to inherit the counter, and jump user to the login screen if expired.
+  * Or update main pages timer countdown. Which is not possible if browsers back button is pressed.
+  * Pressing back button brings the page display to initial time it was loaded from.
+  * This has been now marked as an complex issue. Not worth much spending time on.
+
+* &#10004; Bug 13 - Migrated old data, linking to wrong id, db fix in config page seems to fix this.
+* &#10004; Bug 12 - Invalid login only shows db error.
+
+### v. 1.6 Encountered/Fixed
+
+* &#10004; Bug - 11 View runs, brocken since sticky feature implementation. Page record sets don't work.
+* &#10004; Bug - 10 Expense type entries don't fill amount field on edit button clicked.
+* &#10004; Bug - 09 RTF documents lost on data renumeration of log. Data fix options in config. Needs urgent revision.
+* Bug - 08 CSV imports duplicate on DB Fix in config page.
+* &#10004; Bug - 07, Editing and RTF entry, doesn't strip the attached html to view in place.
+* &#10004; Bug - 06, Invalid Time 00. Javascript error thrown, when 00am used.
+* &#10004; Bug - 05, CRLF and apostrophe replacement not working.
+* &#10004; Bug - 04, Local not picked up properly on current date.
+* &#10004; Bug - 03, Keyword search not working on words as they are categorized wrongly by other dropdown in the background.
+* &#10004; Bug - 02, Record set paging to previous page not always working. Getting stuck.
+  * This occurs on new records placed in the far past. Complex problem.
+* &#10004; Bug - 01, date validation for proper entered time, there is no 24 h.
+
+***
+
+   Document is from project ->  <https://github.com/wbudic/LifeLog/>
+
+   An open source application.
+
+<center>Life Log - Sun Stable Stage v.2.1 (2020)</center>
diff --git a/Installation.txt b/Installation.txt
new file mode 100644 (file)
index 0000000..21cf808
--- /dev/null
@@ -0,0 +1,398 @@
+*** LifeLog Requirements ***
+
+ - Web Server (any will do that supports CGI perl execution)
+ - SQLite
+ - Perl Modules (Run the provided ./install_modules.sh)
+ - git (git clone https://github.com/wbudic/LifeLog)
+
+ -- Note - Perl and some modules might take time to install
+           as they are fetched and tested for your computer.
+         - Provided sudo ./install.sh will do most stuff for you explained in this old doc.   
+
+
+
+### Obtain from  GIT repository latest stable release with:
+##
+    git clone https://github.com/wbudic/LifeLog.git
+##
+###
+
+
+# Optional install cpanm to make installing other modules easier.
+# You need to type these commands into a Terminal emulator (Mac OS X, Win32, Linux)
+
+sudo apt install cpanminus
+
+
+# Install SQLite
+sudo cpan DBD::SQLite;
+# or download latest from: https://www.sqlite.org/download.html
+# Optional but recommended install a ProgresSQL database server and driver see: Installation_ProgresSQL.txt
+
+## 
+# To compile install from source latest Perl Language Interpreter, to local home.
+# Note I do not recommended now to compile build install 
+# for the whole system, if it comes with perl. Systems can come and go. 
+# Your $HOME directory is important.
+#
+# Example:
+$ mkdir ~/dev; cd ~/dev
+$ wget https://www.cpan.org/src/5.0/perl-5.34.0.tar.gz
+$ sudo tar -xzf perl-5.34.0.tar.gz
+$ cd perl-5.34.0
+$ ./Configure -Dusethreads -des -Dprefix=~$HOME/localperl
+$ sudo make
+$ sudo make test
+$ sudo make install
+# Once it is installed in $HOME/localperl you can run:
+$ rm -rf ~/dev/perl-5.34.0
+# Modify vim ~/.bashrc to have:
+PATH="/home/will/localperl/bin${PATH:+:${PATH}}"; export PATH;
+# We use sudo to cpan install stuff for the whole system.
+# This is currently located at:
+export PERL5LIB=/usr/local/share/perl/5.30.0/
+
+
+./Configure -des \
+        -Duse64bitall \
+        -Dcccdlflags='-fPIC' \
+        -Dcccdlflags='-fPIC' \
+        -Dccdlflags='-rdynamic' \
+        -Dlocincpth=' ' \
+        -Duselargefiles \
+        -Dusethreads \
+        -Duseshrplib \
+        -Dd_semctl_semun \
+        -Dusenm \
+        -Dprefix=~$HOME/localperl
+
+
+
+## Development Environment Perl Install
+
+# Developer? Install VSCode, not from flatpack. Use Microsoft site -> https://code.visualstudio.com/
+Requirements: G++ and gcc compilers, and Gcc-4.8 GNU Compiler
+
+# Install Perl, properly, don't use the distro provided perl interpreter (might be outdated or has missing modules).
+
+This best is explained? If running under sudo and cgi based scripts, you will be using the system wide or provided installation of perl.
+If logged in shell as normal user issue, 'perl -v', you might be getting a different user updated version of it.
+To troubleshoot, you can compare, issue, '/usr/bin/perl -v', best is if both return same, version.
+Solution already provided for this is to use /usr/bin/local/perl executable which should be the latest if installing the latest perl.
+Notice - Most web server configuration files, require cgi settings to point to right perl executable.
+If still experiencing problems, running provided ./install_modules.sh was probably not issued, and could solve requirements.
+
+
+##
+sudo apt install perlbrew
+##
+#https://learn.perl.org/installing/unix_linux.html
+curl -L http://xrl.us/installperlnix | bash
+# Perl compiled based on your hardware infrastructure now, is Very Good.
+#Developer? Switch to it, and cpan modules:
+
+# Perlbrew allowes you to switch to newer (securer) patched versions of perl.
+# Example bellow builds from a $HOME/dev/perl-5.30.1.tar.gz source code archive
+#        a descent perl installation for development on your machine.
+
+perlbrew install ~/dev/perl-5.30.1.tar.gz --thread --multi --64int --64all --no-patchperl --debug
+#switch to it in a terminal.
+perlbrew use 5.30.1
+sudo apt install libperl-critic-perl
+#libperl-dev is required for the lang server
+sudo apt install libperl-dev
+sudo apt-get install zlib1g-dev
+sudo cpan Perl::LanguageServer
+
+
+NOTICE -> Above Perl installation and modules can take time as they build (get compiled) and are tested
+          using your computers configuration and hardware for optimal performance.
+          The Perl::LanguageServer, can fail in tests, as it is development specific, this can be ignored.
+
+# Install OpenSSL (Optional, used by backup routines)
+https://www.openssl.org/
+
+Avoid: sudo apt install openssl
+Install preferably by building. Older versions have not all options.
+i.e.:
+curl -c https://www.openssl.org/source/openssl-1.1.1l.tar.gz  | tar -xz
+
+cd openssl-1.1.1l;
+export LD_LIBRARY_PATH=/usr/local/lib:/usr/local/lib64
+./configure linux-x86_64 --prefix=/usr/local --openssldir=/usr/local
+make
+make test
+sudo make install
+cd ..
+rm -rf openssl-1.1.1l
+
+
+# LifeLog Required Perl modules.
+
+# Since 2.4 To get to work with latest installed perl version, (not the roots/system wide one).
+perl -v
+#v5.30.0 or grater is preferred.
+
+# Following is a way to install modules if not having sudo access.
+perl -MCPAN -e 'install DBI'
+perl -MCPAN -e 'install CGI'
+perl -MCPAN -e 'install CGI::Session'
+perl -MCPAN -e 'install DBD::Pg'
+perl -MCPAN -e 'install Syntax::Keyword::Try'
+perl -MCPAN -e 'install DateTime::Format::SQLite'
+perl -MCPAN -e 'install Capture::Tiny'
+perl -MCPAN -e 'install Text::CSV';
+perl -MCPAN -e 'install Regexp::Common'
+perl -MCPAN -e 'install Gzip::Faster'
+perl -MCPAN -e 'install CGI:Session'
+perl -MCPAN -e 'install Crypt::CBC'
+perl -MCPAN -e 'install Crypt::Blowfish'
+
+
+
+
+# Following is instruction is for system wide perl installation.
+# In most cases the following will work fine if having sudo access, and no intension to upgrade perl.
+# On some systems, is you have the PERL5LIB  env. variable set, installed modules might not be found.
+# Without setting this env. var. explicitly, normal location of these should be the /usr/local/share/perl/5.3* directory, available to all users.
+# Without sudo running "cpan" you might have to set this PERL5LIB={path} in .bashrc to include your users home directory.
+#
+###
+# since 1.8 switched to:
+# before was -> sudo cpanm Try::Tiny;
+sudo cpan Exception::Class
+sudo cpan Log::Log4per
+sudo cpan Syntax::Keyword::Try
+
+sudo cpan DateTime;
+sudo cpan DateTime::Format::Human::Duration
+sudo cpan DateTime::Format::SQLite;
+sudo cpan Text::CSV;
+sudo cpan Number::Bytes::Human;
+sudo cpan Gzip::Faster;
+sudo cpan Number/Bytes/Human.pm;
+sudo cpan Regexp::Common;
+sudo cpan JSON;
+sudo cpan Switch;
+sudo cpan IPC::Run;
+sudo cpan Syntax::Keyword::Try;
+sudo cpan Text::Markdown
+sudo cpan Crypt::Blowfish;
+sudo cpan Compress::Zlib;
+sudo cpan IO::Compress::Gzip;
+sudo cpan IO::Prompter;
+sudo cpan IO::Interactive;
+sudo cpan -T DBD::Pg;
+sudo cpan CGI CGI::Session;
+
+
+
+
+#Install next after installing desired ciphers, we use Blowfish only.
+sudo cpan Crypt::CBC;
+
+#Install DBI module
+sudo cpan DBI;
+sudo cpan DBD::SQLite;
+#For PostgreSQL see Installation_PostgreSQL.txt before installing perl driver:
+#cpan DBD::Pg;
+
+#Final Perl Installation Notes
+
+This perl setup might take time and efforts. But, it is worth it.
+You get it build and tested professionally, based on your hardware.
+Platforms supported, Windows, Unix (all), Mac.
+
+Installing perl as an developer, requires no sudo.
+But hence can't run server (system level) like.
+
+If developer and running perlbrew, recommended is to use
+cpan to install required modules.
+
+#Upgrade Instructions
+
+To upgrade to newer version of this software requires data migration.
+Before installing newer version scripts, perform an data export.
+
+cd /home/{user}/thttpd_dev/dbLifeLog
+sqlite3 -csv data_log.db "select * from LOG;" > current_log.csv
+
+## You should run module install, after every upgrade/update just in case something is missing:
+#
+#
+./install_modules.sh
+#
+## Note, install modules doesn't require any restarts or reboots, this is perl baby.
+## However, allow some time as it also tests these, to make sure all is running fine.
+
+##Install LifeLog Independently
+cd /home/{user}/
+git clone https://github.com/wbudic/LifeLog
+mkdir /home/{user}/thttpd_dev/dbLifeLog
+chmod +x /home/{user}/thttpd_dev/cgi-bin/*.cgi
+
+Copy from /home/{user}/LifeLog/htdocs/cgi-bin to /home/{user}/thttpd_dev/htdocs/cgi-bin
+if doing development. Copy also the /home/{user}/LifeLog/.git to /home/{user}/thttpd_dev/
+
+Access the webserver cgi-bin. http://localhost:8080/cgi-bin/main.cgi
+(this might redirect to login.cgi or config.cgi in the future)
+
+##Install LifeLog Dependably (not automatic, manual developer way)
+cd /home/{user}/
+git clone https://github.com/wbudic/LifeLog
+run thttpd with:
+cd LifeLog; ./startDevWebServer.sh
+
+##Import CSV Exported File
+This requires all CGI working. As it will create a brand new database for you.
+Once created you must import the from above example current_log.csv
+cd /home/{user}/thttpd_dev/dbLifeLog
+see: http://www.sqlitetutorial.net/sqlite-import-csv/
+
+Example (data_dev1_2_log.db would be created as the latest version by the CGI created):
+cd /home/{user}/thttpd_dev/dbLifeLog
+sqlite3 data_dev1_2_log.db
+sqlite> .mode csv
+sqlite> .import current_log.csv LOG;
+sqlite> select * FROM LOG;
+sqlite>.quit
+
+Note exporting/importing of other tables is similar, but not recommended.
+
+
+#Current Latest Development Branch
+git fetch && git checkout dev.1.3
+
+
+#Install thttpd_dev as an Linux System Service
+Not recommended, but the thttpd development environment for LifeLog
+can be installed to start on reboot.
+
+sudo cp startDevWebServer.sh  /etc/init.d/
+
+Modify the following to the path of your development environment
+where thttpd.conf file is in /etc/init.d/startDevWebServer.sh
+
+Modify line -> cd /home/will/thttpd_dev
+vim /etc/init.d/startDevWebServer.sh
+
+Install as service with:
+sudo update-rc.d startDevWebServer.sh defaults
+
+
+#Developer Notes
+
+* For vscode. Before installing perl, and perl::LanguageServer extension.
+  *$ sudo cpan -r Perl::LanguageServer
+  * This will recompile and test the language server with the system default installation of perl you have.
+  * With out the -r option, you might have experimental features compatibilities issues.
+
+##Automate GIT Push
+
+vim your ./LifeLog/.git/conf file to include:
+ [remote "origin"]
+       url = https://{user}:{password}github.com/wbudic/LifeLog.git
+  ...
+Where {user} and {password} are your git login credentials.
+Don't worry, these credentials are not uploaded. And someone must have
+access to your computers login to specifically hack to obtain them.
+
+##Troubleshoot Data Problems
+
+To reset factory defaults, for categories and configuration.
+You might need to delete data in some tables.
+Issue either the bellow statements externally.
+
+sqlite3 data_{alias}_log.db "delete from CAT;"
+sqlite3 data_{alias}_log.db "delete from CONFIG;"
+
+Subsequent versions of LifeLog software might require this operation.
+You can export and modify your added categories via an CSV file.
+Making sure the ID first column across all entries has a unique number.
+
+#Install AUTO_LOGIN
+On a personal network or small network, you might prefer to auto login when browsing to the LifeLog,
+instead of entering every time user name and password. It makes sense, as you are the only one using it,
+don't need that extra security.
+
+Other scenario is that the LifeLog in an Office Environment is accessed by multiple people.,
+using same alias and password. Don't need to have any extra security as the alias and password is known.
+
+
+Modify, in dbLifeLog/main.cnf
+Look for <<AUTO_LOGIN<>
+And change have your general login credential's. i.e.:
+<<AUTO_LOGIN<admin/password_123>
+
+Then login one last time, and enable AUTO_LOGIN at the configuration page.
+
+
+
+## Install tiny thttpd web server ##
+
+Note - This is still recommended, if not willing to configure or have to run
+a heavier more complex web server configuration.
+The recommendation is to skip this webserver and install LightHTTPD, 
+which is more modern and maintained.
+
+
+https://acme.com/software/thttpd/
+
+wget https://acme.com/software/thttpd/thttpd-2.29.tar.gz
+tar -xvzf thttpd-2.29.tar.gz
+cd thttpd-2.29/
+sudo groupadd www
+./configure
+sudo mkdir /usr/local/man/man1
+sudo make
+sudo make install
+
+#rm thttpd-2.29.tar.gz
+#rm -rf thttpd-2.29
+
+Create an mkdir ~/thttpd_dev directory.
+
+Run server using this config file, where {user} is your home login location.
+
+
+# This section overrides defaults
+dir=/home/{user}/thttpd_dev/htdocs
+user={user}
+logfile=/home/{user}/thttpd_dev/log/thttpd.log
+pidfile=/home/{user}/thttpd_dev/run/thttpd.pid
+# This section _documents_ defaults in effect
+port=8080
+# nosymlink# default = !chroot
+# novhost
+# nocgipat
+# nothrottles
+host=0.0.0.0
+charset=utf-8
+cgipat=**.cgi
+
+After modifying the thttpd.conf
+you'll have to modify the startDevWebServer.sh to reflect your setup before running the script.
+
+The full URL to the LifeLog is the following link (if not working try without cgi-bin, and proceed with further installation):
+#
+#
+         http://localhost:8080/cgi-bin/
+#
+#
+
+## Network Troubleshooting ##
+
+With some server software/hardware the following setting, might help if experiencing an lag.
+
+### Modify sysctl.conf:
+sudo vim /etc/sysctl.conf
+
+So it lists later:
+sudo sysctl -p
+
+net.ipv4.tcp_no_metrics_save = 1
+net.core.netdev_max_backlog = 5000
+net.ipv4.tcp_rmem = 10240 87380 12582912
+net.core.wmem_max = 12582912
+net.core.rmem_max = 12582912
+net.ipv4.tcp_window_scaling = 1
diff --git a/Installation_LightHTTPD.txt b/Installation_LightHTTPD.txt
new file mode 100644 (file)
index 0000000..058e443
--- /dev/null
@@ -0,0 +1,80 @@
+# Compile/Install LightHTTPD with SSL Support
+# wget https://download.lighttpd.net/lighttpd/releases-1.4.x/lighttpd-1.4.54.tar.gz
+
+sudo apt install lighttpd
+
+cd ~/dev/lighttpd-1.4.54
+tar xvzf lighttpd-1.4.54.tar.gz
+sudo apt autoremove -y
+sudo apt install intltool -y
+sudo apt install pcre-config -y
+sudo apt install build-essential -y
+sudo apt install libssl-dev -y
+sudo apt install libpcre3-dev -y
+sudo apt install libbz2-dev -y
+sudo apt install libssl-dev -y
+
+./configure --prefix=/usr/local/lighttpd --with-openssl --with-sqlite --with-pgsql
+make
+sudo make install
+
+#check SSL enabled with:
+lighttpd -V
+
+## Create Selfsigned SSL Certificate
+
+cd ~/dev
+openssl req -x509 -newkey rsa:4096 -sha256 -days 3650 -nodes \
+  -keyout elite.key -out elite.crt -subj "/CN=elite.net" \
+  -addext "subjectAltName=DNS:elite.net,DNS:www.elite.net,IP:192.168.1.45"
+
+openssl req -x509 -newkey rsa:4096 -sha256 -days 3650 -nodes \
+  -keyout elite.key -out xip.crt -subj "/CN=104-225-141-231.cloud-xip.com" \
+  -addext "subjectAltName=DNS:104-225-141-231.cloud-xip.com,IP:104.225.141.231"
+
+
+cat elite.key elite.crt > elite.net.pem
+
+cat xip.key xip.crt > xip.com.pem
+
+## Setup virtual Host with SSL
+
+To set up Virtual Host with SSL, edit lighttpd config file /etc/lighttpd/lighttpd.conf with the following values.
+
+#Add "mod_openssl" to server module list.
+server.modules   = ( "mod_access",
+                     "mod_setenv", 
+                     ...
+                     "mod_openssl"
+)
+
+$SERVER[“socket”] == “:443” {
+
+ssl.engine = “enable”
+ssl.pemfile = “/home/will/dev/elite.net.pem”
+
+# ssl.ca-file = “/etc/lighttpd/ssl/CA_issuing.crt”
+
+server.name = “elite.net”
+server.document-root = “/sites/vhosts/elite.net/public”
+server.errorlog = “/var/log/lighttpd/elite.net.error.log”
+accesslog.filename = “/var/log/lighttpd/elite.net.access.log”
+
+}
+
+## Start "lighty" with -D option for interactive console trouble shooting and testing.
+
+/usr/sbin/lighttpd -D -f  ~/dev/LifeLog/lighttpd.conf
+
+
+## Run as service, we don't want default: lighttpd -D -f  /etc/lighttpd/lighttpd.conf
+
+sudo systemctl start lighttpd -D -f  /home/will/dev/LifeLog/lighttpd.conf
+sudo systemctl enable lighttpd
+sudo systemctl status lighttpd
+
+## Optional Enable as separate service, so it runs always, after reboot too.
+sudo systemctl link /home/will/dev/LifeLog/LifeLogLighttpd.service
+sudo systemctl enable LifeLogLighttpd
+sudo systemctl start LifeLogLighttpd
\ No newline at end of file
diff --git a/Installation_PostgreSQL.txt b/Installation_PostgreSQL.txt
new file mode 100644 (file)
index 0000000..108991e
--- /dev/null
@@ -0,0 +1,161 @@
+# Notes
+
+PostgreSQL Server is a full database service solution (RDBSM). Handling interaction, like multiple enterprise schemas, databases, users and backups.
+These all are and can be handled outside the scope of the LifeLog application.
+However, it is not required or recommended to have a fully managed database system service, just to use for the LifeLog app.
+
+
+Modify the following anon driver property tag in dbLifeLog/main.cnf to specify:
+<<DBI_SOURCE<DBI:Pg:host=localhost>
+
+The alias is by default assumed the actual database name as well as the user.
+
+Modify the following anon property, to have the SQL Server provide multiple users as different aliases for the loging into a specified single database.
+<<DBI_MULTI_USER_DB<0>
+to something like, to make logins now for the database users:
+<<DBI_MULTI_USER_DB<lifelog>
+Where 'lifelog' is the server managed database.
+
+Hope all works for you, and happy logging!
+
+
+# Install PostgreSQL
+sudo mkdir /usr/include/postgresql
+## Create the file repository configuration:
+sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
+
+## Import the repository signing key:
+wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
+
+## Update the package lists:
+sudo apt-get update -y
+sudo apt upgrade -y
+
+## Install the latest version of PostgreSQL.
+## If you want a specific version, use 'postgresql-12' or similar instead of 'postgresql':
+sudo apt-get -y install libpq-dev
+sudo apt-get -y install postgresql-12
+
+## Optional -> Enable port 5432 for PG server for local network on server.
+sudo uwf allow 5432/tcp
+sudo vim /etc/postgresql/12/main/postgresql.conf to modify--> listen_addresses = '*'
+sudo vim pg_hba.conf ->
+host    all             all              0.0.0.0/0                       md5
+host    all             all              ::/0                            md5
+
+# New PG version: If want remote client access add in server /etc/postgresql/14/main/pg_hba.conf:
+host    all             all             {client-server-access-ip}/24      scram-sha-256
+
+
+sudo service postgresql restart
+
+## Install required libpq-dev to compile test perl driver, later. 
+sudo apt install libpq-dev
+
+## Install perl driver.
+sudo cpan DBD::Pg;
+
+
+# To assign default Postgres SQL user roles.
+sudo -u postgres psql -c "ALTER USER  postgres PASSWORD 'postgres';"
+sudo -u postgres psql -c "CREATE ROLE lifelog WITH LOGIN SUPERUSER CREATEDB CREATEROLE INHERIT NOREPLICATION CONNECTION LIMIT -1 PASSWORD 'xxxxxxx'";
+sudo -u postgres psql -c "CREATE DATABASE lifelog;"
+sudo -u postgres psql -c "grant all privileges on database lifelog to lifelog;"
+
+
+
+## Start stop Postgres SQL
+sudo service postgresql start
+
+## Manually Obtain dep. if encountering lib problems. with i.e.:
+wget https://apt.postgresql.org/pub/repos/apt/pool/main/p/postgresql-12/libpq-dev_12.4-1.pgdg20.04+1_amd64.deb
+dpkg -i libpq-dev_12.4-1.pgdg20.04+1_amd64.deb
+###Than run again driver install
+sudo cpan DBD::Pg;
+
+# Installing pgAdmin4
+sudo apt install python3-pip
+sudo python3 -m pip install https://ftp.postgresql.org/pub/pgadmin/pgadmin4/v4.30/pip/pgadmin4-4.30-py3-none-any.whl
+
+# Data directory location for backup
+sudo -u postgres psql -c "SHOW data_directory;" | grep -G /
+## Quick tar all
+sudo tar czvf ~/postgresql.db.backup.tar $(sudo -u postgres psql -c "SHOW data_directory;" | grep -G /)
+
+# Backup/Restore
+# You must setup an ~/.pgpass, and change the following cat string to your systems setup.
+
+cat "hostname:port:database:username:password" >> ~/.pgpass; chmod 600 ~/.pgpass;
+
+# Backup with:
+pg_dump --file "~/dev/LifeLog/dbLifeLog/bck-pg-$DB_NAME.sql"  $DB_NAME
+
+# Now you can run your backup utility. To include your ~/dev/ directory.
+# Or use and setup mine @see -> https://github.com/wbudic/B_L_R_via_sshfs
+# p.s. If this saved you one day, let me know. :)
+
+# Restore with:
+psql $DB_NAME < "~/dev/LifeLog/dbLifeLog/bck-pg-$DB_NAME.sql"
+
+###############################
+    Important pgAdmin4 Notes
+###############################
+
+What pgAdmin4 and their documentation and installation doesn't describe, 
+that the default web server is python based. The web based package will install the apache web server.
+You most likely don't want that. And the pgAdmin-desktop, you possibly don't need that.
+(Can use any browser instead) :)
+
+I recommend to only install pgAdmin via python pip utility ONLY.
+
+
+pip install flask
+
+To run locally (you):
+
+$ sudo mkdir /var/lib/pgadmin
+$ sudo mkdir /var/log/pgadmin
+$ sudo chown $USER /var/lib/pgadmin
+$ sudo chown $USER /var/log/pgadmin
+$ python3 -m venv pgadmin4
+$ source pgadmin4/bin/activate
+(pgadmin4) $ pip install pgadmin4
+...
+(pgadmin4) $ pgadmin4
+NOTE: Configuring authentication for SERVER mode.
+
+Enter the email address and password to use for the initial pgAdmin user account:
+
+Email address: user@domain.com
+Password: 
+Retype password:
+Starting pgAdmin 4. Please navigate to http://127.0.0.1:5050 in your browser.
+ * Serving Flask app "pgadmin" (lazy loading)
+ * Environment: production
+   WARNING: Do not use the development server in a production environment.
+   Use a production WSGI server instead.
+ * Debug mode: off
+
+# Have you forgotten master password to enter pgadmin4? Recreate by:
+$ rm -rf /var/lib/pgadmin/*.db
+$ pgadmin4
+
+Before upgrades first:
+
+(Notice - the previous user and password might not work anymore after:)
+pip uninstall pgadmin4
+pip install pgadmin4
+
+
+
+
+(Sorry, I use, but don't program in python, to document here any further)
+
+My Criticism:
+From admin perspective, anything not systemd configurable, tend leave files allover the place.
+This makes things harder to manage. Local user installed or developer system, are different thing on linux.
+PostgreSQL as database system is server, and pgAdmin only a client. Don't mix in installation, two different placings.
+This is neither secure, neither healthy to trouble shoot.
+
+
+
diff --git a/Life Log.mm b/Life Log.mm
new file mode 100644 (file)
index 0000000..9a27958
--- /dev/null
@@ -0,0 +1,4 @@
+<map version="freeplane 1.7.0">
+<!--To view this file, download free mind mapping software Freeplane from http://freeplane.sourceforge.net -->
+<node TEXT="Error while parsing file:/home/will/dev/LifeLog/README.md" FOLDED="false" ID="ID_1595600632" CREATED="1612332911147" MODIFIED="1612332911147"/>
+</map>
diff --git a/LifeLogLighttpd.service b/LifeLogLighttpd.service
new file mode 100644 (file)
index 0000000..b51f27e
--- /dev/null
@@ -0,0 +1,14 @@
+[Unit]
+Description=LifeLog Lighttpd Daemon
+After=network-online.target
+
+[Service]
+Type=simple
+PIDFile=/run/lighttpd.pid
+ExecStartPre=/usr/sbin/lighttpd -tt -f /etc/lighttpd/lighttpd.conf
+ExecStart=/usr/sbin/lighttpd -D -f /home/will/dev/LifeLog/lighttpd.conf
+ExecReload=/bin/kill -USR1 $MAINPID
+Restart=on-failure
+
+[Install]
+WantedBy=multi-user.target
diff --git a/LifeLogLighttpd_8080.cnf b/LifeLogLighttpd_8080.cnf
new file mode 100644 (file)
index 0000000..c8ea11c
--- /dev/null
@@ -0,0 +1,37 @@
+#ExecStart=/usr/sbin/lighttpd -D -f /home/will/dev/LifeLog/lighttpd.conf
+server.document-root = "/home/will/dev/LifeLog/" 
+
+server.port = 8080
+
+server.username = "will" 
+server.groupname = "will" 
+
+server.modules = (
+#"mod_access",
+"mod_accesslog",
+#"mod_auth",
+"mod_expire",
+"mod_compress",
+"mod_redirect",
+"mod_setenv",
+"mod_rewrite",
+"mod_alias",
+"mod_cgi"
+#"mod_openssl"
+)
+mimetype.assign = (
+  ".html" => "text/html", 
+  ".txt" => "text/plain",
+  ".jpg" => "image/jpeg",
+  ".png" => "image/png" 
+)
+
+static-file.exclude-extensions = ( ".ico" )
+index-file.names = ( "index.html" )
+server.dir-listing = "enable"
+
+$HTTP["host"] == "192.168.1.44" {
+#  server.document-root = "/var/www/servers/www2.example.org/pages/" 
+server.document-root = "/home/will/dev/LifeLog/htdocs" 
+}
+
diff --git a/README.md b/README.md
new file mode 100644 (file)
index 0000000..0e7fdee
--- /dev/null
+++ b/README.md
@@ -0,0 +1,127 @@
+# Life Log
+
+Web Application that keeps an everyday CGI accessible log of database entries of various categories.
+Preferably on a small inexpensive server connected to your local network.
+
+Written in Perl, easy to implement and modify.
+
+Latest stable version is **2.5** in **SUN** stage.
+
+## What is new in this release?
+
+* Has demo and test site [test site](https://lifelog.hopto.org) for entering EARTH ready stage.
+* Can be now installed further to an PostgresSQL Database System.
+ * Backups/Restore fully integrated, between SQLite and PostgresSQL.
+* Bettered user Interaction.
+  * i.e. amount if blank will apply the mini calculator if it detects numbers in log. At the begging of lines.
+* Updated Configuration (to CNFParser v.2.2) and Statistics pages.
+ * Added several options and tweaks.
+ * Minor Data structure and migration adopted.
+* Themes have been upgraded.
+* RTF note taking revisited and tested.
+
+
+## PC Requirements
+
+* Any Operating System
+* Processor 1.2+ GHZ or better, 2+ cores.
+* Only 2 GB+ physical.
+
+Setup is requiring some Perl/Admin knowledge to install and enable, and tweak this application. The main application sources are located in the ../htdocs/cgi-bin directory.
+Instructions are provided.
+
+### Quick Setup
+
+* After downloading this application and installing in a directory (default is **~/dev**), which both can be done with:
+  * ```git clone https://github.com/wbudic/LifeLog.git```
+    * Check here for further [instuctions](./Installation.txt).
+  * Before modifying any configuration, run the module installation and testing process.
+    * ```./install_modules.sh```
+    * This might be necessary after even upgrades.
+    * Upgrades support preserving of data, and migration to any possible new data structures, automatically.
+    * Rolling back to an previous version even if not expected, it is not affected by any new modules you might have installed, down the track.
+
+## What is the purpose of having this log kept?
+
+Here are some things that come to mind:
+
+* Allows you to keep an organized historical log of every day and time events.
+* All logs are categorized, easy to search, view modify.
+* Only latest and last entries are listed of the current, which usually is of interest.
+    ** Special log entries can be made sticky on top to be listed, and in future dated logs can be added, for what ever reason or flow.
+* Fast search based on categories, keywords, from to date, all integrated.
+  * Historical view of data as such is not cluttered by none relevant log entries. Which is a common problem in spreadsheets.
+  * Export/DateDiff/Print selected log entries.
+  * Need to compare current purchase, with any last times of the same. Be it in days or cost, total of the expense? Now you can.
+* Optionally assign accounting values to log entries, is it an asset, income or expense?
+  * These are per page calculated.
+  * View through the static page your logged current income and expense, for the current year.
+    * Your Expense there is of interest. No?
+      * Statics page also gives you runtime information of your server and log.  
+* RTF documents can be attached to an log.
+  * These range from simple to further more styled documentation of the log entry.
+  * Web snippets can be copied and pasted. The Reach Text Format is real a document object, stored in one place, with others.
+  * Images added to RTF can be links or virtually embedded, making it part of you db type file.
+* Having an vast historical log, it is easy to backup and transport.
+* To access the log, security is applied based on alias.
+  * Backup and Restore is user or alias specific, so it is not possible to restore from another alias db into yours, to view data.
+  * Backup is inbuilt, you make one, if unsure if deleting and rampaging and exploring with the log, might make you loose data.
+  * Each alias creates its own log database, so if working on something specific, this you use to that by alias separately can access/share.
+    * In turn this database configuration can have its own list of categories, it is independent.
+    * All is unique and configurable in its own instance. Defaults are provided by this applications in an custom unique fast configuration file system.
+      * i.e. The main.cnf is used with own bummed configuration parsing routines, all part of this applications program, you have the code.
+      * The configuration system here is rare. As it takes into account three states of preservation of concerns.
+        1. System and application provided default. (Application release defaults, gets overridden on app code update.)
+        2. Application own default. (Application in code provided defaults, has someone deleted/damaged the text config file?)
+        3. User set configuration. (Application, user set, added, amended in database configuration, must be preserved on software or release update.)
+* Interaction and configuration is user friendly, provided in the interface, no need to access a server located main.inf file, for most parts.
+* Data migration on software updates are automatically provided.
+  * Data structures and footprint is tiny.
+  * Amount of data a log can contain is unlimited.
+    * You only browse in a small view sections of it.
+* Data is stored in a standard SQL based database.
+  * System admins, database developers, managers, large or small; will find this useful in case they need to do something with it, in the future or current situation.
+  * Web developers with no Perl coding skills, can access and modify the HTML containing .cgi files and modify them as needed, for simple edits.
+    * All relevant *perl code* and HTML is in one file per web page, shared settings, configuration, session, parameter names, constance's, in one place, not scattered around in several files.
+* **Perl** is used to deliver the pages and all the interaction.
+  * It is being interpreted using libraries that directly link to fast system routines.
+    * Nothing unnecessary is loaded or searched for, to provide execution on the fly.
+    * There is no waste on reference to reference in memory, referencing an instance, that references the actual address.
+    * You don't need virtual machine loading, path resolving, then encapsulated traverse on complex object structure being created, to start the program execution. However, it is necessary unfortunate, that other languages have to do that.
+
+## Life Log version v.2.+
+
+* Mulitple SQL database support ready and tested, currently PostgreSQL, LightSQL (default).
+* Data searches, views, updated, enhanced and upgraded.
+* Migration upgraded and test.
+* Cross version releases, automatic migration of data and structures.
+* Tested and provided also now installation instruction for HTTPS based webserver lighty.
+* Tested and working now on ubuntu, debian and mint distros.
+  
+## Life Log version v.1.8
+
+* Automated install module script **`./install_modules.sh`**
+* Has Secure Backup/Restore. Providing accurate full data restore and merging with existing for live databases.
+* Now with a distinct data page and view mode.
+* New category selection, storing approuch.
+* Better and more efficient application configuration and setup.
+* Numerous fixes, and better exception handling.
+
+## Life Log version 1.7
+
+* Views updated, having option to exlude by category now, during the session logging.
+* New system configuration options. i.e. $DEBUG for some sql statements.
+* Server system based snapshot logs, on stats invocation.
+* Server indentifier on login.
+
+## Life Log version 1.5+
+
+* Ritch Text Documents can be attached to Logs.
+* Theme support. Change the look and feel. From the congiguration page.
+* Expenses and Income totals, various new calculations.
+* LTags inclusion, format and output better information.
+* Better interactivity.
+
+![Sample](VS-on-METABOX-42.png)
+
+![Sample](VS-on-METABOX-34.png)
diff --git a/ReleaseTestCheckupList-v-2.2.md b/ReleaseTestCheckupList-v-2.2.md
new file mode 100644 (file)
index 0000000..c827158
--- /dev/null
@@ -0,0 +1,64 @@
+# Life Log Interactive Test Checklist
+
+## Main Page
+
+### Page Display/Functionality
+
+- &#9745; Menu, Links, interaction working.
+- &#9745; Show/Hide forms, menu working.
+- &#9745; Log number displayed per page ($REC_LIMIT), forward, back, top, end.
+- &#9745; Calculations are correct.
+- &#9745; Test look and feel on different browsers.
+- &#9745; Check Export select, sum selected.
+- &#9745; Date Diff button.
+- &#9745; Select All, Unselect All.
+- &#9745; Delete Selected.
+
+### Log Form
+
+- &#9745; Date,log,category entry, validation.
+- &#9745; Log entry time zone, and order, properly displayed.
+- &#9745; Help clouds, display and position.
+- &#9745; Sticky log entries working and showing on top.
+- &#9745; Check RTF document creation, saving. RTF doc. pane showing with menu.
+
+
+### Search Form
+
+- &#9745; Date dialogs showing.
+- &#9744; Each View button working, page getting into view mode.
+- &#9744; Keywords dropdown assist working.
+- &#9744; Categories included and excluded with key words narrowing working.
+
+### RTF Documents
+
+- &#9744; Are saving and linking to an log entry.
+- &#9744; Are being deleted if log entry is deleted.
+- &#9744; Menu showing, check text formatting, colours, fonts, styles is working.
+- &#9744; Check if RTF documents are backed up restored.
+
+### Config Page config.cgi
+
+- &#9745; Look & Feel, autonom variables, like release version showing at end of System Configuration, clustered as edit enabled.
+- &#9745; Editing and changing works.
+- &#9744; Categories, adding, deleting, renaming works.
+- &#9744; Database fixes all work.
+- &#9744; Does a database fix issued, reassigns also documents to new remunerated log entries.
+- &#9744; Backup/Restore working, security around it also correct and works.
+
+### Configuration Check main.cnf
+
+- &#9745; Autologin works.
+- &#9745; Auto Timezone setting.
+- &#9745; Timezone Mapping.
+- &#9745; Backup disabled/enabled works.
+- &#9745; Database source change works.
+- &#9744; Central database external users access works.
+
+---
+:sleeping:
+| Unchecked | Checked |
+| --------- | ------- |
+| &#9744;   | &#9745; |
+
+/play yodel
\ No newline at end of file
diff --git a/VS-on-METABOX-25.png b/VS-on-METABOX-25.png
new file mode 100644 (file)
index 0000000..67ec8c9
Binary files /dev/null and b/VS-on-METABOX-25.png differ
diff --git a/VS-on-METABOX-34.png b/VS-on-METABOX-34.png
new file mode 100644 (file)
index 0000000..01e68fb
Binary files /dev/null and b/VS-on-METABOX-34.png differ
diff --git a/VS-on-METABOX-42.png b/VS-on-METABOX-42.png
new file mode 100644 (file)
index 0000000..7c05de9
Binary files /dev/null and b/VS-on-METABOX-42.png differ
diff --git a/backupDBLifeLog.sh b/backupDBLifeLog.sh
new file mode 100755 (executable)
index 0000000..20cb672
--- /dev/null
@@ -0,0 +1,40 @@
+#!/bin/bash
+#
+# Following is an hardcoded script that can be used on your local machine
+# to archive from server all the latest SQLite databases on the DB Life Log server.
+#
+# Usefull to cron, to auto backup the databases just in case.
+#
+# Programed by: Will Budic (Вячаслав Будитьий)
+# Open Source License -> https://choosealicense.com/licenses/isc/
+# Example crontab -e entry for every four hours.
+# in crontab have -> 0 */4 * * * /home/will/dev/backupDBLifeLog.sh > /dev/null 2>&1
+
+export DISPLAY=":0"
+export XDG_RUNTIME_DIR=/run/user/$(id -u)
+export XAUTHORITY="/home/will/.Xauthority"
+export SSHPASS='N0-MA-E9-5E-4A-C6-MJ-2F'
+DIR="/home/will/backups/r2d2_dbLifeLog"
+NOW=`date +%Y%m%d`
+
+if [ ! -d "$DIR" ]; then
+   mkdir $DIR
+fi
+cd $DIR
+
+sshpass -e sftp -oIdentityFile=~/.ssh/id_dsa -oBatchMode=no r2d2@192.168.1.20:/home/r2d2/dev/dbLifeLog/ <<EOF
+get *.db 
+exit
+EOF
+
+#
+# Archiving optional bellow.
+#
+
+tar -czvf DB_LIFE_LOG_BACKUP_$NOW.tar *.db
+
+#Remove unecessary files.
+find $DIR -type f -name '*.tar' -mtime +3 -exec rm -f {} \; 
+rm *.db
+
+exit
diff --git a/dbLifeLog/bck_20230831092352_SQLite_admin.osz b/dbLifeLog/bck_20230831092352_SQLite_admin.osz
new file mode 100644 (file)
index 0000000..f4399cf
Binary files /dev/null and b/dbLifeLog/bck_20230831092352_SQLite_admin.osz differ
diff --git a/dbLifeLog/bck_20230901234627_SQLite_admin.osz b/dbLifeLog/bck_20230901234627_SQLite_admin.osz
new file mode 100644 (file)
index 0000000..367d7ec
Binary files /dev/null and b/dbLifeLog/bck_20230901234627_SQLite_admin.osz differ
diff --git a/dbLifeLog/bck_20231002203006_SQLite_admin.osz b/dbLifeLog/bck_20231002203006_SQLite_admin.osz
new file mode 100644 (file)
index 0000000..006f13c
Binary files /dev/null and b/dbLifeLog/bck_20231002203006_SQLite_admin.osz differ
diff --git a/dbLifeLog/bck_20231029112533_SQLite_admin.osz b/dbLifeLog/bck_20231029112533_SQLite_admin.osz
new file mode 100644 (file)
index 0000000..54baa41
Binary files /dev/null and b/dbLifeLog/bck_20231029112533_SQLite_admin.osz differ
diff --git a/dbLifeLog/bck_20231114135916_SQLite_admin.osz b/dbLifeLog/bck_20231114135916_SQLite_admin.osz
new file mode 100644 (file)
index 0000000..de63556
Binary files /dev/null and b/dbLifeLog/bck_20231114135916_SQLite_admin.osz differ
diff --git a/dbLifeLog/current_theme b/dbLifeLog/current_theme
new file mode 100755 (executable)
index 0000000..4c2e070
--- /dev/null
@@ -0,0 +1 @@
+Sun
\ No newline at end of file
diff --git a/dbLifeLog/data_CHONGER_log.db b/dbLifeLog/data_CHONGER_log.db
new file mode 100644 (file)
index 0000000..f01906f
Binary files /dev/null and b/dbLifeLog/data_CHONGER_log.db differ
diff --git a/dbLifeLog/data_a_new_log.db b/dbLifeLog/data_a_new_log.db
new file mode 100644 (file)
index 0000000..511bfca
Binary files /dev/null and b/dbLifeLog/data_a_new_log.db differ
diff --git a/dbLifeLog/data_abc_log.db b/dbLifeLog/data_abc_log.db
new file mode 100644 (file)
index 0000000..8ada248
Binary files /dev/null and b/dbLifeLog/data_abc_log.db differ
diff --git a/dbLifeLog/data_admin_log.db b/dbLifeLog/data_admin_log.db
new file mode 100755 (executable)
index 0000000..63f2452
Binary files /dev/null and b/dbLifeLog/data_admin_log.db differ
diff --git a/dbLifeLog/data_nabilbaroud@hotmail.com _log.db b/dbLifeLog/data_nabilbaroud@hotmail.com _log.db
new file mode 100644 (file)
index 0000000..f1db6e9
Binary files /dev/null and b/dbLifeLog/data_nabilbaroud@hotmail.com _log.db differ
diff --git a/dbLifeLog/data_test_log.db b/dbLifeLog/data_test_log.db
new file mode 100755 (executable)
index 0000000..0b78652
Binary files /dev/null and b/dbLifeLog/data_test_log.db differ
diff --git a/dbLifeLog/main.cnf b/dbLifeLog/main.cnf
new file mode 100644 (file)
index 0000000..8a340c3
--- /dev/null
@@ -0,0 +1,181 @@
+!CNF2.2
+This is the main configuration file for the LifeLog applications settings.
+https://github.com/wbudic/LifeLog
+This is an Open Source License project -> https://choosealicense.com/licenses/isc/
+
+# Credential format:<<AUTO_LOGIN<{alias}/{password}>>> ,
+ to enable AUTO_LOGIN option bellow, the config in app, has to also be enabled.
+<<AUTO_LOGIN<>>>
+# BACKUP_ENABLED -> Enable (1), disable (0) backups to be restored from config page.
+<<BACKUP_ENABLED<1>>>
+<<LOGOUT_IFRAME_ENABLED<true>>>
+<<LOGOUT_RELOGIN_TXT<Log me In Again>>>
+<<FORCE_DEBUG_ON<1>>>
+
+#########################################################################
+  Note Remove -> '!' prefix to a tag name, to enable, set,
+  and override any previously set from now on, 
+  it is from top to end file approach, in this type of configuration.
+#
+
+# Default database driver is SQLite, anyhow. 
+# SQLite DB driver. 
+<<!DBI_SQL_SOURCE<DBI:SQLite:>>>
+
+# ProgresSQL DB driver. Remove '!' to enable.
+<<!DBI_SOURCE<DBI:Pg:host=localhost;>>>
+
+
+# LOG actual variable size limit, - 8192 default, 128 minimum value. 
+<<DBI_LOG_VAR_SIZE<8192>>>
+
+# Set the following to an database name, with external managed multiple users, that are to connect to a single database.
+# Users have to be externally set, and alias is then used for their userid to be able to login. (Add user roles to AUTH table).
+# By default this setting is disabled with 0, making alias name, its own log database, per user.
+#
+<<!DBI_MULTI_USER_DB<lifelog>>>
+
+# Timezoning, if set to 1, country locale setting for timezone in config page is ignored.
+<<AUTO_SET_TIMEZONE<0>>>
+
+# Public, enabled list of categories. Remove -> '!' prefix before tag name, to enable. Be careful what category you add/enable here.
+# Public records view feature only, it doesn't allow new log entries to be added and have pin point searching of all existing.
+<<!PUBLIC_CATS<03,06,09>>>#File,System log and Event.
+# Following is similar to AUTO_LOGIN setting above, and must be set.
+<<!PUBLIC_LOGIN</>>>
+<<TIME_ZONE_MAP<
+Australia/Marsfield=Australia/Sydney
+Australia/Bondi=Australia/Sydney
+America/Austin=America/Chicago
+America/Texas=America/Chicago
+>>
+<<CURRENCY_SYMBOLS<DATA>
+$`&#36;`&dollar;`&#x24;`Dollar Sign~
+€`&#8364;`&euro;`&#x20AC;`Euro Sign~
+£`&#163;`&pound;`&#xA3;`Pound Sign~
+¤`&#164;`&curren;`&#xA4;`Currency Sign~
+₽`&#8381;`&#x20BD;`Ruble Sign~
+¥`&#165;`&yen;`&#xA5;`Yen Sign~
+₨`&#8360;`&#x20A8;`Rupee Sign~
+৳`&#2547;`&#x9F3;`Bengali Rupee Sign~
+฿`&#3647;`&#xE3F;`Thai Currency Symbol Baht~
+>>
+
+<<PLUGINS<
+HelpPlugin->help.pl
+BankingPlugin->banking.pl
+>>
+
+# @See help at bottom of config for all the following.
+
+<<!PAGE_VIEW_EXCLUDES<0=88,6,69>>> <- (Diary,System Log,Poetry) category id's only, does set in the config page also work.
+<<!VIEW_OVERRIDE_SYSLOGS<0>>>
+<<!VIEW_OVERRIDE_WHERE<ID_CAT>=6 AND >>>
+
+#For internal use only.
+<<^CONFIG_META<200>The reserved id range for config table is from 200, upwards.>>
+
+#
+# The following are initial setup constance's. We use them instead of hard coding a lot.
+# Modifying them after the fact of a database creation is futile, a limp biscuit.
+# Use/see anon properties before, enabling changing settings from this actual config file.
+#
+<<CONFIG<4>
+00|$RELEASE_VER = 2.5`LifeLog Application Version.
+01|$REC_LIMIT   = 25`Records shown per page.
+03|$TIME_ZONE   = Australia/Sydney`Time zone of your country and city.
+05|$PRC_WIDTH   = 80`Default presentation width for pages.
+08|$LOG_PATH    = ../../dbLifeLog/`Path to folder containing data.
+10|$SESSN_EXPR  = +30m`Login session expiration time setting, can be seconds, minutes or hours.
+12|$DATE_UNI    = 0`Setting of how dates are displayed, universal yyyy-mm-dd or local dd-mm-yyyy.
+14|$LANGUAGE    = English`Default language locale.
+18|$IMG_W_H     = 210x120`Default embedded image width.
+20|$AUTO_WRD_LMT= 1024`Autocomplete word gathering limit.
+22|$AUTO_LOGIN  = 0`Autologin option, that expires only if login out. Enter Credentials in main.cnf.
+23|$AUTO_LOGOFF = 0`Auto logoff on session expires, default is false.
+24|$FRAME_SIZE  = 0`Youtube frame size settings, 0 - Large, 1 - Medium, 2- Small.
+26|$RTF_SIZE    = 2`RTF Document height, 0 - Large, 1 - Medium, 2- Small.
+28|$THEME       = Standard`Theme to apply, Standard, Sun, Moon, Earth.
+30|$DEBUG       = 0`Development page additional debug output, off (default) or on.
+32|$KEEP_EXCS   = 0`Cache excludes between sessions, off (default) or on.
+34|$VIEW_ALL_LMT=1000`Limit of all records displayed for large logs. Set to 0, for unlimited.
+36|$TRACK_LOGINS=1`Create system logs on login/logout of Life Log.
+38|$COMPRESS_ENC=0`Compress Encode pages, default -> 0=false, 1=true.
+40|$SUBPAGEDIR  =docs`Directory to scan for subpages like documents.
+42|$DISP_ALL    = 1`Display whole log entry, default -> 1=true, 0=false for display single line only.
+44|$TRANSPARENCY= 1`Should log panel be transparent, default is yes or on.
+50|$CURR_SYMBOL = &#36;`Currency symbol.
+52|$AUDIO_ENABLED=1`Enable/Disable audio on some events and actions.
+>>
+<<CAT<3>
+01|Unspecified `For quick uncategorized entries.
+03|File System `Operating file system/Application short log.
+06|System Log  `Operating system important log.
+09|Event       `Event that occurred, meeting, historically important.
+28|Personal    `Personal log of historical importance, diary type.
+32|Expense     `Significant yearly expense.
+35|Income      `Significant yearly income.
+40|Work        `Work related entry, worth monitoring.
+45|Food        `Quick reference to recipes, observations.
+50|Music       `Music reference of interest. Youtube embedded.
+52|Sport/Club  `Sport or Social related entry.
+55|Cars        `Car(s) related entry.
+60|Online      `Online purchases (ebay, or received/ordered from online source).
+88|Diary       `Diary specific log and entry. Your daily yaddi-yadda that have decided to place here.
+90|Fitness     `Fitness steps, news, info, and useful links. Amount is steps.
+>>
+<<MIG<>
+NOTES|DROP TABLE NOTES;' ver. 1.5 fts4 virtual tables have been scratched as they require special SQLite compilation.
+LOG<5>|Run Query ' ver. 1.5
+
+## HELP SECTION ON OPTIONS
+
+
+   Global view overrides. These get generated in the db if set on logon. And used instead of the normal data view.
+   Overrides must always show todays log entries, regardless of criteria.
+   Overrides don't affect category and keywords desired searches and views. They are mainly useful to filter out 
+   the not required to see on the main pages.
+   NOTE - These settings AND on VW_LOG_WITH_EXCLUDES if they are set. VW_ prefix signifies, database view, 
+   meaning this will be created. Based on the settings bellow you make. An interesting concept, don't you think?
+
+### PAGE_VIEW_EXCLUDES
+
+ Setting to modify the page view to exclude older log entries by a list of categories from today minus days back.
+ This is to avoid and page only list relevant logs on logon. Searching by category will list them and still make visible.
+ value: {days=}{category id},.. days default to zero, if you don't want from yesterday to the past category entries listed.
+
+<<!PAGE_VIEW_EXCLUDES<0=88,6,69> <- (Diary,System Log,Poetry) category id's only, does set in the config page also work.
+
+
+### VIEW_OVERRIDE_SYSLOGS overrides not to show system logs that are older than today. Same to CAT!=6 by default,
+# Default is 0, disabled.
+
+### VIEW_OVERRIDE_WHERE 
+
+ This option overrides what log entries to filter out from the page view, in more detail.
+ It translated via keywords to appropriate required SQL. This filter by default is
+ not active on 24 hours old entries. PAGE_VIEW_EXCLUDES option entries are included.
+
+#### CAT is the ID_CAT column, keyword.
+* i.e VIEW_OVERRIDE_WHERE<CAT >= 6>, selects all categories from and category id 6. 
+PAGE_VIEW_EXCLUDES and VIEW_OVERRIDE_SYSLOGS don't have to be set. But preside if set.
+
+#### AND/OR keyword, logically joins the instructions.
+* i.e VIEW_OVERRIDE_WHERE< CAT > 6 AND CAT != 'Personal' >, selects all categories from 
+category id 6, excluding resolved category entries.
+
+#### OLDER_THAN keyword translates to date column older than from today up to an specified date in the past.
+* This is assigned by either months, days, hours. 
+** i.e VIEW_OVERRIDE_WHERE<CAT !=6 AND OLDER_THAN=2 months>, this instructs skip older then to months logs and all sys logs.
+
+#### FROM/TO in either months, days, hours.
+* Selects only FROM or TO an specified date only log entries.
+** i.e VIEW_OVERRIDE_WHERE<FROM=12 hours AND NOT OLDER_THAN=1 year>
+
+#### NOT keyword, logically negates.
+** i.e VIEW_OVERRIDE_WHERE<RTF>, select only log entries that contain attached RTF documents, if they
+are older than 24 hours. Remember, the default filtering is on 24 hour and older log entries.
+** i.e VIEW_OVERRIDE_WHERE<NOT RTF>, don't select log entries that contain attached RTF documents.
+** i.e VIEW_OVERRIDE_WHERE<CAT NOT 'Diary' AND CAT NOT 'System Log' AND DATE FROM=24 days AND NOT OLDER_THAN=1 year>, 
+category is not (!=), resolved category id by name. And also exclude all logs older than an year. 
+All is FROM to OLDER_THAN, affected. So from today (now) to FROM 'will' be paged, visible.
diff --git a/dbLifeLog/zone.csv b/dbLifeLog/zone.csv
new file mode 100644 (file)
index 0000000..4177f71
--- /dev/null
@@ -0,0 +1,425 @@
+"1","AD","Europe/Andorra"
+"2","AE","Asia/Dubai"
+"3","AF","Asia/Kabul"
+"4","AG","America/Antigua"
+"5","AI","America/Anguilla"
+"6","AL","Europe/Tirane"
+"7","AM","Asia/Yerevan"
+"8","AO","Africa/Luanda"
+"9","AQ","Antarctica/McMurdo"
+"10","AQ","Antarctica/Casey"
+"11","AQ","Antarctica/Davis"
+"12","AQ","Antarctica/DumontDUrville"
+"13","AQ","Antarctica/Mawson"
+"14","AQ","Antarctica/Palmer"
+"15","AQ","Antarctica/Rothera"
+"16","AQ","Antarctica/Syowa"
+"17","AQ","Antarctica/Troll"
+"18","AQ","Antarctica/Vostok"
+"19","AR","America/Argentina/Buenos_Aires"
+"20","AR","America/Argentina/Cordoba"
+"21","AR","America/Argentina/Salta"
+"22","AR","America/Argentina/Jujuy"
+"23","AR","America/Argentina/Tucuman"
+"24","AR","America/Argentina/Catamarca"
+"25","AR","America/Argentina/La_Rioja"
+"26","AR","America/Argentina/San_Juan"
+"27","AR","America/Argentina/Mendoza"
+"28","AR","America/Argentina/San_Luis"
+"29","AR","America/Argentina/Rio_Gallegos"
+"30","AR","America/Argentina/Ushuaia"
+"31","AS","Pacific/Pago_Pago"
+"32","AT","Europe/Vienna"
+"33","AU","Australia/Lord_Howe"
+"34","AU","Antarctica/Macquarie"
+"35","AU","Australia/Hobart"
+"36","AU","Australia/Currie"
+"37","AU","Australia/Melbourne"
+"38","AU","Australia/Sydney"
+"39","AU","Australia/Broken_Hill"
+"40","AU","Australia/Brisbane"
+"41","AU","Australia/Lindeman"
+"42","AU","Australia/Adelaide"
+"43","AU","Australia/Darwin"
+"44","AU","Australia/Perth"
+"45","AU","Australia/Eucla"
+"46","AW","America/Aruba"
+"47","AX","Europe/Mariehamn"
+"48","AZ","Asia/Baku"
+"49","BA","Europe/Sarajevo"
+"50","BB","America/Barbados"
+"51","BD","Asia/Dhaka"
+"52","BE","Europe/Brussels"
+"53","BF","Africa/Ouagadougou"
+"54","BG","Europe/Sofia"
+"55","BH","Asia/Bahrain"
+"56","BI","Africa/Bujumbura"
+"57","BJ","Africa/Porto-Novo"
+"58","BL","America/St_Barthelemy"
+"59","BM","Atlantic/Bermuda"
+"60","BN","Asia/Brunei"
+"61","BO","America/La_Paz"
+"62","BQ","America/Kralendijk"
+"63","BR","America/Noronha"
+"64","BR","America/Belem"
+"65","BR","America/Fortaleza"
+"66","BR","America/Recife"
+"67","BR","America/Araguaina"
+"68","BR","America/Maceio"
+"69","BR","America/Bahia"
+"70","BR","America/Sao_Paulo"
+"71","BR","America/Campo_Grande"
+"72","BR","America/Cuiaba"
+"73","BR","America/Santarem"
+"74","BR","America/Porto_Velho"
+"75","BR","America/Boa_Vista"
+"76","BR","America/Manaus"
+"77","BR","America/Eirunepe"
+"78","BR","America/Rio_Branco"
+"79","BS","America/Nassau"
+"80","BT","Asia/Thimphu"
+"81","BW","Africa/Gaborone"
+"82","BY","Europe/Minsk"
+"83","BZ","America/Belize"
+"84","CA","America/St_Johns"
+"85","CA","America/Halifax"
+"86","CA","America/Glace_Bay"
+"87","CA","America/Moncton"
+"88","CA","America/Goose_Bay"
+"89","CA","America/Blanc-Sablon"
+"90","CA","America/Toronto"
+"91","CA","America/Nipigon"
+"92","CA","America/Thunder_Bay"
+"93","CA","America/Iqaluit"
+"94","CA","America/Pangnirtung"
+"95","CA","America/Atikokan"
+"96","CA","America/Winnipeg"
+"97","CA","America/Rainy_River"
+"98","CA","America/Resolute"
+"99","CA","America/Rankin_Inlet"
+"100","CA","America/Regina"
+"101","CA","America/Swift_Current"
+"102","CA","America/Edmonton"
+"103","CA","America/Cambridge_Bay"
+"104","CA","America/Yellowknife"
+"105","CA","America/Inuvik"
+"106","CA","America/Creston"
+"107","CA","America/Dawson_Creek"
+"108","CA","America/Fort_Nelson"
+"109","CA","America/Vancouver"
+"110","CA","America/Whitehorse"
+"111","CA","America/Dawson"
+"112","CC","Indian/Cocos"
+"113","CD","Africa/Kinshasa"
+"114","CD","Africa/Lubumbashi"
+"115","CF","Africa/Bangui"
+"116","CG","Africa/Brazzaville"
+"117","CH","Europe/Zurich"
+"118","CI","Africa/Abidjan"
+"119","CK","Pacific/Rarotonga"
+"120","CL","America/Santiago"
+"121","CL","America/Punta_Arenas"
+"122","CL","Pacific/Easter"
+"123","CM","Africa/Douala"
+"124","CN","Asia/Shanghai"
+"125","CN","Asia/Urumqi"
+"126","CO","America/Bogota"
+"127","CR","America/Costa_Rica"
+"128","CU","America/Havana"
+"129","CV","Atlantic/Cape_Verde"
+"130","CW","America/Curacao"
+"131","CX","Indian/Christmas"
+"132","CY","Asia/Nicosia"
+"133","CY","Asia/Famagusta"
+"134","CZ","Europe/Prague"
+"135","DE","Europe/Berlin"
+"136","DE","Europe/Busingen"
+"137","DJ","Africa/Djibouti"
+"138","DK","Europe/Copenhagen"
+"139","DM","America/Dominica"
+"140","DO","America/Santo_Domingo"
+"141","DZ","Africa/Algiers"
+"142","EC","America/Guayaquil"
+"143","EC","Pacific/Galapagos"
+"144","EE","Europe/Tallinn"
+"145","EG","Africa/Cairo"
+"146","EH","Africa/El_Aaiun"
+"147","ER","Africa/Asmara"
+"148","ES","Europe/Madrid"
+"149","ES","Africa/Ceuta"
+"150","ES","Atlantic/Canary"
+"151","ET","Africa/Addis_Ababa"
+"152","FI","Europe/Helsinki"
+"153","FJ","Pacific/Fiji"
+"154","FK","Atlantic/Stanley"
+"155","FM","Pacific/Chuuk"
+"156","FM","Pacific/Pohnpei"
+"157","FM","Pacific/Kosrae"
+"158","FO","Atlantic/Faroe"
+"159","FR","Europe/Paris"
+"160","GA","Africa/Libreville"
+"161","GB","Europe/London"
+"162","GD","America/Grenada"
+"163","GE","Asia/Tbilisi"
+"164","GF","America/Cayenne"
+"165","GG","Europe/Guernsey"
+"166","GH","Africa/Accra"
+"167","GI","Europe/Gibraltar"
+"168","GL","America/Godthab"
+"169","GL","America/Danmarkshavn"
+"170","GL","America/Scoresbysund"
+"171","GL","America/Thule"
+"172","GM","Africa/Banjul"
+"173","GN","Africa/Conakry"
+"174","GP","America/Guadeloupe"
+"175","GQ","Africa/Malabo"
+"176","GR","Europe/Athens"
+"177","GS","Atlantic/South_Georgia"
+"178","GT","America/Guatemala"
+"179","GU","Pacific/Guam"
+"180","GW","Africa/Bissau"
+"181","GY","America/Guyana"
+"182","HK","Asia/Hong_Kong"
+"183","HN","America/Tegucigalpa"
+"184","HR","Europe/Zagreb"
+"185","HT","America/Port-au-Prince"
+"186","HU","Europe/Budapest"
+"187","ID","Asia/Jakarta"
+"188","ID","Asia/Pontianak"
+"189","ID","Asia/Makassar"
+"190","ID","Asia/Jayapura"
+"191","IE","Europe/Dublin"
+"192","IL","Asia/Jerusalem"
+"193","IM","Europe/Isle_of_Man"
+"194","IN","Asia/Kolkata"
+"195","IO","Indian/Chagos"
+"196","IQ","Asia/Baghdad"
+"197","IR","Asia/Tehran"
+"198","IS","Atlantic/Reykjavik"
+"199","IT","Europe/Rome"
+"200","JE","Europe/Jersey"
+"201","JM","America/Jamaica"
+"202","JO","Asia/Amman"
+"203","JP","Asia/Tokyo"
+"204","KE","Africa/Nairobi"
+"205","KG","Asia/Bishkek"
+"206","KH","Asia/Phnom_Penh"
+"207","KI","Pacific/Tarawa"
+"208","KI","Pacific/Enderbury"
+"209","KI","Pacific/Kiritimati"
+"210","KM","Indian/Comoro"
+"211","KN","America/St_Kitts"
+"212","KP","Asia/Pyongyang"
+"213","KR","Asia/Seoul"
+"214","KW","Asia/Kuwait"
+"215","KY","America/Cayman"
+"216","KZ","Asia/Almaty"
+"217","KZ","Asia/Qyzylorda"
+"218","KZ","Asia/Qostanay"
+"219","KZ","Asia/Aqtobe"
+"220","KZ","Asia/Aqtau"
+"221","KZ","Asia/Atyrau"
+"222","KZ","Asia/Oral"
+"223","LA","Asia/Vientiane"
+"224","LB","Asia/Beirut"
+"225","LC","America/St_Lucia"
+"226","LI","Europe/Vaduz"
+"227","LK","Asia/Colombo"
+"228","LR","Africa/Monrovia"
+"229","LS","Africa/Maseru"
+"230","LT","Europe/Vilnius"
+"231","LU","Europe/Luxembourg"
+"232","LV","Europe/Riga"
+"233","LY","Africa/Tripoli"
+"234","MA","Africa/Casablanca"
+"235","MC","Europe/Monaco"
+"236","MD","Europe/Chisinau"
+"237","ME","Europe/Podgorica"
+"238","MF","America/Marigot"
+"239","MG","Indian/Antananarivo"
+"240","MH","Pacific/Majuro"
+"241","MH","Pacific/Kwajalein"
+"242","MK","Europe/Skopje"
+"243","ML","Africa/Bamako"
+"244","MM","Asia/Yangon"
+"245","MN","Asia/Ulaanbaatar"
+"246","MN","Asia/Hovd"
+"247","MN","Asia/Choibalsan"
+"248","MO","Asia/Macau"
+"249","MP","Pacific/Saipan"
+"250","MQ","America/Martinique"
+"251","MR","Africa/Nouakchott"
+"252","MS","America/Montserrat"
+"253","MT","Europe/Malta"
+"254","MU","Indian/Mauritius"
+"255","MV","Indian/Maldives"
+"256","MW","Africa/Blantyre"
+"257","MX","America/Mexico_City"
+"258","MX","America/Cancun"
+"259","MX","America/Merida"
+"260","MX","America/Monterrey"
+"261","MX","America/Matamoros"
+"262","MX","America/Mazatlan"
+"263","MX","America/Chihuahua"
+"264","MX","America/Ojinaga"
+"265","MX","America/Hermosillo"
+"266","MX","America/Tijuana"
+"267","MX","America/Bahia_Banderas"
+"268","MY","Asia/Kuala_Lumpur"
+"269","MY","Asia/Kuching"
+"270","MZ","Africa/Maputo"
+"271","NA","Africa/Windhoek"
+"272","NC","Pacific/Noumea"
+"273","NE","Africa/Niamey"
+"274","NF","Pacific/Norfolk"
+"275","NG","Africa/Lagos"
+"276","NI","America/Managua"
+"277","NL","Europe/Amsterdam"
+"278","NO","Europe/Oslo"
+"279","NP","Asia/Kathmandu"
+"280","NR","Pacific/Nauru"
+"281","NU","Pacific/Niue"
+"282","NZ","Pacific/Auckland"
+"283","NZ","Pacific/Chatham"
+"284","OM","Asia/Muscat"
+"285","PA","America/Panama"
+"286","PE","America/Lima"
+"287","PF","Pacific/Tahiti"
+"288","PF","Pacific/Marquesas"
+"289","PF","Pacific/Gambier"
+"290","PG","Pacific/Port_Moresby"
+"291","PG","Pacific/Bougainville"
+"292","PH","Asia/Manila"
+"293","PK","Asia/Karachi"
+"294","PL","Europe/Warsaw"
+"295","PM","America/Miquelon"
+"296","PN","Pacific/Pitcairn"
+"297","PR","America/Puerto_Rico"
+"298","PS","Asia/Gaza"
+"299","PS","Asia/Hebron"
+"300","PT","Europe/Lisbon"
+"301","PT","Atlantic/Madeira"
+"302","PT","Atlantic/Azores"
+"303","PW","Pacific/Palau"
+"304","PY","America/Asuncion"
+"305","QA","Asia/Qatar"
+"306","RE","Indian/Reunion"
+"307","RO","Europe/Bucharest"
+"308","RS","Europe/Belgrade"
+"309","RU","Europe/Kaliningrad"
+"310","RU","Europe/Moscow"
+"311","RU","Europe/Simferopol"
+"312","RU","Europe/Kirov"
+"313","RU","Europe/Astrakhan"
+"314","RU","Europe/Volgograd"
+"315","RU","Europe/Saratov"
+"316","RU","Europe/Ulyanovsk"
+"317","RU","Europe/Samara"
+"318","RU","Asia/Yekaterinburg"
+"319","RU","Asia/Omsk"
+"320","RU","Asia/Novosibirsk"
+"321","RU","Asia/Barnaul"
+"322","RU","Asia/Tomsk"
+"323","RU","Asia/Novokuznetsk"
+"324","RU","Asia/Krasnoyarsk"
+"325","RU","Asia/Irkutsk"
+"326","RU","Asia/Chita"
+"327","RU","Asia/Yakutsk"
+"328","RU","Asia/Khandyga"
+"329","RU","Asia/Vladivostok"
+"330","RU","Asia/Ust-Nera"
+"331","RU","Asia/Magadan"
+"332","RU","Asia/Sakhalin"
+"333","RU","Asia/Srednekolymsk"
+"334","RU","Asia/Kamchatka"
+"335","RU","Asia/Anadyr"
+"336","RW","Africa/Kigali"
+"337","SA","Asia/Riyadh"
+"338","SB","Pacific/Guadalcanal"
+"339","SC","Indian/Mahe"
+"340","SD","Africa/Khartoum"
+"341","SE","Europe/Stockholm"
+"342","SG","Asia/Singapore"
+"343","SH","Atlantic/St_Helena"
+"344","SI","Europe/Ljubljana"
+"345","SJ","Arctic/Longyearbyen"
+"346","SK","Europe/Bratislava"
+"347","SL","Africa/Freetown"
+"348","SM","Europe/San_Marino"
+"349","SN","Africa/Dakar"
+"350","SO","Africa/Mogadishu"
+"351","SR","America/Paramaribo"
+"352","SS","Africa/Juba"
+"353","ST","Africa/Sao_Tome"
+"354","SV","America/El_Salvador"
+"355","SX","America/Lower_Princes"
+"356","SY","Asia/Damascus"
+"357","SZ","Africa/Mbabane"
+"358","TC","America/Grand_Turk"
+"359","TD","Africa/Ndjamena"
+"360","TF","Indian/Kerguelen"
+"361","TG","Africa/Lome"
+"362","TH","Asia/Bangkok"
+"363","TJ","Asia/Dushanbe"
+"364","TK","Pacific/Fakaofo"
+"365","TL","Asia/Dili"
+"366","TM","Asia/Ashgabat"
+"367","TN","Africa/Tunis"
+"368","TO","Pacific/Tongatapu"
+"369","TR","Europe/Istanbul"
+"370","TT","America/Port_of_Spain"
+"371","TV","Pacific/Funafuti"
+"372","TW","Asia/Taipei"
+"373","TZ","Africa/Dar_es_Salaam"
+"374","UA","Europe/Kiev"
+"375","UA","Europe/Uzhgorod"
+"376","UA","Europe/Zaporozhye"
+"377","UG","Africa/Kampala"
+"378","UM","Pacific/Midway"
+"379","UM","Pacific/Wake"
+"380","US","America/New_York"
+"381","US","America/Detroit"
+"382","US","America/Kentucky/Louisville"
+"383","US","America/Kentucky/Monticello"
+"384","US","America/Indiana/Indianapolis"
+"385","US","America/Indiana/Vincennes"
+"386","US","America/Indiana/Winamac"
+"387","US","America/Indiana/Marengo"
+"388","US","America/Indiana/Petersburg"
+"389","US","America/Indiana/Vevay"
+"390","US","America/Chicago"
+"391","US","America/Indiana/Tell_City"
+"392","US","America/Indiana/Knox"
+"393","US","America/Menominee"
+"394","US","America/North_Dakota/Center"
+"395","US","America/North_Dakota/New_Salem"
+"396","US","America/North_Dakota/Beulah"
+"397","US","America/Denver"
+"398","US","America/Boise"
+"399","US","America/Phoenix"
+"400","US","America/Los_Angeles"
+"401","US","America/Anchorage"
+"402","US","America/Juneau"
+"403","US","America/Sitka"
+"404","US","America/Metlakatla"
+"405","US","America/Yakutat"
+"406","US","America/Nome"
+"407","US","America/Adak"
+"408","US","Pacific/Honolulu"
+"409","UY","America/Montevideo"
+"410","UZ","Asia/Samarkand"
+"411","UZ","Asia/Tashkent"
+"412","VA","Europe/Vatican"
+"413","VC","America/St_Vincent"
+"414","VE","America/Caracas"
+"415","VG","America/Tortola"
+"416","VI","America/St_Thomas"
+"417","VN","Asia/Ho_Chi_Minh"
+"418","VU","Pacific/Efate"
+"419","WF","Pacific/Wallis"
+"420","WS","Pacific/Apia"
+"421","YE","Asia/Aden"
+"422","YT","Indian/Mayotte"
+"423","ZA","Africa/Johannesburg"
+"424","ZM","Africa/Lusaka"
+"425","ZW","Africa/Harare"
diff --git a/htdocs/cgi-bin/.redirect b/htdocs/cgi-bin/.redirect
new file mode 100644 (file)
index 0000000..921792d
--- /dev/null
@@ -0,0 +1 @@
+/cgi-bin/ /cgi-bin/main.cgi
diff --git a/htdocs/cgi-bin/CNFServices.cgi b/htdocs/cgi-bin/CNFServices.cgi
new file mode 100755 (executable)
index 0000000..651e8aa
--- /dev/null
@@ -0,0 +1,134 @@
+#!/usr/bin/env perl
+# CNF Services operator. The plugins and services themselve should return html.
+# Idea is that this CGI file contains the actuall CNF to interact in realtime with a web page.
+#
+use v5.30;
+use strict;
+use warnings;
+use Exception::Class ('CNFHTMLServiceError');
+use Syntax::Keyword::Try;
+use utf8;
+use CGI::Tiny;
+use Path::Tiny;
+no warnings qw(experimental::signatures);
+use feature qw(signatures);
+##
+# We use dynamic perl compilations. The following ONLY HERE required to carp to browser on
+# system requirments or/and unexpected perl compiler errors.
+##
+use CGI::Carp qw(fatalsToBrowser set_message);
+
+##
+# This is a entry point script (main).
+##
+use lib::relative "system/modules";
+require CNFParser;
+require CNFNode;
+
+our $GLOB_HTML_SERVE = "'{}/*.cgi' '{}/*.htm' '{}/*.html' '{}/*.md' '{}/*.txt'";
+our $script_path = $0; $script_path =~ s/\w+.cgi$//;
+use constant LOG_Settings =>q(
+<<@<%LOG>
+    file      = web_server.log
+    # Should it mirror to console too?
+    console   = 0
+    # Disable/enable output to file at all?
+    enabled   = 0
+    # Tail size cut, set to 0 if no tail cutting is desired.
+    tail      = 1000
+>>
+);
+
+cgi {
+  my $cgi = $_;
+     $cgi->set_error_handler(
+        sub {
+            my ($cgi, $error, $rendered) = @_;
+            chomp $error;
+            $cgi->render(text=>qq(<html><body><font style="color:crimson; font-weight:bold">You have unfortunately hit an cgi-bin::CNFHTMLServiceError</font>
+                                            <div class='content-debug_output'><pre style="background:transparent">$error</pre><br> </div>
+                                </body></html>
+                                )
+                    );
+        }
+     );
+  exit CNFHTMLService($cgi);
+};
+
+
+sub CNFHTMLService {
+
+    my ($cgi,$ptr)   = (shift, undef);
+    my  $cnf  = CNFParser -> new (undef,{ DO_ENABLED => 1, HAS_EXTENSIONS=>1, ANONS_ARE_PUBLIC => 1, CGI=>$cgi });
+        $cnf->parse(undef,_getServiceScript($cgi));
+        $ptr = $cnf->data();
+        $ptr = $ptr->{'PAGE'};
+    #say $$ptr if $ptr;
+    $cgi -> render(text=>$$ptr);
+    return 0
+}
+
+sub _getServiceScript($cgi) {
+     my $service = $cgi->param('service');
+     unless ($service){
+        $cgi->set_response_status(404);
+        CNFHTMLServiceError->throw(error=>'The Service parameter \'service\' is not set!', show_trace=>1);
+     }
+     if($service eq 'feeds'){
+        return _CNF_Script_For_Feeds();
+     }
+}
+
+sub _CNF_Script_For_Feeds {
+LOG_Settings . <<__CNF_IS_COOL__;
+<<PROCESS_RSS_FEEDS<PLUGIN>
+
+    RUN_FEEDS = yes
+    CONVERT_TO_CNF_NODES = yes
+    OUTPUT_TO_CONSOLE = false
+    OUTPUT_TO_MD = no
+    BENCHMARK = no
+    TZ=Australia/Sydney
+    OUTPUT_DIR = "./rss_output"
+
+
+    CONVERT_CNF_HTML  = yes
+    CNF_TREE_STORE    = true
+
+    package     : RSSFeedsPlugin
+    subroutine  : process
+    property    : RSS_FEEDS
+
+>>
+// Following is a table having a list of details for available RSS feeds to process.
+|| The more rows have here the longer it takes to fetch them, what is it, once a day, week, month?
+<<    RSS_FEEDS     <DATA>
+ID`Name`URL`Description~
+#`CPAN`http://search.cpan.org/uploads.rdf`CPAN modules news and agenda.~
+#`The Perl Foundation RSS Feed`https://news.perlfoundation.org/rss.xml`The Perl Foundation is dedicated to the advancement
+of the Perl programming language through open discussion, collaboration, design, and code.
+ The Perl Foundation is a non-profit organization* based in Holland, Michigan~
+#`Perl Weekly`https://perlweekly.com/perlweekly.rss`A free, once a week e-mail round-up of hand-picked news and articles about Perl.
+The Perl Weekly ( http://perlweekly.com/ ) is a newsletter including links to blog posts and other news items
+ related to the Perl programming language.~
+#`The Cipher Brief RSS Feed`https://www.thecipherbrief.com/feed`The Cipher Brief is the go-to digital platform for the latest security news and high-level analysis. Each day, we offer multiple expert perspectives, engaging the private sector to find solutions and foster dialogue on what events mean for businesses and organizations around the world. More than just reporting on the news, The Cipher Brief helps readers understand what the news means to you.~
+#`Viral Now`https://viralnow.uk/feed/`ViralNow is a dynamic online platform at the forefront of curating and delivering trending and viral content. ViralNow brings you the latest and most engaging stories, videos, and articles from around the world.~
+#`The Sydney Morning Herald - World RSS Feed`http://www.smh.com.au/rssheadlines/world/article/rss.xml`The Sydney Morning Herald is Australia's leading news source. The Sydney Morning Herald sets the standard for journalistic excellence for Sydney, Australia, and the rest of the world. From breaking news, to travel and fashion, The Sydney Morning Herald continues to transform the way Australians get their news.~
+#`Life Hacker`https://lifehacker.com/rss`Lifehacker’s an award-winning daily blog that features tips, shortcuts, and downloads that help you work and live smarter and more efficiently.~
+#`Politico`http://www.politico.com/rss/politicopicks.xml`POLITICO strives to be the dominant source for news on politics and policy in power centers across every continent where access to reliable information, nonpartisan journ.lism and real-time tools create, inform and engage a global citizenry.~
+>>
+
+__CNF_IS_COOL__
+}
+
+__END__
+
+=begin copyright
+Programed by  : Will Budic
+EContactHash  : 990MWWLWM8C2MI8K (https://github.com/wbudic/EContactHash.md)
+Source        : https://github.com/wbudic/LifeLog
+    This source file is copied and usually placed in a local directory, outside of its repository project.
+    So it could not be the actual or current version, can vary or has been modiefied for what ever purpose in another project.
+    Please leave source of origin in this file for future references.
+Open Source Code License -> https://github.com/wbudic/PerlCNF/blob/master/ISC_License.md
+=cut copyright
\ No newline at end of file
diff --git a/htdocs/cgi-bin/config.cgi b/htdocs/cgi-bin/config.cgi
new file mode 100755 (executable)
index 0000000..207f220
--- /dev/null
@@ -0,0 +1,1874 @@
+#!/usr/bin/env perl
+#
+# Programed by: Will Budic
+# Open Source License -> https://choosealicense.com/licenses/isc/
+#
+use v5.30;
+use strict;
+use warnings;
+
+use DBI;
+use DBD::Pg;
+use DBD::Pg qw(:pg_types);
+use Exception::Class ('LifeLogException');
+use Syntax::Keyword::Try;
+use CGI;
+
+use DateTime::Format::SQLite;
+use Date::Language;
+use Capture::Tiny ':all';
+use Text::CSV;
+use Scalar::Util qw(looks_like_number);
+use Sys::Syslog  qw(:DEFAULT :standard :macros);    #openLog, closelog macros
+use Compress::Zlib;
+use bignum qw/hex/;
+
+#DEFAULT SETTINGS HERE!
+use lib "system/modules";
+require Settings;
+require CNFParser; #<- Only ever used here, as for best performance CNF2.2 type particulars are only needed.
+
+#15mg data post limit
+$CGI::POST_MAX = 1024 * 15000;
+##
+
+my ( $RDS, $TR_STATUS, $LOGOUT, $ERROR ) = ( "", "", 0, "" );
+my $sys    = `uname -n`;
+my $db     = Settings::fetchDBSettings();
+my $cgi    = Settings->cgi();
+my $sid    = Settings::sid();
+my $dbname = Settings::dbName();
+my $alias  = Settings::alias();
+my $rv;
+my $dbs;
+my $lang  = Date::Language->new( Settings::language() );
+my $today = Settings::today();
+my $tz    = $cgi->param('tz');
+my $csvp  = $cgi->param('csv');
+my $CID   = 'rowid';
+$CID = 'ID' if Settings::isProgressDB();
+
+exportToCSV() if ($csvp);
+if    ( $cgi->param('bck') ) { &backup }    #?bck=1 (js set)
+elsif ( $_ = $cgi->param('bck_del') ) {
+    backupDelete($_);
+}                                           #?bck_del=... (js set)
+elsif ( $cgi->param('bck_upload') )    { &restore }    #upload backup (form set)
+elsif ( $_ = $cgi->param('bck_file') ) { restore($_) }
+elsif ( $cgi->param('data_cat') )      { &importCatCSV }
+elsif ( $cgi->param('data_log') )      { &importLogCSV }
+
+my $stmtCat = 'SELECT * FROM CAT ORDER BY ID;';
+my $status  = $RDS = "Ready for change!";
+my $cats;
+my %hshCats = ();
+cats();
+###############
+processSubmit();
+###############
+Settings::setupTheme();
+Settings::session()->param( "theme",   Settings::theme('css') );
+Settings::session()->param( "bgcolor", Settings::bgcol() );
+getHeader();
+
+if ($ERROR) { &error; }
+else {
+    print
+qq(<div id="menu_page" title="To close this menu click on its heart, and wait.">
+<div class="hdr" style="marging=0;padding:0px;">
+<a id="to_top" href="#top" title="Go to top of page."><span class="ui-icon ui-icon-arrowthick-1-n" style="float:none;"></span></a>
+Config
+<a id="to_bottom" href="#bottom" title="Go to bottom of page."><span class="ui-icon ui-icon-arrowthick-1-s" style="float:none;"></span></a>
+</div>
+<hr>
+<a class="a_" href="main.cgi">Log</a><hr>
+<a class="a_" href="stats.cgi">Stats</a><hr>
+<div class="menu_title">
+&nbsp;Jump to Sections&nbsp;<br>
+<a class="ui-button marg-top-2" href="#categories"><b>Categories</b></a><br>
+<a class="ui-button marg-top-2" href="#vars"><b>System</b></a><br>
+<a class="ui-button marg-top-2" href="#dbsets"><b>DB Fix</b></a><br>
+<a class="ui-button marg-top-2" href="#passets"><b>Pass</b></a><br>
+<a class="ui-button marg-top-2" href="#backup"><b>Backup</b></a><hr>
+</div>
+
+<hr>
+<br>
+<a class="a_" href="login_ctr.cgi?logout=bye">LOGOUT</a>
+</div>);
+}
+
+my $tbl = '<table id="cnf_cats" class="tbl" border="1" width="'
+  . &Settings::pagePrcWidth . '%">
+              <tr class="r0"><td colspan="4"><b>* CATEGORIES CONFIGURATION *</b></td></tr>
+            <tr class="r1"><th>ID</th><th>Category</th><th  align="left">Description</th></tr>';
+my $foot = "";
+$dbs = Settings::selectRecords( $db, $stmtCat );
+while ( my @row = $dbs->fetchrow_array() ) {
+    if ( $row[0] > 0 ) {
+        $tbl .= '<tr class="r0"><td>' . $row[0] . '</td>
+            <td><input name="nm'
+          . $row[0]
+          . '" type="text" value="'
+          . $row[1]
+          . '" size="12"></td>
+            <td align="left"><input name="ds'
+          . $row[0]
+          . '" type="text" value="'
+          . $row[2]
+          . '" size="64"></td>
+        </tr>';
+    }
+}
+
+my $frmCats = qq(
+     <form id="frm_config" action="config.cgi#categories">) . $tbl . qq(
+      <tr class="r1">
+         <td><input type="text" name="caid" value="" size="3"/></td>
+         <td><input type="text" name="canm" value="" size="12"/></td>
+         <td align="left"><input type="text" name="cade" value="" size="64"/></td>
+        </tr>
+      <tr class="r1">
+         <td colspan="2"><a href="#bottom">&#x21A1;</a>&nbsp;&nbsp;&nbsp;
+         <input type="submit" value="Add New Category First" onclick="return submitNewCategory()"/> or <input type="submit" value="Change"/></td>
+         <td colspan="1" align="right"><b>Categories Configuration In -> $dbname</b>&nbsp;
+         <input type="submit" value="Change" onclick="return checkConfigCatsChange()"/></td>
+        </tr>
+        <tr class="r2">
+          <td colspan="3"><div style="text-align:left; float"><font color="red">WARNING!</font>
+           Removing or changing categories is permanent! Each category one must have an unique ID.
+             Blank a category name to remove it. LOG records will change to the
+             <b>Unspecified</b> (id 1) category! And the categories <b>Unspecified</b>, <b>Income</b> and <b>Expense</b>  can't be removed!
+             </div>
+            </td>
+        </tr>
+        </table><input type="hidden" name="cchg" value="1"/></form><br>);
+
+$tbl =
+    qq(<table id="cnf_sys" class="tbl" border="1" width=")
+  . &Settings::pagePrcWidth
+  . qq(%">$TR_STATUS
+              <tr class="r0"><td colspan="3"><b>* SYSTEM CONFIGURATION *</b></td></tr>
+            <tr class="r1" align="left">
+                            <th width="20%">Variable</th>
+                            <th width="20%">Value</th>
+                            <th width="60%">Description <input type="submit" value="Change" style="float:right"/></th>
+                        </tr>
+       );
+my $stm = 'SELECT ID, NAME, VALUE, DESCRIPTION FROM CONFIG ORDER BY NAME;';
+$dbs = Settings::selectRecords( $db, $stm );
+my $REL = "";
+
+while ( my @row = $dbs->fetchrow_array() ) {
+
+    my $n = $row[1];
+    next if ( $n =~ m/^\^/ );    #skip private tagged settings
+    my $i = $row[0];
+    my $v = $row[2];
+    my $d = $row[3];
+    $d = "" if !$d;
+
+    if ( $n eq "TIME_ZONE" ) {
+        $n = '<a href="time_zones.cgi" target=_blank>' . $n . '</a>';
+        if ($tz) {
+            $v = $tz;
+        }
+        $v =
+            '<input name="var'
+          . $i
+          . '" type="text" value="'
+          . $v
+          . '" size="12">';
+        $d = '[<b><a href="time_zones.cgi" target=_blank>' . $d . '</a></b>]';
+    }
+    elsif ( $n eq "DATE_UNI" ) {
+        my ( $l, $u ) = ( "", "" );
+        if ( $v == 0 ) {
+            $l = "SELECTED";
+        }
+        else {
+            $u = "SELECTED";
+        }
+        $v = qq(<select id="dumi" name="var$i">
+                    <option value="0" $l>Locale</option>
+                    <option value="1" $u>Universal</option>
+                </select>);
+    }
+    elsif ( $n eq "AUTO_LOGIN" ) {
+        my ( $l, $u ) = ( "", "" );
+        if ( $v == 0 ) {
+            $l = "SELECTED";
+        }
+        else {
+            $u = "SELECTED";
+        }
+        $v = qq(<select id="almi" name="var$i">
+                   <option value="0" $l>Disabled</option>
+                   <option value="1" $u>Enabled</option>
+                </select>);
+    }
+    elsif ( $n eq "FRAME_SIZE" ) {
+        my ( $l, $m, $s, $t ) = ( "", "", "", "" );
+        if ( $v == 0 ) {
+            $l = "SELECTED";
+        }
+        elsif ( $v == 1 ) {
+            $m = "SELECTED";
+        }
+        elsif ( $v == 2 ) {
+            $s = "SELECTED";
+        }
+        else {
+            $t = $v;
+        }
+        $v = qq(<select id="frms" name="var$i">
+                   <option value="0" $l>Large</option>
+                   <option value="1" $m>Medium</option>
+                   <option value="2" $s>Small</option>
+                   <option value="3" $t>---</option>
+                </select>);
+    }
+    elsif ( $n eq "RTF_SIZE" ) {
+        my ( $l, $m, $s, $t ) = ( "", "", "", "" );
+        if ( $v == 0 ) {
+            $l = "SELECTED";
+        }
+        elsif ( $v == 1 ) {
+            $m = "SELECTED";
+        }
+        elsif ( $v == 2 ) {
+            $s = "SELECTED";
+        }
+        else {
+            $t = $v;
+        }
+        $v = qq(<select id="rtfs" name="var$i">
+                   <option value="0" $l>Large</option>
+                   <option value="1" $m>Medium</option>
+                   <option value="2" $s>Small</option>
+                   <option value="3" $t>---</option>
+                </select>);
+
+    }
+    elsif ( $n eq "THEME" ) {
+        my ( $s0, $s1, $s2, $s3 ) = ( "", "", "", "" );
+        if ( $v eq 'Standard' ) {
+            $s0 = " SELECTED";
+        }
+        elsif ( $v eq 'Sun' ) {
+            $s1 = " SELECTED";
+        }
+        elsif ( $v eq 'Moon' ) {
+            $s2 = " SELECTED";
+        }
+        elsif ( $v eq 'Earth' ) {
+            $s3 = " SELECTED";
+        }
+
+        $v = qq(<select id="theme" name="var$i">
+                   <option$s0>Standard</option>
+                   <option$s1>Sun</option>
+                   <option$s2>Moon</option>
+                   <option$s3>Earth</option>
+                </select>);
+    }
+    elsif ( $n eq "RELEASE_VER" ) {
+        $REL = qq(<td>$n</td>
+                      <td>$v</td>
+                      <td>$d</td>);
+        next;
+    }
+    elsif ( $n eq "COMPRESS_ENC" ) {
+        my ( $l, $u ) = ( "", "" );
+        if ( $v == 0 ) {
+            $l = "SELECTED";
+        }
+        else {
+            $u = "SELECTED";
+        }
+        $v = qq(<select id="cmp_enc" name="var$i">
+                    <option value="0" $l>False</option>
+                    <option value="1" $u>True</option>
+                    </select>);
+    }
+    elsif ( $n eq "DISP_ALL" or $n eq 'AUDIO_ENABLED') {
+        my ( $l, $u ) = ( "", "" );
+        if ( $v == 0 ) {
+            $l = "SELECTED";
+        }
+        else {
+            $u = "SELECTED";
+        }
+        $v = qq(<select id="log_disp" name="var$i">
+                    <option value="0" $l>False</option>
+                    <option value="1" $u>True</option>
+                    </select>);
+    }
+    elsif ($n eq "KEEP_EXCS"
+        or $n eq 'TRACK_LOGINS'
+        or $n eq 'DEBUG'
+        or $n eq 'TRANSPARENCY'
+        or $n eq 'AUTO_LOGOFF') {
+        my ( $l, $u ) = ( "", "" );
+        if ( $v == 0 ) {
+            $l = "SELECTED";
+        }
+        else {
+            $u = "SELECTED";
+        }
+        $v = qq(<select id="onoff" name="var$i">
+                    <option value="0" $l>Off</option>
+                    <option value="1" $u>On</option>
+                    </select>);
+    }
+    elsif ( $n eq 'SUBPAGEDIR'
+        or !defined( Settings::anon($n) ) )
+    { #change into settable field to us found here unknown and not anon.<td colspan="3"
+        $v =
+            '<input name="var'
+          . $i
+          . '" type="text" value="'
+          . $v
+          . '" size="12">';
+    }
+    my $tr = qq(<tr class="r0" align="left">
+                        <td>$n</td>
+                        <td>$v</td>
+                        <td>$d</td>
+                   </tr>);
+
+    if   ( $i < 300 ) { $tbl  .= $tr }
+    else              { $foot .= $tr }
+}
+
+$tbl = qq($tbl$foot<tr class="r1" align="left">$REL</tr>)
+  ;    #RELEASE VERSION we make to outstand last, can't be changed. :)
+
+my $frmVars = qq(
+     <form id="frm_vars" action="config.cgi">$tbl
+      <tr class="r1">
+         <td colspan="3" align="right"><b>System Settings In -> $dbname</b>&nbsp;<input type="submit" value="Change"/></td>
+      </tr>
+      <tr class="r2">
+         <td colspan="3" align="right">Note - Use <a href="#dbsets">DB Fix</a> to reset this system settings to factory defaults.</td>
+      </tr>
+      </tr>
+    </table><input type="hidden" name="sys" value="1"/></form><br>);
+
+$tbl = qq(<table id="cnf_fix" class="tbl" border="0" width=")
+  . &Settings::pagePrcWidth . qq(%">
+              <tr class="r0"><td colspan="2"><b>* DATA FIX *</b></td></tr>
+             );
+
+my $frmDB = qq(
+     <form id="frm_DB" action="config.cgi">$tbl
+        <tr class="r1" align="left"><th>Extra Action</th><th>Description</th></tr>
+        <tr class="r0" align="left"><td><input type="checkbox" name="reset_syst"/>Reset Settings</td><td>Resets system settings to default values.</td></tr>
+        <tr class="r1" align="left"><td><input type="checkbox" name="wipe_syst"/>Wipe Settings</td><td>Wipes system settings to be forced from the config file (will initiate logoff).</td></tr>
+        <tr class="r0" align="left"><td><input type="checkbox" name="reset_cats"/>Reset Categories</td><td>Resets Categories to factory values (will initiate logoff).</td></tr>
+        <tr class="r1" align="left"><td><input type="checkbox" name="del_by_cats"/>Delete by Category <font color=red></font><br>
+        $cats</td><td>Selects and displays by category logs to delete.</td></tr>
+        <tr class="r0" align="left"><td><input type="checkbox" name="del_from"/>Delete from Date <br>
+        <input id="fldFrom" name="date_from"/></td><td>Selects and displays from a date to into deep past logs to delete..</td></tr>
+        <tr class="r1">
+         <td colspan="2" align="right"><b>Data maintenance for -> $dbname</b>&nbsp;<input type="submit" value="Fix"/></td>
+        </tr>
+        <tr class="r2" align="left">
+             <td colspan="2">Perform this change/check in the event of experiencing data problems. Or periodically for data check and maintenance. <br>
+             Use 'Reset Settings' option to revert to current stored configuration. The changes you made since installation.<br>
+             Use the 'Wipe Settings' option if updating the application or need new defaults from main.cnf config file.<br>
+             Select both to reset and wipe, to overwrite all changes you made to config file settings.<br>
+            <font color="red">WARNING!</font> Checking any of the above extra actions will cause loss
+                            of your changes. Please, export/backup first.</td>
+        </tr>
+        </table><input type="hidden" name="pub" value="test"><input type="hidden" name="db_fix" value="1"/></form><br>
+        );
+$tbl = qq(<table id="cnf_fix" class="tbl" border="1" width=")
+  . &Settings::pagePrcWidth . qq(%">
+              <tr class="r0"><td colspan="2"><b>* CHANGE PASS *</b></td></tr>
+             );
+my $frmPASS = qq(
+     <form id="frm_PASS" action="config.cgi">$tbl
+        <tr class="r1" align="left"><td style="width:100px">Existing:</td><td><input type="password" name="existing" value="" size="12"/></td></tr>
+        <tr class="r1" align="left"><td>New:</td><td><input type="password" name="new" value="" size="12"/></td></tr>
+        <tr class="r1" align="left"><td>Confirmation:</td><td><input type="password" name="confirm" value="" size="12"/></td></tr>
+        <tr class="r1">
+         <td colspan="2" align="right"><b>Pass change for -> $alias</b>&nbsp;<input type="submit" value="Change"/></td>
+        </tr>
+        <tr class="r2"> <td colspan="2" align="right"><font color="red">WARNING!</font> Changing passwords will make past backups unusuable.</td></tr>
+        </table><input type="hidden" name="pass_change" value="1"/></form><br>
+        );
+$frmPASS = qq(<tr><td>Password changing has been dissabled!</td></tr>)
+  if Settings::isProgressDB();
+
+my @backups = ();
+my ( $file, $bck_list ) = "";
+opendir my $dir, &Settings::logPath;
+while ( $file = readdir $dir ) {
+    next if $file eq '.' or $file eq '..' or index( $file, 'bck_' ) == -1;
+    push @backups, $file;
+}
+close $dir;
+foreach my $file ( sort @backups ) {
+
+    #my $n = substr $file, length(&Settings::logPath);
+    $bck_list .=
+"<input name='bck_file' type='radio' value='$file' onclick='setBackupFile(this);'>$file</input><br>";
+}
+if ( length $bck_list == 0 ) {
+    $bck_list =
+'<p>Restore will bring back and merge log entries from the time of backup.</p>
+                        </td>
+                </tr>';
+}
+else {
+    $bck_list =
+      qq(<p>Tick Select Backup to Restore or Delete</p><p>$bck_list</p>
+    <input type="submit" onclick="deleteBackup();return false;" value="Delete"/>&nbsp;&nbsp;<input type="Submit" value="Restore"/></form>);
+}
+
+my $inpRestore = qq(<b>Local File:</b>&nbsp;&nbsp;
+<input name="bck_upload" id="bck_upload" type="file"/>&nbsp;&nbsp;<input type="Submit" value="Restore"/>);
+
+my $inpCVS =
+qq(<input type="button" onclick="return exportToCSV('log',0);" value="Export"/>&nbsp;
+<input type="button" onclick="return exportToCSV('log',1);" value="View"/>);
+if ( ( Settings::anon("backup_enabled") == 0 ) ) {
+    $inpRestore = $inpCVS =
+      '&nbsp;<i><b>Sorry this feature has been dissabled!</b></i>';
+}
+
+#
+#  Page printout from here!
+#
+print qq(
+<a name="top"></a><center>
+    <div><a name="vars"></a>$frmVars</div>
+    <div><a name="categories"></a>$frmCats</div>
+    <div><a name="dbsets"></a>$frmDB</div>
+    <div><a name="passets"></a>$frmPASS</div>
+    <div id="rz" style="text-align:center;width:). &Settings::pagePrcWidth. qq(%;">
+        <a href="#top">&#x219F;</a>&nbsp;Configuration status -> <b>$status</b>&nbsp;<a href="#bottom">&#x21A1;</a>
+    </div>
+    <br>
+    <div id="rz" style="text-align:left; width:640px; padding:10px;">
+            <table border="0" width="100%">
+
+
+                <tr><td><a name="backup"></a><H3>Backup File Format</H3></td></tr>
+                <tr><td><input id="btnFetch" type="button" onclick="alert('Backing up next, this can take up some time. Please give it few minutes and return or refresh the config page!');return fetchBackup();" value="Fetch"/><hr></td></tr>
+
+                <tr><td><div id="div_backups"><form id="frm_bck" action="config.cgi" method="post">$bck_list</form></div><hr></td></tr>
+
+                <tr><td>Notice - Uploads might fail on large backups, corrupt file, and/or due to browser settings.<br>
+                        <form id="frmUpload" action="config.cgi" method="post" enctype="multipart/form-data">
+                        $inpRestore
+                        <input type="hidden" name="upload" value="1"/>
+                        </form><hr>
+                </td></tr>
+
+                <form action="config.cgi" method="post" enctype="multipart/form-data">
+                <tr>
+                <td><H3>CSV File Format</H3>Notice: (<font color=red>This is an obsolete feature, use is not recommended!</font>)</td></tr>
+                <tr><td style="text-align:left"><p>This Servers DSN is -><br> )
+  . Settings::dsn()
+  . qq(</p></td></tr>
+                <tr><td>
+                        <b>Import Categories</b>: <input type="file" name="data_cat" />
+                </td></tr>
+                <tr><td style="text-align:right;">
+                        <input type="submit" name="Submit" value="Submit"/></td>
+                </tr>
+                <tr><td><b>Export Categories:</b>
+                       <input type="button" onclick="return exportToCSV('cat',0);" value="Export"/>&nbsp;
+                       <input type="button" onclick="return exportToCSV('cat',1);" value="View"/>
+                </td></tr>
+                <tr><td>
+                        <br>
+                        <b>Import Log</b>: <input type="file" name="data_log" /></td></tr>
+                <tr style="border-right: 0px solid black;"><td style="text-align:right;">
+                        <input type="submit" name="Submit" value="Submit"/></td></tr>
+                </form>
+                <tr><td><b>Export Log:</b>$inpCVS
+                </td></tr>
+            </table><br><a href="#top">&#x219F;&nbsp;Go to Top of page</a>
+    </div>
+   <hr>
+   <div id="rz" style="text-align:left; position:relative;width:640px; padding:10px;">
+       <h2>Backup Specs</h2>
+    <p><ol>
+        <li><h3>Backup Rules</h3>
+            <ol>
+                <li>Backup provides an compressed archive of only the current logged in database.</li>
+                <li>Backup should and can be uploaded to local client to later restore.</li>
+                <li>Issuing backup always creates on the server an copy.</li>
+                <li>Backups are issued manually and are interactive.</li>
+                <li>Backups are server side encrypted.</li>
+                <li>Backups can be particularly server specific, therefore not suitable for restoration on new or different hardware.</li>
+                <li>Backup uses OpenSSL, wich under different versions can be uncompatible in the implemented type of encryption.</li>
+            </ol>
+        </li>
+        <li><h3>Restore Rules</h3>
+            <ol>
+                <li>The restoring is only possible if logged into current database the backup belongs.</li>
+                <li>Restoration is of only logs found missing in current log.</li>
+                <li>Restoration is not removing entries in existing current log data.</li>
+                <li>Restoration might not be possible after an server application upgrade.</li>
+                <li>Restoration of old backups is not made possible or is safe, on new stable application releases.
+                 <ul><li><i>Upgrade your application after restoring it first, as an upgrade will/might migrate structure and data.</i></li></ul></li>
+                <li>
+                Restoration will import on an previous date backuped data, in case when recreating a newly created same alias database.
+                    <ul><li>For example: If the database file has been deleted or is blank on login, you than can run a restore, if you have an backup, for given server.</li></ul>
+                </li>
+
+
+            </ol>
+        </li>
+        <li><h3>Purpose</h3>
+            <ol>
+                    <li>Provides a direct safeguard, besides any external backup procedures.</li>
+                    <li>Provides a before snapshot, if venturing into major log modifications.</li>
+                    <li>Encourages experimentation, with data deletion and modification.</li>
+                    <li>Required if downgrading from an failed application upgrade, or found a missuesed or corrupted state of current data.</li>
+            </ol>
+        </li>
+    </ol></p>
+    </div>
+</div>
+<hr>
+<div><a name="bottom"></a>
+            <a href="main.cgi"><h3>Back to Main Log</h3></a><h3><a href="login_ctr.cgi?logout=bye">LOGOUT</a></h3>
+</div>
+);
+
+print $cgi->end_html;
+$db->disconnect();
+
+exit;
+
+sub getHeader {
+    print $cgi->header( -expires => "+6s", -charset => "UTF-8" );
+    print $cgi->start_html(
+        -title   => "Personal Log",
+        -BGCOLOR => Settings::theme('colBG'),
+        -onload  => "onBodyLoadGeneric();",
+        -style   => [
+            { -type => 'text/css', -src => 'wsrc/jquery-ui.css' },
+            { -type => 'text/css', -src => 'wsrc/jquery-ui.theme.css' },
+            {
+                -type => 'text/css',
+                -src  => 'wsrc/jquery-ui-timepicker-addon.css'
+            },
+            { -type => 'text/css', -src => 'wsrc/tip-skyblue/tip-skyblue.css' },
+            {
+                -type => 'text/css',
+                -src  => 'wsrc/tip-yellowsimple/tip-yellowsimple.css'
+            },
+            { -type => 'text/css', -src => 'wsrc/effects.css' },
+            { -type => 'text/css', -src => Settings::theme('css') },
+        ],
+        -script => [
+            { -type => 'text/javascript', -src => 'wsrc/main.js' },
+            { -type => 'text/javascript', -src => 'wsrc/jquery.js' },
+            { -type => 'text/javascript', -src => 'wsrc/jquery-ui.js' },
+            {
+                -type => 'text/javascript',
+                -src  => 'wsrc/jquery-ui-timepicker-addon.js'
+            },
+            {
+                -type => 'text/javascript',
+                -src  => 'wsrc/jquery-ui-sliderAccess.js'
+            },
+            { -type => 'text/javascript', -src => 'wsrc/jquery.poshytip.js' }
+        ],
+    );
+}
+
+sub processSubmit {
+
+    my $change        = $cgi->param("cchg");
+    my $chgsys        = $cgi->param("sys");
+    my $chdbfix       = $cgi->param("db_fix");
+    my $passch        = $cgi->param("pass_change");
+    my $del_by_cats   = $cgi->param("del_by_cats");
+    my $category      = $cgi->param("cats");
+    my $del_by_date   = $cgi->param("del_from");
+    my $del_date_from = $cgi->param("date_from");
+    my ( $s, $d );
+
+    try {
+        $dbs = Settings::selectRecords( $db, $stmtCat );
+        if ($passch) {
+            my ( $ex, $ne, $cf ) = (
+                $cgi->param("existing"),
+                $cgi->param("new"), $cgi->param("confirm")
+            );
+            if ( $ne ne $cf ) {
+                $status = "New pass must match confirmation!";
+                print
+"<center><div><p><font color=red>Client Error</font>: $status</p></div></center>";
+            }
+            else {
+                if ( confirmExistingPass($ex) ) {
+                    &changePass($ne);
+                    $status = "Pass Has Been Changed";
+                }
+                else {
+                    $status =
+"Wrong existing pass was entered, are you user by alias: $alias ?";
+                    print
+"<center><div><p><font color=red>Client Error</font>: $status</p></div></center>";
+                }
+            }
+            Settings::toLog( $db, $status );
+            openlog( Settings::dsn(), 'cons,pid', "user" );
+            syslog( 'info', 'Status:%s',                      $status );
+            syslog( 'info', 'Password change request for %s', $alias );
+            closelog();
+            $TR_STATUS =
+qq(<tr><td colspan="3"><b><font color=red>$status</font></b></td></tr>)
+              if $status !~ m/$RDS/;
+        }
+        elsif ( $change == 1 ) {
+
+            while ( my @row = $dbs->fetchrow_array() ) {
+
+                my $cid = $row[0];
+                my $cnm = $row[1];
+                my $cds = $row[2];
+
+                my $pnm = $cgi->param( 'nm' . $cid );
+                my $pds = $cgi->param( 'ds' . $cid );
+
+                if ( $pnm ne $cnm || $pds ne $cds ) {
+
+                    if ( ( $cid != 1 && $cid != 32 && $cid != 35 )
+                        && $pnm eq "" )
+                    {
+
+                        $s = "SELECT $CID, ID_CAT FROM LOG WHERE ID_CAT ="
+                          . $cid . ";";
+                        $d = $db->prepare($s);
+                        $d->execute();
+
+                        while ( my @r = $d->fetchrow_array() ) {
+                            $s = "UPDATE LOG SET ID_CAT=1 WHERE $CID="
+                              . $r[0] . ";";
+                            $d = $db->prepare($s);
+                            $d->execute();
+                        }
+
+                        #Delete
+                        $s = "DELETE FROM CAT WHERE ID=" . $cid . ";";
+                        $d = $db->prepare($s);
+                        $d->execute();
+
+                    }
+                    else {
+                        #Update
+                        $s =
+                            "UPDATE CAT SET NAME='"
+                          . $pnm
+                          . "', DESCRIPTION='"
+                          . $pds
+                          . "' WHERE ID="
+                          . $cid . ";";
+                        $d = $db->prepare($s);
+                        $d->execute();
+                    }
+                }
+            }
+            $status    = "Updated Categories!";
+            $TR_STATUS = qq(<tr><td colspan="3"><b>$status</b></td></tr>);
+        }
+
+        if ( $change > 1 ) {
+
+            my $caid  = $cgi->param('caid');
+            my $canm  = $cgi->param('canm');
+            my $cade  = $cgi->param('cade');
+            my $valid = 1;
+
+            while ( my @row = $dbs->fetchrow_array() ) {
+
+                my $cid = $row[0];
+                my $cnm = $row[1];
+                my $cds = $row[2];
+
+                if ( $cid == $caid || $cnm eq $canm ) {
+                    $valid = 0;
+                    last;
+                }
+            }
+
+            if ($valid) {
+                $d = $db->prepare('INSERT INTO CAT VALUES (?,?,?)');
+                $d->execute( $caid, $canm, $cade );
+                $status = "Added Category $canm!";
+            }
+            else {
+                $status = "ID->"
+                  . $caid
+                  . " or -> Category->"
+                  . $canm
+                  . " is already assigned, these must be unique!";
+                die
+"<div><p><font color=red>Client Error</font>: $status</p></div>";
+            }
+            $status = "Inserted new category[$canm]";
+
+        }
+        elsif ( $chgsys == 1 ) {
+            &changeSystemSettings;
+            $status = "Changed System Settings!";
+        }
+        elsif ($chdbfix) {
+
+            my $isByCat  = ( $del_by_cats eq 'on' && $category > 0 );
+            my $isByDate = ( $del_by_date eq 'on' );
+
+            if ( $isByCat || $isByDate ) {
+
+                my $output =
+qq(<a name="top"></a><form id="frm_log" action="data.cgi" onSubmit="return formDelValidation();">
+                    <TABLE class="tbl" border="0" width=")
+                  . &Settings::pagePrcWidth . qq(%">
+                    <tr class="hdr"><td colspan="5" class="r1"><h3>Select Categories To Delete</h3></td></tr>
+                    <tr class="r2">
+                        <th><a id="to_bottom" href="#bottom" title="Go to bottom of page."><span class="ui-icon ui-icon-arrowthick-1-s" style="float:none;"></span></a> Date</th>
+                        <th>Time</th>
+                        <th>Log</th><th>#</th>
+                        <th>Category</th>
+                    </tr>);
+                my $sel = "";
+                if ($isByCat) { $sel = "ID_CAT ='$category'" }
+                if ($isByDate) {
+                    $sel .= " AND " if ($isByCat);
+                    $sel .= "DATE<='$del_date_from'";
+                }
+
+                $dbs = Settings::selectRecords( $db,
+"SELECT $CID, ID_CAT, DATE, LOG FROM LOG WHERE $sel ORDER BY DATE;"
+                );
+                while ( my @row = $dbs->fetchrow_array() ) {
+                    my $id = $row[0];                # rowid
+                    my $ct = $hshCats{ $row[1] };    #ID_CAT
+                    my $dt =
+                      DateTime::Format::SQLite->parse_datetime( $row[2] );
+                    my $log = $row[3];
+                    my ( $dty, $dtf ) = $dt->ymd;
+                    my $dth = $dt->hms;
+                    if ( Settings::universalDate() == 1 ) {
+                        $dtf = $dty;
+                    }
+                    else {
+                        $dtf = $lang->time2str( "%d %b %Y", $dt->epoch,
+                            Settings::timezone() );
+                    }
+
+                    $log =~ s/''/'/g;
+                    $log =~ s/\\n/<br>/gs;
+
+                    $output .= qq(<tr class="r2">
+                    <td width="15%">$dtf<input id="y$id" type="hidden" value="$dty"/></td>
+                    <td id="t$id" width="10%" class="tbl">$dth</td>
+                    <td id="v$id" class="log" width="40%">$log</td>
+                    <td id="c$id" width="10%" class="tbl">$ct</td>
+                    <td width="20%">
+                        <input name="chk" type="checkbox" value="$id"/>
+                    </td></tr>);
+                }    #while
+                $output .= qq(<tr class="r3"><td style="text-align:left;">
+       <a id="to_top" href="#top" title="Go to top of page.">To Top<span class="ui-icon ui-icon-arrowthick-1-n" style="float:none;"></span></a>
+       <a href="config.cgi?CGISESSID=$sid#dbsets">Go Back</a></td>
+       <td colspan="4" align="right">
+        <button onclick="return selectAllLogs()">Select All</button>
+        <input type="reset" value="Unselect All"/>
+        <input type="hidden" name="confirmed" value="1">
+        <input id="del_sel" type="submit" value="Delete Selected"/>
+        </td></tr>
+        </form></TABLE>);
+
+                &Settings::setupTheme;
+                &getHeader;
+
+                print "<div>$output</div>";
+
+                print $cgi->end_html;
+                $db->disconnect();
+                exit;
+
+            }
+            else { processDBFix() }
+            $status = "Performed Database Fixes!";
+        }
+        $TR_STATUS = qq(<tr><td colspan="3"><b>Status -> </b>$status</td></tr>)
+          if $status !~ m/$RDS/;
+
+    }
+    catch {
+
+        my $err = $@;
+        my $pwd = `pwd`;
+        $pwd =~ s/\s*$//;
+
+        $ERROR =
+            "<hr><font color=red><b>SERVER ERROR</b></font> on "
+          . DateTime->now
+          . "<hr><pre>"
+          . $pwd
+          . "/$0 -> &"
+          . caller
+          . " -> [$err]", "</pre>",
+
+    }
+
+    openlog( Settings::dsn(), 'cons,pid', "user" );
+    syslog( 'info', 'Status:%s', $status );
+    syslog( 'err',  '%s',        $ERROR ) if ($ERROR);
+    closelog();
+}
+
+sub confirmExistingPass {
+    my $crypt = encryptPassw( $_[0] );
+    my $sql = "SELECT ALIAS from AUTH WHERE ALIAS='$alias' AND PASSW='$crypt';";
+
+    $dbs = Settings::selectRecords( $db, $sql );
+    my @a = $dbs->fetchrow_array();
+    if ( @a == 1 && $a[0] eq $alias ) {
+        return 1;
+    }
+    return 0;
+}
+
+sub changePass {
+    my $pass = encryptPassw( $_[0] );
+    $dbs = Settings::selectRecords( $db,
+        "UPDATE AUTH SET PASSW='$pass' WHERE ALIAS='$alias';" );
+    my @a = $dbs->fetchrow_array();
+    if ( @a == 1 && $a[0] eq $alias ) {
+        return 1;
+    }
+    return 0;
+}
+
+sub encryptPassw {
+    return uc crypt $_[0], hex Settings->CIPHER_KEY;
+}
+
+sub processDBFix {
+
+    my $rs_syst = $cgi->param("reset_syst");
+    my $rs_cats = $cgi->param("reset_cats");
+    my $wipe_ss = $cgi->param("wipe_syst");
+
+    my $sql;
+    my $date;
+    my $cntr_upd = 0;
+    try {
+
+        my %dates = ();
+
+    #Hash is unreliable for returning sequential order of keys so array must do.
+        my @dlts     = ();
+        my $cntr_del = 0;
+        my $existing;
+        my @row;
+
+        getHeader() if (&Settings::debug);
+        print "<h3>Database Records Fix Result</h3>\n<hr>" if &Settings::debug;
+        print "<body><pre>Started transaction!\n"          if &Settings::debug;
+
+        #Transactions work if driver is set properly!
+        $db = Settings::connectDBWithAutocommit();
+
+#DBI->connect(Settings::dsn(), $alias, $p, {AutoCommit => 0, RaiseError => 1, PrintError => 0, show_trace=>1});
+        $db->do('BEGIN TRANSACTION;');
+
+# Check for duplicates, which are possible during imports or migration as internal rowid is not primary in log.
+# @TODO Following should be selecting an cross SQL compatibe view.
+        $dbs = Settings::selectRecords( $db,
+            "SELECT $CID, DATE FROM LOG ORDER BY DATE;" );
+
+        while ( @row = $dbs->fetchrow_array() ) {
+            my $existing = $dates{ $row[0] };
+            if ( $existing && $existing eq $row[1] ) {
+                $dlts[ $cntr_del++ ] = $row[0];
+            }
+            else {
+                $dates{ $row[0] } = $row[1];
+            }
+        }
+
+        foreach my $del (@dlts) {
+            $sql = "DELETE FROM LOG WHERE $CID=$del;";
+            print "$sql\n<br>";
+            my $st_del = $db->prepare($sql);
+            $st_del->execute();
+        }
+
+        &renumerate;
+        print "Doing removeOldSessions next..." if &Settings::debug;
+        &Settings::removeOldSessions;
+        print "done!\n" if &Settings::debug;
+
+
+        if ($rs_cats) {
+            print "Doing resetCategories next..." if &Settings::debug;
+            #Let migration algorithm handle re-creation on logon.
+            $db->do("DELETE FROM CAT;");
+            $db->do("DROP TABLE CAT;");
+            $LOGOUT = 1;
+            print "done!\n" if &Settings::debug;
+        }
+
+        if     ($rs_syst) {
+            print "Doing resetSystemConfiguration next..." if &Settings::debug;
+            &resetSystemConfiguration();
+            print "Doing resetSystemConfiguration next..." if &Settings::debug;
+        }elsif ($wipe_ss) {
+            print "Doing wipeSystemConfiguration next..." if &Settings::debug;
+            Settings::saveReserveAnons()
+              ;   #So we can bring back from dead application reserve variables.
+                  #Let migration algorithm handle re-creation on logon.
+            $db->do("DELETE FROM CONFIG;");
+            $db->do("DROP TABLE CONFIG;");
+            $LOGOUT = 1;
+            print "done!\n" if &Settings::debug;
+        }
+
+        $db->do('COMMIT;')        if (&Settings::debug);
+        print "Commited ALL!<br>" if (&Settings::debug);
+
+
+
+        if (&Settings::debug) {
+            $db  = Settings::connectDB();
+            $dbs = $db->do("VACUUM;");
+            print "Issued  VACUUM!<br>" if (&Settings::debug);
+        }
+
+        if ($LOGOUT) {
+            &logout;
+        }
+        if (&Settings::debug) {
+            print
+"<hr><pre>You are in debug mode further actions are halted!</pre>";
+            exit;
+        }
+
+    }
+    catch {
+        $db->do('ROLLBACK;');
+        LifeLogException->throw(
+            error =>
+qq(@&processDBFix error -> $_ with statement->[$sql] for $date update counter:$cntr_upd \nERROR->$@).Settings::dumpVars(),
+            show_trace => 1
+        );
+    }
+}
+
+sub renumerate {
+
+    # NOTE: This is most likelly all performed under an transaction.
+    my $sql;
+
+# Fetch list by date identified rtf attached logs, with possibly now an old LID, to be updated to new one.
+    print "Doing renumerate next...\n" if &Settings::debug;
+
+    $sql = "SELECT $CID, DATE FROM LOG WHERE RTF > 0;";
+
+    my @row   = Settings::selectRecords( $db, $sql )->fetchrow_array();
+    my %notes = ();
+    if ( scalar @row > 0 ) {
+        $notes{ $row[1] } = $row[0];    #<- This is current LID, will change.
+        print "Expecting Note entry for  "
+          . $row[1]
+          . "  LOG.ID["
+          . $row[0]
+          . "]<- LID...\n";
+    }
+
+    ### RENUMERATE LOG
+    $db->do("CREATE TABLE life_log_temp_table AS SELECT * FROM LOG;");
+    if (&Settings::isProgressDB) {
+        $db->do('DROP TABLE LOG CASCADE;');
+    }
+    else {
+        $db->do('DROP TABLE LOG;');
+    }
+    $db->do(&Settings::createLOGStmt);
+    $db->do(
+        q(INSERT INTO LOG (ID_CAT, DATE, LOG, RTF, AMOUNT,AFLAG)
+                    SELECT ID_CAT, DATE, LOG, RTF, AMOUNT, AFLAG FROM life_log_temp_table ORDER by DATE;)
+    );
+    $db->do('DROP TABLE life_log_temp_table;');
+    ###
+
+    # Update  notes with new log id, if it changed.
+
+    foreach my $date ( keys %notes ) {
+        my $old = $notes{$date};
+        $sql = "SELECT $CID FROM LOG WHERE RTF > 0 AND DATE = '$date';";
+        print "Selecting ->  $sql\n";
+        $dbs = Settings::selectRecords( $db, $sql );
+        @row = $dbs->fetchrow_array();
+        if ( scalar @row > 0 ) {
+            my $new = $row[0];
+            if ( $new ne $old ) {
+                $db->do("UPDATE NOTES SET LID =$new WHERE LID=$old;");
+                print "Updated Note in LID[$old] to be LID[$new]\n";
+            }
+            else {
+                print "All fine skipping LID[$new]\n";
+            }
+        }
+        else {
+            print "ERROR NOT FOUND: $date for LID:$old!\n";
+        }
+
+    }
+
+    # Delete Orphaned Notes entries if any?
+
+    $dbs = Settings::selectRecords(
+        $db, "SELECT LID, LOG.$CID from NOTES LEFT JOIN LOG ON
+                                                NOTES.LID = LOG.$CID WHERE LOG.rowid is NULL;"
+    );
+
+    if ($dbs) {
+        foreach ( @row = $dbs->fetchrow_array() ) {
+            $db->do("DELETE FROM NOTES WHERE LID=$row[0];")
+              if $row[0]
+              ; # 0 is the place keeper for the shared zero record, don't delete.
+        }
+    }
+    print "done!\n" if &Settings::debug;
+}
+
+
+
+sub resetSystemConfiguration {
+
+    my ( $id, $name, $value, $desc);
+    my $cnf    = new CNFParser( &Settings::logPath . 'main.cnf' );
+    my $inData = 0;
+    my $err    = "";
+    my %vars   = {};
+    my @lines  = split( '\n', $cnf->anon('CONFIG') );
+
+    try {
+        my $insert = $db->prepare('INSERT INTO CONFIG VALUES (?,?,?,?)');
+        my $update = $db->prepare('UPDATE CONFIG SET VALUE=? WHERE ID=?;');
+        my $updExs = $db->prepare('UPDATE CONFIG SET NAME=?, VALUE=? WHERE ID=?;');
+        foreach my $line ( @lines ) {
+            my @tick = split( "`", $line );
+            next if $line eq '4';
+            if ( scalar(@tick) == 2 ) {
+
+       #Specification Format is: ^{id}|{property}={value}`{description}\n
+       #There is no quoting necessary unless capturing spaces or tabs for value!
+                my %hsh = $tick[0] =~ m[(\S+)\s*=\s*(\S+)]g;
+                if ( scalar(%hsh) == 1 ) {
+                    for my $key ( keys %hsh ) {
+                        my %nash = $key =~ m[(\d+)\s*\|\$\s*(\S+)]g
+                          ;    # {id}|{property} <- is the key.
+                        if ( scalar(%nash) == 1 ) {
+                            for my $id ( keys %nash ) {
+                                $name  = $nash{$id};
+                                $value = $hsh{$key};    # <- {value}.
+                                if ( $vars{$id} ) {
+                                    $err .=
+                                      "UID{$id} taken by $vars{$id}-> $line\n";
+                                }
+                                else {
+                                    $dbs = Settings::selectRecords( $db,
+"SELECT ID, NAME, VALUE, DESCRIPTION FROM CONFIG WHERE NAME LIKE '$name';"
+                                    );
+                                    my @row = $dbs->fetchrow_array();
+                                    if ( scalar @row == 0 ) {
+
+                     #The id in config file has precedence to the one in the db,
+                     # from a possible previous version.
+                                        $dbs = Settings::selectRecords( $db,
+"SELECT ID FROM CONFIG WHERE ID = $id;"
+                                        );
+                                        @row = $dbs->fetchrow_array();
+                                        if ( scalar @row == 0 ) {
+                                            $insert->execute(
+                                                $id,    $name,
+                                                $value, $tick[1]
+                                            );
+                                        }
+                                        else {
+                                            #rename, revalue exsisting id
+                                            $updExs->execute( $name, $value,
+                                                $id );
+                                        }
+                                    }
+                                    else {
+                                        $update->execute( $value, $id );
+                                    }
+                                }
+                            }
+                        }
+                        else {
+                            $err .=
+"Invalid, spected {uid}|{setting}`{description}-> $line\nlines:\n@lines";
+                        }
+
+                    }    #rof
+                }
+                else {
+                    $err .= "Invalid, spected entry -> $line\n";
+                }
+
+            }
+            elsif ( length($line) > 0 ) {
+                if ( scalar(@tick) == 1 ) {
+                    $err .= "Corrupt entry, no description supplied -> $line\n &lt&ltCONFIG&lt;\n".$cnf->anon('CONFIG')."\n&gt&gt;&gt;;\n";
+                }
+                else {
+                    $err .= "Corrupt Entry -> $line\n";
+                }
+            }
+        }
+        die "Configuration script "
+          . &Settings::logPath
+          . "main.cnf' contains errors."
+          if $err;
+        Settings::getConfiguration($db);
+    }
+    catch {
+        print $cgi->header;
+        print
+"<font color=red><b>SERVER ERROR!</b></font>[id:$id,name:$name,value:$value]->$@<br> "
+          . $_
+          . "<br><pre>$err</pre>";
+        print $cgi->end_html;
+        exit;
+    }
+}
+
+sub logout {
+    Settings::session()->delete();
+    Settings::session()->flush();
+    print $cgi->redirect("login_ctr.cgi");
+    exit;
+}
+
+sub changeSystemSettings {
+    my $updated;
+    my $id_theme;
+    try {
+        $dbs = Settings::selectRecords( $db,
+            "SELECT ID FROM CONFIG WHERE NAME LIKE 'THEME';" );
+        while ( my @r = $dbs->fetchrow_array() ) { $id_theme = $r[0] }
+        $dbs = Settings::selectRecords( $db, "SELECT ID, NAME FROM CONFIG;" );
+        while ( my @r = $dbs->fetchrow_array() ) {
+            my $var = $cgi->param( 'var' . $r[0] );
+            if ( defined $var ) {
+                Settings::configProperty( $db, $r[0], undef, $var );
+                $updated = 1;
+                Settings::saveCurrentTheme($var) if $r[0] == $id_theme;
+            }
+        }
+        Settings::getConfiguration($db) if ($updated);
+    }
+    catch {
+        die "\nException\@$0::changeSystemSettings() line ",
+          __LINE__
+          . " failed ->\n $@"
+          ; #<- It is actually better to die than throw exception traces. Easier to find problem this way.
+    }
+}
+
+sub backupDelete {
+    my $n = shift;
+    my $f = &Settings::logPath . $n;
+    try {
+        if ( -e $f ) {
+            LifeLogException->throw(
+"File -> <i>[$n]</i> is not a backup file or it doesn't belong to $alias (you)!"
+            ) if ( index( $file, /bck_\d+$alias\_log/ ) == -1 );
+            unlink($f) or LifeLogException->throw("Failed to delete $n! -> $!");
+            print $cgi->redirect("config.cgi?CGISESSID=$sid");
+            exit;
+        }
+        else {
+            LifeLogException->throw("File $n does not exist!");
+        }
+    }
+    catch {
+        my $err = $@;
+        &getHeader;
+        print $cgi->start_html;
+        print qq(<div class=r0><b>Delete Has Failed!<br>[$err]</div>
+                 <div class=r2><a href="config.cgi?CGISESSID=$sid"><br>Go Back</a> or <a href="main.cgi"><br>Go to main LOG</a></div>
+        );
+        print $cgi->end_html;
+        exit;
+    };
+}
+
+# Notice -> Fetch on the page calls this subroutine, and if it fails to produce one,
+# the most likely problem is that the Notes table has a wrong binary type.
+# since v.2.4 this method has been tested and will not fail any db engine structure.
+# As the backup produced is in the original deployed source, which is sqlite not the other db engine.
+# Here the insert stament is FROM (data...) into -> SQLite.NOTES((LID INT PRIMARY KEY NOT NULL, DOC BLOB)
+sub backup {
+
+    my $pass = Settings::pass();
+    my @dr   = split( ':', Settings::dbSrc() );
+    my $ball =
+      'bck_' . $today->strftime('%Y%m%d%H%M%S_') . $dr[1] . "_$dbname.osz";
+
+    my $file =
+      &Settings::logPath . 'data_' . $dr[1] . '_' . "$dbname" . "_log.db";
+    my $dsn        = "DBI:SQLite:dbname=$file";
+    my $weProgress = Settings::isProgressDB();
+    my $stamp      = $today . "\t";
+    $stamp =~ s/T/ /g;
+    open( my $fhLog, ">>", &Settings::logPath . "backup.log" )
+      if &Settings::debug;
+
+    if ($weProgress) {
+        print $fhLog $stamp, "Started Pg database backup.\n"
+          if &Settings::debug;
+        try {
+            $pass = uc crypt $pass, hex Settings->CIPHER_KEY;
+            unlink $file if -e $file;    # we will recreate it next.
+        }
+        catch { };
+        my $dbB =
+          DBI->connect( $dsn, $alias, $pass,
+            { AutoCommit => 1, RaiseError => 1 } )
+          or LifeLogException->throw(
+            error      => "Invalid database! $dsn [$@]",
+            show_trace => &Settings::debug
+          );
+        &Settings::resetToDefaultDriver;
+        $dbB->do(&Settings::createCATStmt);
+        $dbB->do(&Settings::createLOGStmt);
+        $dbB->do(&Settings::createNOTEStmt);
+        print $fhLog $stamp, "Created file database $file from -> ",
+          Settings::dbSrc(), "\n"
+          if &Settings::debug;
+
+        my $in = $dbB->prepare('INSERT INTO CAT VALUES (?,?,?)');
+        my $st = Settings::selectRecords( $db, 'SELECT * FROM CAT;' );
+        while ( my @c = $st->fetchrow_array() ) {
+            $in->execute( $c[0], $c[1], $c[2] );
+        }
+
+        $in = $dbB->prepare(
+'INSERT INTO LOG     (ID_CAT, DATE, LOG, RTF, AMOUNT, AFLAG, STICKY) VALUES (?,?,?,?,?,?,?);'
+        );
+        $st = Settings::selectRecords( $db,
+'SELECT ID_CAT, DATE, LOG, RTF, AMOUNT, AFLAG, STICKY  FROM LOG order by DATE;'
+        );
+        while ( my @c = $st->fetchrow_array() ) {
+            $in->execute( $c[0], $c[1], $c[2], $c[3], $c[4], $c[5], $c[6] );
+        }
+        $in = $dbB->prepare('INSERT INTO NOTES (LID, DOC) VALUES(?,?);');
+        $st = Settings::selectRecords( $db, 'SELECT LID, DOC FROM NOTES;' );
+        while ( my @c = $st->fetchrow_array() ) {
+            try {
+               # $in->bind_param(1, $c[0]);
+               # $in->bind_param(2, $c[1]);#, { pg_type => DBD::Pg::PG_BYTEA });
+               # $in->execute();
+
+                #     my $d = uncompress($c[1]);
+                #     my $cipher = Settings::newCipher(Settings::pass());
+                #     my $doc = $cipher->decrypt($d);
+
+                #     $cipher = Settings::newCipher($pass);
+                #     $doc = compress($cipher->encrypt($doc));
+                # $inNotes->bind_param(1, $c[0]);
+                # $inNotes->bind_param(2, $doc);
+                $in->execute( $c[0], $c[1] );
+            }
+            catch {
+                print $fhLog $stamp, "Error NOTES.LID[$c[0]]-> $@"
+                  if &Settings::debug;
+            }
+        }
+        $dbB->disconnect();
+    }
+    else {
+        print $fhLog $stamp, "Started database backup.\n" if &Settings::debug;
+        $file = Settings::dbFile();
+    }
+
+    my $pipe =
+        "tar czf - "
+      . &Settings::logPath
+      . 'main.cnf' . " "
+      . $file
+      . " | openssl enc -aes-256-cbc -md sha512 -pbkdf2 -iter 100000 -salt -S "
+      . Settings->CIPHER_KEY
+      . " -pass pass:$pass-$alias -out "
+      . &Settings::logPath
+      . $ball
+      . " 2>/dev/null";
+    if (&Settings::debug) {
+        print $fhLog $stamp, $pipe, "\n";
+        close $fhLog;
+    }
+
+    print $cgi->header(
+        -charset    => "UTF-8",
+        -type       => "application/octet-stream",
+        -attachment => $ball
+    );
+    my $rez = `$pipe`;
+    open( my $TAR, "<", &Settings::logPath . $ball )
+      or die "Failed creating backup -> $ball";
+    while (<$TAR>) { print $_; }
+    close $TAR;
+
+    unlink $file if $weProgress;
+    exit;
+}
+
+sub restore {
+
+    my $file = shift;
+    my ( $tar, $pipe, @br, $stdout, $b_db );
+    my $pass = Settings::pass();
+    my $hndl = $cgi->param('bck_upload');
+    my $dbck = &Settings::logPath . "bck/";
+    `mkdir $dbck` if ( !-d $dbck );
+    my $stage = "Initial";
+    my $stamp = $today . "\t";
+    $stamp =~ s/T/ /g;
+    my $fhLog;
+    open( $fhLog, ">>", &Settings::logPath . "backup_restore.log" );
+    print $fhLog $stamp, "Started restore procedure.\n";
+
+    try {
+        getHeader();
+        print $cgi->start_html;
+
+        if ($file) {    #Open handle on server where backup is to be restored.
+            my $f = &Settings::logPath . $file;
+            open( $hndl, '<', $f ) or die "Can't open $f: $!";
+            print $fhLog $stamp, "Reading on server backup file -> $file\n";
+            $tar = $dbck . $file;
+        }
+        else {
+            print $fhLog $stamp, "Uploading to server backup file -> $hndl\n";
+            $tar = $dbck . $hndl;
+        }
+
+        print $cgi->pre( "Restore started: " . Settings::today(),
+            "\n", "Reading $tar ..." );
+
+        my $stdout = capture_stdout {
+            $tar =~ s/osz$/tar/;
+            my $srcIsPg = 0;
+            my $passw   = $pass;
+            $passw = uc crypt $pass, hex Settings->CIPHER_KEY
+              if &Settings::isProgressDB;
+            open( $pipe, "|-",
+"openssl enc -aes-256-cbc -md sha512 -pbkdf2 -iter 100000 -d -salt -S "
+                  . Settings->CIPHER_KEY
+                  . " -pass pass:$passw-$alias -in /dev/stdin -out $tar" )
+              or die "Pipe Failed for $tar: $!";
+
+            while (<$hndl>) { print $pipe $_; die "bad decoding" if $?; }
+            close $pipe;
+            close $hndl;
+
+#cat bck_20210819160848_SQLite_admin.osz | openssl enc -d -des-ede3-cfb -salt -S 95d7a85ba891da -pass pass:42FAP5H0JUSZM-admin -in /dev/stdin > extract.tar
+#openssl des-ede3-cfb -d -salt -S 95d7a85ba891da -pass pass:42FAP5H0JUSZM-admin -pbkdf2 -in bck_20210830133220_NUc_SQLite_admin.osz -out extract.tar
+
+            print "<pre>\n";
+
+            my $m1 =
+              "it is not permitted to restore from anothers backup file.";
+            $m1 = "has your log password changed?"
+              if ( $tar =~ /_data_$alias/ );
+            $stage = "Backup extraction start";
+
+            my $cmd = `tar tvf $tar 2>/dev/null`
+              or die
+qq(Error: A possible security issue, $m1\n<br> BACKUP FILE HAS BEEN INVALIDATED!\n
+          Archive:$tar\n
+          Your alias is: <b>$alias</b>\n<br>
+          Your DSN is: ) . Settings::dsn() . qq(<br>
+          Your LifeLog version is:), Settings::release() . "\n";
+
+            print "Contents->\n" . $cmd . "\n\n";
+            $cmd = `tar xzvf $tar -C $dbck --strip-components 1 2>/dev/null`
+              or die "Failed extracting $tar";
+            print "Extracted->\n" . $cmd . "\n" or die "Failed extracting $tar";
+            my @dr     = split( ':', Settings::dbSrc() );
+            my $b_base = $dbck . 'data_' . $dbname . '_log.db';
+
+            # We check if db file has been extracted first?
+            unless ( -e $b_base ) {
+                if (&Settings::isProgressDB) {
+                    $b_base =
+                      $dbck . 'data_' . $dr[1] . '_' . $dbname . '_log.db';
+                }
+                else {    # maybe the source is a Pg db backup?
+                    $b_base = $dbck . 'data_Pg_' . $dbname . '_log.db';
+                }
+                if ( -e $b_base ) {
+                    $srcIsPg = 1;
+                }
+                else {
+                    die "Failed to locate database in archive -> $b_base";
+                }
+            }
+
+            my $dsn = "DBI:SQLite:dbname=$b_base";
+            $b_db = DBI->connect( $dsn, $alias, $pass, { RaiseError => 1 } )
+              or LifeLogException->throw(
+                error      => "Invalid database! $dsn->$hndl [$@]",
+                show_trace => &Settings::debug
+              );
+
+            print "Connected to -> "
+              . Settings::dsn()
+              . " (\$srcIsPg == $srcIsPg)\n";
+            $stage = "Merging categories table.";
+            print "Merging from backup categories table...";
+            my $stats  = DBMigStats->new();
+            my $insCAT = $db->prepare(
+                'INSERT INTO CAT (ID, NAME, DESCRIPTION) VALUES(?,?,?);')
+              or die "Failed CAT prepare.";
+            my $b_pst = Settings::selectRecords( $b_db,
+                'SELECT ID, NAME, DESCRIPTION FROM CAT;' );
+
+            while ( @br = $b_pst->fetchrow_array() ) {
+                next
+                  if not $br[0]
+                  ;    #@2021-08-12 For some reason this still could be null
+                $stage .= "<br>id:" . $br[0] . "->" . $br[1];
+                my $pst = Settings::selectRecords( $db,
+                        "SELECT ID, NAME, DESCRIPTION FROM CAT WHERE ID="
+                      . $br[0]
+                      . ";" );
+                my @ext = $pst->fetchrow_array();
+                if ( scalar(@ext) == 0 ) {
+                    $insCAT->execute( $br[0], $br[1], $br[2] );
+                    print "\nAdded CAT->" . $br[0] . "|" . $br[1];
+                    $stats->cats_inserts_incr();
+                }
+                elsif ( $br[0] ne $ext[0] or $br[1] ne $ext[1] ) {
+                    $db->do("UPDATE CAT SET NAME='"
+                          . $br[1]
+                          . "', DESCRIPTION='"
+                          . $br[2]
+                          . "' WHERE ID=$br[0];" )
+                      or die "Cat update failed!";
+                    print "\nUpdated->" . $br[0] . "|" . $br[1] . "|" . $br[2];
+                    $stats->cats_updates_incr();
+                }
+
+            }
+
+            print "\nFinished with merging CAT table.\n";
+            print "There where -> "
+              . $stats->cats_inserts()
+              . " inserts, and "
+              . $stats->cats_updates()
+              . " updates.\n";
+
+            $stage = "Merging backup LOG";
+            print "\n\nMerging from backup LOG table...\n";
+
+            my %backupLIDS = ();
+            my $insLOG     = $db->prepare(
+'INSERT INTO LOG (ID_CAT, DATE, LOG, RTF, AMOUNT, AFLAG, STICKY) VALUES(?,?,?,?,?,?,?);'
+            ) or die "Failed LOG prepare.";
+
+            $b_pst = Settings::selectRecords( $b_db,
+"SELECT rowid, ID_CAT, DATE, LOG, RTF, AMOUNT, AFLAG, STICKY FROM LOG;"
+            );
+            while ( @br = $b_pst->fetchrow_array() ) {
+                my $dt  = $br[2];
+                my $pst = Settings::selectRecords( $db,
+                    "SELECT DATE FROM LOG WHERE DATE='" . $dt . "';" );
+                my @ext = $pst->fetchrow_array();
+                if ( scalar(@ext) == 0 ) {
+                    try {
+                        $insLOG->execute(
+                            $br[1], $br[2], $br[3], $br[4],
+                            $br[5], $br[6], $br[7]
+                        );
+                        print "Added->"
+                          . $br[0] . "|"
+                          . $br[2] . "|"
+                          . $br[3] . "\n";
+                        $stats->logs_inserts_incr();
+                        if ( $br[4] ) {
+                            $pst = Settings::selectRecords( $db,
+                                "SELECT max($CID) FROM LOG" );
+                            my @r = $pst->fetchrow_array();
+                            $backupLIDS{ $br[0] } = $r[0];
+                        }
+                    }
+                    catch {
+                        print "<font color=red><b>Insert insert of</b> ->["
+                          . $br[0] . "|"
+                          . $br[2] . "|\n"
+                          . $br[3]
+                          . "]<br><b>Error -> <i>$@</i><b></font>\n";
+                    }
+                }
+            }
+            print "\nFinished with merging LOG table.\n";
+            print "There where -> " . $stats->logs_inserts() . " inserts.\n";
+
+            $stage = "Merging Notes";
+            print "\nMerging from backup NOTES table...\n";
+            my $insNOTES =
+              $db->prepare('INSERT INTO NOTES (LID, DOC) VALUES(?,?);')
+              or die "Failed NOTES prepare.";
+            $b_pst =
+              Settings::selectRecords( $b_db, 'SELECT LID, DOC FROM NOTES;' );
+
+            while ( @br = $b_pst->fetchrow_array() ) {
+                my $in_id = $backupLIDS{ $br[0] };
+                if ( $in_id && $br[1] ) {
+                    if ( Settings::isProgressDB() ) {
+                        $insNOTES->bind_param( 1, $in_id );
+                        try {
+                            if ( not $srcIsPg ) {    #IT is NOT PG to PG DB
+                                 # We with Pg currently the password do not encrypted and the binary is different, we need to convert.
+                                 # Reason it is not encrypted? Only because externally it will be pain to access the db with such user and password.
+                                my $d      = uncompress( $br[1] );
+                                my $cipher = Settings::newCipher($passw);
+                                my $doc    = $cipher->decrypt($d);
+
+                                #print $doc;
+                                $cipher = Settings::newCipher($pass);
+                                $doc    = compress( $cipher->encrypt($doc) );
+                                $insNOTES->bind_param( 2, $doc,
+                                    { pg_type => DBD::Pg::PG_BYTEA } );
+                                $insNOTES->execute();
+                                print
+                                  "Converted to Pg a notes doc $in_id to Pg.\n";
+                            }
+                            else {
+                                $insNOTES->bind_param( 2, $br[1],
+                                    { pg_type => DBD::Pg::PG_BYTEA } );
+                                $insNOTES->execute();
+                                print
+"Recovered in a Pg based notes doc id[$in_id]\n";
+                            }
+                            print "Added " . $dr[1] . " NOTES -> LID:$in_id\n";
+                            $stats->notes_incr();
+
+                        }
+                        catch {
+                            print "FAILED TO INSERT RTF -> LID:$in_id Err:$@\n";
+                        }
+
+                    }
+                    else {
+                        try {
+                            if ($srcIsPg) {    #IT is PG to SQLite DB
+                                my $d      = uncompress( $br[1] );
+                                my $cipher = Settings::newCipher(
+                                    Settings::configProperty( $db, 222 ) );
+                                my $doc = $cipher->decrypt($d);
+
+                                #print $doc;
+                                $cipher = Settings::newCipher($passw);
+                                $br[1] = compress( $cipher->encrypt($doc) );
+                                print "Converted notes doc $in_id to SQLite.\n";
+                            }
+                            $insNOTES->execute( $in_id, $br[1] );
+                            print "Added NOTES -> LID:$in_id\n";
+                            $stats->notes_incr();
+                        }
+                        catch {
+                            print
+"FAILED TO INSERT RTF -> LID:$in_id Error -> $@\n";
+                        }
+                    }
+                }
+            }
+            print "\nFinished with merging NOTES table.\n";
+            print "There where -> " . $stats->notes_inserts() . " inserts.\n";
+            if ( $stats->notes_inserts() > 0 ) {
+                print
+"Note that the notes merge didn't recover documents for any currently existing log entries.\n";
+                print
+"To do this, delete those log entries, then run restore again.\n";
+            }
+            Settings::configProperty( $db, 230, '^STATS_RESTORE_DATE', $today );
+            Settings::configProperty( $db, 232, '^STATS_CAT_INSERT_CNT',
+                $stats->cats_inserts() );
+            Settings::configProperty( $db, 234, '^STATS_LOG_INSERT_CNT',
+                $stats->logs_inserts() );
+            Settings::configProperty( $db, 236, '^STATS_RTF_INSERT_CNT',
+                $stats->notes_inserts() );
+            print "Done!\n";
+            print "Restore ended: " . Settings::today(), "\n";
+        };
+        print $fhLog $stamp, "\n", "-" x 20, "Debug Output Start", "-" x 20,
+          "\n", $stdout, "-" x 20, "Debug Output End", "-" x 20, "\n";
+        print $stdout;
+        $b_db->disconnect();
+        $db->disconnect();
+###############
+        `rm -rf $dbck/`;
+###############
+    }
+    catch {
+        $ERROR =
+          "<br><font color='red'><b>Full Restore Failed!</b></font><br>$@ \n";
+        $ERROR .= "br:[@br]" if (@br);
+        $ERROR .= "<br><b>Failed at stage:</b> $stage";
+        print $fhLog $stamp, "Error: $@ at:@br.\n";
+        openlog( Settings::dsn(), 'cons,pid', "user" );
+        syslog( 'err', '%s', $ERROR );
+        closelog();
+    };
+
+    my $back = $cgi->url( -relative => 1 );
+    print "<div class='debug_output'>$ERROR</div>" if ($ERROR);
+    print "\n</pre><code>";
+    print
+qq(<a href="config.cgi?CGISESSID=$sid"><hr>Go Back</a> or <a href="main.cgi"><br>Go to LOG</a></code>);
+    close $fhLog;
+    print $cgi->end_html;
+    exit;
+
+}
+
+package DBMigStats {
+
+    sub new {
+        my $class = shift;
+        my $self  = bless {
+            cats_ins => 0,
+            cats_upd => 0,
+            logs_ins => 0,
+            logs_upd => 0,
+            notes    => 0
+        }, $class;
+    }
+
+    sub cats_inserts()      { my $s = shift; return $s->{cats_ins} }
+    sub cats_inserts_incr() { my $s = shift; $s->{cats_ins}++ }
+    sub cats_updates()      { my $s = shift; return $s->{cats_upd} }
+    sub cats_updates_incr() { my $s = shift; $s->{cats_upd}++ }
+
+    sub logs_inserts()      { my $s = shift; return $s->{logs_ins} }
+    sub logs_inserts_incr() { my $s = shift; $s->{logs_ins}++ }
+    sub logs_updates()      { my $s = shift; return $s->{logs_upd} }
+    sub logs_updates_incr() { my $s = shift; $s->{logs_upd}++ }
+
+    sub notes_inserts() { my $s = shift; return $s->{notes} }
+    sub notes_incr()    { my $s = shift; $s->{notes}++ }
+
+}
+
+sub exportToCSV {
+    try {
+        my $csv = Text::CSV->new( { binary => 1, strict => 1, eol => $/ } );
+        if ( $csvp > 2 ) {
+            $dbs = Settings::selectRecords( $db,
+                "SELECT ID, NAME, DESCRIPTION FROM CAT ORDER BY ID;" );
+        }
+        else {
+            $dbs = Settings::selectRecords( $db, "SELECT * FROM LOG;" );
+        }
+
+        if ( $csvp == 2 || $csvp == 4 ) {
+            print $cgi->header( -charset => "UTF-8", -type => "text/html" );
+            print "<pre>\n";
+        }
+        else {
+            my $type = 'categories';
+            $type = 'log' if ( $csvp == 1 );
+            print $cgi->header(
+                -charset    => "UTF-8",
+                -type       => "application/octet-stream",
+                -attachment => "$dbname.$type.csv"
+            );
+        }
+
+        #print "ID,NAME,DESCRIPTION\n";
+        while ( my $row = $dbs->fetchrow_arrayref() ) {
+            my $out = $csv->print( *STDOUT, $row );
+            print $out if ( length $out > 1 );
+        }
+        if ( $csvp == 2 || $csvp == 4 ) {
+            print "</pre>";
+        }
+        $dbs->finish();
+        $db->disconnect();
+        exit;
+    }
+    catch {
+        print "<font color=red><b>SERVER ERROR</b>->exportLogToCSV</font>:"
+          . $_;
+    }
+}
+
+sub importCatCSV {
+    my $hndl = $cgi->upload("data_cat");
+    my $csv;
+    try {
+        $csv = Text::CSV->new( { binary => 1, strict => 1, eol => $/ } );
+        while ( my $line = <$hndl> ) {
+            chomp $line;
+            if ( $csv->parse($line) ) {
+                my @fields = $csv->fields();
+                updateCATDB(@fields);
+            }
+            else {
+                warn "Data could not be parsed: $line\n";
+            }
+        }
+    }
+    catch {
+        LifeLogException->throw(
+            error => "Category update failed! CSV_STATUS->"
+              . $csv->error_diag()
+              . "\nfile_hndl->$hndl",
+            show_trace => &Settings::debug
+        );
+    };
+}
+
+sub updateCATDB {
+    my @fields = @_;
+    if ( @fields > 2 ) {
+        my $id   = $fields[0];
+        my $name = $fields[1];
+        my $desc = $fields[2];
+
+        #is it existing entry?
+        $dbs = Settings::selectRecords( $db,
+            "SELECT ID FROM CAT WHERE ID = '$id';" );
+        if ( !$dbs->fetchrow_array() ) {
+            $dbs = $db->prepare('INSERT INTO CAT VALUES (?,?,?)');
+            $dbs->execute( $id, $name, $desc );
+            $dbs->finish;
+        }
+        else {
+            #TODO Update
+        }
+    }
+    else {
+        LifeLogException->throw("Invalid CSV data format!");
+    }
+}
+
+sub importLogCSV {
+    my $hndl = $cgi->upload("data_log");
+    my $csv;
+    try {
+
+        $csv = Text::CSV->new( { binary => 1, strict => 1, eol => $/ } );
+
+        while ( my $line = <$hndl> ) {
+            chomp $line;
+            if ( $csv->parse($line) ) {
+                my @fields = $csv->fields();
+                updateLOGDB(@fields);
+            }
+            else {
+                warn "Data could not be parsed: $line\n";
+            }
+        }
+        &renumerate;
+        $db->disconnect();
+        print $cgi->redirect('main.cgi');
+
+    }
+    catch {
+        LifeLogException->throw(
+            error => "Log update failed! CSV_STATUS->"
+              . $csv->error_diag()
+              . "\nfile_hndl->$hndl",
+            show_trace => &Settings::debug
+        );
+    };
+    exit;
+}
+
+sub updateLOGDB {
+    my @fields = @_;
+    if ( scalar(@fields) > 6 ) {
+
+        my $i      = 0;
+        my $id_cat = $fields[ $i++ ];
+        my $date   = $fields[ $i++ ];
+        my $log    = $fields[ $i++ ];
+        my $rtf    = $fields[ $i++ ];
+        my $amv    = $fields[ $i++ ];
+        my $amf    = $fields[ $i++ ];
+        my $sticky = $fields[ $i++ ];
+
+        # Is it old pre. 1.8 format -> ID, DATE, LOG, AMOUNT, AFLAG, RTF, STICKY
+        if ( !looks_like_number($rtf) ) {
+            $i      = 0;
+            $id_cat = $fields[ $i++ ];
+            $rtf    = $fields[ $i++ ];
+            $date   = $fields[ $i++ ];
+            $log    = $fields[ $i++ ];
+            $amv    = $fields[ $i++ ];
+            $amf    = $fields[ $i++ ];
+            $sticky = $fields[ $i++ ];
+        }
+        my $pdate = DateTime::Format::SQLite->parse_datetime($date);
+
+        #Check if valid date log entry?
+        if ( $id_cat == 0 || $id_cat == "" || !$pdate ) {
+            return;
+        }
+
+        #is it existing entry?
+        $dbs = Settings::selectRecords( $db,
+            "SELECT DATE FROM LOG WHERE DATE is '$pdate';" );
+        my @rows = $dbs->fetchrow_array();
+        if ( scalar @rows == 0 ) {
+            $dbs = $db->prepare('INSERT INTO LOG VALUES (?,?,?,?,?,?,?)');
+            $dbs->execute( $id_cat, $pdate, $log, $rtf, $amv, $amf, $sticky );
+        }
+        $dbs->finish();
+    }
+    else {
+        LifeLogException->throw("Invalid CSV data format!");
+    }
+}
+
+sub cats {
+    $cats = qq(<select id="cats" name="cats"><option value="0">---</option>\n);
+    $dbs =
+      Settings::selectRecords( $db, "SELECT ID, NAME FROM CAT ORDER BY ID;" );
+    while ( my @row = $dbs->fetchrow_array() ) {
+        $cats .= qq(<option value="$row[0]">$row[1]</option>\n);
+        $hshCats{ $row[0] } = $row[1];
+    }
+    $cats .= '</select>';
+}
+
+sub error {
+    my $url = $cgi->url( -path_info => 1 );
+    print
+qq(<div class="debug_output" style="font-size:large;"><div style="text-align: left; width:100%; overflow-x:wrap;">
+                $ERROR
+    );
+    print "<h3>CGI Parameters</h3><ol>";
+    foreach ( $cgi->param ) {
+        print '<li>' . $_ . '==' . $cgi->param($_) . '</li>';
+    }
+    print "</ol>\n";
+    print
+"<div>Return to -> <a href='config.cgi?CGISESSID=$sid'>$url</a></div><hr></div></div>";
+
+    print $cgi->end_html;
+    $db->disconnect();
+    exit;
+}
+
diff --git a/htdocs/cgi-bin/data.cgi b/htdocs/cgi-bin/data.cgi
new file mode 100755 (executable)
index 0000000..7f983b2
--- /dev/null
@@ -0,0 +1,419 @@
+#!/usr/bin/env perl
+#
+# Programed in vim by: Will Budic
+# Open Source License -> https://choosealicense.com/licenses/isc/
+#
+use v5.30; #use diagnostics;
+use warnings;
+use strict;
+no warnings "experimental::smartmatch";
+
+use Exception::Class ('LifeLogException');
+use Syntax::Keyword::Try;
+use DateTime::Format::Human::Duration;
+use Regexp::Common qw /URI/;
+use Text::CSV;
+
+use lib "system/modules";
+require Settings;
+
+my $human     = DateTime::Format::Human::Duration->new();
+my $db        = Settings::fetchDBSettings();
+my $PRC_WIDTH = Settings::pagePrcWidth();
+my $DEBUG     = Settings::debug();
+my $today     = Settings::today();
+my $tbl_rc    = 0;
+my $imgw      = 210;
+my $imgh      = 120;
+my $cgi       = Settings::cgi(); 
+my $opr       = $cgi->param("opr"); $opr=0 if !$opr;
+my $confirmed = $cgi->param('confirmed');
+
+if ($opr == 1){
+    DisplayDateDiffs();
+    exit;
+}
+if ($opr == 3){
+    PrintView();
+}
+elsif ($confirmed){
+    DeletionConfirmed();
+}else{
+    print $cgi->redirect('main.cgi') if not $cgi->param('chk');    
+    ConfirmForDeletionPage();    
+}
+$db->disconnect();
+
+sub DisplayDateDiffs {
+       
+    my $tbl = '<table class="tbl" width="'.$PRC_WIDTH.'%">
+        <tr class="r0"><td colspan="2"><b>* DATE DIFFERENCES *</b></td></tr>';
+
+    my $stm = 'SELECT DATE, LOG FROM VW_LOG WHERE ';
+    my @ids = $cgi->param('chk');
+       @ids = reverse @ids;
+    foreach (@ids){
+        $stm .= "PID = " . $_ ."";
+        if(  \$_ != \$ids[-1]  ) {
+            $stm = $stm." OR ";
+        }
+    }
+    $stm .= ' ORDER BY PID;';
+    print $cgi->pre("###[stm:$stm]") if($DEBUG);
+    my $st = Settings::selectRecords($db, $stm);
+    my ($dt,$dif,$first,$last,$tnext, $dt_prev) = (0,0,0,0,0,$today);
+    while(my @row = $st->fetchrow_array()) {
+         my $rdat = $row[0];
+         my $rlog = $row[1];
+         $rlog =~ m/\n/;
+         $dt  = DateTime::Format::SQLite->parse_julianday( $rdat );
+         $dt -> set_time_zone(&Settings::timezone);
+         $dif = dateDiff($dt_prev, $dt);
+         $tbl .= '<tr class="r1"><td>'. $dt->ymd . '</td>
+                    </td><td style="text-align:left;">'.$rlog."</td></tr>".
+                 '<tr class="r0"><td colspan="2">'.$dif.'</td> </tr>';
+         $last = $dt_prev;
+         $dt_prev = $dt;
+         if($tnext){
+             $dif = dateDiff($today, $dt,'');
+             $tbl .= '<tr class="r0"><td colspan="2">'.$dif. '</td> </tr>';
+         }
+         else{$tnext=1; $first = $dt;}
+    }
+    if($first != $last){
+        $dif = dateDiff($first, $dt_prev,'(first above)');
+        $tbl .= '<tr class="r0"><td colspan="2">'.$dif. '</td> </tr>';
+    }
+    $tbl .= '</table>';
+    printHeader("Date Difference Report");
+    print '<a name="top"></a><center><div>'.$tbl.'</div><br><div><a href="main.cgi">Back to Main Log</a></div></center>';
+    print $cgi->end_html();
+
+}
+
+sub dateDiff {
+    my($d1,$d2,$ff,$sw)=@_;
+    if($d1->epoch()>$d2->epoch()){
+        $sw = $d1;
+        $d1 = $d2;
+        $d2 = $sw;
+    }else{$sw="";}
+    my $dur = $human->format_duration_between($d1, $d2);
+    my ($t1,$t2) = ("","");
+    $t1 = "<font color='red'> today </font>" if ($d1->ymd() eq $today->ymd());# Notice in perl == can't be used here!
+    $t2 = "<font color='red'> today </font>" if ($d2->ymd() eq $today->ymd());
+return sprintf( "%s <br>between $ff $t1 %s and $t2 %s[%s]", $dur, boldDate($d1), boldDate($d2), $d1->ymd());
+
+}
+
+sub boldDate {
+    my($d)=@_;
+return "<b>".$d->ymd()."</b> ".$d->hms;
+}
+
+sub printHeader {
+
+my $title = shift;
+print $cgi->header(-expires=>"+6os");
+&Settings::setupTheme;
+print $cgi->start_html(-title => $title, -BGCOLOR => Settings::theme('colBG'),
+            -script=> [ {-type => 'text/javascript', -src => 'wsrc/jquery.js'},
+                        {-type => 'text/javascript', -src => 'wsrc/jquery-ui.js'},
+                        {-type => 'text/javascript', -src => 'wsrc/main.js'}
+                        ],                
+            -style => [ {-type => 'text/css', -src => Settings::theme('css')},                        
+                        {-type => 'text/css', -src => 'wsrc/jquery-ui.css'},
+                        {-type => 'text/css', -src => 'wsrc/jquery-ui.theme.css'},
+                        {-type => 'text/css', -src => 'wsrc/jquery-ui.theme.css'}                        
+                        ],                        
+            -onload => "onBodyLoadGeneric()"
+            )
+}
+
+sub ConfirmForDeletionPage {
+
+try{    
+    my $SQLID = 'rowid'; $SQLID = 'ID' if( Settings::isProgressDB() );
+    my $stmS = "SELECT ID, PID, (select NAME from CAT WHERE ID_CAT = CAT.ID) as CAT, DATE, LOG from VW_LOG WHERE";       
+    my $stmE = " ORDER BY DATE DESC, ID DESC;";  
+    if($opr == 2){
+       $stmS = "SELECT $SQLID as ID, ID_CAT as IDCAT, DATE, LOG, AMOUNT from LOG WHERE";
+       $stmE = " ORDER BY date(DATE);";
+    }
+
+    #Get ids and build confirm table and check
+    my $stm = $stmS ." ";
+    my @chks= $cgi->param('chk');
+    foreach my $id (@chks){
+        if($opr == 2){
+            $stm = $stm . "$SQLID = " . $id . " OR ";
+        }
+        else{
+            $stm = $stm . "PID = " . $id . " OR ";
+        }
+    }
+    $stm =~ s/ OR $//; $stm .= $stmE;
+    my $st = Settings::selectRecords($db, $stm);
+
+                 
+    if($opr == 0){        
+        printHeader('Confirm Deletion'); 
+        print $cgi->pre("###ConfirmForDeletionPage()->[stm:$stm]\n]opr:$opr]") if($DEBUG);
+
+        my $r_cnt = 0;
+        my $rs = "r1";
+
+         my $tbl = '<a name="top"></a><form name="frm_log_del" action="data.cgi" onSubmit="return formDelValidation();">
+           <table class="tbl_rem" width="'.$PRC_WIDTH.'%">
+           <tr class="hdr" style="text-align:left;">
+               <th>Date <a href="#bottom">&#x21A1;</a></th> <th>Time</th> <th>Log</th> <th>Category <a href="#bottom">&#x21A1;</a></th></tr>';
+
+
+        while(my @row = $st->fetchrow_array()) {
+
+            my $ct = $row[2];
+            my $dt = DateTime::Format::SQLite->parse_datetime( $row[3] );
+            my $log = log2html($row[4]);
+
+            $tbl .= '<tr class="r1"><td class="'.$rs.'">'. $dt->ymd . "</td>" .
+                '<td class="'.$rs.'">' . $dt->hms . "</td>" .
+                '<td class="'.$rs.'" style="font-weight:bold; color:maroon;">
+                    <div class="log" style="overflow-x:none; max-width:600">'."$log</div></td>\n".
+                '<td class="'.$rs.'">' . $ct. '<input type="hidden" name="chk" value="'.$row[0].'"></td></tr>';
+            if($rs eq "r1"){
+               $rs = "r0";
+            }
+            else{
+                $rs = "r1";
+            }
+            $r_cnt++;
+        }
+  
+        $tbl .= '<tr class="r0"><td colspan="4"><a name="bottom"></a><a href="#top">&#x219F;</a>
+        <center>
+            <h3>Please Confirm You Want<br>The Above Record'.($r_cnt>1?'s':'').' Deleted?</h3><br>
+           <button onclick="return backToMain()">No Go Back</button>
+        </center>
+        </td></tr>
+        <tr class="r0"><td colspan="4"><center>
+        <input type="submit" value="I AM CONFIRMING!">
+        </center>        
+        </td></tr>
+        </table><input type="hidden" name="confirmed" value="1"></form>';
+
+        print qq(<div style="marging:5px;padding:10px;">$tbl</div>);
+
+        print $cgi->end_html();
+    } 
+    elsif($opr == 2){        
+        my $csv = Text::CSV-> new ( { binary => 1, escape_char => "\\", strict => 1, eol => $/ } );           
+        my @columns = ("ID", "CAT", "DATE", "LOG", "AMOUNT");        
+        print $cgi->header(-charset=>"UTF-8", -type=>"application/octet-stream", -attachment=>Settings::dbName()."_sel.csv");        
+        print $csv->print(*STDOUT, \@columns);
+        while (my $row=$st->fetchrow_arrayref()){
+            #    $row[3] =~ s/\\\\n/\n/gs;
+            my $out = $csv->print(*STDOUT, $row);                  
+                print $out if(length $out>1);
+        }
+        exit;
+    }else{        
+        LifeLogException->throw(error => "Invalid Operation \$opr => $opr", show_trace=>1)
+    }
+    $st->finish();   
+}catch($e){
+    errorPage($e,'ConfirmForDeletionPage')
+}
+}
+
+
+sub DeletionConfirmed {
+    try{    
+        my $SQLID = 'rowid'; $SQLID = 'ID' if Settings::isProgressDB();
+        my $st1 = $db->prepare("DELETE FROM LOG WHERE $SQLID = ?;");
+        my $st2 = $db->prepare("DELETE FROM NOTES WHERE LID = ?;");
+        #print $cgi->header(-expires=>"+6os");
+        foreach my $id ($cgi->param('chk')){
+            my $st = Settings::selectRecords($db, 'select RTF from LOG where '.$SQLID.'='.$id);
+            my @ra = $st->fetchrow_array();
+            $st1->execute($id) or die "<p>Error->$_</p>";        
+            $st2->execute($id) if $ra[0];
+        }
+    #2021-08-11 Added just in case next an renumeration. 
+    # Above also checks now, if a log has flagged having an RTF before deleting the note entry.
+    Settings::renumerate($db);
+    print $cgi->redirect('main.cgi');  
+
+    }catch($e){
+        errorPage ($e, 'DeletionConfirmed');
+    }
+}
+
+sub errorPage{
+my  ($err, $sub) = @_;
+printHeader("ERROR");
+print "<font color=red><h2>".ref($err)." Encountered!</h2><br></font><p>Building  $sub Failed! </p><pre><b>Error:</b> ".$err."</pre>";
+print $cgi->end_html()
+}
+
+
+use Text::Wrap; $Text::Wrap::columns=80; $Text::Wrap::separator="\n"; 
+
+sub log2html {
+    my $log = shift;
+    my ($re_a_tag, $sub)  = qr/<a\s+.*?>.*<\/a>/si;
+    $log = wrap('','',$log);
+    $log =~ s/''/'/g;
+    $log =~ s/\r\n/<br>/gs;
+    $log =~ s/\\n/<br>/gs;
+
+    if ( $log =~ /<<LNK</ ) {
+        my $idx = $-[0] + 5;
+        my $len = index( $log, '>', $idx );
+        $sub = substr( $log, $idx + 1, $len - $idx - 1 );
+        my $url = qq(<a href="$sub" target=_blank>$sub</a>);
+        $log =~ s/<<LNK<(.*?)>+/$url/osi;
+    }
+
+    if ( $log =~ /<<IMG</ ) {
+            my $idx = $-[0] + 5;
+            my $len = index( $log, '>', $idx );
+            $sub = substr( $log, $idx + 1, $len - $idx - 1 );
+            my $url = qq(<img src="$sub"/>);
+            $log =~ s/<<IMG<(.*?)>+/$url/osi;
+    }
+    elsif ( $log =~ /<<FRM</ ) {
+            my $idx = $-[0] + 5;
+            my $len = index( $log, '>', $idx );
+            $sub = substr( $log, $idx + 1, $len - $idx - 1 );
+            my $lnk = $sub;
+            if ( $lnk =~ /_frm.png/ ) {
+                my $ext = substr( $lnk, index( $lnk, '.' ) );
+                $lnk =~ s/_frm.png/$ext/;
+                if ( not -e "./images/$lnk" ) {
+                    $lnk =~ s/$ext/.jpg/;
+                    if ( not -e "./images/$lnk" ) {
+                        $lnk =~ s/.jpg/.gif/;
+                    }
+                }
+                $lnk =
+                  qq(\n<a href="./images/$lnk" style="border=0;" target="_IMG">
+                             <img src="./images/$sub" width="$imgw" height="$imgh" class="tag_FRM"/></a>);
+            }
+            else {
+                #TODO fetch from web locally the original image.
+                $lnk =  qq(\n<img src="$lnk" width="$imgw" height="$imgh" class="tag_FRM"/>);
+            }
+            $log =~ s/<<FRM<(.*?)>+/$lnk/o;
+        }
+
+    #Replace with a full link an HTTP URI
+    if ( $log =~ /<iframe / ) {
+        my $a = q(<iframe width="560" height="315");
+        my $b;
+        given (&Settings::frameSize) {
+            when("0") { $b = q(width="390" height="215") }
+            when("1") { $b = q(width="280" height="180") }
+            when("2") { $b = q(width="160" height="120") }
+            default {
+                $b = &Settings::frameSize;
+            }
+        }
+        $b = qq(<div><iframe align="center" $b);
+        $log =~ s/$a/$b/o;
+        $a = q(</iframe>);
+        $b = q(</iframe></div>);
+        $log =~ s/$a/$b/o;
+    }
+    else {
+        my @chnks = split( /($re_a_tag)/si, $log );
+        foreach my $ch_i (@chnks) {
+            next if $ch_i =~ /$re_a_tag/;
+            next if index( $ch_i, "<img" ) > -1;
+            $ch_i =~ s/https/http/gsi;
+            $ch_i =~ s/($RE{URI}{HTTP})/<a href="$1" target=_blank>$1<\/a>/gsi;
+        }
+        $log = join( '', @chnks );
+    }      
+
+return $log;
+}
+
+
+sub PrintView {
+
+try{    
+    my $SQLID = 'rowid'; $SQLID = 'ID' if( Settings::isProgressDB() );
+    my $stmS = "SELECT ID, PID, (select NAME from CAT WHERE ID_CAT = CAT.ID) as CAT, DATE, LOG, AMOUNT from VW_LOG WHERE";       
+    my $stmE = " ORDER BY DATE DESC, ID DESC;";  
+
+    #Get ids and build confirm table and check
+    my $stm = " "; my @chks= $cgi->param('chk');
+    foreach my $id (@chks){
+        if($opr == 2){
+            $stm = $stm . "$SQLID = " . $id . " OR ";
+        }
+        else{
+            $stm = $stm . "PID = " . $id . " OR ";
+        }
+    }
+    $stm =~ s/ OR $//; 
+    my $sql = $stmS.$stm.$stmE;
+    print $cgi->header(-expires=>"+6os");
+    print $cgi->start_html(-title => "LifeLog Excerpt ".Settings::dbFile()." - ".$today->strftime('%d/%m/%Y %H:%M'),
+            -style =>  {-type => 'text/css', -src => "wsrc/print.css"}
+    );
+    print $cgi->pre("###PrintView()->[sql:$sql]") if($DEBUG);
+
+    my $st = Settings::selectRecords($db, "SELECT sum(AMOUNT) FROM VW_LOG WHERE $stm;");
+    my $hasAmmounts = 0; while(my @r = $st->fetchrow_array()) {if($r[0]>0){$hasAmmounts = 1}}             
+    
+
+    my ($tot,$assets,$th_amt) = (0,0,''); $th_amt = '<th style="text-align:center;">'.Settings::currenySymbol().'</th>' if $hasAmmounts;
+    my $tbl = qq(<table class="tbl_print" border="0" width="'.$PRC_WIDTH.'%">
+        <tr class="hdr"><th>Date</th><th>Time</th><th>Log</th>
+       </th>$th_amt<th>Category</th></tr>);
+                    $st = Settings::selectRecords($db, $sql);
+    while(my @row = $st->fetchrow_array()) {
+        my $ct = $row[2];
+        my $dt = DateTime::Format::SQLite->parse_datetime( $row[3] );
+        my $log = log2html($row[4]);
+        my $amt = $row[5];
+        if($hasAmmounts){
+            if($ct eq 'Expense'){
+                $tot = $tot - $amt; $amt = "-$amt";
+            }elsif($ct eq 'Income'){
+                $tot += $amt;
+            }else{
+                $assets += $amt;
+            }
+            $amt="<td style='text-align:right;'>".cam($amt).'</td>';
+        }else{$amt=""}
+
+        $tbl .= '<tr><td class="ctr">'. $dt->ymd . "</td>" .
+            '<td class="ctr">' . $dt->hms . "</td>" . qq(<td>$log</td>$amt<td class="cat">$ct</td></tr>);
+    }
+    $tot =  Settings::currenySymbol().cam($tot);
+    if ($assets){$assets =  'Assets: '.Settings::currenySymbol().cam($assets)}else{$assets=""}
+    if($hasAmmounts || $assets){
+       $tbl .= qq(<tr><td colspan="6"></td></tr><tr>
+                      <td></td><td></td><td style='text-align:right;'>$assets&nbsp;<b>Total:</b></td><td>$tot</td>
+                      <td></td></tr>);
+       $tbl .= '</table>';
+    }
+    
+    print "<center><div>\n$tbl\n</div></center>";
+    
+}catch($e){
+    errorPage($e,'ConfirmForDeletionPage')    
+}
+print $cgi->end_html();
+}
+sub cam {
+    my $am = sprintf( "%.2f", shift);
+    # Add one comma each time through the do-nothing loop
+    1 while $am =~ s/^(-?\d+)(\d\d\d)/$1,$2/;
+    return $am;
+}
+
+1;
\ No newline at end of file
diff --git a/htdocs/cgi-bin/docs/About.md b/htdocs/cgi-bin/docs/About.md
new file mode 100644 (file)
index 0000000..2c2428c
--- /dev/null
@@ -0,0 +1,10 @@
+# About Life Log
+
+* Life Log is an full database implementation, web journal of categorized logs and events in time.
+* It is meant to be limitless, fully searchable and viewed as mostly desired. 
+* Can be used and expanded, as it is also fully configurable.
+
+![Example Page](images/VS-on-METABOX-42.png)
+
+
+
diff --git a/htdocs/cgi-bin/docs/LogTagsHelp.md b/htdocs/cgi-bin/docs/LogTagsHelp.md
new file mode 100644 (file)
index 0000000..2f31547
--- /dev/null
@@ -0,0 +1,43 @@
+# LifeLog Post Tags
+
+```CNF
+<<B<{Text To Bold}>>
+<<I<{Text To Italic}>>
+<<TITLE<{Title Text}>>
+<<LIST<{List of items delimited by new line to terminate item or with '~' otherwise.}>>
+<<IMG<{url to image}>>
+<<FRM<{file name}_frm.png}>>
+```
+
+* frm.png images file pairs are located in the ./images folder of the cgi-bin directory. These are manually resized by the user. Next to the original. Otherwise, considered as standalone icons.
+* _frm.png Image is resized to -> width="210" height="120"
+
+Examples:
+
+```sh
+  ../cgi-bin/images/
+                       my_cat_simon_frm.png
+      my_cat_simon.jpg
+
+  For log entry, place:
+  &nbsp;<<FRM<my_cat_simon_frm.png> <<TITLE<Simon The Cat>>
+  This is my pet, can you hold him for a week while I am on holiday?
+
+  Explicitly tag an URL in the log entry. Required if using in log IMG or FRM tags. 
+  Otherwise link appears as plain text:
+  &nbsp;<<LNK<{url to image}>>
+
+```
+
+* YouTube embed script is automatically parsed.
+
+Example:
+
+```pre
+
+<iframe width="560" height="315" 
+src="https://www.youtube.com/embed/xxxxxx" 
+title="YouTube video player" frameborder="0" allowfullscreen>
+</iframe>
+
+```
diff --git a/htdocs/cgi-bin/docs/PerlCNF/AdoptedPerlProgrammingPractices.md b/htdocs/cgi-bin/docs/PerlCNF/AdoptedPerlProgrammingPractices.md
new file mode 100644 (file)
index 0000000..8793478
--- /dev/null
@@ -0,0 +1,270 @@
+# Adopted Best Perl Programming Practices
+
+APPP, Similar to the jargon of Internet Marketings strategy of 3 P's:
+
+
+1. **Permission** – to increase your response rate, get permission from people first before you send them email marketing messages.
+1. **Personality** – let your personality shine through in all your marketing communications to better connect with your ideal clients.
+1. **Personalization** – narrow your service offerings to a very specialized niche market to make it easier for potential clients to find you.
+
+This document highlights my personal adopted practices to efficiently and uniformly use the Perl language, through to all the code and future revisions.
+As the number of projects mount, and experience and the encountered other best practices come to light. Hopefully and possibly, this document will be updated and worked on to reflect, give answers or remind. Why something is implemented in a particular way, and to some readers for god sake, also why?
+
+## Perl Objects
+
+Perl objects start with **variables** progress to **blocks** where variables are used in a expression context as encountered from one statement to next.
+Grouped and reused operations are called **subroutines**. Subroutines choice of use is, is incredibly in many ways flexible further. Where they can be void, functions and even method like, when used in a **package** object. Beside packaging your variables and subroutines for reuse into a single object. It is worth mentioning, that packages can be placed into modules, for further better organization, however modules are not objects.
+
+### Variables
+
+* Global variables are package variables, the most primitive and default package is called ```main::```. Your script runs in it, I can bet on it.
+* Lexical variables are part of a block, their life starts in it and ends, declared by **my**, **local** or **state**, and are initialized by the type of data they represent.
+  * Basic Variable Data Types are:
+    * `$` Scalars
+    * `@` Arrays/Lists (Arrays -> [] are immutable and don't use with list functions.)
+    * `%` Hashes
+  * Use of **my** is the preferred declaration. As **local** will not create a private variable, contained to the subroutine.
+    * **local** variables are dynamic variables, and are available to other blocks and visible to other called subroutines within the block where declared.
+* Special variables, inbuilt, reserved, magical, these are part also of the Perl language, and are suggested reading about.
+  * These are not covered in this document, and if not familiar with, not a required further reading.
+   * Or if still curious here -> [https://perldoc.perl.org/perlvar]
+* The main benefit of Perl is actually that it isn't strictly typed, and scalars will automatically best can convert, outcome for your expressions, declarations.
+  * Remember it is designed to be an fast interpreted on the fly language, providing you an flexible way to interact and work in a script with behind the scene libraries that are not high level. Making it an excellent candidate for prototyping, testing, implementing algorithm logistics without to be constrained to any needed structures, levels of complex what an external framework implementation requirements is? And where?
+  * Has garbage collection, mutability, and one of the actual first kind of functional languages is Perl. It functions, without having to do much setup, configuration or tooling. If you do, it is most likely that you are reinventing the wheel.
+  * Good practice is to keep to adopted version of Perl, provided features. And not use experimental features in your scripts, not available to an existing old installation on your network. Rest is its long history. Old code has to be compatible with newer version of the Perl interpreter.
+
+### Subroutines
+
+Subroutines can also be in nature anonymous, clojure. They are fastest accessed without parenthesis.
+
+* Instead of an empty argument list, use the pod signifier **&** that is for subroutines, as this passes the current running block argument list (@_) to them.
+  * >i.e.: use ```&foo;``` instead of calling with ``` foo(); ``` is faster and preferred.  
+* Arguments to a subroutines are a flat list copy of variables passed. Don't pass globals, and avoid local variables, if you expect them to change by the subroutine.
+### Methods
+
+Object methods return encapsulate different variable values but structured by same the name. Those variable names must not change, and some times also the variable value is not to be changed form the initialized one, as it is to stay private.
+
+* Package variables are to be private, otherwise forget about it.
+* Package objects are to be created by default with an fixed list of names of the variable, in form of a hashtable that is blessed to an instance.
+  * Example:
+  
+    ```Perl
+    package Example{
+        sub create{
+                my ($pck,$args) = @_;
+                        
+                        bless { 
+                                    name => $args->{name}, 
+                                    value => $args->{value}?$args->{value}:0,
+                        }, $pck;
+        }
+    }
+    my $example = Example->create({name=>"ticket", value=>2.50});
+
+    ```
+
+* Variables of an package object is to have ONE subroutine to deal with setting or getting the value.
+  * Unlike in OOP get/set methods, Perl doesn't need two methods. Why make the object bigger? Even if it is only in its initial state.
+  * Example:
+  
+    ```Perl
+    package Example{
+        ...
+        sub name  {shift->{cnt}}
+        sub value {my($this, $set)=@_;if($set){$this->{value} = $set};$this->{value}}
+    }
+
+    ```
+
+    * In example above the **name** object variable is read only. While **value** is both an true get/setter method rolled into one.
+
+* The parent container to package objects, is to be a separate entity, to which its children don't have access.
+* Containers or composites lists of particular type of object should use ```ref(.)``` method, and not function prototypes, that is the function signature approach.
+  * Example:
+  
+    ```Perl
+    package Container {
+        
+        sub create {
+            my ($this) = @_;
+            bless {items=>()},$this;
+        }
+        sub add {        
+            my ($this,$item) = @_;
+            my $r = ;
+            if(ref($item) eq 'Example'){
+                push (@{$this->{items}}, $item);
+
+            }else{
+                die "put $item, not of package type -> Example"
+            }        
+        }
+        sub iterate {
+            my ($this,$with) = @_;
+            foreach(@{$this->{items}}){
+                do $this->$with($_);
+            }
+        }
+    }
+
+    ```
+
+    * Example above creates a flat list or array that can contain only items of a certain package type object.
+      * Some might say; seeing this, *oh life is not easy in the Perl suburbs of code*, put it can get more complicated.The container can be hashref type of list, where each item is a unique property, searchable and nested further.
+      * Good saying is also keep it short smart, when bloated is stupid. Iteration method can be passed an anonymous subroutine, that out of scope of the container, performs individual action on items in the container. The container contains, and by purpose restricts or allows, what ever implementation you fit as appropriate with it.
+      *
+
+    ```Perl
+       
+        my $container = Container->create(); 
+        ...
+        $container->iterate(sub {print "Reached Property -> ".$_->name(),"\n"});
+
+    ```
+
+## Expressions and Logic
+
+* Use **references** for passing lists, arrays and hashes if knowing they are further being read only not changed.
+  * In your ``main::`` package you have all in front, and know what are you doing, don't you?
+  * However, not using references is secure way, to pass to an module a copy of an extremely huge list. With which it can modify and do what ever its munchkins wants. You are right.
+* **IF** statements should and can be tested to for the scalar default exclusively.
+  * ``if($v){..do something}``
+    * It is not needed to test for null, or in Perls parlang which is the value of ``nothing`` or ``0``.
+  * Post declaration testing and setting of variables as one liners are encouraged, don't know why someone sees them as an eye sore?
+    * The motto is, the less lines of code the better.
+    * Example:
+
+     ```perl
+      my $flag = 0; $flag = 1 if scalar(@args)>1;
+     ```
+
+  * Following is not a **scalar**, so must not to be coded at all as:
+
+     ```perl
+      my @arr;
+        print "@arr is not declared!" if !@arr;
+        @arr=(1 2 3 "check", this, "out", "some elements here are not comma separated but is valid!");
+        print "@arr is declared!" if @arr;
+     ```
+
+    * Surprisingly to some coders out there, where this fails is on the last ``if`` statement. Which should be written as:
+     ```perl
+        ...
+        print "\@arr is declared an empty list!" if scalar @arr == 0;
+     ```
+
+* **IF** statements with further curly brace clauses, should be expression based normal logical statements.
+  
+     ```perl
+        if(!@arr){
+            print "\@arr is not declared!";
+        }
+        elsif (scalar @arr == 0){
+            print "\@arr is declared but an empty list!"
+        }
+        else{
+            return hollySmokeHereWeGo(\@arr); #We are passing an reference to our @arr.
+        }
+     ```
+
+## References
+
+* References are only alike with pointers in C, all variable assignments create copies, same is for lists or hashes.
+* Dereferencing outside a scope will create a copy for the purpose of the packages scope. To purposely share a packages hash, return it as a hash reference (**\\%**).
+  
+  ```perl
+  package A;
+  our $S_ =""; 
+  our %HOUSEHOLD = (
+      pets => {dogs=>2, cats=>1}
+      furniture => {pianos=>1, tables=>3, chairs=>12}
+  )sub household {$S_=shift;\%{$HOUSEHOLD{$S_}}};  
+  ```
+
+* ``` sub household ``` is known like this as an method of package A. Opening access to the %HOUSEHOLD hash.
+* Following examples use static access package directive A::, an object instance i.e. A->new(), will have own copy of all variables and lists, private to the package.
+* ``` my $pets1 = A::household(pets); ``` Scalar $pets1 has an hash reference to the inner hash property of the household hash.
+* ``` my %pets2 = ${A::household(pets)}; ``` Hash %pets2 is here dereferencing the other packages owning hash, however this creates an copy. Something not possibly wanted.
+* ``` $pets1 -> {'pigeons'} = 140 ``` Scalar here adds to referenced  in package A::%{HOUSEHOLD}->%{pets}, a new entry pigeons and the number of them.
+* ``` $pets2{'pigeons'} = 180 ``` We can add to the hash copy similar the same, like this, the usual way, things are added to an hash. But A::%{HOUSEHOLD}->%{pets}, would not about it be any more wiser. It will retain its value. And/Or if to copy we added any new entries, would not have a clue about it.
+* ``` my %pets3 = %$pets1 ``` is misleading, it creates the current snapshot copy of $pets1, so similar but not same to assigning ``` my %pets3 = ${A::household(pets)}; ```. The later which you most probably want, a shared and packaged nested anonymous hash.
+
+```text
+pets => {dogs=>2, cats=>1} <- This is called an anonymous hash when in curly braces. 
+As the 'pets' entry is a key, not a variable.
+
+```
+
+```perl
+my %hsh  = (a=>'shared'); <-Normal named and declared hash. Allowed to be declared wrongly
+ also with curly braces instead of brackets.
+my $ref_hsh  = \%std1; 
+$ref_hsh -> {a} = 'changed'; <- Magically we changed the value of a via perls inbuilt autovification process.
+print (($ref_hsh->{a} eq $hsh{a}) ?"true":"false"); <- prints true.
+
+```
+
+* We pass to subroutines references to an obj, array or hash, when the same is to transform. Example: ``` my @transformed = process(\@myArray); ```.
+  * Variable @transformed is quite an obsolete declaration. As it will contain a copy of @myArray if sub process is returning an array.
+  * Subroutines that receive and return a list from its scope, will create new ones on the receiving end. This can be avoided. By changing via array reference (**@$**).
+
+```perl
+
+package A{
+    sub process {
+      my $into_ref_array = shift;
+      push @$into_ref_array, "Aaaaa, real good!"
+    }
+}
+
+my @this_song = ('Push it!'); <-- Notice list type with brackets declaration, it is mistake 
+                                  to declare as a protected fixed array 
+                                  i.e. with my @this_song = ['Push it!'];
+A::process(\@this_song);
+say join ' ', @this_song;
+
+Push it! Aaaaa, real good! <- Prints. See -> Salt-N-Pepa - Push It (Official Music Video)
+
+```
+
+* That all said, this is all is happening from script to initial state of default existence of an program flow. To preserve changed states and dynamic data or even objects. This will require persistance and most likely dynamic object creation.
+
+## Bad Programming Practices Section
+
+* The following example has been taken from the following blog, Cheese Louise! How some people wrongly code and should not be programmers or stop writing critiques, like this guy --> [HFT - A Developer From London](https://thehftguy.com/2019/10/07/perl-is-dying-quick-could-be-extinct-by-2023/)
+
+  ```perl
+  #!/usr/bin/perl
+  use strict;
+  use warnings;
+  use CGI;
+  
+  my $cgi = CGI->new;
+  my %param = map { $_ => scalar $cgi->param($_) } $cgi->param() ;
+  print $cgi->header( -type => 'text/plain' );
+  print qq{PARAM:\N};
+  for my $k ( sort keys %param ) {
+      print join ": ", $k, $param{$k};
+      print "\n";
+  }
+  # PARAM:
+  # foo: bar
+  ```
+
+* Here is what is wrong?   
+  * By printing the```perl print $cgi->header``` he already got the output format ready to be sent to the client, has the CGI object been properly initialized? So he is saying fibs in his critique.
+  * With ```perl print join ": ", $k, $param{$k};```, the join statement is redundant, Perl has fantastic string interpolation that even modern Python doesn't match. But Python took routines and what deemed working from being available in Perl for decades.
+  * At the beginning, he is remapping with $cgi to a hash map the CGI is already designed with subroutine params to provide them all, this isn't efficient.
+  * Being ignorant to distinguish between interpreted script language from a binary producing strict type script is very common. And is only a product of not having experience with possible both cases.
+  * OOP, and threading is already here for Perl too. In form of modules to be enabled. But main goal of Modules and Perl is and was not to reinvent the wheel when it comes to algorithms and how to most efficiently also implement them. That is for what the CPAN repository is for. I agree it can be bad when it comes approachable documentation, but also some of the best IT books out there are written for the topic Perl. The Authors are quite amazing writers, and should be supported.
+
+***
+
+### Released: v.1.2 Date:20210629 (v.1.1 Date:20210610)
+
+>This document has been written by ***Will Budic*** and is from the [PerlCNF](https://github.com/wbudic/PerlCNF) project.
+>
+>Any disclaim, ideas and statements encountered are of personal opinion and facts. Acquired from personal study and experience. Author, removes him self from any responsibility for any third party accepting or implementing the aforementioned document into practice. Amendments and critique are welcomed, as this is an open public letter document.
+>However, No permission has been given, for publishing, or copying parts of this document, the only permission been given by the author, is to remove this document from after acquiring any other project code or files, which are open source.
diff --git a/htdocs/cgi-bin/docs/PerlCNF/Mermaid_Diagrams.md b/htdocs/cgi-bin/docs/PerlCNF/Mermaid_Diagrams.md
new file mode 100644 (file)
index 0000000..1b81087
--- /dev/null
@@ -0,0 +1,13 @@
+# Example 1 - CNF Usage Flow
+
+```mermaid
+graph TD;
+    CNF<-->Application
+    Application-->Database
+    Application-->WebService
+    WebService<-->CNF
+    WebService<-->Database
+
+    Database <--> CNF
+
+```
diff --git a/htdocs/cgi-bin/docs/PerlCNF/PerlCNFConstantAnonExplained.md b/htdocs/cgi-bin/docs/PerlCNF/PerlCNFConstantAnonExplained.md
new file mode 100644 (file)
index 0000000..7cdce0a
--- /dev/null
@@ -0,0 +1,160 @@
+# PerlCNF Constant, Anon, Values and Data Types Explained
+
+    CNF has so called instructional property name value pairs.
+    This document delves a little bit further into explaining them, how and why are as such implemented.
+
+## Instructual Types
+
+    1. Data type of values is determined and implemented by computer language doing the interpretation.
+    2. These data types must cover maximums, like 64 bit Integer for numbers, and String of UTF 8 unicode base as the minimum.
+    3. The following are instructional value types CNF must cover.
+        1. Constant
+        2. Anon
+        3. Collections
+        5. Data
+
+## Constant
+
+A CNF Constant is as the name suggests, can't be changed once declared in the configuration.
+There are additional rules with these constants.
+
+    * They are private settings to every instance of the Parser, hence not global.
+    * They can be declared only once.
+        - Subsequent parsing of scripts and includes, by the same Parser will issue warnings or exceptions.
+    * They must be present in the configuration, otherwise an Application can't function.
+        - The Application might provide itself inbuilt defaults, but that is now considered bad practice.
+    * Constant is preferred and recommended setting requirement for further CNF properties settings like, special instructions or plugins.
+    * Can be shortened to **CONST**.
+
+Accessed best is via method:
+
+        ```PERL
+        $parser->const('ThreadPoolSize');
+        ```
+
+Or directly with:
+
+        ```PERL
+        $parser->{'ThreadPoolSize'};
+        ```
+
+### CNF Basic Format
+
+    ```CNF
+
+    #This is the number of threads to make available as workers.
+    <<ThreadPoolSize<CONSTANT>10>>
+    ```
+
+### CNF Multiline Format
+
+Quotes are not necessary in CNF, they get trimmed if present.
+Constants can't be further instructional, as the reserved word CONSTANT or CONST is the instruction.
+
+
+```CNF
+
+<<<CONSTANT
+    TreadPoolSize = 10
+    TreadWaitTime = 3000
+    DEBUG         = yes
+>>>
+```
+
+## Anon
+
+    A CNF anon is the variable version of a property and value.
+    They are in nature of no concern to the Parser and can be overwritten or omitted from a script.
+    Hence their name.
+
+    * They are a composite to the parser and considered global and public by default.
+    * Setting parser to ANONS_ARE_PUBLIC => 0, will make them private.
+        - Private or the Parser instance will have only its own Anon's assigned.
+    * Anon instructional type is also considered also to be the basic form of an CNF property.
+
+Accessed for value only via method:
+
+```Perl
+$parser->anon('CurrentDate');
+```
+
+### Basic Format
+
+```CNF
+#Check is logs need trimming.
+<<CheckLogsOnStartup<1>>>
+#Assign current date the Parse has parsed this script.
+<<CurrentDate<DATE>now>>
+<<ReleaseDate<DATE>2023-09-21 10:57:44>>
+```
+
+### Multiline Format
+
+Since version 2.8, multiline format can also be used with the VAR or VARIABLE instruction.
+But only for simple property value pairs.
+Anons which are instructional must be scripted standalone.
+
+```CNF
+<<<VARIABLE
+    CheckLogsOnStartup = 1
+    AppName = "  Application ACME Removals PTY LTD   "
+    AppLabel =   This line of text will be trimmed but not at the end.
+    ...
+>>>
+```
+
+## CNF Property
+
+    A CNF property is in simplest form a anon, but also is a complex instruction value, like a collection.
+    Or a processed data value, will come from a property.
+    Collections will be processed in form of a property to.
+
+
+## Format
+
+```CNF
+<<MyProperty<SOME_INSTRUCTION>
+    ...The Property Body...
+>>
+```
+
+## Type Of Collections
+
+    There is three type of collections.
+    Convention is to prefix collection property name with the instruction signifier of either **@** or **%**.
+
+    The list signifier is a **$$** postfix to the name.
+
+1. Array type.
+    ```CNF
+        <<@SomeList<@>
+            Blue,
+            Red,
+            Green
+        >>
+    ```
+
+2. Hash Type.
+    ```CNF
+        <<%SomeHash<%>
+           Blue  = #0000FF
+           Red   = #FF0000
+           Green = #008000
+        >
+    ```
+
+    ```PERL
+       my @list = $parser->collection('@SomeList');
+       my %hash = %{$parser->collection('%SomeHash')};
+    ```
+
+3. List Type (experimental)
+    1. Collections as a named list so can be scripted into multiple properties or files (includes).
+        ```CNF
+        <<MyList$$<@>1,3,5,9,13>>
+        <<MyList$$<@>19,23,
+        113>>
+        ```
+    ```PERL
+       my @list = $parser->list('MyList');
+    ```
diff --git a/htdocs/cgi-bin/docs/PerlCNF/README.md b/htdocs/cgi-bin/docs/PerlCNF/README.md
new file mode 100644 (file)
index 0000000..64f0aae
--- /dev/null
@@ -0,0 +1,109 @@
+
+# PerlCNF
+
+Perl based Configuration Network File Format Parser and Specifications.
+CNF file format supports used format extraction from any text file.
+Useful for templates and providing initial properties and values for an application settings.
+Has own textual data format. Therefore, can also be useful for database data batch processing.
+
+This project also contains a custom build TestManager module for general and all test driven development.
+It is at current v.2.9, and specification implemented.
+
+[You can find the original up-to-date specification here.](https://github.com/wbudic/PerlCNF/Specifications_For_CNF_ReadMe.md)
+
+---
+## Status
+(2023-14-6) - v.2.9, new meta flags and priority can be set via these pre-evaluation settings for instructions.
+              Node processing on demand and JSON translation on demand of CNFNode's (TREE instruction) is now available.  
+              Online demo made available.
+(2023-5-13) - v.2.8, has new instructions VARIABLE, to streamline under one tag like CONST, but for anons.
+Has better tag mauling algorithm. PLUGIN code has been improved, particularly the synchronizing and the linking of properties.
+
+(2022-11-18) - PerlCNF now provides custom test manager and test cases. 
+That will in future be used for all projects as an copy from this project.
+This is all available in the ./test directory and is not a Perl module.
+
+---
+
+## Installation Of This Perl GitHub Project
+
+* Installation is standard.
+
+```sh
+    mkdir ~/dev; cd ~/dev
+    git clone https://github.com/wbudic/PerlCNF.git
+    cd PerlCNF
+```
+
+* To install required modules locally to home, do not run following with sudo in front.
+    * cd ~/dev/PerlCNF; #Perl tests and project directory is required to be the starting location.
+```sh
+    ./install_cpan_modules_required.pl    
+```
+
+
+## Usage
+
+* Copy the system/modules/CNFParser.pm module into your project.
+* From your project you can modify and adopt, access it.
+* You can also make an perl bash script. 
+
+    ```perl
+    use lib "system/modules";
+    use lib $ENV{'PWD'}.'/htdocs/cgi-bin/system/modules';
+    require CNFParser;
+
+    my $cnf1 = new CNFParser('sample.cnf');
+    #Load config with enabled evaluation on the fly, of perl code embedded in config file.
+    my $cnf2 = new CNFParser('sample.cnf',{DO_enabled=>1, duplicates_overwrite=0});
+
+    ```
+
+## Sample CNF File
+
+```CNF
+<<<CONST
+$APP_NAME       = "Test Application"
+$APP_VERSION    = v.1.0
+>>>
+<<$APP_DESCRIPTION<CONST>
+This application presents just
+a nice multi-line template.
+>>
+
+<<@<@LIST_OF_COUNTRIES>
+Australia, USA, "Great Britain", 'Ireland', "Germany", Austria
+Spain,     Serbia
+Russia
+Thailand, Greece
+>>
+
+Note this text here, is like a comment, not affecting and simply ignored.
+
+<p>Other tags like this paragraph, is better to put into a CNF property to be captured.</p>
+
+```
+
+```perl
+
+my $cnf = new CNFParser('sample.cnf');
+my @LIST_OF_COUNTRIES = @{$cnf -> collection('@LIST_OF_COUNTRIES')};
+print "[".join(',', sort @LIST_OF_COUNTRIES )."]";
+#prints -> [Australia,Austria,Germany,Great Britain,Greece,Ireland,Russia,Serbia,Spain,Thailand,USA]
+print "App Name: ".$cnf->constant('$APP_NAME')."]";
+#prints -> App Name: Test Application
+
+```
+
+## Run Test Cases
+
+* Tests are located in the projects **./test directory.
+* Example how to run them:
+
+```sh
+    perl ./tests/testAll.pl
+```
+
+* Check also the latest Perl CNF [example.cnf](https://github.com/wbudic/PerlCNF/blob/master/tests/example.cnf) scripted also as a tutorial.
+  * Yes! That is an actual valid configuration file.
+  * To only just run it or check use ``` perl ./tests/testExample.pl  ```
diff --git a/htdocs/cgi-bin/docs/PerlCNF/Specifications_For_CNF_ReadMe.md b/htdocs/cgi-bin/docs/PerlCNF/Specifications_For_CNF_ReadMe.md
new file mode 100644 (file)
index 0000000..5360754
--- /dev/null
@@ -0,0 +1,545 @@
+# Configuration Network File Format Specifications
+
+## Introduction
+
+This is a simple and fast file format. That allows setting up of network and database applications with initial configuration values.
+These are usually standard, property name and value pairs. Containing possible also SQL database structures statements with basic data.
+It is designed to accommodate a parser to read and provide for CNF property tags.
+
+These can be of four types, using all a textual similar presentation.
+In general are recognized as constants, anons, collections or lists, that are either arrays or hashes.
+
+Operating system environmental settings or variables are considered only as the last resort to provide for a property value.
+As these can hide and hold the unexpected value for a setting.
+
+With the CNF type of application configuration system. Global settings can also be individual scripted with a meaningful description.
+Which is pretty much welcomed and encouraged. As the number of them can be quite large, and meanings and requirements, scattered around code comments or various documentation. Why not keep this information next to; where you also can set it.
+
+CNF type tags are script based, parsed tags of text, everything else is ignored. DOM based parsed tags, require definitions and are hierarchy specific, path based. Even comments, have specified format. A complete different thing. However, in a CNF file you, can nest and tag, DOM based scripts. But not the other way. DOM based scripts are like HTML, XML. They might scream errors if you place in them CNF stuff.
+
+Quick Jump: [CNF Tag Formats](#cnf-tag-formats)  |  [CNF Collections Formatting](#cnf-collections-formatting) | [Instructions & Reserved Words](#instructions-and-reserved-words) | [Scripted Data Related Instructions](#scripted-data-related-instructions)
+
+## General CNF Formatting Rules
+
+1. Text that isn't CNF tagged is ignored in the file and can be used as comments.
+2. CNF tag begins with an **<<** or **<<<** and ends with an **>>>** or **>>**.
+3. If instruction is contained the tag begins with **<<** and ends with a **>>**.
+4. Multi line values are tag ended on a separate line with an **>>>**.
+5. CNF tag value can post processed by placing macros making it a template.
+6. Standard markup of a macro is to enclose the property name or number with a triple dollar signifier **\$\$\$**{macro}**\$\$\$**.
+    1. Precedence of resolving the property name/value is by first passed macros, then config anons and finally the looking up in constants.
+    2. Nested macros resolving from linked in other properties is currently not supported.
+7. CNF full tag syntax format: ```<<{$|@|%}NAME{<INSTRUCTION>}{<any type of value>}>>```, the name and instruction parts, sure open but don't have to be closed with **>** on a multiple line value.
+8. CNF instructions and constants are uppercase.
+    1. Example 1 format with instruction: ```<<<CONST\n{name=value\n..}\n>>>``` autonomous const, with inner properties.
+    2. Example 2 format with instruction: ```<<{$sig}{NAME}<CONST {multi line value}>>>``` A single const property with a multi line value.
+    3. Example 3 format with instruction: ```<<CONST<{$sig}{NAME}\n {multi line value}>>>``` A single const property with a multi line value.
+    4. Example 4 format with instruction: ```<<{NAME}<{INSTRUCTION}<{value}>>>``` A anon.
+    5. Example 5 format with instruction: ```<<{$sig}{NAME}<{INSTRUCTION}\n{value}\n>>>```.
+9. CNF instructions are all uppercase and unique, to the processor.
+10. A CNF constant in its property name is prefixed with an '**$**' signifier.
+11. Constants are usually scripted at the beginning of the file, or parsed first in a separate file.
+12. The instruction processor can use them if signifier $ surrounds the constant name. Therefore, replacing it with the constants value if further found in the file.
+
+    ```CNF
+     <<<CONST $APP_PATH=~/MyApplication>>>
+     <<app_path<$APP_PATH$/module/main>>>
+    ```
+
+13. Property names, Constant, Anon refer to the programmatically assigned variable name.
+14. *CNF Constant* values are store specific.
+15. Constants can't be changed for the life of the application or service issued.
+16. Storage of CNF constants declared can be preceded to the file based one.
+17. A Constant CNF value is not synchronized, unlike an anon from script to storage configuration. It has to be created from the scripted if missing in storage.
+18. i.e. If stored in a database or on a network node. After the file declaration fact.
+19. Missing file based storage settings can be next queried from the environmental one.
+    1. This is to be avoided if possible.
+20. File storage encountered constants override system environmental ones.
+    1. i.e. System administrator has set them.
+21. Database storage encountered constants override file set ones.
+    1. i.e. User of application has set them.
+22. CNF Constant values can be changed in the script file.
+    1. If not present in script file, then an application setting must proceed with its default.
+    2. CNF Constants can be declared only once during initial parsing of script files.
+    3. Rule of thumb is that Constants are synchronized with an applications release version.
+    4. Static constants, are script or code only assigned values.
+    5. CNF Anons can override in contrast previously assigned value.
+23. A CNF Anon is similar to constants but a simpler property and value only pair.
+    1. Anons are so called because they are unknown or unexpected by the configuration framework, store to object intermediate.
+    2. Constants that turn up in the anon list, are a good indicator that they are not handled from script. Forgotten become anons.
+    3. Anons similar to constants, once in the database, overtake the scripted or application default settings value.
+    4. Static anons, are those that are set in the database, and/or are not merged with application defaults.
+    5. Anons hashed are programmatically accessed separately to constants.
+       1. It is fine to have several applications, to share same storage, even if they have different implementation.
+       2. Constants will be specific to application, while anons can change in different purpose script files.
+24. *Anon* is not instruction processed. Hence, anonymous in nature for its value. Applications using this CNF system usually process and handles this type of entries.
+25. Anon has no signifier, and doesn't need to have an application default.
+26. Anon value is in best practice and in general synchronized, from script to a database configuration store. It is up to the implementation.
+27. Anon value is global to the application and its value can be modified.
+
+    ```CNF
+            <<USE_SWITCH<true>>>
+            <<DIALOG_TITLE_EN<MyApplication Title>>>
+    ```
+
+    1. Anon value can be scripted to contain template like but numbered parameters.
+    2. When querying for an anon value, replacement parameter array can be passed.
+    3. Numbering is from **$$$1$$$**..**$$$(n...)$$$** to be part of its value. Strategically placed.
+
+    ```CNF
+        <<GET_SUB_URL<https://www.$$$1$$$.acme.com/$$$2$$$>>>
+    ```
+
+    ```PERL
+       # Perl language
+       my $url = $cnf->anon('GET_SUB_URL',('tech','main.cgi'));
+       # $url now should be: https://www.tech.acme.com/main.cgi
+       eval ($url =~ m/https:\.*/)
+             or warn "Failed to obtain expected URL when querying anon -> GET_SUB_URL"
+    ```
+
+28. Listing is a reappearing same name tag postfixed with an **\$\$**.
+
+    ```CNF Example 1:
+                <<INS$$>ls -la>>
+                <<INS$$>uname -a>>
+    ```
+
+29. Listing is usually a named list of instructions, items grouped and available as individual entries of the listing value.
+
+    ```CNF Example 2:
+                <<Animals$$>Cat>>
+                <<Animals$$>Dog>>
+                <<Animals$$>Eagle>>
+    ```
+
+30. Anon used as an **reserve** format is some applications internal meta property.
+    1. These are prefixed with an **^** to the anon property name.
+    2. They are not expected or in any specially part of the CNF processing, but have here an special mention.
+    3. It is not recommended to use reserve anons as their value settings, that is; can be modified in scripts for their value.
+    4. Reserve anon if present is usually a placeholder, lookup setting, that in contrast if not found there, might rise exceptions from the application using CNF.
+
+    ```CNF Example 3:
+                Notice to Admin, following please don't modify in any way! 
+                Start --> { 
+                <<^RELEASE>2.3>>
+                <<^REVISION>5>>
+                <<META><DATA>^INIT=1`^RUN=1`^STAGES_EXPECTED=5>> } <-- End 
+    ```
+
+
+## CNF Tag Formats
+
+Quick Jump: [Introduction](#introduction)  |  [CNF Collections Formatting](#cnf-collections-formatting) | [Instructions & Reserved Words](#instructions-and-reserved-words) | [Scripted Data Related Instructions](#scripted-data-related-instructions)
+
+### Property Value Tag
+
+   ```CNF
+        <<{name}<{value}>>>
+   ```
+
+### Instruction Value Tag
+
+   ```CNF
+        <<<{INSTRUCTION}
+        {value\n...valuen\n}>>>
+   ```
+
+   ```CNF
+        <<{name}<{INSTRUCTION}
+        {value\n...valuen\n}>>>
+   ```
+
+### Full Tag 
+
+```CNF
+    <<{$sig}{name}<{INSTRUCTION}>
+        {value\n...value\n}
+    >>
+```
+
+**Examples:**
+
+```CNF
+        <<$HELP<CONST
+            Sorry help is currently.
+            Not available.
+        >>
+        <<<CONST
+            $RELEASE_VER = 1.8
+            $SYS_1 =    10
+            $SYS_2 = 20
+            $SYS_3 =      "   Some Nice Text!   "
+        >>
+       <<PRINT_TO_HELP<true>>
+```
+
+## Mauling Explained
+
+1. Mauling refers to allowing for/or encountering inadequate possible script format of an CNF property.
+    1. These still should pass the parsers scrutiny and are not in most cases errors.
+    2. There are in general three parts expected for an CNF property.
+        1. Tag name.
+        2. Instruction.
+        3. Value
+    3. CNF property value tag turns the instruction the value, if the value is not separated from it.
+    4. CNF only instructed, will try to parse the whole value to make multiple property value pairs.
+        1. The newline is the separator for each on created.
+    5. Ver. 2.8 of PerlCNF is the third rewrite to boom and make this algorithm efficient.
+2. Example. Instruction is mauling value:
+
+    ```cnf
+        <<CNF_COUNTRY_OF_ORIGIN<Australia>>>
+    ```
+
+3. Example. Instruction mauls into multi-new line value:
+
+    ```cnf
+       <<APP_HELP_TXT<CONST
+       This is your applications help text in format of an constance. 
+       All you see here can't be dynamically changed.
+       You might be able to change it in the script though. 
+       And re-run your app.
+       >>        
+    ```
+
+4. Example. Tag name mauled:
+
+    ```cnf
+       <<<CONST
+       $APP_HELP_TXT='This is your applications help text in format of an constance.'       
+       >>        
+    ```
+
+5. Example. Instruction mauled or being disabled for now:
+    1. This will fire warnings but isn't exactly an error.
+    2. Introduced with CNF release v.2.5.
+
+    ```cnf
+       <<PWD<>path/to/something>>        
+    ```
+
+
+## CNF Collections Formatting
+Quick Jump: [Introduction](#introduction)  | [CNF Tag Formats](#cnf-tag-formats)  | [Instructions & Reserved Words](#instructions-and-reserved-words) | [Scripted Data Related Instructions](#scripted-data-related-instructions)
+
+1. CNF collections are named two list types.
+   1. Arrays
+   2. Hashtables
+2. Collection format.
+   1. {T} stands for type signifier. Which can only be either ''@'' for array type, or ''%'' for hash.
+   2. NAME is the name of the collection, required. Later this is searched for with signifier prefixed.
+   3. DATA is delimited list of items.
+      1. For hashes named as property value pairs and assigned with '=', for value.
+         1. Hash entries are delimited by a new line.
+      2. For arrays, values are delimited by new line or a comma.
+      3. White space is preserved if values are quoted, otherwise are trimmed.
+
+   ```cnf
+    Format:    <<@<{T}NAME{$$}>DATA>>>
+
+    Examples:
+    # Following provides an array of listed animal types. Notice how you don't need text to be quoted.
+    <<@<@animals<Cat,"Dog","Pigeon",Horse>>>
+    # Following provides an array with numbers from 0..8
+    <<@<@numbers<1,2,3,4,5
+    6
+    7
+    8
+    >>>
+
+    # Following is hashing properties. Notice the important % signifier for the hash name as %settings.
+    <<@<%settings<
+        AppName = "UDP Server"
+        port    = 3820
+        buffer_size = 1024
+        pool_capacity = 1000    
+    >>
+   ```
+
+## Instructions And Reserved Words
+
+Quick Jump: [Introduction](#introduction)  | [CNF Tag Formats](#cnf-tag-formats)  | [CNF Collections Formatting](#cnf-collections-formatting) | [Scripted Data Related Instructions](#scripted-data-related-instructions)
+
+   1. Reserved words relate to instructions, that are specially treated, and interpreted by the parser to perform extra or specifically processing on the current value.
+   2. Reserved instructions can't be used for future custom ones, and also not recommended tag or property names.
+   3. Current Reserved words list is.
+       - CONST    - Concentrated list of constances, or individually tagged name and its value.
+       - VARIABLE - Concentrated list of anons, or individually tagged name and its value.
+       - DATA     - CNF scripted delimited data property, having uniform table data rows.
+       - FILE     - CNF scripted delimited data property is in a separate file.
+       - %LOG     - Log settings property, i.e. enabled=1, console=1.
+       - TABLE    - SQL related.
+       - TREE     - Property is a CNFNode tree containing multiple depth nested children nodes.
+       - INCLUDE  - Include properties from another file to this repository.
+                    - Included files constances are ignored if are in parent file assigned.
+                    - Includes are processed last and not on the spot, so their anons encountered take over precedence.
+                    - Include instruction use is not recommended and is as same to as calling the parse method of the parser.
+       - INDEX    - SQL related.
+       - INSTRUCT - Provides custom new anonymous instruction.
+       - VIEW     - SQL related.
+       - PLUGIN   - Provides property type extension for the PerlCNF repository.
+       - SQL      - SQL related.
+       - MIGRATE  - SQL related.
+       - MACRO
+          1. Value is searched and replaced by a property value, outside the property scripted.
+          2. Parsing abruptly stops if this abstract property specified is not found.
+          3. Macro format specifications, have been aforementioned in this document. However, make sure that your macro a constant also including the *$* signifier if desired.
+
+## Database and SQL Instruction Formatting
+
+(Note - this documentation section not complete, as of 2020-02-14)
+
+### About
+
+CNF supports basic SQL Database structure statement generation. This is done via instruction based CNF tags. Named **sqlites**.
+
+1. Supported is table, view, index and data creation statements.
+2. Database statements are generic text, that is not further processed.
+3. There is limited database interaction, handling or processing to be provided.
+   1. Mainly for storage transfer of CNF constants, from file to database.
+   2. File changes precede database storage only in newly assigned constants.
+4. Database generated is expected to have a system SYS_CNF_CONFIG table, containing the constants unique name value pairs, with optional description for each.
+   1. This is a reserved table and name.
+   2. This table must contain a **$RELEASE_VER** constants record at least.
+
+### SQLite Formatting
+
+* SQLites have the following reserved instructions:
+
+1. TABLE
+
+    ```CNF
+        <<MyAliasTable<TABLE
+                    ID INT PRIMARY KEY NOT NULL,
+                    ALIAS VCHAR(16) UNIQUE CONSTRAINT,
+                    EMAIL VCHAR(28),
+                    FULL_NAME VCHAR(128)
+        >>>
+    ```
+
+2. INDEX
+
+    ```CNF
+        <<MyAliasTable<INDEX<idx_alias on MyAliasTable (ALIAS);>>>
+    ```
+
+3. SQL
+     1. SQL statements are actual full SQL placed in the tag body value.
+
+    ```CNF
+        <<VW_ALIASES>SQL
+            CREATE VIEW VW_ALIASES AS SELECT ID,ALIAS ORDER BY ALIAS;
+        >>>
+    ```
+
+4. MIGRATE
+   1. Migration are brute SQL statements to be run based on currently installed previous version of the SQL database.
+   2. Migration is to be run from version upwards as stated and in the previous database encountered.
+      1. i.e. If encountered old v.1.5, it will be upgraded to v.1.6 first, then v.1.7...
+   3. Migration is not run on newly created databases. These create the expected latest data structure.
+   4. SQL Statements a separated by ';' terminator. To be executed one by one.
+
+    ```CNF
+        <<1.6<MIGRATE
+                ALTER TABLE LOG ADD STICKY BOOL DEFAULT 0;
+        >>
+        <<1.8<MIGRATE
+            CREATE TABLE notes_temp_table (LID INTEGER PRIMARY KEY NOT NULL, DOC TEXT);
+            INSERT INTO notes_temp_table SELECT `LID`,`DOC` FROM `NOTES`;
+            DROP TABLE `NOTES`;
+            ALTER TABLE `notes_temp_table` RENAME TO `NOTES`;
+        >>
+    ```
+
+### Scripted Data Related Instructions
+
+1. DATA
+    1. Data is specifically parsed, not requiring quoted strings and isn't delimited by new lines alone.
+    2. Data rows are ended with the **"~"** delimiter. In the tag body.
+    3. Data columns are delimited with the invert quote **"`"** (back tick) making the row.
+    4. First column can be taken as the unique and record identity column (UID).
+        1. If no UID is set, or specified with # or, 0, ID is considered to be auto-numbered based on data position plus 1, so not to have zero IDs.
+        2. When UID is specified, an existing previous assigned UID cannot be overridden, therefore can cause duplicates.
+        3. Data processing plugins can be installed to cater and change behavior on this whole concept.
+    5. Data is to be updated in storage if any column other than the UID, has its contents changed in the file.
+       1. This behavior can be controlled by disabling something like an auto file storage update. i.e. during application upgrades. To prevent user set settings to reset to factory defaults.
+       2. The result would then be that database already stored data remains, and only new ones are added. This exercise is out of scope of this specification.
+
+    ```CNF
+        <<MyAliasTable<DATA
+        01`admin`admin@inc.com`Super User~
+        02`chef`chef@inc.com`Bruno Allinoise~
+        03`juicy`sfox@inc.com`Samantha Fox~
+        >>
+    ```
+
+2. FILE
+   1. Expects a file name assigned value, file containing actual further CNF DATA rows instructions, separately.
+   2. The file is expected to be located next to the config file.
+   3. File is to be sequentially buffer read and processed instead as a whole in one go.
+   4. The same principles apply in the file as to the DATA instruction CNF tag format, that is expected to be contained in it.
+
+    ```CNF
+        <<MyItemsTbl<FILE data_my_app.cnf>>
+    ```
+
+3. PLUGIN
+    1. Plugin instruction is specific outside program that can be run for various configuration task, on post loading of all properties.
+        This can be special further.
+        1. Further, processing of data collections.
+        2. Issuing actions, revalues.
+        3. Checking structures, properties and values that are out of scope of the parser.
+    2. To a plugin parser itself will be passed to access.
+        1. Required attributes are:
+            1. package : Path or package name of plugin.
+            2. subroutine: Subroutine name to use to pass the parser, after plugin initialization.
+            3. property : property to be passed directly, if required, like with data processing.
+    3. Requirements are for plugins to work to have the DO_ENABLED=>1 config attribute set.
+        1. Plugins currently also will require be last specified in the file, to have access to previous anons that are instructed.
+
+    ```CNF
+       /**
+        * Plugin instructions are the last one setup and processed,
+        * by placing the actual result into the plugins tag name.
+        */
+        <<processor<PLUGIN>
+            package     : DataProcessorPlugin
+            subroutine  : process
+            property    : employees
+        >>
+    ```
+
+4. TREE (NEW FEATURE - 20221128)
+   1. Will create an CNF property having a CNF Node object, that contains further child nodes or attributes in a tree structure.
+        1. This is a hash of anons for attributes and a list of further nodes, all having their own one text value.
+        2. Property can have its value, contain attributes, and also other properties within.
+            1. The property markup in the tree script is called body, and follows the Perl CNF style.
+               The difference is that both ' **<,>** ' and ' **[,]** ' are signifiers for the property or multiline value, start and end tags.
+                1. All tags require to be on a line of their own.
+                2. Current algorithm uses sub buffering to parse each property's body.
+                    So deeply nesting a large property body is not recommended and also not suitable for encapsulating in there data.
+                3. An opening tag is opened being surrounded with the same signifier into the direction of the property body.
+                4. The closing tag is in the opposite direction same signifiers.
+                    - **[sesame[** I am an open and closed value now, nothing you can do about it (X|H)TML! **]sesame]**
+        3. The node characteristic is that each sub property is linked to its parent property
+           1. This is contained in the ' **@** ' attribute.
+           2. Node characteristic is also the tree can be searched via path.
+           3. Perl doesn't require type casting and conversion for node values, but for only few rare occasions.
+        4. All attributes and sub properties have to have unique names.
+            1. Emphasis of having uniquely named properties is to avoid having a tree to be used as a collection.
+            2. A property can have its contained collection however, which are multiple sub properties placed into an ' **@@** ' field or attribute.
+        5. However, deeply nested in. The contained attributes and other properties are assigned and accessed by a path statement.
+        6. Attributes can be either assigned with an ' **:** ' or ' **=** ' signifier, no quotes are needed; unless capturing space.
+            - Attributes must be specified on a single line.
+            - Future versions might provide for allowing to assign similar as property values, with the multiline value tag.
+   2. The TREE instruction will create an CNF Node object assigned to a unique anon.
+        1. The value of a property is delimited with an [ **#** ] tag as start, end [ **/#** ] as the ending.
+            1. Each property's start and end tag must stand and be on its own line, withing the body, except for the value or array attributes.
+            2. A value tagged property section is its text and can't contain further nested tree notes.
+                 Invalid: ```[#[<*<link/to/something>*>]#]```
+   3. Tree can contain links to other various properties, anons, that means also to other trees then the current one.
+        1. A link (pointer) to an outside anon or property is specified in form of ⇾ ```cnf [*[ {path/name} ]*]```.
+           1. The link can read only point to:
+              - A repository anon or constant value.
+              - A tree path value.
+              - A Perl package constant value,``` MyPackage::SOME_CONSTANCE ```.
+              - A Perl static subroutine accepting **this** CNF node and changing possible its value, ``` main::setNodeValue(.) ```.
+        2. It is not recommended to make circular links, or to prioritize properties themselves containing links.
+        3. To aid parsing priority a parse special instruction can be used if for example linking trees.
+            1. Specified the best just after the tree instruction as ⇾ ``` <<...<TREE> _HAS_PROCESSING_PRIORITY_ ```.
+            2. This is currently a TREE instruction only inbuilt option in Perl CNF, for the CNF Nodes individuals scripts order of processing.
+        4. Links in the root parent node of the tree are assigned as attributes or unique values. In subroperties they are set as own nodes.
+   4. Tree Format Example:
+    ```cnf
+    <<APP<My Nice Application by ACME Wolf PTY>>
+
+    <<doc<TREE>
+    <*<APP>*>
+    thread: 28
+    title = My Application
+        <client<
+            address: 192.168.1.64
+            [paths[
+                [#[
+                    ./dev
+                    ./sources
+                ]#]
+            ]paths]
+        >client>
+    >>
+    ```
+
+## Sample Perl Language Usage
+
+Quick Jump: [Introduction](#introduction) | [CNF Collections Formatting](#cnf-collections-formatting) | [Instructions & Reserved Words](#instructions-and-reserved-words) | [Scripted Data Related Instructions](#scripted-data-related-instructions) | [CNF Tag Formats](#cnf-tag-formats)
+
+1. *DO*
+   1. CNF DO instruction is *experimental*, purely Perl programming language related.
+   2. It provides Perl code evaluation during parsing giving also access to parser and its variables as DO's further sequentially appear.
+   3. It is recommended to disable this feature, if not need Perl code snippets to be in the configuration file.
+   4. These, if named are assigned as anons, with the last processed value as the return. Making them evaluated and processed ever only once.
+
+```CNF
+<<<DO
+print "Hello form CNF, you have ".(scalar %anons) ." anons so far.\n"
+>>>
+```
+
+**~/my_application.pl** file contents:
+
+```PERL
+
+use lib "system/modules";
+use lib $ENV{'PWD'}.'/perl_dev/WB_CNF/system/modules';
+require CNFParser;
+require Settings;
+
+my @expected = ("$MY_APP_LIB_RELATIVE", "$MY_APP_DB_RELATIVE");
+my $path = $ENV{'PWD'}."/perl_dev/WB_CNF/db/configuration.cnf";
+# Loading twice config here with object constructor with and without path.
+# To show dual purpose use.
+my $cnf1  = CNFParser->new($path);
+# Nothing parsed yet construct.
+my $cnf2  = CNFParser->new();
+   # We relay that the OS environment has been set for CNF constant settings if missing
+   # in the configuration file. Adding after parse has no effect if found in file.
+   $cnf2 -> addENVList(@expected);
+   # Parse finally now. Parse can be called on multiple different files, if desired.
+   $cnf2 -> parse($path);
+my $LIB_PATH;
+
+print "List of constants in file: $path\n";
+foreach my $prp ($cnf->constants()){
+    print "$prp=", $cnf->constant($prp),"\n";
+}
+if(!$cnf->constant('$MY_APP_LIB_RELATIVE')){
+    warn 'Missing $MY_APP_LIB_RELATIVE setting.';
+    $LIB_PATH = $cnf2->constant('$MY_APP_LIB_RELATIVE');
+    die  'Unable to get required $MY_APP_LIB_RELATIVE setting!' if(not $LIB_PATH)
+}
+
+print "Welcome to ", $cnf->constant('$APP_NAME'), " version ", $cnf->constant('$RELEASE_VER'), ".\n";
+```
+
+**~//perl_dev/WB_CNF/db/configuration.cnf** file contents:
+
+```CNF
+
+# List command anon with the name of 'list'.
+<<list<ls -lh dev|sort>>>
+<<<CONST
+$RELEASE_VER = 1.0
+$APP_NAME="My Application Sample"
+>>>
+
+```
+
+***
+
+   Document is from project ⇾  <https://github.com/wbudic/PerlCNF/>
+
+   An open source application.
+
+<center>Sun Stage - v.2.8 2023</center>
+
diff --git a/htdocs/cgi-bin/docs/Squeezed In Between Poetry/pix/arrDbl_left.gif b/htdocs/cgi-bin/docs/Squeezed In Between Poetry/pix/arrDbl_left.gif
new file mode 100644 (file)
index 0000000..84ce312
Binary files /dev/null and b/htdocs/cgi-bin/docs/Squeezed In Between Poetry/pix/arrDbl_left.gif differ
diff --git a/htdocs/cgi-bin/docs/Squeezed In Between Poetry/pix/arrDbl_right.gif b/htdocs/cgi-bin/docs/Squeezed In Between Poetry/pix/arrDbl_right.gif
new file mode 100644 (file)
index 0000000..28671f5
Binary files /dev/null and b/htdocs/cgi-bin/docs/Squeezed In Between Poetry/pix/arrDbl_right.gif differ
diff --git a/htdocs/cgi-bin/docs/Squeezed In Between Poetry/pix/arrDbl_top.gif b/htdocs/cgi-bin/docs/Squeezed In Between Poetry/pix/arrDbl_top.gif
new file mode 100644 (file)
index 0000000..78780a9
Binary files /dev/null and b/htdocs/cgi-bin/docs/Squeezed In Between Poetry/pix/arrDbl_top.gif differ
diff --git a/htdocs/cgi-bin/docs/Squeezed In Between Poetry/pix/thournwhaul_logo.jpg b/htdocs/cgi-bin/docs/Squeezed In Between Poetry/pix/thournwhaul_logo.jpg
new file mode 100644 (file)
index 0000000..14338bc
Binary files /dev/null and b/htdocs/cgi-bin/docs/Squeezed In Between Poetry/pix/thournwhaul_logo.jpg differ
diff --git a/htdocs/cgi-bin/docs/Squeezed In Between Poetry/vol1.html b/htdocs/cgi-bin/docs/Squeezed In Between Poetry/vol1.html
new file mode 100644 (file)
index 0000000..64fc416
--- /dev/null
@@ -0,0 +1,1541 @@
+
+<!-- saved from url=(0070)./vol1.html#twhaul.27082002 -->
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=windows-1252"><title>Squeezed In Between Poetry - Vol I</title>
+<style type="text/css">
+<!--
+body{
+  background-color:#C57A75;
+  font-family: Tahoma, Helvetica, sans-serif;
+}
+p{  font-size: 12pt; }
+p.h1{  font-size: 20pt; font-weight: bold;}
+p.h2{  font-size: 14pt; font-weight: bold;}
+p.h3{  font-size: 12pt; font-weight: bold;}
+p.txt {  font-size: 10pt; font-weight: bold;}
+p.stxt{  font-size: 8pt; font-weight: bold; }
+p.wh {  font-size: 10pt; font-weight: bold; color: #ffffff}
+p.gr {  font-size: 10pt; font-weight: bold; color: #666666}
+p.gr8 {  font-size: 7pt; font-weight: bold; color: #666666}
+p.plink {  font-size: 10pt; font-weight: bold; color: #C57A75}
+p.pre{font-family:  Tahoma, Garamond, Helvetica; font-size: 13pt; font-weight: bold;}
+.poem{font-family:  Tahoma, Garamond, Helvetica; font-size: 13pt; background-color: #EDEFBB; padding: 10px}
+
+a  {
+       color : #666666;
+       text-decoration : none;
+}
+
+a:Visited  {
+       color : #666666;
+       font-style : normal;
+}
+
+a:Active  {
+       color : #666666;
+}
+
+a:Hover  {
+       color : #C57A75;
+       text-decoration : underline;
+       background-color : #EDEFBB;
+       font-style : bold;
+}
+-->
+</style>
+<script>
+function getBaseUrl() {
+    return window.location.href.match(/^.*\//);
+}
+</script>
+</head>
+<body leftmargin="0" topmargin="10" marginwidth="0" marginheight="0" onload="console.log(getBaseUrl())">
+
+
+<a name="head"></a>
+
+<table width="640" border="0" cellspacing="2" cellpadding="10" align="center" bgcolor="#000000">
+<tbody><tr> 
+<td bgcolor="#EDEFBB">
+<p class="h1" align="center">
+<img src="pix/thournwhaul_logo.jpg" border="0" alt="" align="middle">&nbsp;&nbsp;&nbsp;Squeezed In Between Poetry
+</p>
+
+
+<table align="center" cellpadding="10"><tbody><tr>
+<td><p class="h2">Volume I</p></td>
+<td><p class="h2" align="center"><a href="vol2.html">Volume II</a></p></td>
+</tr>
+</tbody></table>
+
+</td>
+</tr>
+<tr> 
+<td bgcolor="#EDEFBB" width="80%">
+<p class="gr">
+This is a private and sacred unpublished poetry collection. Born out of need and desperation by the author, to return any left sense of art, that has slowly begun to disappear from the Internet scene. The turn of the new century brought only continuums of wars (middle east). The west is experiencing floods, bad economy, retrenchments. Morale values in people are getting even more so degrading. Time has come to heal, save planet earth and follow in spirit (at least) non-monetary values.
+</p>
+<p class="gr">
+This collection is a study and a poetry practice, future published works will not be part of this collection. The strive of all this was to produce a generation less verse, play of words, trying to suit everyone. In hope it will entertain if not heal in this uncertain times of information overflow. Nothing here found is particularly political, gender or religion sided. The only protagonist is; and will continue to be, the right to freedom of speech, art and mutual respect of thought.
+<br>
+
+</p>            
+</td>
+</tr>
+</tbody></table>
+<br>
+
+<!-- Pages Start -->
+<table width="640" border="0" cellspacing="2" cellpadding="10" align="center" bgcolor="#000000">
+<!-- Pages Start -->
+
+
+
+<!-- For the Love of Syringa Start -->
+  <tbody><tr valign="top"> 
+    <td bgcolor="#EDEFBB" rowspan="2"> 
+<pre class='poem'>SQUEEZED
+IN BETWEEN
+POETRY
+</pre>
+<!-- Index-->
+<hr size="2" color="#C57A75">
+<table>
+<tbody><tr>
+<td valign="top" colspan="2" align="center"><p class="gr8">10-Dec-2002<br><i>For the Love of Syringa</i></p></td>
+</tr>
+<tr>
+<td valign="top" colspan="2"><p class="gr"></p><hr size="2" color="#C57A75"></td>
+</tr>
+<tr>
+</tr><tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.12112002"><p class="gr8">Facing The River Dream</p></a></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.05112002"><p class="gr8">Just Another Testament</p></a></td>
+</tr>
+<tr><td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.19082002_2"><p class="gr8">Dog Patrol</p></a></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.19082002_1"><p class="gr8">Abstained Melodrama</p></a></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.08092002"><p class="gr8">Cross Eyed</p></a></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.06092002"><p class="gr8">The Flock Trip</p></a></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.03092002"><p class="gr8">Coined System</p></a></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.30082002"><p class="gr8">Sun Stark</p></a></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.27082002"><p class="gr8">The Shaved Nun Tail Rap</p></a></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.24082002"><p class="gr8">Disturbed Kitten</p></a></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.22082002"><p class="gr8">Creation</p></a></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.20082002"><p class="gr8">Troll</p></a></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.10052002"><p class="gr8">Remind Me What I am Not</p></a></td>
+</tr>
+<tr>
+<td valign="top" colspan="2">
+<hr size="2" color="#C57A75">
+<p class="plink"><img src="pix/arrDbl_left.gif" border="0" alt="" align="middle">
+<a href="javascript:history.back()">back</a>
+<img src="pix/arrDbl_top.gif" border="0" alt="" align="middle">
+<a href="./vol1.html#head">top</a>
+</p>     
+<p class="gr8" align="center">Poetry of<br> Thourn Whaul<br>  </p> 
+</td>
+</tr> 
+</tbody></table>
+<!-- Index End-->
+       </td>
+    <td bgcolor="#FAFBD6" valign="center"><a name="twhaul.10122002"></a><p class="pre">For the Love of Syringa</p></td>
+  </tr>
+  <tr valign="top"> 
+    <td bgcolor="#FAFBD6" valign="top"> 
+<pre class='poem'>
+My village is burning feelings convulse
+home away on a trench bench rest
+Feelings don't take me away, avulse
+what was left behind in jest
+
+Is it my grandfathers house? but family aside
+the Syringa  bloom  has taken over mourn
+Occupied presence grasping left out pride
+seduced hope by facts of youth adjourn.
+You violate flower let your self go 
+from the roads that you follow so carefully stringed
+Through orchards full in fruit keep your self low
+Bring me the perfume of hair loosened, been tinged
+Childhood mists of woodlands chased, 
+and moments well discrete you witnessed, fringed
+Syringa release the visions of home
+bride moments and the children's play.
+Obscured  plight then in a phase of epitome
+only you can again seduce as such, but be belay.
+
+My land under plunder, arson, rape 
+scratching years, breathing smoke
+Digging hollows, when ditches undrape 
+Syringa roots a loyal subject to invoke
+as wishes march with this boots that follow
+many good men and their own turn of reasons
+A lilac now missed grew from a barrow
+rich, powerful, to sustain the seasons.
+
+
+</pre>
+        <p></p>
+</td></tr>
+<!-- For the Love of Syringa End -->
+
+
+
+
+<!-- Just Another Testament Start -->
+
+ <tr valign="top"> 
+    <td bgcolor="#EDEFBB"><p class="txt">Intro</p></td>
+    <td bgcolor="#FAFBD6" valign="top"> 
+       <p class="gr">
+       "Facing The River Dream" is one of my favourites. It is a "hook-on" poem to a famous Led Zeppelin song. It tries to be a riddle with how it approaches abstraction. Maybe its my odd personal taste, but it is a shame that this type of poems are not considered anymore to be of "style".  Hint - It is a riddle since it has nothing to do directly on what it preaches or is being hook-up on, but helps ;)
+       </p>
+       </td>
+  </tr>
+
+
+  <tr valign="top"> 
+    <td bgcolor="#EDEFBB" rowspan="2"> 
+<pre class='poem'>SQUEEZED
+IN BETWEEN
+POETRY
+</pre>
+<!-- Index-->
+<hr size="2" color="#C57A75">
+<table>
+<tbody><tr>
+<td valign="top" colspan="2" align="center"><p class="gr8">12-Nov-2002<br><i>Facing The River Dream</i></p></td>
+</tr>
+<tr>
+<td valign="top" colspan="2"><p class="gr"></p><hr size="2" color="#C57A75"></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.05112002"><p class="gr8">Just Another Testament</p></a></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.19082002_2"><p class="gr8">Dog Patrol</p></a></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.19082002_1"><p class="gr8">Abstained Melodrama</p></a></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.08092002"><p class="gr8">Cross Eyed</p></a></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.06092002"><p class="gr8">The Flock Trip</p></a></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.03092002"><p class="gr8">Coined System</p></a></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.30082002"><p class="gr8">Sun Stark</p></a></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.27082002"><p class="gr8">The Shaved Nun Tail Rap</p></a></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.24082002"><p class="gr8">Disturbed Kitten</p></a></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.22082002"><p class="gr8">Creation</p></a></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.20082002"><p class="gr8">Troll</p></a></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.10052002"><p class="gr8">Remind Me What I am Not</p></a></td>
+</tr>
+<tr>
+<td valign="top" colspan="2">
+<hr size="2" color="#C57A75">
+<p class="plink"><img src="pix/arrDbl_left.gif" border="0" alt="" align="middle">
+<a href="javascript:history.back()">back</a>
+<img src="pix/arrDbl_top.gif" border="0" alt="" align="middle">
+<a href="./vol1.html#head">top</a>
+</p>     
+<p class="gr8" align="center">Poetry of<br> Thourn Whaul<br>  </p> 
+</td>
+</tr> 
+</tbody></table>
+<!-- Index End-->
+       </td>
+    <td bgcolor="#FAFBD6" valign="center"><a name="twhaul.12112002"></a><p class="pre">Facing The River Dream</p></td>
+  </tr>
+  <tr valign="top"> 
+    <td bgcolor="#FAFBD6" valign="top"> 
+<pre class='poem'>Harsh peace a vision yet to face
+when confronted with distances revealed
+Wasted beauty this foreign place
+unfazed by mortals time over left to bleed.
+
+Tasting the river green was bitter
+it carried the foot pilgrims smell
+Embracing them as their desert sitter
+of opiates less visions daring to foretell.
+
+Disturbed was thought by the sight of a body
+floating, after taken from the stake
+Healing stretched turning ghoulie
+to return to life just before the lake.
+
+Time to go, dream is over 
+moment enough to let loose only a tear
+The becoming is bedding in clouds passover
+decision made, moving to Kashmir.
+</pre>
+        <p></p>
+</td></tr>
+<!-- Facing The River Dream End -->
+
+
+
+
+
+
+
+<!-- Just Another Testament Start -->
+  <tr valign="top"> 
+    <td bgcolor="#EDEFBB" rowspan="2"> 
+<pre class='poem'>SQUEEZED
+IN BETWEEN
+POETRY
+</pre>
+<!-- Index-->
+<hr size="2" color="#C57A75">
+<table>
+<tbody><tr>
+<td valign="top" colspan="2" align="center"><p class="gr8">05-Nov-2002<br><i>Just Another Testament</i></p></td>
+</tr>
+<tr>
+<td valign="top" colspan="2"><p class="gr"></p><hr size="2" color="#C57A75"></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.19082002_2"><p class="gr8">Dog Patrol</p></a></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.19082002_1"><p class="gr8">Abstained Melodrama</p></a></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.08092002"><p class="gr8">Cross Eyed</p></a></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.06092002"><p class="gr8">The Flock Trip</p></a></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.03092002"><p class="gr8">Coined System</p></a></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.30082002"><p class="gr8">Sun Stark</p></a></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.27082002"><p class="gr8">The Shaved Nun Tail Rap</p></a></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.24082002"><p class="gr8">Disturbed Kitten</p></a></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.22082002"><p class="gr8">Creation</p></a></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.20082002"><p class="gr8">Troll</p></a></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.10052002"><p class="gr8">Remind Me What I am Not</p></a></td>
+</tr>
+<tr>
+<td valign="top" colspan="2">
+<hr size="2" color="#C57A75">
+<p class="plink"><img src="pix/arrDbl_left.gif" border="0" alt="" align="middle">
+<a href="javascript:history.back()">back</a>
+<img src="pix/arrDbl_top.gif" border="0" alt="" align="middle">
+<a href="./vol1.html#head">top</a>
+</p>     
+<p class="gr8" align="center">Poetry of<br> Thourn Whaul<br>  </p> 
+</td>
+</tr> 
+</tbody></table>
+<!-- Index End-->
+       </td>
+    <td bgcolor="#FAFBD6" valign="center"><a name="twhaul.05112002"></a><p class="pre">Just Another Testament</p></td>
+  </tr>
+  <tr valign="top"> 
+    <td bgcolor="#FAFBD6" valign="top"> 
+<pre class='poem'>
+What have you done
+with the scent that walked by
+What have you stun
+with looks that freed my
+You just be there
+while we carry the burden mount
+You just be fare
+to the disease taking count.
+
+Whish this words could come any easy
+whish you new things you instinctively do
+So let me wonder into my thing
+that maligned decision came to sing.
+
+I do my job well as we fight what needs to expel
+In hope a revelation without fear
+that when gone from verses I'll reappear. 
+Then talk to me as a stranger
+Introduce your self as you whish.
+Find me coming along, find me happy in full song.
+Courage a revelation without fear
+when I am gone to you I'll become less dear.
+For no use to be in mourning
+For no time was spend or ever lost
+Your served and wise went days
+with this lover and his ways.
+
+</pre>
+        <p></p>
+</td></tr>
+<!-- Just Another Testament End -->
+
+
+
+
+
+<!-- Dog Patrol Start -->
+  <tr valign="top"> 
+    <td bgcolor="#EDEFBB" rowspan="2"> 
+<pre class='poem'>SQUEEZED
+IN BETWEEN
+POETRY
+</pre>
+<!-- Index-->
+<hr size="2" color="#C57A75">
+<table>
+<tbody><tr>
+<td valign="top" colspan="2" align="center"><p class="gr">19/08/2002<br><i>Dog Patrol</i></p></td>
+</tr>
+<tr>
+<td valign="top" colspan="2"><p class="gr"></p><hr size="2" color="#C57A75"></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.19082002_1"><p class="gr8">Abstained Melodrama</p></a></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.08092002"><p class="gr8">Cross Eyed</p></a></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.06092002"><p class="gr8">The Flock Trip</p></a></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.03092002"><p class="gr8">Coined System</p></a></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.30082002"><p class="gr8">Sun Stark</p></a></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.27082002"><p class="gr8">The Shaved Nun Tail Rap</p></a></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.24082002"><p class="gr8">Disturbed Kitten</p></a></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.22082002"><p class="gr8">Creation</p></a></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.20082002"><p class="gr8">Troll</p></a></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.10052002"><p class="gr8">Remind Me What I am Not</p></a></td>
+</tr>
+<tr>
+<td valign="top" colspan="2">
+<hr size="2" color="#C57A75">
+<p class="plink"><img src="pix/arrDbl_left.gif" border="0" alt="" align="middle">
+<a href="javascript:history.back()">back</a>
+<img src="pix/arrDbl_top.gif" border="0" alt="" align="middle">
+<a href="./vol1.html#head">top</a>
+</p>     
+<p class="gr8" align="center">Poetry of<br> Thourn Whaul<br>  </p> 
+</td>
+</tr> 
+</tbody></table>
+<!-- Index End-->                 
+       </td>
+    <td bgcolor="#FAFBD6" valign="center"><a name="twhaul.19082002_2"></a><p class="pre">Dog Patrol</p></td>
+  </tr>
+  <tr valign="top"> 
+    <td bgcolor="#FAFBD6" valign="top"> 
+<pre class='poem'>
+Pulled into place the angry hound
+by hands well groomed for the job.
+Enemy astound, surprised 
+another direction to go lob.
+
+Sleep in peace you mankind layer
+don't dog your best friend.
+Heard let it be in thy prayer
+then join healed by a noseband.
+
+A lonely setting is the dog patrol
+every day bringing much of the same.
+Drugged in the smell of carbinol
+reason enough not to feel any blame. 
+
+In the hardest hour, why do we search 
+for reasons of devour?
+Fruit taken, any, even sour.
+Forgotten next and the dearest,
+like that passing by flower.
+</pre>
+        <p></p>
+</td></tr>
+<!-- Dog Patrol End -->
+
+<!-- Abstained Melodrama -->
+
+  <tr valign="top"> 
+    <td bgcolor="#EDEFBB"><p class="txt">Intro</p></td>
+    <td bgcolor="#FAFBD6" valign="top"> 
+       <p class="gr">Theme food. One of those <a href="http://www.aapcsite.plus.com/research.html" target="_blank">[AAPC]</a> challenges (usenet).</p>
+       </td>
+  </tr>
+
+  <tr valign="top"> 
+<td bgcolor="#EDEFBB" rowspan="2"> 
+<pre class='poem'>SQUEEZED
+IN BETWEEN
+POETRY
+</pre>
+<!-- Index-->
+<hr size="2" color="#C57A75">
+<table>
+<tbody><tr>
+<td valign="top" colspan="2" align="center"><p class="gr8">19/08/2002<br><i>Abstained Melodrama</i></p></td>
+</tr>
+<tr>
+<td valign="top" colspan="2"><p class="gr"></p><hr size="2" color="#C57A75"></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.08092002"><p class="gr8">Cross Eyed</p></a></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.06092002"><p class="gr8">The Flock Trip</p></a></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.03092002"><p class="gr8">Coined System</p></a></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.30082002"><p class="gr8">Sun Stark</p></a></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.27082002"><p class="gr8">The Shaved Nun Tail Rap</p></a></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.24082002"><p class="gr8">Disturbed Kitten</p></a></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.22082002"><p class="gr8">Creation</p></a></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.20082002"><p class="gr8">Troll</p></a></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.10052002"><p class="gr8">Remind Me What I am Not</p></a></td>
+</tr>
+<tr>
+<td valign="top" colspan="2">
+<hr size="2" color="#C57A75">
+<p class="plink"><img src="pix/arrDbl_left.gif" border="0" alt="" align="middle">
+<a href="javascript:history.back()">back</a>
+<img src="pix/arrDbl_top.gif" border="0" alt="" align="middle">
+<a href="./vol1.html#head">top</a>
+</p>     
+<p class="gr8" align="center">Poetry of<br> Thourn Whaul<br>  </p> 
+</td>
+</tr> 
+</tbody></table>
+<!-- Index End-->
+</td>
+<td bgcolor="#FAFBD6" valign="center"><a name="twhaul.19082002_1"></a><p class="pre">Abstained Melodrama</p></td>
+</tr>
+
+
+<tr valign="top"> 
+<td bgcolor="#FAFBD6" valign="top"> 
+<pre class='poem'>        
+To many weeks passed in abstention
+then finally it is time and a dash to the store.
+First I caressed the melon
+then peeled to suck on the core.
+
+Sticky fingers juices everywhere
+all divulged like an �clair.
+
+</pre>
+</td>
+</tr>
+<!-- Abstained Melodrama End-->
+
+
+<!-- Cross Eyed -->
+  <tr valign="top"> 
+    <td bgcolor="#EDEFBB" rowspan="2"> 
+<pre class='poem'>SQUEEZED
+IN BETWEEN
+POETRY
+</pre>
+<!-- Index-->
+<hr size="2" color="#C57A75">
+<table>
+<tbody><tr>
+<td valign="top" colspan="2" align="center"><p class="gr8">08/09/2002<br><i>Cross Eyed</i></p></td>
+</tr>
+<tr>
+<td valign="top" colspan="2"><p class="gr"></p><hr size="2" color="#C57A75"></td>
+<td>
+</td></tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.06092002"><p class="gr8">The Flock Trip</p></a></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.03092002"><p class="gr8">Coined System</p></a></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.30082002"><p class="gr8">Sun Stark</p></a></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.27082002"><p class="gr8">The Shaved Nun Tail Rap</p></a></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.24082002"><p class="gr8">Disturbed Kitten</p></a></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.22082002"><p class="gr8">Creation</p></a></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.20082002"><p class="gr8">Troll</p></a></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.10052002"><p class="gr8">Remind Me What I am Not</p></a></td>
+</tr>
+<tr>
+<td valign="top" colspan="2">
+<hr size="2" color="#C57A75">
+<p class="plink"><img src="pix/arrDbl_left.gif" border="0" alt="" align="middle">
+<a href="javascript:history.back()">back</a>
+<img src="pix/arrDbl_top.gif" border="0" alt="" align="middle">
+<a href="./vol1.html#head">top</a>
+</p>     
+<p class="gr8" align="center">Poetry of<br> Thourn Whaul<br>  </p> 
+</td>
+</tr> 
+</tbody></table>
+<!-- Index End-->
+       </td>
+    <td bgcolor="#FAFBD6" valign="center"><a name="twhaul.08092002"></a><p class="pre">Cross Eyed</p></td>
+  </tr>
+  <tr valign="top"> 
+    <td bgcolor="#FAFBD6" valign="top"> 
+<pre class='poem'>
+Cross eyed images on what is yet to be known.
+When in a shuffle, cards change hands 
+and things over sudden, quickly turn;
+no longer a price years spend to learn.
+
+For the hunted is a prey confused.
+Smuggling looks when caught stalking gifts
+(You always stepped in front of me with a smile.)
+In fear is a chest signed on the sweetly abused.
+But gifts found more suiting, another.
+(I watch you in motion; 
+probing of how much you gain from about the same.)
+Time based shifts appeal confessing on the done, 
+then rather.
+Balancing inhibits with suggestions.
+Following rules like a spinning eagle pair.
+Taken into winds that grasp the inception.
+Minding not, time taken for the dare.
+
+Long searched but found is the refuge, to precious;
+leaving is out of question!
+So we pass each others territory;
+in good company, no thanks need a mention.
+</pre>
+  </td></tr>
+<!-- Cross Eyed End-->
+
+
+
+
+<!-- The Flock Trip -->
+
+ <tr valign="top"> 
+    <td bgcolor="#EDEFBB"><p class="txt">Intro</p></td>
+    <td bgcolor="#FAFBD6" valign="top"> 
+       <p class="gr">It has been said that Nostradamus and his quatrains, depict and predict like an oracle at first sight.</p>
+       </td>
+  </tr>
+
+  <tr valign="top"> 
+    <td bgcolor="#EDEFBB" rowspan="2"> 
+<pre class='poem'>SQUEEZED
+IN BETWEEN
+POETRY
+</pre>
+<!-- Index-->
+<hr size="2" color="#C57A75">
+<table>
+<tbody><tr>
+<td valign="top" colspan="2" align="center"><p class="gr8">06/09/2002<br><i>The Flock Trip</i></p></td>
+</tr>
+<tr>
+<td valign="top" colspan="2"><p class="gr"></p><hr size="2" color="#C57A75"></td>
+<td>
+</td></tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.03092002"><p class="gr8">Coined System</p></a></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.30082002"><p class="gr8">Sun Stark</p></a></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.27082002"><p class="gr8">The Shaved Nun Tail Rap</p></a></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.24082002"><p class="gr8">Disturbed Kitten</p></a></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.22082002"><p class="gr8">Creation</p></a></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.20082002"><p class="gr8">Troll</p></a></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.10052002"><p class="gr8">Remind Me What I am Not</p></a></td>
+</tr>
+<tr>
+<td valign="top" colspan="2">
+<hr size="2" color="#C57A75">
+<p class="plink"><img src="pix/arrDbl_left.gif" border="0" alt="" align="middle">
+<a href="javascript:history.back()">back</a>
+<img src="pix/arrDbl_top.gif" border="0" alt="" align="middle">
+<a href="./vol1.html#head">top</a>
+</p>     
+<p class="gr8" align="center">Poetry of<br> Thourn Whaul<br>  </p> 
+</td>
+</tr> 
+</tbody></table>
+
+<!-- Index End-->
+       </td>
+    <td bgcolor="#FAFBD6" valign="center"><a name="twhaul.06092002"></a><p class="pre">The Flock Trip</p></td>
+  </tr>
+  <tr valign="top"> 
+    <td bgcolor="#FAFBD6" valign="top"> 
+<pre class='poem'>
+The flock has landed
+with no seed ever thrown.
+On a field green and mended.
+Full in pain, a new keeper has grown.
+
+People want times to be dear.
+No problem being a bit queer.
+Earth in shocking state.
+Past the river of blood, 2 and 8 will mate.
+(I am loosing inspiration, should I shutdown?)
+
+Cages clean as never seen.
+From all, only two saw eye to eye.
+</pre>
+  </td></tr>
+<!-- The Flock Trip End-->
+
+
+
+
+<!-- Coined System -->
+
+  <tr valign="top"> 
+    <td bgcolor="#EDEFBB" rowspan="2"> 
+<pre class='poem'>SQUEEZED
+IN BETWEEN
+POETRY
+</pre>
+<!-- Index-->
+<hr size="2" color="#C57A75">
+<table>
+<tbody><tr>
+<td valign="top" colspan="2" align="center"><p class="gr8">03/08/2002<br><i>&nbsp;Coined System</i></p></td>
+</tr>
+<tr>
+<td valign="top" colspan="2"><hr size="2" color="#C57A75"></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.30082002"><p class="gr8">Sun Stark</p></a></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.27082002"><p class="gr8">The Shaved Nun Tail Rap</p></a></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.24082002"><p class="gr8">Disturbed Kitten</p></a></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.22082002"><p class="gr8">Creation</p></a></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.20082002"><p class="gr8">Troll</p></a></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.10052002"><p class="gr8">Remind Me What I am Not</p></a></td>
+</tr>
+<tr>
+<td valign="top" colspan="2">
+<hr size="2" color="#C57A75">
+<p class="plink"><img src="pix/arrDbl_left.gif" border="0" alt="" align="middle">
+<a href="javascript:history.back()">back</a>
+<img src="pix/arrDbl_top.gif" border="0" alt="" align="middle">
+<a href="./vol1.html#head">top</a>
+</p>     
+<p class="gr8" align="center">Poetry of<br> Thourn Whaul<br>  </p> 
+</td>
+</tr> 
+</tbody></table>
+<!-- Index End-->
+
+
+       </td>
+    <td bgcolor="#FAFBD6" valign="center"><a name="twhaul.03092002"></a><p class="pre">Coined System</p></td>
+  </tr>
+  <tr valign="top"> 
+    <td bgcolor="#FAFBD6" valign="top"> 
+<pre class='poem'>
+Two sides of the coin
+Spin it my friend and watch it land.
+Short in decision, short in fall
+Careful now don't miss the hand.
+
+Taken by spin and magic turn, 
+Third side appears, the forgotten one
+Standing blank, late pockets burn
+To late now, the coin be gone.
+
+Third day of life has entered
+Just only confirming the aware
+Life as much as it is centred
+Then pluck what you can prepare.
+
+Found the circling birthmark
+Found third side of the coin
+Obscure images glowing stark
+What a joyous moment,
+a hit in the groin.
+Closing eyes from pain 
+and time come to clack.
+(Some would swear rather 
+ then clack; but I disagree;)  
+A ready tool is my scraper.
+in hurry seated down to notice,
+there is no toilet paper.
+</pre>
+  </td></tr>
+<!-- Coined System -->
+
+
+
+
+
+
+
+
+
+
+
+
+<!-- Sun Stark -->
+
+ <tr valign="top"> 
+    <td bgcolor="#EDEFBB"><p class="txt">Intro</p></td>
+    <td bgcolor="#FAFBD6" valign="top"> 
+       <p class="gr">War kills in any form presented. 'Sun Stark' is dedicated to all innocent victims of September 11.
+       </p>
+       </td>
+  </tr>
+
+  <tr valign="top"> 
+    <td bgcolor="#EDEFBB" rowspan="2"> 
+<pre class='poem'>SQUEEZED
+IN BETWEEN
+POETRY
+</pre>
+<!-- Index-->
+<hr size="2" color="#C57A75">
+<table>
+<tbody><tr>
+<td valign="top" colspan="2" align="center"><p class="gr8">30/08/2002<br><i>Sun Stark</i></p></td>
+</tr>
+<tr>
+<td valign="top" colspan="2"><hr size="2" color="#C57A75"></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.27082002"><p class="gr8">The Shaved Nun Tail Rap</p></a></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.24082002"><p class="gr8">Disturbed Kitten</p></a></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.22082002"><p class="gr8">Creation</p></a></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.20082002"><p class="gr8">Troll</p></a></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.10052002"><p class="gr8">Remind Me What I am Not</p></a></td>
+</tr>
+<tr>
+<td valign="top" colspan="2">
+<hr size="2" color="#C57A75">
+<p class="plink"><img src="pix/arrDbl_left.gif" border="0" alt="" align="middle">
+<a href="javascript:history.back()">back</a>
+<img src="pix/arrDbl_top.gif" border="0" alt="" align="middle">
+<a href="./vol1.html#head">top</a>
+</p>     
+<p class="gr8" align="center">Poetry of<br> Thourn Whaul<br>  </p> 
+</td>
+</tr> 
+</tbody></table>
+<!-- Index End -->
+
+
+
+       </td>
+    <td bgcolor="#FAFBD6" valign="center"><a name="twhaul.30082002"></a><p class="pre">Sun Stark</p></td>
+  </tr>
+  <tr valign="top"> 
+    <td bgcolor="#FAFBD6" valign="top"> 
+<pre class='poem'>
+Two giants down long the suffer,
+And you follow best you can,
+in mourn molding a new 'him'.
+Abandoned made into a fin.
+No waves found to where we swim.
+
+Anaesthetic, a drag to deep,
+drowned pagers on a heap.
+Grasped direction to much care,
+Stifle rollbug gaining bare.
+
+Sun stark in oblivion,
+And you follow best you can.
+My love, lets try reach.
+The harden melody of behold,
+of loosen huff then unpluged leech.
+
+Soul was clasped out of skin.
+No waves found, to where we swim.
+</pre>
+
+  </td></tr>
+<!-- Sun Stark End-->
+
+
+
+
+
+
+<!-- The Shaved Nun Tail Rap -->
+  <tr valign="top"> 
+    <td bgcolor="#EDEFBB" rowspan="2"> 
+<pre class='poem'>SQUEEZED
+IN BETWEEN
+POETRY
+</pre>
+<!-- Index-->
+<hr size="2" color="#C57A75">
+<table>
+<tbody><tr>
+<td valign="top" colspan="2" align="center"><p class="gr8">27/08/2002<br><i>The Shaved Nun Tail Rap</i></p></td>
+</tr>
+<tr>
+<td valign="top" colspan="2"><hr size="2" color="#C57A75"></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.24082002"><p class="gr8">Disturbed Kitten</p></a></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.22082002"><p class="gr8">Creation</p></a></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.20082002"><p class="gr8">Troll</p></a></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.10052002"><p class="gr8">Remind Me What I am Not</p></a></td>
+</tr>
+<tr>
+<td valign="top" colspan="2">
+<hr size="2" color="#C57A75">
+<p class="plink"><img src="pix/arrDbl_left.gif" border="0" alt="" align="middle">
+<a href="javascript:history.back()">back</a>
+<img src="pix/arrDbl_top.gif" border="0" alt="" align="middle">
+<a href="./vol1.html#head">top</a>
+</p>     
+<p class="gr8" align="center">Poetry of<br> Thourn Whaul<br>  </p> 
+</td>
+</tr> 
+</tbody></table>
+<!-- Index End -->
+
+
+
+       </td>
+    <td bgcolor="#FAFBD6" valign="center"><a name="twhaul.27082002"></a><p class="pre">The Shaved Nun Tail Rap</p></td>
+  </tr>
+  <tr valign="top"> 
+    <td bgcolor="#FAFBD6" valign="top"> 
+<pre class='poem'>
+Across the street an old fell'a
+laundering his yellow stained underwear.
+Cotton reflects neon lights
+Words, 'No visitors after 23 PM'
+
+Don't ask now for prick pity. 
+You used up cotton resisting tear and wear.
+Old hands are patient,
+with titbits left to pick.
+Collected and saved, what for haven sake.
+
+Intaken is the stench of the collected,
+poor vapour of the sick.
+Fuelling a neon light,
+That flaps with pigeons in fright.
+
+A kicked bottle spins into corners
+Turning over a beggars tin
+Into the passage a nun, just arrived
+Tongue stapled eyelid,
+rocking beads between her teeth.
+What a pro!
+But was she worth waiting for?
+
+The shaved nun issues a warning:
+'If God is none, watch next of kin.'
+The beggar changed his sign next morning:
+'If the Devil is 1 and 0, how did I got in-between?'.
+
+Across the street an old fell'a
+Smiling back to his tail teller.
+Lifting now a female pair.
+Under armpit Amway bleach
+Whistling into evergreen,
+'life is all but what we teach'.
+</pre>
+
+  </td></tr>
+<!-- The Shaved Nun Tail Rap -->
+
+
+
+
+
+<!-- Disturbed Kitten -->
+
+  <tr valign="top"> 
+    <td bgcolor="#EDEFBB" rowspan="2"> 
+<pre class='poem'>SQUEEZED
+IN BETWEEN
+POETRY
+</pre>
+<!-- Index-->
+<hr size="2" color="#C57A75">
+<table>
+<tbody><tr>
+<td valign="top" colspan="2" align="center"><p class="gr8">24/08/2002<br><i>Disturbed Kitten</i></p></td>
+</tr>
+<tr>
+<td valign="top" colspan="2"><hr size="2" color="#C57A75"></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.22082002"><p class="gr8">Creation</p></a></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.20082002"><p class="gr8">Troll</p></a></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.10052002"><p class="gr8">Remind Me What I am Not</p></a></td>
+</tr>
+<tr>
+<td valign="top" colspan="2">
+<hr size="2" color="#C57A75">
+<p class="plink"><img src="pix/arrDbl_left.gif" border="0" alt="" align="middle">
+<a href="javascript:history.back()">back</a>
+<img src="pix/arrDbl_top.gif" border="0" alt="" align="middle">
+<a href="./vol1.html#head">top</a>
+</p>     
+<p class="gr8" align="center">Poetry of<br> Thourn Whaul<br>  </p> 
+</td>
+</tr> 
+</tbody></table>
+<!-- Index End -->
+
+
+
+       </td>
+    <td bgcolor="#FAFBD6" valign="center"><a name="twhaul.24082002"></a><p class="pre">Disturbed Kitten</p></td>
+  </tr>
+  <tr valign="top"> 
+    <td bgcolor="#FAFBD6" valign="top"> 
+<pre class='poem'>
+Defanged kitten, left barely alive.
+Such shared among convicts for pleasure's sake.
+Kitten's survival jerks, poor reason of vibe.
+An awful sight, to keep you awake.
+
+Proclaimed insane, villain is not.
+Destined master of his own wrought.
+
+She laid down late, next to having a man.
+Playing circles round and such.
+Man fast asleep, she opens her gown.
+Exited occasion, a solo touch.
+
+She whispers words learned by day.
+Mixing moan and the understood.
+Pushing beast out of hay.
+Pressing slowly enough to be wooed.
+
+Done without sweat, 
+she embraced the snored.
+Falling asleep contented and hot.
+Not minding to stay, restless and bored
+Pierced in trouble hawking snot.
+
+The same morning, rise and shine.
+Dreamy as if handed in a sham.
+Husband summons his concubine.
+Smelly thing in a day break come.
+
+Given into words,
+is the rest of the day.
+Ruled by hordes,
+makes a kitten pay.
+</pre>
+
+  </td></tr>
+<!-- Disturbed Kitten End -->
+
+
+
+
+
+
+
+
+<!-- Creation -->
+
+
+  <tr valign="top"> 
+    <td bgcolor="#EDEFBB" rowspan="2"> 
+<pre class='poem'>SQUEEZED
+IN BETWEEN
+POETRY
+</pre>
+<!-- Index-->
+<hr size="2" color="#C57A75">
+<table>
+<tbody><tr>
+<td valign="top" colspan="2" align="center"><p class="gr8">22/08/2002<br><i>Creation</i></p></td>
+</tr>
+<tr>
+<td valign="top" colspan="2"><hr size="2" color="#C57A75"></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.20082002"><p class="gr8">Troll</p></a></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.10052002"><p class="gr8">Remind Me What I am Not</p></a></td>
+</tr>
+<tr>
+<td valign="top" colspan="2">
+<hr size="2" color="#C57A75">
+<p class="plink"><img src="pix/arrDbl_left.gif" border="0" alt="" align="middle">
+<a href="javascript:history.back()">back</a>
+<img src="pix/arrDbl_top.gif" border="0" alt="" align="middle">
+<a href="./vol1.html#head">top</a>
+</p>     
+<p class="gr8" align="center">Poetry of<br> Thourn Whaul<br>  </p> 
+<p></p>
+</td>
+</tr> 
+</tbody></table>
+<!-- Index End -->
+
+
+
+       </td>
+    <td bgcolor="#FAFBD6" valign="center"><a name="twhaul.22082002"></a><p class="pre">Creation</p></td>
+  </tr>
+  <tr valign="top"> 
+    <td bgcolor="#FAFBD6" valign="top"> 
+<pre class='poem'>
+Poetry is creation!
+A mightier sword then pen.
+That captures dust particles,
+sun ray dancing,
+in the whirlpool of your den.
+
+Capturing only, but not zooming in.
+To explore further the world within.
+
+Tossed in the corner, a rotting book.
+Written once, reprinted many times.
+Collecting and making dust.
+The critic bites the hook.
+Cut with the pen, bleeds in rimes.
+What a curious moment, missing meaning just.
+
+Captured and taken away, in a lunatic suit.
+A frozen computer screen has suddenly reset.
+What a laugh, this mad delight.
+Captives cannot know what hasn't been saved.
+It has been lost together with its guide.
+</pre>
+  </td></tr>
+<!-- Creation End -->
+
+
+
+
+
+
+
+
+
+
+<!-- Troll -->
+
+ <tr valign="top"> 
+    <td bgcolor="#EDEFBB"><p class="txt">Intro</p></td>
+    <td bgcolor="#FAFBD6" valign="top"> 
+       <p class="gr">
+I discovered one night, this tiny scary looking bug.
+It looks like a tick but is a bit bigger.
+It comes out at night, and feeds on sugar traces, from cups that collect them self on my computer desk.
+Didn't kill it, but will clean up my act from now.
+       </p>
+       </td>
+  </tr>
+
+
+  <tr valign="top"> 
+    <td bgcolor="#EDEFBB" rowspan="2"> 
+<pre class='poem'>SQUEEZED
+IN BETWEEN
+POETRY
+</pre>
+<!-- Index-->
+<hr size="2" color="#C57A75">
+<table>
+<tbody><tr>
+<td valign="top" colspan="2" align="center"><p class="gr8">20/08/2002<br><i>Troll</i></p></td>
+</tr>
+<tr>
+<td valign="top" colspan="2"><hr size="2" color="#C57A75"></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.10052002"><p class="gr8">Remind Me What I am Not</p></a></td>
+</tr>
+<tr>
+<td valign="top" colspan="2">
+<hr size="2" color="#C57A75">
+<p class="plink"><img src="pix/arrDbl_left.gif" border="0" alt="" align="middle">
+<a href="javascript:history.back()">back</a>
+<img src="pix/arrDbl_top.gif" border="0" alt="" align="middle">
+<a href="./vol1.html#head">top</a>
+</p>     
+<p class="gr8" align="center">Poetry of<br> Thourn Whaul<br>  </p> 
+<p></p>
+</td>
+</tr> 
+</tbody></table>
+<!-- Index End -->
+
+
+
+       </td>
+    <td bgcolor="#FAFBD6" valign="center"><a name="twhaul.20082002"></a><p class="pre">Troll</p></td>
+  </tr>
+  <tr valign="top"> 
+    <td bgcolor="#FAFBD6" valign="top"> 
+<pre class='poem'>
+Since a while back, I got this Troll.
+Squatting there griming, on me left shoulder.
+It burrows thoughts, this unwanted maul.
+As time passes, becoming ever so bolder.
+
+The soul reason for all the blames.
+It itches my ear, and plays dirty games.
+Still only; from time to time.
+This gruesome and annoying,
+new found friend of mine.
+
+Pumpkin soup taken, it disappears for a while.
+Found out, it is much less there,
+when taken with wine.
+
+Learned to trick it, from day to day.
+Take some more wine, and it will go away.
+Then one day in hour of blissful merry.
+Shocked! I find out it turned into a fairy.
+</pre>
+
+  </td></tr>
+<!-- Troll End -->
+
+
+
+
+<!-- Remind Me What I am Not -->
+
+ <tr valign="top"> 
+    <td bgcolor="#EDEFBB"><p class="txt">Intro</p></td>
+    <td bgcolor="#FAFBD6" valign="top"> 
+       <p class="gr">
+Communism has been proven dead wrong. But how much did things changed with Capitalism.
+       </p>
+       </td>
+  </tr>
+
+
+  <tr valign="top"> 
+    <td bgcolor="#EDEFBB" rowspan="2"> 
+<pre class='poem'>SQUEEZED
+IN BETWEEN
+POETRY
+</pre>
+
+
+<!-- Index-->
+<hr size="2" color="#C57A75">
+<table>
+<tbody><tr>
+<td valign="top" colspan="2" align="center"><p class="gr8">10/05/2002<br><i>Remind Me What I am Not</i></p></td>
+</tr>
+<tr>
+<td valign="top" colspan="2"><p class="gr"></p><hr size="2" color="#C57A75"></td>
+</tr>
+<tr>
+</tr><tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.12112002"><p class="gr8">Facing The River Dream</p></a></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.05112002"><p class="gr8">Just Another Testament</p></a></td>
+</tr>
+<tr><td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.19082002_2"><p class="gr8">Dog Patrol</p></a></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.19082002_1"><p class="gr8">Abstained Melodrama</p></a></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.08092002"><p class="gr8">Cross Eyed</p></a></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.06092002"><p class="gr8">The Flock Trip</p></a></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.03092002"><p class="gr8">Coined System</p></a></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.30082002"><p class="gr8">Sun Stark</p></a></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.27082002"><p class="gr8">The Shaved Nun Tail Rap</p></a></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.24082002"><p class="gr8">Disturbed Kitten</p></a></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.22082002"><p class="gr8">Creation</p></a></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.20082002"><p class="gr8">Troll</p></a></td>
+</tr>
+<tr>
+<td valign="top" colspan="2">
+<hr size="2" color="#C57A75">
+<p class="plink"><img src="pix/arrDbl_left.gif" border="0" alt="" align="middle">
+<a href="javascript:history.back()">back</a>
+<img src="pix/arrDbl_top.gif" border="0" alt="" align="middle">
+<a href="./vol1.html#head">top</a>
+</p>     
+<p class="gr8" align="center">Poetry of<br> Thourn Whaul<br>  </p> 
+</td>
+</tr> 
+</tbody></table>
+<!-- Index End-->
+
+       </td>
+   <td bgcolor="#FAFBD6" valign="center"><a name="twhaul.10052002"></a><p class="pre">Remind Me What I am Not</p></td>
+  </tr>
+  <tr valign="top"> 
+    <td bgcolor="#FAFBD6" valign="top"> 
+<pre class='poem'>
+Somone from above likes me!
+And, I wish I was talking about God.
+In reality, the servant of his own success no one likes
+As servants make people think.
+
+So, loop back before you think.
+It is important who likes you!
+So, speek at times before you think
+It is important that people get to know you.
+
+The youtfull eye wants to see you dance
+And the old, only fight how mutch they want
+Not to forget, the fact how really late their are.
+
+Now, when we also realised the level of shame
+Don't be silenced, since its known, no one can jump their skin.
+Should we tattoo the moment where it fits appropriately?
+Sure not! As crap, eventually has to be wiped by someone.
+
+After all said, if still bound to things that don't work.
+Don't despair
+someone from above likes you.
+</pre>
+
+  </td></tr>
+<!-- Remind Me What I am Not -->
+
+
+<!-- Pages End -->
+   <tr valign="middle" align="center"> 
+    <td bgcolor="#EDBD49" colspan="2">
+       <p class="stxt"><b>Copyright � <a href="mailto:viw@nospam.to.excite.com">Thourn Whaul</a>  all rights reserved.</b><br>
+       </p>
+    </td>
+  </tr>
+
+
+</tbody></table>
+
+
+</body></html>
\ No newline at end of file
diff --git a/htdocs/cgi-bin/docs/Squeezed In Between Poetry/vol2.html b/htdocs/cgi-bin/docs/Squeezed In Between Poetry/vol2.html
new file mode 100644 (file)
index 0000000..97b8c48
--- /dev/null
@@ -0,0 +1,485 @@
+
+<!-- saved from url=(0055)index.html -->
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=windows-1252"><title>Squeezed In Between Poetry Vol II</title>
+<style type="text/css">
+<!--
+       body{
+  background-color:#C57A75;
+  font-family: Tahoma, Helvetica, sans-serif;
+}
+p{  font-size: 12pt; }
+p.h1{  font-size: 20pt; font-weight: bold;}
+p.h2{  font-size: 14pt; font-weight: bold;}
+p.h3{  font-size: 12pt; font-weight: bold;}
+p.txt {  font-size: 10pt; font-weight: bold;}
+p.stxt{  font-size: 8pt; font-weight: bold; }
+p.wh {  font-size: 10pt; font-weight: bold; color: #ffffff}
+p.gr {  font-size: 10pt; font-weight: bold; color: #666666}
+p.gr8 {  font-size: 7pt; font-weight: bold; color: #666666}
+p.plink {  font-size: 10pt; font-weight: bold; color: #C57A75}
+p.pre{font-family:  Tahoma, Garamond, Helvetica; font-size: 13pt; font-weight: bold;}
+.poem{font-family:  Tahoma, Garamond, Helvetica; font-size: 13pt; background-color: #EDEFBB; padding: 10px}
+
+a  {
+       color : #666666;
+       text-decoration : none;
+}
+
+a:Visited  {
+       color : #666666;
+       font-style : normal;
+}
+
+a:Active  {
+       color : #666666;
+}
+
+a:Hover  {
+       color : #C57A75;
+       text-decoration : underline;
+       background-color : #EDEFBB;
+       font-style : bold;
+}
+-->
+</style>
+</head>
+<body leftmargin="0" topmargin="10" marginwidth="0" marginheight="0">
+
+<a name="head"></a>
+
+<table width="610" border="0" cellspacing="2" cellpadding="10" align="center" bgcolor="#000000">
+<tbody><tr> 
+<td bgcolor="#EDEFBB">
+<p class="h1" align="center">
+<img src="pix/thournwhaul_logo.jpg" border="2" alt="" align="middle">&nbsp;&nbsp;&nbsp;Squeezed In Between Poetry
+</p>
+<table align="center" cellpadding="10"><tbody><tr>
+<td><p class="h2"><a href="vol1.html">Volume I</a></p></td>
+<td><p class="h2" align="center">Volume II</p></td>
+</tr>
+</tbody></table>
+</td>
+</tr>
+<tr> 
+<td bgcolor="#EDEFBB">
+<p class="gr">
+Following is a collection of poems in the genre of story telling.<br>
+Please wander of to <a href="./vol1.html"><font color="black"><b>Volume I</b></font></a> and find out what made this small website come into life.
+Also poems there, might breathe in more sense of what is being contained within here.<br>
+
+
+<br>("Those who dream by day are cognizant of many things which
+escape those who dream only by night" - Edgar Allen Poe)
+<br><br>
+(What you can do, or dream you can do, begin it; boldness has genius,<br> power and magic in it.
+- Johann von Goethe )
+ <br><br>
+ (
+<a href="http://www.upword.com/wilde/dorgray.html#3" target="_ex"> <font color="black">
+          <br>
+<b>
+The Picture of Dorian Gray     
+by                                                             
+Oscar Wilde
+</b></font>
+</a>
+
+         <br>
+CHAPTER 1 <br>
+The studio was filled with the rich odour of roses, and when the light summer wind stirred amidst the trees of the garden, there came through the open door the heavy scent of the lilac, or the more delicate perfume of the pink-flowering thorn... <br>
+)
+
+<br><br>
+<br><br>
+
+
+
+</p>            
+</td>
+</tr>
+</tbody></table>
+<br>
+
+<!-- Pages Start -->
+<table width="610" border="0" cellspacing="2" cellpadding="10" align="center" bgcolor="#000000">
+
+
+
+<!-- A Walk to Frame Sydney -->
+  <tbody><tr valign="top"> 
+    <td bgcolor="#EDEFBB" rowspan="2"> 
+<pre>SQUEEZED
+IN BETWEEN
+POETRY
+</pre>
+
+<!-- Index-->
+<hr size="2" color="#C57A75">
+<table>
+<tbody><tr>
+<td valign="top" colspan="2" align="center"><p class="gr">18-Aug-2003<br><i>A Walk to Frame Sydney</i></p></td>
+ </tr> 
+<tr>
+<td valign="top" colspan="2"><p class="gr"></p><hr size="2" color="#C57A75"></td>
+</tr>
+<tr>
+
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="vol1.html#twhaul.25062003"><p class="gr8">Swamp Rejoiced Cricket Drum Noise</p></a></td>
+</tr>
+
+<tr>
+<td valign="top" colspan="2" align="center"><p class="gr"> <b>- Volume I -</b></p></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.12112002"><p class="gr8">Facing The River Dream</p></a></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.05112002"><p class="gr8">Just Another Testament</p></a></td>
+</tr>
+<tr><td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.19082002_2"><p class="gr8">Dog Patrol</p></a></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.19082002_1"><p class="gr8">Abstained Melodrama</p></a></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.08092002"><p class="gr8">Cross Eyed</p></a></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.06092002"><p class="gr8">The Flock Trip</p></a></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.03092002"><p class="gr8">Coined System</p></a></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.30082002"><p class="gr8">Sun Stark</p></a></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.27082002"><p class="gr8">The Shaved Nun Tail Rap</p></a></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.24082002"><p class="gr8">Disturbed Kitten</p></a></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.22082002"><p class="gr8">Creation</p></a></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.20082002"><p class="gr8">Troll</p></a></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.10052002"><p class="gr8">Remind Me What I am Not</p></a></td>
+</tr>
+<tr>
+<td valign="top" colspan="2">
+<hr size="2" color="#C57A75">
+<p class="plink"><img src="pix/arrDbl_left.gif" border="0" alt="" align="middle">
+<a href="javascript:history.back()">back</a>
+<img src="pix/arrDbl_top.gif" border="0" alt="" align="middle">
+<a href="#head">top</a>
+</p>
+<p class="gr8" align="center">Poetry of<br> Thourn Whaul<br>  </p> 
+</td>
+</tr><tr>
+<td valign="top" colspan="2">
+<!--
+<hr size="2" color="#C57A75">
+<p class="plink"><img src="arrDbl_left.gif" border=0 alt="" align="middle">
+<a href="javascript:history.back()">back</a>
+<img src="arrDbl_top.gif" border=0 alt="" align="middle">
+<a href="#head">top</a>
+-->
+<p></p>
+</td>
+</tr> 
+</tbody></table>
+<!-- Index End-->
+       </td>
+    <td width="80%" bgcolor="#FAFBD6" valign="center"><a name="twhaul.18082003"></a><p class="pre">A Walk to Frame Sydney</p></td>
+  </tr>
+  <tr valign="top"> 
+    <td bgcolor="#FAFBD6" valign="top"> 
+<pre>Immunised equilibrium riddled the porosity we face
+all downhill now into a carrot grinding better health
+The dealers indeed only ware bravado penguin suites
+"Pick the best as any good book would tell you, Son"!
+But the real book is buried past all distractions
+It takes Dvorak guts and a staccato walk to frame
+To find some answers in the late Goya walls
+"Off you go, find your gay bar translator"
+
+She went, leaving the soup kitchen behind
+Found her book, but had no money left.
+No one saw her and no one knew him
+Till now!
+
+Pumpernickel abused by Rosamunde 
+a sweet-talk worth a waitress
+Everyone was smiling, enjoying 
+amber recall of ghost encounters
+Disfiguring sex of the local priest, 
+politician, decant &amp; moron
+Minding their own business 
+    imitated reads
+Winding pastoral tick-tocks or 
+jail house torments in showers
+Finding Art Deco placebo soup kitchens
+Here, no translator is needed but creed 
+"All for one and all for a jazzy lip job".
+The translator balances the dictaphone
+marching to Bach in a 3 buy 3 rented opera house
+And freedom is permanently parked outside of form 
+for a hobo sap walk saving up for book and cover.
+
+Still, no one wins over Maharaja pigeon dreams
+They keep on reminding those willing some read
+"Relax, look over here, my books make the box
+I'll give you one, but it will crash the nest".
+
+</pre>
+        <p></p>
+       <p>
+       <a href="zebra.mp3">Click here to get the song complimenting this poem</a>
+       </p>
+</td></tr>
+<!-- A Walk to Frame Sydney -->
+
+
+
+<!-- Swamp Rejoiced Cricket Drum Noise -->
+  <tr valign="top"> 
+    <td bgcolor="#EDEFBB" rowspan="2"> 
+<pre>SQUEEZED
+IN BETWEEN
+POETRY
+</pre>
+
+<!-- Index-->
+<hr size="2" color="#C57A75">
+<table>
+<tbody><tr>
+<td valign="top" colspan="2" align="center"><p class="gr">25-Jun-2003<br><i>Swamp Rejoiced Cricket Drum Noise</i></p></td>
+</tr> 
+<tr>
+<td valign="top" colspan="2"><p class="gr"></p><hr size="2" color="#C57A75"></td>
+</tr>
+<tr>
+</tr><tr>
+<td valign="top" colspan="2" align="center"><p class="gr8"> - Volume I -</p></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.12112002"><p class="gr8">Facing The River Dream</p></a></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.05112002"><p class="gr8">Just Another Testament</p></a></td>
+</tr>
+<tr><td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.19082002_2"><p class="gr8">Dog Patrol</p></a></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.19082002_1"><p class="gr8">Abstained Melodrama</p></a></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.08092002"><p class="gr8">Cross Eyed</p></a></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.06092002"><p class="gr8">The Flock Trip</p></a></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.03092002"><p class="gr8">Coined System</p></a></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.30082002"><p class="gr8">Sun Stark</p></a></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.27082002"><p class="gr8">The Shaved Nun Tail Rap</p></a></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.24082002"><p class="gr8">Disturbed Kitten</p></a></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.22082002"><p class="gr8">Creation</p></a></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.20082002"><p class="gr8">Troll</p></a></td>
+</tr>
+<tr>
+<td valign="top"><img src="pix/arrDbl_right.gif" border="0" alt="" align="middle"></td>
+<td><a href="./vol1.html#twhaul.10052002"><p class="gr8">Remind Me What I am Not</p></a></td>
+</tr>
+<tr>
+<td valign="top" colspan="2">
+<hr size="2" color="#C57A75">
+<p class="plink"><img src="pix/arrDbl_left.gif" border="0" alt="" align="middle">
+<a href="javascript:history.back()">back</a>
+<img src="pix/arrDbl_top.gif" border="0" alt="" align="middle">
+<a href="index.html#head">top</a>
+</p>
+<p class="gr8" align="center">Poetry of<br> Thourn Whaul<br>  </p> 
+</td>
+</tr><tr>
+<td valign="top" colspan="2">
+<!--
+<hr size="2" color="#C57A75">
+<p class="plink"><img src="arrDbl_left.gif" border=0 alt="" align="middle">
+<a href="javascript:history.back()">back</a>
+<img src="arrDbl_top.gif" border=0 alt="" align="middle">
+<a href="#head">top</a>
+-->
+<p></p>
+</td>
+</tr> 
+</tbody></table>
+<!-- Index End-->
+       </td>
+    <td width="80%" bgcolor="#FAFBD6" valign="center"><a name="twhaul.25062003"></a><p class="pre">Swamp Rejoiced Cricket Drum Noise</p></td>
+  </tr>
+  <tr valign="top"> 
+    <td bgcolor="#FAFBD6" valign="top"> 
+<pre>In first voice suddenly it takes away
+the cabbage cricket sounds pitch of tear
+a chanson soft it trembles in its play
+just making a hiss silent drums of fear
+
+Never wished to have to fight
+As jewels when once drawn
+pull a sparkle to be matched
+Turn the gravel out be grown
+stand for life's worth's again
+Telling this, out go and fancy 
+From afar recall don't refrain
+Brave in battle brave ardency
+of days past of no known pain
+Telling, brush away the swamps
+Dare go recall to sain sustain
+wishes thrown into hat of punts.
+
+The path was usual but what a finding
+of Solomon riches such unseen, untouched
+Weakness ever now passing to be blinding
+as if to mask protect the carriers might
+bringing spoils in skirtings patched.
+
+Voiceless sitting deep in foliage
+invisible witness, tired valiance
+Hidden behind fem growth of coilage
+watching the secret wild people dance
+Tribe brought some blessings in food
+I've waited for the end of the binge
+Watched for long, lost to horror glued
+near a shrine at the forest fringe. 
+Agenda was about youth coming into age
+for these folk of both gender sacred
+what unfolded edged on outrage
+The lot sung, women's breasts swagged
+calling spirits scaring the encircled
+Dig, dig or we will never end, dig
+with your hands, and most did
+Till a bamboo bundle large unveiled
+an old body placed aside in silence
+Then cries slammed rhythm continued
+as the elders on rot eagerly peeled
+Youth was forced with urine to awake
+a body dry and dirty "don't be thrilled"!
+Most obliged but some for no sake
+just couldn't do it; 'til morn' brake.
+
+A generations cast to the alimony
+left out, eight girls and two lads 
+Near the end of the ceremony 
+left out, to face nightmare alidades
+One of the boys and all the girls 
+succumbed finally to torment frills
+But desperate tribe men lifted spears
+as the last odd one wouldn't budge
+tips cut touching skin, just to smudge
+It would've been a terror gruesome end
+If a loud voice didn't break into echo 
+The whole tribe into silence 
+The whole tribe dropped to their knees.
+The forgotten dead body was now standing
+Risen and pointing making way to the boy
+A boy stubborn, shaking, holding tears
+rejecting reason of forced fait ploy.
+"He shall be the chosen one!"
+You are the next Shaman
+My Apprentice!
+He must marry the eight least girls
+The other boy will be his shadow 
+enemy and friend, successor if failed
+his nature wisdom's challenge coil.
+For good or for worse let us rejoice, 
+let them now be, let them serve
+This our God's wish, our voice
+against the evil peril perve"
+
+As the tribe left a weakness begun
+A bitten target of insect stung
+A body laying hiding from it all
+A body swarmed with reddish adore
+in flakes float of unnoticed spore
+Tried to scream, run out tall
+but to late, no voice, no accord
+poison melting start flesh to dung. 
+Painful, illusive was the effort
+of a ghost crawling out of growth 
+Thinking nothing, going forth
+fighting for survival for life's worth
+getting out, slow steady deport.
+
+Thankful reached the laid blessings
+took first drink on some sweet tea
+Days passed slow, getting better
+feeding on beetles half cooked pea.
+Such discovered
+by the rest of the expedition
+but trust lost at the moment 
+lost even to amend
+For no sake of company 
+No tale ambition, telling
+was a stashed giant diamond 
+wrapped in a Shaman's headband.
+
+</pre>
+<pre>...</pre>
+        <p></p>
+</td></tr>
+<!-- Swamp Rejoiced Cricket Drum Noise End -->
+
+
+
+<!-- Pages End -->
+  <tr valign="middle" align="center"> 
+    <td bgcolor="#EDBD49" colspan="2">
+       <p class="stxt"><b>Copyright � <a href="mailto:viw@nospam.to.excite.com">Thourn Whaul</a>  all rights reserved.</b><br>
+       Feel free to hyper link to this pages and content; however no permission has been given to copy,<br>
+       use or publish any content or style from this website.</p>
+    </td>
+  </tr>
+</tbody></table>
+
+
+</body></html>
\ No newline at end of file
diff --git a/htdocs/cgi-bin/e_vars.pl b/htdocs/cgi-bin/e_vars.pl
new file mode 100644 (file)
index 0000000..6d64e16
--- /dev/null
@@ -0,0 +1,225 @@
+#!/usr/bin/perl\r
+\r
+#################################################################### \r
+#\r
+#      Environmantal Variables (E-Vars)\r
+#      ©2002, PerlScriptsJavaScripts.com\r
+#\r
+#      Requires: Perl5+\r
+#      Created:  January, 2002\r
+#      Author:   John Krinelos\r
+#      Contact:  john@perlscriptsjavascripts.com\r
+#      \r
+#      This script / program is copyright material!\r
+#      \r
+#      Agent for copyright : \r
+#      Gene Volovich\r
+#      Law Partners, \r
+#      140 Queen St. \r
+#      Melbourne\r
+#      Ph. +61 3 9602 2266 \r
+#      gvolovich@lawpartners.com.au\r
+#      http://www.lawpartners.com.au/\r
+#\r
+#################################################################### \r
\r
+#################################################################### \r
+#\r
+# Place this in any cgi-bin CHMOD it to 755 (if UNIX) then call \r
+# it from your browser. Eg. http://www.you.com/cgi-bin/vars.cgi\r
+\r
+$of = qq~<font size="2" face="arial,verdana,helvetica">~;\r
+$cf = qq~</font>~;\r
\r
+my @slocs = qw~\r
+       /usr/sbin/sendmail\r
+       /usr/bin/sendmail\r
+       /sbin/sendmail\r
+       /usr/slib/sendmail\r
+       /usr/lib/sendmail\r
+       /bin/sendmail\r
+       /lib/sendmail\r
+       /slib/sendmail\r
+       /usr/sendmail\r
+       /sendmail\r
+       sendmail\r
+~;\r
+\r
+print qq~Content-type: text/html\r
+\r
+\r
+<html>\r
+<head><title>Enviromental Variables Report. PerlScriptsJavaScripts.com</title></head>\r
+<body bgcolor="#ffffff" alink="#ff0000" link="#ff0000" vlink="#ff0000">\r
+\r
+<center>\r
+$of<b>Enviromental Variables returned by this server. <a href="http://www.perlscriptsjavascripts.com/?evs">A PerlScriptsJavaScripts Product</a></b>$cf\r
+</center>\r
+<br>\r
+<table align="center" border="1" cellpadding="5" cellspacing="0" width="600">\r
+<tr>\r
+<td>$of<b>Variable</b>$cf</td>\r
+<td>$of<b>Value</b>$cf</td>\r
+</tr>\r
+~;\r
+\r
+my @vars = sort(keys(%ENV));\r
+foreach(@vars) {\r
+       $ENV{$_} ||= qq~&nbsp;~;\r
+       print qq~\r
+       <tr>\r
+       <td>$of\$ENV{$_}$cf</td>\r
+       <td>$of$ENV{$_}$cf</td>\r
+       </tr>\r
+       ~;\r
+}\r
+\r
+print qq~\r
+<tr>\r
+<td>$of\$ENV{DOCUMENT_NAME}$cf</td>\r
+<td>$of$ENV{DOCUMENT_NAME} &nbsp;$cf</td>\r
+</tr>\r
+<tr>\r
+<td>$of\$ENV{DOCUMENT_URI}$cf</td>\r
+<td>$of$ENV{DOCUMENT_URI} &nbsp;$cf</td>\r
+</tr>\r
+<tr>\r
+<td>$of\$ENV{LAST_MODIFIED}$cf</td>\r
+<td>$of$ENV{LAST_MODIFIED} &nbsp;$cf</td>\r
+</tr>\r
+<tr>\r
+<td>$of\$ENV{DATE_GMT}$cf</td>\r
+<td>$of$ENV{DATE_GMT} &nbsp;$cf</td>\r
+</tr>\r
+<tr>\r
+<td>$of\$ENV{DATE_LOCAL}$cf</td>\r
+<td>$of$ENV{DATE_LOCAL} &nbsp;$cf</td>\r
+</tr>\r
+<tr>\r
+<td>$of\$ENV{REMOTE_USER}$cf</td>\r
+<td>$of$ENV{REMOTE_USER} This var returns the value of a .ht username$cf</td>\r
+</tr>\r
+</table>\r
+<br>\r
+\r
+<center>\r
+$of<b>Path(s) to Sendmail</b>$cf\r
+</center>\r
+<br>\r
+\r
+<table align="center" border="1" cellpadding="5" cellspacing="0" width="600">\r
+~;\r
+\r
+foreach(@slocs) { \r
+       if(-e $_){\r
+               print qq~\r
+               <tr>\r
+               <td>$of$_$cf</td>\r
+               </tr>\r
+               ~;\r
+       }\r
+} \r
+\r
+print qq~\r
+</table>\r
+<br>\r
+\r
+<center>\r
+$of<b>Additional Information</b>$cf\r
+</center>\r
+<br>\r
+<table align="center" border="1" cellpadding="5" cellspacing="0" width="600">\r
+<tr>\r
+<td>$of<b>Variable</b>$cf</td>\r
+<td>$of<b>Value</b>$cf</td>\r
+<td>$of<b>Description</b>$cf</td>\r
+</tr>\r
+<tr>\r
+<td>$of\$] $cf</td>\r
+<td>$of$]$cf&nbsp;</td>\r
+<td>$of Version of Perl$cf</td>\r
+</tr>\r
+<tr>\r
+<td>$of\$0 $cf</td>\r
+<td>$of$0$cf&nbsp;</td>\r
+<td>$of Script name$cf</td>\r
+</tr>\r
+<tr>\r
+<td>$of\$\$ $cf</td>\r
+<td>$of$$ $cf&nbsp;</td>\r
+<td>$of Process ID$cf</td>\r
+</tr>\r
+<tr>\r
+<td>$of\$^O $cf</td>\r
+<td>$of$^O $cf&nbsp;</td>\r
+<td>$of Operating System$cf</td>\r
+</tr>\r
+<tr>\r
+<td>$of\$! $cf</td>\r
+<td>$of$!$cf&nbsp;</td>\r
+<td>$of<a href="javascript:alert('If the error says No such file or directory, it is because this script tries to guess the location of sendmail.')">Error returned by server</a>$cf</td>\r
+</tr>\r
+</table>\r
+<br>\r
+\r
+<center>\r
+$of<a href="javascript:alert('This is the complete list of standard modules contained in \@INC. \\n\\nClick on the module name to search for it\\'s documentation in the Cpan.org website')"><b>List of Modules Installed on this server</b></a>$cf\r
+</center>\r
+<br>\r
+<table align="center" border="1" cellpadding="5" cellspacing="0" width="600">\r
+<tr>\r
+<td>$of<b>Name</b>$cf</td>\r
+<td>$of<b>Name</b>$cf</td>\r
+</tr>\r
+<tr>\r
+<td>\r
+~;\r
+\r
+find(\&wanted, @INC);\r
+\r
+@found = sort { uc($a) cmp uc($b) } @found;\r
+\r
+for($c = 0; $c < int(@found / 2); $c++){\r
+       $search = $found[$c];\r
+       $search =~ s/\.pm$//i;\r
+       print qq~$of <a href="http://search.cpan.org/search?mode=module&query=$search">$found[$c]</a> <br>\n~;\r
+}\r
+\r
+print qq~$cf</td><td>~;\r
+\r
+for($d = $c; $d < @found; $d++){\r
+       $search = $found[$d];\r
+       $search =~ s/\.pm$//i;\r
+       print qq~$of <a href="http://search.cpan.org/search?mode=module&query=$search">$found[$d]</a><br>\n~;\r
+}\r
+\r
+($sec, $min, $hour, $day, $mon, $year, $weekday, $dayofyear, $dst) = localtime(time);\r
+\r
+$year += 1900;\r
+\r
+print qq~$cf</td></tr>\r
+</table>\r
+<br>\r
+<center>\r
+$of <a href="http://www.perlscriptsjavascripts.com/?evs"><b>Copyright $year PerlScriptsJavaScripts.com</b></a>$cf \r
+</center>\r
+<br>\r
+</body>\r
+</html>\r
+~;\r
+\r
+sub wanted {\r
+       use File::Find;\r
+       $num = 0;       \r
+       if ($File::Find::name =~ /\.pm$/){\r
+               if(open(M,$File::Find::name)){\r
+                       while(<M>){\r
+                               if (/^ *package +(\S+);/){\r
+                                       push (@found, $1);\r
+                                       last;\r
+                               }\r
+                       }\r
+                       chomp(@found);\r
+               }\r
+       }\r
+}\r
diff --git a/htdocs/cgi-bin/env.html b/htdocs/cgi-bin/env.html
new file mode 100644 (file)
index 0000000..99c4fd0
--- /dev/null
@@ -0,0 +1,2913 @@
+Content-type: text/html
+
+
+<html>
+<head><title>Enviromental Variables Report. PerlScriptsJavaScripts.com</title></head>
+<body bgcolor="#ffffff" alink="#ff0000" link="#ff0000" vlink="#ff0000">
+
+<center>
+<font size="2" face="arial,verdana,helvetica"><b>Enviromental Variables returned by this server. <a href="http://www.perlscriptsjavascripts.com/?evs">A PerlScriptsJavaScripts Product</a></b></font>
+</center>
+<br>
+<table align="center" border="1" cellpadding="5" cellspacing="0" width="600">
+<tr>
+<td><font size="2" face="arial,verdana,helvetica"><b>Variable</b></font></td>
+<td><font size="2" face="arial,verdana,helvetica"><b>Value</b></font></td>
+</tr>
+
+       <tr>
+       <td><font size="2" face="arial,verdana,helvetica">$ENV{HOME}</font></td>
+       <td><font size="2" face="arial,verdana,helvetica">/home/will</font></td>
+       </tr>
+       
+       <tr>
+       <td><font size="2" face="arial,verdana,helvetica">$ENV{LANG}</font></td>
+       <td><font size="2" face="arial,verdana,helvetica">en_AU.UTF-8</font></td>
+       </tr>
+       
+       <tr>
+       <td><font size="2" face="arial,verdana,helvetica">$ENV{LANGUAGE}</font></td>
+       <td><font size="2" face="arial,verdana,helvetica">en_AU:en</font></td>
+       </tr>
+       
+       <tr>
+       <td><font size="2" face="arial,verdana,helvetica">$ENV{LESSCLOSE}</font></td>
+       <td><font size="2" face="arial,verdana,helvetica">/usr/bin/lesspipe %s %s</font></td>
+       </tr>
+       
+       <tr>
+       <td><font size="2" face="arial,verdana,helvetica">$ENV{LESSOPEN}</font></td>
+       <td><font size="2" face="arial,verdana,helvetica">| /usr/bin/lesspipe %s</font></td>
+       </tr>
+       
+       <tr>
+       <td><font size="2" face="arial,verdana,helvetica">$ENV{LOGNAME}</font></td>
+       <td><font size="2" face="arial,verdana,helvetica">will</font></td>
+       </tr>
+       
+       <tr>
+       <td><font size="2" face="arial,verdana,helvetica">$ENV{LS_COLORS}</font></td>
+       <td><font size="2" face="arial,verdana,helvetica">rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:</font></td>
+       </tr>
+       
+       <tr>
+       <td><font size="2" face="arial,verdana,helvetica">$ENV{MAIL}</font></td>
+       <td><font size="2" face="arial,verdana,helvetica">/var/mail/will</font></td>
+       </tr>
+       
+       <tr>
+       <td><font size="2" face="arial,verdana,helvetica">$ENV{NODE_PATH}</font></td>
+       <td><font size="2" face="arial,verdana,helvetica">/usr/lib/nodejs:/usr/lib/node_modules:/usr/share/javascript</font></td>
+       </tr>
+       
+       <tr>
+       <td><font size="2" face="arial,verdana,helvetica">$ENV{OLDPWD}</font></td>
+       <td><font size="2" face="arial,verdana,helvetica">/home/will/thttpd_dev/htdocs</font></td>
+       </tr>
+       
+       <tr>
+       <td><font size="2" face="arial,verdana,helvetica">$ENV{PATH}</font></td>
+       <td><font size="2" face="arial,verdana,helvetica">/home/will/bin:/home/will/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/local/go/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games</font></td>
+       </tr>
+       
+       <tr>
+       <td><font size="2" face="arial,verdana,helvetica">$ENV{PWD}</font></td>
+       <td><font size="2" face="arial,verdana,helvetica">/home/will/thttpd_dev/htdocs/cgi-bin</font></td>
+       </tr>
+       
+       <tr>
+       <td><font size="2" face="arial,verdana,helvetica">$ENV{SHELL}</font></td>
+       <td><font size="2" face="arial,verdana,helvetica">/bin/bash</font></td>
+       </tr>
+       
+       <tr>
+       <td><font size="2" face="arial,verdana,helvetica">$ENV{SHLVL}</font></td>
+       <td><font size="2" face="arial,verdana,helvetica">2</font></td>
+       </tr>
+       
+       <tr>
+       <td><font size="2" face="arial,verdana,helvetica">$ENV{SSH_CLIENT}</font></td>
+       <td><font size="2" face="arial,verdana,helvetica">192.168.0.3 46970 22</font></td>
+       </tr>
+       
+       <tr>
+       <td><font size="2" face="arial,verdana,helvetica">$ENV{SSH_CONNECTION}</font></td>
+       <td><font size="2" face="arial,verdana,helvetica">192.168.0.3 46970 192.168.0.16 22</font></td>
+       </tr>
+       
+       <tr>
+       <td><font size="2" face="arial,verdana,helvetica">$ENV{SSH_TTY}</font></td>
+       <td><font size="2" face="arial,verdana,helvetica">/dev/pts/0</font></td>
+       </tr>
+       
+       <tr>
+       <td><font size="2" face="arial,verdana,helvetica">$ENV{STY}</font></td>
+       <td><font size="2" face="arial,verdana,helvetica">2730.NET</font></td>
+       </tr>
+       
+       <tr>
+       <td><font size="2" face="arial,verdana,helvetica">$ENV{TERM}</font></td>
+       <td><font size="2" face="arial,verdana,helvetica">screen</font></td>
+       </tr>
+       
+       <tr>
+       <td><font size="2" face="arial,verdana,helvetica">$ENV{TERMCAP}</font></td>
+       <td><font size="2" face="arial,verdana,helvetica">SC|screen|VT 100/ANSI X3.64 virtual terminal:\
+       :DO=\E[%dB:LE=\E[%dD:RI=\E[%dC:UP=\E[%dA:bs:bt=\E[Z:\
+       :cd=\E[J:ce=\E[K:cl=\E[H\E[J:cm=\E[%i%d;%dH:ct=\E[3g:\
+       :do=^J:nd=\E[C:pt:rc=\E8:rs=\Ec:sc=\E7:st=\EH:up=\EM:\
+       :le=^H:bl=^G:cr=^M:it#8:ho=\E[H:nw=\EE:ta=^I:is=\E)0:\
+       :li#35:co#103:am:xn:xv:LP:sr=\EM:al=\E[L:AL=\E[%dL:\
+       :cs=\E[%i%d;%dr:dl=\E[M:DL=\E[%dM:dc=\E[P:DC=\E[%dP:\
+       :im=\E[4h:ei=\E[4l:mi:IC=\E[%d@:ks=\E[?1h\E=:\
+       :ke=\E[?1l\E>:vi=\E[?25l:ve=\E[34h\E[?25h:vs=\E[34l:\
+       :ti=\E[?1049h:te=\E[?1049l:us=\E[4m:ue=\E[24m:so=\E[3m:\
+       :se=\E[23m:mb=\E[5m:md=\E[1m:mh=\E[2m:mr=\E[7m:\
+       :me=\E[m:ms:\
+       :Co#8:pa#64:AF=\E[3%dm:AB=\E[4%dm:op=\E[39;49m:AX:\
+       :vb=\Eg:G0:as=\E(0:ae=\E(B:\
+       :ac=\140\140aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~..--++,,hhII00:\
+       :po=\E[5i:pf=\E[4i:Km=\E[M:k0=\E[10~:k1=\EOP:k2=\EOQ:\
+       :k3=\EOR:k4=\EOS:k5=\E[15~:k6=\E[17~:k7=\E[18~:\
+       :k8=\E[19~:k9=\E[20~:k;=\E[21~:F1=\E[23~:F2=\E[24~:\
+       :F3=\E[1;2P:F4=\E[1;2Q:F5=\E[1;2R:F6=\E[1;2S:\
+       :F7=\E[15;2~:F8=\E[17;2~:F9=\E[18;2~:FA=\E[19;2~:kb=\7f:\
+       :K2=\EOE:kB=\E[Z:kF=\E[1;2B:kR=\E[1;2A:*4=\E[3;2~:\
+       :*7=\E[1;2F:#2=\E[1;2H:#3=\E[2;2~:#4=\E[1;2D:%c=\E[6;2~:\
+       :%e=\E[5;2~:%i=\E[1;2C:kh=\E[1~:@1=\E[1~:kH=\E[4~:\
+       :@7=\E[4~:kN=\E[6~:kP=\E[5~:kI=\E[2~:kD=\E[3~:ku=\EOA:\
+       :kd=\EOB:kr=\EOC:kl=\EOD:km:</font></td>
+       </tr>
+       
+       <tr>
+       <td><font size="2" face="arial,verdana,helvetica">$ENV{USER}</font></td>
+       <td><font size="2" face="arial,verdana,helvetica">will</font></td>
+       </tr>
+       
+       <tr>
+       <td><font size="2" face="arial,verdana,helvetica">$ENV{WINDOW}</font></td>
+       <td><font size="2" face="arial,verdana,helvetica">1</font></td>
+       </tr>
+       
+       <tr>
+       <td><font size="2" face="arial,verdana,helvetica">$ENV{XDG_DATA_DIRS}</font></td>
+       <td><font size="2" face="arial,verdana,helvetica">/home/will/.local/share/flatpak/exports/share:/var/lib/flatpak/exports/share:/usr/local/share:/usr/share</font></td>
+       </tr>
+       
+       <tr>
+       <td><font size="2" face="arial,verdana,helvetica">$ENV{XDG_RUNTIME_DIR}</font></td>
+       <td><font size="2" face="arial,verdana,helvetica">/run/user/1000</font></td>
+       </tr>
+       
+       <tr>
+       <td><font size="2" face="arial,verdana,helvetica">$ENV{XDG_SESSION_COOKIE}</font></td>
+       <td><font size="2" face="arial,verdana,helvetica">f1285b673e054311b158f354c6c52198-1551346125.854829-475566251</font></td>
+       </tr>
+       
+       <tr>
+       <td><font size="2" face="arial,verdana,helvetica">$ENV{XDG_SESSION_ID}</font></td>
+       <td><font size="2" face="arial,verdana,helvetica">1</font></td>
+       </tr>
+       
+       <tr>
+       <td><font size="2" face="arial,verdana,helvetica">$ENV{_}</font></td>
+       <td><font size="2" face="arial,verdana,helvetica">/usr/bin/perl</font></td>
+       </tr>
+       
+<tr>
+<td><font size="2" face="arial,verdana,helvetica">$ENV{DOCUMENT_NAME}</font></td>
+<td><font size="2" face="arial,verdana,helvetica"> &nbsp;</font></td>
+</tr>
+<tr>
+<td><font size="2" face="arial,verdana,helvetica">$ENV{DOCUMENT_URI}</font></td>
+<td><font size="2" face="arial,verdana,helvetica"> &nbsp;</font></td>
+</tr>
+<tr>
+<td><font size="2" face="arial,verdana,helvetica">$ENV{LAST_MODIFIED}</font></td>
+<td><font size="2" face="arial,verdana,helvetica"> &nbsp;</font></td>
+</tr>
+<tr>
+<td><font size="2" face="arial,verdana,helvetica">$ENV{DATE_GMT}</font></td>
+<td><font size="2" face="arial,verdana,helvetica"> &nbsp;</font></td>
+</tr>
+<tr>
+<td><font size="2" face="arial,verdana,helvetica">$ENV{DATE_LOCAL}</font></td>
+<td><font size="2" face="arial,verdana,helvetica"> &nbsp;</font></td>
+</tr>
+<tr>
+<td><font size="2" face="arial,verdana,helvetica">$ENV{REMOTE_USER}</font></td>
+<td><font size="2" face="arial,verdana,helvetica"> This var returns the value of a .ht username</font></td>
+</tr>
+</table>
+<br>
+
+<center>
+<font size="2" face="arial,verdana,helvetica"><b>Path(s) to Sendmail</b></font>
+</center>
+<br>
+
+<table align="center" border="1" cellpadding="5" cellspacing="0" width="600">
+
+               <tr>
+               <td><font size="2" face="arial,verdana,helvetica">/usr/sbin/sendmail</font></td>
+               </tr>
+               
+               <tr>
+               <td><font size="2" face="arial,verdana,helvetica">/usr/lib/sendmail</font></td>
+               </tr>
+               
+</table>
+<br>
+
+<center>
+<font size="2" face="arial,verdana,helvetica"><b>Additional Information</b></font>
+</center>
+<br>
+<table align="center" border="1" cellpadding="5" cellspacing="0" width="600">
+<tr>
+<td><font size="2" face="arial,verdana,helvetica"><b>Variable</b></font></td>
+<td><font size="2" face="arial,verdana,helvetica"><b>Value</b></font></td>
+<td><font size="2" face="arial,verdana,helvetica"><b>Description</b></font></td>
+</tr>
+<tr>
+<td><font size="2" face="arial,verdana,helvetica">$] </font></td>
+<td><font size="2" face="arial,verdana,helvetica">5.022001</font>&nbsp;</td>
+<td><font size="2" face="arial,verdana,helvetica"> Version of Perl</font></td>
+</tr>
+<tr>
+<td><font size="2" face="arial,verdana,helvetica">$0 </font></td>
+<td><font size="2" face="arial,verdana,helvetica">e_vars.pl</font>&nbsp;</td>
+<td><font size="2" face="arial,verdana,helvetica"> Script name</font></td>
+</tr>
+<tr>
+<td><font size="2" face="arial,verdana,helvetica">$$ </font></td>
+<td><font size="2" face="arial,verdana,helvetica">14611 </font>&nbsp;</td>
+<td><font size="2" face="arial,verdana,helvetica"> Process ID</font></td>
+</tr>
+<tr>
+<td><font size="2" face="arial,verdana,helvetica">$^O </font></td>
+<td><font size="2" face="arial,verdana,helvetica">linux </font>&nbsp;</td>
+<td><font size="2" face="arial,verdana,helvetica"> Operating System</font></td>
+</tr>
+<tr>
+<td><font size="2" face="arial,verdana,helvetica">$! </font></td>
+<td><font size="2" face="arial,verdana,helvetica">No such file or directory</font>&nbsp;</td>
+<td><font size="2" face="arial,verdana,helvetica"><a href="javascript:alert('If the error says No such file or directory, it is because this script tries to guess the location of sendmail.')">Error returned by server</a></font></td>
+</tr>
+</table>
+<br>
+
+<center>
+<font size="2" face="arial,verdana,helvetica"><a href="javascript:alert('This is the complete list of standard modules contained in @INC. \n\nClick on the module name to search for it\'s documentation in the Cpan.org website')"><b>List of Modules Installed on this server</b></a></font>
+</center>
+<br>
+<table align="center" border="1" cellpadding="5" cellspacing="0" width="600">
+<tr>
+<td><font size="2" face="arial,verdana,helvetica"><b>Name</b></font></td>
+<td><font size="2" face="arial,verdana,helvetica"><b>Name</b></font></td>
+</tr>
+<tr>
+<td>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Algorithm::Diff">Algorithm::Diff</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Algorithm::FastPermute">Algorithm::FastPermute</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=aliased">aliased</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=App::cpanminus">App::cpanminus</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=App::cpanminus::fatscript">App::cpanminus::fatscript</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=AptPkg">AptPkg</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=AptPkg::Cache">AptPkg::Cache</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=AptPkg::Config">AptPkg::Config</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=AptPkg::hash">AptPkg::hash</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=AptPkg::PkgRecords">AptPkg::PkgRecords</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=AptPkg::Policy">AptPkg::Policy</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=AptPkg::Source">AptPkg::Source</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=AptPkg::System">AptPkg::System</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=AptPkg::Version">AptPkg::Version</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Archive::Zip">Archive::Zip</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Archive::Zip::Archive">Archive::Zip::Archive</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Archive::Zip::BufferedFileHandle">Archive::Zip::BufferedFileHandle</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Archive::Zip::DirectoryMember">Archive::Zip::DirectoryMember</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Archive::Zip::FileMember">Archive::Zip::FileMember</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Archive::Zip::Member">Archive::Zip::Member</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Archive::Zip::MemberRead">Archive::Zip::MemberRead</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Archive::Zip::MockFileHandle">Archive::Zip::MockFileHandle</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Archive::Zip::NewFileMember">Archive::Zip::NewFileMember</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Archive::Zip::StringMember">Archive::Zip::StringMember</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Archive::Zip::Tree">Archive::Zip::Tree</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Archive::Zip::ZipFileMember">Archive::Zip::ZipFileMember</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Array::Compare">Array::Compare</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=attributes">attributes</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Authen::PAM">Authen::PAM</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Authen::SASL">Authen::SASL</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Authen::SASL::CRAM_MD5">Authen::SASL::CRAM_MD5</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Authen::SASL::EXTERNAL">Authen::SASL::EXTERNAL</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Authen::SASL::Perl">Authen::SASL::Perl</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Authen::SASL::Perl::ANONYMOUS">Authen::SASL::Perl::ANONYMOUS</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Authen::SASL::Perl::CRAM_MD5">Authen::SASL::Perl::CRAM_MD5</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Authen::SASL::Perl::DIGEST_MD5">Authen::SASL::Perl::DIGEST_MD5</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Authen::SASL::Perl::EXTERNAL">Authen::SASL::Perl::EXTERNAL</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Authen::SASL::Perl::GSSAPI">Authen::SASL::Perl::GSSAPI</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Authen::SASL::Perl::LOGIN">Authen::SASL::Perl::LOGIN</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Authen::SASL::Perl::PLAIN">Authen::SASL::Perl::PLAIN</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=autodie">autodie</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=autodie::exception">autodie::exception</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=autodie::exception::system">autodie::exception::system</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=autodie::hints">autodie::hints</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=autodie::Scope::Guard">autodie::Scope::Guard</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=autodie::Scope::GuardStack">autodie::Scope::GuardStack</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=autodie::skip">autodie::skip</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=autodie::Util">autodie::Util</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=AutoLoader">AutoLoader</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=B::Hooks::EndOfScope">B::Hooks::EndOfScope</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=B::Hooks::EndOfScope::PP">B::Hooks::EndOfScope::PP</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=B::Hooks::EndOfScope::XS">B::Hooks::EndOfScope::XS</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=B::Hooks::OP::Check">B::Hooks::OP::Check</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=B::Hooks::OP::Check::Install::Files">B::Hooks::OP::Check::Install::Files</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=B::Hooks::OP::PPAddr">B::Hooks::OP::PPAddr</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=B::Hooks::OP::PPAddr::Install::Files">B::Hooks::OP::PPAddr::Install::Files</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=base">base</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Bundle::DBD::Pg">Bundle::DBD::Pg</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Bundle::DBI">Bundle::DBI</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Bundle::DBI">Bundle::DBI</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=bytes">bytes</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Cache::BaseCache">Cache::BaseCache</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Cache::BaseCacheTester">Cache::BaseCacheTester</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Cache::Cache">Cache::Cache</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Cache::CacheMetaData">Cache::CacheMetaData</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Cache::CacheSizer">Cache::CacheSizer</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Cache::CacheTester">Cache::CacheTester</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Cache::CacheUtils">Cache::CacheUtils</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Cache::FileBackend">Cache::FileBackend</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Cache::FileCache">Cache::FileCache</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Cache::MemoryBackend">Cache::MemoryBackend</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Cache::MemoryCache">Cache::MemoryCache</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Cache::NullCache">Cache::NullCache</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Cache::Object">Cache::Object</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Cache::SharedMemoryBackend">Cache::SharedMemoryBackend</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Cache::SharedMemoryCache">Cache::SharedMemoryCache</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Cache::SizeAwareCache">Cache::SizeAwareCache</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Cache::SizeAwareCacheTester">Cache::SizeAwareCacheTester</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Cache::SizeAwareFileCache">Cache::SizeAwareFileCache</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Cache::SizeAwareMemoryCache">Cache::SizeAwareMemoryCache</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Cache::SizeAwareSharedMemoryCache">Cache::SizeAwareSharedMemoryCache</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Cairo">Cairo</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Cairo::Install::Files">Cairo::Install::Files</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Capture::Tiny">Capture::Tiny</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Carp">Carp</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Carp::Clan">Carp::Clan</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Carp::Heavy">Carp::Heavy</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=CGI">CGI</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=CGI::Carp">CGI::Carp</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=CGI::Cookie">CGI::Cookie</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=CGI::File::Temp">CGI::File::Temp</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=CGI::HTML::Functions">CGI::HTML::Functions</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=CGI::Pretty">CGI::Pretty</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=CGI::Push">CGI::Push</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=CGI::Session">CGI::Session</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=CGI::Session::Driver">CGI::Session::Driver</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=CGI::Session::Driver::DBI">CGI::Session::Driver::DBI</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=CGI::Session::Driver::db_file">CGI::Session::Driver::db_file</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=CGI::Session::Driver::file">CGI::Session::Driver::file</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=CGI::Session::Driver::mysql">CGI::Session::Driver::mysql</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=CGI::Session::Driver::postgresql">CGI::Session::Driver::postgresql</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=CGI::Session::Driver::sqlite">CGI::Session::Driver::sqlite</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=CGI::Session::ErrorHandler">CGI::Session::ErrorHandler</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=CGI::Session::ID::incr">CGI::Session::ID::incr</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=CGI::Session::ID::md5">CGI::Session::ID::md5</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=CGI::Session::ID::static">CGI::Session::ID::static</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=CGI::Session::Serialize::default">CGI::Session::Serialize::default</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=CGI::Session::Serialize::freezethaw">CGI::Session::Serialize::freezethaw</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=CGI::Session::Serialize::storable">CGI::Session::Serialize::storable</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=CGI::Session::Test::Default">CGI::Session::Test::Default</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=CGI::Session::Tutorial">CGI::Session::Tutorial</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=CGI::Util">CGI::Util</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=charstar">charstar</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Class::Accessor">Class::Accessor</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Class::Accessor::Fast">Class::Accessor::Fast</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Class::Accessor::Faster">Class::Accessor::Faster</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Class::Data::Inheritable">Class::Data::Inheritable</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Class::Factory::Util">Class::Factory::Util</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Class::Inspector">Class::Inspector</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Class::Inspector::Functions">Class::Inspector::Functions</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Class::Load">Class::Load</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Class::Load::PP">Class::Load::PP</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Class::Load::XS">Class::Load::XS</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Class::Method::Modifiers">Class::Method::Modifiers</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Class::MOP">Class::MOP</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Class::MOP::Attribute">Class::MOP::Attribute</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Class::MOP::Class">Class::MOP::Class</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Class::MOP::Class::Immutable::Trait">Class::MOP::Class::Immutable::Trait</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Class::MOP::Deprecated">Class::MOP::Deprecated</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Class::MOP::Instance">Class::MOP::Instance</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Class::MOP::Method">Class::MOP::Method</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Class::MOP::Method::Accessor">Class::MOP::Method::Accessor</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Class::MOP::Method::Constructor">Class::MOP::Method::Constructor</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Class::MOP::Method::Generated">Class::MOP::Method::Generated</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Class::MOP::Method::Inlined">Class::MOP::Method::Inlined</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Class::MOP::Method::Meta">Class::MOP::Method::Meta</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Class::MOP::Method::Wrapped">Class::MOP::Method::Wrapped</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Class::MOP::MiniTrait">Class::MOP::MiniTrait</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Class::MOP::Mixin">Class::MOP::Mixin</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Class::MOP::Mixin::AttributeCore">Class::MOP::Mixin::AttributeCore</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Class::MOP::Mixin::HasAttributes">Class::MOP::Mixin::HasAttributes</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Class::MOP::Mixin::HasMethods">Class::MOP::Mixin::HasMethods</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Class::MOP::Mixin::HasOverloads">Class::MOP::Mixin::HasOverloads</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Class::MOP::Module">Class::MOP::Module</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Class::MOP::Object">Class::MOP::Object</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Class::MOP::Overload">Class::MOP::Overload</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Class::MOP::Package">Class::MOP::Package</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Class::Singleton">Class::Singleton</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Class::Tiny">Class::Tiny</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Class::XSAccessor">Class::XSAccessor</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Class::XSAccessor::Array">Class::XSAccessor::Array</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Clone">Clone</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Config">Config</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Config::Simple">Config::Simple</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=constant">constant</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Convert::Number::Coptic">Convert::Number::Coptic</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=CPAN::DistnameInfo">CPAN::DistnameInfo</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=CPAN::Meta">CPAN::Meta</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=CPAN::Meta::Check">CPAN::Meta::Check</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=CPAN::Meta::Check">CPAN::Meta::Check</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=CPAN::Meta::Converter">CPAN::Meta::Converter</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=CPAN::Meta::Feature">CPAN::Meta::Feature</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=CPAN::Meta::History">CPAN::Meta::History</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=CPAN::Meta::Merge">CPAN::Meta::Merge</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=CPAN::Meta::Prereqs">CPAN::Meta::Prereqs</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=CPAN::Meta::Requirements">CPAN::Meta::Requirements</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=CPAN::Meta::Spec">CPAN::Meta::Spec</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=CPAN::Meta::Validator">CPAN::Meta::Validator</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=CPAN::Meta::YAML">CPAN::Meta::YAML</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Crypt::PasswdMD5">Crypt::PasswdMD5</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Cwd">Cwd</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Cwd::Guard">Cwd::Guard</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Data::Alias">Data::Alias</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Data::OptList">Data::OptList</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Date::Format">Date::Format</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Date::Hijri">Date::Hijri</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Date::Language">Date::Language</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Date::Language::Afar">Date::Language::Afar</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Date::Language::Amharic">Date::Language::Amharic</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Date::Language::Austrian">Date::Language::Austrian</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Date::Language::Brazilian">Date::Language::Brazilian</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Date::Language::Bulgarian">Date::Language::Bulgarian</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Date::Language::Chinese">Date::Language::Chinese</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Date::Language::Chinese_GB">Date::Language::Chinese_GB</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Date::Language::Czech">Date::Language::Czech</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Date::Language::Danish">Date::Language::Danish</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Date::Language::Dutch">Date::Language::Dutch</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Date::Language::English">Date::Language::English</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Date::Language::Finnish">Date::Language::Finnish</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Date::Language::French">Date::Language::French</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Date::Language::Gedeo">Date::Language::Gedeo</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Date::Language::German">Date::Language::German</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Date::Language::Greek">Date::Language::Greek</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Date::Language::Hungarian">Date::Language::Hungarian</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Date::Language::Icelandic">Date::Language::Icelandic</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Date::Language::Italian">Date::Language::Italian</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Date::Language::Norwegian">Date::Language::Norwegian</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Date::Language::Oromo">Date::Language::Oromo</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Date::Language::Romanian">Date::Language::Romanian</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Date::Language::Russian">Date::Language::Russian</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Date::Language::Russian_cp1251">Date::Language::Russian_cp1251</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Date::Language::Russian_koi8r">Date::Language::Russian_koi8r</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Date::Language::Sidama">Date::Language::Sidama</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Date::Language::Somali">Date::Language::Somali</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Date::Language::Spanish">Date::Language::Spanish</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Date::Language::Swedish">Date::Language::Swedish</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Date::Language::Tigrinya">Date::Language::Tigrinya</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Date::Language::TigrinyaEritrean">Date::Language::TigrinyaEritrean</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Date::Language::TigrinyaEthiopian">Date::Language::TigrinyaEthiopian</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Date::Language::Turkish">Date::Language::Turkish</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Date::Manip">Date::Manip</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Date::Manip::Base">Date::Manip::Base</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Date::Manip::Date">Date::Manip::Date</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Date::Manip::Delta">Date::Manip::Delta</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Date::Manip::DM5">Date::Manip::DM5</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Date::Manip::DM5abbrevs">Date::Manip::DM5abbrevs</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Date::Manip::DM6">Date::Manip::DM6</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Date::Manip::Lang::catalan">Date::Manip::Lang::catalan</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Date::Manip::Lang::danish">Date::Manip::Lang::danish</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Date::Manip::Lang::dutch">Date::Manip::Lang::dutch</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Date::Manip::Lang::english">Date::Manip::Lang::english</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Date::Manip::Lang::finnish">Date::Manip::Lang::finnish</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Date::Manip::Lang::french">Date::Manip::Lang::french</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Date::Manip::Lang::german">Date::Manip::Lang::german</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Date::Manip::Lang::index">Date::Manip::Lang::index</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Date::Manip::Lang::italian">Date::Manip::Lang::italian</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Date::Manip::Lang::norwegian">Date::Manip::Lang::norwegian</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Date::Manip::Lang::polish">Date::Manip::Lang::polish</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Date::Manip::Lang::portugue">Date::Manip::Lang::portugue</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Date::Manip::Lang::romanian">Date::Manip::Lang::romanian</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Date::Manip::Lang::russian">Date::Manip::Lang::russian</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Date::Manip::Lang::spanish">Date::Manip::Lang::spanish</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Date::Manip::Lang::swedish">Date::Manip::Lang::swedish</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Date::Manip::Lang::turkish">Date::Manip::Lang::turkish</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Date::Manip::Obj">Date::Manip::Obj</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Date::Manip::Recur">Date::Manip::Recur</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Date::Manip::TZ">Date::Manip::TZ</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Date::Manip::TZdata">Date::Manip::TZdata</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Date::Manip::TZ_Base">Date::Manip::TZ_Base</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Date::Manip::Zones">Date::Manip::Zones</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Date::Parse">Date::Parse</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Date::Tolkien::Shire::Data">Date::Tolkien::Shire::Data</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime">DateTime</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::Calendar::Christian">DateTime::Calendar::Christian</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::Calendar::Coptic">DateTime::Calendar::Coptic</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::Calendar::Coptic::Language">DateTime::Calendar::Coptic::Language</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::Calendar::Coptic::Language::Arabic">DateTime::Calendar::Coptic::Language::Arabic</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::Calendar::Coptic::Language::Coptic">DateTime::Calendar::Coptic::Language::Coptic</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::Calendar::Coptic::Language::English">DateTime::Calendar::Coptic::Language::English</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::Calendar::CopticEthiopic">DateTime::Calendar::CopticEthiopic</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::Calendar::Discordian">DateTime::Calendar::Discordian</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::Calendar::FrenchRevolutionary">DateTime::Calendar::FrenchRevolutionary</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::Calendar::FrenchRevolutionary::Locale">DateTime::Calendar::FrenchRevolutionary::Locale</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::Calendar::FrenchRevolutionary::Locale::en">DateTime::Calendar::FrenchRevolutionary::Locale::en</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::Calendar::FrenchRevolutionary::Locale::fr">DateTime::Calendar::FrenchRevolutionary::Locale::fr</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::Calendar::Hebrew">DateTime::Calendar::Hebrew</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::Calendar::Hijri">DateTime::Calendar::Hijri</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::Calendar::Japanese::Era">DateTime::Calendar::Japanese::Era</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::Calendar::Julian">DateTime::Calendar::Julian</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::Calendar::Mayan">DateTime::Calendar::Mayan</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::Calendar::Pataphysical">DateTime::Calendar::Pataphysical</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::Duration">DateTime::Duration</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::Event::Cron">DateTime::Event::Cron</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::Event::Easter">DateTime::Event::Easter</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::Event::ICal">DateTime::Event::ICal</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::Event::Random">DateTime::Event::Random</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::Event::Sunrise">DateTime::Event::Sunrise</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::Fiction::JRRTolkien::Shire">DateTime::Fiction::JRRTolkien::Shire</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::Fiction::JRRTolkien::Shire::Duration">DateTime::Fiction::JRRTolkien::Shire::Duration</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::Fiction::JRRTolkien::Shire::Types">DateTime::Fiction::JRRTolkien::Shire::Types</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::Fiscal::Year">DateTime::Fiscal::Year</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::Format::Baby">DateTime::Format::Baby</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::Format::Bork">DateTime::Format::Bork</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::Format::Builder">DateTime::Format::Builder</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::Format::Builder::Parser">DateTime::Format::Builder::Parser</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::Format::Builder::Parser::Dispatch">DateTime::Format::Builder::Parser::Dispatch</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::Format::Builder::Parser::generic">DateTime::Format::Builder::Parser::generic</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::Format::Builder::Parser::Quick">DateTime::Format::Builder::Parser::Quick</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::Format::Builder::Parser::Regex">DateTime::Format::Builder::Parser::Regex</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::Format::Builder::Parser::Strptime">DateTime::Format::Builder::Parser::Strptime</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::Format::DateManip">DateTime::Format::DateManip</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::Format::DateParse">DateTime::Format::DateParse</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::Format::DB2">DateTime::Format::DB2</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::Format::DBI">DateTime::Format::DBI</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::Format::Duration">DateTime::Format::Duration</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::Format::Epoch">DateTime::Format::Epoch</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::Format::Epoch::ActiveDirectory">DateTime::Format::Epoch::ActiveDirectory</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::Format::Epoch::DotNet">DateTime::Format::Epoch::DotNet</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::Format::Epoch::JD">DateTime::Format::Epoch::JD</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::Format::Epoch::Lilian">DateTime::Format::Epoch::Lilian</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::Format::Epoch::MacOS">DateTime::Format::Epoch::MacOS</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::Format::Epoch::MJD">DateTime::Format::Epoch::MJD</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::Format::Epoch::NTP">DateTime::Format::Epoch::NTP</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::Format::Epoch::RataDie">DateTime::Format::Epoch::RataDie</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::Format::Epoch::RJD">DateTime::Format::Epoch::RJD</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::Format::Epoch::TAI64">DateTime::Format::Epoch::TAI64</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::Format::Epoch::TJD">DateTime::Format::Epoch::TJD</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::Format::Epoch::Unix">DateTime::Format::Epoch::Unix</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::Format::Excel">DateTime::Format::Excel</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::Format::HTTP">DateTime::Format::HTTP</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::Format::Human">DateTime::Format::Human</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::Format::ICal">DateTime::Format::ICal</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::Format::ISO8601">DateTime::Format::ISO8601</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::Format::Mail">DateTime::Format::Mail</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::Format::MySQL">DateTime::Format::MySQL</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::Format::Pg">DateTime::Format::Pg</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::Format::RSS">DateTime::Format::RSS</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::Format::SQLite">DateTime::Format::SQLite</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::Format::Strptime">DateTime::Format::Strptime</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::Format::Strptime::Types">DateTime::Format::Strptime::Types</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::Format::W3CDTF">DateTime::Format::W3CDTF</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::Format::WindowsFileTime">DateTime::Format::WindowsFileTime</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::Functions">DateTime::Functions</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::Helpers">DateTime::Helpers</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::Incomplete">DateTime::Incomplete</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::Infinite">DateTime::Infinite</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::Language">DateTime::Language</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::LeapSecond">DateTime::LeapSecond</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::Locale">DateTime::Locale</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::Locale::Base">DateTime::Locale::Base</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::Locale::Catalog">DateTime::Locale::Catalog</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::Locale::Data">DateTime::Locale::Data</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::Locale::FromData">DateTime::Locale::FromData</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::Locale::Util">DateTime::Locale::Util</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::PP">DateTime::PP</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::PPExtra">DateTime::PPExtra</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::Set">DateTime::Set</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::Set::ICal">DateTime::Set::ICal</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::Span">DateTime::Span</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::SpanSet">DateTime::SpanSet</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone">DateTime::TimeZone</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Africa::Abidjan">DateTime::TimeZone::Africa::Abidjan</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Africa::Accra">DateTime::TimeZone::Africa::Accra</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Africa::Algiers">DateTime::TimeZone::Africa::Algiers</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Africa::Bissau">DateTime::TimeZone::Africa::Bissau</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Africa::Cairo">DateTime::TimeZone::Africa::Cairo</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Africa::Casablanca">DateTime::TimeZone::Africa::Casablanca</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Africa::Ceuta">DateTime::TimeZone::Africa::Ceuta</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Africa::El_Aaiun">DateTime::TimeZone::Africa::El_Aaiun</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Africa::Johannesburg">DateTime::TimeZone::Africa::Johannesburg</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Africa::Juba">DateTime::TimeZone::Africa::Juba</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Africa::Khartoum">DateTime::TimeZone::Africa::Khartoum</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Africa::Lagos">DateTime::TimeZone::Africa::Lagos</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Africa::Maputo">DateTime::TimeZone::Africa::Maputo</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Africa::Monrovia">DateTime::TimeZone::Africa::Monrovia</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Africa::Nairobi">DateTime::TimeZone::Africa::Nairobi</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Africa::Ndjamena">DateTime::TimeZone::Africa::Ndjamena</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Africa::Sao_Tome">DateTime::TimeZone::Africa::Sao_Tome</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Africa::Tripoli">DateTime::TimeZone::Africa::Tripoli</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Africa::Tunis">DateTime::TimeZone::Africa::Tunis</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Africa::Windhoek">DateTime::TimeZone::Africa::Windhoek</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Alias">DateTime::TimeZone::Alias</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Adak">DateTime::TimeZone::America::Adak</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Anchorage">DateTime::TimeZone::America::Anchorage</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Araguaina">DateTime::TimeZone::America::Araguaina</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Argentina::Buenos_Aires">DateTime::TimeZone::America::Argentina::Buenos_Aires</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Argentina::Catamarca">DateTime::TimeZone::America::Argentina::Catamarca</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Argentina::Cordoba">DateTime::TimeZone::America::Argentina::Cordoba</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Argentina::Jujuy">DateTime::TimeZone::America::Argentina::Jujuy</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Argentina::La_Rioja">DateTime::TimeZone::America::Argentina::La_Rioja</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Argentina::Mendoza">DateTime::TimeZone::America::Argentina::Mendoza</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Argentina::Rio_Gallegos">DateTime::TimeZone::America::Argentina::Rio_Gallegos</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Argentina::Salta">DateTime::TimeZone::America::Argentina::Salta</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Argentina::San_Juan">DateTime::TimeZone::America::Argentina::San_Juan</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Argentina::San_Luis">DateTime::TimeZone::America::Argentina::San_Luis</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Argentina::Tucuman">DateTime::TimeZone::America::Argentina::Tucuman</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Argentina::Ushuaia">DateTime::TimeZone::America::Argentina::Ushuaia</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Asuncion">DateTime::TimeZone::America::Asuncion</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Atikokan">DateTime::TimeZone::America::Atikokan</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Bahia">DateTime::TimeZone::America::Bahia</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Bahia_Banderas">DateTime::TimeZone::America::Bahia_Banderas</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Barbados">DateTime::TimeZone::America::Barbados</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Belem">DateTime::TimeZone::America::Belem</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Belize">DateTime::TimeZone::America::Belize</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Blanc_Sablon">DateTime::TimeZone::America::Blanc_Sablon</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Boa_Vista">DateTime::TimeZone::America::Boa_Vista</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Bogota">DateTime::TimeZone::America::Bogota</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Boise">DateTime::TimeZone::America::Boise</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Cambridge_Bay">DateTime::TimeZone::America::Cambridge_Bay</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Campo_Grande">DateTime::TimeZone::America::Campo_Grande</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Cancun">DateTime::TimeZone::America::Cancun</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Caracas">DateTime::TimeZone::America::Caracas</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Cayenne">DateTime::TimeZone::America::Cayenne</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Chicago">DateTime::TimeZone::America::Chicago</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Chihuahua">DateTime::TimeZone::America::Chihuahua</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Costa_Rica">DateTime::TimeZone::America::Costa_Rica</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Creston">DateTime::TimeZone::America::Creston</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Cuiaba">DateTime::TimeZone::America::Cuiaba</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Curacao">DateTime::TimeZone::America::Curacao</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Danmarkshavn">DateTime::TimeZone::America::Danmarkshavn</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Dawson">DateTime::TimeZone::America::Dawson</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Dawson_Creek">DateTime::TimeZone::America::Dawson_Creek</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Denver">DateTime::TimeZone::America::Denver</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Detroit">DateTime::TimeZone::America::Detroit</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Edmonton">DateTime::TimeZone::America::Edmonton</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Eirunepe">DateTime::TimeZone::America::Eirunepe</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::El_Salvador">DateTime::TimeZone::America::El_Salvador</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Fortaleza">DateTime::TimeZone::America::Fortaleza</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Fort_Nelson">DateTime::TimeZone::America::Fort_Nelson</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Glace_Bay">DateTime::TimeZone::America::Glace_Bay</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Godthab">DateTime::TimeZone::America::Godthab</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Goose_Bay">DateTime::TimeZone::America::Goose_Bay</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Grand_Turk">DateTime::TimeZone::America::Grand_Turk</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Guatemala">DateTime::TimeZone::America::Guatemala</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Guayaquil">DateTime::TimeZone::America::Guayaquil</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Guyana">DateTime::TimeZone::America::Guyana</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Halifax">DateTime::TimeZone::America::Halifax</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Havana">DateTime::TimeZone::America::Havana</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Hermosillo">DateTime::TimeZone::America::Hermosillo</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Indiana::Indianapolis">DateTime::TimeZone::America::Indiana::Indianapolis</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Indiana::Knox">DateTime::TimeZone::America::Indiana::Knox</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Indiana::Marengo">DateTime::TimeZone::America::Indiana::Marengo</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Indiana::Petersburg">DateTime::TimeZone::America::Indiana::Petersburg</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Indiana::Tell_City">DateTime::TimeZone::America::Indiana::Tell_City</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Indiana::Vevay">DateTime::TimeZone::America::Indiana::Vevay</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Indiana::Vincennes">DateTime::TimeZone::America::Indiana::Vincennes</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Indiana::Winamac">DateTime::TimeZone::America::Indiana::Winamac</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Inuvik">DateTime::TimeZone::America::Inuvik</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Iqaluit">DateTime::TimeZone::America::Iqaluit</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Jamaica">DateTime::TimeZone::America::Jamaica</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Juneau">DateTime::TimeZone::America::Juneau</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Kentucky::Louisville">DateTime::TimeZone::America::Kentucky::Louisville</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Kentucky::Monticello">DateTime::TimeZone::America::Kentucky::Monticello</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::La_Paz">DateTime::TimeZone::America::La_Paz</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Lima">DateTime::TimeZone::America::Lima</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Los_Angeles">DateTime::TimeZone::America::Los_Angeles</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Maceio">DateTime::TimeZone::America::Maceio</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Managua">DateTime::TimeZone::America::Managua</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Manaus">DateTime::TimeZone::America::Manaus</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Martinique">DateTime::TimeZone::America::Martinique</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Matamoros">DateTime::TimeZone::America::Matamoros</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Mazatlan">DateTime::TimeZone::America::Mazatlan</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Menominee">DateTime::TimeZone::America::Menominee</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Merida">DateTime::TimeZone::America::Merida</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Metlakatla">DateTime::TimeZone::America::Metlakatla</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Mexico_City">DateTime::TimeZone::America::Mexico_City</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Miquelon">DateTime::TimeZone::America::Miquelon</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Moncton">DateTime::TimeZone::America::Moncton</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Monterrey">DateTime::TimeZone::America::Monterrey</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Montevideo">DateTime::TimeZone::America::Montevideo</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Nassau">DateTime::TimeZone::America::Nassau</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::New_York">DateTime::TimeZone::America::New_York</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Nipigon">DateTime::TimeZone::America::Nipigon</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Nome">DateTime::TimeZone::America::Nome</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Noronha">DateTime::TimeZone::America::Noronha</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::North_Dakota::Beulah">DateTime::TimeZone::America::North_Dakota::Beulah</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::North_Dakota::Center">DateTime::TimeZone::America::North_Dakota::Center</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::North_Dakota::New_Salem">DateTime::TimeZone::America::North_Dakota::New_Salem</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Ojinaga">DateTime::TimeZone::America::Ojinaga</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Panama">DateTime::TimeZone::America::Panama</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Pangnirtung">DateTime::TimeZone::America::Pangnirtung</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Paramaribo">DateTime::TimeZone::America::Paramaribo</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Phoenix">DateTime::TimeZone::America::Phoenix</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Porto_Velho">DateTime::TimeZone::America::Porto_Velho</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Port_au_Prince">DateTime::TimeZone::America::Port_au_Prince</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Port_of_Spain">DateTime::TimeZone::America::Port_of_Spain</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Puerto_Rico">DateTime::TimeZone::America::Puerto_Rico</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Punta_Arenas">DateTime::TimeZone::America::Punta_Arenas</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Rainy_River">DateTime::TimeZone::America::Rainy_River</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Rankin_Inlet">DateTime::TimeZone::America::Rankin_Inlet</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Recife">DateTime::TimeZone::America::Recife</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Regina">DateTime::TimeZone::America::Regina</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Resolute">DateTime::TimeZone::America::Resolute</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Rio_Branco">DateTime::TimeZone::America::Rio_Branco</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Santarem">DateTime::TimeZone::America::Santarem</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Santiago">DateTime::TimeZone::America::Santiago</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Santo_Domingo">DateTime::TimeZone::America::Santo_Domingo</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Sao_Paulo">DateTime::TimeZone::America::Sao_Paulo</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Scoresbysund">DateTime::TimeZone::America::Scoresbysund</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Sitka">DateTime::TimeZone::America::Sitka</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::St_Johns">DateTime::TimeZone::America::St_Johns</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Swift_Current">DateTime::TimeZone::America::Swift_Current</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Tegucigalpa">DateTime::TimeZone::America::Tegucigalpa</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Thule">DateTime::TimeZone::America::Thule</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Thunder_Bay">DateTime::TimeZone::America::Thunder_Bay</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Tijuana">DateTime::TimeZone::America::Tijuana</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Toronto">DateTime::TimeZone::America::Toronto</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Vancouver">DateTime::TimeZone::America::Vancouver</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Whitehorse">DateTime::TimeZone::America::Whitehorse</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Winnipeg">DateTime::TimeZone::America::Winnipeg</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Yakutat">DateTime::TimeZone::America::Yakutat</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::America::Yellowknife">DateTime::TimeZone::America::Yellowknife</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Antarctica::Casey">DateTime::TimeZone::Antarctica::Casey</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Antarctica::Davis">DateTime::TimeZone::Antarctica::Davis</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Antarctica::DumontDUrville">DateTime::TimeZone::Antarctica::DumontDUrville</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Antarctica::Macquarie">DateTime::TimeZone::Antarctica::Macquarie</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Antarctica::Mawson">DateTime::TimeZone::Antarctica::Mawson</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Antarctica::Palmer">DateTime::TimeZone::Antarctica::Palmer</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Antarctica::Rothera">DateTime::TimeZone::Antarctica::Rothera</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Antarctica::Syowa">DateTime::TimeZone::Antarctica::Syowa</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Antarctica::Troll">DateTime::TimeZone::Antarctica::Troll</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Antarctica::Vostok">DateTime::TimeZone::Antarctica::Vostok</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Asia::Almaty">DateTime::TimeZone::Asia::Almaty</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Asia::Amman">DateTime::TimeZone::Asia::Amman</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Asia::Anadyr">DateTime::TimeZone::Asia::Anadyr</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Asia::Aqtau">DateTime::TimeZone::Asia::Aqtau</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Asia::Aqtobe">DateTime::TimeZone::Asia::Aqtobe</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Asia::Ashgabat">DateTime::TimeZone::Asia::Ashgabat</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Asia::Atyrau">DateTime::TimeZone::Asia::Atyrau</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Asia::Baghdad">DateTime::TimeZone::Asia::Baghdad</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Asia::Baku">DateTime::TimeZone::Asia::Baku</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Asia::Bangkok">DateTime::TimeZone::Asia::Bangkok</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Asia::Barnaul">DateTime::TimeZone::Asia::Barnaul</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Asia::Beirut">DateTime::TimeZone::Asia::Beirut</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Asia::Bishkek">DateTime::TimeZone::Asia::Bishkek</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Asia::Brunei">DateTime::TimeZone::Asia::Brunei</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Asia::Chita">DateTime::TimeZone::Asia::Chita</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Asia::Choibalsan">DateTime::TimeZone::Asia::Choibalsan</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Asia::Colombo">DateTime::TimeZone::Asia::Colombo</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Asia::Damascus">DateTime::TimeZone::Asia::Damascus</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Asia::Dhaka">DateTime::TimeZone::Asia::Dhaka</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Asia::Dili">DateTime::TimeZone::Asia::Dili</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Asia::Dubai">DateTime::TimeZone::Asia::Dubai</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Asia::Dushanbe">DateTime::TimeZone::Asia::Dushanbe</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Asia::Famagusta">DateTime::TimeZone::Asia::Famagusta</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Asia::Gaza">DateTime::TimeZone::Asia::Gaza</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Asia::Hebron">DateTime::TimeZone::Asia::Hebron</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Asia::Hong_Kong">DateTime::TimeZone::Asia::Hong_Kong</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Asia::Hovd">DateTime::TimeZone::Asia::Hovd</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Asia::Ho_Chi_Minh">DateTime::TimeZone::Asia::Ho_Chi_Minh</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Asia::Irkutsk">DateTime::TimeZone::Asia::Irkutsk</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Asia::Jakarta">DateTime::TimeZone::Asia::Jakarta</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Asia::Jayapura">DateTime::TimeZone::Asia::Jayapura</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Asia::Jerusalem">DateTime::TimeZone::Asia::Jerusalem</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Asia::Kabul">DateTime::TimeZone::Asia::Kabul</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Asia::Kamchatka">DateTime::TimeZone::Asia::Kamchatka</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Asia::Karachi">DateTime::TimeZone::Asia::Karachi</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Asia::Kathmandu">DateTime::TimeZone::Asia::Kathmandu</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Asia::Khandyga">DateTime::TimeZone::Asia::Khandyga</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Asia::Kolkata">DateTime::TimeZone::Asia::Kolkata</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Asia::Krasnoyarsk">DateTime::TimeZone::Asia::Krasnoyarsk</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Asia::Kuala_Lumpur">DateTime::TimeZone::Asia::Kuala_Lumpur</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Asia::Kuching">DateTime::TimeZone::Asia::Kuching</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Asia::Macau">DateTime::TimeZone::Asia::Macau</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Asia::Magadan">DateTime::TimeZone::Asia::Magadan</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Asia::Makassar">DateTime::TimeZone::Asia::Makassar</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Asia::Manila">DateTime::TimeZone::Asia::Manila</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Asia::Nicosia">DateTime::TimeZone::Asia::Nicosia</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Asia::Novokuznetsk">DateTime::TimeZone::Asia::Novokuznetsk</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Asia::Novosibirsk">DateTime::TimeZone::Asia::Novosibirsk</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Asia::Omsk">DateTime::TimeZone::Asia::Omsk</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Asia::Oral">DateTime::TimeZone::Asia::Oral</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Asia::Pontianak">DateTime::TimeZone::Asia::Pontianak</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Asia::Pyongyang">DateTime::TimeZone::Asia::Pyongyang</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Asia::Qatar">DateTime::TimeZone::Asia::Qatar</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Asia::Qyzylorda">DateTime::TimeZone::Asia::Qyzylorda</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Asia::Riyadh">DateTime::TimeZone::Asia::Riyadh</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Asia::Sakhalin">DateTime::TimeZone::Asia::Sakhalin</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Asia::Samarkand">DateTime::TimeZone::Asia::Samarkand</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Asia::Seoul">DateTime::TimeZone::Asia::Seoul</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Asia::Shanghai">DateTime::TimeZone::Asia::Shanghai</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Asia::Singapore">DateTime::TimeZone::Asia::Singapore</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Asia::Srednekolymsk">DateTime::TimeZone::Asia::Srednekolymsk</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Asia::Taipei">DateTime::TimeZone::Asia::Taipei</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Asia::Tashkent">DateTime::TimeZone::Asia::Tashkent</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Asia::Tbilisi">DateTime::TimeZone::Asia::Tbilisi</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Asia::Tehran">DateTime::TimeZone::Asia::Tehran</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Asia::Thimphu">DateTime::TimeZone::Asia::Thimphu</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Asia::Tokyo">DateTime::TimeZone::Asia::Tokyo</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Asia::Tomsk">DateTime::TimeZone::Asia::Tomsk</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Asia::Ulaanbaatar">DateTime::TimeZone::Asia::Ulaanbaatar</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Asia::Urumqi">DateTime::TimeZone::Asia::Urumqi</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Asia::Ust_Nera">DateTime::TimeZone::Asia::Ust_Nera</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Asia::Vladivostok">DateTime::TimeZone::Asia::Vladivostok</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Asia::Yakutsk">DateTime::TimeZone::Asia::Yakutsk</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Asia::Yangon">DateTime::TimeZone::Asia::Yangon</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Asia::Yekaterinburg">DateTime::TimeZone::Asia::Yekaterinburg</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Asia::Yerevan">DateTime::TimeZone::Asia::Yerevan</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Atlantic::Azores">DateTime::TimeZone::Atlantic::Azores</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Atlantic::Bermuda">DateTime::TimeZone::Atlantic::Bermuda</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Atlantic::Canary">DateTime::TimeZone::Atlantic::Canary</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Atlantic::Cape_Verde">DateTime::TimeZone::Atlantic::Cape_Verde</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Atlantic::Faroe">DateTime::TimeZone::Atlantic::Faroe</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Atlantic::Madeira">DateTime::TimeZone::Atlantic::Madeira</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Atlantic::Reykjavik">DateTime::TimeZone::Atlantic::Reykjavik</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Atlantic::South_Georgia">DateTime::TimeZone::Atlantic::South_Georgia</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Atlantic::Stanley">DateTime::TimeZone::Atlantic::Stanley</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Australia::Adelaide">DateTime::TimeZone::Australia::Adelaide</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Australia::Brisbane">DateTime::TimeZone::Australia::Brisbane</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Australia::Broken_Hill">DateTime::TimeZone::Australia::Broken_Hill</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Australia::Currie">DateTime::TimeZone::Australia::Currie</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Australia::Darwin">DateTime::TimeZone::Australia::Darwin</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Australia::Eucla">DateTime::TimeZone::Australia::Eucla</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Australia::Hobart">DateTime::TimeZone::Australia::Hobart</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Australia::Lindeman">DateTime::TimeZone::Australia::Lindeman</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Australia::Lord_Howe">DateTime::TimeZone::Australia::Lord_Howe</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Australia::Melbourne">DateTime::TimeZone::Australia::Melbourne</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Australia::Perth">DateTime::TimeZone::Australia::Perth</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Australia::Sydney">DateTime::TimeZone::Australia::Sydney</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Catalog">DateTime::TimeZone::Catalog</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::CET">DateTime::TimeZone::CET</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::CST6CDT">DateTime::TimeZone::CST6CDT</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::EET">DateTime::TimeZone::EET</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::EST">DateTime::TimeZone::EST</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::EST5EDT">DateTime::TimeZone::EST5EDT</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Europe::Amsterdam">DateTime::TimeZone::Europe::Amsterdam</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Europe::Andorra">DateTime::TimeZone::Europe::Andorra</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Europe::Astrakhan">DateTime::TimeZone::Europe::Astrakhan</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Europe::Athens">DateTime::TimeZone::Europe::Athens</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Europe::Belgrade">DateTime::TimeZone::Europe::Belgrade</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Europe::Berlin">DateTime::TimeZone::Europe::Berlin</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Europe::Brussels">DateTime::TimeZone::Europe::Brussels</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Europe::Bucharest">DateTime::TimeZone::Europe::Bucharest</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Europe::Budapest">DateTime::TimeZone::Europe::Budapest</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Europe::Chisinau">DateTime::TimeZone::Europe::Chisinau</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Europe::Copenhagen">DateTime::TimeZone::Europe::Copenhagen</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Europe::Dublin">DateTime::TimeZone::Europe::Dublin</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Europe::Gibraltar">DateTime::TimeZone::Europe::Gibraltar</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Europe::Helsinki">DateTime::TimeZone::Europe::Helsinki</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Europe::Istanbul">DateTime::TimeZone::Europe::Istanbul</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Europe::Kaliningrad">DateTime::TimeZone::Europe::Kaliningrad</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Europe::Kiev">DateTime::TimeZone::Europe::Kiev</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Europe::Kirov">DateTime::TimeZone::Europe::Kirov</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Europe::Lisbon">DateTime::TimeZone::Europe::Lisbon</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Europe::London">DateTime::TimeZone::Europe::London</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Europe::Luxembourg">DateTime::TimeZone::Europe::Luxembourg</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Europe::Madrid">DateTime::TimeZone::Europe::Madrid</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Europe::Malta">DateTime::TimeZone::Europe::Malta</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Europe::Minsk">DateTime::TimeZone::Europe::Minsk</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Europe::Monaco">DateTime::TimeZone::Europe::Monaco</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Europe::Moscow">DateTime::TimeZone::Europe::Moscow</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Europe::Oslo">DateTime::TimeZone::Europe::Oslo</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Europe::Paris">DateTime::TimeZone::Europe::Paris</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Europe::Prague">DateTime::TimeZone::Europe::Prague</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Europe::Riga">DateTime::TimeZone::Europe::Riga</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Europe::Rome">DateTime::TimeZone::Europe::Rome</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Europe::Samara">DateTime::TimeZone::Europe::Samara</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Europe::Saratov">DateTime::TimeZone::Europe::Saratov</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Europe::Simferopol">DateTime::TimeZone::Europe::Simferopol</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Europe::Sofia">DateTime::TimeZone::Europe::Sofia</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Europe::Stockholm">DateTime::TimeZone::Europe::Stockholm</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Europe::Tallinn">DateTime::TimeZone::Europe::Tallinn</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Europe::Tirane">DateTime::TimeZone::Europe::Tirane</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Europe::Ulyanovsk">DateTime::TimeZone::Europe::Ulyanovsk</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Europe::Uzhgorod">DateTime::TimeZone::Europe::Uzhgorod</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Europe::Vienna">DateTime::TimeZone::Europe::Vienna</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Europe::Vilnius">DateTime::TimeZone::Europe::Vilnius</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Europe::Volgograd">DateTime::TimeZone::Europe::Volgograd</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Europe::Warsaw">DateTime::TimeZone::Europe::Warsaw</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Europe::Zaporozhye">DateTime::TimeZone::Europe::Zaporozhye</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Europe::Zurich">DateTime::TimeZone::Europe::Zurich</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Floating">DateTime::TimeZone::Floating</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::HST">DateTime::TimeZone::HST</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Indian::Chagos">DateTime::TimeZone::Indian::Chagos</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Indian::Christmas">DateTime::TimeZone::Indian::Christmas</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Indian::Cocos">DateTime::TimeZone::Indian::Cocos</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Indian::Kerguelen">DateTime::TimeZone::Indian::Kerguelen</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Indian::Mahe">DateTime::TimeZone::Indian::Mahe</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Indian::Maldives">DateTime::TimeZone::Indian::Maldives</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Indian::Mauritius">DateTime::TimeZone::Indian::Mauritius</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Indian::Reunion">DateTime::TimeZone::Indian::Reunion</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::LMT">DateTime::TimeZone::LMT</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Local">DateTime::TimeZone::Local</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Local::Android">DateTime::TimeZone::Local::Android</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Local::Unix">DateTime::TimeZone::Local::Unix</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Local::VMS">DateTime::TimeZone::Local::VMS</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::MET">DateTime::TimeZone::MET</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::MST">DateTime::TimeZone::MST</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::MST7MDT">DateTime::TimeZone::MST7MDT</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::OffsetOnly">DateTime::TimeZone::OffsetOnly</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::OlsonDB">DateTime::TimeZone::OlsonDB</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::OlsonDB::Change">DateTime::TimeZone::OlsonDB::Change</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::OlsonDB::Observance">DateTime::TimeZone::OlsonDB::Observance</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::OlsonDB::Rule">DateTime::TimeZone::OlsonDB::Rule</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::OlsonDB::Zone">DateTime::TimeZone::OlsonDB::Zone</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Pacific::Apia">DateTime::TimeZone::Pacific::Apia</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Pacific::Auckland">DateTime::TimeZone::Pacific::Auckland</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Pacific::Bougainville">DateTime::TimeZone::Pacific::Bougainville</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Pacific::Chatham">DateTime::TimeZone::Pacific::Chatham</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Pacific::Chuuk">DateTime::TimeZone::Pacific::Chuuk</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Pacific::Easter">DateTime::TimeZone::Pacific::Easter</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Pacific::Efate">DateTime::TimeZone::Pacific::Efate</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Pacific::Enderbury">DateTime::TimeZone::Pacific::Enderbury</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Pacific::Fakaofo">DateTime::TimeZone::Pacific::Fakaofo</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Pacific::Fiji">DateTime::TimeZone::Pacific::Fiji</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Pacific::Funafuti">DateTime::TimeZone::Pacific::Funafuti</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Pacific::Galapagos">DateTime::TimeZone::Pacific::Galapagos</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Pacific::Gambier">DateTime::TimeZone::Pacific::Gambier</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Pacific::Guadalcanal">DateTime::TimeZone::Pacific::Guadalcanal</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Pacific::Guam">DateTime::TimeZone::Pacific::Guam</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Pacific::Honolulu">DateTime::TimeZone::Pacific::Honolulu</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Pacific::Kiritimati">DateTime::TimeZone::Pacific::Kiritimati</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Pacific::Kosrae">DateTime::TimeZone::Pacific::Kosrae</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Pacific::Kwajalein">DateTime::TimeZone::Pacific::Kwajalein</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Pacific::Majuro">DateTime::TimeZone::Pacific::Majuro</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Pacific::Marquesas">DateTime::TimeZone::Pacific::Marquesas</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Pacific::Nauru">DateTime::TimeZone::Pacific::Nauru</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Pacific::Niue">DateTime::TimeZone::Pacific::Niue</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Pacific::Norfolk">DateTime::TimeZone::Pacific::Norfolk</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Pacific::Noumea">DateTime::TimeZone::Pacific::Noumea</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Pacific::Pago_Pago">DateTime::TimeZone::Pacific::Pago_Pago</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Pacific::Palau">DateTime::TimeZone::Pacific::Palau</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Pacific::Pitcairn">DateTime::TimeZone::Pacific::Pitcairn</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Pacific::Pohnpei">DateTime::TimeZone::Pacific::Pohnpei</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Pacific::Port_Moresby">DateTime::TimeZone::Pacific::Port_Moresby</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Pacific::Rarotonga">DateTime::TimeZone::Pacific::Rarotonga</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Pacific::Tahiti">DateTime::TimeZone::Pacific::Tahiti</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Pacific::Tarawa">DateTime::TimeZone::Pacific::Tarawa</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Pacific::Tongatapu">DateTime::TimeZone::Pacific::Tongatapu</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Pacific::Wake">DateTime::TimeZone::Pacific::Wake</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::Pacific::Wallis">DateTime::TimeZone::Pacific::Wallis</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::PST8PDT">DateTime::TimeZone::PST8PDT</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::UTC">DateTime::TimeZone::UTC</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::TimeZone::WET">DateTime::TimeZone::WET</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::Types">DateTime::Types</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::Util::Calc">DateTime::Util::Calc</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DateTime::Util::DayOfWeek">DateTime::Util::DayOfWeek</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DBD::DBM">DBD::DBM</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DBD::DBM">DBD::DBM</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DBD::ExampleP">DBD::ExampleP</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DBD::ExampleP">DBD::ExampleP</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DBD::File">DBD::File</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DBD::File">DBD::File</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DBD::Gofer">DBD::Gofer</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DBD::Gofer">DBD::Gofer</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DBD::Gofer::Policy::Base">DBD::Gofer::Policy::Base</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DBD::Gofer::Policy::Base">DBD::Gofer::Policy::Base</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DBD::Gofer::Policy::classic">DBD::Gofer::Policy::classic</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DBD::Gofer::Policy::classic">DBD::Gofer::Policy::classic</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DBD::Gofer::Policy::pedantic">DBD::Gofer::Policy::pedantic</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DBD::Gofer::Policy::pedantic">DBD::Gofer::Policy::pedantic</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DBD::Gofer::Policy::rush">DBD::Gofer::Policy::rush</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DBD::Gofer::Policy::rush">DBD::Gofer::Policy::rush</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DBD::Gofer::Transport::Base">DBD::Gofer::Transport::Base</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DBD::Gofer::Transport::Base">DBD::Gofer::Transport::Base</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DBD::Gofer::Transport::corostream">DBD::Gofer::Transport::corostream</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DBD::Gofer::Transport::corostream">DBD::Gofer::Transport::corostream</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DBD::Gofer::Transport::null">DBD::Gofer::Transport::null</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DBD::Gofer::Transport::null">DBD::Gofer::Transport::null</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DBD::Gofer::Transport::pipeone">DBD::Gofer::Transport::pipeone</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DBD::Gofer::Transport::pipeone">DBD::Gofer::Transport::pipeone</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DBD::Gofer::Transport::stream">DBD::Gofer::Transport::stream</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DBD::Gofer::Transport::stream">DBD::Gofer::Transport::stream</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DBD::Mem">DBD::Mem</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DBD::NullP">DBD::NullP</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DBD::NullP">DBD::NullP</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DBD::Pg::st">DBD::Pg::st</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DBD::Proxy">DBD::Proxy</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DBD::Proxy">DBD::Proxy</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DBD::Sponge">DBD::Sponge</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DBD::Sponge">DBD::Sponge</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DBD::SQLite">DBD::SQLite</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DBD::SQLite2">DBD::SQLite2</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DBD::SQLite::Constants">DBD::SQLite::Constants</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DBD::SQLite::VirtualTable">DBD::SQLite::VirtualTable</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DBD::SQLite::VirtualTable::FileContent">DBD::SQLite::VirtualTable::FileContent</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DBD::SQLite::VirtualTable::PerlData">DBD::SQLite::VirtualTable::PerlData</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DBI">DBI</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DBI">DBI</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DBI::Const::GetInfo::ANSI">DBI::Const::GetInfo::ANSI</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DBI::Const::GetInfo::ANSI">DBI::Const::GetInfo::ANSI</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DBI::Const::GetInfo::ODBC">DBI::Const::GetInfo::ODBC</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DBI::Const::GetInfo::ODBC">DBI::Const::GetInfo::ODBC</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DBI::Const::GetInfoReturn">DBI::Const::GetInfoReturn</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DBI::Const::GetInfoReturn">DBI::Const::GetInfoReturn</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DBI::Const::GetInfoType">DBI::Const::GetInfoType</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DBI::Const::GetInfoType">DBI::Const::GetInfoType</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DBI::DBD">DBI::DBD</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DBI::DBD">DBI::DBD</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DBI::DBD::Metadata">DBI::DBD::Metadata</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DBI::DBD::Metadata">DBI::DBD::Metadata</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DBI::DBD::SqlEngine">DBI::DBD::SqlEngine</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DBI::DBD::SqlEngine">DBI::DBD::SqlEngine</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DBI::FAQ">DBI::FAQ</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DBI::Gofer::Execute">DBI::Gofer::Execute</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DBI::Gofer::Execute">DBI::Gofer::Execute</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DBI::Gofer::Request">DBI::Gofer::Request</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DBI::Gofer::Request">DBI::Gofer::Request</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DBI::Gofer::Response">DBI::Gofer::Response</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DBI::Gofer::Response">DBI::Gofer::Response</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DBI::Gofer::Serializer::Base">DBI::Gofer::Serializer::Base</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DBI::Gofer::Serializer::Base">DBI::Gofer::Serializer::Base</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DBI::Gofer::Serializer::DataDumper">DBI::Gofer::Serializer::DataDumper</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DBI::Gofer::Serializer::DataDumper">DBI::Gofer::Serializer::DataDumper</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DBI::Gofer::Serializer::Storable">DBI::Gofer::Serializer::Storable</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DBI::Gofer::Serializer::Storable">DBI::Gofer::Serializer::Storable</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DBI::Gofer::Transport::Base">DBI::Gofer::Transport::Base</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DBI::Gofer::Transport::Base">DBI::Gofer::Transport::Base</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DBI::Gofer::Transport::pipeone">DBI::Gofer::Transport::pipeone</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DBI::Gofer::Transport::pipeone">DBI::Gofer::Transport::pipeone</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DBI::Gofer::Transport::stream">DBI::Gofer::Transport::stream</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DBI::Gofer::Transport::stream">DBI::Gofer::Transport::stream</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DBI::Profile">DBI::Profile</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DBI::Profile">DBI::Profile</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DBI::ProfileData">DBI::ProfileData</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DBI::ProfileData">DBI::ProfileData</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DBI::ProfileDumper">DBI::ProfileDumper</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DBI::ProfileDumper">DBI::ProfileDumper</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DBI::ProfileDumper::Apache">DBI::ProfileDumper::Apache</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DBI::ProfileDumper::Apache">DBI::ProfileDumper::Apache</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DBI::ProfileSubs">DBI::ProfileSubs</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DBI::ProfileSubs">DBI::ProfileSubs</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DBI::ProxyServer">DBI::ProxyServer</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DBI::ProxyServer">DBI::ProxyServer</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DBI::SQL::Nano">DBI::SQL::Nano</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DBI::SQL::Nano">DBI::SQL::Nano</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DBI::Util::CacheMemory">DBI::Util::CacheMemory</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DBI::Util::CacheMemory">DBI::Util::CacheMemory</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DBI::Util::_accessor">DBI::Util::_accessor</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DBI::Util::_accessor">DBI::Util::_accessor</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::AutoSelect">Debconf::AutoSelect</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::Base">Debconf::Base</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::Client::ConfModule">Debconf::Client::ConfModule</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::Config">Debconf::Config</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::ConfModule">Debconf::ConfModule</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::Db">Debconf::Db</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::DbDriver">Debconf::DbDriver</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::DbDriver::Backup">Debconf::DbDriver::Backup</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::DbDriver::Cache">Debconf::DbDriver::Cache</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::DbDriver::Copy">Debconf::DbDriver::Copy</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::DbDriver::Debug">Debconf::DbDriver::Debug</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::DbDriver::Directory">Debconf::DbDriver::Directory</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::DbDriver::DirTree">Debconf::DbDriver::DirTree</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::DbDriver::File">Debconf::DbDriver::File</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::DbDriver::LDAP">Debconf::DbDriver::LDAP</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::DbDriver::PackageDir">Debconf::DbDriver::PackageDir</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::DbDriver::Pipe">Debconf::DbDriver::Pipe</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::DbDriver::Stack">Debconf::DbDriver::Stack</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::Element">Debconf::Element</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::Element::Dialog::Boolean">Debconf::Element::Dialog::Boolean</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::Element::Dialog::Error">Debconf::Element::Dialog::Error</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::Element::Dialog::Multiselect">Debconf::Element::Dialog::Multiselect</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::Element::Dialog::Note">Debconf::Element::Dialog::Note</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::Element::Dialog::Password">Debconf::Element::Dialog::Password</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::Element::Dialog::Progress">Debconf::Element::Dialog::Progress</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::Element::Dialog::Select">Debconf::Element::Dialog::Select</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::Element::Dialog::String">Debconf::Element::Dialog::String</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::Element::Dialog::Text">Debconf::Element::Dialog::Text</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::Element::Editor::Boolean">Debconf::Element::Editor::Boolean</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::Element::Editor::Error">Debconf::Element::Editor::Error</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::Element::Editor::Multiselect">Debconf::Element::Editor::Multiselect</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::Element::Editor::Note">Debconf::Element::Editor::Note</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::Element::Editor::Password">Debconf::Element::Editor::Password</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::Element::Editor::Progress">Debconf::Element::Editor::Progress</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::Element::Editor::Select">Debconf::Element::Editor::Select</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::Element::Editor::String">Debconf::Element::Editor::String</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::Element::Editor::Text">Debconf::Element::Editor::Text</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::Element::Gnome">Debconf::Element::Gnome</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::Element::Gnome::Boolean">Debconf::Element::Gnome::Boolean</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::Element::Gnome::Error">Debconf::Element::Gnome::Error</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::Element::Gnome::Multiselect">Debconf::Element::Gnome::Multiselect</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::Element::Gnome::Note">Debconf::Element::Gnome::Note</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::Element::Gnome::Password">Debconf::Element::Gnome::Password</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::Element::Gnome::Progress">Debconf::Element::Gnome::Progress</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::Element::Gnome::Select">Debconf::Element::Gnome::Select</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::Element::Gnome::String">Debconf::Element::Gnome::String</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::Element::Gnome::Text">Debconf::Element::Gnome::Text</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::Element::Kde::Boolean">Debconf::Element::Kde::Boolean</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::Element::Kde::ElementWidget">Debconf::Element::Kde::ElementWidget</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::Element::Kde::Error">Debconf::Element::Kde::Error</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::Element::Kde::Multiselect">Debconf::Element::Kde::Multiselect</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::Element::Kde::Note">Debconf::Element::Kde::Note</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::Element::Kde::Password">Debconf::Element::Kde::Password</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::Element::Kde::Progress">Debconf::Element::Kde::Progress</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::Element::Kde::Select">Debconf::Element::Kde::Select</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::Element::Kde::String">Debconf::Element::Kde::String</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::Element::Kde::Text">Debconf::Element::Kde::Text</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::Element::Multiselect">Debconf::Element::Multiselect</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::Element::Noninteractive">Debconf::Element::Noninteractive</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::Element::Noninteractive::Boolean">Debconf::Element::Noninteractive::Boolean</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::Element::Noninteractive::Error">Debconf::Element::Noninteractive::Error</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::Element::Noninteractive::Multiselect">Debconf::Element::Noninteractive::Multiselect</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::Element::Noninteractive::Note">Debconf::Element::Noninteractive::Note</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::Element::Noninteractive::Password">Debconf::Element::Noninteractive::Password</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::Element::Noninteractive::Progress">Debconf::Element::Noninteractive::Progress</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::Element::Noninteractive::Select">Debconf::Element::Noninteractive::Select</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::Element::Noninteractive::String">Debconf::Element::Noninteractive::String</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::Element::Noninteractive::Text">Debconf::Element::Noninteractive::Text</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::Element::Select">Debconf::Element::Select</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::Element::Teletype::Boolean">Debconf::Element::Teletype::Boolean</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::Element::Teletype::Error">Debconf::Element::Teletype::Error</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::Element::Teletype::Multiselect">Debconf::Element::Teletype::Multiselect</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::Element::Teletype::Note">Debconf::Element::Teletype::Note</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::Element::Teletype::Password">Debconf::Element::Teletype::Password</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::Element::Teletype::Progress">Debconf::Element::Teletype::Progress</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::Element::Teletype::Select">Debconf::Element::Teletype::Select</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::Element::Teletype::String">Debconf::Element::Teletype::String</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::Element::Teletype::Text">Debconf::Element::Teletype::Text</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::Element::Web::Boolean">Debconf::Element::Web::Boolean</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::Element::Web::Error">Debconf::Element::Web::Error</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::Element::Web::Multiselect">Debconf::Element::Web::Multiselect</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::Element::Web::Note">Debconf::Element::Web::Note</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::Element::Web::Password">Debconf::Element::Web::Password</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::Element::Web::Progress">Debconf::Element::Web::Progress</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::Element::Web::Select">Debconf::Element::Web::Select</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::Element::Web::String">Debconf::Element::Web::String</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::Element::Web::Text">Debconf::Element::Web::Text</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::Encoding">Debconf::Encoding</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::Format">Debconf::Format</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::Format::822">Debconf::Format::822</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::FrontEnd">Debconf::FrontEnd</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::FrontEnd::Dialog">Debconf::FrontEnd::Dialog</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::FrontEnd::Editor">Debconf::FrontEnd::Editor</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::FrontEnd::Gnome">Debconf::FrontEnd::Gnome</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::FrontEnd::Kde">Debconf::FrontEnd::Kde</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::FrontEnd::Kde::Wizard">Debconf::FrontEnd::Kde::Wizard</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::FrontEnd::Noninteractive">Debconf::FrontEnd::Noninteractive</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::FrontEnd::Passthrough">Debconf::FrontEnd::Passthrough</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::FrontEnd::Readline">Debconf::FrontEnd::Readline</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::FrontEnd::ScreenSize">Debconf::FrontEnd::ScreenSize</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::FrontEnd::Teletype">Debconf::FrontEnd::Teletype</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::FrontEnd::Text">Debconf::FrontEnd::Text</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::FrontEnd::Web">Debconf::FrontEnd::Web</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::Gettext">Debconf::Gettext</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::Iterator">Debconf::Iterator</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::Log">Debconf::Log</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::Path">Debconf::Path</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::Priority">Debconf::Priority</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::Question">Debconf::Question</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::Template">Debconf::Template</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::Template::Transient">Debconf::Template::Transient</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debconf::TmpFile">Debconf::TmpFile</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debian::DebConf::Client::ConfModule">Debian::DebConf::Client::ConfModule</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debian::Debhelper::Buildsystem">Debian::Debhelper::Buildsystem</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debian::Debhelper::Buildsystem::ant">Debian::Debhelper::Buildsystem::ant</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debian::Debhelper::Buildsystem::autoconf">Debian::Debhelper::Buildsystem::autoconf</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debian::Debhelper::Buildsystem::cmake">Debian::Debhelper::Buildsystem::cmake</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debian::Debhelper::Buildsystem::makefile">Debian::Debhelper::Buildsystem::makefile</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debian::Debhelper::Buildsystem::perl_build">Debian::Debhelper::Buildsystem::perl_build</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debian::Debhelper::Buildsystem::perl_makemaker">Debian::Debhelper::Buildsystem::perl_makemaker</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debian::Debhelper::Buildsystem::pybuild">Debian::Debhelper::Buildsystem::pybuild</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debian::Debhelper::Buildsystem::python_distutils">Debian::Debhelper::Buildsystem::python_distutils</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debian::Debhelper::Buildsystem::qmake">Debian::Debhelper::Buildsystem::qmake</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debian::Debhelper::Buildsystem::qmake_qt4">Debian::Debhelper::Buildsystem::qmake_qt4</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debian::Debhelper::Dh_Buildsystems">Debian::Debhelper::Dh_Buildsystems</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debian::Debhelper::Dh_Getopt">Debian::Debhelper::Dh_Getopt</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debian::Debhelper::Dh_Lib">Debian::Debhelper::Dh_Lib</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debian::Debhelper::Dh_Version">Debian::Debhelper::Dh_Version</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debian::DictionariesCommon">Debian::DictionariesCommon</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debian::DocBase::Common">Debian::DocBase::Common</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debian::DocBase::DB">Debian::DocBase::DB</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debian::DocBase::DocBaseFile">Debian::DocBase::DocBaseFile</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debian::DocBase::Document">Debian::DocBase::Document</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debian::DocBase::Gettext">Debian::DocBase::Gettext</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debian::DocBase::InstallDocs">Debian::DocBase::InstallDocs</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debian::DocBase::Programs::Dhelp">Debian::DocBase::Programs::Dhelp</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debian::DocBase::Programs::Dwww">Debian::DocBase::Programs::Dwww</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debian::DocBase::Programs::Scrollkeeper">Debian::DocBase::Programs::Scrollkeeper</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Debian::DocBase::Utils">Debian::DocBase::Utils</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DebianLinux">DebianLinux</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DebianNet">DebianNet</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Demo::HelloWorld">Demo::HelloWorld</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Devel::AssertC99">Devel::AssertC99</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Devel::Caller">Devel::Caller</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Devel::CheckCompiler">Devel::CheckCompiler</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Devel::Declare">Devel::Declare</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Devel::Declare::Context::Simple">Devel::Declare::Context::Simple</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Devel::Declare::MethodInstaller::Simple">Devel::Declare::MethodInstaller::Simple</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Devel::GlobalDestruction">Devel::GlobalDestruction</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Devel::Hide">Devel::Hide</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Devel::InnerPackage">Devel::InnerPackage</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Devel::LexAlias">Devel::LexAlias</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Devel::OverloadInfo">Devel::OverloadInfo</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Devel::PartialDump">Devel::PartialDump</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Devel::StackTrace">Devel::StackTrace</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Devel::StackTrace::Frame">Devel::StackTrace::Frame</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Devel::Symdump">Devel::Symdump</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Devel::Symdump::Export">Devel::Symdump::Export</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Devel::TypeTiny::Perl56Compat">Devel::TypeTiny::Perl56Compat</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Devel::TypeTiny::Perl58Compat">Devel::TypeTiny::Perl58Compat</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Digest::HMAC">Digest::HMAC</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Digest::HMAC_MD5">Digest::HMAC_MD5</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Digest::HMAC_SHA1">Digest::HMAC_SHA1</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Digest::SHA1">Digest::SHA1</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Dist::CheckConflicts">Dist::CheckConflicts</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Dpkg">Dpkg</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Dpkg::Arch">Dpkg::Arch</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Dpkg::BuildEnv">Dpkg::BuildEnv</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Dpkg::BuildFlags">Dpkg::BuildFlags</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Dpkg::BuildOptions">Dpkg::BuildOptions</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Dpkg::BuildProfiles">Dpkg::BuildProfiles</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Dpkg::Changelog">Dpkg::Changelog</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Dpkg::Changelog::Debian">Dpkg::Changelog::Debian</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Dpkg::Changelog::Entry">Dpkg::Changelog::Entry</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Dpkg::Changelog::Entry::Debian">Dpkg::Changelog::Entry::Debian</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Dpkg::Changelog::Parse">Dpkg::Changelog::Parse</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Dpkg::Checksums">Dpkg::Checksums</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Dpkg::Compression">Dpkg::Compression</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Dpkg::Compression::FileHandle">Dpkg::Compression::FileHandle</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Dpkg::Compression::Process">Dpkg::Compression::Process</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Dpkg::Conf">Dpkg::Conf</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Dpkg::Control">Dpkg::Control</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Dpkg::Control::Changelog">Dpkg::Control::Changelog</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Dpkg::Control::Fields">Dpkg::Control::Fields</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Dpkg::Control::FieldsCore">Dpkg::Control::FieldsCore</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Dpkg::Control::Hash">Dpkg::Control::Hash</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Dpkg::Control::HashCore">Dpkg::Control::HashCore</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Dpkg::Control::Info">Dpkg::Control::Info</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Dpkg::Control::Types">Dpkg::Control::Types</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Dpkg::Deps">Dpkg::Deps</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Dpkg::Dist::Files">Dpkg::Dist::Files</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Dpkg::ErrorHandling">Dpkg::ErrorHandling</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Dpkg::Exit">Dpkg::Exit</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Dpkg::File">Dpkg::File</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Dpkg::Getopt">Dpkg::Getopt</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Dpkg::Gettext">Dpkg::Gettext</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Dpkg::Index">Dpkg::Index</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Dpkg::Interface::Storable">Dpkg::Interface::Storable</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Dpkg::IPC">Dpkg::IPC</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Dpkg::Package">Dpkg::Package</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Dpkg::Path">Dpkg::Path</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Dpkg::Shlibs">Dpkg::Shlibs</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Dpkg::Shlibs::Cppfilt">Dpkg::Shlibs::Cppfilt</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Dpkg::Shlibs::Objdump">Dpkg::Shlibs::Objdump</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Dpkg::Shlibs::Symbol">Dpkg::Shlibs::Symbol</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Dpkg::Shlibs::SymbolFile">Dpkg::Shlibs::SymbolFile</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Dpkg::Source::Archive">Dpkg::Source::Archive</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Dpkg::Source::Functions">Dpkg::Source::Functions</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Dpkg::Source::Package">Dpkg::Source::Package</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Dpkg::Source::Package::V1">Dpkg::Source::Package::V1</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Dpkg::Source::Package::V2">Dpkg::Source::Package::V2</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Dpkg::Source::Package::V3::Bzr">Dpkg::Source::Package::V3::Bzr</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Dpkg::Source::Package::V3::Custom">Dpkg::Source::Package::V3::Custom</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Dpkg::Source::Package::V3::Git">Dpkg::Source::Package::V3::Git</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Dpkg::Source::Package::V3::Native">Dpkg::Source::Package::V3::Native</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Dpkg::Source::Package::V3::Quilt">Dpkg::Source::Package::V3::Quilt</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Dpkg::Source::Patch">Dpkg::Source::Patch</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Dpkg::Source::Quilt">Dpkg::Source::Quilt</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Dpkg::Substvars">Dpkg::Substvars</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Dpkg::Util">Dpkg::Util</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Dpkg::Vars">Dpkg::Vars</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Dpkg::Vendor">Dpkg::Vendor</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Dpkg::Vendor::Debian">Dpkg::Vendor::Debian</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Dpkg::Vendor::Default">Dpkg::Vendor::Default</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Dpkg::Vendor::Ubuntu">Dpkg::Vendor::Ubuntu</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Dpkg::Version">Dpkg::Version</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=DynaLoader">DynaLoader</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Email::Valid">Email::Valid</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Encode">Encode</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Encode::Alias">Encode::Alias</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Encode::Byte">Encode::Byte</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Encode::CJKConstants">Encode::CJKConstants</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Encode::CN">Encode::CN</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Encode::CN::HZ">Encode::CN::HZ</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Encode::Config">Encode::Config</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Encode::EBCDIC">Encode::EBCDIC</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Encode::Encoder">Encode::Encoder</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Encode::Encoding">Encode::Encoding</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Encode::GSM0338">Encode::GSM0338</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Encode::Guess">Encode::Guess</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Encode::JP">Encode::JP</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Encode::JP::H2Z">Encode::JP::H2Z</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Encode::JP::JIS7">Encode::JP::JIS7</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Encode::KR">Encode::KR</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Encode::KR::2022_KR">Encode::KR::2022_KR</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Encode::Locale">Encode::Locale</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Encode::MIME::Header">Encode::MIME::Header</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Encode::MIME::Header::ISO_2022_JP">Encode::MIME::Header::ISO_2022_JP</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Encode::MIME::Name">Encode::MIME::Name</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Encode::Symbol">Encode::Symbol</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Encode::TW">Encode::TW</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Encode::Unicode">Encode::Unicode</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Encode::Unicode::UTF7">Encode::Unicode::UTF7</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=encoding">encoding</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Errno">Errno</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Error">Error</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Error::TypeTiny">Error::TypeTiny</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Error::TypeTiny::Assertion">Error::TypeTiny::Assertion</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Error::TypeTiny::Compilation">Error::TypeTiny::Compilation</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Error::TypeTiny::WrongNumberOfParameters">Error::TypeTiny::WrongNumberOfParameters</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Eval::Closure">Eval::Closure</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Eval::TypeTiny">Eval::TypeTiny</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Exception::Class">Exception::Class</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Exception::Class::Base">Exception::Class::Base</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Exporter">Exporter</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Exporter::Heavy">Exporter::Heavy</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Exporter::Shiny">Exporter::Shiny</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Exporter::Tiny">Exporter::Tiny</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=ExtUtils::Config">ExtUtils::Config</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=ExtUtils::Depends">ExtUtils::Depends</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=ExtUtils::Helpers">ExtUtils::Helpers</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=ExtUtils::Helpers::Unix">ExtUtils::Helpers::Unix</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=ExtUtils::Helpers::VMS">ExtUtils::Helpers::VMS</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=ExtUtils::Helpers::Windows">ExtUtils::Helpers::Windows</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=ExtUtils::InstallPaths">ExtUtils::InstallPaths</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Fatal">Fatal</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Fcntl">Fcntl</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=feature">feature</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Fh">Fh</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=fields">fields</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=File::BaseDir">File::BaseDir</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=File::Basename">File::Basename</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=File::Copy::Recursive">File::Copy::Recursive</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=File::Copy::Recursive::Reduced">File::Copy::Recursive::Reduced</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=File::DesktopEntry">File::DesktopEntry</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=File::FcntlLock">File::FcntlLock</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=File::FcntlLock::Core">File::FcntlLock::Core</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=File::FcntlLock::Errors">File::FcntlLock::Errors</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=File::FcntlLock::Inline">File::FcntlLock::Inline</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=File::FcntlLock::Pure">File::FcntlLock::Pure</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=File::FcntlLock::XS">File::FcntlLock::XS</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=File::Find::Rule">File::Find::Rule</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=File::Glob">File::Glob</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=File::HomeDir">File::HomeDir</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=File::HomeDir::Darwin">File::HomeDir::Darwin</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=File::HomeDir::Darwin::Carbon">File::HomeDir::Darwin::Carbon</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=File::HomeDir::Darwin::Cocoa">File::HomeDir::Darwin::Cocoa</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=File::HomeDir::Driver">File::HomeDir::Driver</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=File::HomeDir::FreeDesktop">File::HomeDir::FreeDesktop</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=File::HomeDir::MacOS9">File::HomeDir::MacOS9</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=File::HomeDir::Test">File::HomeDir::Test</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=File::HomeDir::Unix">File::HomeDir::Unix</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=File::HomeDir::Windows">File::HomeDir::Windows</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=File::IconTheme">File::IconTheme</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=File::Listing">File::Listing</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=File::MimeInfo">File::MimeInfo</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=File::MimeInfo::Applications">File::MimeInfo::Applications</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=File::MimeInfo::Magic">File::MimeInfo::Magic</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=File::MimeInfo::Rox">File::MimeInfo::Rox</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=File::Path">File::Path</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=File::pushd">File::pushd</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=File::Remove">File::Remove</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=File::Rename">File::Rename</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=File::ShareDir">File::ShareDir</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=File::ShareDir::Install">File::ShareDir::Install</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=File::Spec">File::Spec</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=File::Spec::Unix">File::Spec::Unix</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=File::StripNondeterminism">File::StripNondeterminism</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=File::StripNondeterminism::handlers::ar">File::StripNondeterminism::handlers::ar</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=File::StripNondeterminism::handlers::gzip">File::StripNondeterminism::handlers::gzip</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=File::StripNondeterminism::handlers::jar">File::StripNondeterminism::handlers::jar</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=File::StripNondeterminism::handlers::javadoc">File::StripNondeterminism::handlers::javadoc</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=File::StripNondeterminism::handlers::javaproperties">File::StripNondeterminism::handlers::javaproperties</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=File::StripNondeterminism::handlers::pearregistry">File::StripNondeterminism::handlers::pearregistry</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=File::StripNondeterminism::handlers::png">File::StripNondeterminism::handlers::png</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=File::StripNondeterminism::handlers::zip">File::StripNondeterminism::handlers::zip</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=File::Temp">File::Temp</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=File::UserDirs">File::UserDirs</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=File::Which">File::Which</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=FileHandle">FileHandle</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Font::AFM">Font::AFM</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Font::Metrics::Courier">Font::Metrics::Courier</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Font::Metrics::CourierBold">Font::Metrics::CourierBold</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Font::Metrics::CourierBoldOblique">Font::Metrics::CourierBoldOblique</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Font::Metrics::CourierOblique">Font::Metrics::CourierOblique</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Font::Metrics::Helvetica">Font::Metrics::Helvetica</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Font::Metrics::HelveticaBold">Font::Metrics::HelveticaBold</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Font::Metrics::HelveticaBoldOblique">Font::Metrics::HelveticaBoldOblique</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Font::Metrics::HelveticaOblique">Font::Metrics::HelveticaOblique</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Font::Metrics::TimesBold">Font::Metrics::TimesBold</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Font::Metrics::TimesBoldItalic">Font::Metrics::TimesBoldItalic</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Font::Metrics::TimesItalic">Font::Metrics::TimesItalic</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Font::Metrics::TimesRoman">Font::Metrics::TimesRoman</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Getopt::Long">Getopt::Long</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Git">Git</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Git::I18N">Git::I18N</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Git::IndexInfo">Git::IndexInfo</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Glib">Glib</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Glib::CodeGen">Glib::CodeGen</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Glib::GenPod">Glib::GenPod</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Glib::Install::Files">Glib::Install::Files</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Glib::MakeHelper">Glib::MakeHelper</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Glib::Object::Subclass">Glib::Object::Subclass</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Glib::ParseXSDoc">Glib::ParseXSDoc</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Gtk2">Gtk2</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Gtk2::CodeGen">Gtk2::CodeGen</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Gtk2::Gdk::Keysyms">Gtk2::Gdk::Keysyms</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Gtk2::Helper">Gtk2::Helper</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Gtk2::Install::Files">Gtk2::Install::Files</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Gtk2::Pango">Gtk2::Pango</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Gtk2::SimpleList">Gtk2::SimpleList</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Gtk2::SimpleMenu">Gtk2::SimpleMenu</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Gtk2::TestHelper">Gtk2::TestHelper</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Hash::Util">Hash::Util</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Hook::LexWrap">Hook::LexWrap</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=HTML::AsSubs">HTML::AsSubs</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=HTML::Element">HTML::Element</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=HTML::Element::traverse">HTML::Element::traverse</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=HTML::Entities">HTML::Entities</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=HTML::Filter">HTML::Filter</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=HTML::Form">HTML::Form</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=HTML::FormatMarkdown">HTML::FormatMarkdown</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=HTML::FormatPS">HTML::FormatPS</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=HTML::FormatRTF">HTML::FormatRTF</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=HTML::Formatter">HTML::Formatter</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=HTML::FormatText">HTML::FormatText</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=HTML::HeadParser">HTML::HeadParser</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=HTML::LinkExtor">HTML::LinkExtor</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=HTML::Parse">HTML::Parse</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=HTML::Parser">HTML::Parser</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=HTML::PullParser">HTML::PullParser</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=HTML::Tagset">HTML::Tagset</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=HTML::TokeParser">HTML::TokeParser</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=HTML::Tree">HTML::Tree</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=HTML::TreeBuilder">HTML::TreeBuilder</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=HTTP::Config">HTTP::Config</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=HTTP::Cookies">HTTP::Cookies</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=HTTP::Cookies::Netscape">HTTP::Cookies::Netscape</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=HTTP::Daemon">HTTP::Daemon</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=HTTP::Date">HTTP::Date</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=HTTP::Headers">HTTP::Headers</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=HTTP::Headers::Auth">HTTP::Headers::Auth</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=HTTP::Headers::ETag">HTTP::Headers::ETag</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=HTTP::Headers::Util">HTTP::Headers::Util</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=HTTP::Message">HTTP::Message</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=HTTP::Negotiate">HTTP::Negotiate</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=HTTP::Request">HTTP::Request</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=HTTP::Request::Common">HTTP::Request::Common</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=HTTP::Response">HTTP::Response</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=HTTP::Status">HTTP::Status</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Importer">Importer</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=integer">integer</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=IO">IO</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=IO::Extended">IO::Extended</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=IO::File">IO::File</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=IO::Handle">IO::Handle</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=IO::HTML">IO::HTML</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=IO::Pipe">IO::Pipe</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=IO::Pty">IO::Pty</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=IO::Seekable">IO::Seekable</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=IO::Select">IO::Select</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=IO::Socket">IO::Socket</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=IO::Socket::INET">IO::Socket::INET</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=IO::Socket::INET6">IO::Socket::INET6</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=IO::Socket::IP">IO::Socket::IP</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=IO::Socket::SSL">IO::Socket::SSL</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=IO::Socket::SSL::Intercept">IO::Socket::SSL::Intercept</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=IO::Socket::SSL::PublicSuffix">IO::Socket::SSL::PublicSuffix</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=IO::Socket::SSL::Utils">IO::Socket::SSL::Utils</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=IO::Socket::UNIX">IO::Socket::UNIX</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=IO::String">IO::String</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=IO::Tty">IO::Tty</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=IO::Tty::Constant">IO::Tty::Constant</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=IPC::Open2">IPC::Open2</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=IPC::Open3">IPC::Open3</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=IPC::Run">IPC::Run</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=IPC::Run3">IPC::Run3</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=IPC::Run3::ProfArrayBuffer">IPC::Run3::ProfArrayBuffer</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=IPC::Run3::ProfLogger">IPC::Run3::ProfLogger</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=IPC::Run3::ProfLogReader">IPC::Run3::ProfLogReader</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=IPC::Run3::ProfPP">IPC::Run3::ProfPP</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=IPC::Run3::ProfReporter">IPC::Run3::ProfReporter</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=IPC::Run::Debug">IPC::Run::Debug</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=IPC::Run::IO">IPC::Run::IO</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=IPC::Run::Timer">IPC::Run::Timer</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=IPC::System::Simple">IPC::System::Simple</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=lib">lib</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=lib::core::only">lib::core::only</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=LibAppArmor">LibAppArmor</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Lintian::Architecture">Lintian::Architecture</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Lintian::Check">Lintian::Check</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Lintian::CheckScript">Lintian::CheckScript</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Lintian::Collect">Lintian::Collect</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Lintian::Collect::Binary">Lintian::Collect::Binary</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Lintian::Collect::Changes">Lintian::Collect::Changes</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Lintian::Collect::Group">Lintian::Collect::Group</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Lintian::Collect::Package">Lintian::Collect::Package</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Lintian::Collect::Source">Lintian::Collect::Source</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Lintian::CollScript">Lintian::CollScript</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Lintian::Command">Lintian::Command</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Lintian::Command::Simple">Lintian::Command::Simple</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Lintian::Data">Lintian::Data</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Lintian::DepMap">Lintian::DepMap</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Lintian::DepMap::Properties">Lintian::DepMap::Properties</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Lintian::Internal::FrontendUtil">Lintian::Internal::FrontendUtil</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Lintian::Lab">Lintian::Lab</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Lintian::Lab::Entry">Lintian::Lab::Entry</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Lintian::Lab::Manifest">Lintian::Lab::Manifest</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Lintian::Lab::ManifestDiff">Lintian::Lab::ManifestDiff</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Lintian::Output">Lintian::Output</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Lintian::Output::ColonSeparated">Lintian::Output::ColonSeparated</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Lintian::Output::FullEWI">Lintian::Output::FullEWI</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Lintian::Output::LetterQualifier">Lintian::Output::LetterQualifier</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Lintian::Output::XML">Lintian::Output::XML</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Lintian::Path">Lintian::Path</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Lintian::Path::FSInfo">Lintian::Path::FSInfo</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Lintian::Processable">Lintian::Processable</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Lintian::Processable::Package">Lintian::Processable::Package</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Lintian::ProcessableGroup">Lintian::ProcessableGroup</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Lintian::ProcessablePool">Lintian::ProcessablePool</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Lintian::Profile">Lintian::Profile</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Lintian::Relation">Lintian::Relation</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Lintian::Relation::Version">Lintian::Relation::Version</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Lintian::Reporting::ResourceManager">Lintian::Reporting::ResourceManager</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Lintian::SlidingWindow">Lintian::SlidingWindow</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Lintian::Tag::Info">Lintian::Tag::Info</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Lintian::Tag::Override">Lintian::Tag::Override</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Lintian::Tag::TextUtil">Lintian::Tag::TextUtil</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Lintian::Tags">Lintian::Tags</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Lintian::Unpacker">Lintian::Unpacker</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Lintian::Util">Lintian::Util</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=List::MoreUtils">List::MoreUtils</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=List::MoreUtils">List::MoreUtils</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=List::MoreUtils::PP">List::MoreUtils::PP</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=List::MoreUtils::PP">List::MoreUtils::PP</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=List::MoreUtils::XS">List::MoreUtils::XS</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=List::MoreUtils::XS">List::MoreUtils::XS</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=List::Util">List::Util</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=List::Util">List::Util</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=List::Util::XS">List::Util::XS</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=local::lib">local::lib</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=locale">locale</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Locale::gettext">Locale::gettext</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=LWP">LWP</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=LWP::Authen::Basic">LWP::Authen::Basic</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=LWP::Authen::Digest">LWP::Authen::Digest</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=LWP::Authen::Ntlm">LWP::Authen::Ntlm</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=LWP::ConnCache">LWP::ConnCache</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=LWP::Debug">LWP::Debug</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=LWP::DebugFile">LWP::DebugFile</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=LWP::MediaTypes">LWP::MediaTypes</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=LWP::MemberMixin">LWP::MemberMixin</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=LWP::Protocol">LWP::Protocol</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=LWP::Protocol::cpan">LWP::Protocol::cpan</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=LWP::Protocol::data">LWP::Protocol::data</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=LWP::Protocol::file">LWP::Protocol::file</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=LWP::Protocol::ftp">LWP::Protocol::ftp</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=LWP::Protocol::GHTTP">LWP::Protocol::GHTTP</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=LWP::Protocol::gopher">LWP::Protocol::gopher</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=LWP::Protocol::http">LWP::Protocol::http</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=LWP::Protocol::https">LWP::Protocol::https</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=LWP::Protocol::loopback">LWP::Protocol::loopback</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=LWP::Protocol::mailto">LWP::Protocol::mailto</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=LWP::Protocol::nntp">LWP::Protocol::nntp</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=LWP::Protocol::nogo">LWP::Protocol::nogo</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=LWP::RobotUA">LWP::RobotUA</a> <br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=LWP::Simple">LWP::Simple</a> <br>
+</font></td><td><font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=LWP::UserAgent">LWP::UserAgent</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Mail::Address">Mail::Address</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Mail::Cap">Mail::Cap</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Mail::Field">Mail::Field</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Mail::Field::AddrList">Mail::Field::AddrList</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Mail::Field::Date">Mail::Field::Date</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Mail::Field::Generic">Mail::Field::Generic</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Mail::Filter">Mail::Filter</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Mail::Header">Mail::Header</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Mail::Internet">Mail::Internet</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Mail::Mailer">Mail::Mailer</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Mail::Mailer::qmail">Mail::Mailer::qmail</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Mail::Mailer::rfc822">Mail::Mailer::rfc822</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Mail::Mailer::sendmail">Mail::Mailer::sendmail</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Mail::Mailer::smtp">Mail::Mailer::smtp</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Mail::Mailer::smtps">Mail::Mailer::smtps</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Mail::Mailer::testfile">Mail::Mailer::testfile</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Mail::Send">Mail::Send</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Mail::Util">Mail::Util</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=main">main</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=main">main</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=main">main</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Math::Base::Convert">Math::Base::Convert</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Math::Base::Convert::Bases">Math::Base::Convert::Bases</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Math::Base::Convert::Bitmaps">Math::Base::Convert::Bitmaps</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Math::Base::Convert::CalcPP">Math::Base::Convert::CalcPP</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Math::Base::Convert::Shortcuts">Math::Base::Convert::Shortcuts</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Math::BigFloat">Math::BigFloat</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Math::BigInt">Math::BigInt</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Math::BigInt::Calc">Math::BigInt::Calc</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Math::BigInt::CalcEmu">Math::BigInt::CalcEmu</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Math::BigInt::Lib">Math::BigInt::Lib</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Math::BigInt::Pari">Math::BigInt::Pari</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Math::Pari">Math::Pari</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Math::Pari::Arr">Math::Pari::Arr</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Math::Round">Math::Round</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=metaclass">metaclass</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Method::Generate::Accessor">Method::Generate::Accessor</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Method::Generate::BuildAll">Method::Generate::BuildAll</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Method::Generate::Constructor">Method::Generate::Constructor</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Method::Generate::DemolishAll">Method::Generate::DemolishAll</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=MIME::Charset">MIME::Charset</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=MIME::Charset::UTF">MIME::Charset::UTF</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=MIME::Charset::_Compat">MIME::Charset::_Compat</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Module::Build">Module::Build</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Module::Build">Module::Build</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Module::Build::Base">Module::Build::Base</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Module::Build::Base">Module::Build::Base</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Module::Build::Compat">Module::Build::Compat</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Module::Build::Compat">Module::Build::Compat</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Module::Build::Config">Module::Build::Config</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Module::Build::Config">Module::Build::Config</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Module::Build::ConfigData">Module::Build::ConfigData</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Module::Build::ConfigData">Module::Build::ConfigData</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Module::Build::Cookbook">Module::Build::Cookbook</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Module::Build::Cookbook">Module::Build::Cookbook</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Module::Build::Dumper">Module::Build::Dumper</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Module::Build::Dumper">Module::Build::Dumper</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Module::Build::Notes">Module::Build::Notes</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Module::Build::Notes">Module::Build::Notes</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Module::Build::Platform::aix">Module::Build::Platform::aix</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Module::Build::Platform::aix">Module::Build::Platform::aix</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Module::Build::Platform::cygwin">Module::Build::Platform::cygwin</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Module::Build::Platform::cygwin">Module::Build::Platform::cygwin</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Module::Build::Platform::darwin">Module::Build::Platform::darwin</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Module::Build::Platform::darwin">Module::Build::Platform::darwin</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Module::Build::Platform::Default">Module::Build::Platform::Default</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Module::Build::Platform::Default">Module::Build::Platform::Default</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Module::Build::Platform::MacOS">Module::Build::Platform::MacOS</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Module::Build::Platform::MacOS">Module::Build::Platform::MacOS</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Module::Build::Platform::os2">Module::Build::Platform::os2</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Module::Build::Platform::os2">Module::Build::Platform::os2</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Module::Build::Platform::Unix">Module::Build::Platform::Unix</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Module::Build::Platform::Unix">Module::Build::Platform::Unix</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Module::Build::Platform::VMS">Module::Build::Platform::VMS</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Module::Build::Platform::VMS">Module::Build::Platform::VMS</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Module::Build::Platform::VOS">Module::Build::Platform::VOS</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Module::Build::Platform::VOS">Module::Build::Platform::VOS</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Module::Build::Platform::Windows">Module::Build::Platform::Windows</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Module::Build::Platform::Windows">Module::Build::Platform::Windows</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Module::Build::PodParser">Module::Build::PodParser</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Module::Build::PodParser">Module::Build::PodParser</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Module::Build::PPMMaker">Module::Build::PPMMaker</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Module::Build::PPMMaker">Module::Build::PPMMaker</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Module::Build::Tiny">Module::Build::Tiny</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Module::Build::XSUtil">Module::Build::XSUtil</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Module::CPANfile">Module::CPANfile</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Module::CPANfile::Environment">Module::CPANfile::Environment</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Module::CPANfile::Prereq">Module::CPANfile::Prereq</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Module::CPANfile::Prereqs">Module::CPANfile::Prereqs</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Module::CPANfile::Requirement">Module::CPANfile::Requirement</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Module::Implementation">Module::Implementation</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Module::Metadata">Module::Metadata</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Module::Pluggable">Module::Pluggable</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Module::Pluggable::Object">Module::Pluggable::Object</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Module::Runtime">Module::Runtime</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Module::Runtime::Conflicts">Module::Runtime::Conflicts</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moo">Moo</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moo::HandleMoose">Moo::HandleMoose</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moo::HandleMoose::FakeMetaClass">Moo::HandleMoose::FakeMetaClass</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moo::HandleMoose::_TypeMap">Moo::HandleMoose::_TypeMap</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moo::Object">Moo::Object</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moo::Role">Moo::Role</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moo::sification">Moo::sification</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moo::_mro">Moo::_mro</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moo::_strictures">Moo::_strictures</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moo::_Utils">Moo::_Utils</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose">Moose</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Deprecated">Moose::Deprecated</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception">Moose::Exception</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::AccessorMustReadWrite">Moose::Exception::AccessorMustReadWrite</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::AddParameterizableTypeTakesParameterizableType">Moose::Exception::AddParameterizableTypeTakesParameterizableType</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::AddRoleTakesAMooseMetaRoleInstance">Moose::Exception::AddRoleTakesAMooseMetaRoleInstance</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::AddRoleToARoleTakesAMooseMetaRole">Moose::Exception::AddRoleToARoleTakesAMooseMetaRole</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::ApplyTakesABlessedInstance">Moose::Exception::ApplyTakesABlessedInstance</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::AttachToClassNeedsAClassMOPClassInstanceOrASubclass">Moose::Exception::AttachToClassNeedsAClassMOPClassInstanceOrASubclass</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::AttributeConflictInRoles">Moose::Exception::AttributeConflictInRoles</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::AttributeConflictInSummation">Moose::Exception::AttributeConflictInSummation</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::AttributeExtensionIsNotSupportedInRoles">Moose::Exception::AttributeExtensionIsNotSupportedInRoles</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::AttributeIsRequired">Moose::Exception::AttributeIsRequired</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::AttributeMustBeAnClassMOPMixinAttributeCoreOrSubclass">Moose::Exception::AttributeMustBeAnClassMOPMixinAttributeCoreOrSubclass</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::AttributeNamesDoNotMatch">Moose::Exception::AttributeNamesDoNotMatch</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::AttributeValueIsNotAnObject">Moose::Exception::AttributeValueIsNotAnObject</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::AttributeValueIsNotDefined">Moose::Exception::AttributeValueIsNotDefined</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::AutoDeRefNeedsArrayRefOrHashRef">Moose::Exception::AutoDeRefNeedsArrayRefOrHashRef</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::BadOptionFormat">Moose::Exception::BadOptionFormat</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::BothBuilderAndDefaultAreNotAllowed">Moose::Exception::BothBuilderAndDefaultAreNotAllowed</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::BuilderDoesNotExist">Moose::Exception::BuilderDoesNotExist</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::BuilderMethodNotSupportedForAttribute">Moose::Exception::BuilderMethodNotSupportedForAttribute</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::BuilderMethodNotSupportedForInlineAttribute">Moose::Exception::BuilderMethodNotSupportedForInlineAttribute</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::BuilderMustBeAMethodName">Moose::Exception::BuilderMustBeAMethodName</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::CallingMethodOnAnImmutableInstance">Moose::Exception::CallingMethodOnAnImmutableInstance</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::CallingReadOnlyMethodOnAnImmutableInstance">Moose::Exception::CallingReadOnlyMethodOnAnImmutableInstance</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::CanExtendOnlyClasses">Moose::Exception::CanExtendOnlyClasses</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::CannotAddAdditionalTypeCoercionsToUnion">Moose::Exception::CannotAddAdditionalTypeCoercionsToUnion</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::CannotAddAsAnAttributeToARole">Moose::Exception::CannotAddAsAnAttributeToARole</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::CannotApplyBaseClassRolesToRole">Moose::Exception::CannotApplyBaseClassRolesToRole</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::CannotAssignValueToReadOnlyAccessor">Moose::Exception::CannotAssignValueToReadOnlyAccessor</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::CannotAugmentIfLocalMethodPresent">Moose::Exception::CannotAugmentIfLocalMethodPresent</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::CannotAugmentNoSuperMethod">Moose::Exception::CannotAugmentNoSuperMethod</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::CannotAutoDereferenceTypeConstraint">Moose::Exception::CannotAutoDereferenceTypeConstraint</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::CannotAutoDerefWithoutIsa">Moose::Exception::CannotAutoDerefWithoutIsa</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::CannotCalculateNativeType">Moose::Exception::CannotCalculateNativeType</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::CannotCallAnAbstractBaseMethod">Moose::Exception::CannotCallAnAbstractBaseMethod</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::CannotCallAnAbstractMethod">Moose::Exception::CannotCallAnAbstractMethod</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::CannotCoerceAttributeWhichHasNoCoercion">Moose::Exception::CannotCoerceAttributeWhichHasNoCoercion</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::CannotCoerceAWeakRef">Moose::Exception::CannotCoerceAWeakRef</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::CannotCreateHigherOrderTypeWithoutATypeParameter">Moose::Exception::CannotCreateHigherOrderTypeWithoutATypeParameter</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::CannotCreateMethodAliasLocalMethodIsPresent">Moose::Exception::CannotCreateMethodAliasLocalMethodIsPresent</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::CannotCreateMethodAliasLocalMethodIsPresentInClass">Moose::Exception::CannotCreateMethodAliasLocalMethodIsPresentInClass</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::CannotDelegateLocalMethodIsPresent">Moose::Exception::CannotDelegateLocalMethodIsPresent</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::CannotDelegateWithoutIsa">Moose::Exception::CannotDelegateWithoutIsa</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::CannotFindDelegateMetaclass">Moose::Exception::CannotFindDelegateMetaclass</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::CannotFindType">Moose::Exception::CannotFindType</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::CannotFindTypeGivenToMatchOnType">Moose::Exception::CannotFindTypeGivenToMatchOnType</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::CannotFixMetaclassCompatibility">Moose::Exception::CannotFixMetaclassCompatibility</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::CannotGenerateInlineConstraint">Moose::Exception::CannotGenerateInlineConstraint</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::CannotInitializeMooseMetaRoleComposite">Moose::Exception::CannotInitializeMooseMetaRoleComposite</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::CannotInlineTypeConstraintCheck">Moose::Exception::CannotInlineTypeConstraintCheck</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::CannotLocatePackageInINC">Moose::Exception::CannotLocatePackageInINC</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::CannotMakeMetaclassCompatible">Moose::Exception::CannotMakeMetaclassCompatible</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::CannotOverrideALocalMethod">Moose::Exception::CannotOverrideALocalMethod</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::CannotOverrideBodyOfMetaMethods">Moose::Exception::CannotOverrideBodyOfMetaMethods</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::CannotOverrideLocalMethodIsPresent">Moose::Exception::CannotOverrideLocalMethodIsPresent</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::CannotOverrideNoSuperMethod">Moose::Exception::CannotOverrideNoSuperMethod</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::CannotRegisterUnnamedTypeConstraint">Moose::Exception::CannotRegisterUnnamedTypeConstraint</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::CannotUseLazyBuildAndDefaultSimultaneously">Moose::Exception::CannotUseLazyBuildAndDefaultSimultaneously</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::CanOnlyConsumeRole">Moose::Exception::CanOnlyConsumeRole</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::CanOnlyWrapBlessedCode">Moose::Exception::CanOnlyWrapBlessedCode</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::CanReblessOnlyIntoASubclass">Moose::Exception::CanReblessOnlyIntoASubclass</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::CanReblessOnlyIntoASuperclass">Moose::Exception::CanReblessOnlyIntoASuperclass</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::CircularReferenceInAlso">Moose::Exception::CircularReferenceInAlso</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::ClassDoesNotHaveInitMeta">Moose::Exception::ClassDoesNotHaveInitMeta</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::ClassDoesTheExcludedRole">Moose::Exception::ClassDoesTheExcludedRole</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::ClassNamesDoNotMatch">Moose::Exception::ClassNamesDoNotMatch</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::CloneObjectExpectsAnInstanceOfMetaclass">Moose::Exception::CloneObjectExpectsAnInstanceOfMetaclass</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::CodeBlockMustBeACodeRef">Moose::Exception::CodeBlockMustBeACodeRef</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::CoercingWithoutCoercions">Moose::Exception::CoercingWithoutCoercions</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::CoercionAlreadyExists">Moose::Exception::CoercionAlreadyExists</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::CoercionNeedsTypeConstraint">Moose::Exception::CoercionNeedsTypeConstraint</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::ConflictDetectedInCheckRoleExclusions">Moose::Exception::ConflictDetectedInCheckRoleExclusions</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::ConflictDetectedInCheckRoleExclusionsInToClass">Moose::Exception::ConflictDetectedInCheckRoleExclusionsInToClass</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::ConstructClassInstanceTakesPackageName">Moose::Exception::ConstructClassInstanceTakesPackageName</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::CouldNotCreateMethod">Moose::Exception::CouldNotCreateMethod</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::CouldNotCreateWriter">Moose::Exception::CouldNotCreateWriter</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::CouldNotEvalConstructor">Moose::Exception::CouldNotEvalConstructor</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::CouldNotEvalDestructor">Moose::Exception::CouldNotEvalDestructor</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::CouldNotFindTypeConstraintToCoerceFrom">Moose::Exception::CouldNotFindTypeConstraintToCoerceFrom</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::CouldNotGenerateInlineAttributeMethod">Moose::Exception::CouldNotGenerateInlineAttributeMethod</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::CouldNotLocateTypeConstraintForUnion">Moose::Exception::CouldNotLocateTypeConstraintForUnion</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::CouldNotParseType">Moose::Exception::CouldNotParseType</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::CreateMOPClassTakesArrayRefOfAttributes">Moose::Exception::CreateMOPClassTakesArrayRefOfAttributes</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::CreateMOPClassTakesArrayRefOfSuperclasses">Moose::Exception::CreateMOPClassTakesArrayRefOfSuperclasses</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::CreateMOPClassTakesHashRefOfMethods">Moose::Exception::CreateMOPClassTakesHashRefOfMethods</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::CreateTakesArrayRefOfRoles">Moose::Exception::CreateTakesArrayRefOfRoles</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::CreateTakesHashRefOfAttributes">Moose::Exception::CreateTakesHashRefOfAttributes</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::CreateTakesHashRefOfMethods">Moose::Exception::CreateTakesHashRefOfMethods</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::DefaultToMatchOnTypeMustBeCodeRef">Moose::Exception::DefaultToMatchOnTypeMustBeCodeRef</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::DelegationToAClassWhichIsNotLoaded">Moose::Exception::DelegationToAClassWhichIsNotLoaded</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::DelegationToARoleWhichIsNotLoaded">Moose::Exception::DelegationToARoleWhichIsNotLoaded</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::DelegationToATypeWhichIsNotAClass">Moose::Exception::DelegationToATypeWhichIsNotAClass</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::DoesRequiresRoleName">Moose::Exception::DoesRequiresRoleName</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::EnumCalledWithAnArrayRefAndAdditionalArgs">Moose::Exception::EnumCalledWithAnArrayRefAndAdditionalArgs</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::EnumValuesMustBeString">Moose::Exception::EnumValuesMustBeString</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::ExtendsMissingArgs">Moose::Exception::ExtendsMissingArgs</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::HandlesMustBeAHashRef">Moose::Exception::HandlesMustBeAHashRef</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::IllegalInheritedOptions">Moose::Exception::IllegalInheritedOptions</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::IllegalMethodTypeToAddMethodModifier">Moose::Exception::IllegalMethodTypeToAddMethodModifier</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::IncompatibleMetaclassOfSuperclass">Moose::Exception::IncompatibleMetaclassOfSuperclass</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::InitializeTakesUnBlessedPackageName">Moose::Exception::InitializeTakesUnBlessedPackageName</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::InitMetaRequiresClass">Moose::Exception::InitMetaRequiresClass</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::InstanceBlessedIntoWrongClass">Moose::Exception::InstanceBlessedIntoWrongClass</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::InstanceMustBeABlessedReference">Moose::Exception::InstanceMustBeABlessedReference</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::InvalidArgPassedToMooseUtilMetaRole">Moose::Exception::InvalidArgPassedToMooseUtilMetaRole</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::InvalidArgumentsToTraitAliases">Moose::Exception::InvalidArgumentsToTraitAliases</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::InvalidArgumentToMethod">Moose::Exception::InvalidArgumentToMethod</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::InvalidBaseTypeGivenToCreateParameterizedTypeConstraint">Moose::Exception::InvalidBaseTypeGivenToCreateParameterizedTypeConstraint</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::InvalidHandleValue">Moose::Exception::InvalidHandleValue</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::InvalidHasProvidedInARole">Moose::Exception::InvalidHasProvidedInARole</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::InvalidNameForType">Moose::Exception::InvalidNameForType</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::InvalidOverloadOperator">Moose::Exception::InvalidOverloadOperator</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::InvalidRoleApplication">Moose::Exception::InvalidRoleApplication</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::InvalidTypeConstraint">Moose::Exception::InvalidTypeConstraint</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::InvalidTypeGivenToCreateParameterizedTypeConstraint">Moose::Exception::InvalidTypeGivenToCreateParameterizedTypeConstraint</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::InvalidValueForIs">Moose::Exception::InvalidValueForIs</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::IsaDoesNotDoTheRole">Moose::Exception::IsaDoesNotDoTheRole</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::IsaLacksDoesMethod">Moose::Exception::IsaLacksDoesMethod</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::LazyAttributeNeedsADefault">Moose::Exception::LazyAttributeNeedsADefault</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::Legacy">Moose::Exception::Legacy</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::MatchActionMustBeACodeRef">Moose::Exception::MatchActionMustBeACodeRef</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::MessageParameterMustBeCodeRef">Moose::Exception::MessageParameterMustBeCodeRef</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::MetaclassIsAClassNotASubclassOfGivenMetaclass">Moose::Exception::MetaclassIsAClassNotASubclassOfGivenMetaclass</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::MetaclassIsARoleNotASubclassOfGivenMetaclass">Moose::Exception::MetaclassIsARoleNotASubclassOfGivenMetaclass</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::MetaclassIsNotASubclassOfGivenMetaclass">Moose::Exception::MetaclassIsNotASubclassOfGivenMetaclass</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::MetaclassMustBeASubclassOfMooseMetaClass">Moose::Exception::MetaclassMustBeASubclassOfMooseMetaClass</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::MetaclassMustBeASubclassOfMooseMetaRole">Moose::Exception::MetaclassMustBeASubclassOfMooseMetaRole</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::MetaclassMustBeDerivedFromClassMOPClass">Moose::Exception::MetaclassMustBeDerivedFromClassMOPClass</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::MetaclassNotLoaded">Moose::Exception::MetaclassNotLoaded</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::MetaclassTypeIncompatible">Moose::Exception::MetaclassTypeIncompatible</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::MethodExpectedAMetaclassObject">Moose::Exception::MethodExpectedAMetaclassObject</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::MethodExpectsFewerArgs">Moose::Exception::MethodExpectsFewerArgs</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::MethodExpectsMoreArgs">Moose::Exception::MethodExpectsMoreArgs</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::MethodModifierNeedsMethodName">Moose::Exception::MethodModifierNeedsMethodName</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::MethodNameConflictInRoles">Moose::Exception::MethodNameConflictInRoles</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::MethodNameNotFoundInInheritanceHierarchy">Moose::Exception::MethodNameNotFoundInInheritanceHierarchy</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::MethodNameNotGiven">Moose::Exception::MethodNameNotGiven</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::MOPAttributeNewNeedsAttributeName">Moose::Exception::MOPAttributeNewNeedsAttributeName</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::MustDefineAMethodName">Moose::Exception::MustDefineAMethodName</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::MustDefineAnAttributeName">Moose::Exception::MustDefineAnAttributeName</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::MustDefineAnOverloadOperator">Moose::Exception::MustDefineAnOverloadOperator</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::MustHaveAtLeastOneValueToEnumerate">Moose::Exception::MustHaveAtLeastOneValueToEnumerate</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::MustPassAHashOfOptions">Moose::Exception::MustPassAHashOfOptions</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::MustPassAMooseMetaRoleInstanceOrSubclass">Moose::Exception::MustPassAMooseMetaRoleInstanceOrSubclass</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::MustPassAPackageNameOrAnExistingClassMOPPackageInstance">Moose::Exception::MustPassAPackageNameOrAnExistingClassMOPPackageInstance</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::MustPassEvenNumberOfArguments">Moose::Exception::MustPassEvenNumberOfArguments</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::MustPassEvenNumberOfAttributeOptions">Moose::Exception::MustPassEvenNumberOfAttributeOptions</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::MustProvideANameForTheAttribute">Moose::Exception::MustProvideANameForTheAttribute</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::MustSpecifyAtleastOneMethod">Moose::Exception::MustSpecifyAtleastOneMethod</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::MustSpecifyAtleastOneRole">Moose::Exception::MustSpecifyAtleastOneRole</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::MustSpecifyAtleastOneRoleToApplicant">Moose::Exception::MustSpecifyAtleastOneRoleToApplicant</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::MustSupplyAClassMOPAttributeInstance">Moose::Exception::MustSupplyAClassMOPAttributeInstance</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::MustSupplyADelegateToMethod">Moose::Exception::MustSupplyADelegateToMethod</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::MustSupplyAMetaclass">Moose::Exception::MustSupplyAMetaclass</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::MustSupplyAMooseMetaAttributeInstance">Moose::Exception::MustSupplyAMooseMetaAttributeInstance</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::MustSupplyAnAccessorTypeToConstructWith">Moose::Exception::MustSupplyAnAccessorTypeToConstructWith</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::MustSupplyAnAttributeToConstructWith">Moose::Exception::MustSupplyAnAttributeToConstructWith</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::MustSupplyArrayRefAsCurriedArguments">Moose::Exception::MustSupplyArrayRefAsCurriedArguments</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::MustSupplyPackageNameAndName">Moose::Exception::MustSupplyPackageNameAndName</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::NeedsTypeConstraintUnionForTypeCoercionUnion">Moose::Exception::NeedsTypeConstraintUnionForTypeCoercionUnion</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::NeitherAttributeNorAttributeNameIsGiven">Moose::Exception::NeitherAttributeNorAttributeNameIsGiven</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::NeitherClassNorClassNameIsGiven">Moose::Exception::NeitherClassNorClassNameIsGiven</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::NeitherRoleNorRoleNameIsGiven">Moose::Exception::NeitherRoleNorRoleNameIsGiven</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::NeitherTypeNorTypeNameIsGiven">Moose::Exception::NeitherTypeNorTypeNameIsGiven</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::NoAttributeFoundInSuperClass">Moose::Exception::NoAttributeFoundInSuperClass</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::NoBodyToInitializeInAnAbstractBaseClass">Moose::Exception::NoBodyToInitializeInAnAbstractBaseClass</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::NoCasesMatched">Moose::Exception::NoCasesMatched</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::NoConstraintCheckForTypeConstraint">Moose::Exception::NoConstraintCheckForTypeConstraint</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::NoDestructorClassSpecified">Moose::Exception::NoDestructorClassSpecified</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::NoImmutableTraitSpecifiedForClass">Moose::Exception::NoImmutableTraitSpecifiedForClass</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::NoParentGivenToSubtype">Moose::Exception::NoParentGivenToSubtype</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::OnlyInstancesCanBeCloned">Moose::Exception::OnlyInstancesCanBeCloned</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::OperatorIsRequired">Moose::Exception::OperatorIsRequired</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::OverloadConflictInSummation">Moose::Exception::OverloadConflictInSummation</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::OverloadRequiresAMetaClass">Moose::Exception::OverloadRequiresAMetaClass</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::OverloadRequiresAMetaMethod">Moose::Exception::OverloadRequiresAMetaMethod</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::OverloadRequiresAMetaOverload">Moose::Exception::OverloadRequiresAMetaOverload</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::OverloadRequiresAMethodNameOrCoderef">Moose::Exception::OverloadRequiresAMethodNameOrCoderef</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::OverloadRequiresAnOperator">Moose::Exception::OverloadRequiresAnOperator</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::OverloadRequiresNamesForCoderef">Moose::Exception::OverloadRequiresNamesForCoderef</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::OverrideConflictInComposition">Moose::Exception::OverrideConflictInComposition</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::OverrideConflictInSummation">Moose::Exception::OverrideConflictInSummation</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::PackageDoesNotUseMooseExporter">Moose::Exception::PackageDoesNotUseMooseExporter</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::PackageNameAndNameParamsNotGivenToWrap">Moose::Exception::PackageNameAndNameParamsNotGivenToWrap</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::PackagesAndModulesAreNotCachable">Moose::Exception::PackagesAndModulesAreNotCachable</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::ParameterIsNotSubtypeOfParent">Moose::Exception::ParameterIsNotSubtypeOfParent</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::ReferencesAreNotAllowedAsDefault">Moose::Exception::ReferencesAreNotAllowedAsDefault</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::RequiredAttributeLacksInitialization">Moose::Exception::RequiredAttributeLacksInitialization</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::RequiredAttributeNeedsADefault">Moose::Exception::RequiredAttributeNeedsADefault</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::RequiredMethodsImportedByClass">Moose::Exception::RequiredMethodsImportedByClass</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::RequiredMethodsNotImplementedByClass">Moose::Exception::RequiredMethodsNotImplementedByClass</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::Role::Attribute">Moose::Exception::Role::Attribute</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::Role::AttributeName">Moose::Exception::Role::AttributeName</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::Role::Class">Moose::Exception::Role::Class</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::Role::EitherAttributeOrAttributeName">Moose::Exception::Role::EitherAttributeOrAttributeName</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::Role::Instance">Moose::Exception::Role::Instance</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::Role::InstanceClass">Moose::Exception::Role::InstanceClass</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::Role::InvalidAttributeOptions">Moose::Exception::Role::InvalidAttributeOptions</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::Role::Method">Moose::Exception::Role::Method</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::Role::ParamsHash">Moose::Exception::Role::ParamsHash</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::Role::Role">Moose::Exception::Role::Role</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::Role::RoleForCreate">Moose::Exception::Role::RoleForCreate</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::Role::RoleForCreateMOPClass">Moose::Exception::Role::RoleForCreateMOPClass</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::Role::TypeConstraint">Moose::Exception::Role::TypeConstraint</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::RoleDoesTheExcludedRole">Moose::Exception::RoleDoesTheExcludedRole</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::RoleExclusionConflict">Moose::Exception::RoleExclusionConflict</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::RoleNameRequired">Moose::Exception::RoleNameRequired</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::RoleNameRequiredForMooseMetaRole">Moose::Exception::RoleNameRequiredForMooseMetaRole</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::RolesDoNotSupportAugment">Moose::Exception::RolesDoNotSupportAugment</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::RolesDoNotSupportExtends">Moose::Exception::RolesDoNotSupportExtends</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::RolesDoNotSupportInner">Moose::Exception::RolesDoNotSupportInner</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::RolesDoNotSupportRegexReferencesForMethodModifiers">Moose::Exception::RolesDoNotSupportRegexReferencesForMethodModifiers</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::RolesInCreateTakesAnArrayRef">Moose::Exception::RolesInCreateTakesAnArrayRef</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::RolesListMustBeInstancesOfMooseMetaRole">Moose::Exception::RolesListMustBeInstancesOfMooseMetaRole</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::SingleParamsToNewMustBeHashRef">Moose::Exception::SingleParamsToNewMustBeHashRef</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::TriggerMustBeACodeRef">Moose::Exception::TriggerMustBeACodeRef</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::TypeConstraintCannotBeUsedForAParameterizableType">Moose::Exception::TypeConstraintCannotBeUsedForAParameterizableType</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::TypeConstraintIsAlreadyCreated">Moose::Exception::TypeConstraintIsAlreadyCreated</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::TypeParameterMustBeMooseMetaType">Moose::Exception::TypeParameterMustBeMooseMetaType</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::UnableToCanonicalizeHandles">Moose::Exception::UnableToCanonicalizeHandles</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::UnableToCanonicalizeNonRolePackage">Moose::Exception::UnableToCanonicalizeNonRolePackage</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::UnableToRecognizeDelegateMetaclass">Moose::Exception::UnableToRecognizeDelegateMetaclass</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::UndefinedHashKeysPassedToMethod">Moose::Exception::UndefinedHashKeysPassedToMethod</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::UnionCalledWithAnArrayRefAndAdditionalArgs">Moose::Exception::UnionCalledWithAnArrayRefAndAdditionalArgs</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::UnionTakesAtleastTwoTypeNames">Moose::Exception::UnionTakesAtleastTwoTypeNames</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::ValidationFailedForInlineTypeConstraint">Moose::Exception::ValidationFailedForInlineTypeConstraint</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::ValidationFailedForTypeConstraint">Moose::Exception::ValidationFailedForTypeConstraint</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::WrapTakesACodeRefToBless">Moose::Exception::WrapTakesACodeRefToBless</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exception::WrongTypeConstraintGiven">Moose::Exception::WrongTypeConstraintGiven</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Exporter">Moose::Exporter</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::Attribute">Moose::Meta::Attribute</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::Attribute::Native">Moose::Meta::Attribute::Native</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::Attribute::Native::Trait">Moose::Meta::Attribute::Native::Trait</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::Attribute::Native::Trait::Array">Moose::Meta::Attribute::Native::Trait::Array</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::Attribute::Native::Trait::Bool">Moose::Meta::Attribute::Native::Trait::Bool</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::Attribute::Native::Trait::Code">Moose::Meta::Attribute::Native::Trait::Code</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::Attribute::Native::Trait::Counter">Moose::Meta::Attribute::Native::Trait::Counter</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::Attribute::Native::Trait::Hash">Moose::Meta::Attribute::Native::Trait::Hash</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::Attribute::Native::Trait::Number">Moose::Meta::Attribute::Native::Trait::Number</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::Attribute::Native::Trait::String">Moose::Meta::Attribute::Native::Trait::String</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::Class">Moose::Meta::Class</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::Class::Immutable::Trait">Moose::Meta::Class::Immutable::Trait</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::Instance">Moose::Meta::Instance</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::Method">Moose::Meta::Method</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::Method::Accessor">Moose::Meta::Method::Accessor</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::Method::Accessor::Native">Moose::Meta::Method::Accessor::Native</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::Method::Accessor::Native::Array">Moose::Meta::Method::Accessor::Native::Array</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::Method::Accessor::Native::Array::accessor">Moose::Meta::Method::Accessor::Native::Array::accessor</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::Method::Accessor::Native::Array::clear">Moose::Meta::Method::Accessor::Native::Array::clear</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::Method::Accessor::Native::Array::count">Moose::Meta::Method::Accessor::Native::Array::count</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::Method::Accessor::Native::Array::delete">Moose::Meta::Method::Accessor::Native::Array::delete</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::Method::Accessor::Native::Array::elements">Moose::Meta::Method::Accessor::Native::Array::elements</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::Method::Accessor::Native::Array::first">Moose::Meta::Method::Accessor::Native::Array::first</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::Method::Accessor::Native::Array::first_index">Moose::Meta::Method::Accessor::Native::Array::first_index</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::Method::Accessor::Native::Array::get">Moose::Meta::Method::Accessor::Native::Array::get</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::Method::Accessor::Native::Array::grep">Moose::Meta::Method::Accessor::Native::Array::grep</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::Method::Accessor::Native::Array::insert">Moose::Meta::Method::Accessor::Native::Array::insert</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::Method::Accessor::Native::Array::is_empty">Moose::Meta::Method::Accessor::Native::Array::is_empty</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::Method::Accessor::Native::Array::join">Moose::Meta::Method::Accessor::Native::Array::join</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::Method::Accessor::Native::Array::map">Moose::Meta::Method::Accessor::Native::Array::map</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::Method::Accessor::Native::Array::natatime">Moose::Meta::Method::Accessor::Native::Array::natatime</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::Method::Accessor::Native::Array::pop">Moose::Meta::Method::Accessor::Native::Array::pop</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::Method::Accessor::Native::Array::push">Moose::Meta::Method::Accessor::Native::Array::push</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::Method::Accessor::Native::Array::reduce">Moose::Meta::Method::Accessor::Native::Array::reduce</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::Method::Accessor::Native::Array::set">Moose::Meta::Method::Accessor::Native::Array::set</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::Method::Accessor::Native::Array::shallow_clone">Moose::Meta::Method::Accessor::Native::Array::shallow_clone</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::Method::Accessor::Native::Array::shift">Moose::Meta::Method::Accessor::Native::Array::shift</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::Method::Accessor::Native::Array::shuffle">Moose::Meta::Method::Accessor::Native::Array::shuffle</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::Method::Accessor::Native::Array::sort">Moose::Meta::Method::Accessor::Native::Array::sort</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::Method::Accessor::Native::Array::sort_in_place">Moose::Meta::Method::Accessor::Native::Array::sort_in_place</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::Method::Accessor::Native::Array::splice">Moose::Meta::Method::Accessor::Native::Array::splice</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::Method::Accessor::Native::Array::uniq">Moose::Meta::Method::Accessor::Native::Array::uniq</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::Method::Accessor::Native::Array::unshift">Moose::Meta::Method::Accessor::Native::Array::unshift</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::Method::Accessor::Native::Array::Writer">Moose::Meta::Method::Accessor::Native::Array::Writer</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::Method::Accessor::Native::Bool::not">Moose::Meta::Method::Accessor::Native::Bool::not</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::Method::Accessor::Native::Bool::set">Moose::Meta::Method::Accessor::Native::Bool::set</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::Method::Accessor::Native::Bool::toggle">Moose::Meta::Method::Accessor::Native::Bool::toggle</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::Method::Accessor::Native::Bool::unset">Moose::Meta::Method::Accessor::Native::Bool::unset</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::Method::Accessor::Native::Code::execute">Moose::Meta::Method::Accessor::Native::Code::execute</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::Method::Accessor::Native::Code::execute_method">Moose::Meta::Method::Accessor::Native::Code::execute_method</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::Method::Accessor::Native::Collection">Moose::Meta::Method::Accessor::Native::Collection</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::Method::Accessor::Native::Counter::dec">Moose::Meta::Method::Accessor::Native::Counter::dec</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::Method::Accessor::Native::Counter::inc">Moose::Meta::Method::Accessor::Native::Counter::inc</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::Method::Accessor::Native::Counter::reset">Moose::Meta::Method::Accessor::Native::Counter::reset</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::Method::Accessor::Native::Counter::set">Moose::Meta::Method::Accessor::Native::Counter::set</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::Method::Accessor::Native::Counter::Writer">Moose::Meta::Method::Accessor::Native::Counter::Writer</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::Method::Accessor::Native::Hash">Moose::Meta::Method::Accessor::Native::Hash</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::Method::Accessor::Native::Hash::accessor">Moose::Meta::Method::Accessor::Native::Hash::accessor</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::Method::Accessor::Native::Hash::clear">Moose::Meta::Method::Accessor::Native::Hash::clear</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::Method::Accessor::Native::Hash::count">Moose::Meta::Method::Accessor::Native::Hash::count</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::Method::Accessor::Native::Hash::defined">Moose::Meta::Method::Accessor::Native::Hash::defined</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::Method::Accessor::Native::Hash::delete">Moose::Meta::Method::Accessor::Native::Hash::delete</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::Method::Accessor::Native::Hash::elements">Moose::Meta::Method::Accessor::Native::Hash::elements</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::Method::Accessor::Native::Hash::exists">Moose::Meta::Method::Accessor::Native::Hash::exists</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::Method::Accessor::Native::Hash::get">Moose::Meta::Method::Accessor::Native::Hash::get</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::Method::Accessor::Native::Hash::is_empty">Moose::Meta::Method::Accessor::Native::Hash::is_empty</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::Method::Accessor::Native::Hash::keys">Moose::Meta::Method::Accessor::Native::Hash::keys</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::Method::Accessor::Native::Hash::kv">Moose::Meta::Method::Accessor::Native::Hash::kv</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::Method::Accessor::Native::Hash::set">Moose::Meta::Method::Accessor::Native::Hash::set</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::Method::Accessor::Native::Hash::shallow_clone">Moose::Meta::Method::Accessor::Native::Hash::shallow_clone</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::Method::Accessor::Native::Hash::values">Moose::Meta::Method::Accessor::Native::Hash::values</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::Method::Accessor::Native::Hash::Writer">Moose::Meta::Method::Accessor::Native::Hash::Writer</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::Method::Accessor::Native::Number::abs">Moose::Meta::Method::Accessor::Native::Number::abs</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::Method::Accessor::Native::Number::add">Moose::Meta::Method::Accessor::Native::Number::add</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::Method::Accessor::Native::Number::div">Moose::Meta::Method::Accessor::Native::Number::div</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::Method::Accessor::Native::Number::mod">Moose::Meta::Method::Accessor::Native::Number::mod</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::Method::Accessor::Native::Number::mul">Moose::Meta::Method::Accessor::Native::Number::mul</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::Method::Accessor::Native::Number::set">Moose::Meta::Method::Accessor::Native::Number::set</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::Method::Accessor::Native::Number::sub">Moose::Meta::Method::Accessor::Native::Number::sub</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::Method::Accessor::Native::Reader">Moose::Meta::Method::Accessor::Native::Reader</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::Method::Accessor::Native::String::append">Moose::Meta::Method::Accessor::Native::String::append</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::Method::Accessor::Native::String::chomp">Moose::Meta::Method::Accessor::Native::String::chomp</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::Method::Accessor::Native::String::chop">Moose::Meta::Method::Accessor::Native::String::chop</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::Method::Accessor::Native::String::clear">Moose::Meta::Method::Accessor::Native::String::clear</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::Method::Accessor::Native::String::inc">Moose::Meta::Method::Accessor::Native::String::inc</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::Method::Accessor::Native::String::length">Moose::Meta::Method::Accessor::Native::String::length</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::Method::Accessor::Native::String::match">Moose::Meta::Method::Accessor::Native::String::match</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::Method::Accessor::Native::String::prepend">Moose::Meta::Method::Accessor::Native::String::prepend</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::Method::Accessor::Native::String::replace">Moose::Meta::Method::Accessor::Native::String::replace</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::Method::Accessor::Native::String::substr">Moose::Meta::Method::Accessor::Native::String::substr</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::Method::Accessor::Native::Writer">Moose::Meta::Method::Accessor::Native::Writer</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::Method::Augmented">Moose::Meta::Method::Augmented</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::Method::Constructor">Moose::Meta::Method::Constructor</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::Method::Delegation">Moose::Meta::Method::Delegation</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::Method::Destructor">Moose::Meta::Method::Destructor</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::Method::Meta">Moose::Meta::Method::Meta</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::Method::Overridden">Moose::Meta::Method::Overridden</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::Mixin::AttributeCore">Moose::Meta::Mixin::AttributeCore</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::Object::Trait">Moose::Meta::Object::Trait</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::Role">Moose::Meta::Role</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::Role::Application">Moose::Meta::Role::Application</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::Role::Application::RoleSummation">Moose::Meta::Role::Application::RoleSummation</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::Role::Application::ToClass">Moose::Meta::Role::Application::ToClass</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::Role::Application::ToInstance">Moose::Meta::Role::Application::ToInstance</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::Role::Application::ToRole">Moose::Meta::Role::Application::ToRole</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::Role::Attribute">Moose::Meta::Role::Attribute</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::Role::Composite">Moose::Meta::Role::Composite</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::Role::Method">Moose::Meta::Role::Method</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::Role::Method::Conflicting">Moose::Meta::Role::Method::Conflicting</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::Role::Method::Required">Moose::Meta::Role::Method::Required</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::TypeCoercion">Moose::Meta::TypeCoercion</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::TypeCoercion::Union">Moose::Meta::TypeCoercion::Union</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::TypeConstraint">Moose::Meta::TypeConstraint</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::TypeConstraint::Class">Moose::Meta::TypeConstraint::Class</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::TypeConstraint::DuckType">Moose::Meta::TypeConstraint::DuckType</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::TypeConstraint::Enum">Moose::Meta::TypeConstraint::Enum</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::TypeConstraint::Parameterizable">Moose::Meta::TypeConstraint::Parameterizable</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::TypeConstraint::Parameterized">Moose::Meta::TypeConstraint::Parameterized</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::TypeConstraint::Registry">Moose::Meta::TypeConstraint::Registry</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::TypeConstraint::Role">Moose::Meta::TypeConstraint::Role</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Meta::TypeConstraint::Union">Moose::Meta::TypeConstraint::Union</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Object">Moose::Object</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Role">Moose::Role</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Util">Moose::Util</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Util::MetaRole">Moose::Util::MetaRole</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Util::TypeConstraints">Moose::Util::TypeConstraints</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Moose::Util::TypeConstraints::Builtins">Moose::Util::TypeConstraints::Builtins</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=MooseX::Role::Parameterised">MooseX::Role::Parameterised</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=MooseX::Role::Parameterized">MooseX::Role::Parameterized</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=MooseX::Role::Parameterized::Meta::Role::Parameterized">MooseX::Role::Parameterized::Meta::Role::Parameterized</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=MooseX::Role::Parameterized::Meta::Trait::Parameterizable">MooseX::Role::Parameterized::Meta::Trait::Parameterizable</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=MooseX::Role::Parameterized::Meta::Trait::Parameterized">MooseX::Role::Parameterized::Meta::Trait::Parameterized</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=MooseX::Role::Parameterized::Parameters">MooseX::Role::Parameterized::Parameters</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=MooseX::Role::WithOverloading">MooseX::Role::WithOverloading</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=MooseX::Role::WithOverloading::Meta::Role">MooseX::Role::WithOverloading::Meta::Role</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=MooseX::Role::WithOverloading::Meta::Role::Application">MooseX::Role::WithOverloading::Meta::Role::Application</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=MooseX::Role::WithOverloading::Meta::Role::Application::Composite">MooseX::Role::WithOverloading::Meta::Role::Application::Composite</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=MooseX::Role::WithOverloading::Meta::Role::Application::Composite::ToClass">MooseX::Role::WithOverloading::Meta::Role::Application::Composite::ToClass</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=MooseX::Role::WithOverloading::Meta::Role::Application::Composite::ToInstance">MooseX::Role::WithOverloading::Meta::Role::Application::Composite::ToInstance</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=MooseX::Role::WithOverloading::Meta::Role::Application::Composite::ToRole">MooseX::Role::WithOverloading::Meta::Role::Application::Composite::ToRole</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=MooseX::Role::WithOverloading::Meta::Role::Application::FixOverloadedRefs">MooseX::Role::WithOverloading::Meta::Role::Application::FixOverloadedRefs</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=MooseX::Role::WithOverloading::Meta::Role::Application::ToClass">MooseX::Role::WithOverloading::Meta::Role::Application::ToClass</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=MooseX::Role::WithOverloading::Meta::Role::Application::ToInstance">MooseX::Role::WithOverloading::Meta::Role::Application::ToInstance</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=MooseX::Role::WithOverloading::Meta::Role::Application::ToRole">MooseX::Role::WithOverloading::Meta::Role::Application::ToRole</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=MooseX::Role::WithOverloading::Meta::Role::Composite">MooseX::Role::WithOverloading::Meta::Role::Composite</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=MooseX::Traits">MooseX::Traits</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=MooseX::Traits::Util">MooseX::Traits::Util</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=MooseX::Types">MooseX::Types</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=MooseX::Types::Base">MooseX::Types::Base</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=MooseX::Types::CheckedUtilExports">MooseX::Types::CheckedUtilExports</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=MooseX::Types::Combine">MooseX::Types::Combine</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=MooseX::Types::Moose">MooseX::Types::Moose</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=MooseX::Types::Structured">MooseX::Types::Structured</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=MooseX::Types::TypeDecorator">MooseX::Types::TypeDecorator</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=MooseX::Types::UndefinedType">MooseX::Types::UndefinedType</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=MooseX::Types::Util">MooseX::Types::Util</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=MooseX::Types::Wrapper">MooseX::Types::Wrapper</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=MRO::Compat">MRO::Compat</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Music::Player::UnknownFormat">Music::Player::UnknownFormat</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=namespace::autoclean">namespace::autoclean</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=namespace::clean">namespace::clean</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Net::DBus">Net::DBus</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Net::DBus::Annotation">Net::DBus::Annotation</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Net::DBus::ASyncReply">Net::DBus::ASyncReply</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Net::DBus::BaseObject">Net::DBus::BaseObject</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Net::DBus::Binding::Bus">Net::DBus::Binding::Bus</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Net::DBus::Binding::Connection">Net::DBus::Binding::Connection</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Net::DBus::Binding::Introspector">Net::DBus::Binding::Introspector</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Net::DBus::Binding::Iterator">Net::DBus::Binding::Iterator</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Net::DBus::Binding::Message">Net::DBus::Binding::Message</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Net::DBus::Binding::Message::Error">Net::DBus::Binding::Message::Error</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Net::DBus::Binding::Message::MethodCall">Net::DBus::Binding::Message::MethodCall</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Net::DBus::Binding::Message::MethodReturn">Net::DBus::Binding::Message::MethodReturn</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Net::DBus::Binding::Message::Signal">Net::DBus::Binding::Message::Signal</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Net::DBus::Binding::PendingCall">Net::DBus::Binding::PendingCall</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Net::DBus::Binding::Server">Net::DBus::Binding::Server</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Net::DBus::Binding::Value">Net::DBus::Binding::Value</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Net::DBus::Binding::Watch">Net::DBus::Binding::Watch</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Net::DBus::Callback">Net::DBus::Callback</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Net::DBus::Dumper">Net::DBus::Dumper</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Net::DBus::Reactor">Net::DBus::Reactor</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Net::DBus::RemoteObject">Net::DBus::RemoteObject</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Net::DBus::RemoteService">Net::DBus::RemoteService</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Net::DBus::Test::MockConnection">Net::DBus::Test::MockConnection</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Net::DBus::Test::MockIterator">Net::DBus::Test::MockIterator</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Net::DBus::Test::MockMessage">Net::DBus::Test::MockMessage</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Net::DBus::Test::MockObject">Net::DBus::Test::MockObject</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Net::DNS">Net::DNS</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Net::DNS::Domain">Net::DNS::Domain</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Net::DNS::DomainName">Net::DNS::DomainName</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Net::DNS::Header">Net::DNS::Header</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Net::DNS::Mailbox">Net::DNS::Mailbox</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Net::DNS::Nameserver">Net::DNS::Nameserver</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Net::DNS::Packet">Net::DNS::Packet</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Net::DNS::Parameters">Net::DNS::Parameters</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Net::DNS::Question">Net::DNS::Question</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Net::DNS::Resolver">Net::DNS::Resolver</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Net::DNS::Resolver::android">Net::DNS::Resolver::android</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Net::DNS::Resolver::Base">Net::DNS::Resolver::Base</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Net::DNS::Resolver::cygwin">Net::DNS::Resolver::cygwin</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Net::DNS::Resolver::MSWin32">Net::DNS::Resolver::MSWin32</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Net::DNS::Resolver::os2">Net::DNS::Resolver::os2</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Net::DNS::Resolver::Recurse">Net::DNS::Resolver::Recurse</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Net::DNS::Resolver::UNIX">Net::DNS::Resolver::UNIX</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Net::DNS::RR">Net::DNS::RR</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Net::DNS::RR::A">Net::DNS::RR::A</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Net::DNS::RR::AAAA">Net::DNS::RR::AAAA</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Net::DNS::RR::AFSDB">Net::DNS::RR::AFSDB</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Net::DNS::RR::APL">Net::DNS::RR::APL</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Net::DNS::RR::CAA">Net::DNS::RR::CAA</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Net::DNS::RR::CERT">Net::DNS::RR::CERT</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Net::DNS::RR::CNAME">Net::DNS::RR::CNAME</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Net::DNS::RR::DHCID">Net::DNS::RR::DHCID</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Net::DNS::RR::DNAME">Net::DNS::RR::DNAME</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Net::DNS::RR::EUI48">Net::DNS::RR::EUI48</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Net::DNS::RR::EUI64">Net::DNS::RR::EUI64</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Net::DNS::RR::GPOS">Net::DNS::RR::GPOS</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Net::DNS::RR::HINFO">Net::DNS::RR::HINFO</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Net::DNS::RR::HIP">Net::DNS::RR::HIP</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Net::DNS::RR::IPSECKEY">Net::DNS::RR::IPSECKEY</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Net::DNS::RR::ISDN">Net::DNS::RR::ISDN</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Net::DNS::RR::KX">Net::DNS::RR::KX</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Net::DNS::RR::L32">Net::DNS::RR::L32</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Net::DNS::RR::L64">Net::DNS::RR::L64</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Net::DNS::RR::LOC">Net::DNS::RR::LOC</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Net::DNS::RR::LP">Net::DNS::RR::LP</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Net::DNS::RR::MB">Net::DNS::RR::MB</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Net::DNS::RR::MG">Net::DNS::RR::MG</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Net::DNS::RR::MINFO">Net::DNS::RR::MINFO</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Net::DNS::RR::MR">Net::DNS::RR::MR</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Net::DNS::RR::MX">Net::DNS::RR::MX</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Net::DNS::RR::NAPTR">Net::DNS::RR::NAPTR</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Net::DNS::RR::NID">Net::DNS::RR::NID</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Net::DNS::RR::NS">Net::DNS::RR::NS</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Net::DNS::RR::NULL">Net::DNS::RR::NULL</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Net::DNS::RR::OPENPGPKEY">Net::DNS::RR::OPENPGPKEY</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Net::DNS::RR::OPT">Net::DNS::RR::OPT</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Net::DNS::RR::PTR">Net::DNS::RR::PTR</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Net::DNS::RR::PX">Net::DNS::RR::PX</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Net::DNS::RR::RP">Net::DNS::RR::RP</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Net::DNS::RR::RT">Net::DNS::RR::RT</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Net::DNS::RR::SOA">Net::DNS::RR::SOA</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Net::DNS::RR::SPF">Net::DNS::RR::SPF</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Net::DNS::RR::SRV">Net::DNS::RR::SRV</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Net::DNS::RR::SSHFP">Net::DNS::RR::SSHFP</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Net::DNS::RR::TKEY">Net::DNS::RR::TKEY</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Net::DNS::RR::TLSA">Net::DNS::RR::TLSA</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Net::DNS::RR::TSIG">Net::DNS::RR::TSIG</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Net::DNS::RR::TXT">Net::DNS::RR::TXT</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Net::DNS::RR::X25">Net::DNS::RR::X25</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Net::DNS::Text">Net::DNS::Text</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Net::DNS::Update">Net::DNS::Update</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Net::DNS::ZoneFile">Net::DNS::ZoneFile</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Net::Domain::TLD">Net::Domain::TLD</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Net::HTTP">Net::HTTP</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Net::HTTP::Methods">Net::HTTP::Methods</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Net::HTTP::NB">Net::HTTP::NB</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Net::HTTPS">Net::HTTPS</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Net::IP">Net::IP</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Net::LibIDN">Net::LibIDN</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Net::SMTP::SSL">Net::SMTP::SSL</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Net::SSLeay">Net::SSLeay</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Net::SSLeay::Handle">Net::SSLeay::Handle</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Number::Bytes::Human">Number::Bytes::Human</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Number::Compare">Number::Compare</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=ok">ok</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=oo">oo</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=oose">oose</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=overload">overload</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=overloading">overloading</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Package::DeprecationManager">Package::DeprecationManager</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Package::Stash">Package::Stash</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Package::Stash::PP">Package::Stash::PP</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Package::Stash::XS">Package::Stash::XS</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=PadWalker">PadWalker</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Pango">Pango</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Pango::Install::Files">Pango::Install::Files</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Params::Util">Params::Util</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Params::Validate">Params::Validate</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Params::Validate::Constants">Params::Validate::Constants</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Params::Validate::PP">Params::Validate::PP</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Params::Validate::XS">Params::Validate::XS</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Params::ValidationCompiler">Params::ValidationCompiler</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Params::ValidationCompiler::Compiler">Params::ValidationCompiler::Compiler</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Params::ValidationCompiler::Exceptions">Params::ValidationCompiler::Exceptions</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=parent">parent</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Parse::DebianChangelog">Parse::DebianChangelog</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Parse::DebianChangelog::ChangesFilters">Parse::DebianChangelog::ChangesFilters</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Parse::DebianChangelog::Entry">Parse::DebianChangelog::Entry</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Parse::DebianChangelog::Util">Parse::DebianChangelog::Util</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Parse::Method::Signatures">Parse::Method::Signatures</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Parse::Method::Signatures::Param">Parse::Method::Signatures::Param</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Parse::Method::Signatures::Param::Bindable">Parse::Method::Signatures::Param::Bindable</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Parse::Method::Signatures::Param::Named">Parse::Method::Signatures::Param::Named</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Parse::Method::Signatures::Param::Placeholder">Parse::Method::Signatures::Param::Placeholder</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Parse::Method::Signatures::Param::Positional">Parse::Method::Signatures::Param::Positional</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Parse::Method::Signatures::Param::Unpacked">Parse::Method::Signatures::Param::Unpacked</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Parse::Method::Signatures::Param::Unpacked::Array">Parse::Method::Signatures::Param::Unpacked::Array</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Parse::Method::Signatures::Param::Unpacked::Hash">Parse::Method::Signatures::Param::Unpacked::Hash</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Parse::Method::Signatures::ParamCollection">Parse::Method::Signatures::ParamCollection</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Parse::Method::Signatures::Sig">Parse::Method::Signatures::Sig</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Parse::Method::Signatures::TypeConstraint">Parse::Method::Signatures::TypeConstraint</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Parse::Method::Signatures::Types">Parse::Method::Signatures::Types</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Parse::PMFile">Parse::PMFile</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Path::Tiny">Path::Tiny</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Perl::Tidy">Perl::Tidy</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=PerlIO::gzip">PerlIO::gzip</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Pod::Coverage">Pod::Coverage</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Pod::Coverage::CountParents">Pod::Coverage::CountParents</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Pod::Coverage::ExportOnly">Pod::Coverage::ExportOnly</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Pod::Coverage::Overloader">Pod::Coverage::Overloader</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Pod::Man">Pod::Man</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Pod::ParseLink">Pod::ParseLink</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Pod::Text">Pod::Text</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Pod::Text::Color">Pod::Text::Color</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Pod::Text::Overstrike">Pod::Text::Overstrike</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Pod::Text::Termcap">Pod::Text::Termcap</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Pod::UsageTrans">Pod::UsageTrans</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=POSIX">POSIX</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=PPI">PPI</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=PPI::Cache">PPI::Cache</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=PPI::Document">PPI::Document</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=PPI::Document::File">PPI::Document::File</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=PPI::Document::Fragment">PPI::Document::Fragment</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=PPI::Document::Normalized">PPI::Document::Normalized</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=PPI::Dumper">PPI::Dumper</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=PPI::Element">PPI::Element</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=PPI::Exception">PPI::Exception</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=PPI::Exception::ParserRejection">PPI::Exception::ParserRejection</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=PPI::Find">PPI::Find</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=PPI::Lexer">PPI::Lexer</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=PPI::Node">PPI::Node</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=PPI::Normal">PPI::Normal</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=PPI::Normal::Standard">PPI::Normal::Standard</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=PPI::Statement">PPI::Statement</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=PPI::Statement::Break">PPI::Statement::Break</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=PPI::Statement::Compound">PPI::Statement::Compound</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=PPI::Statement::Data">PPI::Statement::Data</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=PPI::Statement::End">PPI::Statement::End</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=PPI::Statement::Expression">PPI::Statement::Expression</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=PPI::Statement::Given">PPI::Statement::Given</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=PPI::Statement::Include">PPI::Statement::Include</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=PPI::Statement::Include::Perl6">PPI::Statement::Include::Perl6</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=PPI::Statement::Null">PPI::Statement::Null</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=PPI::Statement::Package">PPI::Statement::Package</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=PPI::Statement::Scheduled">PPI::Statement::Scheduled</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=PPI::Statement::Sub">PPI::Statement::Sub</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=PPI::Statement::Unknown">PPI::Statement::Unknown</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=PPI::Statement::UnmatchedBrace">PPI::Statement::UnmatchedBrace</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=PPI::Statement::Variable">PPI::Statement::Variable</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=PPI::Statement::When">PPI::Statement::When</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=PPI::Structure">PPI::Structure</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=PPI::Structure::Block">PPI::Structure::Block</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=PPI::Structure::Condition">PPI::Structure::Condition</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=PPI::Structure::Constructor">PPI::Structure::Constructor</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=PPI::Structure::For">PPI::Structure::For</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=PPI::Structure::Given">PPI::Structure::Given</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=PPI::Structure::List">PPI::Structure::List</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=PPI::Structure::Subscript">PPI::Structure::Subscript</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=PPI::Structure::Unknown">PPI::Structure::Unknown</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=PPI::Structure::When">PPI::Structure::When</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=PPI::Token">PPI::Token</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=PPI::Token::ArrayIndex">PPI::Token::ArrayIndex</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=PPI::Token::Attribute">PPI::Token::Attribute</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=PPI::Token::BOM">PPI::Token::BOM</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=PPI::Token::Cast">PPI::Token::Cast</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=PPI::Token::Comment">PPI::Token::Comment</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=PPI::Token::DashedWord">PPI::Token::DashedWord</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=PPI::Token::Data">PPI::Token::Data</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=PPI::Token::End">PPI::Token::End</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=PPI::Token::HereDoc">PPI::Token::HereDoc</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=PPI::Token::Label">PPI::Token::Label</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=PPI::Token::Magic">PPI::Token::Magic</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=PPI::Token::Number">PPI::Token::Number</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=PPI::Token::Number::Binary">PPI::Token::Number::Binary</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=PPI::Token::Number::Exp">PPI::Token::Number::Exp</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=PPI::Token::Number::Float">PPI::Token::Number::Float</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=PPI::Token::Number::Hex">PPI::Token::Number::Hex</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=PPI::Token::Number::Octal">PPI::Token::Number::Octal</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=PPI::Token::Number::Version">PPI::Token::Number::Version</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=PPI::Token::Operator">PPI::Token::Operator</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=PPI::Token::Pod">PPI::Token::Pod</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=PPI::Token::Prototype">PPI::Token::Prototype</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=PPI::Token::Quote">PPI::Token::Quote</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=PPI::Token::Quote::Double">PPI::Token::Quote::Double</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=PPI::Token::Quote::Interpolate">PPI::Token::Quote::Interpolate</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=PPI::Token::Quote::Literal">PPI::Token::Quote::Literal</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=PPI::Token::Quote::Single">PPI::Token::Quote::Single</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=PPI::Token::QuoteLike">PPI::Token::QuoteLike</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=PPI::Token::QuoteLike::Backtick">PPI::Token::QuoteLike::Backtick</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=PPI::Token::QuoteLike::Command">PPI::Token::QuoteLike::Command</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=PPI::Token::QuoteLike::Readline">PPI::Token::QuoteLike::Readline</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=PPI::Token::QuoteLike::Regexp">PPI::Token::QuoteLike::Regexp</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=PPI::Token::QuoteLike::Words">PPI::Token::QuoteLike::Words</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=PPI::Token::Regexp">PPI::Token::Regexp</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=PPI::Token::Regexp::Match">PPI::Token::Regexp::Match</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=PPI::Token::Regexp::Substitute">PPI::Token::Regexp::Substitute</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=PPI::Token::Regexp::Transliterate">PPI::Token::Regexp::Transliterate</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=PPI::Token::Separator">PPI::Token::Separator</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=PPI::Token::Structure">PPI::Token::Structure</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=PPI::Token::Symbol">PPI::Token::Symbol</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=PPI::Token::Unknown">PPI::Token::Unknown</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=PPI::Token::Whitespace">PPI::Token::Whitespace</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=PPI::Token::Word">PPI::Token::Word</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=PPI::Token::_QuoteEngine">PPI::Token::_QuoteEngine</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=PPI::Token::_QuoteEngine::Full">PPI::Token::_QuoteEngine::Full</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=PPI::Token::_QuoteEngine::Simple">PPI::Token::_QuoteEngine::Simple</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=PPI::Tokenizer">PPI::Tokenizer</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=PPI::Transform">PPI::Transform</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=PPI::Transform::UpdateCopyright">PPI::Transform::UpdateCopyright</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=PPI::Util">PPI::Util</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=PPI::XSAccessor">PPI::XSAccessor</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=re">re</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Ref::Util">Ref::Util</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Ref::Util::PP">Ref::Util::PP</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Ref::Util::XS">Ref::Util::XS</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Regexp::Common">Regexp::Common</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Regexp::Common::balanced">Regexp::Common::balanced</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Regexp::Common::CC">Regexp::Common::CC</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Regexp::Common::comment">Regexp::Common::comment</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Regexp::Common::delimited">Regexp::Common::delimited</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Regexp::Common::lingua">Regexp::Common::lingua</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Regexp::Common::list">Regexp::Common::list</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Regexp::Common::net">Regexp::Common::net</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Regexp::Common::number">Regexp::Common::number</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Regexp::Common::profanity">Regexp::Common::profanity</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Regexp::Common::SEN">Regexp::Common::SEN</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Regexp::Common::URI">Regexp::Common::URI</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Regexp::Common::URI::fax">Regexp::Common::URI::fax</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Regexp::Common::URI::file">Regexp::Common::URI::file</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Regexp::Common::URI::ftp">Regexp::Common::URI::ftp</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Regexp::Common::URI::gopher">Regexp::Common::URI::gopher</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Regexp::Common::URI::http">Regexp::Common::URI::http</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Regexp::Common::URI::news">Regexp::Common::URI::news</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Regexp::Common::URI::pop">Regexp::Common::URI::pop</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Regexp::Common::URI::prospero">Regexp::Common::URI::prospero</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Regexp::Common::URI::RFC1035">Regexp::Common::URI::RFC1035</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Regexp::Common::URI::RFC1738">Regexp::Common::URI::RFC1738</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Regexp::Common::URI::RFC1808">Regexp::Common::URI::RFC1808</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Regexp::Common::URI::RFC2384">Regexp::Common::URI::RFC2384</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Regexp::Common::URI::RFC2396">Regexp::Common::URI::RFC2396</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Regexp::Common::URI::RFC2806">Regexp::Common::URI::RFC2806</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Regexp::Common::URI::tel">Regexp::Common::URI::tel</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Regexp::Common::URI::telnet">Regexp::Common::URI::telnet</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Regexp::Common::URI::tv">Regexp::Common::URI::tv</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Regexp::Common::URI::wais">Regexp::Common::URI::wais</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Regexp::Common::whitespace">Regexp::Common::whitespace</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Regexp::Common::zip">Regexp::Common::zip</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Regexp::Common::_support">Regexp::Common::_support</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Reply::Plugin::TypeTiny">Reply::Plugin::TypeTiny</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Role::Tiny">Role::Tiny</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Role::Tiny::With">Role::Tiny::With</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Roman">Roman</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Scalar::Util">Scalar::Util</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Scalar::Util">Scalar::Util</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Scope::Guard">Scope::Guard</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Scope::Upper">Scope::Upper</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=SelectSaver">SelectSaver</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Set::Crontab">Set::Crontab</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Set::Infinite">Set::Infinite</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Set::Infinite::Arithmetic">Set::Infinite::Arithmetic</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Set::Infinite::Basic">Set::Infinite::Basic</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Set::Infinite::_recurrence">Set::Infinite::_recurrence</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Socket">Socket</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Socket6">Socket6</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Specio">Specio</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Specio::Coercion">Specio::Coercion</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Specio::Constraint::AnyCan">Specio::Constraint::AnyCan</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Specio::Constraint::AnyDoes">Specio::Constraint::AnyDoes</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Specio::Constraint::AnyIsa">Specio::Constraint::AnyIsa</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Specio::Constraint::Enum">Specio::Constraint::Enum</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Specio::Constraint::Intersection">Specio::Constraint::Intersection</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Specio::Constraint::ObjectCan">Specio::Constraint::ObjectCan</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Specio::Constraint::ObjectDoes">Specio::Constraint::ObjectDoes</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Specio::Constraint::ObjectIsa">Specio::Constraint::ObjectIsa</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Specio::Constraint::Parameterizable">Specio::Constraint::Parameterizable</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Specio::Constraint::Parameterized">Specio::Constraint::Parameterized</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Specio::Constraint::Role::CanType">Specio::Constraint::Role::CanType</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Specio::Constraint::Role::DoesType">Specio::Constraint::Role::DoesType</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Specio::Constraint::Role::Interface">Specio::Constraint::Role::Interface</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Specio::Constraint::Role::IsaType">Specio::Constraint::Role::IsaType</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Specio::Constraint::Simple">Specio::Constraint::Simple</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Specio::Constraint::Structurable">Specio::Constraint::Structurable</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Specio::Constraint::Structured">Specio::Constraint::Structured</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Specio::Constraint::Union">Specio::Constraint::Union</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Specio::Declare">Specio::Declare</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Specio::DeclaredAt">Specio::DeclaredAt</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Specio::Exception">Specio::Exception</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Specio::Exporter">Specio::Exporter</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Specio::Helpers">Specio::Helpers</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Specio::Library::Builtins">Specio::Library::Builtins</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Specio::Library::Numeric">Specio::Library::Numeric</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Specio::Library::Perl">Specio::Library::Perl</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Specio::Library::String">Specio::Library::String</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Specio::Library::Structured">Specio::Library::Structured</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Specio::Library::Structured::Dict">Specio::Library::Structured::Dict</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Specio::Library::Structured::Map">Specio::Library::Structured::Map</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Specio::Library::Structured::Tuple">Specio::Library::Structured::Tuple</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Specio::OO">Specio::OO</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Specio::PartialDump">Specio::PartialDump</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Specio::Registry">Specio::Registry</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Specio::Role::Inlinable">Specio::Role::Inlinable</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Specio::Subs">Specio::Subs</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Specio::TypeChecks">Specio::TypeChecks</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Spiffy">Spiffy</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Spiffy::mixin">Spiffy::mixin</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=SQL::Dialects::ANSI">SQL::Dialects::ANSI</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=SQL::Dialects::AnyData">SQL::Dialects::AnyData</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=SQL::Dialects::CSV">SQL::Dialects::CSV</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=SQL::Dialects::Role">SQL::Dialects::Role</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=SQL::Eval">SQL::Eval</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=SQL::Parser">SQL::Parser</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=SQL::Statement">SQL::Statement</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=SQL::Statement::Function">SQL::Statement::Function</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=SQL::Statement::Functions">SQL::Statement::Functions</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=SQL::Statement::GetInfo">SQL::Statement::GetInfo</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=SQL::Statement::Operation">SQL::Statement::Operation</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=SQL::Statement::Placeholder">SQL::Statement::Placeholder</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=SQL::Statement::RAM">SQL::Statement::RAM</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=SQL::Statement::Term">SQL::Statement::Term</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=SQL::Statement::TermFactory">SQL::Statement::TermFactory</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=SQL::Statement::Util">SQL::Statement::Util</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=strict">strict</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=String::ShellQuote">String::ShellQuote</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Sub::Defer">Sub::Defer</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Sub::Exporter">Sub::Exporter</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Sub::Exporter::ForMethods">Sub::Exporter::ForMethods</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Sub::Exporter::Progressive">Sub::Exporter::Progressive</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Sub::Exporter::Util">Sub::Exporter::Util</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Sub::Identify">Sub::Identify</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Sub::Info">Sub::Info</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Sub::Install">Sub::Install</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Sub::Name">Sub::Name</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Sub::Name">Sub::Name</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Sub::Quote">Sub::Quote</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Sub::Uplevel">Sub::Uplevel</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Sub::Util">Sub::Util</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Switch">Switch</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Symbol">Symbol</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Task::Weaken">Task::Weaken</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Term::Size::Any">Term::Size::Any</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Term::Size::Perl">Term::Size::Perl</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Term::Size::Perl::Params">Term::Size::Perl::Params</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Term::Table">Term::Table</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Term::Table::Cell">Term::Table::Cell</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Term::Table::CellStack">Term::Table::CellStack</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Term::Table::HashBase">Term::Table::HashBase</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Term::Table::LineBreak">Term::Table::LineBreak</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Term::Table::Spacer">Term::Table::Spacer</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Term::Table::Util">Term::Table::Util</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2">Test2</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::API">Test2::API</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::API::Breakage">Test2::API::Breakage</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::API::Context">Test2::API::Context</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::API::Instance">Test2::API::Instance</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::API::Stack">Test2::API::Stack</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::AsyncSubtest">Test2::AsyncSubtest</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::AsyncSubtest::Event::Attach">Test2::AsyncSubtest::Event::Attach</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::AsyncSubtest::Event::Detach">Test2::AsyncSubtest::Event::Detach</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::AsyncSubtest::Formatter">Test2::AsyncSubtest::Formatter</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::AsyncSubtest::Hub">Test2::AsyncSubtest::Hub</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Bundle">Test2::Bundle</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Bundle::Extended">Test2::Bundle::Extended</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Bundle::More">Test2::Bundle::More</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Bundle::Simple">Test2::Bundle::Simple</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Compare">Test2::Compare</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Compare::Array">Test2::Compare::Array</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Compare::Bag">Test2::Compare::Bag</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Compare::Base">Test2::Compare::Base</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Compare::Bool">Test2::Compare::Bool</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Compare::Custom">Test2::Compare::Custom</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Compare::DeepRef">Test2::Compare::DeepRef</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Compare::Delta">Test2::Compare::Delta</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Compare::Event">Test2::Compare::Event</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Compare::EventMeta">Test2::Compare::EventMeta</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Compare::Float">Test2::Compare::Float</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Compare::Hash">Test2::Compare::Hash</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Compare::Meta">Test2::Compare::Meta</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Compare::Negatable">Test2::Compare::Negatable</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Compare::Number">Test2::Compare::Number</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Compare::Object">Test2::Compare::Object</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Compare::OrderedSubset">Test2::Compare::OrderedSubset</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Compare::Pattern">Test2::Compare::Pattern</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Compare::Ref">Test2::Compare::Ref</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Compare::Regex">Test2::Compare::Regex</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Compare::Scalar">Test2::Compare::Scalar</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Compare::Set">Test2::Compare::Set</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Compare::String">Test2::Compare::String</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Compare::Undef">Test2::Compare::Undef</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Compare::Wildcard">Test2::Compare::Wildcard</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Event">Test2::Event</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Event::Bail">Test2::Event::Bail</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Event::Diag">Test2::Event::Diag</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Event::Encoding">Test2::Event::Encoding</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Event::Exception">Test2::Event::Exception</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Event::Fail">Test2::Event::Fail</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Event::Generic">Test2::Event::Generic</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Event::Note">Test2::Event::Note</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Event::Ok">Test2::Event::Ok</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Event::Pass">Test2::Event::Pass</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Event::Plan">Test2::Event::Plan</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Event::Skip">Test2::Event::Skip</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Event::Subtest">Test2::Event::Subtest</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Event::TAP::Version">Test2::Event::TAP::Version</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Event::Times">Test2::Event::Times</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Event::V2">Test2::Event::V2</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Event::Waiting">Test2::Event::Waiting</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Event::Warning">Test2::Event::Warning</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::EventFacet">Test2::EventFacet</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::EventFacet::About">Test2::EventFacet::About</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::EventFacet::Amnesty">Test2::EventFacet::Amnesty</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::EventFacet::Assert">Test2::EventFacet::Assert</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::EventFacet::Control">Test2::EventFacet::Control</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::EventFacet::Error">Test2::EventFacet::Error</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::EventFacet::Hub">Test2::EventFacet::Hub</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::EventFacet::Info">Test2::EventFacet::Info</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::EventFacet::Meta">Test2::EventFacet::Meta</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::EventFacet::Parent">Test2::EventFacet::Parent</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::EventFacet::Plan">Test2::EventFacet::Plan</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::EventFacet::Render">Test2::EventFacet::Render</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::EventFacet::Trace">Test2::EventFacet::Trace</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Formatter">Test2::Formatter</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Formatter::TAP">Test2::Formatter::TAP</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Hub">Test2::Hub</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Hub::Interceptor">Test2::Hub::Interceptor</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Hub::Interceptor::Terminator">Test2::Hub::Interceptor::Terminator</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Hub::Subtest">Test2::Hub::Subtest</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::IPC">Test2::IPC</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::IPC::Driver">Test2::IPC::Driver</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::IPC::Driver::Files">Test2::IPC::Driver::Files</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Manual">Test2::Manual</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Manual::Anatomy">Test2::Manual::Anatomy</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Manual::Anatomy::API">Test2::Manual::Anatomy::API</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Manual::Anatomy::Context">Test2::Manual::Anatomy::Context</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Manual::Anatomy::EndToEnd">Test2::Manual::Anatomy::EndToEnd</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Manual::Anatomy::Event">Test2::Manual::Anatomy::Event</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Manual::Anatomy::Hubs">Test2::Manual::Anatomy::Hubs</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Manual::Anatomy::IPC">Test2::Manual::Anatomy::IPC</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Manual::Anatomy::Utilities">Test2::Manual::Anatomy::Utilities</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Manual::Contributing">Test2::Manual::Contributing</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Manual::Testing">Test2::Manual::Testing</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Manual::Testing::Introduction">Test2::Manual::Testing::Introduction</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Manual::Testing::Migrating">Test2::Manual::Testing::Migrating</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Manual::Testing::Planning">Test2::Manual::Testing::Planning</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Manual::Testing::Todo">Test2::Manual::Testing::Todo</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Manual::Tooling">Test2::Manual::Tooling</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Manual::Tooling::FirstTool">Test2::Manual::Tooling::FirstTool</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Manual::Tooling::Formatter">Test2::Manual::Tooling::Formatter</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Manual::Tooling::Nesting">Test2::Manual::Tooling::Nesting</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Manual::Tooling::Plugin::TestExit">Test2::Manual::Tooling::Plugin::TestExit</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Manual::Tooling::Plugin::TestingDone">Test2::Manual::Tooling::Plugin::TestingDone</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Manual::Tooling::Plugin::ToolCompletes">Test2::Manual::Tooling::Plugin::ToolCompletes</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Manual::Tooling::Plugin::ToolStarts">Test2::Manual::Tooling::Plugin::ToolStarts</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Manual::Tooling::Subtest">Test2::Manual::Tooling::Subtest</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Manual::Tooling::TestBuilder">Test2::Manual::Tooling::TestBuilder</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Manual::Tooling::Testing">Test2::Manual::Tooling::Testing</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Mock">Test2::Mock</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Plugin">Test2::Plugin</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Plugin::BailOnFail">Test2::Plugin::BailOnFail</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Plugin::DieOnFail">Test2::Plugin::DieOnFail</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Plugin::ExitSummary">Test2::Plugin::ExitSummary</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Plugin::NoWarnings">Test2::Plugin::NoWarnings</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Plugin::SRand">Test2::Plugin::SRand</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Plugin::Times">Test2::Plugin::Times</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Plugin::UTF8">Test2::Plugin::UTF8</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Require">Test2::Require</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Require::AuthorTesting">Test2::Require::AuthorTesting</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Require::EnvVar">Test2::Require::EnvVar</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Require::Fork">Test2::Require::Fork</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Require::Module">Test2::Require::Module</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Require::Perl">Test2::Require::Perl</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Require::RealFork">Test2::Require::RealFork</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Require::Threads">Test2::Require::Threads</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Suite">Test2::Suite</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Todo">Test2::Todo</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Tools">Test2::Tools</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Tools::AsyncSubtest">Test2::Tools::AsyncSubtest</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Tools::Basic">Test2::Tools::Basic</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Tools::Class">Test2::Tools::Class</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Tools::ClassicCompare">Test2::Tools::ClassicCompare</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Tools::Compare">Test2::Tools::Compare</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Tools::Defer">Test2::Tools::Defer</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Tools::Encoding">Test2::Tools::Encoding</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Tools::Event">Test2::Tools::Event</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Tools::Exception">Test2::Tools::Exception</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Tools::Exports">Test2::Tools::Exports</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Tools::GenTemp">Test2::Tools::GenTemp</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Tools::Grab">Test2::Tools::Grab</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Tools::Mock">Test2::Tools::Mock</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Tools::Ref">Test2::Tools::Ref</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Tools::Spec">Test2::Tools::Spec</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Tools::Subtest">Test2::Tools::Subtest</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Tools::Target">Test2::Tools::Target</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Tools::Tester">Test2::Tools::Tester</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Tools::Tiny">Test2::Tools::Tiny</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Tools::Warnings">Test2::Tools::Warnings</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Util">Test2::Util</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Util::ExternalMeta">Test2::Util::ExternalMeta</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Util::Facets2Legacy">Test2::Util::Facets2Legacy</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Util::Grabber">Test2::Util::Grabber</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Util::HashBase">Test2::Util::HashBase</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Util::Ref">Test2::Util::Ref</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Util::Stash">Test2::Util::Stash</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Util::Sub">Test2::Util::Sub</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Util::Table">Test2::Util::Table</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Util::Table::Cell">Test2::Util::Table::Cell</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Util::Table::LineBreak">Test2::Util::Table::LineBreak</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Util::Term">Test2::Util::Term</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Util::Times">Test2::Util::Times</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Util::Trace">Test2::Util::Trace</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::V0">Test2::V0</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Workflow">Test2::Workflow</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Workflow::BlockBase">Test2::Workflow::BlockBase</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Workflow::Build">Test2::Workflow::Build</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Workflow::Runner">Test2::Workflow::Runner</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Workflow::Task">Test2::Workflow::Task</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Workflow::Task::Action">Test2::Workflow::Task::Action</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test2::Workflow::Task::Group">Test2::Workflow::Task::Group</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test::Base">Test::Base</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test::Base::Filter">Test::Base::Filter</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test::Builder">Test::Builder</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test::Builder::Formatter">Test::Builder::Formatter</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test::Builder::IO::Scalar">Test::Builder::IO::Scalar</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test::Builder::Module">Test::Builder::Module</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test::Builder::Tester">Test::Builder::Tester</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test::Builder::Tester::Color">Test::Builder::Tester::Color</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test::Builder::TodoDiag">Test::Builder::TodoDiag</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test::CleanNamespaces">Test::CleanNamespaces</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test::Deep">Test::Deep</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test::Deep::All">Test::Deep::All</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test::Deep::Any">Test::Deep::Any</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test::Deep::Array">Test::Deep::Array</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test::Deep::ArrayEach">Test::Deep::ArrayEach</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test::Deep::ArrayElementsOnly">Test::Deep::ArrayElementsOnly</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test::Deep::ArrayLength">Test::Deep::ArrayLength</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test::Deep::ArrayLengthOnly">Test::Deep::ArrayLengthOnly</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test::Deep::Blessed">Test::Deep::Blessed</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test::Deep::Boolean">Test::Deep::Boolean</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test::Deep::Cache">Test::Deep::Cache</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test::Deep::Cache::Simple">Test::Deep::Cache::Simple</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test::Deep::Class">Test::Deep::Class</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test::Deep::Cmp">Test::Deep::Cmp</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test::Deep::Code">Test::Deep::Code</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test::Deep::Hash">Test::Deep::Hash</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test::Deep::HashEach">Test::Deep::HashEach</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test::Deep::HashElements">Test::Deep::HashElements</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test::Deep::HashKeys">Test::Deep::HashKeys</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test::Deep::HashKeysOnly">Test::Deep::HashKeysOnly</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test::Deep::Ignore">Test::Deep::Ignore</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test::Deep::Isa">Test::Deep::Isa</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test::Deep::ListMethods">Test::Deep::ListMethods</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test::Deep::Methods">Test::Deep::Methods</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test::Deep::MM">Test::Deep::MM</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test::Deep::None">Test::Deep::None</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test::Deep::NoTest">Test::Deep::NoTest</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test::Deep::Number">Test::Deep::Number</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test::Deep::Obj">Test::Deep::Obj</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test::Deep::Ref">Test::Deep::Ref</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test::Deep::RefType">Test::Deep::RefType</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test::Deep::Regexp">Test::Deep::Regexp</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test::Deep::RegexpMatches">Test::Deep::RegexpMatches</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test::Deep::RegexpOnly">Test::Deep::RegexpOnly</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test::Deep::RegexpRef">Test::Deep::RegexpRef</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test::Deep::RegexpRefOnly">Test::Deep::RegexpRefOnly</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test::Deep::RegexpVersion">Test::Deep::RegexpVersion</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test::Deep::ScalarRef">Test::Deep::ScalarRef</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test::Deep::ScalarRefOnly">Test::Deep::ScalarRefOnly</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test::Deep::Set">Test::Deep::Set</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test::Deep::Shallow">Test::Deep::Shallow</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test::Deep::Stack">Test::Deep::Stack</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test::Deep::String">Test::Deep::String</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test::Differences">Test::Differences</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test::Distribution">Test::Distribution</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test::Exception">Test::Exception</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test::FailWarnings">Test::FailWarnings</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test::Fatal">Test::Fatal</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test::File::ShareDir">Test::File::ShareDir</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test::File::ShareDir::Dist">Test::File::ShareDir::Dist</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test::File::ShareDir::Module">Test::File::ShareDir::Module</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test::File::ShareDir::Object::Dist">Test::File::ShareDir::Object::Dist</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test::File::ShareDir::Object::Inc">Test::File::ShareDir::Object::Inc</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test::File::ShareDir::Object::Module">Test::File::ShareDir::Object::Module</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test::File::ShareDir::TempDirObject">Test::File::ShareDir::TempDirObject</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test::File::ShareDir::Utils">Test::File::ShareDir::Utils</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test::Inter">Test::Inter</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test::LeakTrace">Test::LeakTrace</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test::LeakTrace::Script">Test::LeakTrace::Script</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test::MockRandom">Test::MockRandom</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test::MockTime">Test::MockTime</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test::Moose">Test::Moose</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test::More">Test::More</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test::Needs">Test::Needs</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test::NoWarnings">Test::NoWarnings</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test::NoWarnings::Warning">Test::NoWarnings::Warning</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test::Object">Test::Object</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test::Object::Test">Test::Object::Test</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test::Pod">Test::Pod</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test::Pod::Coverage">Test::Pod::Coverage</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test::Requires">Test::Requires</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test::Simple">Test::Simple</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test::Specio">Test::Specio</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test::SubCalls">Test::SubCalls</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test::Tester">Test::Tester</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test::Tester::Capture">Test::Tester::Capture</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test::Tester::CaptureRunner">Test::Tester::CaptureRunner</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test::Tester::Delegate">Test::Tester::Delegate</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test::TypeTiny">Test::TypeTiny</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test::use::ok">Test::use::ok</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test::Warnings">Test::Warnings</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test::Without::Module">Test::Without::Module</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Test::YAML">Test::YAML</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Text::CharWidth">Text::CharWidth</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Text::CSV">Text::CSV</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Text::CSV_PP">Text::CSV_PP</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Text::CSV_XS">Text::CSV_XS</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Text::Diff">Text::Diff</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Text::Diff::Config">Text::Diff::Config</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Text::Diff::Table">Text::Diff::Table</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Text::Glob">Text::Glob</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Text::Iconv">Text::Iconv</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Text::Levenshtein">Text::Levenshtein</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Text::LineFold">Text::LineFold</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Text::ParseWords">Text::ParseWords</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Text::Soundex">Text::Soundex</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Text::Tabs">Text::Tabs</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Text::Wrap">Text::Wrap</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Text::WrapI18N">Text::WrapI18N</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Tie::Hash">Tie::Hash</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Tie::IxHash">Tie::IxHash</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Time::Local">Time::Local</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Time::Zone">Time::Zone</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Try::Tiny">Try::Tiny</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=TryCatch">TryCatch</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Type::Coercion">Type::Coercion</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Type::Coercion::FromMoose">Type::Coercion::FromMoose</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Type::Coercion::Union">Type::Coercion::Union</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Type::Library">Type::Library</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Type::Params">Type::Params</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Type::Parser">Type::Parser</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Type::Registry">Type::Registry</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Type::Tiny">Type::Tiny</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Type::Tiny::Class">Type::Tiny::Class</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Type::Tiny::Duck">Type::Tiny::Duck</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Type::Tiny::Enum">Type::Tiny::Enum</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Type::Tiny::Intersection">Type::Tiny::Intersection</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Type::Tiny::Role">Type::Tiny::Role</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Type::Tiny::Union">Type::Tiny::Union</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Type::Tiny::_HalfOp">Type::Tiny::_HalfOp</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Type::Utils">Type::Utils</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Types::Common::Numeric">Types::Common::Numeric</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Types::Common::String">Types::Common::String</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Types::Standard">Types::Standard</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Types::Standard::ArrayRef">Types::Standard::ArrayRef</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Types::Standard::CycleTuple">Types::Standard::CycleTuple</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Types::Standard::Dict">Types::Standard::Dict</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Types::Standard::HashRef">Types::Standard::HashRef</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Types::Standard::Map">Types::Standard::Map</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Types::Standard::ScalarRef">Types::Standard::ScalarRef</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Types::Standard::StrMatch">Types::Standard::StrMatch</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Types::Standard::Tied">Types::Standard::Tied</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Types::Standard::Tuple">Types::Standard::Tuple</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Types::TypeTiny">Types::TypeTiny</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Unicode::GCString">Unicode::GCString</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Unicode::LineBreak">Unicode::LineBreak</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Unicode::LineBreak">Unicode::LineBreak</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Unicode::UTF8">Unicode::UTF8</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=URI">URI</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=URI::data">URI::data</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=URI::Escape">URI::Escape</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=URI::file">URI::file</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=URI::file::Base">URI::file::Base</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=URI::file::FAT">URI::file::FAT</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=URI::file::Mac">URI::file::Mac</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=URI::file::OS2">URI::file::OS2</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=URI::file::QNX">URI::file::QNX</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=URI::file::Unix">URI::file::Unix</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=URI::file::Win32">URI::file::Win32</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=URI::ftp">URI::ftp</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=URI::gopher">URI::gopher</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=URI::Heuristic">URI::Heuristic</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=URI::http">URI::http</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=URI::https">URI::https</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=URI::IRI">URI::IRI</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=URI::ldap">URI::ldap</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=URI::ldapi">URI::ldapi</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=URI::ldaps">URI::ldaps</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=URI::mailto">URI::mailto</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=URI::mms">URI::mms</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=URI::news">URI::news</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=URI::nntp">URI::nntp</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=URI::pop">URI::pop</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=URI::QueryParam">URI::QueryParam</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=URI::rlogin">URI::rlogin</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=URI::rsync">URI::rsync</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=URI::rtsp">URI::rtsp</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=URI::rtspu">URI::rtspu</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=URI::sftp">URI::sftp</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=URI::sip">URI::sip</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=URI::sips">URI::sips</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=URI::snews">URI::snews</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=URI::Split">URI::Split</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=URI::ssh">URI::ssh</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=URI::telnet">URI::telnet</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=URI::tn3270">URI::tn3270</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=URI::URL">URI::URL</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=URI::urn">URI::urn</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=URI::urn::isbn">URI::urn::isbn</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=URI::urn::oid">URI::urn::oid</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=URI::WithBase">URI::WithBase</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=URI::_foreign">URI::_foreign</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=URI::_generic">URI::_generic</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=URI::_idna">URI::_idna</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=URI::_ldap">URI::_ldap</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=URI::_login">URI::_login</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=URI::_punycode">URI::_punycode</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=URI::_query">URI::_query</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=URI::_segment">URI::_segment</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=URI::_server">URI::_server</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=URI::_userpass">URI::_userpass</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=utf8">utf8</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=UUID">UUID</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=Variable::Magic">Variable::Magic</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=vars">vars</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=version">version</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=version::regex">version::regex</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=version::vxs">version::vxs</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=warnings">warnings</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=warnings::register">warnings::register</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=WWW::RobotRules">WWW::RobotRules</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=WWW::RobotRules::AnyDBM_File">WWW::RobotRules::AnyDBM_File</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=X2Go::Config">X2Go::Config</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=X2Go::Log">X2Go::Log</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=X2Go::Server">X2Go::Server</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=X2Go::Server::Agent">X2Go::Server::Agent</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=X2Go::Server::Agent::NX">X2Go::Server::Agent::NX</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=X2Go::Server::DB">X2Go::Server::DB</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=X2Go::Server::DB::PostgreSQL">X2Go::Server::DB::PostgreSQL</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=X2Go::Server::DB::SQLite3">X2Go::Server::DB::SQLite3</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=X2Go::SupeReNicer">X2Go::SupeReNicer</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=X2Go::Utils">X2Go::Utils</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=XML::Parser">XML::Parser</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=XML::Parser::Expat">XML::Parser::Expat</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=XML::Parser::Style::Debug">XML::Parser::Style::Debug</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=XML::Parser::Style::Objects">XML::Parser::Style::Objects</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=XML::Parser::Style::Stream">XML::Parser::Style::Stream</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=XML::Parser::Style::Subs">XML::Parser::Style::Subs</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=XML::Parser::Style::Tree">XML::Parser::Style::Tree</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=XML::Twig">XML::Twig</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=XML::Twig::XPath">XML::Twig::XPath</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=XML::XPathEngine">XML::XPathEngine</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=XML::XPathEngine::Boolean">XML::XPathEngine::Boolean</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=XML::XPathEngine::Expr">XML::XPathEngine::Expr</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=XML::XPathEngine::Function">XML::XPathEngine::Function</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=XML::XPathEngine::Literal">XML::XPathEngine::Literal</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=XML::XPathEngine::LocationPath">XML::XPathEngine::LocationPath</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=XML::XPathEngine::NodeSet">XML::XPathEngine::NodeSet</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=XML::XPathEngine::Number">XML::XPathEngine::Number</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=XML::XPathEngine::Root">XML::XPathEngine::Root</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=XML::XPathEngine::Step">XML::XPathEngine::Step</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=XML::XPathEngine::Variable">XML::XPathEngine::Variable</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=XSLoader">XSLoader</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=XSLoader">XSLoader</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=YAML">YAML</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=YAML::Any">YAML::Any</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=YAML::Dumper">YAML::Dumper</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=YAML::Dumper::Base">YAML::Dumper::Base</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=YAML::Error">YAML::Error</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=YAML::LibYAML">YAML::LibYAML</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=YAML::Loader">YAML::Loader</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=YAML::Loader::Base">YAML::Loader::Base</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=YAML::Marshall">YAML::Marshall</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=YAML::Mo">YAML::Mo</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=YAML::Node">YAML::Node</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=YAML::Tag">YAML::Tag</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=YAML::Tiny">YAML::Tiny</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=YAML::Types">YAML::Types</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=YAML::XS">YAML::XS</a><br>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://search.cpan.org/search?mode=module&query=YAML::XS::LibYAML">YAML::XS::LibYAML</a><br>
+</font></td></tr>
+</table>
+<br>
+<center>
+<font size="2" face="arial,verdana,helvetica"> <a href="http://www.perlscriptsjavascripts.com/?evs"><b>Copyright 2019 PerlScriptsJavaScripts.com</b></a></font> 
+</center>
+<br>
+</body>
+</html>
diff --git a/htdocs/cgi-bin/favicon.ico b/htdocs/cgi-bin/favicon.ico
new file mode 100644 (file)
index 0000000..29d98a7
Binary files /dev/null and b/htdocs/cgi-bin/favicon.ico differ
diff --git a/htdocs/cgi-bin/images/VS-on-METABOX-42.png b/htdocs/cgi-bin/images/VS-on-METABOX-42.png
new file mode 100644 (file)
index 0000000..7c05de9
Binary files /dev/null and b/htdocs/cgi-bin/images/VS-on-METABOX-42.png differ
diff --git a/htdocs/cgi-bin/images/Wedges-9.1s-64px.png b/htdocs/cgi-bin/images/Wedges-9.1s-64px.png
new file mode 100644 (file)
index 0000000..7dc4f9a
Binary files /dev/null and b/htdocs/cgi-bin/images/Wedges-9.1s-64px.png differ
diff --git a/htdocs/cgi-bin/images/WelloffHighlevelAlpinegoat.webp b/htdocs/cgi-bin/images/WelloffHighlevelAlpinegoat.webp
new file mode 100644 (file)
index 0000000..bb428f0
Binary files /dev/null and b/htdocs/cgi-bin/images/WelloffHighlevelAlpinegoat.webp differ
diff --git a/htdocs/cgi-bin/images/paw_to_hand_deal_done.jpg b/htdocs/cgi-bin/images/paw_to_hand_deal_done.jpg
new file mode 100644 (file)
index 0000000..85adab3
Binary files /dev/null and b/htdocs/cgi-bin/images/paw_to_hand_deal_done.jpg differ
diff --git a/htdocs/cgi-bin/images/paw_to_hand_deal_done_frm.png b/htdocs/cgi-bin/images/paw_to_hand_deal_done_frm.png
new file mode 100644 (file)
index 0000000..1237e43
Binary files /dev/null and b/htdocs/cgi-bin/images/paw_to_hand_deal_done_frm.png differ
diff --git a/htdocs/cgi-bin/index.cgi b/htdocs/cgi-bin/index.cgi
new file mode 100755 (executable)
index 0000000..29b1220
--- /dev/null
@@ -0,0 +1,112 @@
+#!/usr/bin/env perl
+# A delegated CNFParser processed rendering of the Document Index Web page, a Model-View-Controller Pattern approuch.
+# The index.cnf script contains the structure and page skeleton,
+# all configuration as well as the HTMLIndexProcessorPlugin converting the CNF to final HTML.
+# It is very convienient, as both style and script for the page is separated and developed in the index.cnf.
+# Which then can be moved to a respective include file over there.
+# This controller binds and provides to the parser to do its magic thing.
+#
+use v5.30;
+use strict;
+use warnings;
+use Exception::Class ('LifeLogException');
+use Syntax::Keyword::Try;
+##
+# We use dynamic perl compilations. The following ONLY HERE required to carp to browser on
+# system requirments or/and unexpected perl compiler errors.
+##
+use CGI::Carp qw(fatalsToBrowser set_message);
+
+BEGIN {
+   sub handle_errors {
+      my $err = shift;
+      say "<html><body><h2>Server Error</h2><pre>Error: $err</pre></body></html>";
+  }
+  set_message(\&handle_errors);
+}
+
+use lib "system/modules";
+require CNFParser;
+require CNFNode;
+
+our $GLOB_HTML_SERVE = "'{}/*.cgi' '{}/*.htm' '{}/*.html' '{}/*.md' '{}/*.txt'";
+our $script_path = $0; $script_path =~ s/\w+.cgi$//;
+
+exit &HTMLPageBuilderFromCNF;
+
+sub HTMLPageBuilderFromCNF {
+    my $html = obtainDirListingHTML('docs');
+    my $cnf  = CNFParser -> new (
+                            $script_path."index.cnf",{
+                             DO_ENABLED => 1, HAS_EXTENSIONS=>1,
+                             ANONS_ARE_PUBLIC => 1,
+                                PAGE_HEAD     => "<h1 id=\"index_head\">Index Page of Docs Directory</h1>",
+                                PAGE_CONTENT  => $html,
+                                PAGE_FOOT     => "<!--Not Defined-->"
+                            }
+                );
+    my $ptr = $cnf->data();
+    $ptr = $ptr->{'PAGE'};
+    say $$ptr if $ptr;
+    return 0
+}
+
+sub obtainDirListingHTML {
+    my ($dir, $ret) = (shift,"");
+    my $html = listFiles($dir,$script_path,"");
+    if($html){
+       $ret .="<ul><b>$dir &#8594;</b>\n";
+       $ret .= $html;
+        opendir (my $handle, $script_path.$dir) or die "Couldn't open directory, $!";
+        while (my $node = readdir $handle) {
+            my $file_full_path = "$script_path$dir/$node";
+            if($node !~ /^\./ && -d $file_full_path){
+               $html = obtainDirListingHTML($dir.'/'.$node);
+               $ret .= $html if $html
+            }
+        }
+        closedir $handle;
+       $ret .= "</ul>";
+    }
+    return $ret;
+}
+
+sub listFiles ($){
+    my ($dir, $script_path, $ret) = @_;
+    my $path = $script_path.$dir;
+    my $spec = $GLOB_HTML_SERVE; $spec =~ s/{}/$path/gp;
+    my @files = glob ($spec);
+    foreach my $file(@files){
+            ($file =~ m/(\w+\.\w*)$/g);
+            my $name = $1;
+            if($file =~ /\.md$/){
+                my @title = getDocTitle($file);
+                $ret .= qq(\t\t\t<li><a href="$dir/$title[0]">$title[1]</a> &dash; $name</li>\n);
+            }else{
+                $ret .= qq(\t\t\t<li><a href="$dir/$name">$name</a></li>\n);
+            }
+    }
+    return $ret;
+}
+
+sub getDocTitle($){
+    my ($file,$ret) = shift;
+    open(my $fh, '<', $file) or LifeLogException->throw("Can't open $file: $!");
+    while (my $line = <$fh>) {
+        if($line =~ /^#+\s*(.*)/){
+           $ret = $1;
+           last;
+        }
+    }
+    close $fh;
+    ($file =~ m/(\w+\.\w*)$/g);
+    return ($1,$ret)
+}
+1;
+=begin copyright
+Programed by  : Will Budic
+EContactHash  : 990MWWLWM8C2MI8K (https://github.com/wbudic/EContactHash.md)
+Source        : https://github.com/wbudic/LifeLog
+Open Source Code License -> https://github.com/wbudic/PerlCNF/blob/master/ISC_License.md
+=cut copyright
+
diff --git a/htdocs/cgi-bin/index.cnf b/htdocs/cgi-bin/index.cnf
new file mode 100644 (file)
index 0000000..5abe045
--- /dev/null
@@ -0,0 +1,407 @@
+!CNF3.0
+
+<<@<%WEBAPP_SETTINGS>
+    $LOG_PATH    = ../../dbLifeLog/
+    //We are reading only the css property, old way is the following hash, preserved as reminder.
+    $THEME       = css => wsrc/main.css, colBG => #c8fff8, colSHDW => #9baec8
+>>
+
+<<@<%HTTP_HEADER>
+-charset =   "UTF8"
+-expires =   "+5s"
+>>
+
+<<HEADER<TREE> _HAS_PROCESSING_PRIORITY_
+
+[JS[
+    [@@[wsrc/main.js]@@]
+    [@@[wsrc/feeds.js]@@]
+    [@@[wsrc/jquery.js]@@]
+    [@@[wsrc/jquery-ui.js]@@]
+]JS]
+[CSS[
+    [@@[wsrc/effects.css]@@]
+    [@@[wsrc/feeds.css]@@]
+    [@@[wsrc/jquery-ui.css]@@]
+    [@@[wsrc/jquery-ui.theme.css]@@]
+    [@@[wsrc/jquery-ui.theme.css]@@]
+    [@@[wsrc/main.css]@@]
+]CSS]
+
+<STYLE<
+[#[
+    #container{
+        border: 2px solid #00000017;
+        width: 78%;
+        margin: 0 auto;
+        padding: 0px;
+    }
+
+    #header {
+        border: 1px solid gray;
+        background: rgba(0, 223, 246, 0.13);
+        margin:5px;
+    }
+
+    #content {
+        border: 1px solid gray;
+        text-align: left;
+        vertical-align: middle;
+        margin:5px;
+        background: rgba(0, 223, 246, 0.13);
+    }
+
+    #content ul {
+        padding-left: 20px;
+    }
+    #content li {
+        padding: 0px;
+        margin-left:30px;
+    }
+
+    #content li a:link {
+        font-weight: normal;
+        color:rgb(26, 96, 111);
+    }
+
+    #content li a:hover {
+        color: #ff4d21;
+        font-weight: bolder;
+        background: rgba(255,255,255,0.2);
+    }
+
+    #content li a:visited {
+     color:  rgb(136, 58, 200);
+     font-weight: bold;
+    }
+
+
+    #footer {
+        border: 1px solid gray;
+        background: rgba(128,128,128,0.2);
+        margin:5px;
+    }
+
+
+    .md_doc {
+        background: white;
+        border: 1px solid gray;
+        padding: 10px; margin: 5px;
+        text-align: left;
+    }
+
+    .md_doc ul{
+        font-size: large;
+    }
+
+    .md_doc p{
+        margin: 0 auto;
+        padding: 5px;
+        vertical-align: left;
+        text-align: left;
+        font-weight: normal;
+    }
+
+    .md_doc blockquote  {
+        margin-top: 0;
+        margin-bottom: 16px;
+        background:#b2f8ef;
+        border-left: 3px solid #94cde7;
+        border-top:  2px solid #94cde7;
+        border-right:  2px solid #94cde7;
+    }
+    .md_doc blockquote  > :last-child{
+        border-bottom:  2px solid #94cde7;
+    }
+
+    .div_img{
+        height:450px;
+    }
+
+    .md_img{
+        height:80%;
+    }
+
+    code, pre{
+       font-family: 'Droid Sans Mono', 'monospace', monospace;
+    }
+
+    .pre {
+        border:1px solid black;
+        background: rgba(255,255,255,0.2);
+        padding:15px;
+        text-align: left;
+    }
+    .sh {
+        background: black;
+        color: lightgreen;
+        padding: 15px;
+        width: auto;
+        border-radius: .32em;
+        border: 2px solid lightgreen;
+        margin: inherit;
+        margin-right: 30px;
+    }
+
+    div .html {
+        border:1px solid lightgray;
+        background: rgba(255,255,255,0.2);
+        padding:10px;
+        font-family:monospace;
+        text-align: left;
+    }
+
+    div .cnf {
+        border:1px solid lightgray;
+        background: rgba(255,255,255,0.2);
+        padding:10px;
+        font-family:monospace;
+        text-align: left;
+        padding-bottom: 10px;
+        margin-right: 2px;
+        margin-top: 15px;
+    }
+
+    dt{
+        margin-right: 2px;
+    }
+
+    .cnf h1{
+        text-align: left;
+        padding-left: 15px;
+        margin-top: -20px;
+        height: 20px;
+        line-height: 20px;
+        font-size: 15px;
+    }
+
+    .cnf h1 span{
+        background-color: white;
+        border:1px solid lightgray;
+        color:lightgray;
+        font-size:small;
+        padding: 3px;
+        padding-left: 5px;
+        padding-right: 5px;
+    }
+
+
+    div .perl {
+        border:1px solid lightgray;
+        background:  rgba(149, 215, 172, 0.2);
+        padding-left:15px;
+        font-family:monospace;
+        text-align: left;
+        padding-bottom: 20px;
+        margin-right: 2px;
+        margin-top: 15px;
+    }
+
+    .mermaid{
+        border:1px solid lightgray;
+        background: transparent;
+        padding-left:15px;
+        text-align: left;
+        padding-bottom: 20px;
+        margin-right: 2px;
+        margin-top: 15px;
+    }
+
+    .perl h1{
+        text-align: left;
+        padding-left: 15px;
+        margin-top: -10px;
+        height: 20px;
+        line-height: 20px;
+        font-size: 15px;
+    }
+
+    .perl h1 span{
+        background:  rgba(170, 227, 191, 0.75);
+        border:1px solid lightgray;
+        color:black;
+        font-size:small;
+        padding: 3px;
+        padding-left: 5px;
+        padding-right: 5px;
+    }
+
+    .span_status {
+        position: absolute;
+        top: 80px; left:420px;
+        border: 2px solid #94cde7;
+        padding: 5px;
+        text-align: center;
+        background: #ccffff;
+        text-decoration-style: wavy;
+        filter: drop-shadow(    10px 8px 5px #3e6f70);
+    }
+
+]#]
+>STYLE>
+
+<STYLE<
+    <*<MarkdownPlugin::CSS>*>
+>STYLE>
+
+<SCRIPT<
+    type:module
+[#[
+  import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@10/dist/mermaid.esm.min.mjs';
+  mermaid.initialize({ startOnLoad: true });
+  window.mermaid = mermaid;
+]#]
+>SCRIPT>
+
+<SCRIPT<
+[#[
+function onIndexBodyLoad(){
+    console.log("Initiated page.");
+    $("#status").html("Index page is ready!").show();
+    $("#status").fadeOut(2000);
+    $("#content a").click(
+        function(e){
+            e.preventDefault();
+            e.target.setAttribute("style","color:  rgb(136, 58, 200);font-weight: bolder;font-style: italic");
+            $("#status").html("Loading: " + e.target.href).show().fadeOut(3000);
+            $.post('index.cgi', {action:'load', doc:e.target.getAttribute('href')}, loadDocResult).fail(
+                    function(response) {$('#doc_display').html("Service Error: "+response.status,response.responseText)}
+            );
+        }
+    );
+    $("#content a").prop("visitied",false);
+    onBodyLoadGeneric();
+}
+function loadDocResult(content){
+    $('#doc_display').html(content);
+    $(document).scrollTop($("#doc_display").offset().top);
+    window.mermaid.run();
+}
+]#]
+>SCRIPT>
+
+
+>>HEADER>TREE>
+
+
+
+###
+# We in plugin mainly access this PAGE property, <*<HEADER>*> is linked in for clarity,
+# and/or if want to change from keeping the original \<\<HEADER<TREE>...\>\> above.
+#
+<<PAGE<TREE>
+
+ <*<HEADER>*>
+
+ Title: Index Page
+ OnLoad : onIndexBodyLoad()
+
+<div<
+    id:menu_page
+ <#<
+    <span class="menu_head">
+        <a id="to_bottom" href="#bottom" title="Go to bottom of page.">
+        <span class="ui-icon ui-icon-arrowthick-1-s" style="float:none;"></span></a>
+               <span class="menu_title">&nbsp; Page &nbsp;</span>
+        <a id="to_top" href="#top" title="Go to top of page.">
+        <span class="ui-icon ui-icon-arrowthick-1-n" style="float:none;"></span></a>
+    </span>
+    <hr>
+    <a class="ui-button ui-corner-all ui-widget" href="index.cgi">Index</a><hr>
+    <a class="ui-button ui-corner-all ui-widget" href="main.cgi">Life Log</a><hr>
+    <a class="ui-button ui-corner-all ui-widget" onclick="return fetchFeeds()">RSS Feeds</a>
+
+>#>
+ >div>
+<div<
+id:index-content
+class:content
+style:"height:100vh"
+ <div<
+    id:container
+        <div<
+            id:header
+        <*<PAGE_HEAD>*>
+                                                    <a<
+                                                        name: top
+                                                    >a>
+        >div>
+        <div<
+             id:content_pane
+            <span<
+              id:status
+              class:span_status
+              <#<Page getting ready...>#>
+            >span>
+            <div<
+                id:content
+                style="height:auto"
+                <*<PAGE_CONTENT>*>
+            >div>
+            <div<
+            id:doc_display
+            class:md_doc
+                <*<INFO_MD>*>
+            >div>
+                                        <a<
+                                                        name="feed_top"
+                                        >a>
+            <a<
+                id: rss_anchor
+            >a>
+            <div<
+                id="feeds"
+                class="rz"
+                style ="margin: 5px; visibility:hidden"
+                [#[ RSS Here ]#]
+            >div>
+        >div>
+        <div<
+            id:footer
+            <*<PAGE_FOOT>*>
+            <span<&#8971;&#8593;>span>
+                        <a<
+                            id:code
+                            href:#top
+                            title:Go to top of page.
+                            <#<To Top Of Page>#>
+                        >a>
+            <span<&#8968;>span>
+                                                        <a<
+                                                            name: bottom
+                                                        >a>
+        >div>
+ >div>
+    <!<Page brought to you by HTMLIndexProcessorPlugin, from the PerlCNF project.>!>
+>div>
+
+>>PAGE>TREE>
+
+
+<<INFO_MD<ESCAPED>
+
+**Now, if you please, select a link from the directory listing above.**
+
+
+### INFO
+\> This Page is the Documentation listing coming with the [LifeLog](https://github.com/wbudic/LifeLog) Application.
+\>
+\>[Open Source License](https://choosealicense.com/licenses/isc/)
+
+<center>Page brought to you by HTMLIndexProcessorPlugin v.<*<HTMLIndexProcessorPlugin::VERSION>*> in Moon Stage (beta).</center>
+
+>>
+
+<<CNF_TO_HTML<PLUGIN>
+    package     : HTMLIndexProcessorPlugin
+    subroutine  : convert
+    property    : PAGE
+>>
+
+<<INFO_MD_TO_HTML<PLUGIN> _HAS_PROCESSING_PRIORITY_
+    package     : MarkdownPlugin
+    subroutine  : convert
+    property    : INFO_MD
+>>
+<<1>>
+
diff --git a/htdocs/cgi-bin/index.html b/htdocs/cgi-bin/index.html
new file mode 100644 (file)
index 0000000..84ed085
--- /dev/null
@@ -0,0 +1 @@
+<body><script>window.location.href="main.cgi"</script></body>
diff --git a/htdocs/cgi-bin/json.cgi b/htdocs/cgi-bin/json.cgi
new file mode 100755 (executable)
index 0000000..5e3dddd
--- /dev/null
@@ -0,0 +1,194 @@
+#!/usr/bin/perl
+#
+# Programed in vim by: Will Budic
+# Open Source License -> https://choosealicense.com/licenses/isc/
+#
+use strict;
+use warnings;
+use Syntax::Keyword::Try;
+
+use CGI;
+use CGI::Session '-ip_match';
+use CGI::Carp qw ( fatalsToBrowser );
+use DBI;
+use DBD::Pg;
+use DBD::Pg qw(:pg_types);
+
+use DateTime;
+use DateTime::Format::SQLite;
+use DateTime::Format::Strptime;
+use DateTime::Duration;
+use Date::Language;
+use Date::Parse;
+use Time::localtime;
+use Regexp::Common qw /URI/;
+use JSON;
+use IO::Compress::Gzip qw(gzip $GzipError);
+use Compress::Zlib;
+
+use lib "system/modules";
+require Settings;
+
+my $db      = Settings::fetchDBSettings();
+my $cgi     = Settings::cgi();
+my $session = Settings::session();
+my $sid     = Settings::sid(); 
+my $dbname  = Settings::dbName();
+my $alias   = Settings::alias();
+my $passw   = Settings::pass();
+my $today   = Settings::today();
+
+my $action   = $cgi->param('action');
+my $lid      = $cgi->param('id');
+my $doc      = $cgi->param('doc');
+my $bg       = $cgi->param('bg');
+my $error    = "";
+
+my ($nid,$response, $JSON) = 'Session Expired';
+
+if  ( !$alias || !$dbname ) {
+    &defaultJSON;
+    print $cgi->header( -expires => "+0s", -charset => "UTF-8" );
+    print $JSON;
+   exit;
+}
+
+my $formater = DateTime::Format::Strptime->new(
+    pattern   => '%F %T',
+    locale    => 'en_AU',
+    time_zone => Settings::timezone(),
+    on_error  => 'croak',
+);
+###############
+&processSubmit;
+###############
+&defaultJSON;
+
+print $cgi->header( -expires => "+0s", -charset => "UTF-8" );
+print $JSON;
+
+$db->disconnect();
+undef($session);
+exit;
+
+
+sub defaultJSON {
+
+     my $content = "";
+     if($action eq 'load' && !$error){
+         try{ $content = JSON->new->utf8->decode($doc) } catch {$error = "Error on doc with LID[$lid]-> ".$@}
+     }
+     $JSON = JSON->new->utf8->space_after->pretty->allow_blessed->encode
+     ({date => $formater->format_datetime($today),
+       response_origin =>  "LifeLog.".Settings::release(),
+       alias => $alias, log_id => $lid, database=>Settings::dbFile(), action => $action, error=>$error,
+       response=>$response,
+       content=>$content
+       #received => $doc
+   });
+}
+
+sub cryptKey {
+    $passw    = $alias.$passw.Settings->CIPHER_KEY;
+    $passw    =~ s/(.)/sprintf '%04x', ord $1/seg;        
+   return  substr $passw.Settings->CIPHER_PADDING, 0, 58;
+}
+
+sub processSubmit {
+
+     # my $date = $cgi->param('date');
+     my ($st, @arr);
+
+    try {
+        my $cipher = Settings::newCipher($passw);
+        if($action eq 'store'){           
+            $doc = qq({
+                        "lid": "$lid",
+                        "bg":  "$bg",
+                        "doc": $doc
+            });
+            $doc = compress($cipher->encrypt($doc), Z_BEST_COMPRESSION);
+            @arr = Settings::selectRecords($db, "SELECT LID FROM NOTES WHERE LID = $lid;")->fetchrow_array();
+            if (!@arr) {
+                            $st = $db->prepare("INSERT INTO NOTES(LID, DOC) VALUES (?, ?);");
+                            $st->bind_param(1, $lid);
+                            if(Settings::isProgressDB()){
+                                $st->bind_param(2, $doc, { pg_type => DBD::Pg::PG_BYTEA })
+                            }else{
+                                $st->bind_param(2, $doc)
+                            }
+                            $st->execute();
+                            $response = "Stored Document (id:$lid)!";
+            }
+            else{
+                            $st = $db->prepare("UPDATE NOTES SET DOC = ? WHERE LID = $lid;");
+                            if(Settings::isProgressDB()){$st->bind_param(1, $doc, { pg_type => DBD::Pg::PG_BYTEA })}else{$st->bind_param(1,$doc);}
+                            $st->execute();                                
+                            $response = "Updated Document (id:$lid)!";
+            }
+        }
+        elsif($action eq 'load'){
+
+           @arr = Settings::selectRecords($db, "SELECT DOC FROM NOTES WHERE LID = $lid;")->fetchrow_array();
+           if(@arr eq undef){
+                @arr = Settings::selectRecords($db,"SELECT DOC FROM NOTES WHERE LID = '0';")->fetchrow_array();
+           }            
+           $doc = $arr[0];
+           $doc = $cipher->decrypt(uncompress($doc));          
+            # print $cgi->header( -expires => "+0s", -charset => "UTF-8" );
+            # print($doc);
+            # exit;
+           $response = "Loaded Document!";
+
+        }
+        else{            
+            $error = "Your action ($action) sux's a lot!";
+        }
+
+    }catch {
+        if($action eq 'load' && $@ =~ /Ciphertext does not begin with a valid header for 'salt'/){# Maybe an pre v.2.2 old document?
+            $doc = uncompress($doc);
+            $response = "Your document LID[$lid] is not secure. Please resave it. [$@]";
+            return;
+        }
+        $error = "Error on:LID[$lid]-> ".$@;
+    }
+}
+
+
+sub authenticate {
+    try {
+          my $st = $db->prepare("SELECT * FROM AUTH WHERE alias='$alias' and passw='$passw';");
+          $st->execute();
+          if ( $st->fetchrow_array() ) { return; }
+
+          #Check if passw has been wiped for reset?
+          $st = $db->prepare("SELECT * FROM AUTH WHERE alias='$alias';");
+          $st->execute();
+          my @w = $st->fetchrow_array();
+          if ( @w && $w[1] == "" ) {
+
+              #Wiped with -> UPDATE AUTH SET passw='' WHERE alias='$userid';
+              $st = $db->prepare(
+                  "UPDATE AUTH SET passw='$passw' WHERE alias='$alias';");
+              $st->execute();
+              return;
+          }
+
+
+
+          print $cgi->center( $cgi->div("<b>Access Denied!</b> alias:$alias pass:$passw") );
+
+
+          $db->disconnect();
+          $session->flush();
+          exit;
+
+    }catch {
+        print $cgi->header( -expires => "+0s", -charset => "UTF-8" );
+        print $cgi->p( "ERROR:" . $_ );
+        print $cgi->end_html;
+        exit;
+    }
+}
+1;
\ No newline at end of file
diff --git a/htdocs/cgi-bin/login_ctr.cgi b/htdocs/cgi-bin/login_ctr.cgi
new file mode 100755 (executable)
index 0000000..7e02acd
--- /dev/null
@@ -0,0 +1,940 @@
+#!/usr/bin/env perl
+#
+use strict;
+use warnings;
+use experimental qw( switch );
+use Exception::Class ('LifeLogException');
+use Syntax::Keyword::Try;
+use CGI;
+use CGI::Session '-ip_match';
+use DBI;
+use lib "system/modules";
+require Settings;
+use CGI::Carp qw(fatalsToBrowser set_message);
+use bignum qw/hex/;
+BEGIN {
+   sub handle_errors {
+      my $msg = shift;
+      print "<html><body><h2>LifeLog Server Error</h2>";
+      print "<pre>@[$ENV{PWD}].Error: $msg</pre></body></html>";
+
+  }
+  set_message(\&handle_errors);
+}
+
+my $cgi = CGI->new();
+my $session = CGI::Session->new("driver:File",$cgi, {Directory=>&Settings::logPath, SameSite=>'Lax'});
+my $sssCreatedDB = $session->param("cdb");
+my $sid=$session->id();
+my $cookie = $cgi->cookie(CGISESSID => $sid);
+
+my ($db,$DB_NAME,$PAGE_EXCLUDES, $DBG, $frm)=("","");
+my $alias = $cgi->param('alias');
+my $passw = $cgi->param('passw');
+my $pass;
+
+#Codebase release version. Release in the created db or existing one can be different, through time.
+my $SCRIPT_RELEASE = Settings::release();
+
+#anons - Are parsed end obtained only here, to be transfered to the DB config.
+my $BACKUP_ENABLED = 0;
+my $AUTO_SET_TIMEZONE = 0;
+my $TIME_ZONE_MAP = 0;
+my $VW_OVR_SYSLOGS=0;
+my $VW_OVR_WHERE="";
+my $LOGOUT_RELOGIN_TXT='No, no, NO! Log me In Again.';
+my $LOGOUT_IFRAME_ENABLED = 0;
+my $LOGOUT_IFRAME = qq|
+    <iframe width="60%" height="600px" src="https://www.youtube.com/embed/qTFojoffE78?autoplay=1" frameborder="0" allow="accelerometer;
+            autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen>
+    </iframe>|;
+my %reserved = ('AND'=>1, 'OR'=>1, 'NOT'=>1, 'DATE'=>1,'OLDER_THAN'=>1, 'FROM'=>1,'TO'=>1,'>'=>1,'<'=>1,'>='=>1,'<='=>1,'=='=>1,'!='=>1);
+my %columns  = ('CAT'=>1,'STICKY'=>1, 'RTF'=>1, 'LOG'=>1);
+try{
+    checkAutologinSet();
+    logout() if($cgi->param('logout'));
+    if(processSubmit()==0){
+        my ($css,$colBG,$colSHDW) = (Settings::theme('css'),Settings::theme('colBG'),Settings::theme('colSHDW'));
+        print $cgi->header(-expires=>"0s", -charset=>"UTF-8", -cookie=>$cookie);
+        print $cgi->start_html(
+                    -title   => "Personal Log Login",
+                   # -BGCOLOR => $colBG,
+                    -script=> [ {-type  => 'text/javascript', -src => 'wsrc/main.js'},
+                                {-type  => 'text/javascript', -src => 'wsrc/feeds.js'},
+                                {-type => 'text/javascript', -src => 'wsrc/jquery.js'},
+                                {-type => 'text/javascript', -src => 'wsrc/jquery-ui.js'}],
+                    -style => [
+                                {-type => 'text/css', -src => 'wsrc/effects.css'},
+                                {-type => 'text/css', -src => 'wsrc/feeds.css'},
+                                {-type => 'text/css', -src => 'wsrc/jquery-ui.css'},
+                                {-type => 'text/css', -src => 'wsrc/jquery-ui.theme.css'},
+                                {-type  => 'text/css', -src => $css}
+                              ],
+                    -onload  => "onBodyLoadGeneric()"
+        );
+
+    my @ht = split(m/\s/,`hostname -I`);
+    my $hst = "";
+       $hst = `hostname` . "($ht[0])" if (@ht);
+
+    $frm = <<HTML;
+        <form id="frm_login" action="login_ctr.cgi" method="post" style="filter: drop-shadow(10px 8px 5px #3e6f70);">
+        <table border="0" width="50%"
+        style="opacity: 1; box-sizing: border-box; margin-bottom: 5px; box-shadow: 5px 5px 5px $colSHDW;">
+        <tr class="r0">
+            <td colspan="3"><h23 id="lifelog_head">Welcome to Life Log</h3></td>
+            </tr>
+        <tr class="r1">
+            <td align="right">Alias:</td><td><input type="text" name="alias" value="$alias"/></td><td></td>
+            </tr>
+        <tr class="r1">
+            <td align="right">Password:</td><td><input type="password" name="passw" value="$passw"/></td><td></td>
+            </tr>
+            <tr class="r1">
+            <td colspan="3" class="log">
+            <span class="log"><font color="red">NOTICE!</font> &nbsp;
+            The Alias entry is used for the database name here,
+            a new database will be created for you if it doesn't exist.
+            Make sure you note down your password.</span>
+            <input type="hidden" name="CGISESSID" value="$sid"/>
+            <input type="hidden" name="login" value="1"/></td></tr>
+        <tr class="r0"><td colspan="2">Host -> <b>$hst</b></td><td><input type="submit" value="Login"/></td></tr>
+        </table></form>
+HTML
+    print qq(<DIV class="content"><a name="top"/>
+            <br>
+            <div id="menu_page" style="margin-left: 85vw;">
+            <span class="menu_head">
+
+                    <a id="to_bottom" href="#bottom" title="Go to bottom of page.">
+                    <span class="ui-icon ui-icon-arrowthick-1-s" style="float:none;"></span></a>
+                            <span class="menu_title">&nbsp; Menu  &nbsp;</span>
+                    <a id="to_top" href="#top" title="Go to top of page.">
+                    <span class="ui-icon ui-icon-arrowthick-1-n" style="float:none;"></span></a>
+
+            </span>
+            <hr>
+                <a class="ui-button ui-corner-all ui-widget" href="index.cgi">Index</a><hr>
+                <a class="a_" onclick="return demoLogin()">Demo</a><hr>
+                <a class="a_" onclick="return fetchFeeds()">Feeds</a><hr>
+            </div>
+            <div class="rz login">
+                $frm
+                <br>
+                <a href="https://github.com/wbudic/LifeLog" target="_blank" style="font-size:small">
+                <div style="display: inline-block; vertical-align: middle; text-align: center; width:50%; opacity: 0.8;">
+                    <div style="display:table-cell; height:20px; vertical-align: middle;">
+                        <img src="wsrc/images/pingy.svg" height="30px" style="filter: drop-shadow(10px 10px 5px #3e6f70);"> LifeLog v.).Settings::release().qq(</a>
+                    </div>
+                </div>
+                <br>
+            </div><a name="feed_top"/>
+            <a id="rss_anchor"></a>
+            <div id="feeds" class="rz" style="width:60% !important;visibility:hidden">RSS</div>
+            <a name="bottom"/>
+            </DIV>
+          );
+    Settings::printDebugHTML($DBG) if Settings::debug();
+    print $cgi->end_html;
+    }
+    else{
+        print $cgi->start_html;
+        print $cgi->end_html;
+    }
+}
+ catch {
+            my $err = $@; my $now=DateTime->now(); $now=~s/T/@/;
+            my $dbg = "";
+            my $pwd = `pwd`;
+            $pwd =~ s/\s*$//;
+            $dbg = "--DEBUG OUTPUT--\n$DBG" if Settings::debug();
+            print $cgi->header,
+            "<hr><font color=red><b>SERVER ERROR</b></font> on $now".
+            "<pre>".$pwd."/$0 -> [\n$err]","\n$dbg</pre>",
+            $cgi->end_html;
+ }
+exit;
+
+sub processSubmit {
+    if($alias&&$passw){
+            $pass = $passw; $passw = uc crypt $passw, hex Settings->CIPHER_KEY;
+            #CheckTables will return 1 if it was an logout set in the config table. To bypass redirection.
+            if(checkCreateTables()==0){
+                $session->param('alias', $alias);
+                $session->param('passw', $passw);
+                $session->param('db_source', Settings::dbSrc());
+                $session->param('db_file',   Settings::dbFile());
+                $session->param('database',  Settings::dbName());
+                $session->expire(Settings::sessionExprs());
+                $session->flush();
+                ### To MAIN PAGE
+                print $cgi->header(-expires=>"0s", -charset=>"UTF-8", -cookie=>$cookie, -location=>"main.cgi");
+                ###
+                return 1; #activated redirect to main, main will check credentials.
+            }else{
+                die "<b>Check Create tables failed!<b>"
+            }
+    }
+    else{
+        $alias = $passw = "";
+    }
+    Settings::removeOldSessions();  #and prompt for login returning 0
+    return 0;
+}
+#Here we directly check for efficiancythe main cnf file head. Not using CNFParser!
+sub checkAutologinSet {
+    my (@cre, $v);
+    # We don't need to slurp whole file as next are expected settings in begining of the config file.
+    open(my $fh, '<', &Settings::logPath.'main.cnf' ) or LifeLogException->throw("Can't open main.cnf: $!");
+    while (my $line = <$fh>) {
+        chomp $line;
+        $v = Settings::parseAutonom('AUTO_LOGIN',$line);
+        if($v){@cre = split '/', $v; next}
+        $v = Settings::parseAutonom('BACKUP_ENABLED',$line);
+        if($v){$BACKUP_ENABLED = $v; next}
+        $v = Settings::parseAutonom('DBI_SOURCE',$line);
+        if($v){Settings::dbSrc($v); next}
+        $v = Settings::parseAutonom('AUTO_SET_TIMEZONE',$line);
+        if($v){$AUTO_SET_TIMEZONE = $v; next}
+        $v = Settings::parseAutonom('DBI_LOG_VAR_SIZE',$line);
+        if($v){Settings::dbVLSZ($v); next}
+        # From here are config file only autonoms. Don't need or harm being in database configuration.
+        $v = Settings::parseAutonom('DBI_MULTI_USER_DB',$line);
+        if($v){$DB_NAME=$v;Settings::dbName($v);next}
+        if($line =~ /<<TIME_ZONE_MAP</){
+            $TIME_ZONE_MAP = substr($line,16);
+            while ($line = <$fh>) {
+                chomp $line;
+                last if($line =~ />$/);
+                $TIME_ZONE_MAP .= $line . "\n";
+            }
+            next;
+        }
+        $v = Settings::parseAutonom('PAGE_VIEW_EXCLUDES',$line);
+        if($v){$PAGE_EXCLUDES=$v;next}
+        $v = Settings::parseAutonom('VIEW_OVERRIDE_SYSLOGS',$line);
+        if($v){$VW_OVR_SYSLOGS=$v;next}
+        $v = Settings::parseAutonom('VIEW_OVERRIDE_WHERE',$line);
+        if($v){$VW_OVR_WHERE=$v;next}
+        $v = Settings::parseAutonom('LOGOUT_IFRAME_ENABLED',$line);
+        if($v){$LOGOUT_IFRAME_ENABLED = $v; next;}
+        $v = Settings::parseAutonom('LOGOUT_RELOGIN_TXT',$line);
+        if($v){$LOGOUT_RELOGIN_TXT=$v; next}
+        $v = Settings::parseAutonom('^CONFIG_META', $line);# from v.2.4 - Reserve of id range of config properties for the application.
+        if($v){Settings::configPropertyRange($v); next}
+        last if (0 == index $line,'<<CONFIG<'); #By specs the config tag, is not an autonom, if found we stop reading. So better be last one spec. in file.
+    }
+    close $fh;
+    #print "[$VW_OVR_WHERE] \n";
+    #exit;
+    # Autologin credential in file next.
+    if(@cre &&scalar(@cre)>1){
+            if($alias && $passw && $alias ne $cre[0]){ # Is this an new alias login attempt? If so, autologin is of the agenda.
+                return;                                # Note, we do assign entered password even passw as autologin is set. Not entering one bypasses this.
+            }                                          # If stricter access is required set it to zero in main.cnf, or disable in config.
+            $passw = $cre[1] if (!$passw);
+            $db = Settings::connectDB($alias, $passw);
+            #check if autologin enabled.
+            my $st = Settings::selectRecords($db,"SELECT VALUE FROM CONFIG WHERE NAME='AUTO_LOGIN';");
+            if($st){
+                my @set = $st->fetchrow_array();
+                if($set[0]=="1"){
+                        $alias = $cre[0];
+                        $passw = $passw;
+                        Settings::removeOldSessions();
+                }
+                $st->finish();
+            }
+            $db -> disconnect();
+    }
+    Settings::loadLastUsedTheme();
+}
+
+sub checkPreparePGDB {
+    my $create =1;
+    $passw = $cgi->param('passw'); #We let PG handles password encryption (security) itself.
+    my @data_sources = DBI->data_sources("Pg");
+    foreach my $ln (@data_sources){
+            my $i = rindex $ln, '=';
+            my $n = substr $ln, $i+1;
+            if($n eq $alias){ $create = 0; last;}
+    }
+    if($create){
+        # TODO Default expected to exist db is postgres, username and password. This cgi connects locally.
+        # Modify this to take any other situations or create main.cnf anon properties for all this.
+        # To the user with roes and database creation powers.
+        my $db = DBI->connect('dbi:Pg:dbname=postgres;host=localhost','postgres', 'postgres');
+        Settings::debug(1);
+        $db->do(qq(
+            CREATE ROLE $alias WITH
+                LOGIN
+                SUPERUSER
+                CREATEDB
+                CREATEROLE
+                INHERIT
+                NOREPLICATION
+                CONNECTION LIMIT -1
+                PASSWORD '$passw';
+        ));
+        $db->do(qq(
+            CREATE DATABASE $alias
+                WITH
+                OWNER = $alias
+                ENCODING = 'UTF8'
+                LC_COLLATE = 'en_AU.UTF-8'
+                LC_CTYPE = 'en_AU.UTF-8'
+                TABLESPACE = pg_default
+                CONNECTION LIMIT = -1;
+        ));
+        $db->disconnect(); undef $db;
+        return 1;
+    }
+    return 0;
+}
+
+sub checkCreateTables {     my ($pst, $sql,$rv, $changed) = ("","","",0);
+ try{
+    # We live check database for available tables now only once.
+    # If brand new database, this sill returns fine an empty array.
+    my %curr_config = ();
+    my %curr_tables;
+    $changed = checkPreparePGDB() if Settings::isProgressDB();
+    $db = Settings::connectDB($DB_NAME, $alias, $passw);
+    %curr_tables = %{Settings::schema_tables($db)};
+
+    if($curr_tables{'CONFIG'}) {
+        #Set changed if the configuration data has been wiped out, i.e. by db fix routines.
+        $pst = Settings::selectRecords($db,"SELECT NAME, VALUE FROM CONFIG;");
+        my @r = $pst->fetchrow_array();
+        if(@r){
+           do { $curr_config{$r[0]} = $r[1] }
+           while(@r = $pst->fetchrow_array())
+        }else{
+               if(!&Settings::loadReserveAnons){
+                   print "No meta file found, recreate of config is from scratch.\n";
+               }
+               $changed = 1;
+        }
+    }
+    else{
+        #v.1.3 -> v.1.4
+        #has alter table CONFIG add DESCRIPTION VCHAR(128);
+        $rv = $db->do(Settings::createCONFIGStmt());
+        $changed = 1;
+    }
+    # Now we got a db with CONFIG, lets get settings from THERE.
+    # Default version is the scripted current one, which could have been updated.
+    # We need to maybe update further, if these versions differ.
+    # Source default and the one from the CONFIG table in the (present) database.
+    Settings::getConfiguration($db,{
+                backup_enabled=>$BACKUP_ENABLED,#<-actual anon property value has been overriden here via &checkAutologinSet.
+                auto_set_timezone=>$AUTO_SET_TIMEZONE,
+                TIME_ZONE_MAP=>$TIME_ZONE_MAP,
+                db_log_var_limit=>Settings::dbVLSZ()
+         });
+    my $DB_VERSION  = Settings::release(); #$After loading of config this has now been changed to the current database one.
+    my $hasLogTbl   = $curr_tables{'LOG'};
+    my $hasNotesTbl = $curr_tables{'NOTES'};
+    my @annons = Settings::anons();
+    LifeLogException -> throw("Annons!") if (@annons==0);#We even added above the backup_enabled anon, so WTF?
+    if($curr_tables{'life_log_temp_table'}){#A possible of some old migration lingering...
+       $db->do('DROP TABLE `life_log_temp_table`;');
+    }
+    # Reflect anons to db config.
+    $sql = "SELECT ID, NAME, VALUE FROM CONFIG WHERE";
+    foreach my $ana(@annons){$sql .=  " NAME LIKE '$ana' OR";};$sql =~ s/OR$//; $sql .=';';
+    $pst =  Settings::selectRecords($db, $sql);
+    while(my @row = $pst->fetchrow_array()) {
+        my ($sup,$vid,$n,$sv, $dv) = ("",$row[0], $row[1], Settings::anon($row[1]), $row[2]);
+        try{
+           if($dv ne $sv){
+               $sup = "UPDATE CONFIG SET VALUE='$sv' WHERE ID=$vid;";
+               $db->do($sup);
+           }
+        }catch{$@.="\n$sup"; die "Failed[$@]"}
+    }
+
+    if($hasLogTbl){
+       if(Settings::isProgressDB()){
+           #Has the DBI_LOG_VAR_SIZE been changed? For Pg it is important. Default code value is in Settings::DBI_LVAR_SZ
+            my $v = Settings::dbVLSZ();
+            if($curr_config{db_log_var_limit} ne $v){  #<- yes, crap, a different mapping name in the db for the anon DBI_LOG_VAR_SIZE
+              if($v>1024){#<-We actually only care that what is set in script is an number value to have to further modify anything.
+                Settings::configProperty($db,0,'db_log_var_limit',$v);
+                $sql=qq(ALTER TABLE public.log
+                                ALTER COLUMN log TYPE character varying($v) COLLATE pg_catalog."default";);
+                $db->do('DROP VIEW '.Settings->VW_LOG) if $curr_tables{Settings->VW_LOG}; #<- views have constraints to tables in Pg, we can drop.
+                Settings::selectRecords($db, $sql);#<-will make a prepared stmt do, but also with exsception handling.
+                $db->do(Settings::createViewLOGStmt()) if $curr_tables{Settings->VW_LOG};
+              }
+            }
+        }
+        else{
+            #Is it pre or around v.2.1, where ID_RTF is instead of RTF in the LOG table?
+            $pst = Settings::selectRecords($db, "SELECT * from pragma_table_info('LOG') where name like 'ID_RTF';");
+            my @row = $pst = $pst->fetchrow_array();
+            if(scalar (@row)>0 &&$row[0]==1){
+                $sql="ALTER TABLE LOG RENAME COLUMN ID_RTF TO RTF;";
+                Settings::selectRecords($db, $sql);#<-will make a prepared stmt do, but also with exsception handling.
+            }#Done here as there is no alter column type in sqlite and not required.
+        }
+    }
+    #
+    # From v.1.8 Log has changed, to have LOG to NOTES relation.
+    #
+    if($hasLogTbl && $SCRIPT_RELEASE > $DB_VERSION && $DB_VERSION < 1.8){
+        # We must upgrade now. If existing LOG table is now invalid old version containing boolean RTF.
+        Settings::debug(1);
+        my @names = @{Settings::getTableColumnNames($db, 'LOG')};
+        #perl 5.28+ <--
+        #if ( 'RTF' ~~ @names ) {
+        if(grep( /RTF/, @names)){
+            $db->do('DROP TABLE life_log_login_ctr_temp_table;') if($curr_tables{'life_log_login_ctr_temp_table'});
+            $db->do('CREATE TABLE life_log_login_ctr_temp_table AS SELECT * FROM LOG;');
+            my %notes_ids = ();
+            if($hasNotesTbl){
+               if(Settings::isProgressDB()){
+                     $sql='SELECT ID, DATE FROM LOG WHERE ID_RTF > 0 ORDER BY DATE;'}
+                else{$sql='SELECT rowid, DATE FROM LOG WHERE ID_RTF > 0 ORDER BY DATE;'}
+                $pst =  Settings::selectRecords($db, $sql);
+                while(my @row = $pst->fetchrow_array()) {
+                        my $sql_date = $row[1];;
+                        $sql_date = DateTime::Format::SQLite->parse_datetime($sql_date);
+                        if(Settings::isProgressDB()){
+                           $sql="SELECT ID, DATE FROM life_log_login_ctr_temp_table WHERE RTF > 0 AND DATE = '".$sql_date."';"}
+                        else{$sql="SELECT rowid, DATE FROM life_log_login_ctr_temp_table WHERE RTF > 0 AND DATE = '".$sql_date."';"}
+                        my $pst2  = Settings::selectRecords($db, $sql);
+                        my @rec   = $pst2->fetchrow_array();
+                        if(@rec){
+                           $db->do("UPDATE NOTES SET LID=". $rec[0]." WHERE LID=".$row[0].";");
+                           if(Settings::isProgressDB()){
+                                 $sql="SELECT LID FROM NOTES WHERE LID = ".$rec[0].";"}
+                           else{$sql="SELECT rowid FROM NOTES WHERE LID = ".$rec[0].";"}
+                           $pst2  = Settings::selectRecords($db, $sql);
+                           @rec   = $pst2->fetchrow_array();
+                           if(@rec){
+                              $notes_ids{$sql_date} = $rec[0];
+                           }
+                        }
+                }
+            }
+            if($DB_VERSION > 1.6){
+                #is above v.1.6 notes table.
+                $db->do('DROP TABLE '.Settings->VW_LOG);
+            }
+            $db->do('DROP TABLE LOG;');
+            #v.1.8 Has fixes, time also properly to take into the sort. Not crucial to drop.
+            $db->do(&Settings::createLOGStmt);
+            $db->do('INSERT INTO LOG (ID_CAT, DATE, LOG, AMOUNT,AFLAG)
+                                SELECT ID_CAT, DATE, LOG, AMOUNT, AFLAG FROM life_log_login_ctr_temp_table ORDER by DATE;');
+            $db->do('DROP TABLE life_log_login_ctr_temp_table;');
+
+            #Experimental sofar NOTES table has LID changed to proper number type.
+            $db->do(qq(CREATE TABLE life_log_rename_column_new_table (
+                           LID INTEGER NOT NULL PRIMARY KEY,    DOC    TEXT);));
+            $db->do('INSERT INTO life_log_rename_column_new_table SELECT `LID`,`DOC` FROM `NOTES`;');
+            $db->do('DROP TABLE `NOTES`;');
+            $db->do('ALTER TABLE `life_log_rename_column_new_table` RENAME TO `NOTES`');
+
+
+            #Update new LOG with notes RTF ids, in future versions, this will never be required anymore.
+            foreach my $date (keys %notes_ids){
+                #next if(ref($notes_ids{$date}) eq 'HASH');
+                my $nid = $notes_ids{$date};
+                my $stmt= "UPDATE LOG SET RTF =". $nid." WHERE DATE = '".$date."';";
+                try{
+                    $db->do($stmt);
+                }
+                 catch{
+                        LifeLogException -> throw(error=>"Upgrade statement -> [$stmt] failed!", show_trace=>1);
+                 }
+            }
+            undef %notes_ids;
+        }
+        #Version change still detected above.
+        #Need to run slow populuate check from config file.
+        $changed = 1;
+    }
+    elsif($hasLogTbl && $SCRIPT_RELEASE > $DB_VERSION && $DB_VERSION < 2.0){
+        #dev 1.9 main log view has changed in 1.8..1.9, above scope will perform anyway, its drop, to be recreated later.
+        my $t ="BYTE"; $t = "SMALLINT" if Settings::isProgressDB();
+        $db->do('DROP VIEW '.Settings->VW_LOG); delete($curr_tables{Settings->VW_LOG});
+        $db->do("ALTER TABLE LOG ADD COLUMN RTF $t default 0");
+        delete($curr_tables{Settings->VW_LOG});
+        $changed = 1;
+    }
+    elsif($hasLogTbl && $SCRIPT_RELEASE > $DB_VERSION && $DB_VERSION < 2.2){
+        my $t ="BYTE"; $t = "SMALLINT" if Settings::isProgressDB();
+        $db->do("ALTER TABLE LOG ADD COLUMN RTF $t default 0");$changed = 1;
+    }
+    elsif($SCRIPT_RELEASE > $DB_VERSION){$changed = 1;}
+
+    if(!$hasLogTbl) {
+
+        if($sssCreatedDB){
+            print $cgi->header, $cgi->start_html,
+            q(<center><font color=red><b>A new alias login detect! <br>
+            Server security measure has been triggered -> Sorry further new alias login/creation not allowed!</b>
+            </font><br><br>Contact your network admin.</center>).$_,$cgi->end_html;
+            exit;
+        }
+
+        $db->do(Settings::createLOGStmt());
+
+        my $st = $db->prepare('INSERT INTO LOG(ID_CAT,DATE,LOG) VALUES (?,?,?)');
+           $st->execute( 3, Settings::today(), "DB Created!");
+           $session->param("cdb", "1");
+    }
+
+    # From v.1.6 view uses server side views, for pages and correct record by ID and PID lookups.
+    # This should make queries faster, less convulsed, and log renumeration less needed for accurate pagination.
+    if(!$curr_tables{Settings->VW_LOG}) {
+        $db->do(Settings::createViewLOGStmt()) or LifeLogException -> throw("ERROR:".$@);
+    }
+    # From 2.2+
+    #Do we need to create, view overrides?
+    if($VW_OVR_SYSLOGS){
+        if($PAGE_EXCLUDES && $PAGE_EXCLUDES =~ /,6,/){
+            $PAGE_EXCLUDES .= ",6";
+        }
+        else{
+            $PAGE_EXCLUDES = "6";
+        }
+    }
+    if(!$curr_tables{Settings->VW_LOG_OVERRIDE_WHERE}){
+        if($VW_OVR_WHERE){
+            $db->do($sql=createPageViewWhereOverrideSQL());
+            Settings::configProperty($db, 206,'^VW_OVR_WHERE',$VW_OVR_WHERE);
+        }
+
+    }elsif($VW_OVR_WHERE && $VW_OVR_WHERE ne $curr_config{'^VW_OVR_WHERE'}){
+           $db->do('DROP VIEW '.Settings->VW_LOG_OVERRIDE_WHERE);
+           $db->do($sql=createPageViewWhereOverrideSQL());
+           Settings::configProperty($db, 206,'^VW_OVR_WHERE',$VW_OVR_WHERE);
+    }elsif($curr_config{'^VW_OVR_WHERE'}){Settings::configProperty($db, 206,'^VW_OVR_WHERE',0);}
+
+    if(!$curr_tables{Settings->VW_LOG_WITH_EXCLUDES}) {
+        # To cover all possible situations, this test elses too.
+        # As an older existing view might need to be recreated, to keep in synch.
+        if($PAGE_EXCLUDES){
+           $db->do($sql=createPageViewExcludeSQL());
+           Settings::configProperty($db, 204, '^PAGE_EXCLUDES',$PAGE_EXCLUDES);
+        }
+    } # Updating here too if excludes in config file have been removed.
+    elsif($PAGE_EXCLUDES && $PAGE_EXCLUDES ne $curr_config{'^PAGE_EXCLUDES'}){
+           $db->do('DROP VIEW '.Settings->VW_LOG_WITH_EXCLUDES);
+           $db->do($sql=createPageViewExcludeSQL());
+           Settings::configProperty($db, 204, '^PAGE_EXCLUDES',$PAGE_EXCLUDES);
+
+    }elsif($curr_config{'^PAGE_EXCLUDES'}){Settings::configProperty($db, 204, '^PAGE_EXCLUDES',0);}
+
+    if(!$curr_tables{'CAT'}) {
+        $db->do($sql=Settings::createCATStmt());
+        $changed = 1;
+    }else{
+        # If empty something happened to it. It shouldn't be EMPTY!
+        my @ret=Settings::selectRecords($db, "SELECT count(0) from CAT;")->fetchrow_array();
+        $changed = 1 if (!$ret[0]);
+    }
+    #Have cats been wiped out?
+    $changed = 1 if Settings::countRecordsIn($db, 'CAT') == 0;
+
+    #TODO Future table for multiple cats per log if ever required.
+    if(!$curr_tables{'LOGCATSREF'}) {
+        $db->do($sql=Settings::createLOGCATSREFStmt());
+    }
+
+    if(!$curr_tables{'AUTH'}) {
+        $db->do($sql=Settings::createAUTHStmt());
+        my $st = $db->prepare('INSERT INTO AUTH VALUES (?,?,?,?);');
+           $st->execute($alias, $passw,"",0);
+           $st->finish();
+    }
+    Settings::configProperty($db, 222, '^DB_PALS',$pass);
+    #
+    # Scratch FTS4 implementation if present.
+    #
+    if($curr_tables{'NOTES_content'}) {
+        $db->do('DROP TABLE NOTES;');
+        $db->do('DROP NOTES_content;');
+        $hasNotesTbl = 0;
+    }
+    #
+    # New Implementation as of 1.5, cross SQLite Database compatible.
+    #
+    if(!$hasNotesTbl) {$db->do($sql=Settings::createNOTEStmt())}
+
+    if(Settings::isProgressDB()){
+        my @tbls = $db->tables(undef, 'public');
+        foreach (@tbls){
+            my $t = uc substr($_,7);
+            $curr_tables{$t} = 1;
+        }
+        if(!$curr_tables{Settings->VW_LOG}) {
+            LifeLogException -> throw(Settings->VW_LOG." not created! Try logging in again.");
+        }
+    }
+
+    if($changed){
+        #It is also good to run db fix (config page) to renum if this is an release update?
+        #Release in software might not be what is in db, which counts.
+        #This here next we now update.
+        my @r = Settings::selectRecords($db, 'SELECT ID, VALUE FROM CONFIG WHERE NAME LIKE \'RELEASE_VER\';')->fetchrow_array();
+        my $did = $r[0];
+        my $dnm = $r[1];
+        my $cmp = $dnm eq $SCRIPT_RELEASE;
+        $DBG .= "Upgrade cmp(RELESE_VER:'$dnm' eq Settings::release:'$SCRIPT_RELEASE') ==  $cmp";
+        #Settings::debug(1);
+        if(!$cmp){
+            Settings::renumerate($db);
+            #App private inner db properties, start from 200.
+            #^REL_RENUM is marker that an renumeration is issued during upgrade.
+            my $pv = &Settings::obtainProperty($db, '^REL_RENUM');
+            if($pv){
+                $pv++;
+            }
+            else{
+                $pv = 0;
+            }
+            Settings::configProperty($db, 200, '^REL_RENUM',$pv);
+            Settings::configProperty($db, $did>0?$did:0, 'RELEASE_VER', $SCRIPT_RELEASE);
+            Settings::toLog($db, "Upgraded Life Log from v.$dnm to v.$SCRIPT_RELEASE version, this is the $pv upgrade.") if $pv;
+        }
+        populate($db);
+    }
+    Settings::toLog($db, "Log accessed by $alias.") if(Settings::trackLogins());
+    #
+     $db->disconnect();
+    #
+    #Still going through checking tables and data, all above as we might have an version update in code.
+    #Then we check if we are loged in intereactively back. Interective, logout should bring us to the login screen.
+    # Bypassing auto login. So to start maybe working on another database, and a new session.
+    return 1 if $cgi->param('autologoff') == 1;
+ }catch{
+     LifeLogException -> throw(error=>"DSN:".Settings::dsn()." Error:".$@."\nLAST_SQL:".$sql."\npwd:".`pwd`,show_trace=>1);
+ }
+ return 0;
+}
+
+sub createPageViewExcludeSQL {
+
+    my ($where,$days) = 0;
+    my $parse = $PAGE_EXCLUDES;
+    my @a = split('=',$parse);
+    if(scalar(@a)==2){
+        $days  = $a[0];
+        $parse = $a[1];
+    }
+    if(Settings::isProgressDB()){$where = "WHERE a.date >= (timestamp 'now' - interval '$days days') OR"}
+    else{$where = "WHERE a.date >= date('now', '-$days day') OR"}
+    @a = split(',',$parse);
+    foreach (@a){      $where .= " ID_CAT!=$_ AND";   }
+    $where =~ s/\s+OR$//;
+    $where =~ s/\s+AND$//;
+    return Settings::createViewLOGStmt(Settings->VW_LOG_WITH_EXCLUDES,$where);
+
+}
+
+sub createPageViewWhereOverrideSQL {
+
+    my ($where,$days) = ("",0);
+    my $parse = $PAGE_EXCLUDES;
+    my @a = split('=',$parse);
+    if(scalar(@a)==2){
+        $days  = $a[0];
+        $parse = $a[1];
+    }
+    @a = split(',',$parse);
+    foreach (@a){ $where .= " ID_CAT!=$_ AND"; }
+
+    @a = toTokens($VW_OVR_WHERE);
+    foreach (@a){$where .= $_.' '}
+        #    my @b = split('=',$_);
+        #    if($b[1]){
+        #        my $interval ="";
+        #        my $d = "a.date >= (timestamp 'now' - interval '$interval";
+        #    }else{
+        #        LifeLogException->throw(error=>"Invalid SQL assignment for:VW_OVR_WHERE=[$VW_OVR_WHERE]",show_trace=>1);
+        #    }
+
+    #OLDER_THAN=2months
+    #a.date >= date('now', '-24 hour')
+
+    if(Settings::isProgressDB()){$where = "WHERE $where a.date >= (timestamp 'now' - interval '24 hours')"}
+    else{$where = "WHERE $where a.date >= date('now', '-24 hours')"}
+
+
+    return Settings::createViewLOGStmt(Settings->VW_LOG_OVERRIDE_WHERE,$where);
+
+}
+
+
+sub toTokens {
+    my $base = shift;
+    my @ret = ();
+    my @splt = split(/\s+/, $base);
+    my ($prev,$prevCol,$prevNeg,$resolve, $grp) = ("");
+    foreach my $token(@splt){
+        if($token eq '=' || $token eq '=\''){
+            $grp = $prev; next;
+        }
+        elsif($token=~ /[^!=<>\n]+=$/){
+            $grp = $token =~ s/=$//g; next;
+        }
+        elsif($grp){
+            if($reserved{$token}){
+                push @ret, $grp; $grp = "";
+            }
+            else{
+                $grp .= ' '.$token;
+                if($token =~ m/'$/){
+                   $grp .=')';
+                   if($reserved{$prev}){push @ret, $prev}
+                   push @ret, $grp; $grp = "";
+                }
+                next;
+            }
+        }
+        elsif($reserved{$token}){
+
+            if($reserved{$prev} && $ret[-1] ne $prev){
+                push @ret, $prev;
+            }
+            if($token eq 'NOT'){
+                if (!$prevCol){
+                    $prevNeg = ' !=0 '; next;
+                }else{
+                     $token = $prevCol . ' !=0 '; push @ret,$token; $prevCol = 0; next;
+                }
+            }
+            elsif($token eq 'OLDER_THAN'){
+                $prev =  "a.DATE >= date('now',-";
+                next;
+            }
+            elsif($token eq 'FROM'){
+                $prev =  "a.DATE <= date('now',";
+                next;
+            }elsif($token eq 'TO'){
+                $prev =  "a.DATE >= '";
+                next;
+            }
+
+            if($prevCol){
+               $token = $prevCol.' '.$token; $prevCol=0;
+               push @ret,$token;
+            }elsif($prev eq $token){
+               push @ret,$token;
+            }
+            else{
+                $prev =$token;
+            }
+        }
+        elsif($columns{$token}){
+            if($reserved{$prev}&& $ret[-1] ne $prev){
+                push @ret, $prev;
+            }
+            if($token eq 'CAT'){
+               $prevCol = 'ID_CAT'; next;
+            }
+            elsif($prevNeg){
+                $token .= ' != 0'; push @ret,$token; $prevNeg = 0; next;
+            }
+            elsif($reserved{$prev}){
+                $token .= ' == 1';
+            }
+            else{
+                $prevCol=$token;
+            }
+             push @ret, $token;
+
+        }
+        else{ #value
+            if($token =~ m/^'/){
+               $resolve = $token =~ s/^'//g;
+               if($resolve =~ m/'$/){
+                   $token = $resolve =~  s/'$//g; $resolve ="";
+               }else{next}
+            }
+            elsif($token =~ m/'$/ and $resolve){
+                $token =~ s/^$//g;
+                $token = $resolve.' '.$token; $resolve ="";
+            }
+            elsif($resolve){
+                $resolve .= ' '. $token; next;
+            }
+            if($prevCol){
+                $token = $prev.' '.$token;
+            }
+            $prevCol = 0;
+            push @ret,$token;
+        }
+     $prev = $token;
+    }
+return @ret;
+}
+
+#@TODO Needs to be redone, use CNF 2.2, see also config.cgi
+sub populate {
+
+    my $db = shift;
+    my ($did,$name, $value, $desc);
+    my $inData = 0;
+    my $err = "";
+    my %vars = ();
+    my @lines;
+    my $tt = 0;
+
+    open(my $fh, "<:perlio", &Settings::logPath.'main.cnf' ) or LifeLogException->throw( "Can't open main.cnf: $!");
+    read $fh, my $content, -s $fh;
+             @lines  = split '\n', $content;
+    close $fh;
+
+    my $cnfIns = 'INSERT INTO CONFIG (ID,NAME,VALUE,DESCRIPTION) VALUES (?,?,?,?)'; #for silly bckwrds compatbl;
+       $cnfIns = 'INSERT INTO CONFIG (NAME,VALUE,DESCRIPTION) VALUES (?,?,?)' if(Settings::isProgressDB());
+    my $insCnf = $db->prepare($cnfIns);
+    my $insCat = $db->prepare('INSERT INTO CAT VALUES (?,?,?)');
+                 $db->begin_work();
+    foreach my $line (@lines) {
+
+                    last if ($line =~ /<MIG<>/);#Not doing it with CNF1.0
+
+                       if( index( $line, '<<CONFIG<' ) == 0 )  {$tt = 0; $inData = 0;}
+                    elsif( index( $line, '<<CAT<'    ) == 0 )  {$tt = 1; $inData = 0;}
+                    elsif( index( $line, '<<LOG<'    ) == 0 )  {$tt = 2; $inData = 0;}
+                    next if($line=~m/^>>/);
+
+                    my @tick = split("`",$line);
+                    if( scalar @tick  == 2 ) {
+
+                        my %hsh = $tick[0] =~ m[(\S+)\s*=\s*(\S+)]g;
+                                    if ( scalar %hsh ) {
+                                            for my $key ( keys %hsh ) {
+                                                        my %nash = $key =~ m[(\S+)\s*\|\$\s*(\S+)]g;
+                                                        if ( scalar(%nash) ) {
+                                                                for my $id ( keys %nash ) {
+                                                                    my $name  = $nash{$id};
+                                                                    my $value = $hsh{$key};
+                                                                    if($vars{$id}){
+$err .= "UID{$id} taken by $vars{$id}-> $line\n";
+                                                                    }
+                                                                    else{
+                                                                            my @arr = Settings::selectRecords($db,"SELECT ID FROM CONFIG WHERE NAME LIKE '$name';")->fetchrow_array();
+                                                                            $inData = 1;
+                                                                            if(!@arr) {
+                                                                                $DBG .= "conf.ins->".$name.",".$value.",".$tick[1]."\n";
+                                                                               if(Settings::isProgressDB()) {$insCnf->execute($name,$value,$tick[1])}
+                                                                               else{$insCnf->execute($id,$name,$value,$tick[1])}
+                                                                            }
+
+                                                                    }
+                                                                }
+                                                        }else{
+$err .= "Invalid, spec'ed {uid}|{variable}`{description}-> $line\n";
+                                                        }
+
+                                                }#rof
+                                    }
+                                     elsif($tt==0){
+$err .= "Invalid, spec'd entry -> $line\n";
+                                    }elsif($tt==1){
+                                            my @pair = $tick[0] =~ m[(\S+)\s*\|\s*(\S+\s*\S*)]g;
+                                            if ( scalar(@pair)==2 ) {
+                                                        # In older DB versions the Category name could be different, user modified.
+                                                        # The unique id and name interwined, changed. Hence we check on name first.
+                                                        # Then check if the  ID is available. If not just skip, the import. Reseting can fix that latter.
+                                                        if(!Settings::selectRecords($db, "SELECT ID FROM CAT WHERE NAME LIKE '$pair[1]';")->fetchrow_array()) {
+                                                            if(!Settings::selectRecords($db, "SELECT ID FROM CAT WHERE ID = $pair[0];")->fetchrow_array()){
+                                                                $DBG .= "cat.ins->".$pair[0].",".$pair[1].",".$tick[1]."\n";
+                                                                $insCat->execute($pair[0],$pair[1],$tick[1]);
+                                                            }
+                                                        }
+                                                        $inData = 1;
+                                            }
+                                            else {
+$err .= "Invalid, spec'ed {uid}|{category}`{description}-> $line\n";
+                                            }
+                    }elsif($tt==2){
+                                            #TODO Do we really want this? Insert into log from config script.
+                                    }
+                    }elsif($inData && length($line)>0){
+
+                            if(scalar(@tick)==1){
+                                $err .= "Corrupt Entry, (where is '\`' backtick for description?) -> $line\n";
+                            }
+                            else{
+                                $err .= "Corrupt Entry -> $line\n";
+                            }
+
+                    }
+        }
+    LifeLogException->throw(error=>"Configuration script ".&Settings::logPath."/main.cnf contains errors.\nErr:$err", show_trace=>1) if $err;
+    $db->commit();
+}
+
+sub selSQLTbl {
+      my $name = $_[0];
+return "SELECT name FROM sqlite_master WHERE type='table' AND name='$name';"
+}
+
+sub selSQLView {
+      my $name = $_[0];
+return "SELECT name FROM sqlite_master WHERE type='view' AND name='$name';"
+}
+
+
+sub logout {
+
+    if(Settings::trackLogins()){
+            try{
+                $alias = $session->param('alias');
+                $passw = $session->param('passw');
+                if($alias){
+                    my $db = Settings::connectDB($DB_NAME, $alias, $passw);
+                    Settings::toLog($db, "Log has properly been logged out by $alias.");
+                    $db->disconnect();
+                }
+            }catch{
+                my $err = $@;
+                my $dbg = "" ;
+                my $pwd = `pwd`;
+                $pwd =~ s/\s*$//;
+                $dbg = "--DEBUG OUTPUT--\n$DBG" if Settings::debug();
+                print $cgi->header,
+                "<font color=red><b>SERVER ERROR</b></font> on ".DateTime->now().
+                "<pre>".$pwd."/$0 -> &".caller." -> [$err]","\n$dbg</pre>",
+                $cgi->end_html;
+                exit;
+            }
+    }
+
+
+    print $cgi->header(-expires=>"0s", -charset=>"UTF-8", -cookie=>$cookie);
+    print $cgi->start_html(-title => "Personal Log Login",
+                           -style =>{-type => 'text/css', -src => Settings::theme('css')},
+            );
+    $LOGOUT_IFRAME  = "" if not $LOGOUT_IFRAME_ENABLED;
+    print qq(<div class="rz"><h2>You have properly logged out of the Life Log Application!</h2>
+    <br>
+    <form action="login_ctr.cgi"><input type="hidden" name="autologoff" value="1"/><input type="submit" value="$LOGOUT_RELOGIN_TXT"/></form><br>
+    </br>
+    $LOGOUT_IFRAME
+    </div>
+    );
+
+    print $cgi->end_html;
+
+    $session->delete();
+    $session->flush();
+    my $bckLog =  Settings::logPath()."backup_restore.log";
+    unlink $bckLog if(-e $bckLog);
+
+    exit;
+}
+
+=begin copyright
+Programed by  : Will Budic
+EContactHash  : 990MWWLWM8C2MI8K (https://github.com/wbudic/EContactHash.md)
+Source        : https://github.com/wbudic/LifeLog
+Open Source Code License -> https://github.com/wbudic/PerlCNF/blob/master/ISC_License.md
+=cut copyright
+
diff --git a/htdocs/cgi-bin/main.cgi b/htdocs/cgi-bin/main.cgi
new file mode 100755 (executable)
index 0000000..254ed84
--- /dev/null
@@ -0,0 +1,1675 @@
+#!/usr/bin/env perl
+#
+# Programed by: Will Budic
+# Open Source License -> https://choosealicense.com/licenses/isc/
+#
+use v5.30; #use diagnostics;
+use warnings;
+use strict;
+no warnings "experimental::smartmatch";
+use Exception::Class ('LifeLogException');
+use Syntax::Keyword::Try;
+use DBI;
+use DBD::Pg;
+use DBD::Pg qw(:pg_types);
+use Date::Language;
+use Date::Parse;
+use Time::localtime;
+
+use Regexp::Common qw /URI/;
+use List::MoreUtils qw(uniq);
+use Gzip::Faster;
+use Data::Dumper;
+
+#DEFAULT SETTINGS HERE!
+use lib "system/modules";
+require Settings;
+
+my $db      = Settings::fetchDBSettings();
+my $cgi     = Settings::cgi();
+my $sss     = Settings::session();
+my $sid     = Settings::sid();
+my $dbname  = Settings::dbName();
+my $alias   = Settings::alias();
+my $passw   = Settings::pass();
+my $VW_PAGE = Settings->VW_LOG;
+
+my $sssCDB  = session('cdb');
+my ($vmode, $imgw, $imgh );
+
+if ( !$alias ||  !$passw ) {
+       print $cgi->redirect("alogin_ctr.cgi?CGISESSID=$sid");
+       exit;
+}
+
+### Authenticate session to alias passw
+&authenticate;
+#
+my $log_rc      = 0;
+my $log_rc_prev = 0;
+my $log_cur_id  = 0;
+my $log_top     = 0;
+my $rs_keys     = param('keywords');
+my $prm_aa      = param("aa");
+my $prm_vc      = param("vc");
+my $prm_vc_lst  = param("vclst");
+my $prm_xc      = param("xc");
+my $prm_xc_lst  = param("xclst");
+my $prm_rtf     = param("vrtf");
+my $rs_dat_from = param('v_from');
+my $rs_dat_to   = param('v_to');
+my $rs_prev     = param('rs_prev');
+my $rs_cur      = param('rs_cur');
+my $rs_page     = param('rs_page');
+
+
+sub param{
+       my $v = $cgi->param(shift);
+       return 0 if !$v;
+       $v;
+}
+
+
+sub session{
+       my $v = $sss->param(shift);
+       return 0 if !$v;
+       $v;
+}
+
+if(Settings::anon('^VW_OVR_WHERE')){
+       if(!$cgi->param('srch_reset')&&!$prm_vc&&!$prm_vc_lst&&!$prm_aa&&!$prm_rtf&&!$prm_xc&&!$prm_xc_lst&&!$rs_dat_from&&!$rs_dat_to&&!$rs_keys){
+               $VW_PAGE = Settings->VW_LOG_OVERRIDE_WHERE;
+       }
+}elsif(Settings::anon('^PAGE_EXCLUDES')){
+       if(!$cgi->param('srch_reset')&&!$prm_vc&&!$prm_vc_lst&&!$prm_aa&&!$prm_rtf&&!$prm_xc&&!$prm_xc_lst&&!$rs_dat_from&&!$rs_dat_to&&!$rs_keys){
+               $VW_PAGE = Settings->VW_LOG_WITH_EXCLUDES;
+       }
+}
+
+my $sqlView     = 'SELECT ID, ID_CAT, DATE, LOG, RTF, AMOUNT, AFLAG, STICKY, PID FROM '.$VW_PAGE;#Only to be found here, the main SQL select statement.
+my $stmS        = $sqlView." WHERE";
+my $stmE        = ' LIMIT '.&Settings::viewAllLimit.';';
+my $stmD        = "";
+my $sm_reset_all= "";
+my $rec_limit   = Settings::recordLimit();
+
+#Set to 1 to get debug help. Switch off with 0.
+my $DEBUG       = Settings::debug();
+
+#END OF SETTINGS
+my $rtf_buffer = 0;
+my ($BUFFER, $D_BUFF)=("","");
+
+my $lang  = Date::Language->new(Settings::language());
+my $today = Settings->today();
+
+# We buffer the whole page creation, for speed and control, or to send compressed or not to client.
+sub toBuf {
+       if($DEBUG){$D_BUFF .= shift}
+       else{$BUFFER .= shift}
+}
+
+if(!$prm_vc && &Settings::keepExcludes){
+       if($prm_xc_lst){
+               Settings::configProperty($db, 201, '^EXCLUDES', $prm_xc_lst);
+       }else{
+               $prm_xc_lst = &Settings::obtainProperty($db, '^EXCLUDES');
+               $prm_xc = $prm_xc_lst if (!$prm_xc && !$cgi->param('srch_reset'));
+       }
+}
+
+if ( !$rs_dat_to && $rs_dat_from ) {
+       my $dur = $today;
+       $dur->add( months => 1 );
+       $rs_dat_to = DateTime::Format::SQLite->parse_datetime($dur);
+}
+
+if ( $rs_dat_from && $rs_dat_to ) {
+       $stmD = qq( DATE BETWEEN date('$rs_dat_from') AND date('$rs_dat_to') );
+}
+
+#Toggle if search deployed.
+my $toggle = "";
+if ( $rs_keys || $stmD || $prm_vc > 0 || $prm_xc > 0 || $prm_aa > 0) { $toggle = 1; }
+
+
+##Handle Session Keeps
+$sss->expire(Settings::sessionExprs());
+$sss->param('theme', Settings::theme('css'));
+$sss->param('bgcolor', Settings::theme('colBG'));
+
+#sss->param('sss_main', $today);
+#
+#Reset Clicked
+if(param('srch_reset') == 1){
+       $sss->clear('sss_vc');
+       $sss->clear('sss_xc');
+       $sss->clear('sss_ord_cat');
+}
+
+if($prm_vc &&$prm_vc ne ""){
+
+       #TODO (2020-11-05) This is a subrotine candidate. It gets too complicated. should not have both $prm_vc and $prm_vc_lst;
+       $prm_xc =~ s/^0*//g;
+       $prm_xc_lst=~ s/^\,$//g;
+       if(!$prm_vc_lst||$prm_vc_lst==0){#} && index($prm_xc, ',') > 0){
+               $prm_vc_lst =  $prm_vc;
+       }else{
+               my $f;
+               my @vc_lst = split /\,/, $prm_vc_lst;
+               @vc_lst = uniq(sort { $a <=> $b }  @vc_lst);
+               foreach my $n(@vc_lst){
+                       if($n == $prm_vc){ $f=1; last; }
+               }
+               if(!$f){#not found view was clicked changing category but not adding it to vc list. Let's add it to the list.
+                       $prm_vc_lst .= ",$prm_vc";
+               }
+               $prm_vc_lst=~ s/\,$//g;
+               $prm_vc_lst=~ s/\,\,/\,/g;
+       }
+
+
+       if ($cgi->param('sss_vc') eq 'on'){
+               $sss->param('sss_vc', $prm_xc);
+               $sss->param('sss_vc_lst', $prm_xc_lst);
+       }else{
+               $sss->clear('sss_vc');
+               $sss->clear('sss_vc_lst');
+       }
+
+}else{
+       $prm_vc = session('sss_vc');
+       $prm_vc_lst = session('sss_vc_lst');
+}
+
+if($prm_xc &&$prm_xc ne ""){
+
+       #TODO (2020-02-23) It gets too complicated. should not have both $prm_xc and $prm_xc_lst;
+       $prm_xc =~ s/^0*//g;
+       $prm_xc_lst=~ s/^\,$//g;
+       if(!$prm_xc_lst||$prm_xc_lst==0){#} && index($prm_xc, ',') > 0){
+               $prm_xc_lst =  $prm_xc;
+       }else{
+               my $f;
+               my @xc_lst = split /\,/, $prm_xc_lst;
+               @xc_lst = uniq(sort { $a <=> $b }  @xc_lst);
+               foreach my $n(@xc_lst){
+                       if($n == $prm_xc){ $f=1; last; }
+               }
+               if(!$f){#not found view was clicked changing category but not adding it to ex list. Let's add it to the list.
+                       $prm_xc_lst .= ",$prm_xc";
+               }
+               $prm_xc_lst=~ s/\,$//g;
+               $prm_xc_lst=~ s/\,\,/\,/g;
+       }
+       if ($cgi->param('sss_xc') eq 'on'){
+               $sss->param('sss_xc', $prm_xc);
+               $sss->param('sss_xc_lst', $prm_xc_lst);
+       }else{
+               $sss->clear('sss_xc');
+               $sss->clear('sss_xc_lst');
+       }
+
+}else{
+       $prm_xc = session('sss_xc');
+       $prm_xc_lst = session('sss_xc_lst');
+}
+
+#Either Session or requested.
+if(param('sss_ord_cat') eq 'on'){
+       $stmE = ' ORDER BY ID_CAT '.$stmE;
+       $sss->param('sss_ord_cat', 1);
+}else{
+       $sss->param('sss_ord_cat', 0);
+}
+##
+my @vc_lst = split /\,/, $prm_vc_lst;
+@vc_lst = uniq(sort { $a <=> $b }  @vc_lst);
+my @xc_lst = split /\,/, $prm_xc_lst;
+@xc_lst = uniq(sort { $a <=> $b }  @xc_lst);
+
+$sss->flush();
+
+#tag related framed sizing.
+my @arrwh = split /x/, &Settings::imgWidthHeight;
+if ( @arrwh == 2 ) {
+       $imgw = $arrwh[0];
+       $imgh = $arrwh[1];
+}else {    #defaults
+       $imgw = 210;
+       $imgh = 120;
+}
+
+my $st;
+my $sqlCAT = "SELECT ID, NAME, DESCRIPTION FROM CAT ORDER BY ID;";
+my $sqlVWL = "$stmS STICKY = true $stmE";
+my $isPUBViewMode = Settings::pub() && Settings::sqlPubors();
+
+toBuf ("## Using db ->". Settings::dsn(). "\n") if $DEBUG;
+
+$st = $db->prepare($sqlCAT);
+$st->execute() or LifeLogException->throw($DBI::errstri);
+
+my %hshCats;
+my %hshDesc = ();
+my $c_sel   = 1;
+my $data_cats = "";
+my $td_cat = "<tr><td><ul>";
+my $td_itm_cnt;
+# We need to preserve key order of categories by user, no sorting or randomness allowed.
+my @keys;
+while (my @row = $st->fetchrow_array()) {
+       my $n = $row[1];
+       $n =~ s/\s*$//g;
+       push @keys, $row[0];
+       $hshCats{$row[0]} = $n;
+       $hshDesc{$row[0]} = $row[2];
+       $td_itm_cnt++;
+}
+my $present_rows_cnt =  $td_itm_cnt > 20 ? 2+(($td_itm_cnt)/10)*2 : 4;
+$td_itm_cnt = 0;
+foreach my $key(@keys){
+       if($td_itm_cnt>$present_rows_cnt){
+               $td_cat .= "</ul></td><td><ul>";
+               $td_itm_cnt = 0;
+       }
+       $td_cat .= "<li id='".$key."'><a href='#'>".$hshCats{$key}."</a></li>";
+       $td_itm_cnt++;
+}
+$present_rows_cnt++ if $td_itm_cnt<$present_rows_cnt+1;
+if($td_itm_cnt<$present_rows_cnt){#fill spacing.
+       for (my $i=0;$i<$present_rows_cnt-$td_itm_cnt;$i++){
+               $td_cat .= "<li><a href='#'></a>&nbsp;</li>";
+       }
+}
+$td_cat .= "</ul></td></tr>";
+
+
+
+
+for my $key ( keys %hshDesc ) {
+       my $kv = $hshDesc{$key};
+       next if !$kv;
+       if ( $kv ne ".." && index($key,'HASH(0x')!=0) {
+               my $n = $hshCats{$key};
+               $data_cats .= qq(<meta id="cats[$key]" name="$n" content="$kv">\n);
+       }
+}
+my $eh;
+my $currsymb = &Settings::currenySymbol;
+if($isPUBViewMode){$eh = ""}
+else{$eh='<th>Edit</th>'}
+my $log_output =qq(<FORM id="frm_log" action="data.cgi" onSubmit="return formDelValidation();">
+<TABLE id="main_table" style="visibility:hidden" class="tbl" border="0" width=").&Settings::pagePrcWidth.qq(%">
+<tr class="hdr">
+       <th>Date</th>
+       <th>Time</th>
+       <th>Log</th>
+    <th>$currsymb</th>
+       <th>Category</th>
+    $eh
+</tr>);
+
+#We use js+perl, trickery to filter by amount type, as well.
+if($prm_aa >0){my $s = $prm_aa - 1;$prm_aa = " AFLAG=$s AND";}
+else{$prm_aa=""}
+if($prm_rtf){$stmS .= " RTF>0 AND";}
+
+if($isPUBViewMode){
+       $sqlVWL = $stmS." ".Settings::sqlPubors().$stmE;
+}elsif ( $rs_keys && $rs_keys ne '*' ) {
+
+       my @keywords = split /\W/, $rs_keys;
+       if ($prm_vc && $prm_vc != $prm_xc) {
+
+               if(@vc_lst){
+                       $stmS .= $prm_aa;
+                       foreach (@vc_lst){
+                               $stmS .= " ID_CAT=$_ OR";
+                       }
+               }else{
+                       $stmS .= $prm_aa . " ID_CAT=$prm_vc AND";
+               }
+
+       }else {
+               if($prm_xc>0){
+                       if(@xc_lst){
+                               $stmS .= $prm_aa;
+                               foreach (@xc_lst){
+                                       $stmS .= " ID_CAT!=$_ AND";
+                               }
+                       }else{
+                               $stmS .= $prm_aa . " ID_CAT!=$prm_xc AND";
+                       }
+               }
+       }
+
+       if ($stmD) {
+
+               #was previous an OR?, replace with an AND we filter further by keywords.
+               $stmS =~ s/\sOR$/ and/gi;
+               $stmS .= $stmD . " AND";
+       }
+
+       if (@keywords) {
+               foreach (@keywords) {
+                       next if $_ eq "";
+
+                       #was previous an OR?, replace with an AND we filter further by keywords.
+                       $stmS =~ s/\sOR$/ and/gi;
+                       if(Settings::isProgressDB()){$stmS .= " LOWER(LOG) ~ '" . lc $_ . "'"}
+                       else{$stmS .= " LOWER(LOG) REGEXP '\\b" . lc $_ . "\\b'"}
+                       if ( \$_ != \$keywords[-1] ) {
+                               $stmS = $stmS . " and ";
+                       }
+               }
+               $sqlVWL = $stmS . $stmE;
+       }
+}elsif ($prm_vc) {
+       if(@vc_lst){
+               foreach (@vc_lst){
+                       $stmS .= " ID_CAT=$_ OR";
+               }
+               $sqlVWL = $stmS . $prm_aa;
+               $sqlVWL =~ s/OR$//g;
+               $sqlVWL .= $stmE;
+       }elsif ($stmD) {
+               $sqlVWL = $stmS . $prm_aa . $stmD . " AND ID_CAT=" . $prm_vc . $stmE;
+       }else {
+               $sqlVWL = $stmS . $prm_aa . " ID_CAT=" . $prm_vc . $stmE;
+       }
+}else {
+       if($prm_xc>0){
+               if(@xc_lst){
+                       my $ands = "";
+                       foreach (@xc_lst){
+                               $ands .= " ID_CAT!=$_ AND";
+                       }
+
+                       $ands =~ s/AND$//g;
+                       $sqlVWL = $stmS .$prm_aa. $ands . $stmE;
+               }else{
+                       $sqlVWL = $stmS . $prm_aa." ID_CAT!=$prm_xc;" . $stmE;
+               }
+       }
+       if ($stmD) {
+               $sqlVWL = $stmS . $prm_aa.' '. $stmD . $stmE;
+       }elsif($prm_aa){
+               $prm_aa =~ s/AND$//g;
+               $sqlVWL = $stmS .$prm_aa.' '.$stmE;
+       }elsif($prm_rtf){
+               $stmS   =~ s/AND$//g;
+               $sqlVWL = $stmS.$stmE;
+       }
+}
+
+###################
+&processSubmit;
+###################
+
+my $tfId      = 0;
+my $id        = 0;
+my $log_start = index $sqlVWL, "<=";
+my $re_a_tag  = qr/<a\s+.*?>.*<\/a>/si;
+my $regex = 'REGEXP';
+$regex = ') ~' if Settings::isProgressDB();
+my $isInViewMode = rindex ($sqlVWL, 'PID<=') > 0 || rindex ($sqlVWL, 'ID_CAT=') > 0 || $prm_aa || rindex ($sqlVWL, $regex)>0 || $prm_rtf;
+
+toBuf $cgi->pre("###[Session PARAMS->isV:$isInViewMode|vc=$prm_vc|xc=$prm_xc|aa: $prm_aa|xc_lst=$prm_xc_lst|\@xc_lst=@xc_lst|vrtf=$prm_rtf|keepExcludes=".&Settings::keepExcludes."] -> ".$sqlVWL) if $DEBUG;
+
+if ( $log_start > 0 ) {
+
+       #check if we are at the beggining of the LOG table?
+       my $stc = traceDBExe('SELECT PID from '.$VW_PAGE.' LIMIT 1;');
+       my @row = $stc->fetchrow_array();
+       $log_top = $row[0];
+       if ($log_top == $rs_prev && $rs_cur == $rs_prev ) {
+               $log_start = -1;
+       }
+       $stc->finish();
+}
+#
+# Fetch log entries!
+#
+my $CID_EVENT = 9;
+my $tags      = "";
+my $sum       = 0;
+my $exp       = 0;
+my $ass       = 0;
+
+#place sticky or view param.ed entries first!
+buildLog(traceDBExe($sqlVWL));
+
+#Following is saying is in page selection, not view selection, or accounting on type of sticky entries.
+if( !$isInViewMode && !$prm_vc  && !$prm_xc && !$rs_keys && !$rs_dat_from ){
+       $sqlVWL = "$stmS STICKY = false $stmE";
+       toBuf $cgi->pre("###2 -> ".$sqlVWL)  if $DEBUG;
+       buildLog(traceDBExe($sqlVWL));
+}
+
+
+sub traceDBExe {
+       my $sql = shift;
+       try{
+               toBuf("do:$sql") if ($DEBUG);
+               my $st = $db->prepare($sql);
+               $st ->execute() or LifeLogException->throw("Execute failed [$DBI::errstri]", show_trace=>1);
+               return $st;
+       }catch{
+               #BUG 31 fix.
+               if(Settings::isProgressDB() &&  index($sql,Settings->VW_LOG)>0){
+                       $db ->do(Settings::createViewLOGStmt());
+                       my $st = $db->prepare($sql);
+                       $st ->execute() or LifeLogException->throw("Execute failed [$DBI::errstri]", show_trace=>1);
+                       return $st;
+               }
+               LifeLogException->throw(error=>"DSN: [".Settings::dsn()."] Error encountered -> $@", show_trace=>1);
+       }
+}
+
+
+sub buildLog {
+       my $pst = shift;
+
+       #toBuf "## sqlVWL: $sqlVWL\n";
+       while ( my @row = $pst->fetchrow_array() ) {
+               my $i = 0;
+               $id = $row[$i++]; #ID must be rowid in LOG.
+               my $cid = $row[$i++]; #CID ID_CAT not used.
+               my $ct  = $hshCats{$cid}; #ID_CAT
+               my $dt  = DateTime::Format::SQLite->parse_datetime( $row[$i++] ); #LOG.DATE
+               my $log = $row[$i++]; #LOG.LOG
+               my $rtf = $row[$i++]; #ID_RTF since v.1.8 but just RTF from v.2.1
+               my $am  = $row[$i++];
+               $am =0 if !$am; #LOG.AMOUNT
+               my $af  = $row[$i++]; #AFLAG -> Asset as 0, Income as 1, Expense as 2
+               my $sticky = $row[$i++]; #Sticky to top
+               my $pid = $row[$i++]; #PID actual log ID in View.
+
+               $am =~ s/^\D|\,//g; #trim if it is money sql data type formated.
+
+               if ( $af == 1 ) { #AFLAG Income, assets are neutral.
+                       $sum += $am;
+               }elsif ( $af == 2 ) {
+                       $exp -= $am;
+               }else{
+                       $ass += $am;
+               }
+               $am =  &cam($am);
+
+               #Apostrophe in the log value is doubled to avoid SQL errors.
+               $log =~ s/''/'/g;
+               #
+               if ( !$ct ) {
+                       $ct = $hshCats{1};
+               }
+               if ( !$dt ) {
+                       $dt = $today;
+               }
+               if ( !$am ) {
+                       $am = "0.00";
+               }
+               if ( $log_rc_prev == 0 ) {
+                       $log_rc_prev = $id;
+               }
+               if ( $tfId > 0) {
+                       $tfId = 0;
+               }else {
+                       $tfId = 1;
+               }
+
+               my $sub      = "";
+               my $tagged   = 0;
+               my $log_orig = $log;
+
+               #Check for LNK takes precedence here as we also parse plain placed URL's for http protocol later.
+               if ( $log =~ /<<LNK</ ) {
+                       my $idx = $-[0] + 5;
+                       my $len = index( $log, '>', $idx );
+                       $sub = substr( $log, $idx + 1, $len - $idx - 1 );
+                       my $url = qq(<a href="$sub" target=_blank>$sub</a>);
+                       $tagged = 1;
+                       $log =~ s/<<LNK<(.*?)>+/$url/osi;
+               }
+
+               if ( $log =~ /<<IMG</ ) {
+                       my $idx = $-[0] + 5;
+                       my $len = index( $log, '>', $idx );
+                       $sub = substr( $log, $idx + 1, $len - $idx - 1 );
+                       my $url = qq(<img src="$sub"/>);
+                       $tagged = 1;
+                       $log =~ s/<<IMG<(.*?)>+/$url/osi;
+               }elsif ( $log =~ /<<FRM</ ) {
+                       my $idx = $-[0] + 5;
+                       my $len = index( $log, '>', $idx );
+                       $sub = substr( $log, $idx + 1, $len - $idx - 1 );
+                       my $lnk = $sub;
+                       if ( $lnk =~ /_frm.png/ ) {
+                               my $ext = substr( $lnk, index( $lnk, '.' ) );
+                               $lnk =~ s/_frm.png/$ext/;
+                               if ( not -e "./images/$lnk" ) {
+                                       $lnk =~ s/$ext/.jpg/;
+                                       if ( not -e "./images/$lnk" ) {
+                                               $lnk =~ s/.jpg/.gif/;
+                                       }
+                               }
+                               $lnk =qq(\n<a href="./images/$lnk" style="border=0;" target="_IMG">
+                       <img src="./images/$sub" width="$imgw" height="$imgh" class="tag_FRM"/></a>);
+                       }else {
+
+                               #TODO fetch from web locally the original image.
+                               $lnk =qq(\n<img src="$lnk" width="$imgw" height="$imgh" class="tag_FRM"/>);
+                       }
+                       $log =~ s/<<FRM<(.*?)>+/$lnk/o;
+                       $tagged = 1;
+               }
+
+               #Replace with a full link an HTTP URI
+               if ( $log =~ /<iframe / ) {
+                       my $a = q(<iframe width="560" height="315");
+                       my $b;
+                       given (Settings::frameSize()) {
+                               when("0") { $b = q(width="390" height="215") }
+                               when("1") { $b = q(width="280" height="180") }
+                               when("2") { $b = q(width="160" height="120") }
+                               default {
+                                       $b = &Settings::frameSize;
+                               }
+                       }
+                       $b = qq(<div><iframe align="center" $b);
+                       $log =~ s/$a/$b/o;
+                       $a = q(</iframe>);
+                       $b = q(</iframe></div>);
+                       $log =~ s/$a/$b/o;
+                       $tagged = 1;
+               }else {
+                       my @chnks = split( /($re_a_tag)/si, $log );
+                       foreach my $ch_i (@chnks) {
+                               next if $ch_i =~ /$re_a_tag/;
+                               next if index( $ch_i, "<img" ) > -1;
+                               $ch_i =~ s/https/http/gsi;
+                               $ch_i =~s/($RE{URI}{HTTP})/<a href="$1" target=_blank>$1<\/a>/gsi;
+                       }
+                       $log = join( '', @chnks );
+               }
+
+               while ( $log =~ /<<B</ ) {
+                       my $idx = $-[0];
+                       my $len = index( $log, '>', $idx ) - 4;
+                       my $sub = "<b>" . substr( $log, $idx + 4, $len - $idx ) . "</b>";
+                       $log =~ s/<<B<(.*?)>+/$sub/o;
+                       $tagged = 1;
+               }
+               while ( $log =~ /<<I</ ) {
+                       my $idx = $-[0];
+                       my $len = index( $log, '>', $idx ) - 4;
+                       last if $len<6;
+                       my $sub = "<i>" . substr( $log, $idx + 4, $len - $idx ) . "</i>";
+                       $log =~ s/<<I<(.*?)>+/$sub/o;
+                       $tagged = 1;
+               }
+               while ( $log =~ /<<TITLE</ ) {
+                       my $idx = $-[0];
+                       my $len = index( $log, '>', $idx ) - 8;
+                       last if $len<9;
+                       my $sub = "<h3>" . substr( $log, $idx + 8, $len - $idx ) . "</h3>";
+                       $log =~ s/<<TITLE<(.*?)>+/$sub/o;
+                       $tagged = 1;
+               }
+               while ( $log =~ /<<LIST</ ) {
+                       my $idx = $-[0];
+                       my $len = index( $log, '>', $idx ) - 7;
+                       last if $len<9;
+                       my $lst = substr( $log, $idx + 7, $len - $idx );
+                       my $sub = "";
+                       my @arr = split( /\n|\\n/, $lst );
+                       my $ml  = "";
+                       foreach my $ln (@arr) {
+                               $ln =~ s/^\s*//g;
+                               if ( $ln =~ /~$/ ) {
+                                       $ln =~ s/~$/<br>/g;
+                                       $ml .= $ln . ' ';
+                               }else {
+                                       if ($ml) {
+                                               $ml  .= $ln if length($ln) > 0;
+                                               $sub .= "<li>$ml</li>\n";
+                                               $ml = "";
+                                       }else {
+                                               $sub .= "<li>$ln</li>" if length($ln) > 0;
+                                       }
+                               }
+                       }
+
+                       $sub = "<div id='rz'><ul>$sub</ul></div>";
+                       $log =~ s/<<LIST<(\w*|\s*)*.*(>+?)/$sub/o;
+                       $tagged = 1;
+               }
+
+               #bold on start markup
+               $log =~ s/(^\*)(.*)(\*)(\\n)/<b>$2<\/b><br>/oi;
+
+               #Decode escaped \\n
+               $log =~ s/\r\n/<br>/gs;
+               $log =~ s/\\n/<br>/gs;
+
+               if ( $CID_EVENT == $row[1] ) {
+                       $log = "<font color='#eb4848' style='font-weight:bold'>$log</font>";
+                       $tagged = 1;
+               }elsif ( 1 == $row[1] ) {
+                       $log ="<font class='midnight' style='font-weight:bold;font-style:italic'>$log</font>";
+                       $tagged = 1;
+               }
+
+               #Tagged preserve originally stored entry in hidden numbered field.
+               if ($tagged) {
+                       $log_orig =~ s/<br>\n/<br>/g;
+                       $log_orig =~ s/</&#60;/g;
+                       $log_orig =~ s/>/&#62;/g;
+                       $log_orig =~ s/\\n/&#10;/g;
+                       $log_orig =~ s/\n/&#10;/g;
+                       $log_orig =~ s/\t/&#9;/g;
+                       $log_orig =~ s/\"/&#34;/g;
+                       $log_orig =~ s/\'/&#39;/g;
+                       $tags .= qq(<input type="hidden" id="g$id" value="$log_orig"/>\n);
+               }elsif(not &Settings::displayAll){
+                       my $h;
+                       if($log =~ m/(.*\s*.*?)<br>/){$h=$1}
+                       elsif($log =~ m/(\s*.*\n)/) {$h=$1}
+                       if($h){
+                               $log = $h.qq(<input type="hidden" id="h$id" value="$log"/><button id='btnRTF' onclick="return dispFullLog($id);"
+                                 class="ui-button ui-corner-all ui-widget"><span>&#8691;<span></button>);
+                       }
+               }
+
+               my ( $dty, $dtf ) = $dt->ymd;
+               my $dth = $dt->hms;
+               $dth .= " id=($id)" if $DEBUG;
+               if ( &Settings::universalDate == 1 ) {
+                       $dtf = $dty;
+               }else {
+                       $dtf = $lang->time2str( "%d %b %Y", $dt->epoch, &Settings::timezone);
+               }
+
+               if ( $rtf > 0 ) {
+                       $log .= qq(<hr><button id="btnRTF" onClick="return loadRTF(true, $id);">RTF</button>);
+               }
+
+               if($af==2){
+                       $am = qq(<font color="maroon">$am</font>);
+               }
+
+               my $ssymb = "Edit";
+               my $ssid  = $tfId;
+               if($sticky){
+                       $ssymb = "Edit &#10037;";
+                       $ssid = $tfId + 2;
+               }
+
+               $log_output .= qq(<tr class="r$ssid">
+               <td width="15%">$dtf<input id="y$id" type="hidden" value="$dty"/></td>
+               <td id="t$id" width="10%" class="tbl">$dth</td>
+               <td id="v$id" ><div class="log">$log</div></td>
+               <td id="a$id" width="10%" class="tbl">$am</td>
+               <td id="c$id" width="10%" class="tbl">$ct</td>
+        );
+               if(!$isPUBViewMode){
+                       $log_output .= qq(
+               <td width="10%">
+        <input id="r$id" type="hidden" value="$rtf"/>
+        <input id="s$id" type="hidden" value="$sticky"/>
+        <input id="f$id" type="hidden" value="$af"/>
+               <button class="edit" value="Edit" onclick="return edit($id);">$ssymb</button>
+                       <input name="chk" type="checkbox" value="$pid"/>
+               </td></tr>);
+               }
+
+               if ( $rtf > 0 ) {
+                       $log_output .= qq(<tr id="q-rtf$id" class="r$tfId" style="display:none;">
+                         <td colspan="6">
+                          <div id="q-scroll$id" class="ql-editor ql-snow" style="max-height:480px; overflow-x:scroll;">
+                            <div id="q-container$id" class="ql-container ql-snow"></div>
+                          </div>
+                        </td></tr>);
+               }
+               $log_rc += 1;
+
+               if ( $rec_limit > 0 && $log_rc == $rec_limit ) {
+                       last;
+               }
+
+       }    #while end
+}#buildLog
+
+if   ( $tfId == 1 ) { $tfId = 0; }
+else                { $tfId = 1; }
+my ($tot,$tin);
+$tot = $sum + $ass - abs($exp);
+$tin = &cam($sum);
+$exp = &cam($exp);
+$ass = &cam($ass);
+$tot = &cam($tot);
+$tot = "<font color='red'>$tot</font>" if($tot<0);
+
+$log_output .= qq(
+<tr class="r$tfId" id="summary_row">
+    <td></td>
+    <td></td>
+    <td id="summary" colspan="4" style="text-align:right">$currsymb <i>Totals</i>: Assets [ $ass ] Inc [$currsymb $tin ] Exp [ <font color="red">$currsymb $exp</font> ] <b>&#8594; Gross [$currsymb <i>$tot</i> ] </b></td>
+</tr>);
+
+###
+&buildNavigationButtons;
+###
+
+##
+# Fetch Keywords autocomplete we go by words larger then three.
+#
+my $aw_cnt    = 0;
+my $autowords = qq("gas","money","today");
+
+&fetchAutocomplete;
+
+if ( $log_rc == 0 ) {
+
+       if ($stmD) {
+               $log_output .= qq(<tr id="brw_row"><td colspan="5">
+        <b>Search Failed to Retrive any records on select: [<i>$stmD</i>] !</b></td></tr>');
+       }elsif ($rs_keys) {
+               my $criter = "";
+               if ( $prm_vc > 0 ) {
+                       $criter = "->Criteria[" . $hshCats{$prm_vc} . "]";
+               }
+               $log_output .= qq(<tr id="brw_row"><td colspan="5">
+        <b>Search Failed to Retrive any records on keywords: [<i>$rs_keys</i>]$criter!</b></td></tr>);
+       }else {
+               if ($isInViewMode) {
+                       if($prm_rtf){$log_output .= '<tr id="brw_row"><td colspan="6" class="r1"><b>No RTF records found matching criteria.</b></td></tr>'}
+                       else        {$log_output .= '<tr id="brw_row"><td colspan="6" class="r1"><b>You have reached the end of the data view!</b></td></tr>'}
+               }else{
+                       $log_output .= '<tr id="brw_row"><td colspan="6" class="r1"><b>Database is New or Empty!</b></td></tr>';
+               }
+       }
+}
+
+
+my ( $sp1, $sp2, $sp3 );
+$sp1 = '<span  class="ui-icon ui-icon-heart"></span>';
+$sp2 = '<span  class="ui-icon ui-icon-circle-triangle-s"></span>';
+$sp3 = '<span  class="ui-icon ui-icon-arrow-4-diag"></span>';
+
+my $std_bck = "background-image:url('".&Settings::transimage."');";
+$std_bck = "background-color:".Settings::theme('colBG').";" if !&Settings::transparent;
+my $auto_logoff = &Settings::autoLogoff;
+
+if($isPUBViewMode){
+}else{
+       $log_output .= <<HTML;
+<tr class="r0" id="brw_row"><td colspan="2" style="font-size:small;text-align:left;">Show All hidden &#10132;
+<a id="menu_close" href="#" onclick="return showAll();"><span  class="ui-icon ui-icon-heart" style="float:none;"></span></a>
+<a id="to_bottom" href="#top" title="Go to top of page.">&#8613;</a>
+</td>
+<td colspan="4" align="right" style="margin:5px;">
+    <input type="hidden" name="opr" id="opr" value="0"/>
+    <input type="submit" value="Sum" onclick="return sumSelected()"/>&nbsp;
+    <span style="border-left: 1px solid black;padding:5px;margin:15px;">
+    <button onclick="return selectAllLogs()">Select All</button>
+    <input type="reset" value="Unselect All"/>
+    <input type="submit" value="Date Diff" onclick="return dateDiffSelected()"/>&nbsp;
+    <input type="submit" value="Export" onclick="return exportSelected()"/>&nbsp;
+    <input type="submit" value="Print" onclick="return viewSelected()"/>&nbsp;
+    <input id="del_sel"  type="submit" value="Delete" onclick="display('Please Wait!')"/>
+    </span>
+</td></tr>
+</TABLE>
+</FORM>
+<form id="frm_srch" action="main.cgi"><TABLE class="tbl" border="0" width=").&Settings::pagePrcWidth.qq(%">
+    <tr class="r0"><td><b>Keywords:</b></td><td colspan="4" align="left">
+    <input id="rs_keys2" name="keywords" type="text" size="60"/>
+    <input type="submit" value="Search"/></td></tr>
+    </TABLE>
+</form>
+HTML
+}
+
+
+my $frm = qq(
+<form id="frm_entry" action="main.cgi" onSubmit="return formValidation();">
+       <table class="tbl" border="0" style="$std_bck opacity: 0.9;" width=").&Settings::pagePrcWidth.qq(%">
+       <tr class="r0">
+    <td style="text-align:left;"><a id="to_bottom" href="#bottom" title="Go to bottom of page.">&#8615;</a></td>
+    <td colspan="2"><b>* LOG ENTRY FORM *</b>
+        <a id="log_close" href="#" onclick="return hide('#div_log');">$sp1</a>
+        <a id="log_close" href="#" onclick="return toggle('#div_log .collpsd');">$sp2</a>
+        <a id="log_close" href="#" onclick="return resizeLogText();">$sp3</a>
+    </td></tr>
+       <tr class="collpsd">
+       <td style="text-align:right; vertical-align:top; width:10%;">Date:</td>
+       <td id="al" colspan="2" style="text-align:top; vertical-align:top"><input id="ed" type="text" name="date" size="18" value=")
+  . $today->ymd . " " . $today->hms . qq(">
+
+       &nbsp;<button type="button" onclick="return setNow();">Now</button>
+                       &nbsp;<button type="reset"  onclick="setNow();resetDoc(); return true;">Reset</button>
+
+                <span id="cat_desc" name="cat_desc">Please Wait...</span>
+
+                       &nbsp;&nbsp;&nbsp;Category:&nbsp;
+
+                <button data-dropdown="#dropdown-standard" style="margin: 0px; padding: 0;">
+                <span id="lcat" class="ui-button">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<i><font size=1>--Select --</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</i></span>
+               &nbsp; &#171; &nbsp;</button>
+
+            <div class="dropdown-menu dropdown-anchor-top-right dropdown-has-anchor" id="dropdown-standard">
+                        <table class="tbl">$td_cat</table>
+            </div>
+                       </td>
+       </tr>
+       <tr class="collpsd"><td style="text-align:right; vertical-align:top;">Log:</td>
+               <td id="al" colspan="2" style="text-align:top;">
+                       <textarea id="el" name="log" rows="5" style="float:left; width:99%;" onChange="toggleVisibility('cat_desc',true)"></textarea>
+               </td>
+       </tr>
+       <tr class="collpsd" style="text-align:right; vertical-align:top;">
+        <td>Amount:</td></span>
+               <td id="al">
+                       <input id="am" name="am" type="text">&nbsp;
+            Marks as:
+            <select id="amf" name="amf" class="ui-button" data-dropdown="#dropdown-standard">
+                <option value="0" selected>Asset</option>
+                <option value="1">Income</option>
+                <option value="2">Expense</option>
+            </select>&nbsp;
+            <span style="padding:5px; marging:10px; display:inline-block;">
+                <span>
+                    RTF Attach <input id="RTF" name="rtf" type="checkbox" onclick="return toggleDoc(true);"/></span>
+                <span>
+                    Sticky <input id="STICKY" name="sticky" type="checkbox"/>
+                </span>
+            </span>
+               </td>
+               <td align="right">
+                <span id="sss_status"></span>&nbsp;
+                <span style="padding:5px; marging:10px; display:inline-block;">
+                               <input id="log_submit" type="submit" onclick="return saveRTF(-1, 'store');" value="Submit"/>
+                </span>
+               </td>
+       </tr>
+       <tr class="collpsd"><td colspan="3"></td></tr>
+       </table>
+    <input type="hidden" name="ec" id="ec" value="0"/>
+       <input type="hidden" name="submit_is_edit" id="submit_is_edit" value="0"/>
+       <input type="hidden" name="submit_is_view" id="submit_is_view" value="0"/>
+       <input type="hidden" name="rs_all" value="0"/>
+       <input type="hidden" name="rs_cur" value="0"/>
+       <input type="hidden" name="rs_prev" value="$log_rc_prev"/>
+       <input type="hidden" name="rs_page" value="$rs_page"/>
+       <input type="hidden" name="CGISESSID" value="$sid"/>
+    <input type="hidden" id="auto_logoff" value="$auto_logoff"/>
+    <input type="hidden" id="isInViewMode" value="$isInViewMode"/>
+    <input type="hidden" id="rtf_buffer" value="$rtf_buffer"/>
+       $tags
+    </form>
+       );
+
+my $srh = qq(
+       <form id="frm_srch" action="main.cgi">
+       <table class="tbl" border="0" style="background-color:).Settings::theme('colBG').qq(" width=").&Settings::pagePrcWidth.qq(%">
+         <tr class="r0">
+        <td colspan="2"><b>View By/Search</b>
+            <a id="srch_close" href="#" onclick="return hide('#div_srh');">$sp1</a>
+            <a id="srch_close" href="#" onclick="return toggle('#div_srh .collpsd');">$sp2</a>
+        </td>
+      </tr>
+    );
+my ($sss_checked, $sss_orderby) = ("","");
+my ($vc_lst,$xc_lst) = ("","");
+my $tdivvc = '<td id="divvc_lbl" align="right" style="display:none">Includes:</td><td align="left" id="divvc"></td>';
+my $tdivxc = '<td id="divxc_lbl" align="right" style="display:none">Excludes:</td><td align="left" id="divxc"></td>';
+my $catselected  = '<i>&nbsp;&nbsp;&nbsp;<font size=1>-- Select --</font>&nbsp;&nbsp;&nbsp;</i>';
+my $xcatselected = '<i>&nbsp;&nbsp;&nbsp;<font size=1>-- Select --</font>&nbsp;&nbsp;&nbsp;</i>';
+if ($isInViewMode) {  $sss_checked = 'checked'}
+if (session('sss_ord_cat')){  $sss_orderby = 'checked'}
+
+if($prm_vc){
+       $catselected = $hshCats{$prm_vc};
+       $catselected ="" if !$catselected;
+       my $n = 16 - length($catselected);
+       $catselected =~ s/^(.*)/'&nbsp;' x $n . $1/e;
+}
+
+if(@xc_lst){#Do list of excludes, past from browser in form of category id's.
+       my $xcls ="";
+       foreach(@xc_lst){ $xcls .= $hshCats{$_}.',' if $hshCats{$_}; $xc_lst.=$_.','}
+       $xcls =~ s/\,$//g;
+       $xcls =~ s/\,\,/\,/g;
+       $xc_lst=~ s/^0\,$//g;
+       $xcatselected = $hshCats{$prm_xc};
+       $xcatselected ="" if !$xcatselected;
+       my $n = 16 - length($xcatselected);
+       $xcatselected =~ s/^(.*)/'&nbsp;' x $n . $1/e;
+       $tdivxc = '<td id="divxc_lbl" align="right">Excludes:</td><td align="left" id="divxc">'.$xcls.'</td>';
+}elsif($prm_xc){
+       $xcatselected = $hshCats{$prm_xc};
+       my $n = 16 - length($xcatselected);
+       $xcatselected =~ s/^(.*)/'&nbsp;' x $n . $1/e;
+       $tdivxc = '<td id="divxc_lbl" align="right">Excludes:</td><td align="left" id="divxc">'.$hshCats{$prm_xc}.'</td>';
+}
+
+#select options of $prm_aa in dropdown.
+my $aopts = "";
+my ($s,$i) = ("",0);
+my $aa = param('aa');
+if(!$prm_aa){$aa = 0}
+else{$aa--}
+foreach ('Asset','Income','Expense') {
+       if($aa == $i){$s='selected'}
+       else{$s=""}
+       $aopts .= "\t<option value=\"$i\" $s>$_</option>\n";
+       $i++;
+}
+$srh .=qq(
+    <tr class="collpsd">
+     <td align="right" style="width:20%;">View by Category:</td>
+     <td align="left">
+            <button class="bordered" data-dropdown="#dropdown-standard-v" style="margin: 0px; padding: 0; padding-right:8px;">
+            <span id="lcat_v" class="ui-button">$catselected</span>
+            &#171;</button>
+            <div id="dropdown-standard-v" class="dropdown-menu dropdown-anchor-top-center   dropdown-has-anchor">
+                        <table class="tbl">$td_cat</table>
+            </div>
+
+            <input id="vc" name="vc" type="hidden" value="$prm_vc"/>
+            <input id="vclst" name="vclst" type="hidden" value="$vc_lst"/>
+
+            <button id="btnxca" onClick="return addInclude()"/>Add</button>&nbsp;&nbsp;
+            <button id="btnxca" type="button" onClick="return removeInclude()">Remove</button>&nbsp;
+            <button id="btnxrc" type="button" onClick="return resetInclude()">Reset</button>&nbsp;&nbsp;&nbsp;
+            <button id="btn_cat" onclick="viewByCategory(this);">View</button>
+    </td></tr>
+    <tr class="collpsd">$tdivvc</tr>
+    <tr class="collpsd"><td align="right">
+            View by Amount Type:</td><td align="left">
+            <select id="amf2" name="aa" class="ui-button">
+                $aopts
+            </select>&nbsp;<button id="btn_amt" onclick="viewByAmountType(this);">View</button>
+&nbsp;&nbsp; &nbsp;&nbsp;
+            <input id="vrtf" name="vrtf" type="hidden" value="0"/>
+            View RTF Logs:&nbsp;<button id="btn_rtf" onclick="viewRTFLogs(this);">View</button>
+&nbsp;&nbsp;
+
+     </td>
+   </tr>
+
+   <tr class="collpsd">
+     <td align="right">Exclude Category:</td>
+     <td align="left">
+
+            <button class="bordered" data-dropdown="#dropdown-standard-x" style="margin: 0px; padding: 0; padding-right:8px;">
+            <span id="lcat_x" class="ui-button">$xcatselected</span>
+            &#171;</button>
+            <div id="dropdown-standard-x" class="dropdown-menu        dropdown-anchor-left-center      dropdown-has-anchor">
+                        <table class="tbl">$td_cat</table>
+            </div>
+
+     <!-- \$cats_x&nbsp;&nbsp;   -->
+
+        <input id="xc" name="xc" type="hidden" value="$prm_xc"/>
+        <input id="xclst" name="xclst" type="hidden" value="$xc_lst"/>
+
+        <button id="btnxca" onClick="return addExclude()"/>Add</button>&nbsp;&nbsp;
+        <button id="btnxca" type="button" onClick="return removeExclude()">Remove</button>&nbsp;
+        <button id="btnxca" type="button" onClick="return resetExclude()">Reset</button>&nbsp;&nbsp;&nbsp;
+        <button id="btn_cat" onclick="return viewExcludeCategory(this);">View</button>&nbsp;&nbsp;
+        <input id="sss_xc" name="sss_xc" type="checkbox" $sss_checked/> Keep In Session
+        <input id="sss_ord_cat" name="sss_ord_cat" type="checkbox" $sss_orderby/> Order By Category
+     </td>
+   </tr>
+   <tr class="collpsd">$tdivxc</tr>
+   <tr class="collpsd">
+    <td align="right">View by Date:</td>
+       <td align="left">
+        From:&nbsp;<input id="srh_date_from" name="v_from" type="text" size="16" value="$rs_dat_from"/>&nbsp;&nbsp;
+        To:&nbsp;<input id="srh_date_to" name="v_to" type="text" size="16" value="$rs_dat_to"/>
+        &nbsp;&nbsp;<button id="btn_dat" onclick="viewByDate(this);">View</button>
+    </td>
+       </tr>
+   <tr class="collpsd">
+    <td align="right">Keywords:</td>
+       <td align="left">
+               <input id="rs_keys" name="keywords" type="text" size="60" value="$rs_keys"/>
+               &nbsp;&nbsp;<input type="submit" value="Search" align="left">
+    </td>
+    );
+
+if ( ( $rs_keys && $rs_keys ne '*' ) || $prm_vc || $stmD || $prm_xc ) {
+       $sm_reset_all = '<a class="a_" onclick="resetView();">Reset View</a><hr>';
+       $srh .= '<tr class="collpsd"><td align="right" colspan="2">
+        <input id="srch_reset" name="srch_reset" type="hidden" value="0"/>
+        <button onClick="resetView()">Reset Whole View</button><br></td></tr>';
+}else {
+       $srh .= '</tr>';
+}
+
+$srh .= '</table></form>';
+
+my $sideMenu;
+my $tail = q(<div><a class="a_" href="stats.cgi">View Statistics</a>&nbsp;&nbsp;<a class="a_" href="config.cgi">Configure Log</a></div><hr>
+             <div><a class="a_" href="login_ctr.cgi?logout=bye" id="btnLogout">LOGOUT</a><hr><a name="bottom"></a></div>);
+if($isPUBViewMode){$sideMenu=$frm=$srh=$tail=""}
+else{
+       my $sql = Settings::dbSrc();
+       my $s = $sql =~ qr/:/;
+       $s = $`;
+       $' =~ qr/:/;
+       if(lc $` eq 'pg'){$sql = $s.'&#10132;'.'PostgreSQL'}
+       else{$sql = $s.'&#10132;'.$`}
+       $sideMenu = qq(
+        <div id="menu_page" title="To close this menu click on its heart, and wait." style="visibility:hidden">
+        <div class="hdr" style="marging=0;padding:0px;">
+               <a id="to_bottom" href="#bottom" title="Go to bottom of page."><span class="ui-icon ui-icon-arrowthick-1-s" style="float:none;"></span></a>
+               <a id="dutch_left" onclick="return moveMenuLeft();"><span class="ui-icon ui-icon-arrowthick-1-w" style="float:none;"></span></a>
+               Life
+               <a id="dutch_right" onclick="return moveMenuRight();"><span class="ui-icon ui-icon-arrowthick-1-e" style="float:none;"></span></a>
+               <a id="to_top" href="#top" title="Go to top of page."><span class="ui-icon ui-icon-arrowthick-1-n" style="float:none;"></span></a>
+        <a id="menu_close" href="#"><span class="ui-icon ui-icon-heart" style="float:none;"></span></a>
+        </div>
+        <hr>
+        <a id="Log_btn" class="a_" onclick="return toggle('#div_log',true, '#el');" title="Click to enter a log.">Log</a><br>
+               <div class="nav_data">
+        <a href="#" title="TOP" onclick="return submitTop();"><span class="ui-icon ui-icon-triangle-1-w" style="float:none;"></span></a>&nbsp;
+        <a href="#" title="PREVIOUS" onclick="return submitPrev($log_rc_prev, $rec_limit);"><span class="ui-icon ui-icon-arrowthick-1-w" style="float:none;"></span></a>&nbsp;
+        <a href="#" title="NEXT" onclick="return submitNext($log_cur_id, $rec_limit);"><span class="ui-icon ui-icon-arrowthick-1-e" style="float:none;"></span></a>&nbsp;
+        <a href="#" title="END" onclick="return submitEnd($rec_limit);"><span class="ui-icon ui-icon-triangle-1-e" style="float:none;"></span></a>
+               </div>
+        <hr>
+        <a class="a_" onclick="return toggle('#div_srh',true);">Search</a><hr>
+        <a class="a_" onclick="return deleteSelected();">Delete</a><hr>
+        <a class="a_" onclick="return toggle('#tbl_hlp',true);">Help</a><hr>
+        <a class="a_" href="stats.cgi" onclick="display('Please Wait!');">Stats</a><hr>
+        <a class="a_" href="config.cgi" onclick="display('Please Wait!');">Config</a><hr>
+        <a class="a_" id="lnk_show_all" onclick="return showAll();">Show All <span  class="ui-icon ui-icon-heart"></span></a><hr>
+        $sm_reset_all
+               <a class="a_" href="index.cgi">Index</a><hr>
+        <a class="a_" href="login_ctr.cgi?logout=bye">LOGOUT</a><br><hr>
+        <span style="font-size: x-small; font-weight: bold;">$vmode</span><br>
+        <span style="font-size: x-small; font-weight: bold;">).$sql.q(</span><br>
+        </div>
+        );
+}
+
+my $quill = &quill( param('submit_is_edit') );
+my $help = &help;
+
+##################################
+#  Final Page Output from here!  #
+##################################
+my $audio = &Settings::audioEnabled ? qq(
+       <audio id="au_door_chime" enabled preload="auto"
+    src="wsrc/Miki-Matsubara-WASH-WASH.mp3">
+        Your browser does not support the
+        <code>audio</code> element.
+</audio>
+<audio id="dutchie_chime"  enabled preload="auto"   src="wsrc/dutchie.mp3">
+        Your browser does not support the
+        <code>audio</code> element.
+</audio>
+<audio id="dutchie_close_chime"  enabled preload="auto"   src="wsrc/dutchie-close.mp3">
+        Your browser does not support the
+        <code>audio</code> element.
+</audio>
+):"";
+toBuf (
+       qq(
+$sideMenu
+<DIV class="content">
+<a id="top" name="top"></a>
+<div id="div_log">$frm</div>
+$quill
+<div id="div_srh">$srh</div>
+<div id="div_hlp">$help</div>
+<div>\n$log_output\n</div><br>
+$tail
+</DIV>
+<!-- Cat Data Start -->
+<span id="meta_cats">
+       $data_cats
+</span>
+<!--Cat Data End -->
+<!-- Page Settings Specifics date:20200222 -->
+<script type="text/javascript">
+        var AUTOWORDS = [$autowords];
+</script>
+$audio)
+);
+
+outputPage();
+
+$st->finish;
+$db->disconnect();
+undef($sss);
+exit;
+
+
+sub castToBool {
+       my $v=shift;
+       if($v eq"1"||$v eq"on"){return 'true'}
+       else{return 'false'}
+}
+
+
+sub processSubmit {
+
+       my $date = param('date');
+       my $log  = param('log');
+       my $cat  = param('ec');
+       my $cnt ="";
+       my $am = param('am');
+       my $af = param('amf');
+
+       my $edit_mode = param('submit_is_edit');
+       my $view_mode = param('submit_is_view');
+       my $view_all  = param('rs_all');
+       my $rtf    = param('rtf');
+       my $sticky = param('sticky');
+       my $stm;
+       my $SQLID = 'rowid';
+       my @gzero;
+
+       toBuf $cgi->pre("###[loggin entry->cat:$cat log:$log") if $DEBUG;
+
+       if($rtf eq 'on'){$rtf = 1}
+       else {$rtf = 0}
+       if($sticky eq 'on'){$sticky = 1}
+       else {$sticky = 0}
+       if(!$am){$am=0}
+       if(Settings::isProgressDB()){$SQLID = 'ID'; $sticky = castToBool($sticky);}
+       try {
+               #Apostroph's need to be replaced with doubles  and white space to be fixed for the SQL.
+               $log =~ s/'/''/g;
+
+               if ( $edit_mode && $edit_mode != "0" ) {
+                       $date = DateTime::Format::SQLite->parse_datetime($date);
+                       $date =~ s/T/ /g;
+                       $stm = qq(UPDATE LOG SET ID_CAT='$cat', RTF='$rtf',
+                                        DATE='$date',
+                                        LOG='$log',
+                                        AMOUNT=$am,
+                                        AFLAG = $af,
+                                        STICKY=$sticky WHERE $SQLID=$edit_mode;);
+                       #
+                       toBuf $stm if $DEBUG;
+                       #
+
+                       traceDBExe($stm);
+                       return;
+               }
+
+               if ( $view_mode == "1" ) {
+
+                       if ($rs_cur) {
+                               my $sand = "";
+                               if($rs_cur == $rs_prev){    #Mid page back button if id ordinal.
+                                       $rs_cur += $rec_limit;
+                                       $rs_prev = $rs_cur;
+                                       $rs_page--;
+                               }else {
+                                       $rs_page++;
+                               }
+                               if($prm_vc){
+                                       $sand = "and ID_CAT == $prm_vc";
+                               }elsif($prm_xc){
+
+                                       if(@xc_lst){
+                                               foreach (@xc_lst){
+                                                       $sand .= "and ID_CAT!=$_ ";
+                                               }
+                                       }else{
+                                               $sand = "and ID_CAT != $prm_xc";
+                                       }
+
+                               }
+                               $sqlVWL = qq($stmS PID<=$rs_cur and STICKY=false $sand $stmE);
+                               return;
+                       }
+               }
+
+               if ( $log && $date && $cat ) {
+                       #
+                       # After Insert renumeration check
+                       #
+                       my $dt    = DateTime::Format::SQLite->parse_datetime($date);
+                       my $dtCur = DateTime->now();
+                       $dtCur->set_time_zone(&Settings::timezone);
+                       $dtCur = $dtCur - DateTime::Duration->new( days => 1 );
+                       #
+                       # check and prevent double entry
+                       #
+                       $date = $dt;
+                       $stm = qq(SELECT DATE,LOG FROM LOG where DATE='$date' AND LOG='$log';);
+                       my $st = traceDBExe($stm);
+                       if ($st->fetchrow_array() ) {
+                               return;
+                       }
+                       if ($dtCur > $dt){$sticky = 1; toBuf $cgi->p("<b>Insert forced to be sticky, it is in the past!</b>");}
+                       $sticky=castToBool($sticky);
+                       $stm = qq(INSERT INTO LOG (ID_CAT, DATE, LOG, RTF, AMOUNT, AFLAG, STICKY) VALUES ($cat,'$date','$log',$rtf, $am,$af,$sticky););
+                       $st = traceDBExe($stm);
+
+                       # my $rv = $db->last_insert_id(undef, undef, "log", undef);
+                       #  toBuf "\n<b>[".$rv."]</b>";
+                       $st->finish();
+                       if($sssCDB){
+
+                               #Allow further new database creation, it is not an login infinite db creation attack.
+                               $sss->param("cdb", 0);
+                       }
+                       if($rtf){ #Update 0 ground NOTES entry to the just inserted log.
+                               if ($dtCur > $dt){#New entry is set in the past. And wtf; has RTF attached.
+                                       if(Settings::isProgressDB()){$stm = "SELECT ID FROM LOG WHERE date = timestamp '$date';"}
+                                       else{$stm = 'SELECT ID FROM '.Settings->VW_LOG." WHERE datetime(date) = datetime('$date');"}
+                                       $st = traceDBExe($stm);
+                               }else{
+                                       $st = traceDBExe('SELECT ID FROM '.Settings->VW_LOG.' LIMIT 1;');
+                               }
+                               my @lids = $st->fetchrow_array();
+                               $st = traceDBExe('SELECT DOC FROM NOTES WHERE LID = 0;');
+                               my @gzero = $st->fetchrow_array();
+                               if(scalar @lids > 0){
+
+                                       #By Notes.LID constraint, there should NOT be an already existing log rowid entry just submitted in the Notes table!
+                                       #What happened? We must check and delete, regardles. As data is renumerated and shuffled from perl in database. :(
+                                       $st = traceDBExe("SELECT LID FROM NOTES WHERE LID=".$lids[0].";");
+                                       if($st->fetchrow_array()){
+                                               $st = $db->do("DELETE FROM NOTES WHERE LID=".$lids[0].";");
+
+                                               # NOTICE -  There will be disparities here if renumeration failed, to update, run.
+                                               # These are expected after upgrades. And if switching DB engine and SQL compatibilities.
+                                               toBuf qq(<p>Warning deleted (possible old) NOTES.LID[$lids[0]] -> lid:@lids</p>);
+                                       }
+                                       toBuf("\nINSERT INTO NOTES($lids[0], {DOC[$date]})") if ($DEBUG);
+                                       $st = $db->prepare("INSERT INTO NOTES(LID, DOC) VALUES (?, ?);");
+                                       if(Settings::isProgressDB()){
+                                               $st->bind_param(1, $lids[0]);
+                                               $st->bind_param(2, $gzero[0],{ pg_type => DBD::Pg::PG_BYTEA });
+                                               $st->execute();
+                                       }else{
+                                               $st->execute($lids[0], $gzero[0]);
+                                       }
+
+                                       #Flatten ground zero
+                                       $st = $db->prepare("UPDATE NOTES SET DOC=null WHERE LID=0;");
+                                       $st->execute();
+                               }
+                       }
+                       Settings::renumerate($db) if ( $dtCur > $dt );
+               }
+               if(!@gzero){$st = traceDBExe('SELECT DOC FROM NOTES WHERE LID = 0;');@gzero = $st->fetchrow_array()}
+               $rtf_buffer = 1 if $gzero[0];
+       }catch {
+
+               my $err = $@;
+               my $pwd = `pwd`;
+               $pwd =~ s/\s*$//;
+
+               my $dbg = qq(--DEBUG OUTPUT--\n
+    DSN:) . Settings::dsn(). qq(
+    stm:$stm
+    \@DB::args:@DB::args
+    \$DBI::err:$DBI::errstr
+    cnt:$cnt, cat:$cat, date:$date, log:$log, am:$am, af:$af, rtf:$rtf, sticky:$sticky);
+               print $cgi->header,"<hr><font color=red><b>SERVER ERROR</b></font> on ".DateTime->now."<hr><pre>$pwd/$0 -> &".caller." -> [<font color=red><b>$DBI::errstr</b></font>] $err\n$dbg</pre>",$cgi->end_html;
+
+               exit;
+       }
+}
+
+
+sub buildNavigationButtons {
+
+       if ( !$log_cur_id ) {
+
+               #Following is a quick hack as previous id as current minus one might not
+               #coincide in the database table!
+               $log_cur_id = $id - 1;
+       }
+       if ( $tfId == 1 ) {
+               $tfId = 0;
+       }else {
+               $tfId = 1;
+       }
+
+       $vmode = qq(<span style="font-size:small;">[In Page Mode]</span>&nbsp;);
+       $vmode = qq(<span style="font-color:red;font-size:x-small">[In View Mode]</span>&nbsp;) if$isInViewMode;
+       if($isPUBViewMode){
+               $log_output .=qq!<tr class="r$tfId" id="brw_row"><td style="text-align:left;">$vmode</td><td colspan="3"></td>!;
+       }elsif($rec_limit == 0){
+               $log_output .= qq!<tr class="r$tfId" id="brw_row"><td style="text-align:left;">$vmode</td><td colspan="3">
+                               <input class="ui-button" type="button" onclick="submitTop($log_top);return false;" value="Back To Page View"/>!;
+       }else{
+               if ($rs_cur < $log_top && $rs_prev && $rs_prev > 0 && $log_start > 0 && $rs_page > 0) {
+                       $log_output .= qq!<tr class="r$tfId" id="brw_row"><td style="text-align:left;">$vmode</td><td colspan="3"><input class="ui-button" type="button" onclick="submitTop($log_top);return false;" value="TOP"/>&nbsp;&nbsp;
+                    <input type="hidden" value="$rs_prev"/>
+                    <input class="ui-button" type="button" onclick="submitPrev($log_rc_prev, $rec_limit);return false;" value="&lsaquo;&lsaquo;&nbsp; Previous"/>&nbsp;&nbsp;!;
+
+               }else {
+                       my $v = "<font style='font-size:small'>You Are In &#10132; $vmode</font>";
+                       $log_output .= qq(<tr class="r$tfId" id="brw_row"><td colspan="2" style="text-align:left;">$v</td><td colspan="3"><i>Top</i>&nbsp;&nbsp;&nbsp;&nbsp;);
+               }
+
+
+               $log_output .= '<input class="ui-button" type="button" onclick="viewAll();return false;" value="View All"/>&nbsp;&nbsp;';
+
+
+               if ( $log_cur_id == 0 ) {
+                       $log_output = $log_output . '<i>End</i></td>';
+               }else {
+
+                       $log_output .= qq!<input class="ui-button" type="button" onclick="submitNext($log_cur_id, $rec_limit);return false;"
+                                        value="Next &nbsp;&rsaquo;&rsaquo;"/>&nbsp;&nbsp;
+                                        <input class="ui-button" type="button" onclick="submitEnd($rec_limit);return false;" value="END"/></td>!;
+
+               }
+       }
+
+       $log_output .= '<td colspan="1"></td></tr>';
+}
+
+
+sub authenticate {
+       try {
+
+               my $st = traceDBExe("SELECT alias FROM AUTH WHERE alias='$alias' and passw='$passw';");
+               my @c = $st->fetchrow_array();
+               if (@c && $c[0] eq $alias ) { return; }
+
+               #Check if passw has been wiped for reset?
+               $st = traceDBExe("SELECT * FROM AUTH WHERE alias='$alias';");
+               @c = $st->fetchrow_array();
+               if ( @c && $c[1] == "" ) {
+
+                       #Wiped with -> UPDATE AUTH SET passw='' WHERE alias='$alias';
+                       $st = traceDBExe("UPDATE AUTH SET passw='$passw' WHERE alias='$alias';");
+                       return;
+               }
+
+               #We log failed possible intruder access.
+               Settings::toLog($db,"User $alias, failed to authenticate!");
+
+               print $cgi->header( -expires => "+0s", -charset => "UTF-8" );
+               print $cgi->start_html(
+                       -title => "Personal Log Login",
+                       -BGCOLOR => Settings::theme('colBG'),
+                       -script =>{ -type => 'text/javascript', -src => 'wsrc/main.js' },
+                       -style => { -type => 'text/css', -src => 'wsrc/main.css' },
+               );
+               if($DEBUG){
+                       print $cgi->center($cgi->div("<b>Access Denied!</b> alias:$alias pass:$passw SQL->SELECT * FROM AUTH WHERE alias='$alias' and passw='$passw'; "));
+               }else{
+                       print $cgi->center($cgi->div('<h2>Sorry Access Denied!</h2><font color=red><b>The credentials you supplied have failed!</b></font>'),$cgi->div('<h3>[<a href="login_ctr.cgi">Login</a>]</h3>'));
+               }
+               print $cgi->end_html;
+
+               $db->disconnect();
+               $sss->flush();
+               exit;
+
+       }catch {
+               print $cgi->header( -expires => "+0s", -charset => "UTF-8" );
+               print $cgi->p( "PAGE ERROR:" . $_ );
+               print $cgi->end_html;
+               exit;
+       }
+}
+
+
+sub fetchAutocomplete {
+
+       my $st = traceDBExe('select LOG from '. $VW_PAGE  . $stmE. '-- > '. &Settings::autoWordLimit.'  < -- fetchAutocomplete');
+       my $awl = Settings::autoWordLength();
+       my %hsh = ();
+       my $lst = "\"\"";
+       while ( my @row = $st->fetchrow_array() ) {
+               my ($wl,$log) = ("",$row[0]);
+
+               #Decode escaped \\n
+               $log =~ s/\\n/\n/gs;
+               $log =~ s/''/'/g;
+               my @words = split( /\s/, $log );
+               foreach my $word (sort @words) {
+
+                       #remove all non alphanumerics
+                       $word =~ s/[^a-zA-Z]//gs;
+                       $wl = length($word);
+                       if ( $wl > 2 && $wl < $awl) {# Gas Bootle
+                               $word = lc $word;
+                               if(!$hsh{$word}){
+                                       $hsh{$word}=1;
+                                       $lst .= qq(,"$word");
+                               } else{
+                                       next;
+                               }
+                               if ( $aw_cnt++ > &Settings::autoWordLimit ) {
+                                       last;
+                               }
+                       }
+               }
+               if ( $aw_cnt > Settings::autoWordLimit() ) {
+                       last;
+               }
+       }
+       $autowords = $lst if(length($lst)>1);
+       undef %hsh;
+}
+
+
+sub cam {
+       my $am = sprintf( "%.2f", shift);
+       $am = sprintf( "%.2f", shift @_ ) if @_;
+
+       # Add one comma each time through the do-nothing loop
+       1 while $am =~ s/^(-?\d+)(\d\d\d)/$1,$2/;
+       return $am;
+}
+
+
+sub quill{
+
+       my ( $log_id, $height ) = shift;
+
+       given ( &Settings::windowRTFSize ) {
+               when("0") { $height = q(height:420px;) }
+               when("1") { $height = q(height:260px;) }
+               when("2") { $height = q(height:140px;) }
+               default  {
+                       $height = &Settings::windowRTFSize;
+               }
+       }
+       return qq(
+<table id="tbl_doc" class="tbl" width=").&Settings::pagePrcWidth.qq(%" style="border:1; margin-top: 5px;" hidden>
+       <tr class="r0" style="text-align:center"><td><b>* Document *</b>
+    <a id="log_close" href="#" onclick="return hide('#tbl_doc');">$sp1</a>
+    <a id="log_close" href="#" onclick="return toggleDoc(false);">$sp2</a>
+    <a id="log_close" href="#" onclick="return resizeDoc();">$sp3</a>
+    </td>
+</tr>
+<tr id="rtf_doc"><td>
+  <div id="toolbar-container" hidden>
+    <span class="ql-formats">
+      <select class="ql-font"></select>
+      <select class="ql-size"></select>
+    </span>
+    <span class="ql-formats">
+      <button class="ql-bold"></button>
+      <button class="ql-italic"></button>
+      <button class="ql-underline"></button>
+      <button class="ql-strike"></button>
+    </span>
+    <span class="ql-formats">
+      <select class="ql-color"></select>
+      <select class="ql-background"></select>
+    </span>
+    <span class="ql-formats">
+      <button class="ql-script" value="sub"></button>
+      <button class="ql-script" value="super"></button>
+    </span>
+    <span class="ql-formats">
+      <button class="ql-header" value="1"></button>
+      <select class="ql-header" value="2"></select>
+      <button class="ql-blockquote"></button>
+      <button class="ql-code-block"></button>
+    </span>
+    <span class="ql-formats">
+      <button class="ql-list" value="ordered"></button>
+      <button class="ql-list" value="bullet"></button>
+      <button class="ql-indent" value="-1"></button>
+      <button class="ql-indent" value="+1"></button>
+    </span>
+    <span class="ql-formats">
+      <button class="ql-direction" value="rtl"></button>
+      <select class="ql-align"></select>
+    </span>
+    <span class="ql-formats">
+      <button class="ql-link"></button>
+      <button class="ql-image"></button>
+      <button class="ql-video"></button>
+      <button class="ql-formula"></button>
+    </span>
+    <span class="ql-formats" style="float:right; border:1px;">
+        Background <input id="fldBG" type="field" class="jscolor {onFineChange:'editorBackground(false)',closable:true,closeText:'Close',hash:true}" size="10" value="000000"/>
+        <button onClick="editorBackground(true);" style="float:right; border:1px;">&nbsp;&nbsp;Reset</button>
+    </span>
+  </div>
+  <div id="editor-container" style="$height"></div>
+  <div class="save_button">
+    <input type="button" id="btn_zero_doc" onclick="loadRTF(false, 0); return false;" value="Load Buffered"/>
+    <input type="button" id="btn_load_doc" onclick="loadRTF(false, -1); return false;" value="Load"/>
+    <input type="button" id="btn_save_doc" onclick="saveRTF(0, 'store'); return false;" value="Save"/>
+  </div>
+  </td></tr></table>
+);
+}
+
+
+sub help{
+       return qq(
+<table id="tbl_hlp" class="tbl" border="0" width=").&Settings::pagePrcWidth.qq(%" hidden>
+       <tr class="r0"><td colspan="3"><b>* HELP *</b>
+    <a id="a_close" href="#" onclick="return hide('#tbl_hlp');">$sp1</a>
+    <a id="a_toggle" href="#" onclick="return toggle('#tbl_hlp .collpsd');">$sp2</a>
+    </td></tr>
+<tr class="collpsd"><td>
+<div id="rz" class="rz">
+ <h2>L-Tags Specs</h2>
+    <p class="rz">
+    Life Log Tags are simple markup allowing fancy formatting and functionality
+    for your logs HTML layout.
+    </p>
+    <p>
+        <b>&#60;&#60;B&#60;<i>{Text To Bold}</i>&#62;&#62;</b>
+    </p>
+    <p>
+        <b>&#60;&#60;I&#60;<i>{Text To Italic}</i>&#62;&#62;</b>
+    </p>
+    <p>
+        <b>&#60;&#60;TITLE&#60;<i>{Title Text}</i>&#62;&#62;</b>
+    </p>
+    <p>
+        <b>&#60;&#60;LIST&#60;<i>{List of items delimited by new line to terminate item or with '~' otherwise.}</i>&#62;</b>
+    </p>
+    <p>
+        <b>&#60;&#60;IMG&#60;<i>{url to image}</i>&#62;&#62;</b>
+    </p>
+    <p>
+        <b>&#60;&#60;FRM&#60;<i>{file name}_frm.png}</i>&#62;&#62;</b><br><br>
+        *_frm.png images file pairs are located in the ./images folder of the cgi-bin directory.<br>
+        These are manually resized by the user. Next to the original.
+        Otherwise considered as stand alone icons. *_frm.png Image resized to ->  width="210" height="120"
+        <br><i>Example</i>:
+                                               <pre>
+               ../cgi-bin/images/
+                       my_cat_simon_frm.png
+                       my_cat_simon.jpg
+
+          For log entry, place:
+
+         &#60;&#60;FRM&#62;my_cat_simon_frm.png&#62; &#60;&#60;TITLE&#60;Simon The Cat&#62;&#62;
+         This is my pet, can you hold him for a week while I am on holiday?
+            </pre>
+                               <p>
+                                       <b>&#60;&#60;LNK&#60;<i>{url to image}</i>&#62;&#62;</b><br><br>
+                                       Explicitly tag an URL in the log entry.
+                                       Required if using in log IMG or FRM tags.
+                                       Otherwise link appears as plain text.
+                               </p><br>
+        <p>&#60;iframe .....&#60;/iframe>  - Experimental html embedding, useful for youtube shared videos.</p>
+       <hr>
+    <h3>Log Page Particulars</h3><p> &#x219F; or &#x21A1; - Jump links to top or bottom of page respectivelly. </p>
+</div>
+</td></tr></table>)
+}
+
+
+sub outputPage {
+
+       #Bug 26 -Fixed here by prefixing to collected html body buffer.
+       $BUFFER = $cgi->start_html(
+               -title   => "Personal Log",
+               -BGCOLOR => Settings::theme('colBG'),
+               -onload  => "onBodyLoad('$toggle','".&Settings::language."','".&Settings::timezone."','$today','".&Settings::sessionExprs."','$rs_cur',".&Settings::dbVLSZ.");",
+               -style   => [
+                       { -type => 'text/css', -src => 'wsrc/jquery-ui.css' },
+                       { -type => 'text/css', -src => 'wsrc/jquery-ui.theme.css' },
+                       {
+                               -type => 'text/css',
+                               -src  => 'wsrc/jquery-ui-timepicker-addon.css'
+                       },
+                       {
+                               -type => 'text/css',
+                               -src  => 'wsrc/tip-yellowsimple/tip-yellowsimple.css'
+                       },
+
+                       { -type => 'text/css', -src => 'wsrc/quill/katex.min.css' },
+                       { -type => 'text/css', -src => 'wsrc/quill/monokai-sublime.min.css' },
+                       { -type => 'text/css', -src => 'wsrc/quill/quill.snow.css' },
+                       { -type => 'text/css', -src => 'wsrc/jquery.sweet-dropdown.css' },
+                       { -type => 'text/css', -src => 'wsrc/effects.css' },
+                       { -type => 'text/css', -src =>  Settings::theme('css') },
+               ],
+               -script => [
+                       { -type => 'text/javascript', -src => 'wsrc/main.js' },
+                       { -type => 'text/javascript', -src => 'wsrc/jquery.js' },
+                       { -type => 'text/javascript', -src => 'wsrc/jquery-ui.js' },
+                       { -type => 'text/javascript', -src => 'wsrc/jquery-ui-timepicker-addon.js'},
+                       { -type => 'text/javascript', -src => 'wsrc/jquery-ui-sliderAccess.js'},
+                       { -type => 'text/javascript', -src => 'wsrc/jquery.poshytip.js' },
+
+                       { -type => 'text/javascript', -src => 'wsrc/quill/katex.min.js' },
+                       { -type => 'text/javascript', -src => 'wsrc/quill/highlight.min.js' },
+                       { -type => 'text/javascript', -src => 'wsrc/quill/quill.min.js' },
+                       { -type => 'text/javascript', -src => 'wsrc/jscolor.js' },
+                       { -type => 'text/javascript', -src => 'wsrc/moment.js' },
+                       { -type => 'text/javascript', -src => 'wsrc/moment-timezone-with-data.js' },
+                       { -type => 'text/javascript', -src => 'wsrc/jquery.sweet-dropdown.js'}
+
+               ]
+         )
+         . ($DEBUG ?"<div class='debug_output' date='$today'>$D_BUFF</div>":"")
+         .$BUFFER;
+
+       if(Settings->compressPage() && $cgi->http('Accept-Encoding') =~ m/gzip/){
+               print $cgi->header(-expires => "1s", -charset => "UTF-8", -Content_Encoding => 'gzip');
+               $BUFFER = gzip($BUFFER);
+       }else{
+               print $cgi->header(-expires => "1s", -charset => "UTF-8");
+       }
+       print $BUFFER;
+       print $cgi->end_html;
+}
+
+
+1;
+=begin copyright
+Programed by  : Will Budic
+EContactHash  : 990MWWLWM8C2MI8K (https://github.com/wbudic/EContactHash.md)
+Source        : https://github.com/wbudic/LifeLog
+Open Source Code License -> https://github.com/wbudic/PerlCNF/blob/master/ISC_License.md
+=cut copyright
\ No newline at end of file
diff --git a/htdocs/cgi-bin/markdown.cgi b/htdocs/cgi-bin/markdown.cgi
new file mode 100755 (executable)
index 0000000..d53b945
--- /dev/null
@@ -0,0 +1,49 @@
+#!/usr/bin/perl
+# Programed by: Will Budic
+# Open Source License -> https://choosealicense.com/licenses/isc/
+#
+use strict;
+use warnings;
+
+use Syntax::Keyword::Try;
+use DateTime;
+use CGI;
+use Text::Markdown 'markdown';
+
+my $cgi = CGI->new;
+my $dir = $cgi->param('dir');
+   #$dir = './htdocs/cgi-bin/docs' if(!$dir);
+   $dir = './docs' if(!$dir);
+my $file = $cgi->param('file');
+   #$file = qq(../../Current Development Check List.md) if(!$file);
+
+try{
+if($file && -f "$dir/$file"){
+    open my $fh, '<', "$dir/$file" or die "Can't open file $!";
+    read $fh, my $file_content, -s $fh;
+    my $html = markdown($file_content);
+    print $cgi->header, "<DIV style='padding:10px'>\n$html\n</DIV>", $cgi->end_html;
+}
+elsif(-d "$dir"){ #List and return markup files found in dir, comma separated.
+    opendir(DIR, $dir) or die $!;
+    my @lst = (); 
+    while ($file = readdir(DIR)) {
+        next if ($file =~ m/^\./) || ($file =~ m/!\.md$/);
+        next if (-d "$dir/$file");
+        push @lst, $file;
+    }
+    closedir(DIR);   
+    print $cgi->header, join (',', map { chomp; qq("$_") } sort @lst);
+}else{
+    die "Directory [$dir] not valid!"
+}
+
+
+exit;
+}
+catch{
+    my $err = $@;
+    print $cgi->header,
+            "<font color=red><b>SERVER ERROR</b></font> on ".DateTime->now."<pre> $err\n$file</pre>";
+    print $cgi->end_html;
+}
\ No newline at end of file
diff --git a/htdocs/cgi-bin/modern.cgi b/htdocs/cgi-bin/modern.cgi
new file mode 100755 (executable)
index 0000000..c4d9bd1
--- /dev/null
@@ -0,0 +1,127 @@
+#!/usr/bin/perl
+#
+# Programed by: Will Budic
+# Open Source License -> https://choosealicense.com/licenses/isc/
+#
+use warnings;
+use strict;
+use Exception::Class ('LifeLogException');
+use Syntax::Keyword::Try;
+
+use CGI;
+use CGI::Session '-ip_match';
+use CGI::Carp qw ( fatalsToBrowser );
+use DBI;
+
+use DateTime;
+use DateTime::Format::SQLite;
+use DateTime::Duration;
+use Date::Language;
+use Date::Parse;
+use Time::localtime;
+
+use Regexp::Common qw /URI/;
+use List::MoreUtils qw(uniq);
+
+#DEFAULT SETTINGS HERE!
+use lib "system/modules";
+require Settings;
+
+my $cgi = CGI->new;
+my $sss = new CGI::Session( "driver:File", $cgi, { Directory => &Settings::logPath } );
+my $sid      = $sss->id();
+my $dbname   = $sss->param('database');
+my $userid   = $sss->param('alias');
+my $password = $sss->param('passw');
+my $sssCDB   = $sss->param('cdb');
+my $vmode;
+
+if ( !$userid || !$dbname ) {
+    print $cgi->redirect("login_ctr.cgi?CGISESSID=$sid");
+    exit;
+}
+
+my $database = &Settings::logPath . $dbname;
+my $dsn      = "DBI:SQLite:dbname=$database";
+my $db       = DBI->connect( $dsn, $userid, $password, { PrintError => 0, RaiseError => 1 } )
+                      or LifeLogException->throw("Connection failed [$_");
+my ( $imgw, $imgh );
+#Fetch settings
+ Settings::getConfiguration($db);
+ Settings::getTheme();
+
+### Page specific settings Here
+my $TH_CSS      = &Settings::css;
+my $BGCOL       = &Settings::bgcol;
+#Set to 1 to get debug help. Switch off with 0.
+my $DEBUG       = &Settings::debug;
+#END OF SETTINGS
+
+my $lang  = Date::Language->new(Settings::language());
+my $today = DateTime->now;
+   $today -> set_time_zone(Settings::timezone());
+
+
+##Handle Session Keeps
+$sss->expire(&Settings::sessionExprs);
+#
+$sss->flush();
+
+
+print $cgi->header(-expires => "0s", -charset => "UTF-8");
+print $cgi->start_html(
+    -title   => "Personal Log",
+    -BGCOLOR => $BGCOL,
+    -onload  => "onBodyLoad(0,'".Settings::timezone()."','$today','".&Settings::sessionExprs."',0);",
+    -style   => [
+        { -type => 'text/css', -src => "wsrc/$TH_CSS" },
+        { -type => 'text/css', -src => 'wsrc/jquery-ui.css' },
+        { -type => 'text/css', -src => 'wsrc/jquery-ui.theme.css' },
+        {
+            -type => 'text/css',
+            -src  => 'wsrc/jquery-ui-timepicker-addon.css'
+        },
+        { -type => 'text/css', -src => 'wsrc/tip-skyblue/tip-skyblue.css' },
+        {
+            -type => 'text/css',
+            -src  => 'wsrc/tip-yellowsimple/tip-yellowsimple.css'
+        },
+
+        { -type => 'text/css', -src => 'wsrc/quill/katex.min.css' },
+        { -type => 'text/css', -src => 'wsrc/quill/monokai-sublime.min.css' },
+        { -type => 'text/css', -src => 'wsrc/quill/quill.snow.css' },
+        { -type => 'text/css', -src => 'wsrc/jquery.sweet-dropdown.css' },
+
+    ],
+    -script => [
+        { -type => 'text/javascript', -src => 'wsrc/main.js' },
+        { -type => 'text/javascript', -src => 'wsrc/jquery.js' },
+        { -type => 'text/javascript', -src => 'wsrc/jquery-ui.js' },
+        {
+            -type => 'text/javascript',
+            -src  => 'wsrc/jquery-ui-timepicker-addon.js'
+        },
+        {
+            -type => 'text/javascript',
+            -src  => 'wsrc/jquery-ui-sliderAccess.js'
+        },
+        { -type => 'text/javascript', -src => 'wsrc/jquery.poshytip.js' },
+
+        { -type => 'text/javascript', -src => 'wsrc/quill/katex.min.js' },
+        { -type => 'text/javascript', -src => 'wsrc/quill/highlight.min.js' },
+        { -type => 'text/javascript', -src => 'wsrc/quill/quill.min.js' },
+        { -type => 'text/javascript', -src => 'wsrc/jscolor.js' },
+        { -type => 'text/javascript', -src => 'wsrc/moment.js' },
+        { -type => 'text/javascript', -src => 'wsrc/moment-timezone-with-data.js' },
+        { -type => 'text/javascript', -src => 'wsrc/jquery.sweet-dropdown.js'}
+
+    ],
+);
+
+
+print $cgi->end_html;
+
+
+$db->disconnect();
+undef($sss);
+exit;
\ No newline at end of file
diff --git a/htdocs/cgi-bin/rss_output/rss_CPAN.rdf b/htdocs/cgi-bin/rss_output/rss_CPAN.rdf
new file mode 100644 (file)
index 0000000..8b95e25
--- /dev/null
@@ -0,0 +1,931 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<rss version="2.0">
+  <channel>
+    <title>Recent CPAN uploads - MetaCPAN</title>
+    <link>/</link>
+    <item>
+      <title>Config-ROFL-1.01</title>
+      <link>https://metacpan.org/release/NICOMEN/Config-ROFL-1.01</link>
+      <author>NICOMEN</author>
+      <guid isPermaLink="true">https://metacpan.org/release/NICOMEN/Config-ROFL-1.01</guid>
+      <pubDate>Mon, 02 Oct 2023 01:53:10 GMT</pubDate>
+      <description>Yet another config module</description>
+    </item>
+    <item>
+      <title>SPVM-Digest-SHA-0.061001</title>
+      <link>https://metacpan.org/release/KIMOTO/SPVM-Digest-SHA-0.061001</link>
+      <author>KIMOTO</author>
+      <guid isPermaLink="true">https://metacpan.org/release/KIMOTO/SPVM-Digest-SHA-0.061001</guid>
+      <pubDate>Mon, 02 Oct 2023 01:42:52 GMT</pubDate>
+      <description>&lt;p&gt;SHA-1/224/256/384/512&lt;/p&gt;&lt;p&gt;Changes for 0.061001 - 2023-10-02&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Requirement Changes&lt;/li&gt;
+&lt;li&gt;Exception Message Changes&lt;/li&gt;
+&lt;li&gt;Internal Changes&lt;/li&gt;
+&lt;li&gt;Document Changes&lt;/li&gt;
+&lt;/ul&gt;</description>
+    </item>
+    <item>
+      <title>SPVM-MIME-Base64-1.001003</title>
+      <link>https://metacpan.org/release/KIMOTO/SPVM-MIME-Base64-1.001003</link>
+      <author>KIMOTO</author>
+      <guid isPermaLink="true">https://metacpan.org/release/KIMOTO/SPVM-MIME-Base64-1.001003</guid>
+      <pubDate>Mon, 02 Oct 2023 01:12:28 GMT</pubDate>
+      <description>&lt;p&gt;Base64 Encoding/Decoding&lt;/p&gt;&lt;p&gt;Changes for 1.001003 - 2023-10-02&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Exception Message Changes&lt;/li&gt;
+&lt;li&gt;Document Changes&lt;/li&gt;
+&lt;/ul&gt;</description>
+    </item>
+    <item>
+      <title>SPVM-Digest-MD5-1.001003</title>
+      <link>https://metacpan.org/release/KIMOTO/SPVM-Digest-MD5-1.001003</link>
+      <author>KIMOTO</author>
+      <guid isPermaLink="true">https://metacpan.org/release/KIMOTO/SPVM-Digest-MD5-1.001003</guid>
+      <pubDate>Mon, 02 Oct 2023 00:54:37 GMT</pubDate>
+      <description>&lt;p&gt;MD5&lt;/p&gt;&lt;p&gt;Changes for 1.001003 - 2023-10-02&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Requirement Changes&lt;/li&gt;
+&lt;li&gt;Exception Message Changes&lt;/li&gt;
+&lt;li&gt;Document Changes&lt;/li&gt;
+&lt;li&gt;Incompatible Changes&lt;/li&gt;
+&lt;/ul&gt;</description>
+    </item>
+    <item>
+      <title>ColorTheme-2.1.4</title>
+      <link>https://metacpan.org/release/PERLANCAR/ColorTheme-2.1.4</link>
+      <author>PERLANCAR</author>
+      <guid isPermaLink="true">https://metacpan.org/release/PERLANCAR/ColorTheme-2.1.4</guid>
+      <pubDate>Mon, 02 Oct 2023 00:05:25 GMT</pubDate>
+      <description>&lt;p&gt;Color themes&lt;/p&gt;&lt;p&gt;Changes for 2.1.4 - 2023-07-14&lt;/p&gt;&lt;ul&gt;&lt;li&gt;No spec changes.&lt;/li&gt;
+&lt;li&gt;[doc] Mention somewhat related specification: BorderStyle.&lt;/li&gt;
+&lt;/ul&gt;</description>
+    </item>
+    <item>
+      <title>Config-ROFL-1.0</title>
+      <link>https://metacpan.org/release/NICOMEN/Config-ROFL-1.0</link>
+      <author>NICOMEN</author>
+      <guid isPermaLink="true">https://metacpan.org/release/NICOMEN/Config-ROFL-1.0</guid>
+      <pubDate>Sun, 01 Oct 2023 23:42:36 GMT</pubDate>
+      <description>Yet another config module</description>
+    </item>
+    <item>
+      <title>CryptX-0.079_003</title>
+      <link>https://metacpan.org/release/MIK/CryptX-0.079_003</link>
+      <author>MIK</author>
+      <guid isPermaLink="true">https://metacpan.org/release/MIK/CryptX-0.079_003</guid>
+      <pubDate>Sun, 01 Oct 2023 17:36:06 GMT</pubDate>
+      <description>&lt;p&gt;Cryptographic toolkit&lt;/p&gt;&lt;p&gt;Changes for 0.079_003 - 2023-01-10&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Disable AES-NI&lt;/li&gt;
+&lt;/ul&gt;</description>
+    </item>
+    <item>
+      <title>CryptX-0.079_002</title>
+      <link>https://metacpan.org/release/MIK/CryptX-0.079_002</link>
+      <author>MIK</author>
+      <guid isPermaLink="true">https://metacpan.org/release/MIK/CryptX-0.079_002</guid>
+      <pubDate>Sun, 01 Oct 2023 17:35:55 GMT</pubDate>
+      <description>&lt;p&gt;Cryptographic toolkit&lt;/p&gt;&lt;p&gt;Changes for 0.079_002 - 2023-01-10&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Enable AES-NI on gcc/clang/llvm&lt;/li&gt;
+&lt;/ul&gt;</description>
+    </item>
+    <item>
+      <title>DateTime-Format-Natural-1.17_01</title>
+      <link>https://metacpan.org/release/SCHUBIGER/DateTime-Format-Natural-1.17_01</link>
+      <author>SCHUBIGER</author>
+      <guid isPermaLink="true">https://metacpan.org/release/SCHUBIGER/DateTime-Format-Natural-1.17_01</guid>
+      <pubDate>Sun, 01 Oct 2023 14:02:29 GMT</pubDate>
+      <description>Parse informal natural language date/time strings</description>
+    </item>
+    <item>
+      <title>Tk-CodeText-0.45</title>
+      <link>https://metacpan.org/release/HANJE/Tk-CodeText-0.45</link>
+      <author>HANJE</author>
+      <guid isPermaLink="true">https://metacpan.org/release/HANJE/Tk-CodeText-0.45</guid>
+      <pubDate>Sun, 01 Oct 2023 13:03:01 GMT</pubDate>
+      <description>Programmer&#39;s Swiss army knife Text widget.</description>
+    </item>
+    <item>
+      <title>CryptX-0.079</title>
+      <link>https://metacpan.org/release/MIK/CryptX-0.079</link>
+      <author>MIK</author>
+      <guid isPermaLink="true">https://metacpan.org/release/MIK/CryptX-0.079</guid>
+      <pubDate>Sun, 01 Oct 2023 12:20:32 GMT</pubDate>
+      <description>&lt;p&gt;Cryptographic toolkit&lt;/p&gt;&lt;p&gt;Changes for 0.079 - 2023-01-10&lt;/p&gt;&lt;ul&gt;&lt;li&gt;fix #92 update libtomcrypt&lt;/li&gt;
+&lt;li&gt;bundled libtomcrypt update branch:develop (commit:1e629e6f 2023-06-22)&lt;/li&gt;
+&lt;/ul&gt;</description>
+    </item>
+    <item>
+      <title>Email-Address-Classify-0.01</title>
+      <link>https://metacpan.org/release/FKENTO/Email-Address-Classify-0.01</link>
+      <author>FKENTO</author>
+      <guid isPermaLink="true">https://metacpan.org/release/FKENTO/Email-Address-Classify-0.01</guid>
+      <pubDate>Sun, 01 Oct 2023 08:50:49 GMT</pubDate>
+      <description>Classify email addresses</description>
+    </item>
+    <item>
+      <title>Perl-MinimumVersion-1.42-TRIAL</title>
+      <link>https://metacpan.org/release/DBOOK/Perl-MinimumVersion-1.42-TRIAL</link>
+      <author>DBOOK</author>
+      <guid isPermaLink="true">https://metacpan.org/release/DBOOK/Perl-MinimumVersion-1.42-TRIAL</guid>
+      <pubDate>Sun, 01 Oct 2023 01:11:31 GMT</pubDate>
+      <description>&lt;p&gt;Find a minimum required version of perl for Perl code&lt;/p&gt;&lt;p&gt;Changes for 1.42 - 2023-09-30&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Restore detection for Perl version 5.008, which means that 5.006 is now the minimum required version that will be reported.&lt;/li&gt;
+&lt;li&gt;Recognize the minimum required Perl versions for:&lt;/li&gt;
+&lt;/ul&gt;</description>
+    </item>
+    <item>
+      <title>Acme-CPANModules-RequireHooks-0.001</title>
+      <link>https://metacpan.org/release/PERLANCAR/Acme-CPANModules-RequireHooks-0.001</link>
+      <author>PERLANCAR</author>
+      <guid isPermaLink="true">https://metacpan.org/release/PERLANCAR/Acme-CPANModules-RequireHooks-0.001</guid>
+      <pubDate>Sun, 01 Oct 2023 00:06:00 GMT</pubDate>
+      <description>&lt;p&gt;List of modules that utilize require() hook&lt;/p&gt;&lt;p&gt;Changes for 0.001 - 2023-02-08&lt;/p&gt;&lt;ul&gt;&lt;li&gt;First release.&lt;/li&gt;
+&lt;/ul&gt;</description>
+    </item>
+    <item>
+      <title>SPVM-Errno-0.090003</title>
+      <link>https://metacpan.org/release/KIMOTO/SPVM-Errno-0.090003</link>
+      <author>KIMOTO</author>
+      <guid isPermaLink="true">https://metacpan.org/release/KIMOTO/SPVM-Errno-0.090003</guid>
+      <pubDate>Sat, 30 Sep 2023 23:51:59 GMT</pubDate>
+      <description>&lt;p&gt;Error Numbers&lt;/p&gt;&lt;p&gt;Changes for 0.090003 - 2023-10-01&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Exception Message Changes&lt;/li&gt;
+&lt;li&gt;Document Changes&lt;/li&gt;
+&lt;/ul&gt;</description>
+    </item>
+    <item>
+      <title>Test-Warnings-0.032</title>
+      <link>https://metacpan.org/release/ETHER/Test-Warnings-0.032</link>
+      <author>ETHER</author>
+      <guid isPermaLink="true">https://metacpan.org/release/ETHER/Test-Warnings-0.032</guid>
+      <pubDate>Sat, 30 Sep 2023 23:37:55 GMT</pubDate>
+      <description>&lt;p&gt;Test for warnings and the lack of them&lt;/p&gt;&lt;p&gt;Changes for 0.032 - 2023-09-30T23:36:50Z&lt;/p&gt;&lt;ul&gt;&lt;li&gt;new config variable, $ENV&#123;PERL_TEST_WARNINGS_ONLY_REPORT_WARNINGS&#125;, for temporarily turning failures into reports&lt;/li&gt;
+&lt;/ul&gt;</description>
+    </item>
+    <item>
+      <title>Dispatch-Fu-0.99</title>
+      <link>https://metacpan.org/release/OODLER/Dispatch-Fu-0.99</link>
+      <author>OODLER</author>
+      <guid isPermaLink="true">https://metacpan.org/release/OODLER/Dispatch-Fu-0.99</guid>
+      <pubDate>Sat, 30 Sep 2023 23:21:22 GMT</pubDate>
+      <description>&lt;p&gt;Converts any complicated conditional dispatch situation into familiar static hash-key based dispatch&lt;/p&gt;&lt;p&gt;Changes for 0.99&lt;/p&gt;&lt;ul&gt;&lt;li&gt;fixed xdefault to allow for the first parameter to to be C&amp;lt;undef&amp;gt;&lt;/li&gt;
+&lt;/ul&gt;</description>
+    </item>
+    <item>
+      <title>Win-SerialPort-0.23</title>
+      <link>https://metacpan.org/release/ZHUMARIN/Win-SerialPort-0.23</link>
+      <author>ZHUMARIN</author>
+      <guid isPermaLink="true">https://metacpan.org/release/ZHUMARIN/Win-SerialPort-0.23</guid>
+      <pubDate>Sat, 30 Sep 2023 22:28:24 GMT</pubDate>
+      <description>User interface to Win32 Serial API calls (fork for 64bit)</description>
+    </item>
+    <item>
+      <title>EAI-Wrap-1.0</title>
+      <link>https://metacpan.org/release/RKAPL/EAI-Wrap-1.0</link>
+      <author>RKAPL</author>
+      <guid isPermaLink="true">https://metacpan.org/release/RKAPL/EAI-Wrap-1.0</guid>
+      <pubDate>Sat, 30 Sep 2023 22:04:09 GMT</pubDate>
+      <description>&lt;p&gt;framework for easy creation of Enterprise Application Integration tasks&lt;/p&gt;&lt;p&gt;Changes for 1.0&lt;/p&gt;&lt;ul&gt;&lt;li&gt;improved API Doc, enabled overriding of redoDir, logRootPath, historyFolder and historyFolderUpload using commandline parameters, e.g. --config redoDir=/your/redo/folder, prevent error mail (logger) and uncaught exception in sendGeneralMail when no smtp configured; use custom locales in DateUtil in all textual month functions now; allow anonymous subs in all configuration places, where strings were used (executeOnInit, postDumpProcessing, postReadProcessing, lineCode and fieldCode).&lt;/li&gt;
+&lt;/ul&gt;</description>
+    </item>
+    <item>
+      <title>GitHub-Crud-20230930</title>
+      <link>https://metacpan.org/release/PRBRENAN/GitHub-Crud-20230930</link>
+      <author>PRBRENAN</author>
+      <guid isPermaLink="true">https://metacpan.org/release/PRBRENAN/GitHub-Crud-20230930</guid>
+      <pubDate>Sat, 30 Sep 2023 21:45:04 GMT</pubDate>
+      <description>Create, Read, Update, Delete files, commits, issues, and web hooks on GitHub.</description>
+    </item>
+    <item>
+      <title>Math-Vectors2-20230930</title>
+      <link>https://metacpan.org/release/PRBRENAN/Math-Vectors2-20230930</link>
+      <author>PRBRENAN</author>
+      <guid isPermaLink="true">https://metacpan.org/release/PRBRENAN/Math-Vectors2-20230930</guid>
+      <pubDate>Sat, 30 Sep 2023 21:24:45 GMT</pubDate>
+      <description>Vectors in two dimensions.</description>
+    </item>
+    <item>
+      <title>Win-SerialPort-0.22</title>
+      <link>https://metacpan.org/release/ZHUMARIN/Win-SerialPort-0.22</link>
+      <author>ZHUMARIN</author>
+      <guid isPermaLink="true">https://metacpan.org/release/ZHUMARIN/Win-SerialPort-0.22</guid>
+      <pubDate>Sat, 30 Sep 2023 19:57:54 GMT</pubDate>
+      <description>User interface to Win32 Serial API calls</description>
+    </item>
+    <item>
+      <title>App-Git-Workflow-Command-Take-0.8</title>
+      <link>https://metacpan.org/release/IVANWILLS/App-Git-Workflow-Command-Take-0.8</link>
+      <author>IVANWILLS</author>
+      <guid isPermaLink="true">https://metacpan.org/release/IVANWILLS/App-Git-Workflow-Command-Take-0.8</guid>
+      <pubDate>Sat, 30 Sep 2023 19:55:09 GMT</pubDate>
+      <description>&lt;p&gt;Resolve merge conflicts by only taking one side of each conflicted section&lt;/p&gt;&lt;p&gt;Changes for 0.8 - 2023-09-30&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Updating for release of version 0.8 Updating travis (Ivan Wills) Updated (Ivan Wills) Fixing conflict resolution when &amp;quot;both added&amp;quot; (Ivan Wills)&lt;/li&gt;
+&lt;/ul&gt;</description>
+    </item>
+    <item>
+      <title>App-GUI-Harmonograph-0.61</title>
+      <link>https://metacpan.org/release/LICHTKIND/App-GUI-Harmonograph-0.61</link>
+      <author>LICHTKIND</author>
+      <guid isPermaLink="true">https://metacpan.org/release/LICHTKIND/App-GUI-Harmonograph-0.61</guid>
+      <pubDate>Sat, 30 Sep 2023 16:49:23 GMT</pubDate>
+      <description>&lt;p&gt;sculpting beautiful circular drawings&lt;/p&gt;&lt;p&gt;Changes for 0.61 - 2023-09-30&lt;/p&gt;&lt;ul&gt;&lt;li&gt;= bug fix&lt;/li&gt;
+&lt;li&gt;adopt code to new GTC API&lt;/li&gt;
+&lt;/ul&gt;</description>
+    </item>
+    <item>
+      <title>App-GUI-Cellgraph-0.26</title>
+      <link>https://metacpan.org/release/LICHTKIND/App-GUI-Cellgraph-0.26</link>
+      <author>LICHTKIND</author>
+      <guid isPermaLink="true">https://metacpan.org/release/LICHTKIND/App-GUI-Cellgraph-0.26</guid>
+      <pubDate>Sat, 30 Sep 2023 16:47:57 GMT</pubDate>
+      <description>&lt;p&gt;draw pattern by cellular automata&lt;/p&gt;&lt;p&gt;Changes for 0.26 - 2023-09-30&lt;/p&gt;&lt;ul&gt;&lt;li&gt;= bug fix&lt;/li&gt;
+&lt;li&gt;adopt code to new GTC API&lt;/li&gt;
+&lt;/ul&gt;</description>
+    </item>
+    <item>
+      <title>List-Util-mapsplice-0.001</title>
+      <link>https://metacpan.org/release/PERLANCAR/List-Util-mapsplice-0.001</link>
+      <author>PERLANCAR</author>
+      <guid isPermaLink="true">https://metacpan.org/release/PERLANCAR/List-Util-mapsplice-0.001</guid>
+      <pubDate>Sat, 30 Sep 2023 11:55:29 GMT</pubDate>
+      <description>&lt;p&gt;Splice array with code, replace items with result from code&lt;/p&gt;&lt;p&gt;Changes for 0.001 - 2023-09-30&lt;/p&gt;&lt;ul&gt;&lt;li&gt;First version, no tests yet.&lt;/li&gt;
+&lt;/ul&gt;</description>
+    </item>
+    <item>
+      <title>List-Util-groupby-0.002</title>
+      <link>https://metacpan.org/release/PERLANCAR/List-Util-groupby-0.002</link>
+      <author>PERLANCAR</author>
+      <guid isPermaLink="true">https://metacpan.org/release/PERLANCAR/List-Util-groupby-0.002</guid>
+      <pubDate>Sat, 30 Sep 2023 11:55:23 GMT</pubDate>
+      <description>&lt;p&gt;Group items of a list into several (possibly multilevel) buckets&lt;/p&gt;&lt;p&gt;Changes for 0.002 - 2023-09-30&lt;/p&gt;&lt;ul&gt;&lt;li&gt;No functional changes.&lt;/li&gt;
+&lt;li&gt;[doc] Fix See Also section.&lt;/li&gt;
+&lt;/ul&gt;</description>
+    </item>
+    <item>
+      <title>List-Util-groupby-0.003</title>
+      <link>https://metacpan.org/release/PERLANCAR/List-Util-groupby-0.003</link>
+      <author>PERLANCAR</author>
+      <guid isPermaLink="true">https://metacpan.org/release/PERLANCAR/List-Util-groupby-0.003</guid>
+      <pubDate>Sat, 30 Sep 2023 11:53:57 GMT</pubDate>
+      <description>&lt;p&gt;Group items of a list into several (possibly multilevel) buckets&lt;/p&gt;&lt;p&gt;Changes for 0.003 - 2023-09-30&lt;/p&gt;&lt;ul&gt;&lt;li&gt;No functional changes.&lt;/li&gt;
+&lt;li&gt;Fix documentation, add example in Synopsis.&lt;/li&gt;
+&lt;/ul&gt;</description>
+    </item>
+    <item>
+      <title>List-Util-groupby-0.001</title>
+      <link>https://metacpan.org/release/PERLANCAR/List-Util-groupby-0.001</link>
+      <author>PERLANCAR</author>
+      <guid isPermaLink="true">https://metacpan.org/release/PERLANCAR/List-Util-groupby-0.001</guid>
+      <pubDate>Sat, 30 Sep 2023 11:53:46 GMT</pubDate>
+      <description>&lt;p&gt;Group items of a list into several (possibly multilevel) buckets&lt;/p&gt;&lt;p&gt;Changes for 0.001 - 2023-09-30&lt;/p&gt;&lt;ul&gt;&lt;li&gt;First version, no tests yet.&lt;/li&gt;
+&lt;/ul&gt;</description>
+    </item>
+    <item>
+      <title>SPVM-0.989047</title>
+      <link>https://metacpan.org/release/KIMOTO/SPVM-0.989047</link>
+      <author>KIMOTO</author>
+      <guid isPermaLink="true">https://metacpan.org/release/KIMOTO/SPVM-0.989047</guid>
+      <pubDate>Sat, 30 Sep 2023 01:21:20 GMT</pubDate>
+      <description>&lt;p&gt;SPVM Language&lt;/p&gt;&lt;p&gt;Changes for 0.989047 - 2023-09-30&lt;/p&gt;&lt;ul&gt;&lt;li&gt;New Features&lt;/li&gt;
+&lt;li&gt;Bug Fix&lt;/li&gt;
+&lt;/ul&gt;</description>
+    </item>
+    <item>
+      <title>Task-FASTQTools-0.01</title>
+      <link>https://metacpan.org/release/CHRISARG/Task-FASTQTools-0.01</link>
+      <author>CHRISARG</author>
+      <guid isPermaLink="true">https://metacpan.org/release/CHRISARG/Task-FASTQTools-0.01</guid>
+      <pubDate>Sat, 30 Sep 2023 00:53:30 GMT</pubDate>
+      <description>&lt;p&gt;Provide native perl tools for manipulating FASTQ files&lt;/p&gt;&lt;p&gt;Changes for 0.01 - 2023-09-29T18:52:08-06:00&lt;/p&gt;&lt;ul&gt;&lt;/ul&gt;</description>
+    </item>
+    <item>
+      <title>BorderStyle-3.0.3</title>
+      <link>https://metacpan.org/release/PERLANCAR/BorderStyle-3.0.3</link>
+      <author>PERLANCAR</author>
+      <guid isPermaLink="true">https://metacpan.org/release/PERLANCAR/BorderStyle-3.0.3</guid>
+      <pubDate>Sat, 30 Sep 2023 00:05:19 GMT</pubDate>
+      <description>&lt;p&gt;Border styles&lt;/p&gt;&lt;p&gt;Changes for 3.0.3 - 2023-07-14&lt;/p&gt;&lt;ul&gt;&lt;li&gt;No spec changes.&lt;/li&gt;
+&lt;li&gt;[doc] Mention somewhat related specification: ColorTheme.&lt;/li&gt;
+&lt;/ul&gt;</description>
+    </item>
+    <item>
+      <title>WWW-Crawl-0.1</title>
+      <link>https://metacpan.org/release/BOD/WWW-Crawl-0.1</link>
+      <author>BOD</author>
+      <guid isPermaLink="true">https://metacpan.org/release/BOD/WWW-Crawl-0.1</guid>
+      <pubDate>Fri, 29 Sep 2023 23:47:32 GMT</pubDate>
+      <description>&lt;p&gt;A simple web crawler for extracting links and more from web pages&lt;/p&gt;&lt;p&gt;Changes for 0.1&lt;/p&gt;&lt;ul&gt;&lt;li&gt;First version, released on an unsuspecting world.&lt;/li&gt;
+&lt;/ul&gt;</description>
+    </item>
+    <item>
+      <title>Astro-satpass-0.129_01</title>
+      <link>https://metacpan.org/release/WYANT/Astro-satpass-0.129_01</link>
+      <author>WYANT</author>
+      <guid isPermaLink="true">https://metacpan.org/release/WYANT/Astro-satpass-0.129_01</guid>
+      <pubDate>Fri, 29 Sep 2023 23:10:11 GMT</pubDate>
+      <description>&lt;p&gt;Classes and app to compute satellite visibility&lt;/p&gt;&lt;p&gt;Changes for 0.129_01 - 2023-09-29&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Update magnitude table to track Kelso visual.txt.&lt;/li&gt;
+&lt;li&gt;Track Mike McCants&#39; web site move.&lt;/li&gt;
+&lt;/ul&gt;</description>
+    </item>
+    <item>
+      <title>TkWeather_3.40</title>
+      <link>https://metacpan.org/release/TURNERJW/TkWeather_3.40</link>
+      <author>TURNERJW</author>
+      <guid isPermaLink="true">https://metacpan.org/release/TURNERJW/TkWeather_3.40</guid>
+      <pubDate>Fri, 29 Sep 2023 23:10:00 GMT</pubDate>
+      <description></description>
+    </item>
+    <item>
+      <title>App-ListSoftwareLicenses-0.080</title>
+      <link>https://metacpan.org/release/PERLANCAR/App-ListSoftwareLicenses-0.080</link>
+      <author>PERLANCAR</author>
+      <guid isPermaLink="true">https://metacpan.org/release/PERLANCAR/App-ListSoftwareLicenses-0.080</guid>
+      <pubDate>Fri, 29 Sep 2023 23:09:49 GMT</pubDate>
+      <description>&lt;p&gt;List all Software::License&#39;s&lt;/p&gt;&lt;p&gt;Changes for 0.080 - 2023-07-11&lt;/p&gt;&lt;ul&gt;&lt;li&gt;No functional changes.&lt;/li&gt;
+&lt;li&gt;Remove usage of smartmatch to avoid warning under perl 5.38.&lt;/li&gt;
+&lt;/ul&gt;</description>
+    </item>
+    <item>
+      <title>SPVM-0.989046</title>
+      <link>https://metacpan.org/release/KIMOTO/SPVM-0.989046</link>
+      <author>KIMOTO</author>
+      <guid isPermaLink="true">https://metacpan.org/release/KIMOTO/SPVM-0.989046</guid>
+      <pubDate>Fri, 29 Sep 2023 23:09:38 GMT</pubDate>
+      <description>&lt;p&gt;SPVM Language&lt;/p&gt;&lt;p&gt;Changes for 0.989046 - 2023-09-28&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Internal Changes&lt;/li&gt;
+&lt;li&gt;Incompatible Changes&lt;/li&gt;
+&lt;li&gt;New Features&lt;/li&gt;
+&lt;li&gt;Deprecations&lt;/li&gt;
+&lt;/ul&gt;</description>
+    </item>
+    <item>
+      <title>Nice-Try-v1.3.5</title>
+      <link>https://metacpan.org/release/JDEGUEST/Nice-Try-v1.3.5</link>
+      <author>JDEGUEST</author>
+      <guid isPermaLink="true">https://metacpan.org/release/JDEGUEST/Nice-Try-v1.3.5</guid>
+      <pubDate>Fri, 29 Sep 2023 23:09:27 GMT</pubDate>
+      <description>&lt;p&gt;A real Try Catch Block Implementation Using Perl Filter&lt;/p&gt;&lt;p&gt;Changes for v1.3.5 - 2023-09-29T12:28:19Z&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Improved code by giving up early if no &#39;try&#39; block is detected in the code.&lt;/li&gt;
+&lt;li&gt;Fixed bug #6 arising when token __SUB__ is used within a try-catch block (Credits to Clay Fouts for finding this)&lt;/li&gt;
+&lt;li&gt;Nice::Try now supports subroutine prototype and signature&lt;/li&gt;
+&lt;/ul&gt;</description>
+    </item>
+    <item>
+      <title>Benchmark-DKbench-2.4</title>
+      <link>https://metacpan.org/release/DKECHAG/Benchmark-DKbench-2.4</link>
+      <author>DKECHAG</author>
+      <guid isPermaLink="true">https://metacpan.org/release/DKECHAG/Benchmark-DKbench-2.4</guid>
+      <pubDate>Fri, 29 Sep 2023 23:09:15 GMT</pubDate>
+      <description>&lt;p&gt;Perl CPU Benchmark&lt;/p&gt;&lt;p&gt;Changes for 2.4 - 2023-09-29&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Added --scale and --stdev options.&lt;/li&gt;
+&lt;/ul&gt;</description>
+    </item>
+    <item>
+      <title>Iterator-Flex-0.16</title>
+      <link>https://metacpan.org/release/DJERIUS/Iterator-Flex-0.16</link>
+      <author>DJERIUS</author>
+      <guid isPermaLink="true">https://metacpan.org/release/DJERIUS/Iterator-Flex-0.16</guid>
+      <pubDate>Fri, 29 Sep 2023 23:09:04 GMT</pubDate>
+      <description>&lt;p&gt;Iterators with flexible behaviors&lt;/p&gt;&lt;p&gt;Changes for 0.16 - 2023-09-28T19:17:13-04:00&lt;/p&gt;&lt;ul&gt;&lt;li&gt;ENHANCEMENT&lt;/li&gt;
+&lt;/ul&gt;</description>
+    </item>
+    <item>
+      <title>RxPerl-v6.28.0</title>
+      <link>https://metacpan.org/release/KARJALA/RxPerl-v6.28.0</link>
+      <author>KARJALA</author>
+      <guid isPermaLink="true">https://metacpan.org/release/KARJALA/RxPerl-v6.28.0</guid>
+      <pubDate>Thu, 28 Sep 2023 18:51:17 GMT</pubDate>
+      <description>&lt;p&gt;an implementation of Reactive Extensions / rxjs for Perl&lt;/p&gt;&lt;p&gt;Changes for v6.28.0 - 2023-09-28T18:45:00Z&lt;/p&gt;&lt;ul&gt;&lt;li&gt;removed op_group_by operator, because it was too buggy. (If anyone has a good grasp of how it works/what it should do, feel free to contact me)&lt;/li&gt;
+&lt;li&gt;removed EXPERIMENTAL status of the two promise functions, since rxjs v7 has been released&lt;/li&gt;
+&lt;/ul&gt;</description>
+    </item>
+    <item>
+      <title>EAI-Wrap-0.10</title>
+      <link>https://metacpan.org/release/RKAPL/EAI-Wrap-0.10</link>
+      <author>RKAPL</author>
+      <guid isPermaLink="true">https://metacpan.org/release/RKAPL/EAI-Wrap-0.10</guid>
+      <pubDate>Thu, 28 Sep 2023 18:47:12 GMT</pubDate>
+      <description>&lt;p&gt;framework for easy creation of Enterprise Application Integration tasks&lt;/p&gt;&lt;p&gt;Changes for 0.10&lt;/p&gt;&lt;ul&gt;&lt;li&gt;improved API Doc, enabled overriding of redoDir, logRootPath, historyFolder and historyFolderUpload using commandline parameters, e.g. --config redoDir=/your/redo/folder, prevent error mail (logger) and uncaught exception in sendGeneralMail when no smtp configured; use custom locales in DateUtil in all textual month functions now.&lt;/li&gt;
+&lt;/ul&gt;</description>
+    </item>
+    <item>
+      <title>Dispatch-Fu-0.98</title>
+      <link>https://metacpan.org/release/OODLER/Dispatch-Fu-0.98</link>
+      <author>OODLER</author>
+      <guid isPermaLink="true">https://metacpan.org/release/OODLER/Dispatch-Fu-0.98</guid>
+      <pubDate>Thu, 28 Sep 2023 18:14:20 GMT</pubDate>
+      <description>&lt;p&gt;Converts any complicated conditional dispatch situation into familiar static hash-key based dispatch&lt;/p&gt;&lt;p&gt;Changes for 0.98&lt;/p&gt;&lt;ul&gt;&lt;li&gt;added xdefault handling the situation where the case name is the same as the string value, which is the simlest case possible and what people use straight HASH ref dispatching for; see the tests and POD examples&lt;/li&gt;
+&lt;/ul&gt;</description>
+    </item>
+    <item>
+      <title>Aion-0.1</title>
+      <link>https://metacpan.org/release/DART/Aion-0.1</link>
+      <author>DART</author>
+      <guid isPermaLink="true">https://metacpan.org/release/DART/Aion-0.1</guid>
+      <pubDate>Thu, 28 Sep 2023 16:07:20 GMT</pubDate>
+      <description>&lt;p&gt;a postmodern object system for Perl 5, as Moose and Moo, but with improvements&lt;/p&gt;&lt;p&gt;Changes for 0.1 - 2023-09-28T16:04:10Z&lt;/p&gt;&lt;ul&gt;&lt;li&gt;original version&lt;/li&gt;
+&lt;/ul&gt;</description>
+    </item>
+    <item>
+      <title>Module-Build-Tiny-0.047</title>
+      <link>https://metacpan.org/release/LEONT/Module-Build-Tiny-0.047</link>
+      <author>LEONT</author>
+      <guid isPermaLink="true">https://metacpan.org/release/LEONT/Module-Build-Tiny-0.047</guid>
+      <pubDate>Thu, 28 Sep 2023 15:54:26 GMT</pubDate>
+      <description>&lt;p&gt;A tiny replacement for Module::Build&lt;/p&gt;&lt;p&gt;Changes for 0.047 - 2023-09-28T17:53:41+02:00&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Avoid using empty regex for backwards compatability&lt;/li&gt;
+&lt;/ul&gt;</description>
+    </item>
+    <item>
+      <title>Magic-Check-0.003</title>
+      <link>https://metacpan.org/release/LEONT/Magic-Check-0.003</link>
+      <author>LEONT</author>
+      <guid isPermaLink="true">https://metacpan.org/release/LEONT/Magic-Check-0.003</guid>
+      <pubDate>Thu, 28 Sep 2023 15:52:14 GMT</pubDate>
+      <description>&lt;p&gt;Add type/value checks to variables&lt;/p&gt;&lt;p&gt;Changes for 0.003 - 2023-09-28T17:51:58+02:00&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Validate when applying magic&lt;/li&gt;
+&lt;/ul&gt;</description>
+    </item>
+    <item>
+      <title>Test2-Harness-UI-0.000142</title>
+      <link>https://metacpan.org/release/EXODIST/Test2-Harness-UI-0.000142</link>
+      <author>EXODIST</author>
+      <guid isPermaLink="true">https://metacpan.org/release/EXODIST/Test2-Harness-UI-0.000142</guid>
+      <pubDate>Thu, 28 Sep 2023 15:50:48 GMT</pubDate>
+      <description>&lt;p&gt;Web interface for viewing and inspecting yath test logs&lt;/p&gt;&lt;p&gt;Changes for 0.000142 - 2023-09-28T08:49:37-07:00&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Work harder at uploading results&lt;/li&gt;
+&lt;/ul&gt;</description>
+    </item>
+    <item>
+      <title>Game-FaceGenerator-1.03</title>
+      <link>https://metacpan.org/release/SCHROEDER/Game-FaceGenerator-1.03</link>
+      <author>SCHROEDER</author>
+      <guid isPermaLink="true">https://metacpan.org/release/SCHROEDER/Game-FaceGenerator-1.03</guid>
+      <pubDate>Thu, 28 Sep 2023 15:36:40 GMT</pubDate>
+      <description>&lt;p&gt;a web app to combine random images into faces&lt;/p&gt;&lt;p&gt;Changes for 1.03&lt;/p&gt;&lt;ul&gt;&lt;li&gt;various new face types added (goblins, bugbears, dogs)&lt;/li&gt;
+&lt;/ul&gt;</description>
+    </item>
+    <item>
+      <title>FASTX-Reader-1.12.1-TRIAL</title>
+      <link>https://metacpan.org/release/PROCH/FASTX-Reader-1.12.1-TRIAL</link>
+      <author>PROCH</author>
+      <guid isPermaLink="true">https://metacpan.org/release/PROCH/FASTX-Reader-1.12.1-TRIAL</guid>
+      <pubDate>Thu, 28 Sep 2023 13:08:26 GMT</pubDate>
+      <description>&lt;p&gt;A simple module to parse FASTA and FASTQ files, supporting compressed files and paired-ends.&lt;/p&gt;&lt;p&gt;Changes for 1.12.1 - 2023-09-28&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Add citation&lt;/li&gt;
+&lt;li&gt;Suppress warnings in test&lt;/li&gt;
+&lt;/ul&gt;</description>
+    </item>
+    <item>
+      <title>Config-JSON-Enhanced-0.08</title>
+      <link>https://metacpan.org/release/BLIAKO/Config-JSON-Enhanced-0.08</link>
+      <author>BLIAKO</author>
+      <guid isPermaLink="true">https://metacpan.org/release/BLIAKO/Config-JSON-Enhanced-0.08</guid>
+      <pubDate>Thu, 28 Sep 2023 11:24:05 GMT</pubDate>
+      <description>&lt;p&gt;JSON-based config with C/Shell-style comments, verbatim sections and variable substitutions&lt;/p&gt;&lt;p&gt;Changes for 0.08&lt;/p&gt;&lt;ul&gt;&lt;li&gt;-Changed the regex for identifying comments, variables, verbatime sections to no need escaping special regex characters. -Added one more test for testing tags of comments, variables, etc.&lt;/li&gt;
+&lt;/ul&gt;</description>
+    </item>
+    <item>
+      <title>NBI-Slurm-0.7.0-TRIAL</title>
+      <link>https://metacpan.org/release/PROCH/NBI-Slurm-0.7.0-TRIAL</link>
+      <author>PROCH</author>
+      <guid isPermaLink="true">https://metacpan.org/release/PROCH/NBI-Slurm-0.7.0-TRIAL</guid>
+      <pubDate>Thu, 28 Sep 2023 11:13:50 GMT</pubDate>
+      <description>&lt;p&gt;NBI Slurm module&lt;/p&gt;&lt;p&gt;Changes for 0.7.0 - 2023-10-01&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&#96;make_image_from_bioconda&#96; now supports multiple packages [experimental]&lt;/li&gt;
+&lt;li&gt;&#96;make_package&#96; will now read the binaries from images, if made with make_image_from_bioconda&lt;/li&gt;
+&lt;li&gt;Improved &#96;shelf&#96;&lt;/li&gt;
+&lt;/ul&gt;</description>
+    </item>
+    <item>
+      <title>UID2-Client-0.02</title>
+      <link>https://metacpan.org/release/JIRO/UID2-Client-0.02</link>
+      <author>JIRO</author>
+      <guid isPermaLink="true">https://metacpan.org/release/JIRO/UID2-Client-0.02</guid>
+      <pubDate>Thu, 28 Sep 2023 10:04:20 GMT</pubDate>
+      <description>&lt;p&gt;Unified ID 2.0 Perl Client&lt;/p&gt;&lt;p&gt;Changes for 0.02 - 2023-09-28T10:03:10Z&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Support Token v4&lt;/li&gt;
+&lt;/ul&gt;</description>
+    </item>
+    <item>
+      <title>UID2-Client-XS-0.02</title>
+      <link>https://metacpan.org/release/JIRO/UID2-Client-XS-0.02</link>
+      <author>JIRO</author>
+      <guid isPermaLink="true">https://metacpan.org/release/JIRO/UID2-Client-XS-0.02</guid>
+      <pubDate>Thu, 28 Sep 2023 09:56:21 GMT</pubDate>
+      <description>&lt;p&gt;Unified ID 2.0 Client for Perl (binding to the UID2 C++ library)&lt;/p&gt;&lt;p&gt;Changes for 0.02 - 2023-09-28T09:53:39Z&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Support Token v4&lt;/li&gt;
+&lt;/ul&gt;</description>
+    </item>
+    <item>
+      <title>Term-Choose-Util-0.139</title>
+      <link>https://metacpan.org/release/KUERBIS/Term-Choose-Util-0.139</link>
+      <author>KUERBIS</author>
+      <guid isPermaLink="true">https://metacpan.org/release/KUERBIS/Term-Choose-Util-0.139</guid>
+      <pubDate>Thu, 28 Sep 2023 09:04:41 GMT</pubDate>
+      <description>&lt;p&gt;TUI-related functions for selecting directories, files, numbers and subsets of lists.&lt;/p&gt;&lt;p&gt;Changes for 0.139 - 2023-09-28&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Adapted the code to the documentation.&lt;/li&gt;
+&lt;/ul&gt;</description>
+    </item>
+    <item>
+      <title>Term-Choose-Util-0.138</title>
+      <link>https://metacpan.org/release/KUERBIS/Term-Choose-Util-0.138</link>
+      <author>KUERBIS</author>
+      <guid isPermaLink="true">https://metacpan.org/release/KUERBIS/Term-Choose-Util-0.138</guid>
+      <pubDate>Thu, 28 Sep 2023 08:00:28 GMT</pubDate>
+      <description>&lt;p&gt;TUI-related functions for selecting directories, files, numbers and subsets of lists.&lt;/p&gt;&lt;p&gt;Changes for 0.138 - 2023-09-28&lt;/p&gt;&lt;ul&gt;&lt;li&gt;settings_menu: set out of bonds indexes to 0.&lt;/li&gt;
+&lt;/ul&gt;</description>
+    </item>
+    <item>
+      <title>App-DBBrowser-2.342</title>
+      <link>https://metacpan.org/release/KUERBIS/App-DBBrowser-2.342</link>
+      <author>KUERBIS</author>
+      <guid isPermaLink="true">https://metacpan.org/release/KUERBIS/App-DBBrowser-2.342</guid>
+      <pubDate>Thu, 28 Sep 2023 07:40:06 GMT</pubDate>
+      <description>&lt;p&gt;Browse SQLite/MySQL/PostgreSQL databases and their tables interactively.&lt;/p&gt;&lt;p&gt;Changes for 2.342 - 2023-09-28&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Bugfix: don&#39;t remove outer parentheses in Subqueries.pm.&lt;/li&gt;
+&lt;li&gt;Bugfix: wrong format of auto generated aliases in Union.pm.&lt;/li&gt;
+&lt;li&gt;Bugfix in table alias: undefined variable.&lt;/li&gt;
+&lt;/ul&gt;</description>
+    </item>
+    <item>
+      <title>Dist-Zilla-Plugin-GenPericmdScript-0.425</title>
+      <link>https://metacpan.org/release/PERLANCAR/Dist-Zilla-Plugin-GenPericmdScript-0.425</link>
+      <author>PERLANCAR</author>
+      <guid isPermaLink="true">https://metacpan.org/release/PERLANCAR/Dist-Zilla-Plugin-GenPericmdScript-0.425</guid>
+      <pubDate>Thu, 28 Sep 2023 00:05:44 GMT</pubDate>
+      <description>&lt;p&gt;Generate Perinci::CmdLine script&lt;/p&gt;&lt;p&gt;Changes for 0.425 - 2023-07-11&lt;/p&gt;&lt;ul&gt;&lt;li&gt;No functional changes.&lt;/li&gt;
+&lt;li&gt;Remove usage of smartmatch to avoid warning under perl 5.38.&lt;/li&gt;
+&lt;/ul&gt;</description>
+    </item>
+    <item>
+      <title>Cucumber-Test-Release-Automation-v0.0.69</title>
+      <link>https://metacpan.org/release/CUKEBOT/Cucumber-Test-Release-Automation-v0.0.69</link>
+      <author>CUKEBOT</author>
+      <guid isPermaLink="true">https://metacpan.org/release/CUKEBOT/Cucumber-Test-Release-Automation-v0.0.69</guid>
+      <pubDate>Thu, 28 Sep 2023 00:00:29 GMT</pubDate>
+      <description>Dummy project for testing release automation</description>
+    </item>
+    <item>
+      <title>Cucumber-Test-Release-Automation-v0.0.68</title>
+      <link>https://metacpan.org/release/CUKEBOT/Cucumber-Test-Release-Automation-v0.0.68</link>
+      <author>CUKEBOT</author>
+      <guid isPermaLink="true">https://metacpan.org/release/CUKEBOT/Cucumber-Test-Release-Automation-v0.0.68</guid>
+      <pubDate>Wed, 27 Sep 2023 22:41:11 GMT</pubDate>
+      <description>Dummy project for testing release automation</description>
+    </item>
+    <item>
+      <title>Cucumber-Test-Release-Automation-v0.0.67</title>
+      <link>https://metacpan.org/release/CUKEBOT/Cucumber-Test-Release-Automation-v0.0.67</link>
+      <author>CUKEBOT</author>
+      <guid isPermaLink="true">https://metacpan.org/release/CUKEBOT/Cucumber-Test-Release-Automation-v0.0.67</guid>
+      <pubDate>Wed, 27 Sep 2023 22:41:00 GMT</pubDate>
+      <description>Dummy project for testing release automation</description>
+    </item>
+    <item>
+      <title>Cucumber-Test-Release-Automation-v0.0.66</title>
+      <link>https://metacpan.org/release/CUKEBOT/Cucumber-Test-Release-Automation-v0.0.66</link>
+      <author>CUKEBOT</author>
+      <guid isPermaLink="true">https://metacpan.org/release/CUKEBOT/Cucumber-Test-Release-Automation-v0.0.66</guid>
+      <pubDate>Wed, 27 Sep 2023 22:40:49 GMT</pubDate>
+      <description>Dummy project for testing release automation</description>
+    </item>
+    <item>
+      <title>Liveman-1.0</title>
+      <link>https://metacpan.org/release/DART/Liveman-1.0</link>
+      <author>DART</author>
+      <guid isPermaLink="true">https://metacpan.org/release/DART/Liveman-1.0</guid>
+      <pubDate>Wed, 27 Sep 2023 21:24:01 GMT</pubDate>
+      <description>&lt;p&gt;markdown compiller to test and pod.&lt;/p&gt;&lt;p&gt;Changes for 1.0 - 2023-09-27T21:23:35Z&lt;/p&gt;&lt;ul&gt;&lt;li&gt;change version in pod&lt;/li&gt;
+&lt;/ul&gt;</description>
+    </item>
+    <item>
+      <title>Liveman-0.9</title>
+      <link>https://metacpan.org/release/DART/Liveman-0.9</link>
+      <author>DART</author>
+      <guid isPermaLink="true">https://metacpan.org/release/DART/Liveman-0.9</guid>
+      <pubDate>Wed, 27 Sep 2023 21:03:40 GMT</pubDate>
+      <description>&lt;p&gt;markdown compiller to test and pod.&lt;/p&gt;&lt;p&gt;Changes for 0.9 - 2023-09-27T21:02:18Z&lt;/p&gt;&lt;ul&gt;&lt;li&gt;remove debug info&lt;/li&gt;
+&lt;/ul&gt;</description>
+    </item>
+    <item>
+      <title>Liveman-0.8</title>
+      <link>https://metacpan.org/release/DART/Liveman-0.8</link>
+      <author>DART</author>
+      <guid isPermaLink="true">https://metacpan.org/release/DART/Liveman-0.8</guid>
+      <pubDate>Wed, 27 Sep 2023 20:59:38 GMT</pubDate>
+      <description>&lt;p&gt;markdown compiller to test and pod.&lt;/p&gt;&lt;p&gt;Changes for 0.8 - 2023-09-27T20:58:40Z&lt;/p&gt;&lt;ul&gt;&lt;li&gt;change version on release&lt;/li&gt;
+&lt;/ul&gt;</description>
+    </item>
+    <item>
+      <title>Acme-MyFirstModule-WWILLIS-0.03</title>
+      <link>https://metacpan.org/release/WWILLIS/Acme-MyFirstModule-WWILLIS-0.03</link>
+      <author>WWILLIS</author>
+      <guid isPermaLink="true">https://metacpan.org/release/WWILLIS/Acme-MyFirstModule-WWILLIS-0.03</guid>
+      <pubDate>Wed, 27 Sep 2023 20:30:33 GMT</pubDate>
+      <description>&lt;p&gt;The great new Acme::MyFirstModule::WWILLIS!&lt;/p&gt;&lt;p&gt;Changes for 0.03&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Third version. The dates have been bumped. Going through the cpan/pause process every decade, so I don&#39;t forget how its done.&lt;/li&gt;
+&lt;/ul&gt;</description>
+    </item>
+    <item>
+      <title>Math-BigInt-1.999842</title>
+      <link>https://metacpan.org/release/PJACKLAM/Math-BigInt-1.999842</link>
+      <author>PJACKLAM</author>
+      <guid isPermaLink="true">https://metacpan.org/release/PJACKLAM/Math-BigInt-1.999842</guid>
+      <pubDate>Wed, 27 Sep 2023 20:08:47 GMT</pubDate>
+      <description>&lt;p&gt;Pure Perl module to test Math::BigInt with scalars&lt;/p&gt;&lt;p&gt;Changes for 1.999842 - 2023-09-27&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Fix a bug causing Math::BigInt and Math::BigFloat to be caught in an endless recursion. The bug was introduced when trying to fix https://github.com/pjacklam/p5-Math-BigInt/issues/8&lt;/li&gt;
+&lt;li&gt;Allow div_scale to be 0. It is not documented what div_scale &amp;lt;= 0 means, but there are modules that set div_scale to 0 (e.g., Astro::Units) and fail their tests if this is not supported.&lt;/li&gt;
+&lt;/ul&gt;</description>
+    </item>
+    <item>
+      <title>config-1.3</title>
+      <link>https://metacpan.org/release/DART/config-1.3</link>
+      <author>DART</author>
+      <guid isPermaLink="true">https://metacpan.org/release/DART/config-1.3</guid>
+      <pubDate>Wed, 27 Sep 2023 16:51:39 GMT</pubDate>
+      <description>&lt;p&gt;Perl module constant configurator&lt;/p&gt;&lt;p&gt;Changes for 1.3 - 2023-09-27T16:48:37Z&lt;/p&gt;&lt;ul&gt;&lt;li&gt;change license to perl_5&lt;/li&gt;
+&lt;/ul&gt;</description>
+    </item>
+    <item>
+      <title>config-1.2</title>
+      <link>https://metacpan.org/release/DART/config-1.2</link>
+      <author>DART</author>
+      <guid isPermaLink="true">https://metacpan.org/release/DART/config-1.2</guid>
+      <pubDate>Wed, 27 Sep 2023 16:47:39 GMT</pubDate>
+      <description>&lt;p&gt;Perl module constant configurator&lt;/p&gt;&lt;p&gt;Changes for 1.2 - 2023-09-27T16:44:15Z&lt;/p&gt;&lt;ul&gt;&lt;li&gt;use config for more version of perl!&lt;/li&gt;
+&lt;/ul&gt;</description>
+    </item>
+    <item>
+      <title>Software-Copyright-0.012</title>
+      <link>https://metacpan.org/release/DDUMONT/Software-Copyright-0.012</link>
+      <author>DDUMONT</author>
+      <guid isPermaLink="true">https://metacpan.org/release/DDUMONT/Software-Copyright-0.012</guid>
+      <pubDate>Wed, 27 Sep 2023 16:38:34 GMT</pubDate>
+      <description>&lt;p&gt;Copyright class&lt;/p&gt;&lt;p&gt;Changes for 0.012 - 2023-09-27&lt;/p&gt;&lt;ul&gt;&lt;li&gt;refine copyright cleanup&lt;/li&gt;
+&lt;/ul&gt;</description>
+    </item>
+    <item>
+      <title>config-1.1</title>
+      <link>https://metacpan.org/release/DART/config-1.1</link>
+      <author>DART</author>
+      <guid isPermaLink="true">https://metacpan.org/release/DART/config-1.1</guid>
+      <pubDate>Wed, 27 Sep 2023 16:32:04 GMT</pubDate>
+      <description>&lt;p&gt;Perl module constant configurator&lt;/p&gt;&lt;p&gt;Changes for 1.1 - 2023-09-27T16:28:23Z&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Set minimal version of perl&lt;/li&gt;
+&lt;/ul&gt;</description>
+    </item>
+    <item>
+      <title>Crypt-xxHash-0.07</title>
+      <link>https://metacpan.org/release/CDN/Crypt-xxHash-0.07</link>
+      <author>CDN</author>
+      <guid isPermaLink="true">https://metacpan.org/release/CDN/Crypt-xxHash-0.07</guid>
+      <pubDate>Wed, 27 Sep 2023 16:16:46 GMT</pubDate>
+      <description>&lt;p&gt;xxHash implementation for Perl&lt;/p&gt;&lt;p&gt;Changes for 0.07&lt;/p&gt;&lt;ul&gt;&lt;li&gt;do not use SSE instructions for ARM architecture&lt;/li&gt;
+&lt;/ul&gt;</description>
+    </item>
+    <item>
+      <title>Liveman-0.07</title>
+      <link>https://metacpan.org/release/DART/Liveman-0.07</link>
+      <author>DART</author>
+      <guid isPermaLink="true">https://metacpan.org/release/DART/Liveman-0.07</guid>
+      <pubDate>Wed, 27 Sep 2023 14:52:27 GMT</pubDate>
+      <description>&lt;p&gt;markdown compiller to test and pod.&lt;/p&gt;&lt;p&gt;Changes for 0.07 - 2023-09-27T14:49:32Z&lt;/p&gt;&lt;ul&gt;&lt;li&gt;set minimal version of perl!&lt;/li&gt;
+&lt;/ul&gt;</description>
+    </item>
+    <item>
+      <title>HTTP-Message-6.45</title>
+      <link>https://metacpan.org/release/OALDERS/HTTP-Message-6.45</link>
+      <author>OALDERS</author>
+      <guid isPermaLink="true">https://metacpan.org/release/OALDERS/HTTP-Message-6.45</guid>
+      <pubDate>Wed, 27 Sep 2023 14:31:38 GMT</pubDate>
+      <description>&lt;p&gt;HTTP style message (base class)&lt;/p&gt;&lt;p&gt;Changes for 6.45 - 2023-09-27T14:27:31Z&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Allow for file ownership conflicts with Docker and GitHub Actions (GH#193) (Olaf Alders)&lt;/li&gt;
+&lt;li&gt;Add the &#39;status_code&#39; function for getting all status codes as hash (GH#194) (Dai Okabayashi)&lt;/li&gt;
+&lt;/ul&gt;</description>
+    </item>
+    <item>
+      <title>App-Netdisco-2.067002</title>
+      <link>https://metacpan.org/release/OLIVER/App-Netdisco-2.067002</link>
+      <author>OLIVER</author>
+      <guid isPermaLink="true">https://metacpan.org/release/OLIVER/App-Netdisco-2.067002</guid>
+      <pubDate>Wed, 27 Sep 2023 13:27:43 GMT</pubDate>
+      <description>&lt;p&gt;An open source web-based network management tool.&lt;/p&gt;&lt;p&gt;Changes for 2.067002 - 2023-09-27&lt;/p&gt;&lt;ul&gt;&lt;li&gt;BUG FIXES&lt;/li&gt;
+&lt;/ul&gt;</description>
+    </item>
+    <item>
+      <title>App-Netdisco-2.067001</title>
+      <link>https://metacpan.org/release/OLIVER/App-Netdisco-2.067001</link>
+      <author>OLIVER</author>
+      <guid isPermaLink="true">https://metacpan.org/release/OLIVER/App-Netdisco-2.067001</guid>
+      <pubDate>Wed, 27 Sep 2023 13:20:00 GMT</pubDate>
+      <description>&lt;p&gt;An open source web-based network management tool.&lt;/p&gt;&lt;p&gt;Changes for 2.067001 - 2023-09-27&lt;/p&gt;&lt;ul&gt;&lt;li&gt;BUG FIXES&lt;/li&gt;
+&lt;/ul&gt;</description>
+    </item>
+    <item>
+      <title>Liveman-0.06</title>
+      <link>https://metacpan.org/release/DART/Liveman-0.06</link>
+      <author>DART</author>
+      <guid isPermaLink="true">https://metacpan.org/release/DART/Liveman-0.06</guid>
+      <pubDate>Wed, 27 Sep 2023 12:00:42 GMT</pubDate>
+      <description>&lt;p&gt;markdown compiller to test and pod.&lt;/p&gt;&lt;p&gt;Changes for 0.06 - 2023-09-27T11:57:06Z&lt;/p&gt;&lt;ul&gt;&lt;li&gt;first release&lt;/li&gt;
+&lt;/ul&gt;</description>
+    </item>
+    <item>
+      <title>Rope-0.03</title>
+      <link>https://metacpan.org/release/LNATION/Rope-0.03</link>
+      <author>LNATION</author>
+      <guid isPermaLink="true">https://metacpan.org/release/LNATION/Rope-0.03</guid>
+      <pubDate>Wed, 27 Sep 2023 08:07:04 GMT</pubDate>
+      <description>The great new Rope!</description>
+    </item>
+    <item>
+      <title>DBIx-Class-ResultDDL-2.04</title>
+      <link>https://metacpan.org/release/NERDVANA/DBIx-Class-ResultDDL-2.04</link>
+      <author>NERDVANA</author>
+      <guid isPermaLink="true">https://metacpan.org/release/NERDVANA/DBIx-Class-ResultDDL-2.04</guid>
+      <pubDate>Wed, 27 Sep 2023 07:05:15 GMT</pubDate>
+      <description>&lt;p&gt;Result class declaration syntactic-sugar that looks like DDL&lt;/p&gt;&lt;p&gt;Changes for 2.04 - 2023-09-27&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Enhancements to SchemaLoaderMixin:&lt;/li&gt;
+&lt;/ul&gt;</description>
+    </item>
+    <item>
+      <title>MailboxValidator-SingleValidation-2.00</title>
+      <link>https://metacpan.org/release/MBV/MailboxValidator-SingleValidation-2.00</link>
+      <author>MBV</author>
+      <guid isPermaLink="true">https://metacpan.org/release/MBV/MailboxValidator-SingleValidation-2.00</guid>
+      <pubDate>Wed, 27 Sep 2023 05:15:54 GMT</pubDate>
+      <description>&lt;p&gt;Email verification module for Perl using MailboxValidator API. It validates if the email is valid, from a free provider, contains high-risk keywords, whether it&#39;s a catch-all address and so much more.&lt;/p&gt;&lt;p&gt;Changes for 2.00&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Updated to call MailboxValidator v2 APIs&lt;/li&gt;
+&lt;/ul&gt;</description>
+    </item>
+    <item>
+      <title>String-IRC-0.05</title>
+      <link>https://metacpan.org/release/HIROSE/String-IRC-0.05</link>
+      <author>HIROSE</author>
+      <guid isPermaLink="true">https://metacpan.org/release/HIROSE/String-IRC-0.05</guid>
+      <pubDate>Wed, 27 Sep 2023 04:04:08 GMT</pubDate>
+      <description>&lt;p&gt;add color codes for mIRC compatible client&lt;/p&gt;&lt;p&gt;Changes for 0.05 - 2023-09-27T04:03:19+00:00&lt;/p&gt;&lt;ul&gt;&lt;li&gt;BUG FIXES&lt;/li&gt;
+&lt;/ul&gt;</description>
+    </item>
+    <item>
+      <title>Set-Relation-0.13.4</title>
+      <link>https://metacpan.org/release/DUNCAND/Set-Relation-0.13.4</link>
+      <author>DUNCAND</author>
+      <guid isPermaLink="true">https://metacpan.org/release/DUNCAND/Set-Relation-0.13.4</guid>
+      <pubDate>Wed, 27 Sep 2023 01:14:27 GMT</pubDate>
+      <description>A relation data type</description>
+    </item>
+    <item>
+      <title>App-GenPericmdCompleterScript-0.126</title>
+      <link>https://metacpan.org/release/PERLANCAR/App-GenPericmdCompleterScript-0.126</link>
+      <author>PERLANCAR</author>
+      <guid isPermaLink="true">https://metacpan.org/release/PERLANCAR/App-GenPericmdCompleterScript-0.126</guid>
+      <pubDate>Wed, 27 Sep 2023 00:05:11 GMT</pubDate>
+      <description>&lt;p&gt;Generate Perinci::CmdLine completer script&lt;/p&gt;&lt;p&gt;Changes for 0.126 - 2023-07-11&lt;/p&gt;&lt;ul&gt;&lt;li&gt;No functional changes.&lt;/li&gt;
+&lt;li&gt;Remove usage of smartmatch to avoid warning under perl 5.38.&lt;/li&gt;
+&lt;/ul&gt;</description>
+    </item>
+    <item>
+      <title>EAI-Wrap-0.9</title>
+      <link>https://metacpan.org/release/RKAPL/EAI-Wrap-0.9</link>
+      <author>RKAPL</author>
+      <guid isPermaLink="true">https://metacpan.org/release/RKAPL/EAI-Wrap-0.9</guid>
+      <pubDate>Tue, 26 Sep 2023 21:54:19 GMT</pubDate>
+      <description>framework for easy creation of Enterprise Application Integration tasks</description>
+    </item>
+    <item>
+      <title>Config-JSON-Enhanced-0.07</title>
+      <link>https://metacpan.org/release/BLIAKO/Config-JSON-Enhanced-0.07</link>
+      <author>BLIAKO</author>
+      <guid isPermaLink="true">https://metacpan.org/release/BLIAKO/Config-JSON-Enhanced-0.07</guid>
+      <pubDate>Tue, 26 Sep 2023 21:50:17 GMT</pubDate>
+      <description>JSON-based config with C/Shell-style comments, verbatim sections and variable substitutions</description>
+    </item>
+    <item>
+      <title>Catalyst-Plugin-CheckFileUploadTypes-0.02</title>
+      <link>https://metacpan.org/release/BIGPRESH/Catalyst-Plugin-CheckFileUploadTypes-0.02</link>
+      <author>BIGPRESH</author>
+      <guid isPermaLink="true">https://metacpan.org/release/BIGPRESH/Catalyst-Plugin-CheckFileUploadTypes-0.02</guid>
+      <pubDate>Tue, 26 Sep 2023 20:44:49 GMT</pubDate>
+      <description>&lt;p&gt;Check uploaded files are expected and of the correct type&lt;/p&gt;&lt;p&gt;Changes for 0.02 - 2023-09-26&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Rewind filehandles after determining type&lt;/li&gt;
+&lt;li&gt;Intelligent handling for Catalyst::Action::REST actions&lt;/li&gt;
+&lt;li&gt;Better handling for multiple types&lt;/li&gt;
+&lt;/ul&gt;</description>
+    </item>
+    <item>
+      <title>Data-Record-Serialize-1.05</title>
+      <link>https://metacpan.org/release/DJERIUS/Data-Record-Serialize-1.05</link>
+      <author>DJERIUS</author>
+      <guid isPermaLink="true">https://metacpan.org/release/DJERIUS/Data-Record-Serialize-1.05</guid>
+      <pubDate>Tue, 26 Sep 2023 20:37:46 GMT</pubDate>
+      <description>&lt;p&gt;Flexible serialization of a record&lt;/p&gt;&lt;p&gt;Changes for 1.05 - 2023-09-26T16:36:38-04:00&lt;/p&gt;&lt;ul&gt;&lt;li&gt;PACKAGING&lt;/li&gt;
+&lt;/ul&gt;</description>
+    </item>
+    <item>
+      <title>RT-Extension-PreviewInSearch-0.05</title>
+      <link>https://metacpan.org/release/BPS/RT-Extension-PreviewInSearch-0.05</link>
+      <author>BPS</author>
+      <guid isPermaLink="true">https://metacpan.org/release/BPS/RT-Extension-PreviewInSearch-0.05</guid>
+      <pubDate>Tue, 26 Sep 2023 17:46:55 GMT</pubDate>
+      <description>&lt;p&gt;preview tickets right from search results page&lt;/p&gt;&lt;p&gt;Changes for 0.05 - 2023-09-26&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Update for RT 5.0&lt;/li&gt;
+&lt;/ul&gt;</description>
+    </item>
+    <item>
+      <title>String-Tagged-0.21</title>
+      <link>https://metacpan.org/release/PEVANS/String-Tagged-0.21</link>
+      <author>PEVANS</author>
+      <guid isPermaLink="true">https://metacpan.org/release/PEVANS/String-Tagged-0.21</guid>
+      <pubDate>Tue, 26 Sep 2023 17:27:49 GMT</pubDate>
+      <description>&lt;p&gt;string buffers with value tags on extents&lt;/p&gt;&lt;p&gt;Changes for 0.21 - 2023-09-26&lt;/p&gt;&lt;ul&gt;&lt;li&gt;CHANGES&lt;/li&gt;
+&lt;/ul&gt;</description>
+    </item>
+    <item>
+      <title>RT-Extension-RepeatTicket-2.02</title>
+      <link>https://metacpan.org/release/BPS/RT-Extension-RepeatTicket-2.02</link>
+      <author>BPS</author>
+      <guid isPermaLink="true">https://metacpan.org/release/BPS/RT-Extension-RepeatTicket-2.02</guid>
+      <pubDate>Tue, 26 Sep 2023 15:09:33 GMT</pubDate>
+      <description>&lt;p&gt;Repeat tickets based on schedule&lt;/p&gt;&lt;p&gt;Changes for 2.02 - 2023-09-26&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Fix display issue with selectpicker controls&lt;/li&gt;
+&lt;/ul&gt;</description>
+    </item>
+    <item>
+      <title>Net-API-CPAN-v0.1.1</title>
+      <link>https://metacpan.org/release/JDEGUEST/Net-API-CPAN-v0.1.1</link>
+      <author>JDEGUEST</author>
+      <guid isPermaLink="true">https://metacpan.org/release/JDEGUEST/Net-API-CPAN-v0.1.1</guid>
+      <pubDate>Tue, 26 Sep 2023 15:00:53 GMT</pubDate>
+      <description>&lt;p&gt;Meta CPAN API&lt;/p&gt;&lt;p&gt;Changes for v0.1.1 - 2023-09-26T16:24:10Z&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Improved documentation and added missing documentation in cpanapi&lt;/li&gt;
+&lt;li&gt;Implemented paging for cpanapi --favorite --recent&lt;/li&gt;
+&lt;li&gt;Corrected function favorite() in cpanapi&lt;/li&gt;
+&lt;li&gt;Improved method next() in Net::API::CPAN::List when no query has been set on the URI yet&lt;/li&gt;
+&lt;li&gt;Correcting a bug in function changes in cpanapi&lt;/li&gt;
+&lt;li&gt;Updated the method package() in Net::API::CPAN to account for the property &#39;version&#39; in JSON sometimes having a value of &#39;undef&#39;&lt;/li&gt;
+&lt;li&gt;Corrected build/fields2api_def.pl to change the method bugs in Net::API::CPAN::Distribution&lt;/li&gt;
+&lt;li&gt;Updated the function _show_file() in cpanapi&lt;/li&gt;
+&lt;li&gt;Updated method release() in Net::API::CPAN for the endpoint /release/all_by_author with the issue of wrong arguments order now resolved&lt;/li&gt;
+&lt;/ul&gt;</description>
+    </item>
+    <item>
+      <title>Process-SubProcess-2.1.8</title>
+      <link>https://metacpan.org/release/BODOLFO/Process-SubProcess-2.1.8</link>
+      <author>BODOLFO</author>
+      <guid isPermaLink="true">https://metacpan.org/release/BODOLFO/Process-SubProcess-2.1.8</guid>
+      <pubDate>Tue, 26 Sep 2023 11:18:56 GMT</pubDate>
+      <description>Library to manage Sub Processes as objects</description>
+    </item>
+    <item>
+      <title>JavonetPerlSdk-v2.1.9</title>
+      <link>https://metacpan.org/release/JAVONET/JavonetPerlSdk-v2.1.9</link>
+      <author>JAVONET</author>
+      <guid isPermaLink="true">https://metacpan.org/release/JAVONET/JavonetPerlSdk-v2.1.9</guid>
+      <pubDate>Tue, 26 Sep 2023 11:17:29 GMT</pubDate>
+      <description>Javonet SDK for Perl</description>
+    </item>
+    <item>
+      <title>Redis-Cluster-Fast-0.089</title>
+      <link>https://metacpan.org/release/PLAIN/Redis-Cluster-Fast-0.089</link>
+      <author>PLAIN</author>
+      <guid isPermaLink="true">https://metacpan.org/release/PLAIN/Redis-Cluster-Fast-0.089</guid>
+      <pubDate>Tue, 26 Sep 2023 10:50:15 GMT</pubDate>
+      <description>&lt;p&gt;A fast perl binding for Redis Cluster&lt;/p&gt;&lt;p&gt;Changes for 0.089 - 2023-09-26T10:49:21Z&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Fix tests.&lt;/li&gt;
+&lt;li&gt;Use system libevent.&lt;/li&gt;
+&lt;li&gt;Fix startup_nodes validation.&lt;/li&gt;
+&lt;li&gt;Some chores.&lt;/li&gt;
+&lt;/ul&gt;</description>
+    </item>
+    <item>
+      <title>App-Oozie-0.007</title>
+      <link>https://metacpan.org/release/BURAK/App-Oozie-0.007</link>
+      <author>BURAK</author>
+      <guid isPermaLink="true">https://metacpan.org/release/BURAK/App-Oozie-0.007</guid>
+      <pubDate>Tue, 26 Sep 2023 10:33:41 GMT</pubDate>
+      <description>&lt;p&gt;Tooling/wrappers for Oozie job deployment and scheduling&lt;/p&gt;&lt;p&gt;Changes for 0.007 - 2023-09-26T12:32:17+02:00&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Fork ttree as a module (not enabled yet).&lt;/li&gt;
+&lt;/ul&gt;</description>
+    </item>
+    <item>
+      <title>FASTX-Reader-1.12.0</title>
+      <link>https://metacpan.org/release/PROCH/FASTX-Reader-1.12.0</link>
+      <author>PROCH</author>
+      <guid isPermaLink="true">https://metacpan.org/release/PROCH/FASTX-Reader-1.12.0</guid>
+      <pubDate>Tue, 26 Sep 2023 10:25:49 GMT</pubDate>
+      <description>&lt;p&gt;A simple module to parse FASTA and FASTQ files, supporting compressed files and paired-ends.&lt;/p&gt;&lt;p&gt;Changes for 1.12.0 - 2023-09-24&lt;/p&gt;&lt;ul&gt;&lt;li&gt;5.16 minimum Perl version required&lt;/li&gt;
+&lt;li&gt;minor updates to POD, tests&lt;/li&gt;
+&lt;/ul&gt;</description>
+    </item>
+    <item>
+      <title>Business-ISBN-Data-20230926.001</title>
+      <link>https://metacpan.org/release/BDFOY/Business-ISBN-Data-20230926.001</link>
+      <author>BDFOY</author>
+      <guid isPermaLink="true">https://metacpan.org/release/BDFOY/Business-ISBN-Data-20230926.001</guid>
+      <pubDate>Tue, 26 Sep 2023 09:01:31 GMT</pubDate>
+      <description>&lt;p&gt;data pack for Business::ISBN&lt;/p&gt;&lt;p&gt;Changes for 20230926.001 - 2023-09-26T09:01:09Z&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Data update for 2023-09-26&lt;/li&gt;
+&lt;/ul&gt;</description>
+    </item>
+    <item>
+      <title>Config-JSON-Enhanced-0.06</title>
+      <link>https://metacpan.org/release/BLIAKO/Config-JSON-Enhanced-0.06</link>
+      <author>BLIAKO</author>
+      <guid isPermaLink="true">https://metacpan.org/release/BLIAKO/Config-JSON-Enhanced-0.06</guid>
+      <pubDate>Tue, 26 Sep 2023 08:37:27 GMT</pubDate>
+      <description>&lt;p&gt;JSON-based config with C/Shell-style comments, verbatim sections and variable substitutions&lt;/p&gt;&lt;p&gt;Changes for 0.06&lt;/p&gt;&lt;ul&gt;&lt;li&gt;-Added more test files to check propgram behaviour when dealing with comments. -Some pod enhancements.&lt;/li&gt;
+&lt;/ul&gt;</description>
+    </item>
+    <item>
+      <title>Config-JSON-Enhanced-0.05</title>
+      <link>https://metacpan.org/release/BLIAKO/Config-JSON-Enhanced-0.05</link>
+      <author>BLIAKO</author>
+      <guid isPermaLink="true">https://metacpan.org/release/BLIAKO/Config-JSON-Enhanced-0.05</guid>
+      <pubDate>Tue, 26 Sep 2023 08:34:41 GMT</pubDate>
+      <description>JSON-based config with C/Shell-style comments, verbatim sections and variable substitutions</description>
+    </item>
+    <item>
+      <title>Pheno-Ranker-0.00_2</title>
+      <link>https://metacpan.org/release/MRUEDA/Pheno-Ranker-0.00_2</link>
+      <author>MRUEDA</author>
+      <guid isPermaLink="true">https://metacpan.org/release/MRUEDA/Pheno-Ranker-0.00_2</guid>
+      <pubDate>Tue, 26 Sep 2023 08:13:00 GMT</pubDate>
+      <description>A module that performs semantic similarity in PXF/BFF data structures and beyond (JSON|YAML)</description>
+    </item>
+    <item>
+      <title>Set-Relation-0.13.3</title>
+      <link>https://metacpan.org/release/DUNCAND/Set-Relation-0.13.3</link>
+      <author>DUNCAND</author>
+      <guid isPermaLink="true">https://metacpan.org/release/DUNCAND/Set-Relation-0.13.3</guid>
+      <pubDate>Tue, 26 Sep 2023 02:42:46 GMT</pubDate>
+      <description>A relation data type</description>
+    </item>
+  </channel>
+</rss>
diff --git a/htdocs/cgi-bin/rss_output/rss_Life_Hacker.rdf b/htdocs/cgi-bin/rss_output/rss_Life_Hacker.rdf
new file mode 100644 (file)
index 0000000..1665169
--- /dev/null
@@ -0,0 +1,1051 @@
+<?xml version="1.0" encoding="utf-8"?>
+<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:media="http://search.yahoo.com/mrss/" xmlns:atom="http://www.w3.org/2005/Atom">
+    <channel>
+        <title>Lifehacker</title>
+        <link>https://lifehacker.com</link>
+        <atom:link href="https://lifehacker.com" rel="self" type="application/rss+xml"/>
+        <description><![CDATA[Do everything better]]></description>
+        <language>en</language>
+        <item>
+            <title><![CDATA[Today’s NYT Connections Hints (and Answer) for Monday, October 2, 2023]]></title>
+            <link>https://lifehacker.com/nyt-connections-answer-today-october-2-2023-1850886791</link>
+            <description><![CDATA[<img class="type:primaryImage" src="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/8629f05b422809f7dc8118e10209b682.png"/><p>If you’re looking for the <a class="sc-1out364-0 dPMosf sc-145m8ut-0 lcFFec js_link" href="https://www.nytimes.com/games/connections" target="_blank" rel="noopener noreferrer">Connections</a> answer for Monday, October 2, 2023, read on—I’ll share some clues, tips, and strategies, and finally the solutions to all four categories. <strong>Beware, there are spoilers below for October 2, NYT Connections #113! </strong>Read on if you want some hints (and then the answer) to today’s…</p><p><a href="https://lifehacker.com/nyt-connections-answer-today-october-2-2023-1850886791">Read more...</a></p>]]></description>
+            <category>iphone</category>
+            <category>close</category>
+            <category>puzzles</category>
+            <category>crossword</category>
+            <category>human interest</category>
+            <pubDate>Mon, 02 Oct 2023 01:00:00 GMT</pubDate>
+            <guid isPermaLink="false">1850886791</guid>
+            <dc:creator><![CDATA[Beth Skwarecki]]></dc:creator>
+            <media:thumbnail url="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/8629f05b422809f7dc8118e10209b682.png"/>
+        </item>
+        <item>
+            <title><![CDATA[Approach a Potential Career Change As If You Were Designing a New Product]]></title>
+            <link>https://lifehacker.com/approach-a-potential-career-change-as-if-you-were-desig-1850888017</link>
+            <description><![CDATA[<img class="type:primaryImage" src="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/f869f21ba4b6f088fd3d2f8cf4d38a25.jpg"/><p>Feeling unhappy and unfulfilled at work is one thing: Knowing what to do instead is something else completely. At this point, most people probably realize that there’s <a class="sc-1out364-0 dPMosf sc-145m8ut-0 lcFFec js_link" href="https://lifehacker.com/your-dream-job-is-a-farce-and-how-to-be-happy-at-work-1847072368" target="_blank" rel="noopener noreferrer">no such thing as a “dream job,”</a> but that doesn’t necessarily mean that the only other option is sticking with a job you hate. The hard part (well, one…</p><p><a href="https://lifehacker.com/approach-a-potential-career-change-as-if-you-were-desig-1850888017">Read more...</a></p>]]></description>
+            <category>innovation management</category>
+            <category>problem solving</category>
+            <category>neuropsychological assessment</category>
+            <category>design</category>
+            <category>mosaic careers</category>
+            <category>idea</category>
+            <category>thought</category>
+            <category>labor</category>
+            <category>design thinking</category>
+            <category>ingrid goldbloom bloch</category>
+            <pubDate>Sun, 01 Oct 2023 17:00:00 GMT</pubDate>
+            <guid isPermaLink="false">1850888017</guid>
+            <dc:creator><![CDATA[Elizabeth Yuko]]></dc:creator>
+            <media:thumbnail url="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/f869f21ba4b6f088fd3d2f8cf4d38a25.jpg"/>
+        </item>
+        <item>
+            <title><![CDATA[Use This Renovation Calculator to Figure Out Which Home Upgrades Add the Most Value]]></title>
+            <link>https://lifehacker.com/use-this-renovation-calculator-to-figure-out-which-home-1850888023</link>
+            <description><![CDATA[<img class="type:primaryImage" src="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/0e1db16d79ee4e0ccecb4edec0e2ca88.jpg"/><p>Unless you’re lucky enough to be working with an unlimited budget, it can be hard to determine which home renovations to prioritize. </p><p><a href="https://lifehacker.com/use-this-renovation-calculator-to-figure-out-which-home-1850888023">Read more...</a></p>]]></description>
+            <category>renovation</category>
+            <category>calculator</category>
+            <category>office equipment</category>
+            <category>airbnb</category>
+            <category>mathematical software</category>
+            <category>myhome</category>
+            <category>mathematical notation</category>
+            <category>software calculator</category>
+            <pubDate>Sun, 01 Oct 2023 15:00:00 GMT</pubDate>
+            <guid isPermaLink="false">1850888023</guid>
+            <dc:creator><![CDATA[Elizabeth Yuko]]></dc:creator>
+            <media:thumbnail url="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/0e1db16d79ee4e0ccecb4edec0e2ca88.jpg"/>
+        </item>
+        <item>
+            <title><![CDATA[You Should Clean Your Sink's Overflow Hole]]></title>
+            <link>https://lifehacker.com/you-should-clean-your-sinks-overflow-hole-1850888031</link>
+            <description><![CDATA[<img class="type:primaryImage" src="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/a2eeffc5c652a445faa9f3221bb6022a.jpg"/><p>As its name suggests, a sink’s overflow hole gives water a place to go in the event that the drain is closed or blocked, and the faucet is left on. While the sink’s drain is located at the bottom of the basin, the overflow hole can be found along one of the sides, towards the top.</p><p><a href="https://lifehacker.com/you-should-clean-your-sinks-overflow-hole-1850888031">Read more...</a></p>]]></description>
+            <category>overflow</category>
+            <category>sink</category>
+            <category>kitchen</category>
+            <category>gunk</category>
+            <category>bathrooms</category>
+            <category>drainage</category>
+            <category>water damage</category>
+            <category>drain</category>
+            <category>plumbing</category>
+            <pubDate>Sun, 01 Oct 2023 13:00:00 GMT</pubDate>
+            <guid isPermaLink="false">1850888031</guid>
+            <dc:creator><![CDATA[Elizabeth Yuko]]></dc:creator>
+            <media:thumbnail url="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/a2eeffc5c652a445faa9f3221bb6022a.jpg"/>
+        </item>
+        <item>
+            <title><![CDATA[Today’s NYT Connections Hints (and Answer) for Sunday, October 1, 2023]]></title>
+            <link>https://lifehacker.com/nyt-connections-answer-today-october-1-2023-1850886727</link>
+            <description><![CDATA[<img class="type:primaryImage" src="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/085217f9363d669e478ddf29e03018c6.png"/><p>If you’re looking for the <a class="sc-1out364-0 dPMosf sc-145m8ut-0 lcFFec js_link" href="https://www.nytimes.com/games/connections" target="_blank" rel="noopener noreferrer">Connections</a> answer for Sunday, October 1, 2023, read on—I’ll share some clues, tips, and strategies, and finally the solutions to all four categories. <strong>Beware, there are spoilers below for October 1, NYT Connections #112! </strong>Read on if you want some hints (and then the answer) to today’s…</p><p><a href="https://lifehacker.com/nyt-connections-answer-today-october-1-2023-1850886727">Read more...</a></p>]]></description>
+            <category>liu</category>
+            <category>t puzzle</category>
+            <category>close</category>
+            <category>pope</category>
+            <category>puzzles</category>
+            <category>crossword</category>
+            <category>human interest</category>
+            <pubDate>Sun, 01 Oct 2023 01:00:00 GMT</pubDate>
+            <guid isPermaLink="false">1850886727</guid>
+            <dc:creator><![CDATA[Beth Skwarecki]]></dc:creator>
+            <media:thumbnail url="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/085217f9363d669e478ddf29e03018c6.png"/>
+        </item>
+        <item>
+            <title><![CDATA[The Most Clever Ways to Reuse an Old Pillow]]></title>
+            <link>https://lifehacker.com/the-most-clever-ways-to-reuse-an-old-pillow-1850887855</link>
+            <description><![CDATA[<img class="type:primaryImage" src="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/ce2ed5aa74d87515c19943f1d8523a8b.jpg"/><p>For the most part, pillows don’t last forever. Even if you <a class="sc-1out364-0 dPMosf sc-145m8ut-0 lcFFec js_link" href="https://lifehacker.com/clean-and-freshen-your-pillows-in-three-simple-steps-1787336053" target="_blank" rel="noopener noreferrer">wash</a> them <a class="sc-1out364-0 dPMosf sc-145m8ut-0 lcFFec js_link" href="https://lifehacker.com/how-often-should-you-wash-your-pillows-cushions-and-c-1849447049" target="_blank" rel="noopener noreferrer">regularly</a>, they can still flatten or lose their shape over time. On the other hand, you may have perfectly good pillows that you no longer need. </p><p><a href="https://lifehacker.com/the-most-clever-ways-to-reuse-an-old-pillow-1850887855">Read more...</a></p>]]></description>
+            <category>draftstuffing clothes</category>
+            <category>throw pillow</category>
+            <category>bedding</category>
+            <category>stuffing</category>
+            <category>stuffed toy</category>
+            <category>toy</category>
+            <category>whitewater</category>
+            <category>human interest</category>
+            <category>pillows</category>
+            <category>furnishings</category>
+            <pubDate>Sat, 30 Sep 2023 17:00:00 GMT</pubDate>
+            <guid isPermaLink="false">1850887855</guid>
+            <dc:creator><![CDATA[Elizabeth Yuko]]></dc:creator>
+            <media:thumbnail url="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/ce2ed5aa74d87515c19943f1d8523a8b.jpg"/>
+        </item>
+        <item>
+            <title><![CDATA[Add These 12 Killer Supersets to Your Next Workout]]></title>
+            <link>https://lifehacker.com/12-killer-supersets-to-add-to-your-next-workout-1849986590</link>
+            <description><![CDATA[<img class="type:primaryImage" src="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/ed970a5330bfd0913bfbcc42091c58f7.jpg"/><p>Who doesn’t love a superset? Pairing two exercises saves time in your main workout, provided the routine allows. And if you’d like to do a quick bit of extra work at the end of the day, a superset is an efficient way to fit it in. So let’s look at a few perfect pairings you can add to your next workout. </p><p><a href="https://lifehacker.com/12-killer-supersets-to-add-to-your-next-workout-1849986590">Read more...</a></p>]]></description>
+            <category>squat</category>
+            <category>bodyweight exercises</category>
+            <category>squatting position</category>
+            <category>strength training</category>
+            <category>smith</category>
+            <category>physical exercise</category>
+            <category>bench press</category>
+            <category>powerlifting</category>
+            <category>chinups</category>
+            <category>kettlebell</category>
+            <category>wrist curl</category>
+            <category>barbell</category>
+            <category>bicep curl</category>
+            <category>arnold</category>
+            <category>calisthenics</category>
+            <pubDate>Sat, 30 Sep 2023 15:15:00 GMT</pubDate>
+            <guid isPermaLink="false">1849986590</guid>
+            <dc:creator><![CDATA[Beth Skwarecki]]></dc:creator>
+            <media:thumbnail url="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/ed970a5330bfd0913bfbcc42091c58f7.jpg"/>
+        </item>
+        <item>
+            <title><![CDATA[How to Deep Clean Your Kitchen Cabinets]]></title>
+            <link>https://lifehacker.com/how-to-deep-clean-your-kitchen-cabinets-1850887869</link>
+            <description><![CDATA[<img class="type:primaryImage" src="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/3e2d4d4ca033893ba351e63b8063b5fe.jpg"/><p>Even if you keep your kitchen relatively clean—wiping down countertops and tables, vacuuming the floor, and keeping the sink area as tidy as possible—grease and grime from regular cooking is going to build up over time. This is especially the case when it comes to surfaces we don’t  wipe down on a regular basis, like…</p><p><a href="https://lifehacker.com/how-to-deep-clean-your-kitchen-cabinets-1850887869">Read more...</a></p>]]></description>
+            <category>kitchen</category>
+            <category>dishwashing</category>
+            <category>cabinetry</category>
+            <category>hospitality recreation</category>
+            <category>toothbrush</category>
+            <category>kitchen cabinet</category>
+            <category>mat</category>
+            <category>furniture</category>
+            <pubDate>Sat, 30 Sep 2023 15:00:00 GMT</pubDate>
+            <guid isPermaLink="false">1850887869</guid>
+            <dc:creator><![CDATA[Elizabeth Yuko]]></dc:creator>
+            <media:thumbnail url="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/3e2d4d4ca033893ba351e63b8063b5fe.jpg"/>
+        </item>
+        <item>
+            <title><![CDATA[There's a New Global Entry App for US Customs]]></title>
+            <link>https://lifehacker.com/theres-a-new-global-entry-app-for-us-customs-1850887880</link>
+            <description><![CDATA[<img class="type:primaryImage" src="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/2e14acc683d03a891c5d5230f6a8295a.jpg"/><p>International travel is about to get a little easier for the more than 12 million members of U.S. Customs and Border Protection’s (CBP) Global Entry program. Earlier this month, <a class="sc-1out364-0 dPMosf sc-145m8ut-0 lcFFec js_link" href="https://www.cbp.gov/newsroom/national-media-release/cbp-announces-new-global-entry-mobile-app" target="_blank" rel="noopener noreferrer">GBP announced</a> the launch of a new mobile app which would allow Global Entry members to complete their arrival processing on their phone…</p><p><a href="https://lifehacker.com/theres-a-new-global-entry-app-for-us-customs-1850887880">Read more...</a></p>]]></description>
+            <category>global entry</category>
+            <category>customs</category>
+            <category>mobile passport</category>
+            <category>app store</category>
+            <category>borders of the united states</category>
+            <category>customs services</category>
+            <category>border control</category>
+            <category>cbp office of field operations</category>
+            <category>troy a miller</category>
+            <category>us customs and border protection</category>
+            <category>united states department of homeland security</category>
+            <category>airport</category>
+            <category>international law</category>
+            <category>troy</category>
+            <category>technology internet</category>
+            <pubDate>Sat, 30 Sep 2023 13:00:00 GMT</pubDate>
+            <guid isPermaLink="false">1850887880</guid>
+            <dc:creator><![CDATA[Elizabeth Yuko]]></dc:creator>
+            <media:thumbnail url="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/2e14acc683d03a891c5d5230f6a8295a.jpg"/>
+        </item>
+        <item>
+            <title><![CDATA[Today’s NYT Connections Hints (and Answer) for Saturday, September 30, 2023]]></title>
+            <link>https://lifehacker.com/nyt-connections-answer-today-september-30-2023-1850886122</link>
+            <description><![CDATA[<img class="type:primaryImage" src="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/973a8560d5adca175abe854747e3ee79.png"/><p>If you’re looking for the <a class="sc-1out364-0 dPMosf sc-145m8ut-0 lcFFec js_link" href="https://www.nytimes.com/games/connections" target="_blank" rel="noopener noreferrer">Connections</a> answer for Saturday, September 30, 2023, read on—I’ll share some clues, tips, and strategies, and finally the solutions to all four categories. <strong>Beware, there are spoilers below for September 30, NYT Connections #111! </strong>Read on if you want some hints (and then the answer) to today’s…</p><p><a href="https://lifehacker.com/nyt-connections-answer-today-september-30-2023-1850886122">Read more...</a></p>]]></description>
+            <category>heart</category>
+            <category>close</category>
+            <category>puzzles</category>
+            <category>crossword</category>
+            <pubDate>Sat, 30 Sep 2023 01:00:00 GMT</pubDate>
+            <guid isPermaLink="false">1850886122</guid>
+            <dc:creator><![CDATA[Beth Skwarecki]]></dc:creator>
+            <media:thumbnail url="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/973a8560d5adca175abe854747e3ee79.png"/>
+        </item>
+        <item>
+            <title><![CDATA[Spotify Can Now Transcribe Podcasts While You Listen]]></title>
+            <link>https://lifehacker.com/spotify-can-now-transcribe-podcasts-while-you-listen-1850887011</link>
+            <description><![CDATA[<img class="type:primaryImage" src="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/5574f6dadba0ff8aa0e7d959d74843a7.png"/><p>If you want to listen to a podcast on your commute, but forgot your headphones, you’re out of luck. Or, at least, you used to be: <a class="sc-1out364-0 dPMosf sc-145m8ut-0 lcFFec js_link" href="https://newsroom.spotify.com/2023-09-28/international-podcast-day-transcripts-chapters-show-pages-global/" target="_blank" rel="noopener noreferrer">Spotify is rolling out a new feature</a> that auto-generates and syncs podcast transcriptions with “millions” of episodes, so you can read along as you listen, or stay tuned in without the…</p><p><a href="https://lifehacker.com/spotify-can-now-transcribe-podcasts-while-you-listen-1850887011">Read more...</a></p>]]></description>
+            <category>spotify</category>
+            <category>spotify</category>
+            <category>symbian software</category>
+            <category>entertainment culture</category>
+            <category>podcast</category>
+            <category>technology internet</category>
+            <category>xbox one software</category>
+            <pubDate>Fri, 29 Sep 2023 23:00:00 GMT</pubDate>
+            <guid isPermaLink="false">1850887011</guid>
+            <dc:creator><![CDATA[Emily Long]]></dc:creator>
+            <media:thumbnail url="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/5574f6dadba0ff8aa0e7d959d74843a7.png"/>
+        </item>
+        <item>
+            <title><![CDATA[This 'All-in-one' JBL Soundbar Is $81 Right Now]]></title>
+            <link>https://lifehacker.com/this-all-in-one-jbl-soundbar-is-81-right-now-1850888300</link>
+            <description><![CDATA[<img class="type:primaryImage" src="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/ac82703fb41e771ba250f67d49566eee.jpg"/><p>You’re not alone if you’ve felt dialogue in movies and shows has <a class="sc-1out364-0 dPMosf sc-145m8ut-0 lcFFec js_link" href="https://www.slashfilm.com/673162/heres-why-movie-dialogue-has-gotten-more-difficult-to-understand-and-three-ways-to-fix-it/" target="_blank" rel="noopener noreferrer">gotten worse over the years</a>. One easy solution (besides turning on the subtitles) is upgrading your sound system. The <a class="sc-1out364-0 dPMosf sc-145m8ut-0 lcFFec js_link" href="https://zdcs.link/JYL1p" target="_blank" rel="noopener noreferrer">JBL Bar 2.0 All-in-one Soundbar</a> is currently <strong>$81.81</strong> (originally $199.95) once an automatic (temporary) discount is applied at checkout. S…</p><p><a href="https://lifehacker.com/this-all-in-one-jbl-soundbar-is-81-right-now-1850888300">Read more...</a></p>]]></description>
+            <category>jbl</category>
+            <category>soundbar</category>
+            <category>consumer electronics</category>
+            <category>audio engineering</category>
+            <category>in car entertainment</category>
+            <category>technology internet</category>
+            <category>subwoofer</category>
+            <category>loudspeakers</category>
+            <pubDate>Fri, 29 Sep 2023 22:30:00 GMT</pubDate>
+            <guid isPermaLink="false">1850888300</guid>
+            <dc:creator><![CDATA[Daniel Oropeza]]></dc:creator>
+            <media:thumbnail url="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/ac82703fb41e771ba250f67d49566eee.jpg"/>
+        </item>
+        <item>
+            <title><![CDATA[How to Choose Between the Meta Quest 2, Apple Vision Pro, and Vive Pro 2]]></title>
+            <link>https://lifehacker.com/meta-quest-3-vc-apple-vision-pro-vs-vive-pro-2-1850887857</link>
+            <description><![CDATA[<img class="type:primaryImage" src="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/ab8ad70b474628c83d92062e02a4d0ff.png"/><p>Consumers hoping to take their first steps into virtual reality (or upgrade their current VR setup) are facing a dilemma: Buy a standalone system like the Meta Quest 3 when it goes on sale Oct. 10, wait for the <a class="sc-1out364-0 dPMosf sc-145m8ut-0 lcFFec js_link" href="https://lifehacker.com/everything-apple-announced-at-wwdc-2023-1850506825" target="_blank" rel="noopener noreferrer">Apple Vision Pro</a> planned for release in 2024, or go with an already available wired VR rig like the Valve…</p><p><a href="https://lifehacker.com/meta-quest-3-vc-apple-vision-pro-vs-vive-pro-2-1850887857">Read more...</a></p>]]></description>
+            <category>meta quest</category>
+            <category>apple</category>
+            <category>vision pro</category>
+            <category>quest 2</category>
+            <category>apple vision pro</category>
+            <category>virtual reality</category>
+            <category>wearable devices</category>
+            <category>honda civic</category>
+            <category>valve index</category>
+            <category>meta quest 3</category>
+            <category>eric alexander</category>
+            <category>mcdonalds</category>
+            <category>oculus quest</category>
+            <category>alexander</category>
+            <category>htc</category>
+            <category>valve corporation</category>
+            <category>the quest 3</category>
+            <category>mac</category>
+            <category>technology internet</category>
+            <category>htc vive</category>
+            <category>virtual reality headsets</category>
+            <category>metaverse</category>
+            <pubDate>Fri, 29 Sep 2023 22:00:00 GMT</pubDate>
+            <guid isPermaLink="false">1850887857</guid>
+            <dc:creator><![CDATA[Stephen Johnson]]></dc:creator>
+            <media:thumbnail url="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/ab8ad70b474628c83d92062e02a4d0ff.png"/>
+        </item>
+        <item>
+            <title><![CDATA[Why It’s Still Worth It to Wire Your House for Ethernet]]></title>
+            <link>https://lifehacker.com/is-ethernet-still-worth-it-1850887111</link>
+            <description><![CDATA[<img class="type:primaryImage" src="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/c88ed165fb7cfc58530dcbc7113cb856.jpg"/><p>We’re living in an increasingly wireless world, as everything from the power that charges your devices to the audio that pops into your earbuds is transmitted wirelessly—including arguably the most precious resource of the modern era, the internet. There are so many advantages to accessing the internet via <a class="sc-1out364-0 dPMosf sc-145m8ut-0 lcFFec js_link" href="https://lifehacker.com/how-to-always-find-free-wifi-1849914769" target="_blank" rel="noopener noreferrer">wifi</a> that…</p><p><a href="https://lifehacker.com/is-ethernet-still-worth-it-1850887111">Read more...</a></p>]]></description>
+            <category>ethernet</category>
+            <category>computer network</category>
+            <category>internet access</category>
+            <category>advanced physical layer</category>
+            <category>ieee standards</category>
+            <category>wi fi</category>
+            <category>technology internet</category>
+            <category>computer networking</category>
+            <pubDate>Fri, 29 Sep 2023 21:30:00 GMT</pubDate>
+            <guid isPermaLink="false">1850887111</guid>
+            <dc:creator><![CDATA[Jeff Somers]]></dc:creator>
+            <media:thumbnail url="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/c88ed165fb7cfc58530dcbc7113cb856.jpg"/>
+        </item>
+        <item>
+            <title><![CDATA[Why a Pawn Shop Is Better Than a Payday Loan in an Emergency]]></title>
+            <link>https://lifehacker.com/why-a-pawn-shop-is-better-than-a-payday-loan-in-an-emer-1850886664</link>
+            <description><![CDATA[<img class="type:primaryImage" src="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/108b2bd855447d2b1d56cff6ae5b925b.jpg"/><p>It’s a universal rule of finance: If you’re seeking a short-term loan to cover an emergency expense, you’re not in a good place, financially speaking. But since most of us have <a class="sc-1out364-0 dPMosf sc-145m8ut-0 lcFFec js_link" href="https://www.nasdaq.com/articles/most-americans-have-$1000-or-less-in-savings-how-to-increase-that-amount" target="_blank" rel="noopener noreferrer">very little savings</a> in the bank, most of us aren’t in a good place financially. So when an emergency expense comes up, the only options are…</p><p><a href="https://lifehacker.com/why-a-pawn-shop-is-better-than-a-payday-loan-in-an-emer-1850886664">Read more...</a></p>]]></description>
+            <category>payday loan</category>
+            <category>pawn</category>
+            <category>business finance</category>
+            <category>repurposing</category>
+            <category>pawnbroker</category>
+            <category>black country living museum pawnbrokers shop</category>
+            <category>collateral</category>
+            <category>credit</category>
+            <category>pawnbrokers in hong kong</category>
+            <category>debt</category>
+            <category>loans</category>
+            <category>dave</category>
+            <category>pawn shops</category>
+            <pubDate>Fri, 29 Sep 2023 21:00:00 GMT</pubDate>
+            <guid isPermaLink="false">1850886664</guid>
+            <dc:creator><![CDATA[Jeff Somers]]></dc:creator>
+            <media:thumbnail url="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/108b2bd855447d2b1d56cff6ae5b925b.jpg"/>
+        </item>
+        <item>
+            <title><![CDATA[The iPhone 15 Pro Max Is Apple’s Most Boring Phone Yet]]></title>
+            <link>https://lifehacker.com/iphone-15-pro-max-review-1850887664</link>
+            <description><![CDATA[<img class="type:primaryImage" src="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/06008c2c14c04a1447fa2f11b34d9b96.jpg"/><p>There’s nothing innately special about the iPhone 15 Pro Max. Sure, it’s the latest and greatest smartphone from Apple, and it finally brings USB-C to the iPhone—yet aside from a few small additions, the iPhone 15 Pro Max is unequivocally boring. But that’s not a bad thing.<br/></p><p><a href="https://lifehacker.com/iphone-15-pro-max-review-1850887664">Read more...</a></p>]]></description>
+            <category>iphone</category>
+            <category>iphone</category>
+            <category>apple</category>
+            <category>google</category>
+            <category>samsung</category>
+            <category>videotelephony</category>
+            <category>technology internet</category>
+            <category>iphone 12 pro</category>
+            <category>lightning</category>
+            <category>ios</category>
+            <category>draftevolution of the iphone</category>
+            <pubDate>Fri, 29 Sep 2023 20:30:00 GMT</pubDate>
+            <guid isPermaLink="false">1850887664</guid>
+            <dc:creator><![CDATA[Joshua Hawkins]]></dc:creator>
+            <media:thumbnail url="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/06008c2c14c04a1447fa2f11b34d9b96.jpg"/>
+        </item>
+        <item>
+            <title><![CDATA[12 of the Best Exercises to Do With Resistance Bands at the Gym]]></title>
+            <link>https://lifehacker.com/12-of-the-best-exercises-to-do-with-resistance-bands-at-1849658908</link>
+            <description><![CDATA[<img class="type:primaryImage" src="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/f4379c05733fba6b6ba70a19f212e624.jpg"/><p>Resistance bands are a <a class="sc-1out364-0 dPMosf sc-145m8ut-0 lcFFec js_link" href="https://lifehacker.com/how-to-decide-between-resistance-bands-and-dumbbells-1845218911" target="_blank" rel="noopener noreferrer">favorite</a> of travelers and home-gym-havers because they can fold up into a small, light, easily transportable package. But even when you have access to a full gym, there are still a ton of exercises where resistance bands are the right tool for the job. <br/><br/>Here are some of the best band moves that…</p><p><a href="https://lifehacker.com/12-of-the-best-exercises-to-do-with-resistance-bands-at-1849658908">Read more...</a></p>]]></description>
+            <category>with resistance</category>
+            <category>squat</category>
+            <category>squatting position</category>
+            <category>push up</category>
+            <category>strength training</category>
+            <category>physical exercise</category>
+            <category>powerlifting</category>
+            <category>pull up</category>
+            <category>kettlebell</category>
+            <category>dip</category>
+            <category>power rack</category>
+            <category>bodyweight exercise</category>
+            <category>bodyweight exercises</category>
+            <category>entertainment culture</category>
+            <category>monster</category>
+            <pubDate>Fri, 29 Sep 2023 20:15:00 GMT</pubDate>
+            <guid isPermaLink="false">1849658908</guid>
+            <dc:creator><![CDATA[Beth Skwarecki]]></dc:creator>
+            <media:thumbnail url="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/f4379c05733fba6b6ba70a19f212e624.jpg"/>
+        </item>
+        <item>
+            <title><![CDATA[Everything You Need to Know About the Fitbit Charge 6]]></title>
+            <link>https://lifehacker.com/fitbit-charge-6-review-1850887582</link>
+            <description><![CDATA[<img class="type:primaryImage" src="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/3a051b8c764bd88a0e15765a3004a15a.jpg"/><p>One of Fitbit’s most popular models, the Charge, has a new version out: the <a class="sc-1out364-0 dPMosf sc-145m8ut-0 lcFFec js_link" href="https://blog.google/products/fitbit/fitness-tracker-charge-6/" target="_blank" rel="noopener noreferrer">Charge 6</a>. It has Google Maps, Google Wallet, and YouTube Music controls built in, along with heart rate sensing that the company says is its most accurate to date. You can preorder it now for $159.95, only about $10 more than the Charge 5’s…</p><p><a href="https://lifehacker.com/fitbit-charge-6-review-1850887582">Read more...</a></p>]]></description>
+            <category>charge</category>
+            <category>fitbit</category>
+            <category>amazon</category>
+            <category>google pay send</category>
+            <category>entertainment culture</category>
+            <category>youtube music</category>
+            <category>google wallet</category>
+            <category>iphone</category>
+            <category>google</category>
+            <category>technology internet</category>
+            <category>spotify</category>
+            <category>nordictrack</category>
+            <category>mobile payments</category>
+            <category>online payments</category>
+            <category>best buy</category>
+            <category>alphabet inc</category>
+            <pubDate>Fri, 29 Sep 2023 20:00:00 GMT</pubDate>
+            <guid isPermaLink="false">1850887582</guid>
+            <dc:creator><![CDATA[Beth Skwarecki]]></dc:creator>
+            <media:thumbnail url="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/3a051b8c764bd88a0e15765a3004a15a.jpg"/>
+        </item>
+        <item>
+            <title><![CDATA[Six Sinks, Ranked by How Easy They Are to Install Yourself]]></title>
+            <link>https://lifehacker.com/easiest-sinks-install-1850884571</link>
+            <description><![CDATA[<img class="type:primaryImage" src="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/f646aaa9f90954c8838f38cafe94a917.jpg"/><p>If you need to upgrade a sink, choosing the right one can seem daunting. If you plan to do the work yourself, considerations like mounting style, depth, and the type of countertop you have can factor into how simple it is to swap out your old sink for a new one. Here’s a handy guide, from simplest to most complicated…</p><p><a href="https://lifehacker.com/easiest-sinks-install-1850884571">Read more...</a></p>]]></description>
+            <category>kitchen</category>
+            <category>building materials</category>
+            <category>bathrooms</category>
+            <category>sink</category>
+            <category>caulk</category>
+            <category>plumbing</category>
+            <category>countertop</category>
+            <category>cabinetry</category>
+            <pubDate>Fri, 29 Sep 2023 19:30:00 GMT</pubDate>
+            <guid isPermaLink="false">1850884571</guid>
+            <dc:creator><![CDATA[Becca Lewis]]></dc:creator>
+            <media:thumbnail url="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/f646aaa9f90954c8838f38cafe94a917.jpg"/>
+        </item>
+        <item>
+            <title><![CDATA[You Can Finally Preorder Raspberry Pi 5]]></title>
+            <link>https://lifehacker.com/how-to-preorder-raspberry-pi-5-1850887192</link>
+            <description><![CDATA[<img class="type:primaryImage" src="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/fcc07477e052e8498568de0f38b66afa.jpg"/><p>From the beginning, Raspberry Pi’s mission has been to offer capable computers to beginners and experts alike, at a remarkably affordable price. That doesn’t change with the company’s latest device. Yes, after years of <a class="sc-1out364-0 dPMosf sc-145m8ut-0 lcFFec js_link" href="https://techcrunch.com/2022/10/05/raspberry-pi-supply-chain-shocks-eben-upton-interview/" target="_blank" rel="noopener noreferrer">processor shortages and supply chain disruption</a>, the Raspberry 5 is nearly here, and you can…</p><p><a href="https://lifehacker.com/how-to-preorder-raspberry-pi-5-1850887192">Read more...</a></p>]]></description>
+            <category>raspberry pi</category>
+            <category>business finance</category>
+            <category>videocore</category>
+            <category>chip</category>
+            <category>computer science education in the united kingdom</category>
+            <category>single board computers</category>
+            <category>pine64</category>
+            <category>technology internet</category>
+            <category>linux based devices</category>
+            <category>raspberry pis mission</category>
+            <category>banana pi</category>
+            <category>arm cortex a7</category>
+            <pubDate>Fri, 29 Sep 2023 19:00:00 GMT</pubDate>
+            <guid isPermaLink="false">1850887192</guid>
+            <dc:creator><![CDATA[Jake Peterson]]></dc:creator>
+            <media:thumbnail url="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/fcc07477e052e8498568de0f38b66afa.jpg"/>
+        </item>
+        <item>
+            <title><![CDATA[You Can Actually Trigger Two Shortcuts With the iPhone 15 Pro’s Action Button]]></title>
+            <link>https://lifehacker.com/two-shortcuts-iphone-15-pro-action-button-1850886176</link>
+            <description><![CDATA[<img class="type:primaryImage" src="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/b22ed20d2d3ffc1e428abc405cbd9fdb.png"/><p>The <a class="sc-1out364-0 dPMosf sc-145m8ut-0 lcFFec js_link" href="https://lifehacker.com/everything-you-need-to-know-about-the-iphone-15-pro-and-1850829750" target="_blank" rel="noopener noreferrer">iPhone 15 Pro</a>’s Action Button <a class="sc-1out364-0 dPMosf sc-145m8ut-0 lcFFec js_link" href="https://lifehacker.com/everything-you-can-do-with-iphone-15-pros-action-button-1850832992" target="_blank" rel="noopener noreferrer">is a game-changer</a>. With it, you can quickly launch features like the camera and flashlight, or, if you’re really creative, a host of useful shortcuts and automations. But what’s better than assigning one shortcut to the Action Button? Assigning two shortcuts to the Action Button.</p><p><a href="https://lifehacker.com/two-shortcuts-iphone-15-pro-action-button-1850886176">Read more...</a></p>]]></description>
+            <category>shortcuts</category>
+            <category>iphone</category>
+            <category>trigger</category>
+            <category>keyboard shortcut</category>
+            <category>federico viticci</category>
+            <category>user interface techniques</category>
+            <category>mobile operating systems</category>
+            <category>viticci</category>
+            <category>federico</category>
+            <category>ios</category>
+            <category>iphone 7</category>
+            <category>macos</category>
+            <pubDate>Fri, 29 Sep 2023 18:30:00 GMT</pubDate>
+            <guid isPermaLink="false">1850886176</guid>
+            <dc:creator><![CDATA[Pranay Parab]]></dc:creator>
+            <media:thumbnail url="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/b22ed20d2d3ffc1e428abc405cbd9fdb.png"/>
+        </item>
+        <item>
+            <title><![CDATA[Every Thanksgiving Recipe You Can Microwave (and Those You Can't)]]></title>
+            <link>https://lifehacker.com/everything-you-can-and-cannot-microwave-on-thanksgiving-1830572421</link>
+            <description><![CDATA[<img class="type:primaryImage" src="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/ed9836c0ce25796b5d949a4bc0387f09.jpg"/><p>Choreographing a lavish Thanksgiving meal is a high-pressure project to say the least, and when you’re juggling a dozen-odd dishes, every square inch of stove and oven space is precious real estate. <a class="sc-1out364-0 dPMosf sc-145m8ut-0 lcFFec js_link" href="https://lifehacker.com/the-best-tips-and-tricks-for-your-microwave-1643119824" target="_blank" rel="noopener noreferrer">A microwave oven</a> can streamline even the most ambitious prep schedule, as long as you make good choices—some recipes…</p><p><a href="https://lifehacker.com/everything-you-can-and-cannot-microwave-on-thanksgiving-1830572421">Read more...</a></p>]]></description>
+            <category>types of food</category>
+            <category>convenience foods</category>
+            <category>casserole</category>
+            <category>canadian cuisine</category>
+            <category>microwave oven</category>
+            <category>hospitality recreation</category>
+            <category>english cuisine</category>
+            <category>national dishes</category>
+            <category>custard</category>
+            <category>macaroni and cheese</category>
+            <pubDate>Fri, 29 Sep 2023 18:15:00 GMT</pubDate>
+            <guid isPermaLink="false">1830572421</guid>
+            <dc:creator><![CDATA[A.A. Newton]]></dc:creator>
+            <media:thumbnail url="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/ed9836c0ce25796b5d949a4bc0387f09.jpg"/>
+        </item>
+        <item>
+            <title><![CDATA[This Three-camera Blink Bundle Is 58% Off Right Now]]></title>
+            <link>https://lifehacker.com/this-three-camera-blink-bundle-is-58-off-right-now-1850887133</link>
+            <description><![CDATA[<img class="type:primaryImage" src="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/bc0a704ffe8e8451f4e3f36a3042183d.jpg"/><p>Until the end of the day on Sunday, Oct. 1, Amazon Prime members can get a 58% discount on a <a class="sc-1out364-0 dPMosf sc-145m8ut-0 lcFFec js_link" href="https://zdcs.link/3Z00m" target="_blank" rel="noopener noreferrer">three-camera Blink bundle</a>, currently going for <strong>$99.99 </strong>(down from its $239.98 list price). This is the lowest price this bundle has been, according to <a class="sc-1out364-0 dPMosf sc-145m8ut-0 lcFFec js_link" href="https://camelcamelcamel.com/product/B09F7KTTTL" target="_blank" rel="noopener noreferrer">Camelcamelcamel’s price history</a>.<br/></p><p><a href="https://lifehacker.com/this-three-camera-blink-bundle-is-58-off-right-now-1850887133">Read more...</a></p>]]></description>
+            <category>blink</category>
+            <category>amazon</category>
+            <category>ring</category>
+            <category>nine</category>
+            <category>google</category>
+            <category>technology internet</category>
+            <category>blink home</category>
+            <pubDate>Fri, 29 Sep 2023 18:00:00 GMT</pubDate>
+            <guid isPermaLink="false">1850887133</guid>
+            <dc:creator><![CDATA[Daniel Oropeza]]></dc:creator>
+            <media:thumbnail url="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/bc0a704ffe8e8451f4e3f36a3042183d.jpg"/>
+        </item>
+        <item>
+            <title><![CDATA[Cling to That Summer Feeling With This Lemon Stick 'Drink']]></title>
+            <link>https://lifehacker.com/cling-to-that-summer-feeling-with-this-lemon-stick-drin-1850887254</link>
+            <description><![CDATA[<img class="type:primaryImage" src="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/a695890298f2e3ee7711ae0886fcf4d4.jpg"/><p>Summer ended abruptly this year. One minute, I was sweating profusely, hiding from the sun indoors, and the next thing I knew, I was bundling myself in blankets, hiding from the rain indoors. I wasn’t done with summer, but summer was done with me. As a result, I’ve found myself clinging to sunny-weather things, like…</p><p><a href="https://lifehacker.com/cling-to-that-summer-feeling-with-this-lemon-stick-drin-1850887254">Read more...</a></p>]]></description>
+            <category>lemon stick</category>
+            <category>lemon</category>
+            <category>sugar</category>
+            <category>candy cane</category>
+            <category>bob</category>
+            <category>candy</category>
+            <category>cuisine of baltimore</category>
+            <category>peppermint</category>
+            <category>leo soft peppermint</category>
+            <category>hospitality recreation</category>
+            <pubDate>Fri, 29 Sep 2023 17:30:00 GMT</pubDate>
+            <guid isPermaLink="false">1850887254</guid>
+            <dc:creator><![CDATA[Claire Lower]]></dc:creator>
+            <media:thumbnail url="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/a695890298f2e3ee7711ae0886fcf4d4.jpg"/>
+        </item>
+        <item>
+            <title><![CDATA[Back Up Your Xbox Screenshots and Videos Before Microsoft Deletes Them All]]></title>
+            <link>https://lifehacker.com/back-up-your-xbox-screenshots-and-videos-before-microso-1850886074</link>
+            <description><![CDATA[<img class="type:primaryImage" src="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/791ad2b4fe1274bc38bf122acb90a1e0.jpg"/><p>Microsoft won’t let you permanently store <a class="sc-1out364-0 dPMosf sc-145m8ut-0 lcFFec js_link" href="https://lifehacker.com/how-to-take-screenshots-on-the-xbox-series-x-s-outside-1847257809" target="_blank" rel="noopener noreferrer">your game clips and screenshots</a> on the Xbox Network anymore. In a <a class="sc-1out364-0 dPMosf sc-145m8ut-0 lcFFec js_link" href="https://news.xbox.com/en-us/2023/09/27/bonus-xbox-update-for-september/" target="_blank" rel="noopener noreferrer">blog post</a>, the company has announced it’ll start deleting all of these game captures 90 days after you upload them. If you’re as emotionally attached to your “play of the game” moments as I am, you should start…</p><p><a href="https://lifehacker.com/back-up-your-xbox-screenshots-and-videos-before-microso-1850886074">Read more...</a></p>]]></description>
+            <category>microsoft</category>
+            <category>xbox</category>
+            <category>onedrive</category>
+            <category>home video game consoles</category>
+            <category>xbox wireless controller</category>
+            <category>xbox one</category>
+            <category>usb flash drive</category>
+            <category>technology internet</category>
+            <category>kinect</category>
+            <pubDate>Fri, 29 Sep 2023 17:00:00 GMT</pubDate>
+            <guid isPermaLink="false">1850886074</guid>
+            <dc:creator><![CDATA[Pranay Parab]]></dc:creator>
+            <media:thumbnail url="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/791ad2b4fe1274bc38bf122acb90a1e0.jpg"/>
+        </item>
+        <item>
+            <title><![CDATA[These Are the Signs of Poor Interoception in Kids]]></title>
+            <link>https://lifehacker.com/these-are-the-signs-of-poor-interoception-in-kids-1850884972</link>
+            <description><![CDATA[<img class="type:primaryImage" src="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/0d1a0ca92cb15061b7fbcea3d15d41b6.jpg"/><p><a class="sc-1out364-0 dPMosf sc-145m8ut-0 lcFFec js_link" href="https://www.understood.org/en/articles/interoception-and-sensory-processing-issues-what-you-need-to-know" target="_blank" rel="noopener noreferrer">Interoception</a> is the ability to recognize internal bodily signals, such as feeling hot or cold, hungry or thirsty. In the same way that the nerves in our muscles and joints will send signals to our brain, letting it know where we are in physical space, the nerves in our organs will also send signals about how full our…</p><p><a href="https://lifehacker.com/these-are-the-signs-of-poor-interoception-in-kids-1850884972">Read more...</a></p>]]></description>
+            <category>interoception</category>
+            <category>andrew kahn</category>
+            <category>health medical pharma</category>
+            <category>human anatomy</category>
+            <category>sensory processing</category>
+            <category>anxiety</category>
+            <category>human body</category>
+            <category>mindfulness</category>
+            <category>human physiology</category>
+            <category>sense</category>
+            <category>mindbody interventions</category>
+            <category>sensory systems</category>
+            <category>feeling</category>
+            <category>pain</category>
+            <pubDate>Fri, 29 Sep 2023 16:30:00 GMT</pubDate>
+            <guid isPermaLink="false">1850884972</guid>
+            <dc:creator><![CDATA[Rachel Fairbank]]></dc:creator>
+            <media:thumbnail url="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/0d1a0ca92cb15061b7fbcea3d15d41b6.jpg"/>
+        </item>
+        <item>
+            <title><![CDATA[Use 'Think, Pair, Share' for Effective Group Studying]]></title>
+            <link>https://lifehacker.com/use-think-pair-share-for-effective-group-studying-1850885376</link>
+            <description><![CDATA[<img class="type:primaryImage" src="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/c10c2971e06f7ae0b5949163924a6c88.jpg"/><p>There are a few effective methods that will help you study with partners or groups, but <a class="sc-1out364-0 dPMosf sc-145m8ut-0 lcFFec js_link" href="https://lifehacker.com/how-to-study-in-a-group-if-you-must-1850857034" target="_blank" rel="noopener noreferrer">you have to know them before you get into that group setting</a>—or else run the risk of no one getting much working done. I’m not a huge proponent of group work, but with the right methods, it can be productive. Here’s another method…</p><p><a href="https://lifehacker.com/use-think-pair-share-for-effective-group-studying-1850885376">Read more...</a></p>]]></description>
+            <category>someone else</category>
+            <category>feynman</category>
+            <category>frank lyman</category>
+            <category>jigsaw</category>
+            <category>sq3r</category>
+            <category>human interest</category>
+            <category>quantum computing</category>
+            <category>richard feynman</category>
+            <category>space shuttle challenger disaster</category>
+            <category>reading</category>
+            <pubDate>Fri, 29 Sep 2023 16:00:00 GMT</pubDate>
+            <guid isPermaLink="false">1850885376</guid>
+            <dc:creator><![CDATA[Lindsey Ellefson]]></dc:creator>
+            <media:thumbnail url="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/c10c2971e06f7ae0b5949163924a6c88.jpg"/>
+        </item>
+        <item>
+            <title><![CDATA[Use Inquiry-Based Learning to Stay Curious About What You’re Studying]]></title>
+            <link>https://lifehacker.com/use-inquiry-based-learning-to-stay-curious-about-what-y-1850885326</link>
+            <description><![CDATA[<img class="type:primaryImage" src="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/8a092b28e4236dcbbeb9561c8db3ea2f.jpg"/><p>Teachers use a variety of methods to help students learn and retain material and we can find ways to modify those methods for independent studying, too. A great example of a widely-used pedagogical technique that is useful for studying with on your own is inquiry-based learning.<br/></p><p><a href="https://lifehacker.com/use-inquiry-based-learning-to-stay-curious-about-what-y-1850885326">Read more...</a></p>]]></description>
+            <category>inquiry</category>
+            <category>inquiry based learning</category>
+            <category>active learning</category>
+            <category>reading</category>
+            <category>question</category>
+            <category>education reform</category>
+            <category>educational practices</category>
+            <category>methodology</category>
+            <category>education</category>
+            <category>applied learning</category>
+            <category>educational technology</category>
+            <category>sq3r</category>
+            <category>kwl table</category>
+            <pubDate>Fri, 29 Sep 2023 15:30:00 GMT</pubDate>
+            <guid isPermaLink="false">1850885326</guid>
+            <dc:creator><![CDATA[Lindsey Ellefson]]></dc:creator>
+            <media:thumbnail url="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/8a092b28e4236dcbbeb9561c8db3ea2f.jpg"/>
+        </item>
+        <item>
+            <title><![CDATA[The 25 Best Science Fiction and Fantasy Movies on Netflix]]></title>
+            <link>https://lifehacker.com/the-best-science-fiction-and-fantasy-movies-on-netflix-1850881836</link>
+            <description><![CDATA[<img class="type:primaryImage" src="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/8899aee418dacbda202d98ec9ff0d59b.jpg"/><p>We use the umbrella term “science fiction and fantasy” all the time—but, in truth, these are twin genres that each contain multitudes. An SFF movie might be a big, loud, alien invasion blockbuster; a bloody sword-and-sorcery epic; or a quiet, reflective fable. What these movies all have in common is the imagination to…</p><p><a href="https://lifehacker.com/the-best-science-fiction-and-fantasy-movies-on-netflix-1850881836">Read more...</a></p>]]></description>
+            <category>netflix</category>
+            <category>alex garland</category>
+            <category>jeff vandermeer</category>
+            <category>gina bythewood</category>
+            <category>robert e howard</category>
+            <category>leonard nimoy</category>
+            <category>prisoners and sicario villeneuve</category>
+            <category>robin williams</category>
+            <category>andromache</category>
+            <category>chris pine</category>
+            <category>dredd</category>
+            <category>ruth stiles</category>
+            <category>films</category>
+            <category>james earl jones</category>
+            <category>conor</category>
+            <category>tetsuro araki</category>
+            <category>rapace</category>
+            <category>arnold schwarzenegger his</category>
+            <category>entertainment culture</category>
+            <category>farahani</category>
+            <category>pinnochio</category>
+            <category>the wandering earth</category>
+            <category>killy</category>
+            <category>disney</category>
+            <category>augustine</category>
+            <category>robert a heinlein</category>
+            <category>tom chris sheffield</category>
+            <category>pinocchio</category>
+            <category>george clooney</category>
+            <category>conan the barbarian</category>
+            <category>guillermo del toro</category>
+            <category>duncan smith</category>
+            <category>my father</category>
+            <category>liam neeson</category>
+            <category>ballister boldheart</category>
+            <category>dela</category>
+            <category>starship troopers</category>
+            <category>academy award</category>
+            <category>denis villeneuve</category>
+            <category>oscars</category>
+            <category>stephen</category>
+            <category>charlize theron</category>
+            <category>jj abrams</category>
+            <category>stevenson</category>
+            <category>tommy wirkola</category>
+            <category>the old guard</category>
+            <category>oscar</category>
+            <category>elmer jacob tremblay</category>
+            <category>chris williams</category>
+            <category>spock</category>
+            <category>willem dafoe</category>
+            <category>michaela mcmanus</category>
+            <category>nimona</category>
+            <category>the mitchells vs the machines</category>
+            <category>rise blood hunter</category>
+            <category>natalie portman</category>
+            <category>michael j fox</category>
+            <pubDate>Fri, 29 Sep 2023 15:00:00 GMT</pubDate>
+            <guid isPermaLink="false">1850881836</guid>
+            <dc:creator><![CDATA[Ross Johnson]]></dc:creator>
+            <media:thumbnail url="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/8899aee418dacbda202d98ec9ff0d59b.jpg"/>
+        </item>
+        <item>
+            <title><![CDATA[Fall Is the Perfect Time to Repair the Mortar on Your Walkways]]></title>
+            <link>https://lifehacker.com/fall-is-the-perfect-time-to-repair-the-mortar-on-your-w-1850884311</link>
+            <description><![CDATA[<img class="type:primaryImage" src="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/0a52e6003646d548a11b77ace8c53cdb.jpg"/><p>As the weather starts to change, cracks in stone and paver walkways can begin to be more of a problem. Moisture can work its way into any cracks in the mortar and when it freezes, it will expand, widening the cracks and potentially destabilizing the walkway. Before temperatures get below freezing on a regular basis,…</p><p><a href="https://lifehacker.com/fall-is-the-perfect-time-to-repair-the-mortar-on-your-w-1850884311">Read more...</a></p>]]></description>
+            <category>mortar</category>
+            <category>damp</category>
+            <category>plasterwork</category>
+            <category>lime mortar</category>
+            <category>masonry</category>
+            <category>trowel</category>
+            <pubDate>Fri, 29 Sep 2023 14:30:00 GMT</pubDate>
+            <guid isPermaLink="false">1850884311</guid>
+            <dc:creator><![CDATA[Becca Lewis]]></dc:creator>
+            <media:thumbnail url="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/0a52e6003646d548a11b77ace8c53cdb.jpg"/>
+        </item>
+        <item>
+            <title><![CDATA[This Air Fried Key Lime Pie Is So Easy, It Feels Like Cheating]]></title>
+            <link>https://lifehacker.com/this-air-fried-key-lime-pie-is-so-easy-it-feels-like-c-1850871411</link>
+            <description><![CDATA[<img class="type:primaryImage" src="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/2b359263fdc7a8857daa2aae9aaf8378.jpg"/><p>Air fried key lime pie is a cheater’s pie if I ever saw one. It doesn’t contain any true key limes, just your average, run of the mill, bottled lime juice. The batter is made in a food processor, and it bakes up in 10 minutes or less with the help of the air fryer. Is this even a baking project? Who can say? What I…</p><p><a href="https://lifehacker.com/this-air-fried-key-lime-pie-is-so-easy-it-feels-like-c-1850871411">Read more...</a></p>]]></description>
+            <category>key lime pie</category>
+            <category>pie</category>
+            <category>types of food</category>
+            <category>zest</category>
+            <category>condensed milk</category>
+            <category>hospitality recreation</category>
+            <category>dessert</category>
+            <category>cuisine of the southern united states</category>
+            <category>pie in american cuisine</category>
+            <category>lemon ice box pie</category>
+            <category>custard</category>
+            <category>american desserts</category>
+            <pubDate>Fri, 29 Sep 2023 14:00:00 GMT</pubDate>
+            <guid isPermaLink="false">1850871411</guid>
+            <dc:creator><![CDATA[Allie Chanthorn Reinmann]]></dc:creator>
+            <media:thumbnail url="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/2b359263fdc7a8857daa2aae9aaf8378.jpg"/>
+        </item>
+        <item>
+            <title><![CDATA[Where to Stream the Tennessee Vs. South Carolina Game]]></title>
+            <link>https://lifehacker.com/where-to-stream-the-tennessee-vs-south-carolina-game-1850884935</link>
+            <description><![CDATA[<img class="type:primaryImage" src="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/3045396054f5d544334da11800325be7.jpg"/><p>The South Carolina Gamecocks are traveling to Knoxville this week to take on the Tennessee Volunteers in a primetime grudge match. There’s history between these squads: Last season, a Gamecock victory kept Tennessee from the championship, so the Volunteers are out for vengeance. Here’s how you can watch the action.<br/></p><p><a href="https://lifehacker.com/where-to-stream-the-tennessee-vs-south-carolina-game-1850884935">Read more...</a></p>]]></description>
+            <category>sling tv</category>
+            <category>sports</category>
+            <category>knoxville tennessee</category>
+            <category>tennessee volunteers football</category>
+            <category>fubotv</category>
+            <category>neyland stadium</category>
+            <category>dish network</category>
+            <category>tennessee volunteers</category>
+            <pubDate>Fri, 29 Sep 2023 13:30:00 GMT</pubDate>
+            <guid isPermaLink="false">1850884935</guid>
+            <dc:creator><![CDATA[Stephen Johnson]]></dc:creator>
+            <media:thumbnail url="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/3045396054f5d544334da11800325be7.jpg"/>
+        </item>
+        <item>
+            <title><![CDATA[Refurbished Apple Watches Are As Cheap As $70 on Woot Today]]></title>
+            <link>https://lifehacker.com/refurbished-apple-watches-are-as-cheap-as-70-on-woot-t-1850884670</link>
+            <description><![CDATA[<img class="type:primaryImage" src="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/1209a40623da7f93cf35f5d4196a2f79.jpg"/><p>Even if you’re in the market for an Apple Watch, you may not be able (or willing) to shell out $400  for the newest <a class="sc-1out364-0 dPMosf sc-145m8ut-0 lcFFec js_link" href="https://zdcs.link/KY3kE" target="_blank" rel="noopener noreferrer">Apple Watch Series 9</a>. Fortunately, there are pretty great deals to be had on older Apple Watch models, if you’re willing to make some compromises on features. Right now, Woot is  selling refurbished…</p><p><a href="https://lifehacker.com/refurbished-apple-watches-are-as-cheap-as-70-on-woot-t-1850884670">Read more...</a></p>]]></description>
+            <category>apple</category>
+            <category>woot</category>
+            <category>watchos</category>
+            <category>fitness</category>
+            <category>wearable devices</category>
+            <category>entertainment culture</category>
+            <category>woot ld</category>
+            <category>ios</category>
+            <category>apple silicon</category>
+            <category>technology internet</category>
+            <category>wearable computers</category>
+            <category>smartwatches</category>
+            <category>apple watch</category>
+            <category>apple inc</category>
+            <category>apple store</category>
+            <category>38mm gps</category>
+            <pubDate>Fri, 29 Sep 2023 13:00:00 GMT</pubDate>
+            <guid isPermaLink="false">1850884670</guid>
+            <dc:creator><![CDATA[Daniel Oropeza]]></dc:creator>
+            <media:thumbnail url="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/1209a40623da7f93cf35f5d4196a2f79.jpg"/>
+        </item>
+        <item>
+            <title><![CDATA[The Best Ways to Streamline Your Grocery Shopping and Save Money]]></title>
+            <link>https://lifehacker.com/the-best-ways-to-streamline-your-grocery-shopping-and-s-1850883509</link>
+            <description><![CDATA[<img class="type:primaryImage" src="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/4a44bc79a095cca76dfe6596aed4c014.jpg"/><p>You’re standing in the middle of the aisle at the grocery store, holding a box of pasta, desperately wracking your brain: Do I already have this in my pantry?With <a class="sc-1out364-0 dPMosf sc-145m8ut-0 lcFFec js_link" href="https://lifehacker.com/how-to-see-through-inflation-prices-1848793300" target="_blank" rel="noopener noreferrer">inflation</a> making all our lives increasingly expensive, one of the few things still in your control is how you shop. To avoid unnecessary spending—like on a…</p><p><a href="https://lifehacker.com/the-best-ways-to-streamline-your-grocery-shopping-and-s-1850883509">Read more...</a></p>]]></description>
+            <category>shopping</category>
+            <category>advertising</category>
+            <category>supermarkets</category>
+            <category>grocery store</category>
+            <pubDate>Fri, 29 Sep 2023 12:30:00 GMT</pubDate>
+            <guid isPermaLink="false">1850883509</guid>
+            <dc:creator><![CDATA[Meredith Dietz]]></dc:creator>
+            <media:thumbnail url="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/4a44bc79a095cca76dfe6596aed4c014.jpg"/>
+        </item>
+        <item>
+            <title><![CDATA[Try Playing NYT Connections on Paper]]></title>
+            <link>https://lifehacker.com/try-playing-nyt-connections-on-paper-1850883755</link>
+            <description><![CDATA[<img class="type:primaryImage" src="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/0bc1dcd39544ecb7d5700a680eb96b18.jpg"/><p>When you’re playing the New York Times’s <a class="sc-1out364-0 dPMosf sc-145m8ut-0 lcFFec js_link" href="https://lifehacker.com/entertainment/connections" target="_blank" rel="noopener noreferrer">Connections</a> game, it’s important not to submit your guesses too soon. You may think that you’ve spotted four candies, or four things found on trees, but the game is trying to trick you. One of those candies may be an ambiguous word, like SUCKER, that belongs in a different…</p><p><a href="https://lifehacker.com/try-playing-nyt-connections-on-paper-1850883755">Read more...</a></p>]]></description>
+            <category>human interest</category>
+            <pubDate>Fri, 29 Sep 2023 12:00:00 GMT</pubDate>
+            <guid isPermaLink="false">1850883755</guid>
+            <dc:creator><![CDATA[Beth Skwarecki]]></dc:creator>
+            <media:thumbnail url="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/0bc1dcd39544ecb7d5700a680eb96b18.jpg"/>
+        </item>
+        <item>
+            <title><![CDATA[Today’s NYT Connections Hints (and Answer) for September 29, 2023]]></title>
+            <link>https://lifehacker.com/nyt-connections-answer-today-september-29-2023-1850881958</link>
+            <description><![CDATA[<img class="type:primaryImage" src="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/99de346d4fdfcd4a0267deaf1bf5c35f.png"/><p>If you’re looking for the <a class="sc-1out364-0 dPMosf sc-145m8ut-0 lcFFec js_link" href="https://www.nytimes.com/games/connections" target="_blank" rel="noopener noreferrer">Connections</a> answer for Friday, September 29, 2023, read on—I’ll share some clues, tips, and strategies, and finally the solutions to all four categories. <strong>Beware, there are spoilers below for September 29, NYT Connections #110! </strong>Scroll down if you want some hints (and then the answer) to…</p><p><a href="https://lifehacker.com/nyt-connections-answer-today-september-29-2023-1850881958">Read more...</a></p>]]></description>
+            <category>time signature</category>
+            <category>jennifer hudson</category>
+            <category>entertainment culture</category>
+            <category>disney</category>
+            <category>kate hudson</category>
+            <category>grammy</category>
+            <category>puzzles</category>
+            <category>oscar</category>
+            <category>jennifer hudson</category>
+            <category>human interest</category>
+            <category>henry hudson</category>
+            <category>emmy</category>
+            <category>tony</category>
+            <category>close</category>
+            <category>dwayne johnson</category>
+            <category>crossword</category>
+            <pubDate>Fri, 29 Sep 2023 01:00:00 GMT</pubDate>
+            <guid isPermaLink="false">1850881958</guid>
+            <dc:creator><![CDATA[Beth Skwarecki]]></dc:creator>
+            <media:thumbnail url="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/99de346d4fdfcd4a0267deaf1bf5c35f.png"/>
+        </item>
+        <item>
+            <title><![CDATA[Where to Stream the Iowa State Vs. Oklahoma Game]]></title>
+            <link>https://lifehacker.com/where-to-stream-the-iowa-state-vs-oklahoma-game-1850884575</link>
+            <description><![CDATA[<img class="type:primaryImage" src="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/748965645ae475660d0f47fb2edd9e04.jpg"/><p>This Saturday, the Iowa State Cyclones travel to Norman, Okla. to take on the undefeated Oklahoma Sooners in a Big 12 matchup. Both teams are coming off victories: Iowa State thrashed Oklahoma State last week, earning a 34-27 victory at home, and Oklahoma destroyed Cincinnati 20-6 in an away game. While OK’s…</p><p><a href="https://lifehacker.com/where-to-stream-the-iowa-state-vs-oklahoma-game-1850884575">Read more...</a></p>]]></description>
+            <category>sling tv</category>
+            <category>sports</category>
+            <category>youtube tv</category>
+            <category>okla</category>
+            <category>fubotv</category>
+            <category>hulu</category>
+            <category>technology internet</category>
+            <pubDate>Thu, 28 Sep 2023 23:30:00 GMT</pubDate>
+            <guid isPermaLink="false">1850884575</guid>
+            <dc:creator><![CDATA[Stephen Johnson]]></dc:creator>
+            <media:thumbnail url="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/748965645ae475660d0f47fb2edd9e04.jpg"/>
+        </item>
+        <item>
+            <title><![CDATA[You Can Try Copilot, Windows 11’s New AI Assistant, Right Now]]></title>
+            <link>https://lifehacker.com/you-can-try-copilot-windows-11-s-new-ai-assistant-rig-1850884313</link>
+            <description><![CDATA[<img class="type:primaryImage" src="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/9cde7affefbd18c8c6005ee6e1d11215.jpg"/><p><a class="sc-1out364-0 dPMosf sc-145m8ut-0 lcFFec js_link" href="https://lifehacker.com/biggest-new-features-windows-11-23h2-update-1850860890" target="_blank" rel="noopener noreferrer">One week after its initial announcement</a>, Microsoft has released its big Copilot update for Windows 11. Now, this isn’t the major Windows 11 update that everyone is waiting on—that’s coming later this year—but it does give us a good look at how Microsoft is incorporating AI-based tools into Windows.</p><p><a href="https://lifehacker.com/you-can-try-copilot-windows-11-s-new-ai-assistant-rig-1850884313">Read more...</a></p>]]></description>
+            <category>openai</category>
+            <category>screenshot</category>
+            <category>applications of artificial intelligence</category>
+            <category>microsoft bing</category>
+            <category>snipping tool</category>
+            <category>microsoft</category>
+            <category>gpt 4</category>
+            <category>cortana</category>
+            <category>technology internet</category>
+            <category>sharex</category>
+            <category>windows 8</category>
+            <category>windows vista</category>
+            <category>openai</category>
+            <category>large language models</category>
+            <category>microsoft paint</category>
+            <pubDate>Thu, 28 Sep 2023 23:00:00 GMT</pubDate>
+            <guid isPermaLink="false">1850884313</guid>
+            <dc:creator><![CDATA[Joshua Hawkins]]></dc:creator>
+            <media:thumbnail url="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/9cde7affefbd18c8c6005ee6e1d11215.jpg"/>
+        </item>
+        <item>
+            <title><![CDATA[Check If You Qualify for One of These Student Loan Grants]]></title>
+            <link>https://lifehacker.com/check-if-you-qualify-for-one-of-these-student-loan-gran-1850882286</link>
+            <description><![CDATA[<img class="type:primaryImage" src="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/eb7a1c4c6fa7c8e0771d0efa0354628b.jpg"/><p>Student loan bills are due once again after a pandemic hiatus (yes, even if the government shuts down). The Biden administration’s Saving on a Valuable Education (SAVE) Plan allows many borrowers to <a class="sc-1out364-0 dPMosf sc-145m8ut-0 lcFFec js_link" href="https://lifehacker.com/you-can-apply-now-to-lower-your-monthly-student-loan-pa-1850770373" target="_blank" rel="noopener noreferrer">lower their monthly payments</a>—some all the way to $0—but some people may also qualify for grants or loan forgiveness…</p><p><a href="https://lifehacker.com/check-if-you-qualify-for-one-of-these-student-loan-gran-1850882286">Read more...</a></p>]]></description>
+            <category>student loan</category>
+            <category>business finance</category>
+            <category>google</category>
+            <category>health professional</category>
+            <category>federal direct student loan program</category>
+            <category>health resources and services administration</category>
+            <category>labor</category>
+            <category>student loans in the united states</category>
+            <category>student financial aid in canada</category>
+            <category>teacher loan forgiveness</category>
+            <category>student debt</category>
+            <category>national health service corps</category>
+            <category>public service loan forgiveness</category>
+            <pubDate>Thu, 28 Sep 2023 22:30:00 GMT</pubDate>
+            <guid isPermaLink="false">1850882286</guid>
+            <dc:creator><![CDATA[Emily Long]]></dc:creator>
+            <media:thumbnail url="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/eb7a1c4c6fa7c8e0771d0efa0354628b.jpg"/>
+        </item>
+        <item>
+            <title><![CDATA[You Can Get an Amazon Echo Pop and a Month of Amazon Music Unlimited for $15 Right Now]]></title>
+            <link>https://lifehacker.com/you-can-get-an-amazon-echo-pop-and-a-month-of-amazon-mu-1850883447</link>
+            <description><![CDATA[<img class="type:primaryImage" src="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/62d1ae12cbad6b09dfd9e149dea32294.jpg"/><p>Amazon’s <a class="sc-1out364-0 dPMosf sc-145m8ut-0 lcFFec js_link" href="https://lifehacker.com/amazon-officially-announces-prime-big-deal-days-for-202-1850848692" target="_blank" rel="noopener noreferrer">Prime Big Deal Days</a> are coming Oct. 10–11, offering Prime members exclusive deals on tons of stuff Amazon sells. But some of Amazon’s in-house tech products are already seeing discounts comparable to Prime Day. For example, the Echo Pop, Amazon’s newest and cheapest Alexa-enabled smart speaker, is currently…</p><p><a href="https://lifehacker.com/you-can-get-an-amazon-echo-pop-and-a-month-of-amazon-mu-1850883447">Read more...</a></p>]]></description>
+            <category>amazon</category>
+            <category>amazon echo</category>
+            <category>amazon music unlimited</category>
+            <category>amazon music</category>
+            <category>now</category>
+            <category>smart speakers</category>
+            <category>entertainment culture</category>
+            <category>ring</category>
+            <category>alexa</category>
+            <category>technology internet</category>
+            <category>internet of things</category>
+            <category>amazon alexa</category>
+            <pubDate>Thu, 28 Sep 2023 22:00:00 GMT</pubDate>
+            <guid isPermaLink="false">1850883447</guid>
+            <dc:creator><![CDATA[Daniel Oropeza]]></dc:creator>
+            <media:thumbnail url="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/62d1ae12cbad6b09dfd9e149dea32294.jpg"/>
+        </item>
+        <item>
+            <title><![CDATA[Where to Stream the Washington Vs. Arizona Game]]></title>
+            <link>https://lifehacker.com/where-to-stream-the-washington-vs-arizona-game-1850884048</link>
+            <description><![CDATA[<img class="type:primaryImage" src="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/1bca9f9fc8778162e56273f043246e6d.jpg"/><p>This week five matchup pits the Arizona Wildcats against the Washington Huskies. Washington is hoping to expand its undefeated 2023 record to 5-o, but the Wildcats are not going to roll over. While they’re definitely the underdog, Arizona is coming off a 21-20 win against Stanford, and the team’s 3-1 record is nothing…</p><p><a href="https://lifehacker.com/where-to-stream-the-washington-vs-arizona-game-1850884048">Read more...</a></p>]]></description>
+            <category>sling tv</category>
+            <category>sports</category>
+            <category>pac 12 network</category>
+            <category>fubotv</category>
+            <category>nfl</category>
+            <category>football</category>
+            <category>fubo</category>
+            <category>the nfl</category>
+            <pubDate>Thu, 28 Sep 2023 21:30:00 GMT</pubDate>
+            <guid isPermaLink="false">1850884048</guid>
+            <dc:creator><![CDATA[Stephen Johnson]]></dc:creator>
+            <media:thumbnail url="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/1bca9f9fc8778162e56273f043246e6d.jpg"/>
+        </item>
+        <item>
+            <title><![CDATA[How to Make Turkey Gravy Without Pan Drippings]]></title>
+            <link>https://lifehacker.com/how-to-make-turkey-gravy-without-pan-drippings-1830415802</link>
+            <description><![CDATA[<img class="type:primaryImage" src="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/8dbab0f0602df387cde4b90b295a4819.jpg"/><p>There is a certain (I think) overly romantic expectation that a good turkey gravy must be <a class="sc-1out364-0 dPMosf sc-145m8ut-0 lcFFec js_link" href="https://lifehacker.com/there-is-no-reason-to-not-make-your-own-turkey-gravy-1819991230" target="_blank" rel="noopener noreferrer">made from pan drippings</a>, and whisked together just moments before the Big Meal is put on the table. To this I say, “No thank you,” particularly when gravy can be made hours, days, or even weeks ahead of time, without any pan…</p><p><a href="https://lifehacker.com/how-to-make-turkey-gravy-without-pan-drippings-1830415802">Read more...</a></p>]]></description>
+            <category>gravy</category>
+            <category>giblets</category>
+            <category>pressure cooking</category>
+            <category>sauce</category>
+            <category>roux</category>
+            <category>mushroom gravy</category>
+            <category>sauces</category>
+            <category>thanksgiving food</category>
+            <category>red eye gravy</category>
+            <category>hospitality recreation</category>
+            <pubDate>Thu, 28 Sep 2023 21:15:00 GMT</pubDate>
+            <guid isPermaLink="false">1830415802</guid>
+            <dc:creator><![CDATA[Claire Lower]]></dc:creator>
+            <media:thumbnail url="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/8dbab0f0602df387cde4b90b295a4819.jpg"/>
+        </item>
+        <item>
+            <title><![CDATA[The Three Best Kitchen Countertops to Install Yourself]]></title>
+            <link>https://lifehacker.com/the-best-kitchen-countertops-to-install-yourself-1850880923</link>
+            <description><![CDATA[<img class="type:primaryImage" src="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/67882637fbde3b38aa5229139eecb2bb.jpg"/><p>If you’re considering a kitchen remodel, or you just need to replace your worn-out countertops, finding the right type of countertop might seem daunting. With costs for materials seemingly ever-increasing, staying on budget is a challenge. Finding a DIY solution can  be a great way to save money on your countertop…</p><p><a href="https://lifehacker.com/the-best-kitchen-countertops-to-install-yourself-1850880923">Read more...</a></p>]]></description>
+            <category>lamination</category>
+            <category>building materials</category>
+            <category>countertop</category>
+            <category>composite materials</category>
+            <category>furniture</category>
+            <pubDate>Thu, 28 Sep 2023 21:00:00 GMT</pubDate>
+            <guid isPermaLink="false">1850880923</guid>
+            <dc:creator><![CDATA[Becca Lewis]]></dc:creator>
+            <media:thumbnail url="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/67882637fbde3b38aa5229139eecb2bb.jpg"/>
+        </item>
+        <item>
+            <title><![CDATA[How to Rejuvenate the Soil in Your Raised Garden Beds]]></title>
+            <link>https://lifehacker.com/how-to-rejuvenate-soil-in-raised-garden-beds-1850882749</link>
+            <description><![CDATA[<img class="type:primaryImage" src="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/2f4636becfe0b343e26c27eb8fb053a2.jpg"/><p>It’s the end of the season, and we’re all starting to tuck in our garden beds for winter. The soil in your raised garden bed has worked hard all season to impart nutrients to your vegetables and flowers, which leaves the soil depleted. The long winter sleep is a great time to let your soil build back up the supply of…</p><p><a href="https://lifehacker.com/how-to-rejuvenate-soil-in-raised-garden-beds-1850882749">Read more...</a></p>]]></description>
+            <category>soil</category>
+            <category>no till farming</category>
+            <category>environment</category>
+            <category>permaculture</category>
+            <category>compost</category>
+            <category>cover crop</category>
+            <category>biointensive agriculture</category>
+            <category>sustainable gardening</category>
+            <category>composting</category>
+            <category>agricultural soil science</category>
+            <category>soil conditioner</category>
+            <category>hospitality recreation</category>
+            <category>mulch</category>
+            <category>organic gardening</category>
+            <category>human interest</category>
+            <pubDate>Thu, 28 Sep 2023 20:30:00 GMT</pubDate>
+            <guid isPermaLink="false">1850882749</guid>
+            <dc:creator><![CDATA[Amanda Blum]]></dc:creator>
+            <media:thumbnail url="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/2f4636becfe0b343e26c27eb8fb053a2.jpg"/>
+        </item>
+        <item>
+            <title><![CDATA[Make Super Smooth Mashed Potatoes With a Fine Mesh Strainer]]></title>
+            <link>https://lifehacker.com/how-to-make-mashed-potatoes-without-lumps-1850883812</link>
+            <description><![CDATA[<img class="type:primaryImage" src="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/74548fdafcdb068fb4b9e2592707d5dd.jpg"/><p>Mashed potatoes are easy enough to make, but getting them to that perfect, creamy texture is harder than it first appears. Fans of smooth spuds usually end up purchasing a ricer, which breaks down the spuds into tiny (rice-like) bits by forcing them through little holes. These extruded—but still fluffy—spud flecks are…</p><p><a href="https://lifehacker.com/how-to-make-mashed-potatoes-without-lumps-1850883812">Read more...</a></p>]]></description>
+            <category>potatoes</category>
+            <category>mashed potatoes</category>
+            <category>mashed</category>
+            <category>mash</category>
+            <category>aloo chokha</category>
+            <category>hospitality recreation</category>
+            <category>ricing</category>
+            <category>thanksgiving food</category>
+            <category>dutch cuisine</category>
+            <category>indian cuisine</category>
+            <category>thomas straker</category>
+            <category>stamppot</category>
+            <category>irish cuisine</category>
+            <category>potato masher</category>
+            <pubDate>Thu, 28 Sep 2023 20:00:00 GMT</pubDate>
+            <guid isPermaLink="false">1850883812</guid>
+            <dc:creator><![CDATA[Claire Lower]]></dc:creator>
+            <media:thumbnail url="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/74548fdafcdb068fb4b9e2592707d5dd.jpg"/>
+        </item>
+        <item>
+            <title><![CDATA[You Can Finally Use iCloud Keychain in Google Chrome]]></title>
+            <link>https://lifehacker.com/you-can-finally-use-icloud-keychain-in-google-chrome-1850883588</link>
+            <description><![CDATA[<img class="type:primaryImage" src="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/9e1ce1c39d2fda4fcbf4191028de549a.jpg"/><p>There’s a lot to love about Safari, but Google rules so much of the internet that using Chrome is sometimes a necessity. I can live with that, but what always frustrated me was the lack of iCloud Keychain compatibility. If I sign into an account in Safari, I can auto-fill passwords and 2FA codes with Touch ID every…</p><p><a href="https://lifehacker.com/you-can-finally-use-icloud-keychain-in-google-chrome-1850883588">Read more...</a></p>]]></description>
+            <category>google</category>
+            <category>google chrome</category>
+            <category>icloud</category>
+            <category>keychain</category>
+            <category>chrome</category>
+            <category>web browsers</category>
+            <category>password manager</category>
+            <category>webmail</category>
+            <category>chromeos</category>
+            <category>technology internet</category>
+            <category>cloud applications</category>
+            <category>passkey</category>
+            <category>safari</category>
+            <category>identity management</category>
+            <category>ios</category>
+            <pubDate>Thu, 28 Sep 2023 19:30:00 GMT</pubDate>
+            <guid isPermaLink="false">1850883588</guid>
+            <dc:creator><![CDATA[Jake Peterson]]></dc:creator>
+            <media:thumbnail url="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/9e1ce1c39d2fda4fcbf4191028de549a.jpg"/>
+        </item>
+        <item>
+            <title><![CDATA[Where to Stream the Oregon Vs. Stanford Game]]></title>
+            <link>https://lifehacker.com/where-to-stream-the-oregon-vs-stanford-game-1850883655</link>
+            <description><![CDATA[<img class="type:primaryImage" src="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/57c12290cdc50031b416532e5ae57ed3.jpg"/><p>The Stanford Cardinal and Oregon Ducks are facing off this weekend at Stanford in a lopsided Pac-12 matchup. The Ducks are undefeated this season and are heavy favorites to win—the spread is 17.5 points in Oregon’s favor.<br/></p><p><a href="https://lifehacker.com/where-to-stream-the-oregon-vs-stanford-game-1850883655">Read more...</a></p>]]></description>
+            <category>sling tv</category>
+            <category>sports</category>
+            <category>the nfl</category>
+            <category>pac 12 network</category>
+            <category>fubotv</category>
+            <category>nfl</category>
+            <category>football</category>
+            <pubDate>Thu, 28 Sep 2023 19:00:00 GMT</pubDate>
+            <guid isPermaLink="false">1850883655</guid>
+            <dc:creator><![CDATA[Stephen Johnson]]></dc:creator>
+            <media:thumbnail url="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/57c12290cdc50031b416532e5ae57ed3.jpg"/>
+        </item>
+        <item>
+            <title><![CDATA[Where to Stream the Penn State Vs. Northwestern Game]]></title>
+            <link>https://lifehacker.com/where-to-stream-the-penn-state-vs-northwestern-game-1850882748</link>
+            <description><![CDATA[<img class="type:primaryImage" src="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/f513e7f3324bbdbbc29195bfb2d6f8f6.jpg"/><p>This Saturday, Penn State is defending its nine-game winning streak when the team travels to Illinois to take on the Northwestern Wildcats in a Big Ten Conference game. Penn State is coming off a shutout victory against the Iowa Hawkeyes, scoring 31 unanswered points in a lopsided week-4 win. Northwestern is even at…</p><p><a href="https://lifehacker.com/where-to-stream-the-penn-state-vs-northwestern-game-1850882748">Read more...</a></p>]]></description>
+            <category>big ten conference</category>
+            <category>espn</category>
+            <category>sports</category>
+            <category>fox</category>
+            <category>fox sports 1</category>
+            <category>acc network</category>
+            <category>pac 12 network</category>
+            <category>fubotv</category>
+            <category>fox sports</category>
+            <category>nfl</category>
+            <category>football</category>
+            <category>espn college basketball</category>
+            <category>big ten network</category>
+            <category>xtreme fs1 headphoneheadset</category>
+            <category>college football on television</category>
+            <category>big ten network</category>
+            <pubDate>Thu, 28 Sep 2023 18:30:00 GMT</pubDate>
+            <guid isPermaLink="false">1850882748</guid>
+            <dc:creator><![CDATA[Stephen Johnson]]></dc:creator>
+            <media:thumbnail url="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/f513e7f3324bbdbbc29195bfb2d6f8f6.jpg"/>
+        </item>
+        <item>
+            <title><![CDATA[How to Fix Ugly Nail Pops in Your Walls]]></title>
+            <link>https://lifehacker.com/how-to-fix-nail-pops-in-walls-1850882251</link>
+            <description><![CDATA[<img class="type:primaryImage" src="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/b5e8d74bd7d8c8a431bcd031b990508e.jpg"/><p>Drywall is <a class="sc-1out364-0 dPMosf sc-145m8ut-0 lcFFec js_link" href="https://lifehacker.com/how-to-tell-if-a-wall-is-drywall-or-plaster-1849977986" target="_blank" rel="noopener noreferrer">relatively durable and cheap, and looks quite nice if installed and maintained correctly</a>. But it’s also easy to damage while you’re just living your life—and it can even damage itself, most commonly through the appearance of little bumps under the surface known as “nail pops.” (Despite the name, nail pops…</p><p><a href="https://lifehacker.com/how-to-fix-nail-pops-in-walls-1850882251">Read more...</a></p>]]></description>
+            <category>nail</category>
+            <category>woodworking</category>
+            <category>building materials</category>
+            <category>wall</category>
+            <category>fiberglass mesh</category>
+            <category>passive fire protection</category>
+            <category>drywall</category>
+            <category>screw</category>
+            <category>fasteners</category>
+            <pubDate>Thu, 28 Sep 2023 18:00:00 GMT</pubDate>
+            <guid isPermaLink="false">1850882251</guid>
+            <dc:creator><![CDATA[Jeff Somers]]></dc:creator>
+            <media:thumbnail url="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/b5e8d74bd7d8c8a431bcd031b990508e.jpg"/>
+        </item>
+        <item>
+            <title><![CDATA[All the ‘Single-Use’ Household Items You Should Be Re-Using]]></title>
+            <link>https://lifehacker.com/all-the-single-use-household-items-you-should-be-re-u-1850883065</link>
+            <description><![CDATA[<img class="type:primaryImage" src="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/1aea81cb0a4c2bf83388500c0b5b88ce.jpg"/><p>Part of being an adult is feeling the  constant need to replenish basic household supplies. One way to combat this loop is to be more mindful about <a class="sc-1out364-0 dPMosf sc-145m8ut-0 lcFFec js_link" href="https://lifehacker.com/the-smartest-ways-to-repurpose-household-items-in-your-1850473194" target="_blank" rel="noopener noreferrer">recycling and re-purposing your stuff</a>. But you can go one step further—there are many things we tend to treat as “single-use” that can, in fact, be used more than once.…</p><p><a href="https://lifehacker.com/all-the-single-use-household-items-you-should-be-re-u-1850883065">Read more...</a></p>]]></description>
+            <category>home appliances</category>
+            <category>plastic bag</category>
+            <category>shower</category>
+            <category>aluminium foil</category>
+            <category>washing machine</category>
+            <category>paper</category>
+            <category>packaging</category>
+            <category>mass production</category>
+            <category>hygiene</category>
+            <category>recycling</category>
+            <category>packaging materials</category>
+            <category>clothes dryer</category>
+            <pubDate>Thu, 28 Sep 2023 17:30:00 GMT</pubDate>
+            <guid isPermaLink="false">1850883065</guid>
+            <dc:creator><![CDATA[Jeff Somers]]></dc:creator>
+            <media:thumbnail url="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/1aea81cb0a4c2bf83388500c0b5b88ce.jpg"/>
+        </item>
+        <item>
+            <title><![CDATA[This Ring Doorbell and Floodlight Camera Bundle Is 40% Off Right Now]]></title>
+            <link>https://lifehacker.com/this-ring-doorbell-and-floodlight-camera-bundle-is-40-1850882729</link>
+            <description><![CDATA[<img class="type:primaryImage" src="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/633157bfb34851c585bb17437c8baceb.jpg"/><p>Amazon announced <a class="sc-1out364-0 dPMosf sc-145m8ut-0 lcFFec js_link" href="https://lifehacker.com/amazon-officially-announces-prime-big-deal-days-for-202-1850848692" target="_blank" rel="noopener noreferrer">Prime Big Deal Days</a> on October 10 and 11, during which Prime members can save on many products. But if you don’t feel like waiting, then you’ll appreciate Amazon’s deal on the <a class="sc-1out364-0 dPMosf sc-145m8ut-0 lcFFec js_link" href="https://zdcs.link/BJVK1" target="_blank" rel="noopener noreferrer">Ring Video Doorbell Pro 2 and Ring Floodlight Camera</a> bundle, currently going for 40% 0ff. The wired security camera bundle…</p><p><a href="https://lifehacker.com/this-ring-doorbell-and-floodlight-camera-bundle-is-40-1850882729">Read more...</a></p>]]></description>
+            <category>ring</category>
+            <category>doorbell</category>
+            <category>home automation</category>
+            <category>smart doorbell</category>
+            <category>google</category>
+            <category>homekit</category>
+            <category>crime mapping</category>
+            <category>amazon</category>
+            <pubDate>Thu, 28 Sep 2023 17:00:00 GMT</pubDate>
+            <guid isPermaLink="false">1850882729</guid>
+            <dc:creator><![CDATA[Daniel Oropeza]]></dc:creator>
+            <media:thumbnail url="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/633157bfb34851c585bb17437c8baceb.jpg"/>
+        </item>
+    </channel>
+</rss>
\ No newline at end of file
diff --git a/htdocs/cgi-bin/rss_output/rss_Perl_Weekly.rdf b/htdocs/cgi-bin/rss_output/rss_Perl_Weekly.rdf
new file mode 100644 (file)
index 0000000..08dee6f
--- /dev/null
@@ -0,0 +1,277 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<rdf:RDF
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns="http://purl.org/rss/1.0/"
+ xmlns:admin="http://webns.net/mvcb/"
+ xmlns:content="http://purl.org/rss/1.0/modules/content/"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:syn="http://purl.org/rss/1.0/modules/syndication/"
+ xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/"
+>
+
+<channel rdf:about="https://perlweekly.com/">
+<title>Perl Weekly newsletter</title>
+<link>https://perlweekly.com/</link>
+<description>A free, once a week e-mail round-up of hand-picked news and articles about Perl.</description>
+<dc:language>en-us</dc:language>
+<dc:rights>Copyright 2011-2023, Gabor Szabo</dc:rights>
+<dc:publisher>szabgab@gmail.com</dc:publisher>
+<syn:updateBase>2011-08-01T00:00+00:00</syn:updateBase>
+<syn:updateFrequency>1</syn:updateFrequency>
+<syn:updatePeriod>weekly</syn:updatePeriod>
+<items>
+ <rdf:Seq>
+  <rdf:li rdf:resource="https://job.perl.careers/huo" />
+  <rdf:li rdf:resource="https://job.perl.careers/2t3" />
+  <rdf:li rdf:resource="https://job.perl.careers/gxp" />
+  <rdf:li rdf:resource="https://job.perl.careers/wp0" />
+  <rdf:li rdf:resource="http://niceperl.blogspot.com/" />
+  <rdf:li rdf:resource="https://rakudoweekly.blog/2023/09/25/2023-39-releaseses/" />
+  <rdf:li rdf:resource="https://deoac.github.io/challenges/236/raku/task-2/index.html" />
+  <rdf:li rdf:resource="https://deoac.github.io/challenges/236/raku/task-1/index.html" />
+  <rdf:li rdf:resource="https://blog.firedrake.org/archive/2023/10/The_Weekly_Challenge_236__Change_for_the_Machines.html" />
+  <rdf:li rdf:resource="http://ccgi.campbellsmiths.force9.co.uk/challenge/236" />
+  <rdf:li rdf:resource="https://packy.dardan.com/2023/09/25/perl-weekly-challenge-exact-change-and-array-loops/" />
+  <rdf:li rdf:resource="https://github.com/MatthiasMuth/perlweeklychallenge-club/tree/muthm-236/challenge-236/matthias-muth#readme" />
+  <rdf:li rdf:resource="https://wlmb.github.io/2023/09/24/PWC236/" />
+  <rdf:li rdf:resource="https://fluca1978.github.io/2023/09/25/PerlWeeklyChallenge236.html" />
+  <rdf:li rdf:resource="https://egroup.kolouch.org/nextcloud/sites/lubos/2023-09-25_Weekly_challenge_236" />
+  <rdf:li rdf:resource="https://blogs.perl.org/users/laurent_r/2023/09/perl-weekly-challenge-236-array-loops.html" />
+  <rdf:li rdf:resource="https://blogs.perl.org/users/laurent_r/2023/09/perl-weekly-challenge-236-exact-change.html" />
+  <rdf:li rdf:resource="https://www.braincells.com/perl/2023/09/perl_weekly_challenge_week_236.html" />
+  <rdf:li rdf:resource="https://dev.to/boblied/pwc-236-task-2-the-circle-is-small-242g" />
+  <rdf:li rdf:resource="https://dev.to/boblied/pwc-236-task-1-a-change-would-do-you-good-3ia4" />
+  <rdf:li rdf:resource="https://dev.to/oldtechaa/perl-weekly-challenge-236-lemonade-stand-50p5" />
+  <rdf:li rdf:resource="https://raku-musings.com/changing-loops.html" />
+  <rdf:li rdf:resource="https://deadmarshal.blogspot.com/2023/09/twc236.html" />
+  <rdf:li rdf:resource="http://rabbitfarm.com/cgi-bin/blosxom/perl/2023/10/01" />
+  <rdf:li rdf:resource="https://theweeklychallenge.org/blog/meet-the-champion-2023-07/" />
+  <rdf:li rdf:resource="https://theweeklychallenge.org/blog/recap-challenge-236" />
+  <rdf:li rdf:resource="https://theweeklychallenge.org/blog/perl-weekly-challenge-237" />
+  <rdf:li rdf:resource="https://blogs.perl.org/users/haj/2023/09/writing-perl-with-emacs-are-there-perl-mode-users-around.html" />
+  <rdf:li rdf:resource="https://blogs.perl.org/users/chrisarg/2023/09/hash-of-arrays-deathmatch-native-perl-vs-dbmdeep-vs-redis.html" />
+  <rdf:li rdf:resource="https://blogs.perl.org/users/mikko_koivunalho/2023/09/plenv-libdirs.html" />
+  <rdf:li rdf:resource="https://hacktoberfest.com/" />
+  <rdf:li rdf:resource="https://opencollective.com/metacpan-core" />
+  <rdf:li rdf:resource="https://blogs.perl.org/users/psc/2023/09/this-week-in-psc-118.html" />
+  <rdf:li rdf:resource="https://perlweekly.com/archive/636.html" />
+ </rdf:Seq>
+</items>
+</channel>
+<item rdf:about="https://job.perl.careers/huo">
+<title>Adventure! Senior Perl roles in Malaysia, Dubai and Malta</title>
+<link>https://job.perl.careers/huo</link>
+<description>Clever folks know that if you&#x2019;re lucky, you can earn a living and have an adventure at the same time. Enter our international client: online trading is their game and they&#x2019;re looking for Perl people with passion, drive, and an appreciation for new experiences.</description>
+<dc:date>2023-10-02T10:00:33Z</dc:date>
+</item>
+<item rdf:about="https://job.perl.careers/2t3">
+<title>Perl Programmer Opportunity - Join a Prominent Tech Publishing Powerhouse in the Philippines</title>
+<link>https://job.perl.careers/2t3</link>
+<description>Our UK-based client is a global leader in the enterprise technology publishing industry, providing audiences worldwide with stimulating perspectives and unique news on enterprise tech that matters today and tomorrow. They are currently seeking a passionate and exceptional Perl programmer based in the Philippines to join their team.</description>
+<dc:date>2023-10-02T10:00:32Z</dc:date>
+</item>
+<item rdf:about="https://job.perl.careers/gxp">
+<title>UK Remote Perl Programmer for Leading Enterprise Tech Publication</title>
+<link>https://job.perl.careers/gxp</link>
+<description>Our client is a global leader in the enterprise technology publishing industry, providing audiences worldwide with stimulating perspectives and unique news on enterprise tech that matters today and tomorrow. They are seeking a talented Perl programmer to manage the full life-cycle of software projects on a remote basis.</description>
+<dc:date>2023-10-02T10:00:31Z</dc:date>
+</item>
+<item rdf:about="https://job.perl.careers/wp0">
+<title>Modern Perl and positive team vibes. UK Remote Perl role</title>
+<link>https://job.perl.careers/wp0</link>
+<description>If you&#x2019;re a Modern Perl developer in the UK with TypeScript or Node and you&#x2019;re searching for a team of dynamos, we&#x2019;ve found the perfect place for you. This award-winning company may be newer, but the combined experience of their people is impressive. No doubt this is one of the many reasons their AI recruitment marketing business has taken off!</description>
+<dc:date>2023-10-02T10:00:30Z</dc:date>
+</item>
+<item rdf:about="http://niceperl.blogspot.com/">
+<title>NICEPERL&#x27;s lists</title>
+<link>http://niceperl.blogspot.com/</link>
+<description>&#x3C;a href=&#x22;https://niceperl.blogspot.com/2023/09/cdlxiii-8-great-cpan-modules-released.html&#x22;&#x3E;Great CPAN modules released last week&#x3C;/a&#x3E;.</description>
+<dc:date>2023-10-02T10:00:29Z</dc:date>
+</item>
+<item rdf:about="https://rakudoweekly.blog/2023/09/25/2023-39-releaseses/">
+<title>2023.39 Releaseses</title>
+<link>https://rakudoweekly.blog/2023/09/25/2023-39-releaseses/</link>
+<description></description>
+<dc:date>2023-10-02T10:00:28Z</dc:date>
+</item>
+<item rdf:about="https://deoac.github.io/challenges/236/raku/task-2/index.html">
+<title>Challenge 236 Task 2: Array Loops</title>
+<link>https://deoac.github.io/challenges/236/raku/task-2/index.html</link>
+<description>Bonus post and here we have one more explaining the algorithm. Good job.</description>
+<dc:date>2023-10-02T10:00:27Z</dc:date>
+</item>
+<item rdf:about="https://deoac.github.io/challenges/236/raku/task-1/index.html">
+<title>Challenge 236 Task 1: Exact Change</title>
+<link>https://deoac.github.io/challenges/236/raku/task-1/index.html</link>
+<description>Well structured blog post sharing every little details, enough to keep you busy. Keep it up great work.</description>
+<dc:date>2023-10-02T10:00:26Z</dc:date>
+</item>
+<item rdf:about="https://blog.firedrake.org/archive/2023/10/The_Weekly_Challenge_236__Change_for_the_Machines.html">
+<title>Change for the Machines</title>
+<link>https://blog.firedrake.org/archive/2023/10/The_Weekly_Challenge_236__Change_for_the_Machines.html</link>
+<description>Glad that Roger got excited and we get more than we expected. Highly recommended.</description>
+<dc:date>2023-10-02T10:00:25Z</dc:date>
+</item>
+<item rdf:about="http://ccgi.campbellsmiths.force9.co.uk/challenge/236">
+<title>Change and loops</title>
+<link>http://ccgi.campbellsmiths.force9.co.uk/challenge/236</link>
+<description>Code analysis is precise and to the point. You could just jump and try the solution straight away.</description>
+<dc:date>2023-10-02T10:00:24Z</dc:date>
+</item>
+<item rdf:about="https://packy.dardan.com/2023/09/25/perl-weekly-challenge-exact-change-and-array-loops/">
+<title>Perl Weekly Challenge: Exact Change and Array Loops</title>
+<link>https://packy.dardan.com/2023/09/25/perl-weekly-challenge-exact-change-and-array-loops/</link>
+<description>Enjoy the bonus Python and java on top of Perl and Raku. Keep it up great work.</description>
+<dc:date>2023-10-02T10:00:23Z</dc:date>
+</item>
+<item rdf:about="https://github.com/MatthiasMuth/perlweeklychallenge-club/tree/muthm-236/challenge-236/matthias-muth#readme">
+<title>Bills in Loops, and Loops in Arrays</title>
+<link>https://github.com/MatthiasMuth/perlweeklychallenge-club/tree/muthm-236/challenge-236/matthias-muth#readme</link>
+<description>Well documented solutions as always and plenty to learn too. Thanks for sharing.</description>
+<dc:date>2023-10-02T10:00:22Z</dc:date>
+</item>
+<item rdf:about="https://wlmb.github.io/2023/09/24/PWC236/">
+<title>Perl Weekly Challenge 236</title>
+<link>https://wlmb.github.io/2023/09/24/PWC236/</link>
+<description>Breaking the tradition, we have 2-liners in Perl by the man himself. You don&#x27;t want to skip it.</description>
+<dc:date>2023-10-02T10:00:21Z</dc:date>
+</item>
+<item rdf:about="https://fluca1978.github.io/2023/09/25/PerlWeeklyChallenge236.html">
+<title>Arrays and Loops</title>
+<link>https://fluca1978.github.io/2023/09/25/PerlWeeklyChallenge236.html</link>
+<description>Without any jargons, here we have simple yet elegant Raku solution. Thank you Luca.</description>
+<dc:date>2023-10-02T10:00:20Z</dc:date>
+</item>
+<item rdf:about="https://egroup.kolouch.org/nextcloud/sites/lubos/2023-09-25_Weekly_challenge_236">
+<title>THE WEEKLY CHALLENGE - 236</title>
+<link>https://egroup.kolouch.org/nextcloud/sites/lubos/2023-09-25_Weekly_challenge_236</link>
+<description>Breakdown of process makes it so easy to follow the logic. Please keep sharing blog.</description>
+<dc:date>2023-10-02T10:00:19Z</dc:date>
+</item>
+<item rdf:about="https://blogs.perl.org/users/laurent_r/2023/09/perl-weekly-challenge-236-array-loops.html">
+<title>Perl Weekly Challenge 236: Array Loops</title>
+<link>https://blogs.perl.org/users/laurent_r/2023/09/perl-weekly-challenge-236-array-loops.html</link>
+<description>Cool use of &#x27;loop&#x27; of Raku. The language never stops surprising me.</description>
+<dc:date>2023-10-02T10:00:18Z</dc:date>
+</item>
+<item rdf:about="https://blogs.perl.org/users/laurent_r/2023/09/perl-weekly-challenge-236-exact-change.html">
+<title>Perl Weekly Challenge 236: Exact Change</title>
+<link>https://blogs.perl.org/users/laurent_r/2023/09/perl-weekly-challenge-236-exact-change.html</link>
+<description>You have clean and verbose solutions in Perl and Raku, like always. Well done and thanks.</description>
+<dc:date>2023-10-02T10:00:17Z</dc:date>
+</item>
+<item rdf:about="https://www.braincells.com/perl/2023/09/perl_weekly_challenge_week_236.html">
+<title>Perl Weekly Challenge: Week 236</title>
+<link>https://www.braincells.com/perl/2023/09/perl_weekly_challenge_week_236.html</link>
+<description>I like the rarely used given/when in Perl solution. You also get bonus Raku version. Thanks for sharing.</description>
+<dc:date>2023-10-02T10:00:16Z</dc:date>
+</item>
+<item rdf:about="https://dev.to/boblied/pwc-236-task-2-the-circle-is-small-242g">
+<title>The Circle Is Small</title>
+<link>https://dev.to/boblied/pwc-236-task-2-the-circle-is-small-242g</link>
+<description>You are served with multiple approaches for this week solution. You must checkout.</description>
+<dc:date>2023-10-02T10:00:15Z</dc:date>
+</item>
+<item rdf:about="https://dev.to/boblied/pwc-236-task-1-a-change-would-do-you-good-3ia4">
+<title>A Change Would Do You Good</title>
+<link>https://dev.to/boblied/pwc-236-task-1-a-change-would-do-you-good-3ia4</link>
+<description>Simple use of pop/push can be more than enough to get the job done. Please checkout to figure out.</description>
+<dc:date>2023-10-02T10:00:14Z</dc:date>
+</item>
+<item rdf:about="https://dev.to/oldtechaa/perl-weekly-challenge-236-lemonade-stand-50p5">
+<title>Lemonade Stand</title>
+<link>https://dev.to/oldtechaa/perl-weekly-challenge-236-lemonade-stand-50p5</link>
+<description>You can never the simplicity of the language to explain the logic. Great work, keep it up.</description>
+<dc:date>2023-10-02T10:00:13Z</dc:date>
+</item>
+<item rdf:about="https://raku-musings.com/changing-loops.html">
+<title>Changing Loops</title>
+<link>https://raku-musings.com/changing-loops.html</link>
+<description>Good show of BagHash, new to me. Thank you for entertaining us with Raku magic every week.</description>
+<dc:date>2023-10-02T10:00:12Z</dc:date>
+</item>
+<item rdf:about="https://deadmarshal.blogspot.com/2023/09/twc236.html">
+<title>TWC236</title>
+<link>https://deadmarshal.blogspot.com/2023/09/twc236.html</link>
+<description>Lots of Perl magic used in this week solutions. Thank you Ali.</description>
+<dc:date>2023-10-02T10:00:11Z</dc:date>
+</item>
+<item rdf:about="http://rabbitfarm.com/cgi-bin/blosxom/perl/2023/10/01">
+<title>Exact Array Loops</title>
+<link>http://rabbitfarm.com/cgi-bin/blosxom/perl/2023/10/01</link>
+<description>I noticed the use of &#x27;redo&#x27; after a long time. Nice solutions without any complications. Thanks for sharing.</description>
+<dc:date>2023-10-02T10:00:10Z</dc:date>
+</item>
+<item rdf:about="https://theweeklychallenge.org/blog/meet-the-champion-2023-07/">
+<title>Meet The Champion - Mariano Spadaccini</title>
+<link>https://theweeklychallenge.org/blog/meet-the-champion-2023-07/</link>
+<description>Please checkout the interview with the recent champion.</description>
+<dc:date>2023-10-02T10:00:09Z</dc:date>
+</item>
+<item rdf:about="https://theweeklychallenge.org/blog/recap-challenge-236">
+<title>RECAP - The Weekly Challenge - 236</title>
+<link>https://theweeklychallenge.org/blog/recap-challenge-236</link>
+<description>Enjoy a quick recap of last week&#x27;s contributions by Team PWC dealing with the &#x22;Exact Change&#x22; and &#x22;Array Loops&#x22; tasks in Perl and Raku. You will find plenty of solutions to keep you busy.</description>
+<dc:date>2023-10-02T10:00:08Z</dc:date>
+</item>
+<item rdf:about="https://theweeklychallenge.org/blog/perl-weekly-challenge-237">
+<title>The Weekly Challenge - 237</title>
+<link>https://theweeklychallenge.org/blog/perl-weekly-challenge-237</link>
+<description>Welcome to a new week with a couple of fun tasks: &#x22;Seize The Day&#x22; and &#x22;Maximise Greatness&#x22;. If you are new to the weekly challenge, why not join us and have fun every week? For more information, please read the &#x3C;a href=&#x22;https://theweeklychallenge.org/faq&#x22;&#x3E;FAQ&#x3C;/a&#x3E;.</description>
+<dc:date>2023-10-02T10:00:07Z</dc:date>
+</item>
+<item rdf:about="https://blogs.perl.org/users/haj/2023/09/writing-perl-with-emacs-are-there-perl-mode-users-around.html">
+<title>Writing Perl with Emacs: Are there perl-mode users around?</title>
+<link>https://blogs.perl.org/users/haj/2023/09/writing-perl-with-emacs-are-there-perl-mode-users-around.html</link>
+<description>For all emacs users, please checkout the latest update to cperl-mode to edit Perl code.</description>
+<dc:date>2023-10-02T10:00:06Z</dc:date>
+</item>
+<item rdf:about="https://blogs.perl.org/users/chrisarg/2023/09/hash-of-arrays-deathmatch-native-perl-vs-dbmdeep-vs-redis.html">
+<title>Hash of Arrays Deathmatch : Native Perl vs. DBM::Deep vs. Redis</title>
+<link>https://blogs.perl.org/users/chrisarg/2023/09/hash-of-arrays-deathmatch-native-perl-vs-dbmdeep-vs-redis.html</link>
+<description>A detailed comparison to help you understand the pros/cons. Please keep us busy with more such posts.</description>
+<dc:date>2023-10-02T10:00:05Z</dc:date>
+</item>
+<item rdf:about="https://blogs.perl.org/users/mikko_koivunalho/2023/09/plenv-libdirs.html">
+<title>plenv-libdirs</title>
+<link>https://blogs.perl.org/users/mikko_koivunalho/2023/09/plenv-libdirs.html</link>
+<description>If you are fan of plenv the this plugin would be very handy. How? You need to checkout the post for more details.</description>
+<dc:date>2023-10-02T10:00:04Z</dc:date>
+</item>
+<item rdf:about="https://hacktoberfest.com/">
+<title>Hacktoberfest 2023</title>
+<link>https://hacktoberfest.com/</link>
+<description>The annual festival is live and kicking. Please do join and contribute to open source projects on GitHub.</description>
+<dc:date>2023-10-02T10:00:03Z</dc:date>
+</item>
+<item rdf:about="https://opencollective.com/metacpan-core">
+<title>MetaCPAN Core Contributors</title>
+<link>https://opencollective.com/metacpan-core</link>
+<description>Please do come forward and support MetaCPAN Core. As of now, we have 19 contributors. It would be nice to see this grow with your support.</description>
+<dc:date>2023-10-02T10:00:02Z</dc:date>
+</item>
+<item rdf:about="https://blogs.perl.org/users/psc/2023/09/this-week-in-psc-118.html">
+<title>This Week in PSC (118)</title>
+<link>https://blogs.perl.org/users/psc/2023/09/this-week-in-psc-118.html</link>
+<description>Another update by PSC team.</description>
+<dc:date>2023-10-02T10:00:01Z</dc:date>
+</item>
+<item rdf:about="https://perlweekly.com/archive/636.html">
+<title>#636 - Happy Birthday Larry</title>
+<link>https://perlweekly.com/archive/636.html</link>
+<description>&#x3C;p&#x3E;Hi there,&#x3C;/p&#x3E;
+&#x3C;p&#x3E;A belated, &#x3C;strong&#x3E;Happy Birthday&#x3C;/strong&#x3E; to the creator of &#x3C;strong&#x3E;Perl&#x3C;/strong&#x3E;. May the joy that you have spread in the past come back to you on this day. Just for record, the birthday was on &#x3C;strong&#x3E;27th September&#x3C;/strong&#x3E;.&#x3C;/p&#x3E;
+&#x3C;p&#x3E;Do you use &#x3C;strong&#x3E;homebrew&#x3C;/strong&#x3E;?&#x3C;/p&#x3E;
+&#x3C;p&#x3E;&#x3C;strong&#x3E;brian d foy&#x3C;/strong&#x3E; did all the hard work to get &#x3C;strong&#x3E;homebrew&#x3C;/strong&#x3E; up to the latest &#x3C;strong&#x3E;Perl v5.38&#x3C;/strong&#x3E;. If you are keen to know the details then please do &#x3C;a href=&#x22;https://github.com/Homebrew/homebrew-core/pull/145939&#x22;&#x3E;checkout the pull request&#x3C;/a&#x3E;.&#x3C;/p&#x3E;
+&#x3C;p&#x3E;&#x3C;strong&#x3E;Olaf Alders&#x3C;/strong&#x3E; recently shared his cool creation, &#x3C;a href=&#x22;https://github.com/oalders/is&#x22;&#x3E;is: an inspector for your environment&#x3C;/a&#x3E;. I am sure for all &#x3C;strong&#x3E;System Administrators&#x3C;/strong&#x3E; out there, it would be very handy.&#x3C;/p&#x3E;
+&#x3C;p&#x3E;I am not sure, if you noticed this but &#x3C;a href=&#x22;https://perlmonks.org/&#x22;&#x3E;Perl Mongers&#x3C;/a&#x3E; certificate expired few days ago. I only noticed as one of the contributor to &#x3C;a href=&#x22;https://theweeklychallenge.org&#x22;&#x3E;The Weekly Challenge&#x3C;/a&#x3E; shared link to the site. The very next day, I saw post by &#x3C;strong&#x3E;Olaf Alders&#x3C;/strong&#x3E; on Twitter talking about it and sharing the &#x3C;a href=&#x22;https://www.prettygoodping.com&#x22;&#x3E;tool&#x3C;/a&#x3E; that can help avoid such incident in future. The certificate has now been restored.&#x3C;/p&#x3E;
+&#x3C;p&#x3E;Do you know the current maintainer of &#x3C;strong&#x3E;CPAN Testers&#x3C;/strong&#x3E; server?&#x3C;/p&#x3E;
+&#x3C;p&#x3E;I saw &#x3C;a href=&#x22;https://www.facebook.com/groups/perlcommunity/permalink/1538251906982430&#x22;&#x3E;Facebook post&#x3C;/a&#x3E; by &#x3C;strong&#x3E;Mark Keating&#x3C;/strong&#x3E; just few days ago. I remember, &#x3C;strong&#x3E;Doug Bell&#x3C;/strong&#x3E; helped many years ago when I was playing daily &#x3C;strong&#x3E;CPAN&#x3C;/strong&#x3E; upload games. He gave me access to deal with the issues I was facing at the time. I just hope, it stays live and kicking. It is the second best thing for us after &#x3C;strong&#x3E;MetaCPAN&#x3C;/strong&#x3E;. If you are interested to sponsor the &#x3C;strong&#x3E;MetaCPAN&#x3C;/strong&#x3E; then you now have plenty of different options. Please find out more about it in the &#x3C;a href=&#x22;https://opencollective.com/metacpan-core&#x22;&#x3E;official announcement&#x3C;/a&#x3E; page.&#x3C;/p&#x3E;
+&#x3C;p&#x3E;For all newbies wanted to explore &#x3C;strong&#x3E;Perl&#x3C;/strong&#x3E;, please checkout the &#x3C;a href=&#x22;https://www.i-programmer.info/news/222-perl/16624-learn-perl-with-freecodecamp.html&#x22;&#x3E;Perl Programming Course&#x3C;/a&#x3E; by &#x3C;strong&#x3E;FreeCodeCamp&#x3C;/strong&#x3E;. Thank you &#x3C;strong&#x3E;Nikos Vaggalis&#x3C;/strong&#x3E; for sharing this with us.&#x3C;/p&#x3E;
+&#x3C;p&#x3E;The annual event, &#x3C;strong&#x3E;Hacktoberfest 2023&#x3C;/strong&#x3E; is back. If you contribute to opensource projects on &#x3C;strong&#x3E;GitHub&#x3C;/strong&#x3E; then I would highly recommend to take part in the event. For more details, please &#x3C;a href=&#x22;https://hacktoberfest.com&#x22;&#x3E;checkout the announcement&#x3C;/a&#x3E;.&#x3C;/p&#x3E;
+&#x3C;p&#x3E;Enjoy rest of the newsletter.&#x3C;/p&#x3E;</description>
+<dc:date>2023-10-02T10:00:00Z</dc:date>
+<dc:subject>editorial</dc:subject>
+</item>
+</rdf:RDF>
\ No newline at end of file
diff --git a/htdocs/cgi-bin/rss_output/rss_Politico.rdf b/htdocs/cgi-bin/rss_output/rss_Politico.rdf
new file mode 100644 (file)
index 0000000..fb09657
--- /dev/null
@@ -0,0 +1,967 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:maz="http://www.mazdigital.com/media/" xmlns:media="http://search.yahoo.com/mrss/" version="2.0">
+  <channel>
+    <atom:link href="https://www.politico.com/rss/politicopicks.xml" rel="self" type="application/rss+xml"/>
+    <title>Politics, Policy, Political News Top Stories</title>
+    <link>https://www.politico.com/</link>
+    <description>Politics, Policy, Political News Top Stories</description>
+    <language>en-us</language>
+    <copyright>2023 POLITICO</copyright>
+    <pubDate>Mon, 02 Oct 2023 01:25:36 EST</pubDate>
+    <item>
+      <title>Gaming out Matt Gaetz’s bid to oust Kevin McCarthy</title>
+      <link>https://www.politico.com/news/2023/10/01/mccarthy-gaetz-speakership-battle-00119355</link>
+      <description>Both Republicans likely need the support of Democrats to prevail in their battle over the speakership. Here’s how that could shake out.</description>
+      <guid>https://www.politico.com/news/2023/10/01/mccarthy-gaetz-speakership-battle-00119355</guid>
+      <pubDate>Sun, 01 Oct 2023 14:01:03 EST</pubDate>
+      <dc:creator>Ryan Lizza</dc:creator>
+      <dc:contributor>Ryan Lizza</dc:contributor>
+      <media:content type="image/jpeg" url="https://static.politico.com/dc/8e/507e5065404c8705e1bba97022ee/congress-budget-94515.jpg">
+        <media:credit scheme="urn:ebu">J. Scott Applewhite/AP Photo</media:credit>
+        <media:title type="html">Rep. Matt Gaetz appears before the House Rules Committee at the Capitol in Washington on Sept. 22, 2023.</media:title>
+        <media:thumbnail url="https://static.politico.com/dc/8e/507e5065404c8705e1bba97022ee/congress-budget-94515.jpg"/>
+      </media:content>
+      <maz:template>core</maz:template>
+      <maz:modified>1696186863560</maz:modified>
+      <content:encoded>
+        <![CDATA[<img src="https://static.politico.com/dc/8e/507e5065404c8705e1bba97022ee/congress-budget-94515.jpg"> <br> <p>House Minority Leader Hakeem Jeffries has a big decision to make.</p> <p>In the run-up to preventing a government shutdown, any questions about what the Democrats would do in the event of a vote to oust Kevin McCarthy as speaker were easily batted aside as too theoretical to entertain.</p> <p>“We haven’t given any thought to how to handle a hypothetical motion to vacate, because we are entirely focused on making sure that we avoid this extreme MAGA Republican shutdown,” Jeffries said last week.</p> <p>But avoiding the shutdown has now led directly to a vote on a motion to vacate.</p> <p>Rep. Matt Gaetz (R-Fla.) repeatedly threatened that the passage of a continuing resolution would trigger the introduction of the MTV that he’s had in his back pocket for weeks. After the CR passed yesterday, Gaetz promised that it will happen this week.</p> <p>“If somebody wants to make a motion against me, bring it,” McCarthy told reporters defiantly yesterday.</p> <p>“Kevin McCarthy’s gonna get his wish,” Gaetz <a href="https://twitter.com/jonkarl/status/1708480080844907001?s=20" target="_blank" link-data="{&quot;cms.site.owner&quot;:{&quot;_ref&quot;:&quot;0000014b-3270-d4f3-a3cb-f3ffa8610000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff4161000e&quot;},&quot;cms.content.publishDate&quot;:1696181890801,&quot;cms.content.publishUser&quot;:{&quot;_ref&quot;:&quot;00000180-f751-d6b4-a7e5-f7d9bbd30000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;cms.content.updateDate&quot;:1696181890801,&quot;cms.content.updateUser&quot;:{&quot;_ref&quot;:&quot;00000180-f751-d6b4-a7e5-f7d9bbd30000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;originalTemplate&quot;:false,&quot;link&quot;:{&quot;originalTemplate&quot;:false,&quot;attributes&quot;:[],&quot;target&quot;:&quot;NEW&quot;,&quot;url&quot;:&quot;https://twitter.com/jonkarl/status/1708480080844907001?s=20&quot;,&quot;_id&quot;:&quot;0000018a-ec51-d56c-abfa-ec7da5ad0001&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;linkText&quot;:&quot;responded this morning&quot;,&quot;_id&quot;:&quot;0000018a-ec51-d56c-abfa-ec7da5ad0000&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">responded this morning</a> on ABC’s “This Week.”<br></p> <br><iframe style="max-width: 100%" width="1280" height="720" src="https://players.brightcove.net/1155968404/r1WF6V0Pl_default/index.html?videoId=6338195646112" frameborder="0"></iframe> <br> <p>POLITICO Playbook spoke with a number of House Democrats this morning about how they will respond. So let’s unpack the politics of this.</p> <p>Let’s assume Gaetz starts with only a handful of Republicans — perhaps just five, maybe as many as 10 — and that McCarthy has no chance of turning this group around. It’s not much, and that means Gaetz needs Democrats — perhaps as many as 200 — to oust McCarthy. (Ironic considering that his line today was that McCarthy is the Democrats’ speaker.)</p> <p>The biggest pocket of votes for Gaetz right off the bat will be the Democrats in the Congressional Progressive Caucus. They hate Gaetz, but more important, it could be suicide for any of the CPC’s 100-plus members to vote to save McCarthy. (And a motion to table Gaetz’s resolution, while not <i>technically</i> a vote for McCarthy, will easily be spun that way.)</p> <p>Not surprisingly, <a href="https://www.politico.com/live-updates/2023/09/29/congress/gaetz-courts-dems-00119085" target="_blank" link-data="{&quot;linkText&quot;:&quot;as POLITICO first reported&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.politico.com/live-updates/2023/09/29/congress/gaetz-courts-dems-00119085&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a180000&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a180001&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">as POLITICO first reported</a>, CPC Chair Pramila Jayapal (D-Wash.) is one of the first Democrats to whom Gaetz reached out. Right on cue, Rep. Alexandria Ocasio-Cortez, who represents a D+28 district in New York, was on CNN this morning saying she would “absolutely” vote to oust McCarthy.</p> <p>Both Gaetz and some Democrats we’ve talked to today believe it is naïve to assume that some discussion of the motion to vacate didn’t come up in the conversations between McCarthy and Dem leaders that birthed the bipartisan CR vote. Since McCarthy knew that the MTV would follow a CR, it would be unusual if he didn’t have some indication from Dems about their views on the vote that will determine his future. One likely response to nudge McCarthy in their direction surely would have been that there would be nothing to discuss if he shut down the government. But for now, the existence of any kind of backchannel discussions is speculation.</p> <p>One senior Democratic lawmaker told us this morning that the instructions from leadership to “all Dems” right now is “keeping powder dry.”</p> <p>While Gaetz might be right that he can get lots of votes from progressives, his only chance after that is if Jeffries himself locks down the caucus in favor of the MTV. But that could take some persuading. For a bloc of moderates — a mix of perhaps 25 to 40 Blue Dogs, Problem Solvers and Democrats in Trump districts — a vote to prove their bipartisan credentials by keeping McCarthy as speaker could be very tempting.</p> <p>All of this is to say that if Gaetz only has 5-10 Republican votes, McCarthy may have an achievable path to victory.</p> <p>But that’s also not Gaetz’s only potential move.<br></p> <br><iframe style="max-width: 100%" width="1280" height="720" src="https://players.brightcove.net/1155968404/r1WF6V0Pl_default/index.html?videoId=6338200004112" frameborder="0"></iframe> <br> <p>If McCarthy survives with the help of Democratic votes, Gaetz will no doubt relentlessly attack him, as he has already, as “the Democrats’ speaker.” The overall effort will have done a lot of damage. What if Gaetz offers a second MTV, as anyone who knows him realizes he surely would, and McCarthy again has to survive with Democratic help? What happens on the second or third vote? Does Gaetz garner more Republican support? Does McCarthy need to find more Democratic support? There’s no limit to how many times Gaetz could do this. Eventually, this would become untenable for McCarthy.</p> <p>Democrats who take a position on the first MTV will need to consider that they may be locking themselves into a position on a vote that might be repeated.</p> <p>What might a deal with McCarthy look like from Jeffries’ perspective? It is highly unlikely that Jeffries would ever demand all Democrats vote to save McCarthy; several Dem members told Playbook this morning that was impossible to imagine. But what he <i>could</i> do is decline to lock down the caucus and let Democrats vote their conscience (or their district). That could leave moderates with room to help McCarthy. But surely those individual moderates would also want something from McCarthy. Maybe a promise not to spend NRCC money in their races? There are a lot of ideas floating around out there.</p> <p>McCarthy has a card to play if he survives the first (or more) attack from Gaetz: He could try to pass a rule that raises the threshold for a motion to vacate from one member, where it is now, to, say, 10 members. How would he get the votes? Perhaps some of the Democrats who cut a deal to save McCarthy agree to vote for this rule as well. That would finally decapitate Gaetz.</p> <p>Stepping back from the chess game, the big question all Democrats have to answer — and quick — is whether it’s better to have McCarthy as speaker or not.</p> <p>On the pro-keeping-McCarthy side of the ledger is that he’s the devil they know, and there is nobody better waiting in the wings. By avoiding the government shutdown, he also just showed he can be more responsible than some Democrats had believed. It could also take two weeks for another speaker to emerge from the ashes of the chaos, all while the White House and Democrats are trying to push through aid for Ukraine and fund the government over the next 45 or so days. And if you are at the White House and care about all of this, in addition to the fate of the impeachment inquiry, <a href="https://www.politico.com/news/2023/09/22/pbdd-house-minority-whip-katherine-clark-dems-00117441" target="_blank" link-data="{&quot;linkText&quot;:&quot;which Democrats have already raised as an issue in any discussion of helping McCarthy&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.politico.com/news/2023/09/22/pbdd-house-minority-whip-katherine-clark-dems-00117441&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a180002&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a180003&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">which Democrats have already raised as an issue in any discussion of helping McCarthy</a>, then McCarthy may be the better bet. This is the institutionalists’ argument.</p> <p>The other side of the argument is that McCarthy is the GOP’s greatest fundraiser, and getting rid of him would help Democrats take back the House. No replacement for McCarthy would have the same set of relationships and the donor network and political operation. In addition, the argument goes, the GOP chaos in the House would pay political dividends.</p> <p>One thing is clear: For the 53-year-old Jeffries, this is an unprecedented situation, one that no minority leader has <i>ever</i> faced. He suddenly has enormous leverage, but will have to weigh carefully how aggressively to use it.</p> <p><b><i>Like this content? Consider signing up for POLITICO's Playbook newsletter. </i></b><br></p> <br>]]>
+      </content:encoded>
+    </item>
+    <item>
+      <title>‘Adopt Kevin or ditch him’: McCarthy’s speakership now at the mercy of Dems</title>
+      <link>https://www.politico.com/news/2023/10/01/mccarthy-speakership-mercy-democrats-00119359</link>
+      <description>Some progressives vowed not to bail him out, but Hakeem Jeffries hasn't shown his hand.</description>
+      <guid>https://www.politico.com/news/2023/10/01/mccarthy-speakership-mercy-democrats-00119359</guid>
+      <pubDate>Sun, 01 Oct 2023 13:59:43 EST</pubDate>
+      <dc:creator>Olivia Beavers and Nicholas Wu</dc:creator>
+      <dc:contributor>Olivia Beavers and Nicholas Wu</dc:contributor>
+      <media:content type="image/jpeg" url="https://static.politico.com/0c/2c/cec97e0d45939e93c04669ced1b0/kevin-mccarthy-90103.jpg">
+        <media:credit scheme="urn:ebu">Francis Chung/POLITICO</media:credit>
+        <media:title type="html">House Speaker Kevin McCarthy could face an unusual alliance of those on both ends of the political spectrum.</media:title>
+        <media:thumbnail url="https://static.politico.com/0c/2c/cec97e0d45939e93c04669ced1b0/kevin-mccarthy-90103.jpg"/>
+      </media:content>
+      <maz:template>core</maz:template>
+      <maz:modified>1696215185568</maz:modified>
+      <content:encoded>
+        <![CDATA[<img src="https://static.politico.com/0c/2c/cec97e0d45939e93c04669ced1b0/kevin-mccarthy-90103.jpg"> <br> <p>The fate of Kevin McCarthy’s speakership now rests in House Democrats' hands.</p> <p>After relying on Democrats to keep the government funded Saturday, the GOP leader is expected to need them to bail him out again, as Rep. Matt Gaetz (R-Fla.) vows to trigger a conservative-led effort to oust him this week.</p> <p>Some House conservatives predict there are at least a dozen GOP members ready to support a so-called motion to vacate against McCarthy, according to conversations with multiple House Republicans. While one House conservative said they know of at least seven guaranteed votes for the measure, others predicted there are as many as 24 who could ultimately support it.</p> <p>That will push the House into new territory this week — a rare instance in which the minority dictates a course of action in the chamber — as Democrats weigh whether to step in to shield McCarthy. The speaker will need 218 votes to keep his job. Some Republicans and Democrats believe they could round up enough votes to keep him in power — at least in the short term — but it is not a given.</p> <p>“Enough where House Democrats have a choice: adopt Kevin or ditch him,” Rep. Matt Gaetz (R-Fla.) told POLITICO when asked how many Republicans support his measure. “After this week Kevin McCarthy won’t belong to me anymore.”</p> <p>Unless some major shift occurs among the hardliners in the coming days, Democrats will control McCarthy’s fate. Some Democrats have floated trying to extract concessions from the speaker in exchange for bailing him out. And several progressives have openly discussed banding together with conservative hardliners to vote against McCarthy.</p> <p>“We're not saving the speaker,” Progressive Caucus Chair Pramila Jayapal (D-Wash.) said Saturday. Her roughly 100-lawmaker group, which has held spirited discussions in the past week on the issue, has proposed a potential power-sharing agreement with Republicans as one offramp from the motion to vacate.</p> <p>Ahead of formally announcing his plans and before the short-term spending vote, Gaetz approached multiple Democrats — mostly progressives, including Jayapal — to gauge how they would respond if he filed a motion to vacate, <a href="https://www.politico.com/live-updates/2023/09/29/congress/gaetz-courts-dems-00119085" target="_blank" link-data="{&quot;linkText&quot;:&quot;POLITICO first reported&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.politico.com/live-updates/2023/09/29/congress/gaetz-courts-dems-00119085&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a1e0000&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a1e0001&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">POLITICO first reported</a>.<br></p> <br><iframe style="max-width: 100%" width="1280" height="720" src="https://players.brightcove.net/1155968404/r1WF6V0Pl_default/index.html?videoId=6338195646112" frameborder="0"></iframe> <br> <p>Yet, while House Democratic leaders haven't yet ruled out whipping on a motion to vacate, dozens of House Democrats are expected to vote present or abstain as a way of nodding toward McCarthy after he passed the bipartisan short-term spending deal, according to multiple Democrats familiar with the discussions. Voting “present” on the motion would allow Democrats to avoid having to take a direct vote to save or toss the speaker.</p> <p>Democratic support is more likely to materialize if McCarthy holds a vote to send <a href="https://www.politico.com/live-updates/2023/09/30/congress/ukraine-aid-outlook-00119294" target="_blank" link-data="{&quot;cms.site.owner&quot;:{&quot;_ref&quot;:&quot;0000014b-3270-d4f3-a3cb-f3ffa8610000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff4161000e&quot;},&quot;cms.content.publishDate&quot;:1696186393925,&quot;cms.content.publishUser&quot;:{&quot;_ref&quot;:&quot;00000180-f751-d6b4-a7e5-f7d9bbd30000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;cms.content.updateDate&quot;:1696186393925,&quot;cms.content.updateUser&quot;:{&quot;_ref&quot;:&quot;00000180-f751-d6b4-a7e5-f7d9bbd30000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;originalTemplate&quot;:false,&quot;link&quot;:{&quot;originalTemplate&quot;:false,&quot;attributes&quot;:[],&quot;target&quot;:&quot;NEW&quot;,&quot;url&quot;:&quot;https://www.politico.com/live-updates/2023/09/30/congress/ukraine-aid-outlook-00119294&quot;,&quot;_id&quot;:&quot;0000018a-ec96-d56c-abfa-ecff5f770001&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;linkText&quot;:&quot;additional aid to Ukraine&quot;,&quot;_id&quot;:&quot;0000018a-ec96-d56c-abfa-ecff5f770000&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">additional aid to Ukraine</a>. Top Democratic leaders released a statement Saturday evening saying they expected McCarthy to hold a vote when the House returned on a Ukraine bill, “consistent with his commitment to making sure that Vladimir Putin, Russia and authoritarianism are defeated.”</p> <p>Ukraine funding had been stripped out of the stopgap funding bill passed Saturday to ensure its passage through both chambers, leaving Ukraine backers to search for another legislative vehicle.</p> <p>Opposition to McCarthy on the right hardened after he pushed through a short-term funding bill without the spending cuts and border restrictions he had vowed to include, and with more Democrats supporting it than Republicans.</p> <p>Freshman Rep. Eli Crane (R-Ariz.) told POLITICO he’s a hard yes on getting rid of McCarthy. “I’m still all for it and will be supporting [it],” Crane said.</p> <p>McCarthy, for his part, says he’s ready for the fight.</p> <p>“Bring it on,” McCarthy said on CBS’ Face the Nation in response to Gaetz, calling it “personal.” “If he’s upset because he tried to push us in a shutdown and I made sure government didn’t shut down, then let’s have that fight.”</p> <p>While no motion to vacate has ever been successful — it was last formally invoked more than a century ago, despite being threatened in recent years — some allies of the speaker concede an unsuccessful attempt will hurt him politically moving forward, in part because he may have to make concessions to Democrats to hang on.</p> <p>As one House Freedom Caucus member put it: Democrats are the “biggest part of this equation.”</p> <p>Another House conservative who is likely to support a motion to vacate was bothered watching McCarthy high-fiving and hugging other House Republicans after the stopgap spending bill passed the House on Saturday, “acting like it was a victory.”<br></p> <br><iframe style="max-width: 100%" width="1280" height="720" src="https://players.brightcove.net/1155968404/r1WF6V0Pl_default/index.html?videoId=6338200004112" frameborder="0"></iframe> <br> <p>“It was embarrassing for him,” this member said in an interview.</p> <p>Republicans caution that the numbers are fluid. Members have said they’re hearing from GOP base voters pushing them to oust McCarthy, pressure that could affect the vote. Other members indicated they will wait to see how the vote plays out in real time, gauging what their colleagues do on the House floor as the nation watches.</p> <p>It is not uncommon for lawmakers to privately claim they will vote a certain way only to reverse course if their position lacks support, particularly given the threat of retribution.</p> <p>How Democrats handle the vote will depend on which procedural motion GOP leaders use in an initial effort to dispose of the motion to vacate, such as a motion to table.</p> <p>Top Democrats have largely deferred to their leader, Hakeem Jeffries, on how to handle the motion to vacate. Former Speaker Nancy Pelosi said Sunday on CNN’s “State of the Union” that her advice to other Democrats was to “follow the leader.”</p> <p>Jeffries has sidestepped questions about it. Asked about the motion to vacate after Saturday’s spending bill vote, he demurred: “We’ll cross that bridge when we get to it.” A Jeffries spokesperson declined to comment, and McCarthy said he has not heard from Jeffries on the matter.</p> <p>McCarthy allies, for their part, believe Gaetz is trying to unseat him because he blames the speaker for the ongoing investigation led by the House Ethics Committee into Gaetz, which was triggered by the Justice Department’s sex trafficking probe into the Florida Republican. The federal probe concluded earlier this year and Gaetz was not charged. (Gaetz has said it “<a href="https://www.politico.com/news/2023/09/28/matt-gaetz-kevin-mccarthy-endgame-00118902" target="_blank" link-data="{&quot;cms.site.owner&quot;:{&quot;_ref&quot;:&quot;0000014b-3270-d4f3-a3cb-f3ffa8610000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff4161000e&quot;},&quot;cms.content.publishDate&quot;:1696186534932,&quot;cms.content.publishUser&quot;:{&quot;_ref&quot;:&quot;00000180-f751-d6b4-a7e5-f7d9bbd30000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;cms.content.updateDate&quot;:1696186534932,&quot;cms.content.updateUser&quot;:{&quot;_ref&quot;:&quot;00000180-f751-d6b4-a7e5-f7d9bbd30000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;originalTemplate&quot;:false,&quot;link&quot;:{&quot;originalTemplate&quot;:false,&quot;attributes&quot;:[],&quot;target&quot;:&quot;NEW&quot;,&quot;url&quot;:&quot;https://www.politico.com/news/2023/09/28/matt-gaetz-kevin-mccarthy-endgame-00118902&quot;,&quot;_id&quot;:&quot;0000018a-ec98-d56c-abfa-ecfd853e0001&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;linkText&quot;:&quot;isn’t personal&quot;,&quot;_id&quot;:&quot;0000018a-ec98-d56c-abfa-ecfd853e0000&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">isn’t personal</a>,” and his allies have denied the investigation is a driving factor.)</p> <p>Some Republicans say the Gaetz's effort could be hurt by the idea he's simply seeking retribution against McCarthy over the ethics probe. And some McCarthy allies are vowing to try to oust him from office if the House Ethics report finds him at fault.</p> <p>“If Ethics gives us a chance, he’s out,” one House Republican said. “He’s a smart man with zero moral compass.”</p> <p><i>Sarah Ferris contributed to this report.</i></p>]]>
+      </content:encoded>
+    </item>
+    <item>
+      <title>Biden blasts Republicans over shutdown showdown: ‘We shouldn't have gotten here in the first place’</title>
+      <link>https://www.politico.com/news/2023/10/01/biden-blasts-republicans-shutdown-00119356</link>
+      <description>"It's time to end governing by crisis, and keep your word when you give it in the Congress," Biden said.</description>
+      <guid>https://www.politico.com/news/2023/10/01/biden-blasts-republicans-shutdown-00119356</guid>
+      <pubDate>Sun, 01 Oct 2023 12:17:16 EST</pubDate>
+      <dc:creator>Kelly Garrity</dc:creator>
+      <dc:contributor>Kelly Garrity</dc:contributor>
+      <media:content type="image/jpeg" url="https://static.politico.com/e1/2f/1fcd2ac94cd0b3d14d7a2905169e/biden-27390.jpg">
+        <media:credit scheme="urn:ebu">Manuel Balce Ceneta/AP Photo</media:credit>
+        <media:title type="html">President Joe Biden speaks in the Roosevelt Room of the White House on Oct. 1, 2023, in Washington.</media:title>
+        <media:thumbnail url="https://static.politico.com/e1/2f/1fcd2ac94cd0b3d14d7a2905169e/biden-27390.jpg"/>
+      </media:content>
+      <maz:template>core</maz:template>
+      <maz:modified>1696180636984</maz:modified>
+      <content:encoded>
+        <![CDATA[<img src="https://static.politico.com/e1/2f/1fcd2ac94cd0b3d14d7a2905169e/biden-27390.jpg"> <br> <p>President Joe Biden slammed House Speaker Kevin McCarthy and House Republicans on Sunday, blaming them for bringing the country to the brink of crisis after Congress narrowly avoided a government shutdown Saturday evening.</p> <p>“Last night Congress passed the spending bill that’s gonna keep the government open. And it’s good news for the American people because the government will not shut down and a needless crisis will have been averted saving millions, millions of Americans, needless pain,” Biden said Sunday during a speech at the White House.</p> <p>“The truth is we shouldn’t be here in the first place. We shouldn’t have gotten here in the first place. It’s time to end governing by crisis, and keep your word when you give it in the Congress,” Biden added, referencing a <a href="https://www.politico.com/news/2023/05/27/mccarthy-and-biden-reach-agreement-in-principle-on-debt-limit-00099107" target="_blank" link-data="{&quot;cms.site.owner&quot;:{&quot;_ref&quot;:&quot;0000014b-3270-d4f3-a3cb-f3ffa8610000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff4161000e&quot;},&quot;cms.content.publishDate&quot;:1696180430465,&quot;cms.content.publishUser&quot;:{&quot;_ref&quot;:&quot;00000180-f751-d6b4-a7e5-f7d9bbd30000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;cms.content.updateDate&quot;:1696180430465,&quot;cms.content.updateUser&quot;:{&quot;_ref&quot;:&quot;00000180-f751-d6b4-a7e5-f7d9bbd30000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;originalTemplate&quot;:false,&quot;link&quot;:{&quot;originalTemplate&quot;:false,&quot;attributes&quot;:[],&quot;target&quot;:&quot;NEW&quot;,&quot;url&quot;:&quot;https://www.politico.com/news/2023/05/27/mccarthy-and-biden-reach-agreement-in-principle-on-debt-limit-00099107&quot;,&quot;_id&quot;:&quot;0000018a-ec3b-dd68-a3cf-fffb5dd40001&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;linkText&quot;:&quot;budget agreement he made with McCarthy&quot;,&quot;_id&quot;:&quot;0000018a-ec3b-dd68-a3cf-fffb5dd40000&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">budget agreement he made with McCarthy</a> in May.</p> <p>Congress managed to avert a government shutdown Saturday with an 11th-hour stopgap funding bill that will keep the government open for 45 days. After refusing for weeks to budge on negotiations over legislation to fund the government, McCarthy suddenly reversed course Saturday and called up a bill that abandoned the border policies and spending cuts he promised to include to appease conservative hard-liners.</p> <p>Biden signed the bill Saturday night, minutes before the midnight deadline. In the effort to avoid what could have been a disastrous government shutdown, Biden was forced to leave one of his top priorities, aid for Ukraine, in limbo.</p> <p>“While the speaker and an overwhelming majority of the Congress have steadfastly supported Ukraine to defend itself against the aggression and brutality of the Russian attack on women and children, in addition to military in Ukraine, there is no Ukrainian funding in this agreement,” Biden said on Sunday. “Despite that, I did not believe we could let a million Americans go through the pain of a government shutdown. But let’s be clear. I hope my friends on the other side keep their word about support for Ukraine.”</p> <p>On Saturday, a White House official told POLITICO that they <a href="https://www.politico.com/news/2023/09/30/biden-administration-congress-government-shutdown-deal-ukraine-aid-00119296" target="_blank" link-data="{&quot;cms.site.owner&quot;:{&quot;_ref&quot;:&quot;0000014b-3270-d4f3-a3cb-f3ffa8610000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff4161000e&quot;},&quot;cms.content.publishDate&quot;:1696180489425,&quot;cms.content.publishUser&quot;:{&quot;_ref&quot;:&quot;00000180-f751-d6b4-a7e5-f7d9bbd30000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;cms.content.updateDate&quot;:1696180489425,&quot;cms.content.updateUser&quot;:{&quot;_ref&quot;:&quot;00000180-f751-d6b4-a7e5-f7d9bbd30000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;originalTemplate&quot;:false,&quot;link&quot;:{&quot;originalTemplate&quot;:false,&quot;attributes&quot;:[],&quot;target&quot;:&quot;NEW&quot;,&quot;url&quot;:&quot;https://www.politico.com/news/2023/09/30/biden-administration-congress-government-shutdown-deal-ukraine-aid-00119296&quot;,&quot;_id&quot;:&quot;0000018a-ec3c-d56c-abfa-ec7d43b80001&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;linkText&quot;:&quot;expect McCarthy to bring a separate bill to the floor for funding to Ukraine&quot;,&quot;_id&quot;:&quot;0000018a-ec3c-d56c-abfa-ec7d43b80000&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">expect McCarthy to bring a separate bill to the floor for funding to Ukraine</a> “shortly.”</p>]]>
+      </content:encoded>
+    </item>
+    <item>
+      <title>California Republicans have McCarthy's back. For now.</title>
+      <link>https://www.politico.com/news/2023/10/01/california-republicans-kevin-mccarthy-00119391</link>
+      <description>Kevin McCarthy so far is avoiding backlash among California’s most fervent Republicans.</description>
+      <guid>https://www.politico.com/news/2023/10/01/california-republicans-kevin-mccarthy-00119391</guid>
+      <pubDate>Sun, 01 Oct 2023 18:24:34 EST</pubDate>
+      <dc:creator>Melanie Mason and Lara Korte</dc:creator>
+      <dc:contributor>Melanie Mason and Lara Korte</dc:contributor>
+      <media:content type="image/jpeg" url="https://static.politico.com/3a/98/3a3c164b4f87a9e4f61a3718dee5/kevin-mccarthy-34067.jpg">
+        <media:credit scheme="urn:ebu">Francis Chung/POLITICO</media:credit>
+        <media:title type="html">As news surrounding the spending negotiations reached California, House Speaker Kevin McCarthy was not without detractors.</media:title>
+        <media:thumbnail url="https://static.politico.com/3a/98/3a3c164b4f87a9e4f61a3718dee5/kevin-mccarthy-34067.jpg"/>
+      </media:content>
+      <maz:template>core</maz:template>
+      <maz:modified>1696202674190</maz:modified>
+      <content:encoded>
+        <![CDATA[<img src="https://static.politico.com/3a/98/3a3c164b4f87a9e4f61a3718dee5/kevin-mccarthy-34067.jpg"> <br> <p>Anaheim, Calif. — <a href="https://directory.politicopro.com/member/51238" data-person-id="51238" link-data="{&quot;cms.site.owner&quot;:{&quot;_ref&quot;:&quot;0000014b-3270-d4f3-a3cb-f3ffa8610000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff4161000e&quot;},&quot;cms.content.publishDate&quot;:1696201473492,&quot;cms.content.publishUser&quot;:{&quot;_ref&quot;:&quot;00000182-cb51-d7cf-a983-cbd5b1dc0000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;cms.content.updateDate&quot;:1696201473492,&quot;cms.content.updateUser&quot;:{&quot;_ref&quot;:&quot;00000182-cb51-d7cf-a983-cbd5b1dc0000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;originalTemplate&quot;:false,&quot;member&quot;:&quot;{\&quot;identifier\&quot;:\&quot;51238\&quot;,\&quot;url\&quot;:\&quot;https://directory.politicopro.com/member/51238\&quot;,\&quot;preferredName\&quot;:\&quot;Rep. Kevin McCarthy (R-CA)\&quot;,\&quot;isCommittee\&quot;:false}&quot;,&quot;text&quot;:&quot;Kevin McCarthy&quot;,&quot;url&quot;:&quot;https://directory.politicopro.com/member/51238&quot;,&quot;personId&quot;:&quot;51238&quot;,&quot;_id&quot;:&quot;0000018a-ed7c-d56c-abfa-ed7d6ada0000&quot;,&quot;_type&quot;:&quot;353fe80b-e1b5-3663-85ca-add066ecafc0&quot;}">Kevin McCarthy</a> has always had a strained relationship with hard-right activists in his home state. But as the party faithful gathered here over the weekend, the House speaker got a pass from an unlikely corner: GOP diehards who are often the first to bash the establishment.</p> <p>At a Republican state convention down the road from Disneyland — and as conservatives in Washington called for McCarthy's head — the rank-and-file of the California GOP was almost commiserating with the embattled Bakersfield native.</p> <p>“It’s a tough job — it’s not easy,” Paula Whitsell, chair of the San Diego County Republican Party, said immediately after McCarthy passed a bill Saturday with Democratic support to avert a government shutdown. “I trust him. He’s experienced. He knows what he’s doing to get everybody to the table.”</p> <p>It's possible once delegates decamp from the convention and return to conservative TV overnight or AM talk radio in the morning, they will rally around Rep. <a href="https://directory.politicopro.com/member/189765" data-person-id="189765" link-data="{&quot;cms.site.owner&quot;:{&quot;_ref&quot;:&quot;0000014b-3270-d4f3-a3cb-f3ffa8610000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff4161000e&quot;},&quot;cms.content.publishDate&quot;:1696201585509,&quot;cms.content.publishUser&quot;:{&quot;_ref&quot;:&quot;00000182-cb51-d7cf-a983-cbd5b1dc0000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;cms.content.updateDate&quot;:1696201585509,&quot;cms.content.updateUser&quot;:{&quot;_ref&quot;:&quot;00000182-cb51-d7cf-a983-cbd5b1dc0000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;originalTemplate&quot;:false,&quot;member&quot;:&quot;{\&quot;identifier\&quot;:\&quot;189765\&quot;,\&quot;url\&quot;:\&quot;https://directory.politicopro.com/member/189765\&quot;,\&quot;preferredName\&quot;:\&quot;Rep. Matt Gaetz (R-FL)\&quot;,\&quot;isCommittee\&quot;:false}&quot;,&quot;text&quot;:&quot;Matt Gaetz&quot;,&quot;url&quot;:&quot;https://directory.politicopro.com/member/189765&quot;,&quot;personId&quot;:&quot;189765&quot;,&quot;_id&quot;:&quot;0000018a-ed7e-de9d-afbf-effe1bae0000&quot;,&quot;_type&quot;:&quot;353fe80b-e1b5-3663-85ca-add066ecafc0&quot;}">Matt Gaetz</a>’s (R-Fla.) <a href="https://www.politico.com/news/2023/10/01/mccarthy-speakership-mercy-democrats-00119359" target="_blank" link-data="{&quot;linkText&quot;:&quot;effort to depose the speaker&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.politico.com/news/2023/10/01/mccarthy-speakership-mercy-democrats-00119359&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a260000&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a260001&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">effort to depose the speaker</a>. But at a convention dominated by presidential <a href="https://www.politico.com/news/2023/09/30/desantis-mocks-trump-at-california-gop-convention-00119264" target="_blank" link-data="{&quot;linkText&quot;:&quot;campaign appearances&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.politico.com/news/2023/09/30/desantis-mocks-trump-at-california-gop-convention-00119264&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a260002&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a260003&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">campaign appearances</a> and feuding over hot-button issues like abortion, the focus of grassroots Republicans here were barely attuned to the ins-and-outs of a blockbuster weekend in Washington.<br></p> <br><iframe style="max-width: 100%" width="1280" height="720" src="https://players.brightcove.net/1155968404/r1WF6V0Pl_default/index.html?videoId=6338195646112" frameborder="0"></iframe> <br> <p>And it isn’t because California Republicans are in the tank for their most prominent elected official. Though McCarthy has delivered money and high-wattage speakers to the state’s otherwise struggling party apparatus, the grassroots base is still leery of a politician who, in their view, personifies the establishment.</p> <p>Woody Woodman, a San Diego delegate who was manning the California Tea Party booth, said he had more faith in conservative firebrands like Reps. <a href="https://directory.politicopro.com/member/51745" data-person-id="51745" link-data="{&quot;cms.site.owner&quot;:{&quot;_ref&quot;:&quot;0000014b-3270-d4f3-a3cb-f3ffa8610000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff4161000e&quot;},&quot;cms.content.publishDate&quot;:1696201638219,&quot;cms.content.publishUser&quot;:{&quot;_ref&quot;:&quot;00000182-cb51-d7cf-a983-cbd5b1dc0000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;cms.content.updateDate&quot;:1696201638219,&quot;cms.content.updateUser&quot;:{&quot;_ref&quot;:&quot;00000182-cb51-d7cf-a983-cbd5b1dc0000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;originalTemplate&quot;:false,&quot;member&quot;:&quot;{\&quot;identifier\&quot;:\&quot;51745\&quot;,\&quot;url\&quot;:\&quot;https://directory.politicopro.com/member/51745\&quot;,\&quot;preferredName\&quot;:\&quot;Rep. Jim Jordan (R-OH)\&quot;,\&quot;isCommittee\&quot;:false}&quot;,&quot;text&quot;:&quot;Jim Jordan&quot;,&quot;url&quot;:&quot;https://directory.politicopro.com/member/51745&quot;,&quot;personId&quot;:&quot;51745&quot;,&quot;_id&quot;:&quot;0000018a-ed7e-d2cf-a3af-fffeeccb0000&quot;,&quot;_type&quot;:&quot;353fe80b-e1b5-3663-85ca-add066ecafc0&quot;}">Jim Jordan</a> (R-Ohio) and <a href="https://directory.politicopro.com/member/198835" data-person-id="198835" link-data="{&quot;cms.site.owner&quot;:{&quot;_ref&quot;:&quot;0000014b-3270-d4f3-a3cb-f3ffa8610000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff4161000e&quot;},&quot;cms.content.publishDate&quot;:1696201657347,&quot;cms.content.publishUser&quot;:{&quot;_ref&quot;:&quot;00000182-cb51-d7cf-a983-cbd5b1dc0000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;cms.content.updateDate&quot;:1696201657347,&quot;cms.content.updateUser&quot;:{&quot;_ref&quot;:&quot;00000182-cb51-d7cf-a983-cbd5b1dc0000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;originalTemplate&quot;:false,&quot;member&quot;:&quot;{\&quot;identifier\&quot;:\&quot;198835\&quot;,\&quot;url\&quot;:\&quot;https://directory.politicopro.com/member/198835\&quot;,\&quot;preferredName\&quot;:\&quot;Rep. Thomas Massie (R-KY)\&quot;,\&quot;isCommittee\&quot;:false}&quot;,&quot;text&quot;:&quot;Thomas Massie&quot;,&quot;url&quot;:&quot;https://directory.politicopro.com/member/198835&quot;,&quot;personId&quot;:&quot;198835&quot;,&quot;_id&quot;:&quot;0000018a-ed7f-d56c-abfa-ed7f385e0000&quot;,&quot;_type&quot;:&quot;353fe80b-e1b5-3663-85ca-add066ecafc0&quot;}">Thomas Massie</a> (R-Ky.). McCarthy was guilty of “going native” when he went to Washington, Woodman said.</p> <p>Still, Woodman wasn’t outraged over the government funding vote. The push for a shutdown, he said, was not as clear-cut as some of McCarthy’s Washington antagonists made it out to be. While Woodman wanted spending to be slashed, he also chafed at the thought of members of the military potentially not getting a paycheck.</p> <p>Mark Rizk, a delegate from Los Angeles, dismissed Gaetz’s anti-McCarthy crusade as “very petty and very immature and childish.”</p> <p>“McCarthy is the speaker of the House, and he's going to be speaker of the House until whenever the Democrats take back the House,” Rizk said.</p> <p>As news surrounding the spending negotiations reached California, McCarthy was not without detractors. Rebekah Carlson, a party delegate from Yuba north of Sacramento, said her party should “grow a set of balls.” Frances Kay Marshall, a Republican from Los Angeles, said she thought McCarthy should be removed as speaker.</p> <p>But even Marshall was far more passionate talking about critical race theory, transgender issues and former President Donald Trump’s appearance at the convention. The details of congressional machinations were of little interest.</p> <p>“I haven’t really been watching and paying attention to what’s going on,” said Marshall, donning a sparkly gold ball gown and a pearl-encrusted captain’s hat that read ‘TRUMP.’ “A lot of my focus right now is with the California GOP.”</p> <p>Where the focus was <i>not</i> was on McCarthy — even among Republicans here staking their political careers on winning over the conservative base.</p> <p>Asked how McCarthy was viewed by the party, Denice Gary-Pandol, a Kern County political scientist who is running a long-shot bid for late Sen. Dianne Feinstein’s seat, paused and sighed before offering her assessment.</p> <p>“I know Kevin loves our veterans,” she said. “He cares about veterans and that’s really a good thing.”</p>]]>
+      </content:encoded>
+    </item>
+    <item>
+      <title>Newsom picks Laphonza Butler as Feinstein replacement</title>
+      <link>https://www.politico.com/news/2023/10/01/newsom-senate-pick-butler-00119360</link>
+      <description>California’s governor chose a labor leader turned power player to serve in the Senate, and an adviser told POLITICO there were no preconditions about whether she could run in 2024.</description>
+      <guid>https://www.politico.com/news/2023/10/01/newsom-senate-pick-butler-00119360</guid>
+      <pubDate>Sun, 01 Oct 2023 21:30:19 EST</pubDate>
+      <dc:creator>Christopher Cadelago</dc:creator>
+      <dc:description>Christopher Cadelago is the California bureau chief at POLITICO, serving as the lead politics reporter and helping guide coverage across the Golden State. Based at the Capitol, Cadelago covers elections and political power, from the governor’s mansion to the players in Los Angeles, the Bay Area and Silicon Valley. He regularly contributes stories in POLITICO Magazine.&lt;br/&gt;&lt;br/&gt;In Washington, Cadelago served as a White House correspondent covering Joe Biden and Donald Trump and was a lead reporter for the presidential campaigns of Biden and Kamala Harris.&lt;br/&gt;&lt;br/&gt;Before joining POLITICO in 2018, he worked at The Sacramento Bee in the Capitol bureau, anchored investigations at The San Diego Union-Tribune in Sacramento and wrote about politics for newspapers in San Diego, Los Angeles and San Francisco.&lt;br/&gt;&lt;br/&gt;Cadelago is a San Francisco native and a graduate of the University of California, Berkeley. He lives with his family in Sacramento’s Land Park neighborhood.</dc:description>
+      <dc:contributor>Christopher Cadelago</dc:contributor>
+      <media:content type="image/jpeg" url="https://static.politico.com/6a/41/fa3807f74a82979a2772196a8592/ap23174789679462.jpg">
+        <media:credit scheme="urn:ebu">Susan Walsh/AP Photo</media:credit>
+        <media:title type="html">EMILY’s List President Laphonza Butler is a veteran organizer and well-known in Newsom’s orbit.</media:title>
+        <media:thumbnail url="https://static.politico.com/6a/41/fa3807f74a82979a2772196a8592/ap23174789679462.jpg"/>
+      </media:content>
+      <maz:template>core</maz:template>
+      <maz:modified>1696218297642</maz:modified>
+      <content:encoded>
+        <![CDATA[<img src="https://static.politico.com/6a/41/fa3807f74a82979a2772196a8592/ap23174789679462.jpg"> <br> <p>California Gov. Gavin Newsom will appoint EMILY’s List President Laphonza Butler to fill the seat of the late Sen. Dianne Feinstein, elevating the head of a fundraising juggernaut that works to elect Democratic women who support abortion rights, according to a person familiar with the decision.</p> <p>Newsom is moving swiftly to name the next senator, two days after <a href="https://www.politico.com/news/2023/09/29/feinstein-dies-at-90-00119040" target="_blank" link-data="{&quot;linkText&quot;:&quot;Feinstein’s death&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.politico.com/news/2023/09/29/feinstein-dies-at-90-00119040&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a2c0000&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a2c0001&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">Feinstein’s death</a> and just as a perilously split Congress narrowly averted a government shutdown. Senate Democrats are in need of every vote in the closely divided chamber.</p> <p>The announcement was expected to come Monday, and an adviser to the governor, Anthony York, told POLITICO that Newsom is making his appointment without putting limitations or preconditions on his pick running for the seat in 2024. That means Butler could decide to join the sprawling and competitive field of Democratic contenders seeking to succeed Feinstein, with special elections now <a href="https://www.politico.com/news/2023/09/30/four-votes-three-possible-senators-a-wild-california-campaign-year-lies-ahead-00119293" target="_blank" link-data="{&quot;linkText&quot;:&quot;layered on top&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.politico.com/news/2023/09/30/four-votes-three-possible-senators-a-wild-california-campaign-year-lies-ahead-00119293&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a2c0002&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a2c0003&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">layered on top</a> of the March primary and November runoff.</p> <p>Butler is expected to be sworn-in to the U.S. Senate on Wednesday by Vice President Kamala Harris.</p> <p>Newsom’s selection of Butler comes at a moment of immense change in California’s political establishment, with millions of people <a href="https://www.politico.com/news/2023/09/29/san-francisco-feinstein-memorial-00119219" target="_blank" link-data="{&quot;linkText&quot;:&quot;still mourning the death&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.politico.com/news/2023/09/29/san-francisco-feinstein-memorial-00119219&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a2c0004&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a2c0005&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">still mourning the death</a> of Feinstein, the barrier-breaking Senate lioness. Meanwhile the California governor, who was mentored by Feinstein, has been grappling with his own personal grief and the political ramifications of his choice to succeed her.</p> <p>The people who spoke with POLITICO ahead of the announcement were granted anonymity to disclose internal deliberations. Butler is registered to vote in Maryland but will switch her registration to California.</p> <p>Newsom faced considerable pressure around the decision after first pledging <a href="https://www.politico.com/states/california/story/2021/03/15/newsom-commits-to-nominating-black-woman-to-fill-feinsteins-seat-should-she-retire-1368354" target="_blank" link-data="{&quot;linkText&quot;:&quot;to name a Black woman&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.politico.com/states/california/story/2021/03/15/newsom-commits-to-nominating-black-woman-to-fill-feinsteins-seat-should-she-retire-1368354&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a2c0006&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a2c0007&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">to name a Black woman</a> to the seat. Several potential nominees said publicly they were not interested. Some others privately expressed trepidation about accepting a short-term appointment and then having to immediately gear up for what would be a five-month campaign.</p> <p>The swift nature of Newsom’s appointment cuts politicians and their allies off from mounting more sustained efforts to lobby the governor and his inner circle over his pick. And it halts interest groups that were starting to apply pressure on him, including over the question of whether he would require them to serve only temporarily. On Sunday, Congressional Black Caucus Chair <a href="https://directory.politicopro.com/member/193559" data-person-id="193559" link-data="{&quot;cms.site.owner&quot;:{&quot;_ref&quot;:&quot;0000014b-3270-d4f3-a3cb-f3ffa8610000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff4161000e&quot;},&quot;cms.content.publishDate&quot;:1696214062623,&quot;cms.content.publishUser&quot;:{&quot;_ref&quot;:&quot;00000182-cb51-d7cf-a983-cbd5b1dc0000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;cms.content.updateDate&quot;:1696214062623,&quot;cms.content.updateUser&quot;:{&quot;_ref&quot;:&quot;00000182-cb51-d7cf-a983-cbd5b1dc0000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;originalTemplate&quot;:false,&quot;member&quot;:&quot;{\&quot;identifier\&quot;:\&quot;193559\&quot;,\&quot;url\&quot;:\&quot;https://directory.politicopro.com/member/193559\&quot;,\&quot;preferredName\&quot;:\&quot;Rep. Steven Horsford (D-NV)\&quot;,\&quot;isCommittee\&quot;:false}&quot;,&quot;text&quot;:&quot;Steven Horsford&quot;,&quot;url&quot;:&quot;https://directory.politicopro.com/member/193559&quot;,&quot;personId&quot;:&quot;193559&quot;,&quot;_id&quot;:&quot;0000018a-ee3c-d2cf-a3af-ffbe82e50000&quot;,&quot;_type&quot;:&quot;353fe80b-e1b5-3663-85ca-add066ecafc0&quot;}">Steven Horsford</a> wrote to Newsom urging him to appoint Rep. <a href="https://directory.politicopro.com/member/51481" data-person-id="51481" link-data="{&quot;cms.site.owner&quot;:{&quot;_ref&quot;:&quot;0000014b-3270-d4f3-a3cb-f3ffa8610000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff4161000e&quot;},&quot;cms.content.publishDate&quot;:1696214072364,&quot;cms.content.publishUser&quot;:{&quot;_ref&quot;:&quot;00000182-cb51-d7cf-a983-cbd5b1dc0000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;cms.content.updateDate&quot;:1696214072364,&quot;cms.content.updateUser&quot;:{&quot;_ref&quot;:&quot;00000182-cb51-d7cf-a983-cbd5b1dc0000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;originalTemplate&quot;:false,&quot;member&quot;:&quot;{\&quot;identifier\&quot;:\&quot;51481\&quot;,\&quot;url\&quot;:\&quot;https://directory.politicopro.com/member/51481\&quot;,\&quot;preferredName\&quot;:\&quot;Rep. Barbara Lee (D-CA)\&quot;,\&quot;isCommittee\&quot;:false}&quot;,&quot;text&quot;:&quot;Barbara Lee&quot;,&quot;url&quot;:&quot;https://directory.politicopro.com/member/51481&quot;,&quot;personId&quot;:&quot;51481&quot;,&quot;_id&quot;:&quot;0000018a-ee3c-d2cf-a3af-ffbeab990000&quot;,&quot;_type&quot;:&quot;353fe80b-e1b5-3663-85ca-add066ecafc0&quot;}">Barbara Lee</a>, a candidate for the Senate whom the governor recently ruled out over worries about giving someone a leg up.<br></p> <br><iframe style="max-width: 100%" width="1280" height="720" src="https://players.brightcove.net/1155968404/r1WF6V0Pl_default/index.html?videoId=6338082367112" frameborder="0"></iframe> <br> <p>Newsom fulfills the promise he made to name a Black woman to the upper chamber following the departure of Harris to the vice presidency and his selection of Sen. Alex Padilla <a href="https://www.politico.com/states/california/story/2020/12/22/newsom-appoints-alex-padilla-to-fill-harris-senate-seat-1349911" target="_blank" link-data="{&quot;linkText&quot;:&quot;to her old seat&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.politico.com/states/california/story/2020/12/22/newsom-appoints-alex-padilla-to-fill-harris-senate-seat-1349911&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a2c0008&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a2c0009&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">to her old seat</a> in 2021. Newsom also avoids veering directly into next year’s Senate contest between rival Reps. <a href="https://directory.politicopro.com/member/307578" data-person-id="307578" link-data="{&quot;cms.site.owner&quot;:{&quot;_ref&quot;:&quot;0000014b-3270-d4f3-a3cb-f3ffa8610000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff4161000e&quot;},&quot;cms.content.publishDate&quot;:1696214109682,&quot;cms.content.publishUser&quot;:{&quot;_ref&quot;:&quot;00000182-cb51-d7cf-a983-cbd5b1dc0000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;cms.content.updateDate&quot;:1696214109682,&quot;cms.content.updateUser&quot;:{&quot;_ref&quot;:&quot;00000182-cb51-d7cf-a983-cbd5b1dc0000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;originalTemplate&quot;:false,&quot;member&quot;:&quot;{\&quot;identifier\&quot;:\&quot;307578\&quot;,\&quot;url\&quot;:\&quot;https://directory.politicopro.com/member/307578\&quot;,\&quot;preferredName\&quot;:\&quot;Rep. Katie Porter (D-CA)\&quot;,\&quot;isCommittee\&quot;:false}&quot;,&quot;text&quot;:&quot;Katie Porter&quot;,&quot;url&quot;:&quot;https://directory.politicopro.com/member/307578&quot;,&quot;personId&quot;:&quot;307578&quot;,&quot;_id&quot;:&quot;0000018a-ee3d-d2cf-a3af-ffbf3a7f0000&quot;,&quot;_type&quot;:&quot;353fe80b-e1b5-3663-85ca-add066ecafc0&quot;}">Katie Porter</a>, <a href="https://directory.politicopro.com/member/51608" data-person-id="51608" link-data="{&quot;cms.site.owner&quot;:{&quot;_ref&quot;:&quot;0000014b-3270-d4f3-a3cb-f3ffa8610000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff4161000e&quot;},&quot;cms.content.publishDate&quot;:1696214121597,&quot;cms.content.publishUser&quot;:{&quot;_ref&quot;:&quot;00000182-cb51-d7cf-a983-cbd5b1dc0000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;cms.content.updateDate&quot;:1696214121597,&quot;cms.content.updateUser&quot;:{&quot;_ref&quot;:&quot;00000182-cb51-d7cf-a983-cbd5b1dc0000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;originalTemplate&quot;:false,&quot;member&quot;:&quot;{\&quot;identifier\&quot;:\&quot;51608\&quot;,\&quot;url\&quot;:\&quot;https://directory.politicopro.com/member/51608\&quot;,\&quot;preferredName\&quot;:\&quot;Rep. Adam Schiff (D-CA)\&quot;,\&quot;isCommittee\&quot;:false}&quot;,&quot;text&quot;:&quot;Adam Schiff&quot;,&quot;url&quot;:&quot;https://directory.politicopro.com/member/51608&quot;,&quot;personId&quot;:&quot;51608&quot;,&quot;_id&quot;:&quot;0000018a-ee3d-de9d-afbf-effd63820000&quot;,&quot;_type&quot;:&quot;353fe80b-e1b5-3663-85ca-add066ecafc0&quot;}">Adam Schiff</a> and Lee, all Democrats from California. Lee had spent years angling for the possible Senate appointment, only to learn in recent weeks that Newsom was intent <a href="https://www.politico.com/news/2023/09/10/newsom-lee-senate-california-00114885" target="_blank" link-data="{&quot;linkText&quot;:&quot;on not tipping&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.politico.com/news/2023/09/10/newsom-lee-senate-california-00114885&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a2d0000&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a2d0001&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">on not tipping</a> the scales in her favor, prompting her to <a href="https://www.politico.com/live-updates/2023/09/11/congress/lee-newsom-feinstein-california-senate-00115037" target="_blank" link-data="{&quot;linkText&quot;:&quot;sharply rebuke&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.politico.com/live-updates/2023/09/11/congress/lee-newsom-feinstein-california-senate-00115037&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a2d0002&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a2d0003&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">sharply rebuke</a> his public pronouncement.</p> <p>Butler is a veteran organizer and well-known in Newsom’s orbit. He contemplated hiring the Southern Mississippi native to be his first chief of staff, and she was a<a href="https://www.latimes.com/politics/la-pol-ca-laphonza-butler-20181207-story.html" target="_blank" link-data="{&quot;linkText&quot;:&quot; one-time partner&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.latimes.com/politics/la-pol-ca-laphonza-butler-20181207-story.html&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a2d0004&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a2d0005&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">one-time partner</a> in the San Francisco-based consulting firm, now known as Bearstar Strategies, with his top political advisers. She has remained a confidant of Vice President Kamala Harris, after serving as a senior strategist on her 2020 presidential campaign.</p> <p>Butler, who is based in Washington and maintains close ties with Los Angeles, had a stint as director for public policy and campaigns at Airbnb and spent nearly two decades as a powerful and well-respected labor leader with the Service Employees International Union. As president of SEIU California, she worked closely with then-Gov. Jerry Brown on policies like hiking the minimum wage to $15 per hour and raising taxes for wealthy Californians. She also served on the University of California Board of Regents, to which she was appointed by Brown in 2018 before stepping down in 2021.</p> <p>Butler is the first openly LGBTQ person to represent California in the Senate.</p> <p>It will be a major undertaking for her to vie for the seat. Porter and Schiff, the leaders in fundraising and polls, as well as Lee, are comparatively well-known to voters. California is prohibitively expensive to run in, with TV ads costing millions to air across major media markets. But Butler could be a formidable candidate if she chooses to be.</p> <p>Newsom’s appointment — regardless of whether Butler runs for the Senate and wins — will continue to dramatically reshape the state’s political guard by the second-term governor and brings to four the number of high-profile nominations he’s made. That includes both U.S. Senate seats, Attorney General Rob Bonta and Secretary of State Shirley Weber, who was rumored to be on the shortlist for Feinstein’s post.</p> <p>Many senators rose to power through an appointment, including Democrats <a href="https://directory.politicopro.com/member/282320" data-person-id="282320" link-data="{&quot;cms.site.owner&quot;:{&quot;_ref&quot;:&quot;0000014b-3270-d4f3-a3cb-f3ffa8610000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff4161000e&quot;},&quot;cms.content.publishDate&quot;:1696214297482,&quot;cms.content.publishUser&quot;:{&quot;_ref&quot;:&quot;00000182-cb51-d7cf-a983-cbd5b1dc0000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;cms.content.updateDate&quot;:1696214297482,&quot;cms.content.updateUser&quot;:{&quot;_ref&quot;:&quot;00000182-cb51-d7cf-a983-cbd5b1dc0000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;originalTemplate&quot;:false,&quot;member&quot;:&quot;{\&quot;identifier\&quot;:\&quot;282320\&quot;,\&quot;url\&quot;:\&quot;https://directory.politicopro.com/member/282320\&quot;,\&quot;preferredName\&quot;:\&quot;Sen. Tina Smith (D-MN)\&quot;,\&quot;isCommittee\&quot;:false}&quot;,&quot;text&quot;:&quot;Tina Smith&quot;,&quot;url&quot;:&quot;https://directory.politicopro.com/member/282320&quot;,&quot;personId&quot;:&quot;282320&quot;,&quot;_id&quot;:&quot;0000018a-ee40-d56c-abfa-ee6d15ad0000&quot;,&quot;_type&quot;:&quot;353fe80b-e1b5-3663-85ca-add066ecafc0&quot;}">Tina Smith</a> of Minnesota and <a href="https://directory.politicopro.com/member/201768" data-person-id="201768" link-data="{&quot;cms.site.owner&quot;:{&quot;_ref&quot;:&quot;0000014b-3270-d4f3-a3cb-f3ffa8610000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff4161000e&quot;},&quot;cms.content.publishDate&quot;:1696214308469,&quot;cms.content.publishUser&quot;:{&quot;_ref&quot;:&quot;00000182-cb51-d7cf-a983-cbd5b1dc0000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;cms.content.updateDate&quot;:1696214308469,&quot;cms.content.updateUser&quot;:{&quot;_ref&quot;:&quot;00000182-cb51-d7cf-a983-cbd5b1dc0000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;originalTemplate&quot;:false,&quot;member&quot;:&quot;{\&quot;identifier\&quot;:\&quot;201768\&quot;,\&quot;url\&quot;:\&quot;https://directory.politicopro.com/member/201768\&quot;,\&quot;preferredName\&quot;:\&quot;Sen. Brian Schatz (D-HI)\&quot;,\&quot;isCommittee\&quot;:false}&quot;,&quot;text&quot;:&quot;Brian Schatz&quot;,&quot;url&quot;:&quot;https://directory.politicopro.com/member/201768&quot;,&quot;personId&quot;:&quot;201768&quot;,&quot;_id&quot;:&quot;0000018a-ee40-d56c-abfa-ee6d43c60000&quot;,&quot;_type&quot;:&quot;353fe80b-e1b5-3663-85ca-add066ecafc0&quot;}">Brian Schatz</a> of Hawaii and Republican <a href="https://directory.politicopro.com/member/151800" data-person-id="151800" link-data="{&quot;cms.site.owner&quot;:{&quot;_ref&quot;:&quot;0000014b-3270-d4f3-a3cb-f3ffa8610000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff4161000e&quot;},&quot;cms.content.publishDate&quot;:1696214318853,&quot;cms.content.publishUser&quot;:{&quot;_ref&quot;:&quot;00000182-cb51-d7cf-a983-cbd5b1dc0000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;cms.content.updateDate&quot;:1696214318853,&quot;cms.content.updateUser&quot;:{&quot;_ref&quot;:&quot;00000182-cb51-d7cf-a983-cbd5b1dc0000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;originalTemplate&quot;:false,&quot;member&quot;:&quot;{\&quot;identifier\&quot;:\&quot;151800\&quot;,\&quot;url\&quot;:\&quot;https://directory.politicopro.com/member/151800\&quot;,\&quot;preferredName\&quot;:\&quot;Sen. Tim Scott (R-SC)\&quot;,\&quot;isCommittee\&quot;:false}&quot;,&quot;text&quot;:&quot;Tim Scott&quot;,&quot;url&quot;:&quot;https://directory.politicopro.com/member/151800&quot;,&quot;personId&quot;:&quot;151800&quot;,&quot;_id&quot;:&quot;0000018a-ee40-d2cf-a3af-ffd66f970000&quot;,&quot;_type&quot;:&quot;353fe80b-e1b5-3663-85ca-add066ecafc0&quot;}">Tim Scott</a> of South Carolina. Others like Jon Kyl in Arizona, Ted Kaufman in Delaware and Jeffrey Chiesa in New Jersey declined to run.</p> <p>Newsom has said he neither expected, nor wanted, to make the latest appointment. But for months, he and his top advisers had discussed the prospect of having to do so as Feinstein fell ill and reports about her condition <a href="https://www.politico.com/news/2023/04/12/dianne-feinstein-condition-senate-return-00091765" target="_blank" link-data="{&quot;linkText&quot;:&quot;grew dimmer&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.politico.com/news/2023/04/12/dianne-feinstein-condition-senate-return-00091765&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a2d0008&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a2d0009&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">grew dimmer</a>. In May, she returned to the Senate after two months away and Newsom passionately supported the idea of her serving the rest of her term, contending that Senate Republicans would use her vacancy to help block judicial confirmations prioritized by President Joe Biden and Senate Majority Leader <a href="https://directory.politicopro.com/member/51231" data-person-id="51231" link-data="{&quot;cms.site.owner&quot;:{&quot;_ref&quot;:&quot;0000014b-3270-d4f3-a3cb-f3ffa8610000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff4161000e&quot;},&quot;cms.content.publishDate&quot;:1696214533477,&quot;cms.content.publishUser&quot;:{&quot;_ref&quot;:&quot;00000182-cb51-d7cf-a983-cbd5b1dc0000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;cms.content.updateDate&quot;:1696214533477,&quot;cms.content.updateUser&quot;:{&quot;_ref&quot;:&quot;00000182-cb51-d7cf-a983-cbd5b1dc0000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;originalTemplate&quot;:false,&quot;member&quot;:&quot;{\&quot;identifier\&quot;:\&quot;51231\&quot;,\&quot;url\&quot;:\&quot;https://directory.politicopro.com/member/51231\&quot;,\&quot;preferredName\&quot;:\&quot;Sen. Chuck Schumer (D-NY)\&quot;,\&quot;isCommittee\&quot;:false}&quot;,&quot;text&quot;:&quot;Chuck Schumer&quot;,&quot;url&quot;:&quot;https://directory.politicopro.com/member/51231&quot;,&quot;personId&quot;:&quot;51231&quot;,&quot;_id&quot;:&quot;0000018a-ee43-de9d-afbf-efdfb3d70000&quot;,&quot;_type&quot;:&quot;353fe80b-e1b5-3663-85ca-add066ecafc0&quot;}">Chuck Schumer</a>.</p> <p>“You think Mitch McConnell is going to seat another federal judge? Not a chance in hell. You better wish, you better pray, for her health,” Newsom <a href="https://www.politico.com/newsletters/california-playbook/2023/07/05/gavins-red-state-hustle-00104691" target="_blank" link-data="{&quot;linkText&quot;:&quot;told a Democratic Idaho voter&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.politico.com/newsletters/california-playbook/2023/07/05/gavins-red-state-hustle-00104691&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a2d000a&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a2d000b&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">told a Democratic Idaho voter</a> during a tour of red states in July.</p> <p>Schumer in recent days was among those urging Newsom to move with speed given the looming shutdown in Washington and bare-bones Democratic majority in the Senate, two other people familiar with their conversations said.</p> <p>Newsom earned a bit of time on Saturday when the Senate cleared a stopgap funding bill late in the day, sending it to Biden’s desk for <a href="https://x.com/POTUS/status/1708323029745389928?s=20" target="_blank" link-data="{&quot;linkText&quot;:&quot;his signature&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://x.com/POTUS/status/1708323029745389928?s=20&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a2d000c&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a2d000d&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">his signature</a>. By that point, however, Newsom and aides were already well on their way to filling the seat, capping a dramatic chapter for the governor and his state and delivering to the Senate its first Black woman since Harris.</p>]]>
+      </content:encoded>
+    </item>
+    <item>
+      <title>As new term begins, Supreme Court faces fallout from its rightward shift</title>
+      <link>https://www.politico.com/news/2023/10/01/supreme-court-key-issues-00119351</link>
+      <description>The justices return from their summer recess on Monday, and they're poised to wade back into divisive issues on guns and agency power.</description>
+      <guid>https://www.politico.com/news/2023/10/01/supreme-court-key-issues-00119351</guid>
+      <pubDate>Sun, 01 Oct 2023 11:38:17 EST</pubDate>
+      <dc:creator>Josh Gerstein</dc:creator>
+      <dc:contributor>Josh Gerstein</dc:contributor>
+      <media:content type="image/jpeg" url="https://static.politico.com/c3/50/4143888e4e27bb7f51b1d862017e/u-s-supreme-court-88698.jpg">
+        <media:credit scheme="urn:ebu">Francis Chung/POLITICO</media:credit>
+        <media:title type="html">The full slate of cases the court will take up during the term that starts Monday remains uncertain. On Friday, the justices added 12 new cases to their docket.</media:title>
+        <media:thumbnail url="https://static.politico.com/c3/50/4143888e4e27bb7f51b1d862017e/u-s-supreme-court-88698.jpg"/>
+      </media:content>
+      <maz:template>core</maz:template>
+      <maz:modified>1696178297122</maz:modified>
+      <content:encoded>
+        <![CDATA[<img src="https://static.politico.com/c3/50/4143888e4e27bb7f51b1d862017e/u-s-supreme-court-88698.jpg"> <br> <p>Paging the Supreme Court: Cleanup on aisle 3.</p> <p>After two years of transformative decisions on abortion, gun rights and affirmative action, the Supreme Court is about to kick off a term where the justices are likely to spend much of their time resolving nagging questions created by their prior rulings.</p> <p>Some of the legal fights now before the high court expose what critics view as the soft underbelly of recent conservative decisions — details glossed over as the court’s GOP-appointed, six-justice majority pushed American jurisprudence swiftly to the right on some of the nation’s most divisive issues.</p> <p>In the coming months, the court will hear a case that will test the majority’s commitment to a robust, history-focused interpretation of the Second Amendment. It will hear two others that could radically reshape regulatory agencies. And it may soon need to revisit both abortion and racial diversity in education.</p> <p>The full slate of cases the court will take up during the term that starts Monday remains uncertain. On Friday, the justices <a href="https://www.supremecourt.gov/orders/courtorders/092923zr_q8l1.pdf" target="_blank" link-data="{&quot;linkText&quot;:&quot;added 12 new cases&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.supremecourt.gov/orders/courtorders/092923zr_q8l1.pdf&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a330001&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a330002&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">added 12 new cases</a> to their docket, including <a href="https://www.politico.com/news/2023/09/29/supreme-court-to-hear-challenges-to-state-social-media-laws-00119051" target="_blank" link-data="{&quot;linkText&quot;:&quot;a pair of First Amendment challenges&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.politico.com/news/2023/09/29/supreme-court-to-hear-challenges-to-state-social-media-laws-00119051&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a330003&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a330004&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">a pair of First Amendment challenges</a> to laws in red states that regulate how social media companies moderate users’ content.</p> <p>The high court also faces difficult choices and divisions that go beyond its docket, as controversies swirl over unreported gifts to some justices and disagreements have <a href="https://www.politico.com/news/2023/09/22/elena-kagan-supreme-court-precedent-speech-00117760" target="_blank" link-data="{&quot;linkText&quot;:&quot;spilled into public view&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.politico.com/news/2023/09/22/elena-kagan-supreme-court-precedent-speech-00117760&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a330005&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a330006&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">spilled into public view</a> about potential reforms. <a href="https://www.politico.com/news/2023/09/30/supreme-court-ethics-poll-00119236" target="_blank" link-data="{&quot;linkText&quot;:&quot;A recent POLITICO poll&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.politico.com/news/2023/09/30/supreme-court-ethics-poll-00119236&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a330007&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a330008&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">A recent POLITICO poll</a> found a large majority of Americans favor subjecting the justices to an enforceable ethics code.</p> <p>Here’s POLITICO’s look at the issues expected to dominate the Supreme Court over the next year.</p> <h3 style="text-align: left">Reining in a broad ruling on guns?</h3> <p>Perhaps the highest-profile case already on the high court’s docket will determine whether people accused of domestic violence have a constitutional right to carry guns.</p> <p>The case will test the justices’ willingness to fully embrace the logic of <a href="https://www.politico.com/news/2022/06/23/supreme-court-strikes-down-new-york-gun-law-along-ideological-lines-00041691" target="_blank" link-data="{&quot;linkText&quot;:&quot;their year-old decision striking down New York’s longstanding gun control regulations&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.politico.com/news/2022/06/23/supreme-court-strikes-down-new-york-gun-law-along-ideological-lines-00041691&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a330009&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a33000a&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">their year-old decision striking down New York’s longstanding gun control regulations</a>. In the 6-3 ruling in <a href="https://www.supremecourt.gov/opinions/21pdf/20-843_7j80.pdf" target="_blank" link-data="{&quot;linkText&quot;:&quot;<i>New York State Rifle &amp; Pistol Association v. Bruen</i>&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.supremecourt.gov/opinions/21pdf/20-843_7j80.pdf&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a33000b&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a33000c&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}"><i>New York State Rifle &amp; Pistol Association v. Bruen</i></a>, the GOP-appointed justices said the Constitution only permits the sort of limits on gun ownership that were recognized early in American history.</p> <p>The decision, and its call to rummage through history to judge a modern law’s constitutionality, unleashed a flood of challenges to existing gun-control measures.</p> <p>“There’s basically just chaos in the Second Amendment space and a huge volume of litigation,” said Esther Sanchez-Gomez of the Giffords Law Center, which advocates for gun-safety laws. “This new test has created a mess.”</p> <p>In March, the 5th Circuit Court of Appeals embraced the <i>Bruen</i> rationale to strike down a federal law prohibiting the subjects of domestic violence restraining orders from possessing firearms, with the appeals judges concluding that the law isn’t rooted in “our Nation’s historical tradition of firearm regulation.”</p> <p>The Biden administration asked the justices to overturn that decision, arguing that it opens the door to all sorts of dangerous people obtaining weapons. Many analysts expect that some of the conservative justices, especially Chief Justice John Roberts and Justice Brett Kavanaugh, will worry about the optics of a ruling that would put guns in the hands of domestic abusers. Those concerns might entice a majority of the court to figure out a way to uphold the statute, although how the justices would square such a ruling with <i>Bruen</i> isn’t clear.</p> <p>The case, <i>United States v. Rahimi</i>, will be argued Nov. 7.</p> <h3 style="text-align: left">Another crack at agency power</h3> <p>For decades, the business community, conservative activists and a few conservative justices have been trying to eliminate a legal doctrine that they contend gives government agencies — sometimes derisively called “the administrative state” — too much power. The doctrine, known as <i>Chevron</i> deference after a 1984 Supreme Court case that first articulated it, gives agencies wide latitude to interpret the statutes they enforce — even if judges disagree with an agency’s reading of the law.</p> <p>As the conservative contingent on the court has grown, the doctrine has been walked to the legal gallows several times — but each time, the court has stopped short of formally killing it off. The noose is tightening once again this term in a case challenging a decision by federal officials to make fishing boat operators pay for monitors who confirm compliance with fishing limits. The facts of the case are arcane, but the legal question is whether the justices should officially overturn <i>Chevron</i>.</p> <p>If that happens, federal regulations aimed at the environment, prescription drugs, food safety, auto safety, banking, the financial markets and more could be in jeopardy. An end to <i>Chevron</i> would trigger a tsunami of legal challenges in search of judges who might disagree with agencies’ longstanding interpretations of their own powers, striking down policies that have been on the books for decades. And Congress might face pressure to shore up some agencies’ regulatory powers.</p> <p>The case, <i>Loper Bright Enterprises v. Raimondo</i>, has not yet been scheduled for oral argument. The court could hear it as early as December.</p> <h3 style="text-align: left">CFPB funding fight could cripple other regulators</h3> <p>On Tuesday, the second day of the new term, the court will hear a constitutional challenge to the Consumer Financial Protection Bureau. It’s the second time the Supreme Court has taken aim at the bureau, which was created by the Dodd-Frank legislation signed by former President Barack Obama in 2010 and is widely scorned by conservatives. Three years ago, the justices handed down a 5-4 decision that said <a href="https://www.politico.com/news/2020/06/29/supreme-court-consumer-financial-protection-bureau-decision-344324" target="_blank" link-data="{&quot;linkText&quot;:&quot;the agency’s director had no right to stay&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.politico.com/news/2020/06/29/supreme-court-consumer-financial-protection-bureau-decision-344324&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a33000d&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a33000e&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">the agency’s director had no right to stay</a> through the five-year term set by statute and was subject to firing at any time by the president without cause.</p> <p>Now, the CFPB’s funding stream is the issue at the high court after the 5th Circuit ruled that funding the agency out of fees charged by the Federal Reserve violates the Constitution’s requirement that Congress regularly appropriate money for the operation of federal agencies.</p> <p>If the justices uphold that decision, numerous agencies like the Fed, various bank regulators, the Federal Housing Finance Agency and more <a href="https://www.politico.com/news/magazine/2023/09/28/supreme-court-social-security-medicare-00118470" target="_blank" link-data="{&quot;cms.site.owner&quot;:{&quot;_ref&quot;:&quot;0000014b-3270-d4f3-a3cb-f3ffa8610000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff4161000e&quot;},&quot;cms.content.publishDate&quot;:1696177790565,&quot;cms.content.publishUser&quot;:{&quot;_ref&quot;:&quot;00000180-f751-d6b4-a7e5-f7d9bbd30000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;cms.content.updateDate&quot;:1696177790565,&quot;cms.content.updateUser&quot;:{&quot;_ref&quot;:&quot;00000180-f751-d6b4-a7e5-f7d9bbd30000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;originalTemplate&quot;:false,&quot;link&quot;:{&quot;originalTemplate&quot;:false,&quot;attributes&quot;:[],&quot;target&quot;:&quot;NEW&quot;,&quot;url&quot;:&quot;https://www.politico.com/news/magazine/2023/09/28/supreme-court-social-security-medicare-00118470&quot;,&quot;_id&quot;:&quot;0000018a-ec13-de9d-afbf-efdf16cf0001&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;linkText&quot;:&quot;could need emergency legislation&quot;,&quot;_id&quot;:&quot;0000018a-ec13-de9d-afbf-efdf16cf0000&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">could need emergency legislation</a> to restructure their finances.</p> <p>“This is an incredibly important case,” said Brianne Gorod of the Constitutional Accountability Center. “It would threaten many other federal agencies.”</p> <p>There are few guideposts to signal what the justices will do in the case, <i>CFPB v. Community Financial Services Association</i>. “There isn’t really any precedent on this issue,” said Adam White of the American Enterprise Institute.<br></p> <br><iframe style="max-width: 100%" width="1280" height="720" src="https://players.brightcove.net/1155968404/r1WF6V0Pl_default/index.html?videoId=6330307457112" frameborder="0"></iframe> <br> <h3 style="text-align: left">Affirmative action: Back so soon?</h3> <p>The Supreme Court’s decision in June <a href="https://www.politico.com/news/2023/06/29/supreme-court-ends-affirmative-action-in-college-admissions-00104179" target="_blank" link-data="{&quot;linkText&quot;:&quot;striking down affirmative-action programs at Harvard and the University of North Carolina&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.politico.com/news/2023/06/29/supreme-court-ends-affirmative-action-in-college-admissions-00104179&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a340001&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a340002&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">striking down affirmative-action programs at Harvard and the University of North Carolina</a> appeared to be a death knell for the use of race in college admissions. But the ruling was vague about whether and when schools can use other factors that often correlate with race — such as socioeconomic status and geography — to try to achieve the kind of racial diversity they’ve said they would lose without the programs ruled illegal this year.</p> <p>Now, just months after that momentous ruling, the justices are being asked to take up a dispute over changes to the admissions policy at an elite public school in northern Virginia, Thomas Jefferson High School for Science and Technology. The school recently downplayed test scores and gave more weight to other, formally race-neutral factors in a bid to increase the number of underrepresented minorities like Blacks and Latinos.</p> <p>Parents who sued over the changes contend that the school is using sleight of hand to achieve the kind of racial balancing the high court effectively outlawed and that the changes were driven, in part, by a perception that students of Asian descent were crowding out others.</p> <p>It’s unclear whether the justices will want to wade back into this issue so soon, but it seems inevitable that they’ll eventually have to deal with the efforts many schools are making to implement — or dodge — last term’s decision.</p> <h3 style="text-align: left">Social media fights loom large</h3> <p>The justices announced Friday they’ll weigh in on the drive by red-state legislatures to respond to what many conservatives regard as censorship of their views on platforms like Facebook, YouTube and X (formerly known as Twitter). Challenges by the social media giants to state laws in <a href="https://www.scotusblog.com/case-files/cases/netchoice-llc-v-paxton/" target="_blank" link-data="{&quot;linkText&quot;:&quot;Texas&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.scotusblog.com/case-files/cases/netchoice-llc-v-paxton/&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a340003&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a340004&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">Texas</a> and <a href="https://www.scotusblog.com/case-files/cases/moody-v-netchoice-llc/" target="_blank" link-data="{&quot;linkText&quot;:&quot;Florida&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.scotusblog.com/case-files/cases/moody-v-netchoice-llc/&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a340005&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a340006&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">Florida</a> trying to require equal treatment of various political views produced conflicting ruling from federal appeals courts.</p> <p>The cases, which will likely be argued early next year, pit the free-speech concerns of many Americans against what the companies’ claim is their First Amendment right to control what appears on their websites and could produce some strange bedfellows since some on the left are also skeptical about the power of the tech firms.</p> <p>The Supreme Court has also <a href="https://www.scotusblog.com/case-files/cases/lindke-v-freed/" target="_blank" link-data="{&quot;cms.site.owner&quot;:{&quot;_ref&quot;:&quot;0000014b-3270-d4f3-a3cb-f3ffa8610000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff4161000e&quot;},&quot;cms.content.publishDate&quot;:1696177934708,&quot;cms.content.publishUser&quot;:{&quot;_ref&quot;:&quot;00000180-f751-d6b4-a7e5-f7d9bbd30000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;cms.content.updateDate&quot;:1696177934708,&quot;cms.content.updateUser&quot;:{&quot;_ref&quot;:&quot;00000180-f751-d6b4-a7e5-f7d9bbd30000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;originalTemplate&quot;:false,&quot;link&quot;:{&quot;originalTemplate&quot;:false,&quot;attributes&quot;:[],&quot;target&quot;:&quot;NEW&quot;,&quot;url&quot;:&quot;https://www.scotusblog.com/case-files/cases/lindke-v-freed/&quot;,&quot;_id&quot;:&quot;0000018a-ec15-dd68-a3cf-ffd54cd60001&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;linkText&quot;:&quot;agreed to hear two other&quot;,&quot;_id&quot;:&quot;0000018a-ec15-dd68-a3cf-ffd54cd60000&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">agreed to hear two other</a> cases about <a href="https://www.scotusblog.com/case-files/cases/oconnor-ratcliff-v-garnier/" target="_blank" link-data="{&quot;cms.site.owner&quot;:{&quot;_ref&quot;:&quot;0000014b-3270-d4f3-a3cb-f3ffa8610000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff4161000e&quot;},&quot;cms.content.publishDate&quot;:1696177950459,&quot;cms.content.publishUser&quot;:{&quot;_ref&quot;:&quot;00000180-f751-d6b4-a7e5-f7d9bbd30000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;cms.content.updateDate&quot;:1696177950459,&quot;cms.content.updateUser&quot;:{&quot;_ref&quot;:&quot;00000180-f751-d6b4-a7e5-f7d9bbd30000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;originalTemplate&quot;:false,&quot;link&quot;:{&quot;originalTemplate&quot;:false,&quot;attributes&quot;:[],&quot;target&quot;:&quot;NEW&quot;,&quot;url&quot;:&quot;https://www.scotusblog.com/case-files/cases/oconnor-ratcliff-v-garnier/&quot;,&quot;_id&quot;:&quot;0000018a-ec15-d56c-abfa-ec7d86260001&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;linkText&quot;:&quot;political speech on social-media&quot;,&quot;_id&quot;:&quot;0000018a-ec15-d56c-abfa-ec7d86260000&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">political speech on social-media</a> platforms, exploring whether public officials can ban or block critical citizens from posting in the comment sections tied to the officials’ accounts. Those cases will be argued on Oct. 31.<b>&nbsp;</b><br></p> <br><iframe style="max-width: 100%" width="1280" height="720" src="https://players.brightcove.net/1155968404/r1WF6V0Pl_default/index.html?videoId=6332316459112" frameborder="0"></iframe> <br> <h3 style="text-align: left">Trump and the fallout from Jan. 6</h3> <p>The four ongoing criminal prosecutions of former President Donald Trump are unprecedented and any of them could spawn appeals to the high court, but there is one issue the justices could take up this term that would instantly overshadow every other case on the docket: whether Trump can or should be disqualified from the presidential race because of his role in ginning up the riot at the Capitol on Jan. 6, 2021, and his broader efforts to subvert the 2020 election.</p> <p>A slew of cases have been filed in various states <a href="https://www.politico.com/news/2023/09/01/fourteenth-amendment-insurrection-clause-trump-00113790" target="_blank" link-data="{&quot;linkText&quot;:&quot;trying to knock Trump off the ballot&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.politico.com/news/2023/09/01/fourteenth-amendment-insurrection-clause-trump-00113790&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a340007&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a340008&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">trying to knock Trump off the ballot</a> under the 14th Amendment’s insurrection clause. <a href="https://www.cnn.com/videos/politics/2023/08/19/smr-trump-ineligible-14th-amendment.cnn" target="_blank" link-data="{&quot;linkText&quot;:&quot;Legal scholars&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.cnn.com/videos/politics/2023/08/19/smr-trump-ineligible-14th-amendment.cnn&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a340009&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a34000a&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">Legal scholars</a> of <a href="https://www.theatlantic.com/ideas/archive/2023/09/supreme-court-needs-make-call-trumps-eligibility/675416/" target="_blank" link-data="{&quot;linkText&quot;:&quot;various persuasions&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.theatlantic.com/ideas/archive/2023/09/supreme-court-needs-make-call-trumps-eligibility/675416/&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a34000b&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a34000c&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">various persuasions</a> are urging the Supreme Court to address the issue in the coming months rather than waiting until closer to the election. That would produce a white-hot political showdown at the high court unlike any other in its modern history.</p> <h3 style="text-align: left">Abortion fights likely to return</h3> <p>The Supreme Court’s ground-shaking 5-4 ruling last year <a href="https://www.politico.com/news/2022/06/24/supreme-court-overturns-roe-v-wade-00042244" target="_blank" link-data="{&quot;linkText&quot;:&quot;overturning <i>Roe v. Wade</i>&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.politico.com/news/2022/06/24/supreme-court-overturns-roe-v-wade-00042244&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a350000&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a350001&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">overturning <i>Roe v. Wade</i></a> ended one chapter in the abortion battle, but did not put the issue to rest. The justices already stepped into one such fight in April on an emergency basis, <a href="https://www.politico.com/news/2023/04/21/supreme-court-maintains-abortion-pill-access-for-now-as-legal-fight-continues-00093349" target="_blank" link-data="{&quot;linkText&quot;:&quot;granting the Biden administration’s request to keep the abortion pill mifepristone on the market&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.politico.com/news/2023/04/21/supreme-court-maintains-abortion-pill-access-for-now-as-legal-fight-continues-00093349&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a350002&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a350003&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">granting the Biden administration’s request to keep the abortion pill mifepristone on the market</a> despite a ruling from a federal judge in Texas effectively revoking approval of the drug.</p> <p>Medication abortions now account for more than half of all abortions in the U.S., in part because of crackdowns on access to surgical abortions in many states. The pills also provide a way to evade the broad bans on abortion many states implemented after the justices’ decision last year that ended the federal constitutional right to terminate a pregnancy.</p> <p>The case about alleged flaws in the FDA’s approval process for mifepristone was sent back to the 5th Circuit for further action, but seems all but certain to return to the justices soon.</p>]]>
+      </content:encoded>
+    </item>
+    <item>
+      <title>Trump goes to trial in New York before a judge who just ruled he’s a fraud</title>
+      <link>https://www.politico.com/news/2023/10/01/trump-civil-trial-new-york-00119297</link>
+      <description>The $250 million civil trial starts Monday — and Trump may be there in person.</description>
+      <guid>https://www.politico.com/news/2023/10/01/trump-civil-trial-new-york-00119297</guid>
+      <pubDate>Sun, 01 Oct 2023 06:00:00 EST</pubDate>
+      <dc:creator>Erica Orden</dc:creator>
+      <dc:contributor>Erica Orden</dc:contributor>
+      <media:content type="image/jpeg" url="https://static.politico.com/12/00/60b6a8264fe38386a7d860056f19/trump-fraud-lawsuit-38395.jpg">
+        <media:credit scheme="urn:ebu">Artie Walker Jr./AP Photo</media:credit>
+        <media:title type="html">Former President Donald Trump pauses before ending his remarks at a rally in Summerville, S.C., on Sept. 25, 2023.</media:title>
+        <media:thumbnail url="https://static.politico.com/12/00/60b6a8264fe38386a7d860056f19/trump-fraud-lawsuit-38395.jpg"/>
+      </media:content>
+      <maz:template>core</maz:template>
+      <maz:modified>1696158074674</maz:modified>
+      <content:encoded>
+        <![CDATA[<img src="https://static.politico.com/12/00/60b6a8264fe38386a7d860056f19/trump-fraud-lawsuit-38395.jpg"> <br> <p>NEW YORK — Donald Trump is set to go to trial Monday in New York’s civil lawsuit accusing him of extensive business fraud — and while his formal courtroom adversary is the state attorney general’s office, he’ll also be facing off against the judge.</p> <p>In some ways, the trial is the culmination of months of antagonism between the former president and Justice Arthur Engoron, a Democrat who was elected to his current post as a Manhattan trial judge in 2015. The outcome of the nonjury trial will be entirely up to Engoron, who will make his decision on the heels of a series of fierce disputes with Trump.</p> <p>And in a surprise, Trump <a href="https://www.politico.com/news/2023/09/29/trump-attend-business-fraud-trial-00119198" target="_blank" link-data="{&quot;linkText&quot;:&quot;may attend the trial in person&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.politico.com/news/2023/09/29/trump-attend-business-fraud-trial-00119198&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a390003&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a390004&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">may attend the trial in person</a> — a plan revealed by lawyers late last week. If Trump follows through and appears in court, he’ll be sitting just a few feet away from a man he has publicly derided as “deranged.” <br></p> <br><iframe style="max-width: 100%" width="1280" height="720" src="https://players.brightcove.net/1155968404/r1WF6V0Pl_default/index.html?videoId=6335523107112" frameborder="0"></iframe> <br> <p>Last week, Engoron <a href="https://www.politico.com/news/2023/09/26/trump-fraud-trial-inflate-net-worth-00118269" target="_blank" link-data="{&quot;linkText&quot;:&quot;delivered a ruling&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.politico.com/news/2023/09/26/trump-fraud-trial-inflate-net-worth-00118269&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a390006&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a390007&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">delivered a ruling</a> that may obliterate Trump’s family business. Engoron found Trump liable for widespread fraud and revoked the licenses for some of his flagship properties, including Trump Tower and the Trump International Hotel. The ruling paves the way for much of the trial to focus on the punishments Trump will now face. They could be severe: Attorney General Tish James is asking for $250 million and a ban on Trump running businesses in the state.</p> <p>Trump and his lawyers — and even the attorney general’s office — were caught off guard by the sweep of Engoron’s pretrial ruling, and they have scrambled in recent days to determine what, exactly, it means for the future of Trump’s business.</p> <p>In turn, Trump called the judge “unhinged” and a “political hack” who “must be stopped.”</p> <p>“I have a Deranged, Trump Hating Judge, who RAILROADED this FAKE CASE through a NYS Court at a speed never before seen,” Trump wrote on his social media platform.</p> <p>Trump had spent months trying to thwart Engoron, most recently taking the aggressive step of filing a lawsuit that accuses the judge of failing to comply with an earlier appeals court decision that Trump argues limits the scope of the case against him. That matter is pending.</p> <p>Trump also repeatedly tried to delay the trial by asking an appeals court to push it back after he failed to convince Engoron to do so.</p> <p>Engoron’s response to Trump’s request was typically curt. “Decline to sign,” he wrote. “Defendants’ arguments are completely without merit.”</p> <p>On Thursday, the appeals court <a href="https://www.politico.com/news/2023/09/28/trump-new-york-fraud-trial-delay-00118917" target="_blank" link-data="{&quot;linkText&quot;:&quot;also declined to delay the trial&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.politico.com/news/2023/09/28/trump-new-york-fraud-trial-delay-00118917&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a390008&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a390009&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">also declined to delay the trial</a>.</p> <p>Trump’s tussles with Engoron began even before James filed her lawsuit. During the attorney general’s investigation, Engoron held Trump in contempt of court and ordered him to pay $10,000 a day after finding the former president had failed to comply with a subpoena from James’ office. The judge subsequently released Trump from the contempt order and required him to pay a total of $110,000 in penalties.</p> <p>In his ruling last week, Engoron answered perhaps the key question raised by James’ lawsuit: He found that Trump fraudulently inflated his net worth between 2014 and 2021. (Trump, who has denied all wrongdoing, has vowed to appeal the ruling.) The trial beginning Monday will address what Trump, his businesses, his adult sons and his business associates did with that false information. According to James, they used it to obtain favorable terms from banks and insurance companies, resulting in insurance fraud, and to gain tax benefits.</p> <p>The trial will also determine what financial penalties, if any, Trump must pay. James is seeking $250 million in penalties and a lifetime bar on the Trumps from serving as officers or directors in any New York companies, as well as a five-year bar on Trump or his company from entering into any real estate acquisitions.</p> <p>For Trump, Monday marks not only the start of the trial over the civil fraud lawsuit but also the beginning of a long string of trials he will face from October through May. Following James’ trial, Trump will face a <a href="https://www.politico.com/news/2023/09/06/trump-carroll-defamation-damages-00114317" target="_blank" link-data="{&quot;linkText&quot;:&quot;federal defamation trial&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.politico.com/news/2023/09/06/trump-carroll-defamation-damages-00114317&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a39000a&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a39000b&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">federal defamation trial</a> set for Jan. 15 in a case brought by writer E. Jean Carroll and a trial beginning Jan. 29 in a <a href="https://www.politico.com/story/2018/10/29/lawsuit-trump-family-racketeering-947075" target="_blank" link-data="{&quot;linkText&quot;:&quot;federal class action lawsuit&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.politico.com/story/2018/10/29/lawsuit-trump-family-racketeering-947075&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a39000c&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a39000d&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">federal class action lawsuit</a> accusing him and his company of promoting a pyramid scheme.<br></p> <br> <p>He will then face a federal criminal trial set for March 4 in special counsel Jack Smith’s case on Trump’s effort to subvert the 2020 election, a New York state criminal trial set for March 25 in a case brought by the Manhattan district attorney’s office and another federal criminal trial set for May 20 in Smith’s case concerning the alleged mishandling of classified documents. He is also under indictment in Georgia for election interference; a trial date there has not yet been set.</p> <p>Trump isn’t required to attend the New York civil trial — and until last week he wasn’t expected to show up unless called to testify by the attorney general (which she has indicated she is considering). He didn’t appear in court for any of a federal civil trial held earlier this year in a separate lawsuit brought by Carroll.</p>]]>
+      </content:encoded>
+    </item>
+    <item>
+      <title>He, She, They: The Pronoun Debate Will Likely Land at the Supreme Court</title>
+      <link>https://www.politico.com/news/magazine/2023/10/01/pronouns-schools-supreme-court-00118832</link>
+      <description>And the trend doesn’t look good for transgender kids.</description>
+      <guid>https://www.politico.com/news/magazine/2023/10/01/pronouns-schools-supreme-court-00118832</guid>
+      <pubDate>Sun, 01 Oct 2023 06:00:00 EST</pubDate>
+      <dc:creator>Kimberly Wehle</dc:creator>
+      <dc:description>&lt;i&gt;Kim Wehle&lt;/i&gt; is a professor at the University of Baltimore School of Law and author of How to Read the Constitution — and Why. Her forthcoming book is How the Pardon Power Works — and Why.</dc:description>
+      <dc:contributor>Kimberly Wehle</dc:contributor>
+      <media:content type="image/jpeg" url="https://static.politico.com/d1/5c/3369240f476aa792a88d0f9292e6/gettyimages-1250883035.jpg">
+        <media:credit scheme="urn:ebu">Shelby Tauber for The Washington Post via Getty Image</media:credit>
+        <media:title type="html">Parents look at a self-portrait their son drew expressing his identity.</media:title>
+        <media:thumbnail url="https://static.politico.com/d1/5c/3369240f476aa792a88d0f9292e6/gettyimages-1250883035.jpg"/>
+      </media:content>
+      <maz:template>magazine</maz:template>
+      <maz:modified>1696158049000</maz:modified>
+      <content:encoded>
+        <![CDATA[<img src="https://static.politico.com/d1/5c/3369240f476aa792a88d0f9292e6/gettyimages-1250883035.jpg"> <br> <p>Once again, a pitched battle in America’s culture wars is making its steady way to the U.S. Supreme Court. In this round, the emerging question is whether public school children have a right to choose names and pronouns affirming their gender identity, or whether parents’ right to manage the upbringing of their children overrides it.</p> <p><a href="https://news.bloomberglaw.com/litigation/public-schools-pronoun-protocol-tests-bounds-of-parental-rights" target="_blank" link-data="{&quot;linkText&quot;:&quot;Three separate federal appeals courts&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://news.bloomberglaw.com/litigation/public-schools-pronoun-protocol-tests-bounds-of-parental-rights&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a410000&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a410001&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">Three separate federal appeals courts</a> have already confronted the issue, which has left school administrators across the country having to pick between the wishes and needs of students on one hand, and the demands of parents that they be alerted to their children’s gender and pronoun preferences at school on the other.</p> <p>The legal issues in these cases are not easy ones, pitting children’s rights against their parents’ rights. Upset parents contend that by using a child’s preferred pronouns without their knowledge, government actors are illegally providing medical care without the parental consent that state law mandates. Weighing against the parents are their kids’ requests as well as state laws requiring that schools provide non-discriminatory environments in which students can safely express their gender identities. According to the Human Rights Campaign, <a href="https://www.hrc.org/resources/state-maps" target="_blank" link-data="{&quot;linkText&quot;:&quot;22 states&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.hrc.org/resources/state-maps&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a410002&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a410003&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">22 states</a> and the District of Columbia <a href="https://www.hrc.org/resources/state-maps" target="_blank" link-data="{&quot;linkText&quot;:&quot;have laws&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.hrc.org/resources/state-maps&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a410004&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a410005&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">have laws</a> protecting students from harassment based on gender identity.</p> <p>The outcome, while centering around school administration rather than the civil rights of transgender Americans, is likely nonetheless to have far-reaching impacts. Not only does it invite the unelected justices to take sides in the clash between conservatives and progressives over what should be tolerated and taught in public schools, but it could wind up sending a powerful signal about the extent to which the court will permit discrimination on the basis of non-conforming gender identity under the Constitution itself.</p> <br> <p><br><b>The latest dispute to</b> reach a federal appeals court arose when parents Stephen Foote and Marissa Silvestri <a href="https://www.bloomberglaw.com/public/desktop/document/FooteetalvLudlowSchoolCommitteeetalDocketNo322cv30041DMassApr1220?doc_id=X3T38OEAVQ98HVAGVI971HP48HS" target="_blank" link-data="{&quot;linkText&quot;:&quot;sued a range of government entities&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.bloomberglaw.com/public/desktop/document/FooteetalvLudlowSchoolCommitteeetalDocketNo322cv30041DMassApr1220?doc_id=X3T38OEAVQ98HVAGVI971HP48HS&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a410006&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a410007&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">sued a range of government entities</a> and officials affiliated with the Ludlow, Massachusetts public schools. The lawsuit alleges that during the 2020-2021 school year, their child approached a teacher about feelings of depression, low self-esteem and possible attraction to the same gender. The teacher spoke with the child’s mother, who responded that she was getting the child professional help and asked school staff not to have private conversations with the child. The child, who was 11 at the time, then sent an email to school personnel self-identifying as genderqueer and announcing a new name and list of preferred pronouns. The school counselor responded with an email to staff stating that, consistent with a policy sanctioned by the Ludlow School Committee, they should not use the new preferred name and pronouns when communicating with the parents. Around the same time, the child’s sibling, who was then 12 years old, also began using a different name. The school did not tell the parents.</p> <p>After the parents learned of the situation, they complained to the school “about negative consequences their children might experience as a result of being able to use names and pronouns associated with the opposite sex.” They also objected to the staff’s disregard of their instructions. The school superintendent publicly defended the school’s actions and asserted “that for some students who are transgender or gender nonconforming, school is the only safe place to express who they are.”</p> <p>The parents sued, alleging that the defendants violated three different rights derived from the 14th Amendment: (1) their fundamental parental rights to direct the education and upbringing of their children, (2) their fundamental right to direct medical and mental health decision-making for their children, and (3) their fundamental right to “familial privacy” and “family integrity.”</p> <p><br></p> <br> <img src="https://static.politico.com/1e/66/e96f08a341fb9bb8a983cfb76743/gettyimages-1385207826.jpg"> <br> <p>None of these rights are expressly identified in the Constitution. All of them stem from the same aspect of the 14th Amendment that produced the original decision in <i>Roe v. Wade</i> — “substantive” due process. The Supreme Court, of course, has now overturned that decision, leaving open the question of which constitutional rights stemming from the 14<sup>th</sup> Amendment will now prevail and which won’t.</p> <p>In the <i>Foote </i>case, U.S. District Judge Mark G. Mastroianni dismissed the lawsuit and ruled in favor of the school. He wrote that, on the question of the parents’ rights to direct their children’s medical care, the parents “have not alleged either child has been diagnosed with gender dysphoria” or “explained how referring to a person by their preferred name and pronouns, which requires no special training or skill, has clinical significance.” The judge added that “addressing a person using their preferred name and pronouns simply accords the person the basic level of respect expected in a civil society generally."</p> <p>Regarding the claims of interference with the parents’ rights to direct their children’s upbringing and education, the judge held that the parents failed “to identify ... specific allegations of conscience-shocking conduct supporting their claims.” Although it is “disconcerting that school administrators ... adopted and implemented a policy requiring school staff to actively hide information from parents about something of importance regarding their child,” the law requires “a ‘stunning’ level of arbitrariness” to rise to a constitutional violation.</p> <p>That dismissal order is now on appeal before the U.S. Court of Appeals for the 1st Circuit. The 4th Circuit separately tossed out a similar case. Another remains pending in the 11th Circuit. Given the political overtones (the parents behind both the 1st and 11th Circuit cases are represented by the Child &amp; Parental Rights Campaign, which states on <a href="https://childparentrights.org/" target="_blank" link-data="{&quot;linkText&quot;:&quot;its website&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://childparentrights.org/&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a410008&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a410009&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">its website</a> that “children are being led to believe a powerful untruth — that they could be ‘born in the wrong body,’”) and because the law is so murky and undeveloped in this area, it is highly likely the issue will be appealed to the U.S. Supreme Court.</p> <br> <p><br><b>Several competing legal</b> threads are in play here, making the issue constitutionally complex, and easy answers disturbingly elusive.</p> <p>Here’s some of what the courts have to weigh.</p> <p><b>Question: Do children have a constitutional right to choose their own names and pronouns?</b></p> <p>Answer: Children have full rights under the Constitution — but to a meaningful extent just in theory.</p> <br> <img src="https://static.politico.com/78/7f/0d3413b84c42a0fae446eafbc04c/gettyimages-517350944.jpg"> <br> <p>In <a href="https://supreme.justia.com/cases/federal/us/428/52/" target="_blank" link-data="{&quot;linkText&quot;:&quot;<i>Planned Parenthood of Central Missouri v. Danforth</i>&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://supreme.justia.com/cases/federal/us/428/52/&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a420000&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a420001&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}"><i>Planned Parenthood of Central Missouri v. Danforth</i></a>, Justice Harry Blackmun wrote in 1972 that “constitutional rights do not mature and come into being magically only when one attains the state-defined age of majority. Minors, as well as adults, are protected by the Constitution and possess constitutional rights.”</p> <p>Despite that clear edict, the court has refused to allow children some of the most basic rights. In 1972, for example, it <a href="https://supreme.justia.com/cases/federal/us/403/528/" target="_blank" link-data="{&quot;linkText&quot;:&quot;held that&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://supreme.justia.com/cases/federal/us/403/528/&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a420002&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a420003&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">held that</a> “juvenile delinquents” do not have a constitutional right to a trial by jury. In 1977, it <a href="https://supreme.justia.com/cases/federal/us/430/651/" target="_blank" link-data="{&quot;cms.site.owner&quot;:{&quot;_ref&quot;:&quot;0000014b-3270-d4f3-a3cb-f3ffa8610000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff4161000e&quot;},&quot;cms.content.publishDate&quot;:1696006981520,&quot;cms.content.publishUser&quot;:{&quot;_ref&quot;:&quot;0000014f-1273-df62-a94f-9f7bc13f0011&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;cms.content.updateDate&quot;:1696006981520,&quot;cms.content.updateUser&quot;:{&quot;_ref&quot;:&quot;0000014f-1273-df62-a94f-9f7bc13f0011&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;originalTemplate&quot;:false,&quot;link&quot;:{&quot;originalTemplate&quot;:false,&quot;attributes&quot;:[],&quot;target&quot;:&quot;NEW&quot;,&quot;url&quot;:&quot;https://supreme.justia.com/cases/federal/us/430/651/&quot;,&quot;_id&quot;:&quot;0000018a-e1e4-dd68-a3cf-fbf4b70a0000&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;linkText&quot;:&quot;ruled that&quot;,&quot;_id&quot;:&quot;0000018a-e1e4-dd68-a3cf-fbf4b7090000&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">ruled that</a> the Constitution does not protect children from disciplinary corporal punishment in public schools. (In the home too, most states <a href="https://www.reuters.com/article/us-usa-nfl-spanking-idUSKCN0HQ4X720141001" target="_blank" link-data="{&quot;linkText&quot;:&quot;allow for&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.reuters.com/article/us-usa-nfl-spanking-idUSKCN0HQ4X720141001&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a420004&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a420005&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">allow for</a> the use of mild physical force against children — or spanking — even if it would constitute criminal assault between adults.) Children cannot marry at will (although <a href="https://endcorporalpunishment.org/reports-on-every-state-and-territory/usa/#:~:text=of%20corporal%20punishment-,Home,all%20corporal%20punishment%20in%20childrearing." target="_blank" link-data="{&quot;linkText&quot;:&quot;numerous states&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://endcorporalpunishment.org/reports-on-every-state-and-territory/usa/#:~:text=of%20corporal%20punishment-,Home,all%20corporal%20punishment%20in%20childrearing.&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a420006&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a420007&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">numerous states</a> have no age floor and many allow children to be married off with parental or judicial consent), vote or serve on juries. </p> <p>The court has also seen fit to <a href="https://www.law.cornell.edu/supremecourt/text/469/325" target="_blank" link-data="{&quot;linkText&quot;:&quot;diminish&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.law.cornell.edu/supremecourt/text/469/325&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a420009&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a42000a&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">diminish</a> the 4th Amendment’s probable cause requirement for searches of children and their property on school grounds. <a href="https://casetext.com/case/wyatt-v-fletcher" target="_blank" link-data="{&quot;linkText&quot;:&quot;Lower courts&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://casetext.com/case/wyatt-v-fletcher&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a42000b&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a42000c&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">Lower courts</a> have held that children do not have a 14th Amendment privacy right that prohibits schools from communicating sensitive information to their parents, “even when private matters of sex are involved.”</p> <p>All this means that when the issue of pronoun preferences in school inevitably reaches the high court, it is unlikely that a child’s right to choose their name and gender identity in school will dominate a legal equation that implicates the separate and distinct rights of parents and the state.</p> <br> <p>Which brings the discussion to the more salient questions.</p> <p><b>Question: Do parents have a right to choose their child’s name and pronouns for use in public schools?</b></p> <p>Answer: Parents have a right to direct their children’s mental health care, upbringing and education — but that doesn’t mean controlling how public schools teach.</p> <p>As with the constitutional right to abortion access, which the Supreme Court last June nullified as <i>not</i> protected from government interference under the 14th Amendment, the Constitution says nothing about parental rights. The right to decide how to raise one’s children instead derives from the same provision of the Constitution that the court found too vague to justify <i>Roe v. Wade</i>: The “due process” clause of the 14th Amendment.</p> <p>In a line of cases dating back to the early 1920s, <a href="https://supreme.justia.com/cases/federal/us/262/390/" target="_blank" link-data="{&quot;cms.site.owner&quot;:{&quot;_ref&quot;:&quot;0000014b-3270-d4f3-a3cb-f3ffa8610000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff4161000e&quot;},&quot;cms.content.publishDate&quot;:1696007368324,&quot;cms.content.publishUser&quot;:{&quot;_ref&quot;:&quot;0000014f-1273-df62-a94f-9f7bc13f0011&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;cms.content.updateDate&quot;:1696007368324,&quot;cms.content.updateUser&quot;:{&quot;_ref&quot;:&quot;0000014f-1273-df62-a94f-9f7bc13f0011&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;originalTemplate&quot;:false,&quot;link&quot;:{&quot;originalTemplate&quot;:false,&quot;attributes&quot;:[],&quot;target&quot;:&quot;NEW&quot;,&quot;url&quot;:&quot;https://supreme.justia.com/cases/federal/us/262/390/&quot;,&quot;_id&quot;:&quot;0000018a-e1ea-de9d-afbf-ebfea10f0001&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;linkText&quot;:&quot;the Court held&quot;,&quot;_id&quot;:&quot;0000018a-e1ea-de9d-afbf-ebfea10f0000&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">the Court held</a> in <i>Meyer v. Nebraska </i>that the word “liberty” in the 14th Amendment’s iconic phrase, “life, liberty, or property,” has substantive connotations, “denot[ing] not merely freedom from bodily restraint, but also the right of the individual to contract, to engage in any of the common occupations of life, to acquire useful knowledge, to marry, establish a home and bring up children, to worship God according to the dictates of his own conscience, and generally to enjoy those privileges long recognized at common law as essential to the orderly pursuit of happiness by free men.” Despite being heavily scorned by the conservative right, therefore, the concept of “substantive due process” goes far deeper than abortion care in protecting foundational liberties that most Americans take for granted — including the right to parent without second-guessing by the government.</p> <p>In 2000, in a case called <a href="https://supreme.justia.com/cases/federal/us/530/57/" target="_blank" link-data="{&quot;linkText&quot;:&quot;<i>Troxel v. Granville</i>&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://supreme.justia.com/cases/federal/us/530/57/&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a42000e&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a42000f&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}"><i>Troxel v. Granville</i></a>, the Supreme Court in a splintered ruling affirmed parents’ fundamental right under the 14th Amendment to oversee the care, custody and control of a child. That case involved an unmarried couple’s two children, whose dad died. After the mother remarried, the father’s parents sued under state law for the right to visit their grandchildren. The Supreme Court ruled against the grandparents, finding it reasonable to assume that the mother would act in the best interests of her children. Absent a threshold showing of harm or potential harm to the children, it reasoned, the state of Washington could not interfere with the mother’s role by granting rights to a third party.</p> <p>Whether the court’s right-leaning majority would strike down constitutional protections for parental prerogatives on grounds similar to those that decided <i>Roe</i>’s fate — e.g., that the text of the Constitution is silent when it comes to parents’ rights — is tricky to predict. Given the ideological taint the modern court has embraced, however, it’s easy to imagine an outcome different than <i>Dobbs v. Jackson Women’s Health Organization</i>, which killed <i>Roe.</i></p> <br> <img src="https://static.politico.com/a9/54/f3bc19654ad1bc1dc896beb55c0f/gettyimages-1474888389-1.jpg"> <br> <p><b>Question: Does the state have a legal right to override parents’ wishes regarding students who identify as transgender or gender nonconforming?</b></p> <p>Answer: The state has a general power to regulate education and child welfare, but it’s not yet clear whether pronoun choice or gender identity qualify as part of a child’s education or welfare under the law.</p> <p>In 1954, the Supreme Court in <a href="https://supreme.justia.com/cases/federal/us/347/483/" target="_blank" link-data="{&quot;linkText&quot;:&quot;<i>Brown v. Board of Education</i>&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://supreme.justia.com/cases/federal/us/347/483/&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a430000&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a430001&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}"><i>Brown v. Board of Education</i></a> underscored that “education is perhaps the most important function of state and local governments.” Additionally, the court <a href="https://supreme.justia.com/cases/federal/us/452/18/" target="_blank" link-data="{&quot;linkText&quot;:&quot;has held&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://supreme.justia.com/cases/federal/us/452/18/&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a430002&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a430003&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">has held</a> that the state has “an urgent interest in the welfare of the child”— including that of “the unborn human being,” as underscored last year in <i>Dobbs.</i> The court has also found that although the state can intervene in child welfare matters, it has <a href="https://supreme.justia.com/cases/federal/us/489/189/" target="_blank" link-data="{&quot;linkText&quot;:&quot;no affirmative obligation&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://supreme.justia.com/cases/federal/us/489/189/&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a430004&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a430005&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">no affirmative obligation</a> under the 14th Amendment to protect abused children.</p> <p>Nonetheless, the court has yet to articulate how to strike the balance between parental rights and the states’ authorities to regulate education and the welfare of children. Numerous <a href="https://casetext.com/case/parker-v-hurley-2" target="_blank" link-data="{&quot;linkText&quot;:&quot;lower courts&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://casetext.com/case/parker-v-hurley-2&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a430006&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a430007&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">lower courts</a> have recognized that not all decisions by public schools “strike at the heart of parental decision-making.” In other words, parents do not have a constitutional right “to tell a public school what his or her child will and will not be taught.” Even as far back as <i>Meyer</i>, the Supreme Court specified that parental interests cannot automatically interfere with “the state’s power to prescribe a curriculum for the institutions which it supports.”</p> <p>Keep in mind, as well, that states have additional public interests at stake here, such as ensuring that school environments are discrimination-free. For example, <a href="https://law.justia.com/codes/massachusetts/2021/part-i/title-xii/chapter-76/section-5/" target="_blank" link-data="{&quot;linkText&quot;:&quot;Massachusetts law&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://law.justia.com/codes/massachusetts/2021/part-i/title-xii/chapter-76/section-5/&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a430008&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a430009&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">Massachusetts law</a> provides that “no person shall be excluded from ... obtaining the advantages, privileges and courses of study of [a] public school on account of ... gender identity,” which the <a href="https://malegislature.gov/Laws/GeneralLaws/PartI/TitleI/Chapter4/Section7" target="_blank" link-data="{&quot;linkText&quot;:&quot;law defines&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://malegislature.gov/Laws/GeneralLaws/PartI/TitleI/Chapter4/Section7&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a43000a&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a43000b&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">law defines</a> as “appearance or behavior ... different from that traditionally associated with the person’s physiology or assigned sex at birth.”</p> <p>In <i>Foote</i>, the lower court justified its dismissal of the parents’ case by emphasizing that Massachusetts’s anti-discrimination laws contained no “exceptions to permit parents to override a school’s decision to support students who identify as transgender or gender nonconforming.”</p> <br> <p><br><b>So, how might the Supreme Court</b> rule on this issue?</p> <p>Absent a constitutional amendment, the Supreme Court is the ultimate arbiter of which rights the Constitution protects and which rights it doesn’t. The court’s recent decision in<a href="https://www.law.cornell.edu/supremecourt/text/21-476" target="_blank" link-data="{&quot;linkText&quot;:&quot; <i>303 Creative LLC v. Elenis</i>&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.law.cornell.edu/supremecourt/text/21-476&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a43000c&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a43000d&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}"><i>303 Creative LLC v. Elenis</i></a> sheds some light on how the conservative-leaning majority might approach a duel between a state’s right to determine curriculum standards or child welfare and parents’ right to direct the upbringing of children, including decisions regarding their health and well-being.</p> <p>In that case, the court had before it a since-revised Colorado statute banning discrimination in places of public accommodation, including on the basis of sexual orientation. A web designer who feared enforcement of the law if she were to one day refuse to create a wedding website for a gay couple sued, claiming that the law violated her First Amendment rights to free speech and the free exercise of her religion. The Supreme Court took up just the free speech claim, holding that the anti-discrimination law must fold because it could coercively force her to speak in support of marriages that she does not endorse.</p> <p>Although the <i>Foote </i>case does not raise First Amendment arguments, the fact that the Supreme Court overrode a state’s anti-discrimination law in favor of another constitutional interest is telling.</p> <p>If tasked with weighing of the interests of transgender or gender-nonconforming children and their public-school protectors versus the interests of parents in making decisions regarding the health care, education and upbringing of their children, it is easy to see where the trajectory is going. Conservative “values” will probably win. Never mind that the Constitution itself says nothing about parental rights, let alone direct that school administrators adhere to parental choice regarding gender identity and pronouns.</p> <p>The modern court’s majority already made clear in <i>Dobbs</i> that theories of textualism — and the intellectual honesty that should come with adhering to the Constitution’s plain language first and foremost — is not the touchstone of its judicial philosophy. Some rights that the Constitution is silent on are protected, and some aren’t.</p> <p><br></p> <br> <br>]]>
+      </content:encoded>
+    </item>
+    <item>
+      <title>America Helped My Ancestors Flee Antisemitism. The Lakota Paid the Price.</title>
+      <link>https://www.politico.com/news/magazine/2023/09/29/antisemitism-lakota-land-00118919</link>
+      <description>A new book explores the opportunity Jewish immigrants found on the South Dakota prairie — and what it cost Native Americans.</description>
+      <guid>https://www.politico.com/news/magazine/2023/09/29/antisemitism-lakota-land-00118919</guid>
+      <pubDate>Fri, 29 Sep 2023 07:02:51 EST</pubDate>
+      <dc:creator>Rebecca Clarren</dc:creator>
+      <dc:description>Rebecca Clarren is an investigative reporter and the author of &lt;a href="https://www.penguinrandomhouse.com/books/647961/the-cost-of-free-land-by-rebecca-clarren/"&gt;&lt;i&gt;The Cost of Free Land: Jews, Lakota and an American Inheritance&lt;/i&gt;&lt;/a&gt;, from which this article was adapted.</dc:description>
+      <dc:contributor>Rebecca Clarren</dc:contributor>
+      <media:content type="image/jpeg" url="https://static.politico.com/b0/36/3e7fd6fe4cd5adbf5c036521de67/mag-clarren-lakota-secondary1-override.jpg">
+        <media:credit scheme="urn:ebu">Courtesy of Rebecca Clarren</media:credit>
+        <media:title type="html">Clarren's great-great-uncle Jack, his gun holstered on the outside of his suit jacket, shakes hands with an Indigenous man wearing a war bonnet and holding a beaded bag and pipe. Her relatives always identified this man — inaccurately it would turn out — as Chief Red Cloud.</media:title>
+        <media:thumbnail url="https://static.politico.com/b0/36/3e7fd6fe4cd5adbf5c036521de67/mag-clarren-lakota-secondary1-override.jpg"/>
+      </media:content>
+      <maz:template>magazine</maz:template>
+      <maz:modified>1696001666013</maz:modified>
+      <content:encoded>
+        <![CDATA[<img src="https://static.politico.com/b0/36/3e7fd6fe4cd5adbf5c036521de67/mag-clarren-lakota-secondary1-override.jpg"> <br> <br> <p>I grew up looking at mysterious, never-explained photographs of my Jewish ancestors posing in studios or on roadsides with Indigenous people in South Dakota, not far from my family’s ranch. In one sepia-tone picture, my great-great-uncle Jack, his gun holstered on the outside of his suit jacket, shakes hands with an Indigenous man wearing a war bonnet and holding a beaded bag and pipe. My relatives always identified this man — inaccurately it would turn out — as Chief Red Cloud. That we were related to someone who knew a famous chief was a source of pride, but not of curiosity. Though my ancestors lived near several reservations, I heard no handed-down stories about the Lakota and our relatives.</p> <p>Instead, my family passed on stories that telegraphed tenacity and toughness. My great-great grandparents, Faige Etke and Harry Sinykin, joined a wave of Jews fleeing antisemitism and oppression in Russia at the turn of the 20th century. Like many other immigrants at the time, they received free land from the U.S. government after arriving in America: a 160-acre homestead that was theirs to keep if they could tame the wild prairie into farmland. So many Jewish immigrants settled in this one slice of the South Dakota prairie that some locals still call the area “Jew Flats.” Life on the prairie was hard and strange. They chopped holes in frozen creeks to take mikvahs, burned dried buffalo dung for warmth during the cruel winters and dodged rattlesnakes on the path to the outhouse. I grew up marveling at these stories, hoping that they meant something about me, that I too might have grit.</p> <p>It took me a long time to realize that there was white space at the margins of these narratives. Because while the stories we tell create the myths we pass down to future generations, so do the stories we don’t<i>&nbsp;</i>tell — such as the silence surrounding photographs like the one of my great-great uncle and the Lakota man.</p> <p>I have spent almost my entire adult life reporting on the American West, attempting to write articles that expand our fixed ideas about the region. Yet, when it came to my own ancestors’ history on the South Dakota prairie, I maintained a blind spot. Only after years of reporting in Indigenous communities did it dawn on me that my family, that I myself, had benefitted from centuries of federal mistreatment of Indigenous people in the United States.</p> <p>Finally curious about what had happened a century ago on the South Dakota prairie, in 2018 I began research for what would eventually become my book, <a href="https://www.penguinrandomhouse.com/books/647961/the-cost-of-free-land-by-rebecca-clarren/" target="_blank" link-data="{&quot;linkText&quot;:&quot;<i>The Cost of Free Land: Jews, Lakota and An American Inheritance</i>&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.penguinrandomhouse.com/books/647961/the-cost-of-free-land-by-rebecca-clarren/&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a4b0000&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a4b0001&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}"><i>The Cost of Free Land: Jews, Lakota and An American Inheritance</i></a>. On visits to both Jew Flats and nearby Lakota reservations, I carried those mysterious photographs with me. What I would learn over the coming years would change the way I understood my family, America and my place in this country.<br></p> <br> <p>How to atone for historic wrongs — both as a nation and as individuals — has become a pivotal topic of debate in American politics. We don’t agree about reparations policies. We don’t agree about affirmative action. We don’t even agree about teaching the truth of our nation’s history in schools. As a journalist, my job has been to expose issues, to bring them into the cold light of day — not to provide solutions. But I would find repeatedly while working on <i>The Cost of Free Land</i> that my family’s personal narrative was inextricable from America’s collective history. How to move forward in a way that included the past was no longer a question I could ignore.<br></p> <br> <p><b>The rolling hills and grass</b> sea of Jew Flats was “a place like the End of the World,” my great-great-aunt Rose, who grew up there, wrote years later. “Twenty-five miles from a railroad station, seven miles from a post office, three and a half miles from any neighbors.” Here, 13 miles from the southeast corner of the Cheyenne River Sioux Tribe Reservation, around 30 Jewish families homesteaded some 7,000 non-contiguous acres within a span of 44 square miles on former Lakota land. (By this point, the United States had taken approximately 98 percent of the land reserved for the Lakota by a treaty in 1851 and given it to white settlers and railroad companies.)</p> <p>By 1912, four years after my ancestors sowed their first crop, there were an estimated 25,000 Jewish farmers in 46 states. More than 70 Jewish farm communities, composed of anywhere from a few dozen to 2,500 people, had been established in the United States — many in the West, many on formerly Native American lands. In the Dakotas, an estimated 1,000 Jews were homesteaders like the Sinykins. (Keep in mind, they represented a sliver of Dakota settlers, estimated at less than 0.5 percent.) Though their lives were certainly freer than those of Jews under constant threat in Eastern Europe, by no means were their lives easy.</p> <p>That first winter that my ancestors arrived, they lived in a house made of dirt, its walls the cut bank of a hill, with roots and grass jutting from the roof. When it rained, it rained through a hole in the roof made for the stove pipe, and the floor liquified to mud. These sod houses were dark and smelled, I can only imagine, like bong water. A hole in the ground under a board on the floor served as both a “refrigerator” and a place to hide from the not-infrequent tornados. A cave in the back housed their animals. The temperature could swing 50 degrees in one day. At night, it was so cold that they could lie in bed, dressed in layers of clothing, and watch their breath freeze on their blankets.<br></p> <br> <img src="https://static.politico.com/0a/56/e43bfab549a18ec09cbc2acb5778/cost-of-free-land-book-jacket.jpg"> <br> <p>The Sinykin’s 160 acres were free, but only if they could, under the rules of the Homestead Act, “improve” upon them by building a house and planting at least 10 acres within three years. My ancestors planted corn and wheat, but soon enough realized what the Lakota had known for years — that farming in this dry, unirrigated place was nearly impossible, especially during periods of drought. During several seasons in their early years on the prairie, it didn’t rain for an entire year; the best crops were prairie dogs, rattlesnakes and Russian thistle. One farmer in the country remembered that it was “so dry you couldn’t see a spear of grass.” The Sinykins lost their entire crop two years in a row.</p> <p>Even though their lives were hard, the dominant family narrative is that “they loved it. They always called it ‘the Good Earth,’” says my great-aunt Etta Orkin, our 90-year-old family matriarch. “Their lives were so much narrower in Russia, and I think they were so happy to be free to be able to go and come and do. Owning [land] made them feel they were a part of America, that they lived in a free country.”</p> <p>But in fact, that freedom came at great cost to my family’s Lakota neighbors.<br></p> <br> <p><b>In the aftermath of the </b>Civil War, the United States was bent on seeding the northern plains with white people who would support, just by being there, a transcontinental railroad linking the new state of California, and its abundant natural resources, to the rest of the country. Standing in the way of this vision were millions of buffalo and tens of thousands of Native Americans whose leaders had signed legal agreements with Congress reserving Indigenous rights to the land. So, promises made became promises broken.</p> <p>By 1908, when my family was planting their first crop on their South Dakota homestead, the United States had diminished Lakota lands by 98 percent in less than 60 years. In an effort to further diminish Native property, Congress had enacted policies of cultural genocide, aiming to assimilate Native people to the point that their economy, culture and religion were no longer tied to land.</p> <p>What I didn’t know growing up was that the stories about my ancestors on the prairie failed to acknowledge the systematic benefits the federal government extended to us because we weren’t Indigenous but white — at least, white enough. Not only were harms imposed upon those living on reservations, freedoms were extended to those outside the reservations, creating inequity in two directions.</p> <p>Unlike their Lakota neighbors, who were at risk of being jailed for practicing their ceremonies and religion, the Jews of Jew Flats were free to worship how they liked. Unlike their Lakota neighbors, whose children were regularly taken from their communities for nine months at a stretch to be assimilated at federal schools, the Sinykins were free to educate their children however they wanted. Unlike the Lakota, whom the Indian Agents tried to keep from farming or ranching in family groups with the intention of breaking apart traditional communal culture, the Sinykins and their cousins and friends survived by collective effort, unbothered by government interference. Unlike the Lakota, whose marriages and divorces were regulated by federal representatives, the Jews of Jew Flats could marry whomever they wanted. Unlike the Lakota, who were denied citizenship, which prevented them from voting and accessing a slew of rights, immigrant citizens (at least the men) could vote even when they couldn’t speak or read English. And unlike most Lakota, who couldn’t get a bank account or handle their own money, let alone leave the reservation to pursue jobs elsewhere, the Jews of Jew Flats could and did leverage the worth of their land for a mortgage or bank loan.</p> <p>To look at only one piece of this history is to ignore the depths of this unfairness.<br></p> <br> <p><b>On a summer day </b>in 2019, I knocked on a low-slung house on the Standing Rock Reservation, holding that photo of my Uncle Jack shaking hands with that man wearing Lakota regalia. Earlier visits to the Dakotas and interviews with Native historians had led me to believe that the man in the picture was Joseph White Bull, the nephew of Sitting Bull and a chief of the Mnicoujou Lakota. Now, the picture had led me to Doug White Bull, an elder who described himself as “my Grandpa Joe’s oldest living descendant.”</p> <p>Doug had never seen such a picture before. Neither had any of his nieces, nephews or kids whom I interviewed. I searched for years to figure out why these two men might have taken this picture, visiting museums of all sizes, searching archives and speaking with elders and tribal historians. I heard many theories, including one that this wasn’t even Joseph White Bull, but I never solved the mystery.</p> <p>When I started this project, I thought that, by understanding this picture, I could collapse the line between the past and today. I thought I might learn that it was Joseph’s ancestors who dropped the arrowheads my cousins found on Jew Flats. This longing, more than anything else, reveals my old ideas about land ownership, about the colonialism that has shaped me. Now I understand that photographs don’t tell stories. Photographs lead us to stories. Not having solved the mystery of this picture doesn’t matter as much to me anymore. The fact that their lives intersected at all has led me to know Doug White Bull and his relatives, whose insights and stories have changed the way I understand both American history and my own. When I look at this picture now, I see the world beyond the frame. I see the forces pushing both men to assimilate and pulling them apart. I see the thread linking both of their lives to mine.</p> <p>As my research revealed all the myriad ways that my family benefited from policies that harmed Native Americans, I kept returning to the question of how much my ancestors knew about what was happening to their neighbors on the nearby reservations. Were the Sinykins aware of the persecution being done in this land of the free?</p> <p>By 1908, the United States decided to allow white settlers to move onto Lakota reservations, further diminishing Native land. Newspapers published throughout western South Dakota between 1908 and 1911, the exact period during which my family was settling on the prairie, reported that Cheyenne River and Standing Rock Lakota didn’t want their reservations opened to non-Native settlement, and that they had signed treaties protecting these lands as their property. Despite this awareness, white ranchers urged public officials to open the reservations to them, justifying themselves in a way that exposed the racism at the heart of life on the plains.</p> <p>“The opening of the Sioux Indian lands is developing them from that of the homes of indolent dependents of the government to the farm residences of thrifty Americans,” ran a 1908 article about the opening of the Rosebud Reservation to white settlement. “The Indians who have been content to live lazily on the fertile soil and draw their liberal allowances will soon see more of their lands converted to useful purposes.”</p> <p>As far as I can tell, my family never bought any of these lands, and they weren’t among those making incessant requests to open additional land to white settlement. But that doesn’t mean they were ignorant of what was happening.</p> <p>“Everyone knew what was happening to Indians,” says Judge Abby Abinanti, a Yurok elder and chief judge whose courtroom has become a national model for criminal justice reform, winning her widespread esteem including a lifetime achievement award from the Federal Bar Association. Abinanti’s approach, which infuses jurisprudence with traditional culture and values, leans heavily on compassion. Because of both the bigoted messages my ancestors learned in America as well as the brutality they had experienced in Russia, which we now call trauma, Abinanti is quick to offer them empathy.</p> <p>“What do you expect of people who survived genocidal attacks but to survive, for God’s sake? When someone is fleeing for their life, if you’re on a dead run, you’re not stopping to have a restorative-justice conversation or question why you’re being helped.”</p> <p>It’s now the job, she gently reminds me, of my generation, those of us who have grown up free of such upheaval, to do the work of considering the harms of this entangled history. According to Abinanti, justice works best when grounded in one’s own culture. She suggested that I study Jewish teachings about repair and healing for guidance about how to move forward. Fortunately, I didn’t have to do this alone.</p> <p>Over the course of the following three years, I met regularly with my rabbi, Benjamin Barnett, to study ancient Jewish texts and the writings of contemporary rabbis for direction on how to repair after a harm has been committed, even and especially one that you didn’t commit directly but that you benefit from. I would begin to realize that truth-telling is critical to a repentance process, but its only one step of many needed to truly repair.</p> <p>After many years of conversations with both Lakota elders such as Doug White Bull and Jewish leaders, I came to realize that simply telling the truth about the past, working to debunk long-held American myths as I do in <i>The Cost of Free Land</i>, was important, but not enough. Guided by Doug and others, I and my family have created a fund with the Indian Land Tenure Foundation, a Native-led non-profit, that has been working for years to <a href="https://iltf.org/" target="_blank" link-data="{&quot;linkText&quot;:&quot;help Native Nations buy back their stolen lands&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://iltf.org/&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a4b0002&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a4b0003&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">help Native Nations buy back their stolen lands</a>. (We sold the last piece of our family ranch on Jew Flats to other white ranchers in 1970.) Reparation economics is a developing field, and by no means is my family’s effort a definitive solution. It is just one of many happening throughout the country that aim to reconcile the benefits the United States has extended to those of us who are non-Indigenous at great cost and harm to Native people.</p> <p>These efforts are complicated by the fact that we in America have a vacuum of federal leadership around how to consider the ways public policy and law have hurt Native Nations. However, if enough citizens lead by example, it’s possible Congress could be spurred to act. This happened in Australia in the late 1990s, when activists there created “Sorry Books” — available in public spaces such as libraries, churches and schools — that provided settler descendants the opportunity to apologize to the Indigenous people of Australia when their government refused to do so. The books were so popular that more than half a million people signed them, inspiring other grassroots projects and activism that eventually pushed the Australian government to take real action.</p> <p>Ultimately, I hope that readers of <i>The Cost of Free Land</i> will be inspired to find themselves in this American story of the dispossession of Indigenous lands. To help, I’ve <a href="https://static1.squarespace.com/static/5a99d0e8b98a78cd217057ba/t/65135c398bf8237cd65711b1/1695767613267/TheCostofFreeLand_Resources_FinalVersion.pdf" target="_blank" link-data="{&quot;linkText&quot;:&quot;collected the resources that were helpful to me&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://static1.squarespace.com/static/5a99d0e8b98a78cd217057ba/t/65135c398bf8237cd65711b1/1695767613267/TheCostofFreeLand_Resources_FinalVersion.pdf&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a4b0004&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a4b0005&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">collected the resources that were helpful to me</a> when I set out to attempt to untangle this complicated history. Because no matter when your family arrived in this country, all of us who aren’t Indigenous benefit from the fact that our country was built on the unfair taking and sometimes outright theft of Native lands. Broken treaties cleared the way for the foundation of our highway systems, our cities and our industrial agriculture. The sale and leasing of former Native lands funded public universities that have offered low-cost tuition to millions of Americans. Many of us have access to cheap power from hydroelectric dams that flooded Indigenous lands. Throughout its history, up to this moment, the United States has made choices to benefit settlers and their descendants at the detriment of Native Americans. This is our inheritance. What we do about it now is the question.<br></p> <br> <br>]]>
+      </content:encoded>
+    </item>
+    <item>
+      <title>Mick Mulvaney Dreamed of Shutting Down the Government. Then He Got to Do It.</title>
+      <link>https://www.politico.com/news/magazine/2023/09/29/mick-mulvaney-q-a-shutdown-00118934</link>
+      <description>Trump’s budget chief on what it’s like to be in charge of closing the government.</description>
+      <guid>https://www.politico.com/news/magazine/2023/09/29/mick-mulvaney-q-a-shutdown-00118934</guid>
+      <pubDate>Fri, 29 Sep 2023 04:00:00 EST</pubDate>
+      <dc:creator>Ian Ward</dc:creator>
+      <dc:description>Ian Ward is a reporter at POLITICO.</dc:description>
+      <dc:contributor>Ian Ward</dc:contributor>
+      <media:content type="image/jpeg" url="https://static.politico.com/1c/a3/a90d59954461af5a3c6b5978f1fc/gettyimages-1252575031.jpg">
+        <media:credit scheme="urn:ebu">Patrick T. Fallon/AFP via Getty Images</media:credit>
+        <media:title type="html">"The impact of a shutdown is impacted in large part by the political decision-making of the current administration," former White House Chief of Staff Mick Mulvaney told POLITICO.</media:title>
+        <media:thumbnail url="https://static.politico.com/1c/a3/a90d59954461af5a3c6b5978f1fc/gettyimages-1252575031.jpg"/>
+      </media:content>
+      <maz:template>magazine</maz:template>
+      <maz:modified>1695983123184</maz:modified>
+      <content:encoded>
+        <![CDATA[<img src="https://static.politico.com/1c/a3/a90d59954461af5a3c6b5978f1fc/gettyimages-1252575031.jpg"> <br> <p>On December 22, 2018, Mick Mulvaney achieved a major milestone in his political career: He signed a piece of paper officially shutting down a wide swath of the federal government.</p> <p>Mulvaney, then serving as the director of Office of Management and Budget in Donald Trump’s administration, was no stranger to shutdown politics. As a U.S. House member representing South Carolina between 2011 and 2017, Mulvaney earned a reputation as the leader of a group of hardline conservatives who were unafraid to use the threat of a shutdown to advance their spending priorities. In 2013, Mulvaney and his fellow fiscal conservatives achieved just that, forcing the federal government into a 16-day shutdown as part of an unsuccessful effort to block funding for Barack Obama’s signature health care bill.</p> <p>But in 2018, after Trump and Congress failed to come to an agreement on funding a wall along the Southern border, Mulvaney found himself on the other side of the shutdown fight: Not just calling for a shutdown, but actually executing one.</p> <p>“[It] was a unique experience, especially for someone who had been through shutdowns when I was in Congress,” Mulvaney told me when I spoke with him over the phone this week. “I wondered how many people would laugh, cry, wail, scream, do whatever when they found out that I was the one to shut the government down.”</p> <p>Mulvaney was joined on our call by two of his top aides from OMB — Emma Doyle, the agency’s former chief of staff, and Michael Williams, an assistant deputy legal counsel — who explained that the politics of implementing a shutdown are just as complex as the politics that lead to one.</p> <p>“It’s a very political decision,” said Doyle of the choice of which parts of the federal government to close and which to keep open. “There’s a lot of discretion.”<br></p> <br> <img src="https://static.politico.com/1c/9e/c7779bb141ecbcee4444a7c618cf/gettyimages-183950136.jpg"> <br> <p>Yet even after having seen how the sausage gets made, Mulvaney said he’s just as bullish as ever on the importance of shutdowns.</p> <p>“It’s not ideal, [but] it’s not the end of the world.”</p> <p><i>The following has been edited for clarity and concision.&nbsp;</i></p> <p><b>Ian Ward:</b> Take me back to December 21, 2018 — the day before the shutdown set in. What was going through your mind at that point?</p> <p><b>Mick Mulvaney:</b> Well, keep in mind that I was also sort of the Chief of Staff at the same time, so it was an interesting time. Even though I didn’t officially start at the White House until January 4, John Kelly had not been coming to work for several months, and I had already set up shop in his office down in the West Wing — which made sense if you stopped to think about it, because OMB Director runs a shutdown.</p> <p>But one of the vivid memories I have is I Emma coming in to tell me that it’s actually the OMB director who signs the document that shuts the government down — which was a unique experience, especially for someone who had been through shutdowns when I was in Congress. I wondered how many people would laugh, cry, wail, scream, do whatever when they found out that I was the one to shut the government down.</p> <p><b>Ward:</b> What were you feeling in that moment? Excitement? Dread?<br></p> <br> <img src="https://static.politico.com/d5/07/ca040e6c48c78bf9b2580196d14c/gettyimages-1074598602.jpg"> <br> <p><b>Mulvaney: </b>No — we had done a lot of research.</p> <p><b>Ward:</b> What sort of process had you gone through in advance to make sure that your ducks were all in a row come the December 21 deadline?</p> <p><b>Michael Williams: </b>Keep in mind that this was the second shutdown we went through. We’d gone through an initial one in early January of that year — which was the crazier one from a process point of view. During that one, we had just been scrambling, because the previous one had been several years earlier in a completely different administration with completely different goals for a shutdown, whereas we were trying to figure out how much we could keep open and how we could keep the public [operations] as normal as possible throughout the ordeal.</p> <p><b>Ward: </b>How much discretion does OMB have when it comes to keeping things open versus shutting things down? And what are the politics around that?</p> <p><b>Mulvaney:</b> That’s the real story here. The discretion is considerable. The statutes said that we have discretion as to “the protection of property.” But what is that? You can “except” people from a shutdown [the technical term for allowing them to work] based on “health and safety.” But there’s a lot of latitude there.</p> <p>The thing I remember is that we were really focused on the national monuments. I remembered from the 2013 shutdown that Obama’s team had not only shut down the monuments but put up a fence around the monuments with signs on it saying “Closed because of the government shutdown.” If you want to have a fun time, go <a href="https://www.politico.com/story/2013/10/deciphering-essential-nonessential-federal-employees-government-shutdown-097764" target="_blank" link-data="{&quot;linkText&quot;:&quot;<u>Google that sign</u>&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.politico.com/story/2013/10/deciphering-essential-nonessential-federal-employees-government-shutdown-097764&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a500000&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a500001&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}"><u>Google that sign</u></a>. It looks like a Trump tweet — every third word is capitalized for no reason. It’s hysterical.</p> <p><b>Emma Doyle: </b>They exempted employees to do that. They brought seven people to erect a [fence] around the World War Two Memorial to make the point that the shutdown was impacting people who were visiting D.C., who otherwise wouldn’t have been impacted. It’s a very political decision, and there’s a lot of discretion. There’s really no health and safety reason to say people can’t continue to explore an open-air, unfenced memorial that doesn’t normally have guides.</p> <p><b>Ward:</b> In 2018, was the imperative to keep as many things open as possible? And who was that imperative coming down from?</p> <p><b>Mulvaney: </b>Me.</p> <p><b>Ward: </b>What were the calculations behind that?</p> <p><b>Mulvaney:</b> They’re not calculations. It’s just the politics. When I was in Congress, I didn’t know that the Office of Management Budget had discretion regarding what stayed open and what was excepted. In fact, I didn’t even know the term “lapse in appropriations,” which is what it is. So we had learned a lot about a shutdown, and the more we learned, the more we learned how the Obama administration had really turned the screws in order to raise the political cost — to make things look as bad as they can. Not to say that’s illegal, but we figured out, <i>Okay, if Obama could turn the dial one way, we could turn the dial the other way. </i>We wanted to try and minimize the impact so that we could focus attention on the issue at hand, which was border security.</p> <p><b>Doyle: </b>I worked for Mick in 2013 in the House when we had that 16-day shutdown, and I think for a lot of us who were there for that, without knowing exactly how much discretion OMB had, it felt like there was discretion — but it was hard to figure out where it was coming from. I don't think any of us thought “<i>Oh, if we’re ever in that position, we’ll look for it</i>.” But when we did get into that position, we thought “<i>Now’s a good time to go and figure out what exactly has to close and what can stay open</i>.”</p> <p><b>Williams:</b> In my experience, career employees at OMB more or less want to keep the political folks on a narrow path, but you can shift that dial to the left or to the right a little bit. Obviously, Obama shifted it pretty far over to the left, and we wanted to shift it a little bit over to the right. So it is lot of discretion in moving that dial one way or the other — not complete discretion, but still a ton, because the exceptions are so vague and subject to interpretation.<br></p> <br> <p><b>Ward:</b> So Mick, after the OMB director signs that sheet of paper officially shutting the government, what role does OMB play in managing a shutdown?</p> <p><b>Mulvaney: </b>Well, you’d already be prepared for it, right? It’s not like a shutdown is a surprise — with the exception of that outlier [in 2013]. We send out notices in advance — by the way, I understand that those notices have already gone out from the OMB office now — and then the lapse hits, and you’ve already done the foundational work. You’ve laid the foundation with the various agencies, and they’ve started the process of identifying who’s going to be exempted and who gets furloughed. And then you implement that plan as soon as the date passes — so in this case, probably one minute after midnight on December 22.</p> <p><b>Doyle:</b> I think that’s something people don’t understand. It’s not like dropping a gate and sealing something off. It’s more like applying pressure to the brakes of a car and slowing it down. It’s really two weeks’ worth of work ahead of time, when you expect to maybe see a lapse in appropriations. It’s actually just as much work within OMB whether or not you get an 11th-hour deal done, because you can’t put aside that work and hope that Congress gets over the line. There’s a team within OMB called the BRD — the Budget Review Division — and they’re the ones that oversee that process. So those folks have been working flat out for the last couple of weeks, getting those plans in place, talking to agencies, and answering questions like “What if I have staff overseas?” “Do I bring people back?” “Do we buy their return ticket now?”</p> <p><b>Williams:</b> The people on the BRD team almost have their own language that they're speaking to their counterparts at the agencies. They’ll start a government-wide call about a week or so out from the deadline where the BRD folks will tell their counterparts either, “<i>We anticipate a shutdown</i>,” or “<i>We don’t anticipate a shutdown</i>,” depending on what they think. But in any case, they say, “<i>Prudent planning requires us to be blah, blah, blah, blah, blah,</i>” and then they go into the spiel. It’s sort of a tell-it-straight sort of call to the agencies — like “<i>Hey, this thing is probably going to happen</i>,” or not.</p> <p><b>Ward: </b>What’s the mood like in OMB during that two-week window you’re describing?</p> <p><b>Doyle:</b> We bought a lot of pizza. A lot of pizza.</p> <p>But it’s challenging, because on the one hand you’re managing it for the government, but on the other hand, you’re all about to go through it on a personal level as well. You’re all federal employees. Psychologically, I think, it’s gotten better since 2013. In 2013, there was a real sense that we might not all get paid back. That shifted [in 2019, when Congress <a href="https://crsreports.congress.gov/product/pdf/IN/IN12251#:~:text=The%20Government%20Employee%20Fair%20Treatment,end%20of%20a%20government%20shutdown.&amp;text=This%20statutorily%20guaranteed%20retroactive%20pay,to%20work%20during%20a%20shutdown." target="_blank" link-data="{&quot;linkText&quot;:&quot;<u>passed a law</u>&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://crsreports.congress.gov/product/pdf/IN/IN12251#:~:text=The%20Government%20Employee%20Fair%20Treatment,end%20of%20a%20government%20shutdown.&amp;text=This%20statutorily%20guaranteed%20retroactive%20pay,to%20work%20during%20a%20shutdown.&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a510000&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a510001&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}"><u>passed a law</u></a> guaranteeing back-pay to all federal employees]. I think that helps a little bit, but it’s still a loss. It’s still an indefinite loss of getting your paycheck. <br></p> <br> <img src="https://static.politico.com/ae/37/c1293fb44e54ae8c6b0df29da171/gettyimages-1090635968.jpg"> <br> <p>It’s not popular to say this on the right, but people are in these jobs because they care about doing their job and they want to do their job. Some people were happy to have a couple of days off, but you don't want 35 days off. So it’s tough to rally [people] psychologically to go, “<i>Okay, we're going to go through this ourselves, and we’re also laying this out for you.</i>”</p> <p><b>Ward:</b> How much of OMB stays on during a shutdown?</p> <p><b>Mulvaney:</b> I think we furloughed some comms people.</p> <p><b>Williams:</b> All the lawyers stayed on, but that is another weird overlay of it, because there’s this ego factor as well. Even though they’ve switched to that “excepted” and “not excepted” language, where it used to be “essential” and “non-essential.” If you’re going home, it’s kind of like being put on the sidelines in the Super Bowl. It’s not really the Super Bowl, but it’s a ton of work, and all of a sudden, you’re doing it without all of your coworkers.</p> <p><b>Doyle:</b> I think a lot there is a sense that if you know people are working late nights, you want to be there to help out.</p> <p><b>Ward:</b> So Mick, when you were in Congress, you were part of the ‘Shutdown Caucus’…</p> <p><b>Mulvaney: </b>Was that the official name? I don’t remember that one.</p> <p><b>Ward:</b> I’m doing air quotes. But in any event, you weren’t afraid of pushing the government into a shutdown in 2013. Did being on the other side of one change your perspective at all? <br></p> <br> <img src="https://static.politico.com/6a/cf/90a50acd4364a12abfa131ebf60a/gettyimages-1087133622.jpg"> <br> <p><b>Mulvaney:</b> No — in fact, it reaffirmed it. Once I got to OMB and realized how political the Obama administration had made it, that just reaffirmed my position that it can be done so that it’s not that big a deal. Is it a big deal? Yes. But it is not the end of the world, and it’s certainly not a shutdown.</p> <p>I was struck by the misinformation that the press would put out. ‘<i>Oh, Social Security payments are going to be delayed</i>.” No, they’re not. So I welcomed the opportunity to show people that while a shutdown was important, and it’s not ideal, it is not the end of the world.</p> <p><b>Ward: </b>Are they productive, though? There’s been some bipartisan chatter on the Hill about <a href="https://www.politico.com/news/2023/09/22/bipartisan-group-stop-government-shutdowns-00117679" target="_blank" link-data="{&quot;linkText&quot;:&quot;<u>legislating them out of existence</u>&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.politico.com/news/2023/09/22/bipartisan-group-stop-government-shutdowns-00117679&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a510002&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a510003&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}"><u>legislating them out of existence</u></a>. Could you get behind that?</p> <p><b>Mulvaney:</b> The same people who make that argument want to get rid of the debt ceiling as well. The only time we really talk about spending in this country is when we’ve got funding bills to approve, and we’ve got a debt ceiling to raise. That’s it. The <a href="https://www.crfb.org/papers/qa-everything-you-should-know-about-debt-ceiling" target="_blank" link-data="{&quot;linkText&quot;:&quot;<u>balanced budget of the 1990s</u>&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.crfb.org/papers/qa-everything-you-should-know-about-debt-ceiling&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a510004&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a510005&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}"><u>balanced budget of the 1990s</u></a> came out of a debt ceiling deal. <a href="https://en.wikipedia.org/wiki/Gramm%E2%80%93Rudman%E2%80%93Hollings_Balanced_Budget_Act" target="_blank" link-data="{&quot;linkText&quot;:&quot;<u>Gramm-Rudman</u>&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://en.wikipedia.org/wiki/Gramm%E2%80%93Rudman%E2%80%93Hollings_Balanced_Budget_Act&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a510006&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a510007&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}"><u>Gramm-Rudman</u></a> came out of a debt ceiling deal. It’s one of the rare times when we are actually forced to talk about spending.</p> <p><b>Ward:</b> Do they yield real political wins, though? In 2013, Republicans wanted to defund Obamacare, and that ended up getting funded. In 2018, it was about funding the border wall, and that ultimately wasn’t funded. This time, the Republican demands are more diffused — it’s border security, or it’s Ukraine funding, or it’s impeachment stuff. What does a real win for Republicans look like on the other side of this?</p> <p><b>Mulvaney:</b> Anything between what the Senate has offered and the compromise that the House Freedom Caucus and the Main Street Alliance came up with is a win. Anything between those two things is a win. The conservatives are not going to get their 8 percent reduction with border security, but neither should the Senate expect to get everything it wants in a spending deal. Anything between those two things should be considered a win for fiscal conservatives — who, believe it or not, are probably in the minority of the Republican Party.</p> <p><b>Ward:</b> What’s the one thing that you wish the public knew about a shutdown?</p> <p><b>Mulvaney: </b>The impact of a shutdown is impacted in large part by the political decision-making of the current administration.<br></p> <br> <br>]]>
+      </content:encoded>
+    </item>
+    <item>
+      <title>Nikki Haley Is Turning Her Biggest Criticism Into a Campaign Strategy</title>
+      <link>https://www.politico.com/news/magazine/2023/09/29/nikki-haley-profile-trump-gop-00118794</link>
+      <description>The former South Carolina governor made a career of taking both sides. In an overly partisan world, she’s betting that’s exactly what voters want.</description>
+      <guid>https://www.politico.com/news/magazine/2023/09/29/nikki-haley-profile-trump-gop-00118794</guid>
+      <pubDate>Fri, 29 Sep 2023 04:00:00 EST</pubDate>
+      <dc:creator>Michael Kruse</dc:creator>
+      <dc:description>Michael Kruse is a senior staff writer at POLITICO and &lt;i&gt;POLITICO Magazine&lt;/i&gt;.</dc:description>
+      <dc:contributor>Michael Kruse</dc:contributor>
+      <media:content type="image/jpeg" url="https://static.politico.com/44/99/4e5521c94b6880d215ae308834b0/mag-kruse-nikkihaley-lead.jpg">
+        <media:credit scheme="urn:ebu">Photos by Mark Ostow for POLITICO</media:credit>
+        <media:title type="html">Nikki Haley is singular in her efforts to span what at times can feel like an unbridgeable gap between the pre- and post-Trump GOP. She neither hugs him nor hates him.</media:title>
+        <media:thumbnail url="https://static.politico.com/44/99/4e5521c94b6880d215ae308834b0/mag-kruse-nikkihaley-lead.jpg"/>
+      </media:content>
+      <maz:template>magazine</maz:template>
+      <maz:modified>1695997141212</maz:modified>
+      <content:encoded>
+        <![CDATA[<img src="https://static.politico.com/44/99/4e5521c94b6880d215ae308834b0/mag-kruse-nikkihaley-lead.jpg"> <br> <p><b>MERRIMACK, N.H. — </b>A man stood up earlier this month here at VFW Post 8641 and identified himself as a retired soldier and a registered independent. He had voted twice for former President Donald Trump. Now he had a question for Nikki Haley.</p> <p>“I feel like we’re in a civil war,” said Ted Johnson, 58, of nearby Bedford. “How would you have a plan to pull us all back together?”</p> <p>“It is doable,” Haley began. She had on blue jeans and a pair of chunky-heeled, cow-print boots. She looked at Johnson. “I can give you a lot of words, but I like giving examples, because it shows you how I lead …”</p> <p>She then talked for nearly 10 minutes straight, the answer a crystallization of her predilection for planting herself smack in the center of some of the most divisive issues in modern American history. The kind of extended-cut monologue that has made allies and enemies alike marvel for years at her political dexterity while they simultaneously question her basic authenticity, it was an answer only Haley would have or even could have given.</p> <p>Because she is, after all, unique among the Republicans running right now for president. The only one who is a woman. The only one who is the wife of an Army National Guardsman who is currently deployed. The only one who is a 51-year-old mother of two twentysomething children. The only one who is the daughter of Indian immigrants.<br></p> <br> <img src="https://static.politico.com/bd/ae/ca58a6ee4f33a26f53eea8c31bb6/mag-kruse-nikkihaley-secondary1.jpg"> <br> <br> <img src="https://static.politico.com/1d/8e/b29b7fbc408b897d4dfb2d0ec414/mag-kruse-nikkihaley-secondary2.jpg"> <br> <p>And there’s nobody else, either, running the way she’s running, attempting to walk a line that’s so vanishingly thin it might not exist. She tempers tough talk on immigration with poignant pieces of her personal backstory, leaning on her identity without leaving crowds with so much as a whiff of “identity politics.” She checks “woke” boxes without invoking the term. And the way she talks about abortion is astonishing for its “can’t we all …” audacity. Casting herself as a fighter and yet also as a unifier, as a former Tea Party-borne South Carolina governor turned former Trump ambassador to the United Nations who is most temperamentally actually like the pre-electoral accountant she once was, Haley’s pitch is a mixture of red meat and “hard truths,” as she likes to say, of intraparty swipes and Kamala Harris and Joe Biden barbs, of necessary confrontation coupled with comforting notes of notional consensus.</p> <p>And while some of the candidates in the remotely viable, Trump-testing field (<a href="https://www.politico.com/news/magazine/2023/05/24/55-things-ron-desantis-00095475" target="_blank" link-data="{&quot;linkText&quot;:&quot;Ron DeSantis&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.politico.com/news/magazine/2023/05/24/55-things-ron-desantis-00095475&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a5d0000&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a5d0001&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">Ron DeSantis</a>, <a href="https://www.politico.com/news/magazine/2023/08/23/vivek-ramaswamy-republican-candidate-profile-00112348" target="_blank" link-data="{&quot;linkText&quot;:&quot;Vivek Ramaswamy&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.politico.com/news/magazine/2023/08/23/vivek-ramaswamy-republican-candidate-profile-00112348&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a5d0002&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a5d0003&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">Vivek Ramaswamy</a>) are campaigning as largely simpatico “America First” Trump alternatives and others (<a href="https://www.politico.com/news/magazine/2023/08/22/chris-christie-donald-trump-critic-00112106" target="_blank" link-data="{&quot;linkText&quot;:&quot;Chris Christie&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.politico.com/news/magazine/2023/08/22/chris-christie-donald-trump-critic-00112106&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a5d0004&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a5d0005&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">Chris Christie</a>) are opting to play as outright Trump critics, Haley is singular in her efforts to span what at times can feel like an unbridgeable gap between the pre- and post-Trump GOP. She neither hugs him nor hates him.</p> <p>The conventional wisdom is that this is a time for choosing, for all Republicans, <a href="https://www.politico.com/interactives/2021/magazine-nikki-haleys-choice/" target="_blank" link-data="{&quot;linkText&quot;:&quot;and for her, too&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.politico.com/interactives/2021/magazine-nikki-haleys-choice/&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a5d0006&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a5d0007&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">and for her, too</a>. Conservatism or populism (in <a href="https://www.npr.org/2023/09/06/1197887694/mike-pence-donald-trump-populism-conservatism-free-market-republican-party" target="_blank" link-data="{&quot;linkText&quot;:&quot;the framing&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.npr.org/2023/09/06/1197887694/mike-pence-donald-trump-populism-conservatism-free-market-republican-party&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a5d0008&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a5d0009&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">the framing</a> of <a href="https://www.politico.com/news/magazine/2023/06/07/mike-pence-55-things-about-00100408" target="_blank" link-data="{&quot;linkText&quot;:&quot;Mike Pence&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.politico.com/news/magazine/2023/06/07/mike-pence-55-things-about-00100408&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a5d000a&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a5d000b&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">Mike Pence</a>)? Backward or forward? Trump or not Trump? The gambit of the Haley candidacy is that it doesn’t have to be so. Voters don’t have to choose. They can choose her.</p> <p>Judging from more than 40 interviews with former Haley advisers and aides, unaffiliated analysts and consultants, and state lawmakers and voters at more than a dozen of her recent events in Iowa and New Hampshire, some see this tactic as canny, savvy and potentially effective. Others find it cagey, squishy and transparently disingenuous. This, though, say those who know her the best and have watched her the longest, is what she is and consistently has been. “She’s always careful about not going so far she completely alienates other people,” said Chip Felkel, a Republican strategist in South Carolina. “She will — what’s the word? — she will adapt to whatever benefits her … to whoever she’s around,” said Antjuan Seawright, a Democratic strategist in South Carolina. “She’s not new to this,” he said. “She’s true to this.”</p> <br> <img src="https://static.politico.com/29/2e/66ac01cf4bcba315938b6000d7bc/mag-kruse-nikkihaley-secondary3.png"> <br> <p>The question, of course, is whether <i>this</i> is what Republican voters, or at least enough of them, even desire — whether in the end they view today’s totally toxic politics as an argument that needs to be cooled or just a war that needs to be won. Almost all public polls point to the latter. The state of the race is stark. Some surveys of late <a href="https://www.washingtonpost.com/politics/2023/09/17/nikki-haley-electability-message-2024/" target="_blank" link-data="{&quot;linkText&quot;:&quot;suggest Haley has the best shot of beating Biden&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.washingtonpost.com/politics/2023/09/17/nikki-haley-electability-message-2024/&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a5d000c&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a5d000d&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">suggest Haley has the best shot of beating Biden</a> next November. Some show her <a href="https://www.concordmonitor.com/on-the-trail-Haley-on-the-rise-in-nh-52434737" target="_blank" link-data="{&quot;linkText&quot;:&quot;“surging” in New Hampshire into second&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.concordmonitor.com/on-the-trail-Haley-on-the-rise-in-nh-52434737&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a5e0000&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a5e0001&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">“surging” in New Hampshire into second</a> — albeit a distant second. <a href="https://twitter.com/SarahLongwell25/status/1707223199732183210" target="_blank" link-data="{&quot;linkText&quot;:&quot;Her performance in Wednesday’s second GOP debate&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://twitter.com/SarahLongwell25/status/1707223199732183210&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a5e0002&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a5e0003&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">Her performance in Wednesday’s second GOP debate</a> didn’t hurt that standing and <a href="https://www.politico.com/news/2023/09/28/second-republican-debate-who-won-takeaways-00118687" target="_blank" link-data="{&quot;linkText&quot;:&quot;some suggested it might help propel her higher&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.politico.com/news/2023/09/28/second-republican-debate-who-won-takeaways-00118687&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a5e0004&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a5e0005&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">some suggested it might help propel her higher</a>. But nationally, and more materially here and in the other early states, what every poll says is that Trump has by far the biggest share of Republican votes. So can the way she’s running work? In rooms like this one with the packed crowd at the VFW, can she coalesce that even-larger share of Republicans who don’t favor the former president and might still be shopping for an alternative? More specifically, can she persuade voters like the man who had just asked the question about pulling the country back together? Nikki Haley looked again at Ted Johnson, the veteran who is tired of the fighting.</p> <p>She talked about the 2015 murders by a young white supremacist of nine Black praying parishioners at the historic Mother Emanuel AME Church in Charleston. She talked about her response in cajoling recalcitrant legislators to once and for all bring down the Confederate flag and the pole on which it flew in front of the capitol in Columbia. And she talked about her Sikh, turban-wearing father having the police called on him at a produce stand when she was a little girl, on account of tacit, stubborn bigotry and distrust, and the resulting pain she felt and still feels.</p> <p>“You have to be able to take the divisions,” Haley said, of meeting with people, listening to people, and ultimately persuading people, in this space that was now conspicuously quiet, “and get them to see the best of themselves to go forward.”<br></p> <br> <p><a href="https://www.politico.com/news/magazine/2023/02/14/nikki-haley-2024-bio-what-you-need-to-know-00082742" target="_blank" link-data="{&quot;linkText&quot;:&quot;<b><u>N</u></b>imarata Nikki Randhawa&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.politico.com/news/magazine/2023/02/14/nikki-haley-2024-bio-what-you-need-to-know-00082742&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a5e0006&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a5e0007&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}"><b><u>N</u></b>imarata Nikki Randhawa</a> was born on January 20, 1972, and raised in Bamberg, South Carolina — “2,500 people, two stoplights,” she said at the outset of her stump speech one evening to a different New Hampshire gathering at the senior center in a town called Claremont. “We were the only Indian family in that small southern town. We weren’t white enough to be white. We weren’t black enough to be black.”</p> <p>Claremont served as somewhat of an unwittingly apropos choice for Haley. The senior center sits a half a mile from the senior apartment complex at which <a href="https://www.latimes.com/archives/la-xpm-1995-06-12-mn-12340-story.html" target="_blank" link-data="{&quot;linkText&quot;:&quot;Bill Clinton and Newt Gingrich&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.latimes.com/archives/la-xpm-1995-06-12-mn-12340-story.html&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a5e0008&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a5e0009&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">Bill Clinton and Newt Gingrich</a> in the summer of 1995 shook hands and pledged to work harder to work together — an obvious novelty of a photo-op that quickly came to be known as a totem of politicians’ hollow vows. A little more than four years later, <a href="https://www.c-span.org/video/?154214-1/campaign-finance-reform" target="_blank" link-data="{&quot;linkText&quot;:&quot;Bill Bradley and John McCain&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.c-span.org/video/?154214-1/campaign-finance-reform&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a5e000a&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a5e000b&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">Bill Bradley and John McCain</a>, both challenging their parties’ frontrunners during that presidential campaign by appealing to independent voters who already were weary of peaking partisanship, purposefully replicated the stagecraft in the exact same place. “The danger is that if this turns out to be yet another empty promise, it will end up feeding the very cynicism it was designed to dissipate,” syndicated columnist Arianna Huffington wrote at the time in the <i>Washington Times</i>. “And the next time the public will be even less likely to believe …”</p> <p>And so here we were, and here, too, was Haley, foundationally “a brown girl in a black-and-white world,” as she has put it in the past. “And I remember,” she said now, “when I would get teased on the playground, my mom would always say, ‘Your job is not to show them how you’re different. Your job is to show them how you’re similar.’”<br></p> <br> <img src="https://static.politico.com/fd/03/f23768104db8b0a0c210e6545b7f/mag-kruse-nikkihaley-secondary5.jpg"> <br> <p>It was easier said than done. She sang “This Land Is Your Land” in a Bamberg youth pageant and was disqualified because traditionally there was a white winner and a black winner but nothing “somewhere in between.” She was chosen to play Pocahontas in a school play at Thanksgiving, leaving her to wonder whether her classmates understood she wasn’t “that kind” of Indian. “Why can’t I be a pilgrim?” she thought. And one day in third grade, in a story she’s told in her books, she went outside to play kickball at recess and the other kids started sorting themselves into a white team and a black team.</p> <p>“Are you white or are you black?” she was asked.</p> <p>“You have to pick a side,” she was told.</p> <p>“I’m neither!” she said.</p> <p>She grabbed the ball. She ran onto the field.<br></p> <br> <p>Before it was for her a political lever, it was simply “survival mode,” <a href="https://www.nytimes.com/2010/06/14/us/politics/14haley.html" target="_blank" link-data="{&quot;linkText&quot;:&quot;she once said&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.nytimes.com/2010/06/14/us/politics/14haley.html&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a5e000c&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a5e000d&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">she once said</a>, but it’s also been a useful and transferrable tool. “I had dodged the issue once again,” <a href="https://www.google.com/books/edition/Can_t_Is_Not_an_Option/f1OCh4wACWEC?hl=en&amp;gbpv=1&amp;dq=I+had+dodged+the+issue+once+again+nikki+haley&amp;pg=PT16&amp;printsec=frontcover" target="_blank" link-data="{&quot;linkText&quot;:&quot;she wrote of the kickball incident in her 2012 memoir&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.google.com/books/edition/Can_t_Is_Not_an_Option/f1OCh4wACWEC?hl=en&amp;gbpv=1&amp;dq=I+had+dodged+the+issue+once+again+nikki+haley&amp;pg=PT16&amp;printsec=frontcover&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a5e000e&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a5e000f&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">she wrote of the kickball incident in her 2012 memoir</a>, <i>Can’t Is Not an Option</i>. Her “habit of finding the similarities and avoiding the differences,” of “avoiding those things that separated us” — it “became,” she explained, “very natural to me over time.”</p> <p>“She’s out there to change the country. Everyone else, all the GOP candidates other than her, are there to bash each other,” <a href="https://www.wsj.com/politics/elections/nikki-haleys-goal-leapfrog-ron-desantis-to-become-donald-trumps-top-gop-rival-800e5345" target="_blank" link-data="{&quot;linkText&quot;:&quot;Kevin Kober&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.wsj.com/politics/elections/nikki-haleys-goal-leapfrog-ron-desantis-to-become-donald-trumps-top-gop-rival-800e5345&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a5e0010&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a5e0011&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">Kevin Kober</a>, 60, from close-by Newport, New Hampshire, said after the town hall in Claremont. He didn’t vote for Trump in 2016, he told me, and he didn’t vote for him in 2020. And if 2024 is another round of Biden and Trump? “I’ll probably just sit it out,” he said.<br></p> <br> <p><b><u>I</u></b>owa. Reaping season. In Grand Mound, in the eastern end of the state surrounded by so many rows of corn, Haley had just climbed into the cab of a combine to go for a drive so the television cameras set in the dirt could get the shot. “Keep in mind this is a Friday afternoon in the middle of harvest,” Austin Harris, a state representative supporting Haley, told me as hundreds of locals filed into a big, fancy barn. “Not a great time for a political event, so the fact that this place is packed and energetic, I think, is a sign of where the campaign is moving.” Before long Haley took the stage in front of two gargantuan tractors. She stood where she almost always stands. In the middle.</p> <p>She couched her condemnation of “biological boys” playing girls’ sports by speaking specifically as a mother. “I had a daughter who ran track in high school …”</p> <p>She lamented the ballooning national debt, but she blamed Republicans, too.</p> <p>She delivered a line she deploys almost everywhere she goes: “I was elected the first female minority governor in history. America’s not racist! We’re blessed!”<br></p> <br> <img src="https://static.politico.com/0d/06/58fa11004b4d9c600400fa54ee54/mag-kruse-nikkihaley-secondary7.jpg"> <br> <br> <img src="https://static.politico.com/39/49/3e4ba4be4b21bbc01c5fdf537542/mag-kruse-nikkihaley-secondary8.jpg"> <br> <p>And she said something else she so often says in her standard spiel. “Do you remember growing up how simple life was? Do you remember how safe it felt? … Don’t you want that again? Because we could have that again.” It’s the part of her pitch that might be the most deft. It’s her version of Make America Great Again. And it’s not just because of that word that lingers in the air. <i>Again</i>. “I kick with a smile,” <a href="https://www.politico.com/interactives/2021/magazine-nikki-haleys-choice/" target="_blank" link-data="{&quot;linkText&quot;:&quot;she once told my former colleague Tim Alberta&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.politico.com/interactives/2021/magazine-nikki-haleys-choice/&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a5f0000&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a5f0001&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">she once told my former colleague Tim Alberta</a>, and that’s what she was doing here. To my ear, it was MAGA sans the sneer. And then she quickly pivoted, as is her wont, to why Republicans should ditch Trump, although she never, of course, called him old or dropped his name. “It is time,” she said, “to “leave the negativity and the drama of the past” — time, she said, for “a new generational leader.”</p> <p>Jim Barton was looking for more. He was first up with a question for Haley. He said he was from Lexington, South Carolina, where in 2004 Haley was living when she first ran for a seat in the state legislature and endured racist, sexist ads — to beat a white male incumbent who was more than 30 years older. Barton, 62, added that he thought she had been an “incredible governor.” He was a fan. Now, though, he had a question that really was more of an urgently worded request.</p> <p>“Break from Trump’s base,” Barton told Haley. “Just throw ’em away. Let the rest of America know who you are.”</p> <p>She did. Just not in the way Barton meant.</p> <p>“Why don’t I break from the base?” Haley responded. “I have had people say I love Trump too much, and I’ve had people say I hate Trump too much,” she said. “I don’t agree with Trump a hundred percent of the time. I don’t disagree with Trump a hundred percent of the time. That’s the same way I feel about my husband.” That got a lusty laugh from the crowd. “So where do I disagree with Trump?” She said the government when Trump was president “spent like drunken sailors and I think our kids aren’t going to forgive us for it.” She sounded her support for Ukraine “because a win for Russia is a win for China.” He thinks Jan. 6 was “a beautiful day,” and she thinks Jan. 6 was “a terrible day,” she said. “So it’s not me being about the base or not about the base,” she concluded. “We’re Americans.”<br></p> <br> <img src="https://static.politico.com/58/72/c2d47996466b886ea92fd7e9b106/mag-kruse-nikkihaley-secondary9.jpg"> <br> <p>This drew applause, albeit not raucous applause, and I made sure to catch up with Barton before he departed the barn.</p> <p>“I’m overly anti-Trump. I acknowledge that’s a weakness. I can’t stand the man. He’s a traitor to our country for Jan. 6. So any support for him grinds my skin,” he said. “She gave a much more reasonable answer than my heart wants.”</p> <p>If Haley, though, is to win the GOP nomination, I said to Barton, “she somehow has to appeal to people like you who hate Trump — but she <i>also</i> has to appeal to some people who <i>don’t</i>.”</p> <p>Barton sighed. “Her answer worked enough for me, because I was already on her side,” he said.</p> <p>But did he think it was enough for her to become the nominee?</p> <p>“No.”<br></p> <br> <p><b><u>H</u></b>aving been at, among other venues, a VFW, a senior center and a farm, Haley spent a lunch hour last week in Greenland, N.H., at the Portsmouth Country Club to speak to nine tables of 10 members of the Portsmouth Rotary Club. It had dawned on me only when I pulled up that this was the same Rotary Club to which Trump in October of 1987 <a href="https://www.politico.com/magazine/story/2016/02/donald-trump-first-campaign-speech-new-hampshire-1987-213595/" target="_blank" link-data="{&quot;linkText&quot;:&quot;gave his very first quasi-real speech as a would-be presidential candidate&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.politico.com/magazine/story/2016/02/donald-trump-first-campaign-speech-new-hampshire-1987-213595/&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a5f0002&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a5f0003&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">gave his very first quasi-real speech as a would-be presidential candidate</a>. Behind Haley now on the wall was a blue and yellow banner stating the Rotarians’ so-called Four-Way Test. The first of the four tests: “Is it the TRUTH?” Haley gave her speech and asked for questions.</p> <p>“There’s nothing I won’t answer,” she said. “You might not like my answer, but …”</p> <p>She was asked about abortion. “I am unapologetically for life, not because the Republican Party tells me to be, but because my husband was adopted and I had trouble having both of my children,” she said. “So I don’t judge anyone for being pro-choice any more than I want you to judge me for being pro-life.” And the idea of a federal ban? “You would have to have the majority of the House, 60 senators — six-oh — and a signature of a president.” Not, in other words, gonna happen. “So why don’t we just find consensus? Can’t we agree that we don’t want late-term abortions? Can’t we agree that we should encourage adoptions and better-quality adoptions? Can’t we agree that doctors and nurses who don’t believe in abortions shouldn’t have to perform them? Can’t we agree that contraception should be accessible? Can’t we agree …”</p> <p>She was asked (in a sort of a Rotary gag) which state she liked campaigning in more — Iowa or New Hampshire.</p> <p><i>White or Black?</i></p> <p><i>Pick a side.</i></p> <p><i>“I’m neither!”</i><br></p> <br> <img src="https://static.politico.com/fb/cd/4cbd48394662a47470f43e8ecf47/mag-kruse-nikkihaley-secondary11.png"> <br> <p>“Do you want me to win?” she said.</p> <p>And she was asked, as she so frequently is, about Trump and where she stands — but in a new kind of way. “I’m interested,” said James Petersen, 60, an engineer and a past president of the Rotary Club, “what you think a hundred years from now how history will remember Donald Trump."</p> <p>The crowd stirred. “Oooooh …”</p> <p>“Wow,” Haley said. “You get the prize for the question I haven’t been asked.” Laughter and clapping and hooting and hollering rippled through the room. She called them “feisty.”</p> <p>“How do I think he will be remembered?” Haley repeated. “Time,” she offered, “does funny things.”</p> <p>It does.</p> <p>In 2016, for instance, Haley in the GOP primary first endorsed Marco Rubio — “I will do whatever it takes to help you beat Donald Trump,” she told him — attacking Trump for his business failures, for not releasing his tax returns, for not disavowing the Ku Klux Klan, for doing “everything we teach our kids not to do in kindergarten.” After Rubio lost, she shifted her support to (without fully endorsing) Ted Cruz, <a href="https://www.cnn.com/2016/03/16/politics/nikki-haley-supports-ted-cruz/" target="_blank" link-data="{&quot;linkText&quot;:&quot;saying it was her “hope and prayer”&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.cnn.com/2016/03/16/politics/nikki-haley-supports-ted-cruz/&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a5f0004&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a5f0005&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">saying it was her “hope and prayer”</a> that Cruz would become president.</p> <p>Eventually — and reluctantly — she voted for Trump. “This election,” <a href="https://www.cnn.com/2016/10/27/politics/nikki-haley-donald-trump/index.html" target="_blank" link-data="{&quot;linkText&quot;:&quot;she said&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.cnn.com/2016/10/27/politics/nikki-haley-donald-trump/index.html&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a5f0006&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a5f0007&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">she said</a>, “has been embarrassing for both parties.” Trump pounced. “The people of South Carolina are embarrassed by Nikki Haley!” he tweeted. She joined his administration anyway.<br></p> <br> <img src="https://static.politico.com/bf/59/141c1c324833b3a129e1f6664a85/mag-kruse-nikkihaley-secondary12.jpg"> <br> <p>The day after the insurrection, in a speech to the Republican National Committee, she said Trump’s “actions since Election Day will be judged harshly by history.” She <a href="https://www.politico.com/interactives/2021/magazine-nikki-haleys-choice/" target="_blank" link-data="{&quot;linkText&quot;:&quot;told POLITICO&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.politico.com/interactives/2021/magazine-nikki-haleys-choice/&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a5f0008&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a5f0009&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">told POLITICO</a> he had “lost any sort of political viability.” She said he would “find himself further and further isolated.” He had “let us down,” she said, “and we shouldn’t have followed him, and we shouldn’t have listened to him, and we can’t let that ever happen again.” She <a href="https://www.businessinsider.com/gop-went-from-blaming-trump-capitol-attack-fighting-his-impeachment-2021-1" target="_blank" link-data="{&quot;linkText&quot;:&quot;also said on Fox News&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.businessinsider.com/gop-went-from-blaming-trump-capitol-attack-fighting-his-impeachment-2021-1&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a5f000a&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a5f000b&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">also said on Fox News</a> that people should stop “beating him up” and that they should give him “a break.” She said he wouldn’t run for president again. She <a href="https://apnews.com/article/donald-trump-orangeburg-south-carolina-united-nations-nikki-haley-fda929b5d69ab0a91b97edc62207bcfb" target="_blank" link-data="{&quot;linkText&quot;:&quot;said she wouldn’t run if he decided to run&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://apnews.com/article/donald-trump-orangeburg-south-carolina-united-nations-nikki-haley-fda929b5d69ab0a91b97edc62207bcfb&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a600000&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a600001&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">said she wouldn’t run if he decided to run</a>. Then she became the first — <a href="https://www.politico.com/news/magazine/2022/11/16/donald-trumps-comeback-attempt-2024-00067492" target="_blank" link-data="{&quot;linkText&quot;:&quot;after Trump&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.politico.com/news/magazine/2022/11/16/donald-trumps-comeback-attempt-2024-00067492&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a600002&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a600003&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">after Trump</a> — <a href="https://www.politico.com/news/2023/02/14/nikki-haley-2024-presidential-campaign-00082715#:~:text=Haley%20enters%20the%20race%20as,in%20the%20Republican%20presidential%20primary.&amp;text=Former%20Ambassador%20to%20the%20United,running%20for%20president%20in%202024." target="_blank" link-data="{&quot;linkText&quot;:&quot;to announce that she would&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.politico.com/news/2023/02/14/nikki-haley-2024-presidential-campaign-00082715#:~:text=Haley%20enters%20the%20race%20as,in%20the%20Republican%20presidential%20primary.&amp;text=Former%20Ambassador%20to%20the%20United,running%20for%20president%20in%202024.&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a600004&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a600005&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">to announce that she would</a>.</p> <p>Here at the Portsmouth Country Club, speaking to the Portsmouth Rotary Club, she looked up toward the ceiling, stalling, searching, scrunching her face in thought — not something I’d seen her do before in hours and hours of watching her on the trail.</p> <p>“He was the right president at the right time,” she began.</p> <p>“He broke things that needed to be broken. He listened and brought in a group of people who felt unheard, like where I grew up in rural South Carolina.” She paused.</p> <p>“He was strong on foreign policy and getting America’s respect in the world. He was thin-skinned and easily distracted.” Longer pause. What other negatives? How many more? “He didn’t do anything on fiscal policy and really spent a lot of money and we’re all paying the price. He did do a better job than Biden on the border, really trying to corral that and stop that. He used to be good on foreign policy and now he has started to walk it back and get weak in the knees when it comes to Ukraine.”</p> <p>She said again what she had said in Grand Mound about “a beautiful day” and “a terrible day.” And that prompted a round of some clapping and so that’s where she stopped.<br></p> <br> <img src="https://static.politico.com/22/2b/afa7d0fa42e9b2443b3924ff2d26/mag-kruse-nikkihaley-secondary13.jpg"> <br> <p>At the end of the event, I made a beeline for Petersen. “What I was hoping to find out is how she felt about Trump,” he told me.</p> <p>“Did you?” I asked.</p> <p>“She kind of was on the fence,” he said. “She played both sides. So I would’ve liked a stronger answer. That Trump has done a lot of damage. That’s what I would’ve liked to have heard.”</p> <p>And I caught up with Peter Weeks as he was walking out the door. A former mayor of Portsmouth, he had asked the question about Iowa or New Hampshire. But I wanted to talk to him because we had talked going on eight years back because he was at that 1987 Trump speech. He voted for him, he told me, in 2016. He did not in 2020. “The way he attacks people,” he said, “picks on people.” Last time around, unable to stomach either of the options, he wrote in his own name.</p> <p>“Peter, it’s nice to see you,” said Barbara Miller, a retired banker, as she walked by. She blew him a kiss. “Even though I disagree with you — I <i>like</i> Donald Trump.”</p> <p>“I don’t like him <i>now</i>,” Weeks said. “The whole insurrection …”</p> <p>“I think there’s more to that story than what the press shows you,” she said. “But I still love you, Peter — even if you’re misinformed.”</p> <p>“Oh, no, no,” he said — friendly banter that now had taken on a bit more of an edge.</p> <p>Haley moved past en route to the back of a waiting black SUV, and Weeks gave her a smile and a thumbs-up. I walked with Miller to her car. She had on a red and white striped dress, a string of pearls and a brooch. “PROUD TO BE A REPUBLICAN,” it said. She wants Trump to win in 2024, she offered, because she thinks he won in 2020. It was a lovely New England fall afternoon. Golfers took their clubs from their trunks. And I found myself thinking standing there in the parking lot that for every Peter Weeks, for every Kevin Kober, for every Jim Barton, there are at least as many Barbara Millers. Almost certainly more. “There’s something going on,” she told me. “The Obama-Clinton-Biden group. Jeffrey Epstein. I think it all ties in,” she said. “There’s something going on,” she said again.<br></p> <br> <p><b><u>B</u></b>ack in Merrimack at the VFW, in the space that was conspicuously quiet as she had talked about the shooting in the church, and the flag at the capitol, and the produce stand and her father and her pain and how she had used it to cajole, Nikki Haley finished her answer to the question from the retired soldier and the registered independent about how she was going to get people to “see the best of themselves” and pull the country back together. “That,” she told the crowd, and told Ted Johnson, “is what I’m going to do as your president.”</p> <p>She had left out, of course, her uncomfortable <a href="https://www.washingtonpost.com/politics/2023/02/15/nikki-haley-confederate-flag-timeline/" target="_blank" link-data="{&quot;linkText&quot;:&quot;shifts in her stance on the flag&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.washingtonpost.com/politics/2023/02/15/nikki-haley-confederate-flag-timeline/&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a600006&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a600007&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">shifts in her stance on the flag</a>. “I would not want to revisit that issue,” she had said in 2009 during her gubernatorial run. “I feel like it’s been resolved to the best of its ability,” she had said in 2010 in an interview with the Sons of Confederate Veterans. “It takes two-thirds of the house and two-thirds of the senate to change that. That’s not gonna happen,” she said — shades of how she talks about abortion now. “For those groups that come in and say they have issues with the Confederate flag, I will work to talk to them about it. I will work and talk to them about the heritage and how this is not something that is racist. This is something that is a tradition that people feel proud of.” She was hesitant, too, even in the aftermath of the shooting in 2015. It took some presidential candidates and state lawmakers to call for the flag to come down for Haley to say the same.</p> <p>Here, though, she had said what she had said, and she wrapped up the way she does: “If you like what I’ve had to say today, go tell 10 people. Tell ’em to go to NikkiHaley.com. Tell ’em to volunteer. Tell ’em to join one of our veterans’ or our women’s groups. Tell ’em to give $5, $10, $25. If you <i>don’t</i> like what I’ve had to say” — and she put her finger to her lips — “<i>shhhhhhh</i> …” It elicited, as always, a burst of laughter.<br></p> <br> <img src="https://static.politico.com/91/c4/11df17ed4d7a92abed1cb22a450c/mag-kruse-nikkihaley-secondary15.jpg"> <br> <p>The reactions to her answer about pulling the country together were mixed.</p> <p>“<i>Was</i> that an answer?” Chip Felkel, the Republican strategist in South Carolina, told me when I described the interaction.</p> <p>“You ask her, ‘What is the temperature outside?’” said Antjuan Seawright, the Democratic strategist in South Carolina, “and she’ll say something along the lines of, ‘I grew up in Bamberg, where the people always stood up for what they believed and they dressed according to the weather.’”</p> <p>“I’ve said since she left the governorship and went to the U.N.,” Felkel said, “that she was about to embark on a major case of a high-wire act. And she’s still on the wire.”</p> <p>In the room at the VFW, some people liked the answer, and some people didn’t. “Very poignant,” state Rep. Mike Moffett (R-Merrimack) told me. “A little long,” said state Rep. Bob Healey (R-Hillsborough), who has endorsed DeSantis but also expressed that he was keeping his options open. “Way too long,” said state Rep. Tim McGough (R-Hillsborough). “What she actually did for me was teach me something about her that I didn’t like,” he added. “She seemed a bit reactionary, as opposed to a careful leader.” Still, for Kim Rice, a Haley-supporting former state representative, the answer was the highlight of the whole afternoon. “It brought tears to my eyes,” she told me. “It shows how she can bring people together. Because that could have been turned into a very divisive time.”</p> <p>Most markedly, though, for the man who had asked the question, Haley’s “heartfelt” answer, he said, was what he was wanting to hear. It worked for Ted Johnson. He once favored Trump, the IT project manager told me, “because he was the rebel, the non-politician,” but now he was “a rebel without a cause” — so he’s looking for something else. Some<i>one</i> else. “And it’s going to be a long road, because of Trump’s support, but I’m behind her,” he said. “It just seemed like she might be able to reach across the aisle.”<br></p> <br> <img src="https://static.politico.com/12/60/3331444a4053af509e40e2a2af71/mag-kruse-nikkihaley-secondary16.jpg"> <br> <p>What’s that even mean anymore? The aisle’s not an aisle. It’s a breach. It’s become in politics such a hackneyed phrase — often cited, seldom practiced.</p> <p>But it meant something for Ted Johnson. At the heart of the reason he asked what he asked, he told me, was his brother. They used to ride bikes together, and they used to play basketball together, and they both joined the Army, and they both did overseas tours, coming of age in Illinois in the middle of the state in the middle of the country in a town called Centralia. But they haven’t talked, he said, for more than two years — in part because of politics, and especially because of Trump. He was for him. His brother was not. “It’s splitting families,” he told me. “I hate it so much,” he said. “My older brother. My best friend.”</p> <p>Fred “J.R.” Johnson, 61, lives in Louisville and teaches high school English. He picked up when I called. I explained why I wanted to talk, the question his brother had asked, what he had told me about why. Fred Johnson told me it was true. He and his brother hadn’t talked for a good while. It’s not all about politics, he said. Families are complicated. Things get hard. Politics, though, he agreed, was and remains a big part of the rift. He said their father had been an early and avid listener of Rush Limbaugh. “Ted kind of gravitated toward it, and I went the other way,” he said.</p> <p>Trump, though, ripped open the rupture. “He is a Trump kind of person,” he told me. “I am not a Trump kind of person.” A registered independent, too, he told me he had voted for Gary Johnson in 2016 and for Biden in 2020. I asked him what he was thinking heading toward 2024. “I like Nikki Haley,” he told me. “I think Nikki Haley’s the only one that I have seen that is trying to find some middle ground, some common ground.” I suggested to him the Johnson brothers of Centralia might at this point have more in common politically than they think. “I mean, if he’s gravitating towards Nikki Haley, well, so am I,” he said.<br></p> <br> <img src="https://static.politico.com/f2/4f/a98692ce4ba8bc60700ebd9b61f4/mag-kruse-nikkihaley-secondary17.jpg"> <br> <p>We talked for more than 40 minutes. Before we hung up, he had one request. If I talked again to his little brother, and I told him I probably would, he wanted me to pass along something he wanted to say.</p> <p>“Tell him,” Fred Johnson said, “J.R. says he loves you.”</p> <p>So I did.</p> <p>“And I,” Ted Johnson said, “love him, too.”<br></p> <br> <br> <br>]]>
+      </content:encoded>
+    </item>
+    <item>
+      <title>Ramaswamy campaign seeks to cut number of candidates in next GOP debate</title>
+      <link>https://www.politico.com/news/2023/10/01/ramaswamy-campaign-number-candidates-gop-debate-00119398</link>
+      <description>The third Republican presidential debate will be held Nov. 8 in Miami.</description>
+      <guid>https://www.politico.com/news/2023/10/01/ramaswamy-campaign-number-candidates-gop-debate-00119398</guid>
+      <pubDate>Sun, 01 Oct 2023 19:04:59 EST</pubDate>
+      <dc:creator>Adam Wren</dc:creator>
+      <dc:description>Adam Wren is a national political correspondent at POLITICO.</dc:description>
+      <dc:contributor>Adam Wren</dc:contributor>
+      <media:content type="image/jpeg" url="https://static.politico.com/b4/3d/717ff58f438f9fded86bfde04332/election-2024-ramaswamy-california-53627.jpg">
+        <media:credit scheme="urn:ebu">Jae C. Hong/AP Photo</media:credit>
+        <media:title type="html">Vivek Ramaswamy’s campaign also calls for “greater time for candidates to respond to their competitors.”</media:title>
+        <media:thumbnail url="https://static.politico.com/b4/3d/717ff58f438f9fded86bfde04332/election-2024-ramaswamy-california-53627.jpg"/>
+      </media:content>
+      <maz:template>core</maz:template>
+      <maz:modified>1696205372298</maz:modified>
+      <content:encoded>
+        <![CDATA[<img src="https://static.politico.com/b4/3d/717ff58f438f9fded86bfde04332/election-2024-ramaswamy-california-53627.jpg"> <br> <p>Vivek Ramaswamy's campaign is pushing the Republican Party to change the qualifying and debate format rules for the upcoming GOP presidential debate in Miami on Nov. 8, calling for only the top four polling candidates besides Donald Trump to participate and asking for a single moderator, according to a campaign memo obtained by POLITICO.</p> <p>The third Republican presidential debate will be held Nov. 8 in Miami, and Trump’s rival campaigns face the most difficult qualifying thresholds yet: <a href="https://www.politico.com/news/2023/09/22/rnc-qualifications-2024-presidential-debates-00117737" target="_blank" link-data="{&quot;linkText&quot;:&quot;Candidates need&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.politico.com/news/2023/09/22/rnc-qualifications-2024-presidential-debates-00117737&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a650000&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a650001&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">Candidates need</a> to have 70,000 individual donors and hit 4 percent in either two national polls, or one national poll and two polls from separate early states.</p> <p>In the Sunday evening letter, Ramaswamy’s campaign CEO Ben Yoho wrote to Republican Chair Ronna McDaniel that “against the backdrop of a chaotic second debate and the reality of a frontrunner who has declined to participate, we respectfully call on the RNC to revise its approach so that Republican voters can focus on serious candidates who have a viable path to beating Joe Biden — or whomever the Democrats put up to replace him.”</p> <p>With seven candidates on the stage, the second debate last week in Simi Valley, Calif., saw Fox Business’ two moderators alongside Univision's struggle to control the debate at times, with multiple candidates interrupting each other.</p> <p>“Thank you for speaking while I’m interrupting,” Ramaswamy said at one particularly contentious point during the debate.</p> <p>In addition to a smaller stage, Ramaswamy’s campaign also calls for “greater time for candidates to respond to their competitors.”</p> <p>“Another unhelpful debate in November is not an option: Voters deserve a real choice for who will best serve as our party’s nominee,” Yoho wrote in the memo to the RNC, as well as Committee on Arrangements Co-Chairs David Bossie and Anne Hathaway.</p> <p>“Voters are not well-served when a cacophony of candidates with minimal chance of success talk over each other from the edge of the stage, while the overwhelming frontrunner is absent from the center of that same stage.”</p>]]>
+      </content:encoded>
+    </item>
+    <item>
+      <title>Rep. Dean Phillips to step down from leadership position after his calls for primary challenge to Biden</title>
+      <link>https://www.politico.com/news/2023/10/01/dean-phillips-step-down-leadership-00119369</link>
+      <description>“My convictions relative to the 2024 presidential race are incongruent with the majority of my caucus," Phillips said.</description>
+      <guid>https://www.politico.com/news/2023/10/01/dean-phillips-step-down-leadership-00119369</guid>
+      <pubDate>Sun, 01 Oct 2023 15:37:57 EST</pubDate>
+      <dc:creator>Kelly Garrity</dc:creator>
+      <dc:contributor>Kelly Garrity</dc:contributor>
+      <media:content type="application/octet-stream" url="https://static.politico.com/3e/0d/ac857b4744c29c46bf47ffb4f07e/https-delivery-gettyimages.com/downloads/1708469685">
+        <media:credit scheme="urn:ebu">Anna Moneymaker/Getty Images</media:credit>
+        <media:title type="html">Rep. Dean Phillips has floated the possibility of mounting a primary challenge against President Joe Biden, meeting with donors in New York over the summer to talk about the prospect.</media:title>
+        <media:thumbnail url="https://static.politico.com/3e/0d/ac857b4744c29c46bf47ffb4f07e/https-delivery-gettyimages.com/downloads/1708469685"/>
+      </media:content>
+      <maz:template>core</maz:template>
+      <maz:modified>1696200377689</maz:modified>
+      <content:encoded>
+        <![CDATA[<img src="https://static.politico.com/3e/0d/ac857b4744c29c46bf47ffb4f07e/https-delivery-gettyimages.com/downloads/1708469685"> <br> <p>Rep. Dean Phillips will step down from his role as co-chair of the Democratic Policy and Communications Committee, but “will remain in his congressional seat representing MN-03 and will remain a part of the Democratic Caucus,” a spokesperson for the Minnesota lawmaker confirmed to POLITICO in a statement.</p> <p>“My convictions relative to the 2024 presidential race are incongruent with the majority of my caucus, and I felt it appropriate to step aside from elected leadership to avoid unnecessary distractions during a critical time for our country,” Phillips said in a statement forwarded by the spokesperson. “I celebrate Leader [Hakeem] Jeffries for his remarkable and principled leadership and extend gratitude to my outstanding friends and colleagues for having created space and place for my perspectives. I’ll continue to abide by my convictions, place people over politics, and support our shared mission to deliver security, opportunity, and prosperity for all Americans.”</p> <p><a href="https://www.axios.com/2023/10/01/dean-phillips-steps-down-dem-leadership-biden" target="_blank" link-data="{&quot;linkText&quot;:&quot;Axios first reported Phillips’ plans&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.axios.com/2023/10/01/dean-phillips-steps-down-dem-leadership-biden&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a660008&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a660009&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">Axios first reported Phillips’ plans</a>.</p> <p>The moderate Democrat has floated the possibility of mounting a primary challenge against President Joe Biden, <a href="https://www.politico.com/news/magazine/2023/07/28/2024-presidential-contest-candidates-biden-trump-00108685" target="_blank" link-data="{&quot;linkText&quot;:&quot;meeting with donors in New York&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.politico.com/news/magazine/2023/07/28/2024-presidential-contest-candidates-biden-trump-00108685&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a66000a&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a66000b&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">meeting with donors in New York</a> over the summer to talk about the prospect.</p> <p>In August he called on other Democrats to “jump in” to the presidential race, citing <a href="https://www.nytimes.com/2022/07/11/us/politics/biden-approval-polling-2024.html" target="_blank" link-data="{&quot;linkText&quot;:&quot;polling from The New York Times&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.nytimes.com/2022/07/11/us/politics/biden-approval-polling-2024.html&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a66000c&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a66000d&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">polling from The New York Times</a> that showed most Democrats would prefer someone other than Biden in the 2024 presidential race.</p> <p>“I think I’m well positioned to be president [of] the United States. … I do not believe I’m well positioned to run for it right now,” he said at the time.</p> <p>But as of last week, Phillips still had not ruled out a White House bid.</p> <p>“I am thinking about it. I haven’t ruled it out,” Phillips <a href="https://www.youtube.com/watch?app=desktop&amp;v=MMwcfSlH6z0" target="_blank" link-data="{&quot;linkText&quot;:&quot;said during an interview on “The Warning” podcast&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.youtube.com/watch?app=desktop&amp;v=MMwcfSlH6z0&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a670000&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a670001&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">said during an interview on “The Warning” podcast</a>, though he noted that there people “more proximate, better prepared to campaign with national organizations, national name recognition, which I do not possess.”</p> <p>“I’m concerned that something could happen between now and next November that would make the Democratic Convention in Chicago an unmitigated disaster,” he told podcast host Steve Schmidt.</p> <p>Biden is already facing two intraparty challenges from the author Marianne Williamson and the lawyer and anti-vaccine activist Robert F. Kennedy Jr., though he holds a significant lead in the polls over both.</p>]]>
+      </content:encoded>
+    </item>
+    <item>
+      <title>Faith in the Supreme Court is down. Voters now say they want changes.</title>
+      <link>https://www.politico.com/news/2023/09/30/supreme-court-ethics-poll-00119236</link>
+      <description>A new survey shows three-in-four voters want the justices bound to an ethics code.</description>
+      <guid>https://www.politico.com/news/2023/09/30/supreme-court-ethics-poll-00119236</guid>
+      <pubDate>Sat, 30 Sep 2023 06:00:00 EST</pubDate>
+      <dc:creator>Steven Shepard</dc:creator>
+      <dc:contributor>Steven Shepard</dc:contributor>
+      <media:content type="application/octet-stream" url="https://static.politico.com/1d/dc/65e4e4144e5eb2fa59e01425b45c/https-delivery-gettyimages.com/downloads/1487105353">
+        <media:credit scheme="urn:ebu">Kevin Dietsch/Getty Images</media:credit>
+        <media:title type="html">Seventy-five percent of voters — a bipartisan consensus of 81 percent of Democrats, 72 percent of Republicans and 69 percent of independents — support a binding ethics code for the Supreme Court.</media:title>
+        <media:thumbnail url="https://static.politico.com/1d/dc/65e4e4144e5eb2fa59e01425b45c/https-delivery-gettyimages.com/downloads/1487105353"/>
+      </media:content>
+      <maz:template>core</maz:template>
+      <maz:modified>1696074744635</maz:modified>
+      <content:encoded>
+        <![CDATA[<img src="https://static.politico.com/1d/dc/65e4e4144e5eb2fa59e01425b45c/https-delivery-gettyimages.com/downloads/1487105353"> <br> <p>The Supreme Court faces a legitimacy crisis at the dawn of its new term, and a majority of voters support reforms such as a binding code of ethics and term limits.</p> <p>A new POLITICO | Morning Consult poll shows three-in-four voters want the justices bound to an ethics code, the most popular reform proposal in the survey.</p> <p>Unlike the other two branches of the government, the judiciary is largely immune to public opinion. But the court is starting to feel some pressure, and when it convenes on Monday for the first time since June, it will be grappling not only with a slate of new cases, but also controversies around the justices’ finances and jurisprudence.</p> <p>The nine justices, unlike lower-court judges, don’t have a formal ethics code — an omission that’s come under scrutiny amid a spate of news stories digging into trips taken and benefits received by <a href="https://www.propublica.org/article/clarence-thomas-scotus-undisclosed-luxury-travel-gifts-crow" target="_blank" link-data="{&quot;linkText&quot;:&quot;Clarence Thomas&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.propublica.org/article/clarence-thomas-scotus-undisclosed-luxury-travel-gifts-crow&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a6a0000&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a6a0001&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">Clarence Thomas</a>, and, to a lesser degree, <a href="https://www.propublica.org/article/samuel-alito-luxury-fishing-trip-paul-singer-scotus-supreme-court" target="_blank" link-data="{&quot;linkText&quot;:&quot;Samuel Alito&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.propublica.org/article/samuel-alito-luxury-fishing-trip-paul-singer-scotus-supreme-court&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a6a0002&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a6a0003&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">Samuel Alito</a> and <a href="https://apnews.com/article/supreme-court-sotomayor-book-sales-ethics-colleges-b2cb93493f927f995829762cb8338c02" target="_blank" link-data="{&quot;linkText&quot;:&quot;Sonia Sotomayor&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://apnews.com/article/supreme-court-sotomayor-book-sales-ethics-colleges-b2cb93493f927f995829762cb8338c02&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a6a0004&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a6a0005&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">Sonia Sotomayor</a>.</p> <p>Those investigations, combined with some high-profile decisions on issues like abortion that put the court at odds with public opinion, have dented the public’s view of the court’s legitimacy over the past few years. As documented by <a href="https://news.gallup.com/poll/509234/supreme-court-approval-holds-record-low.aspx" target="_blank" link-data="{&quot;linkText&quot;:&quot;other polls&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://news.gallup.com/poll/509234/supreme-court-approval-holds-record-low.aspx&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a6b0000&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a6b0001&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">other polls</a>, trust in the court as an institution is falling steeply.</p> <p>But unlike most of the other independent polls, the new POLITICO | Morning Consult survey digs into specific reform proposals, most of which are quite popular, despite dim prospects of them being enacted by Congress or put into place by the justices themselves.</p> <p>In addition to the 75 percent of voters — a bipartisan consensus of 81 percent of Democrats, 72 percent of Republicans and 69 percent of independents — who support a binding ethics code, roughly two-thirds of voters support term limits for the justices (68 percent). A similar percentage (67 percent) say the court should televise oral arguments, while 66 percent believe there should be an age limit for the justices. A smaller majority, 60 percent, think there should be an equal number of Democrats, Republicans and independents on the high court.<br></p> <br> <img src="https://static.politico.com/86/b1/9387f199461499a46c0330978503/https-delivery-gettyimages.com/downloads/1431371148"> <br> <p>Two proposals did not earn broad support, however.</p> <p>Only 44 percent think the number of justices should be expanded, though that includes 65 percent of Democrats. President Joe Biden and congressional Democrats resisted the calls of liberal activists and <a href="https://www.democracydocket.com/news-alerts/democrats-introduce-bill-to-expand-u-s-supreme-court/" target="_blank" link-data="{&quot;linkText&quot;:&quot;some fellow lawmakers&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.democracydocket.com/news-alerts/democrats-introduce-bill-to-expand-u-s-supreme-court/&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a6b0002&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a6b0003&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">some fellow lawmakers</a> to add new justices to counter the majority appointed by Republican presidents.</p> <p>Despite the court’s lower profile, voters are aware of its rightward shift in recent years, the poll shows. A majority, 52 percent, correctly say the majority of justices have been appointed by Republican presidents (six of the nine justices currently serving have been). And 55 percent say the court is at least somewhat conservative, including 21 percent who call it “very conservative.”</p> <p>The poll also explored where the public stands on some of the issues likely to come before the court over the next year, including gun rights for accused domestic abusers and the effort in some states to bar former President Donald Trump from the 2024 ballot over his conduct following the 2020 election.</p> <p>Only 31 percent of voters say they support allowing people under restraining orders to possess firearms, while a 56 percent majority oppose allowing those people to have guns. The Supreme Court will hear a case on a federal law banning those people from having guns in November.</p> <p>Meanwhile, the poll found softening opposition to the court’s controversial abortion ruling last year. Asked about the “Supreme Court’s decision to overturn Roe v. Wade and leave abortion policies in the U.S. up to the states,” more voters say they disapprove (46 percent) of the ruling than approve (42 percent).</p> <p>But in a July 2022 Morning Consult poll conducted in the immediate aftermath of the Dobbs ruling, disapproval of the decision was 9 points higher: 55 percent, with just 35 percent approving.</p> <p>The new survey asked voters for their opinions of the nine justices individually but found little overall differences, including broad swaths of the electorate who have never heard of them or have no opinion.<br></p> <br> <p>As it was in 2020, the Supreme Court is likely to be a major issue in the next presidential campaign. Voters are divided evenly between whether they trust President Joe Biden (44 percent) or former President Donald Trump (42 percent) to handle the Supreme Court more.</p> <p>The POLITICO | Morning Consult poll (<a href="https://www.politico.com/f/?id=0000018a-e2ee-dd68-a3cf-fbfe15750000" target="_blank" link-data="{&quot;cms.site.owner&quot;:{&quot;_ref&quot;:&quot;0000014b-3270-d4f3-a3cb-f3ffa8610000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff4161000e&quot;},&quot;cms.content.publishDate&quot;:1696024614817,&quot;cms.content.publishUser&quot;:{&quot;_ref&quot;:&quot;0000014f-1297-d5f6-a96f-dad7f27e0000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;cms.content.updateDate&quot;:1696024614817,&quot;cms.content.updateUser&quot;:{&quot;_ref&quot;:&quot;0000014f-1297-d5f6-a96f-dad7f27e0000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;originalTemplate&quot;:false,&quot;link&quot;:{&quot;originalTemplate&quot;:false,&quot;attributes&quot;:[],&quot;target&quot;:&quot;NEW&quot;,&quot;url&quot;:&quot;https://www.politico.com/f/?id=0000018a-e2ee-dd68-a3cf-fbfe15750000&quot;,&quot;_id&quot;:&quot;0000018a-e2f1-d56c-abfa-eefdcc1b0001&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;linkText&quot;:&quot;toplines&quot;,&quot;_id&quot;:&quot;0000018a-e2f1-d56c-abfa-eefdcc1b0000&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">toplines</a>, <a href="https://www.politico.com/f/?id=0000018a-e2ef-d56c-abfa-eeef92cc0000" target="_blank" link-data="{&quot;cms.site.owner&quot;:{&quot;_ref&quot;:&quot;0000014b-3270-d4f3-a3cb-f3ffa8610000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff4161000e&quot;},&quot;cms.content.publishDate&quot;:1696024629235,&quot;cms.content.publishUser&quot;:{&quot;_ref&quot;:&quot;0000014f-1297-d5f6-a96f-dad7f27e0000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;cms.content.updateDate&quot;:1696024629235,&quot;cms.content.updateUser&quot;:{&quot;_ref&quot;:&quot;0000014f-1297-d5f6-a96f-dad7f27e0000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;originalTemplate&quot;:false,&quot;link&quot;:{&quot;originalTemplate&quot;:false,&quot;attributes&quot;:[],&quot;target&quot;:&quot;NEW&quot;,&quot;url&quot;:&quot;https://www.politico.com/f/?id=0000018a-e2ef-d56c-abfa-eeef92cc0000&quot;,&quot;_id&quot;:&quot;0000018a-e2f2-d56c-abfa-eeff025b0001&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;linkText&quot;:&quot;crosstabs&quot;,&quot;_id&quot;:&quot;0000018a-e2f2-d56c-abfa-eeff025b0000&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">crosstabs</a>) was conducted Sept. 23-25, surveying 1,967 registered voters online. The survey has a margin of error of plus or minus 2 percentage points.</p>]]>
+      </content:encoded>
+    </item>
+    <item>
+      <title>Garland: I'd resign if Biden asked me to take action on Trump</title>
+      <link>https://www.politico.com/news/2023/10/01/attorney-general-garland-biden-trump-00119411</link>
+      <description>"But there is no sense that anything like that will happen," he says in an interview.</description>
+      <guid>https://www.politico.com/news/2023/10/01/attorney-general-garland-biden-trump-00119411</guid>
+      <pubDate>Sun, 01 Oct 2023 19:58:58 EST</pubDate>
+      <dc:creator>Associated Press</dc:creator>
+      <dc:contributor>Associated Press</dc:contributor>
+      <media:content type="image/jpeg" url="https://static.politico.com/7a/38/2094b7b04f60b4fe9325824b408d/congress-attorney-general-51428.jpg">
+        <media:credit scheme="urn:ebu">Jacquelyn Martin/AP Photo</media:credit>
+        <media:title type="html">Attorney General Merrick Garland in an interview choked up when talking about his concerns over violence, particularly as judges and prosecutors assigned to the Trump cases got death threats.</media:title>
+        <media:thumbnail url="https://static.politico.com/7a/38/2094b7b04f60b4fe9325824b408d/congress-attorney-general-51428.jpg"/>
+      </media:content>
+      <maz:template>core</maz:template>
+      <maz:modified>1696208561549</maz:modified>
+      <content:encoded>
+        <![CDATA[<img src="https://static.politico.com/7a/38/2094b7b04f60b4fe9325824b408d/congress-attorney-general-51428.jpg"> <br> <p>WASHINGTON — Attorney General Merrick Garland said in an interview that aired Sunday that he would resign if asked by President Joe Biden to take action against Republican presidential frontrunner Donald Trump. But he doesn’t think he’ll be put in that position.</p> <p>“I am sure that that will not happen, but I would not do anything in that regard,” he said on CBS “60 Minutes.” “And if necessary, I would resign. But there is no sense that anything like that will happen.”</p> <p>The Justice Department is at the center of not only indictments against Trump that include an effort to overturn the 2020 election and wrongly keeping classified documents, but also cases involving Biden’s son Hunter, the aftermath of the riot at the U.S. Capitol and investigations into classified documents found in the president’s home and office. Garland has appointed three separate special counsels.</p> <p>Garland has spoken only sparingly about the cases and reiterated Sunday he would not get into specifics, but dismissed claims by Trump and his supporters that the cases were timed to ruin his chances to be president in 2024.</p> <p>“Well, that’s absolutely not true. Justice Department prosecutors are nonpartisan. They don’t allow partisan considerations to play any role in their determinations,” Garland said.</p> <p>Garland said the president has never tried to meddle in the investigations, and he dismissed criticism from Republicans that he was going easy on the president’s son, Hunter, who was recently indicted on a gun charge after a plea deal in his tax case fell apart. Hunter Biden is due in a Delaware court this week.</p> <p>“We do not have one rule for Republicans and another rule for Democrats. We don’t have one rule for foes and another for friends,” he said. ”We have only one rule; and that one rule is that we follow the facts and the law, and we reach the decisions required by the Constitution, and we protect civil liberties.”</p> <p>Garland choked up when talking about his concerns over violence, particularly as judges and prosecutors assigned to the Trump cases got death threats.</p> <p>“People can argue with each other as much as they want and as vociferously as they want. But the one thing they may not do is use violence and threats of violence to alter the outcome,” he said. “American people must protect each other. They must ensure that they treat each other with civility and kindness, listen to opposing views, argue as vociferously as they want, but refrain from violence and threats of violence. That’s the only way this democracy will survive.”</p>]]>
+      </content:encoded>
+    </item>
+    <item>
+      <title>Jimmy Carter turns 99 at home with Rosalynn and other family</title>
+      <link>https://www.politico.com/news/2023/10/01/jimmy-carter-turns-99-00119366</link>
+      <description>Tributes rolled in from everywhere.</description>
+      <guid>https://www.politico.com/news/2023/10/01/jimmy-carter-turns-99-00119366</guid>
+      <pubDate>Sun, 01 Oct 2023 14:51:15 EST</pubDate>
+      <dc:creator>Associated Press</dc:creator>
+      <dc:contributor>Associated Press</dc:contributor>
+      <media:content type="image/jpeg" url="https://static.politico.com/a3/83/7b5a8ea1445588df86d6e372b267/carter-birthday-49719.jpg">
+        <media:credit scheme="urn:ebu">AP Photo/Ben Gray</media:credit>
+        <media:title type="html">People write birthday cards for President Jimmy Carter during a celebration for his 99th birthday at The Carter Center in Atlanta on Sept. 30, 2023.</media:title>
+        <media:thumbnail url="https://static.politico.com/a3/83/7b5a8ea1445588df86d6e372b267/carter-birthday-49719.jpg"/>
+      </media:content>
+      <maz:template>core</maz:template>
+      <maz:modified>1696191748776</maz:modified>
+      <content:encoded>
+        <![CDATA[<img src="https://static.politico.com/a3/83/7b5a8ea1445588df86d6e372b267/carter-birthday-49719.jpg"> <br> <p>ATLANTA — Jimmy Carter has always been a man of discipline and habit. But the former president broke routine Sunday, putting off his practice of quietly watching church services online to instead celebrate his 99th birthday with his wife, Rosalynn, and their children, grandchildren and great-grandchildren in Plains.</p> <p>The gathering took place in the same one-story structure where the Carters lived before he was first elected to the Georgia Senate in 1962. As tributes poured in from around the world, it was an opportunity for Carter’s family to honor his personal legacy.</p> <p>“The remarkable piece to me and I think to my family is that while my grandparents have accomplished so much, they have really remained the same sort of South Georgia couple that lives in a 600-person village where they were born,” said grandson Jason Carter, who chairs the board at The Carter Center, which his grandparents founded in 1982 after leaving the White House a year earlier.</p> <p>Despite being global figures, the younger Carter said his grandparents have always “made it easy for us, as a family, to be as normal as we can be.”</p> <p>At The Carter Center in Atlanta, meanwhile, 99 new American citizens, who came from 45 countries, took the oath of allegiance as part of a naturalization ceremony timed for the former president’s birthday.</p> <p>“This is so impressive, and I’m so happy for it to be here,” said Tania Martinez after the ceremony. A 53-year-old nurse in Roswell, Martinez was born in Cuba and came to the U.S. from Ghana 12 years ago.<br></p> <br> <img src="https://static.politico.com/ec/cd/852b17614b748df45f6ed2f2ea66/jimmy-carter-birthday-38702.jpg"> <br> <p>“Now, I will be free forever,” she said, tears welling.</p> <p>Celebrating the longest-lived U.S. president this way was inconceivable not long ago. The Carters announced in February that their patriarch was forgoing further medical treatments and entering home hospice care after a series of hospitalizations. Yet Carter, who overcame cancer diagnosed at age 90 and learned to walk after having his hip replaced at age 94, defied all odds again.</p> <p>“If Jimmy Carter were a tree, he’d be an towering, old Southern oak,” said Donna Brazile, a former Democratic national chairperson and presidential campaign manager who got her start on Carter’s campaigns. “He’s as good as they come and tough as they come.”</p> <p>Jill Stuckey, a longtime Plains resident who visits the former first couple regularly, cautioned to “never underestimate Jimmy and Rosalynn Carter.”</p> <p>His latest resilience has allowed Carter a rare privilege even for presidents: He’s been able to enjoy months of accolades typically reserved for when a former White House resident dies. The latest round includes a flood of messages from world leaders and pop culture figures donning “Jimmy Carter 99” hats, with many of them focusing on Carter’s four decades of global humanitarian work after leaving the Oval Office.</p> <p>Katie Couric, the first woman to anchor a U.S. television network’s evening news broadcast, praised Carter in a social media video for his “relentless effort every day to make the world a better place.”</p> <p>She pointed to Carter’s work to eradicate Guinea worm disease and river blindness, while advocating for peace and democracy in scores of countries. She noted he has written 32 books and worked for decades with Habitat for Humanity building houses for low-income people.</p> <p>“Oh, yeah, and you were governor of Georgia. And did I mention president of the United States?” she joked. “When are you going to stop slacking off?”</p> <p>Bill Clinton, the 42nd president and first Democratic president after Carter’s landslide defeat, showed no signs of the chilly relationship the two fellow Southerners once had.</p> <p>“Jimmy! Happy birthday,” Clinton said in his video message. “You only get to be 99 once. It’s been a long, good ride, and we thank you for your service and your friendship and the enduring embodiment of the American dream.”</p> <p>Musician Peter Gabriel led concertgoers at Madison Square Garden in a rendition of “Happy Birthday,” as did the Indigo Girls at a recent concert.</p> <p>In Atlanta, the Carter Library &amp; Museum and adjacent Carter Center held a weekend of events, including the citizenship ceremony. The museum offered 99-cent admission Saturday. The commemoration there was able to continue Sunday only because Congress came to an agreement to avoid a partial government shutdown at the start of the federal fiscal year, which coincides with Carter’s birthday.</p> <p>Jason Carter said his grandfather has found it “gratifying” to see reassessments of his presidency. Carter’s term often has been broad-brushed as a failure because of inflation, global fuel shortages and the holding of American hostages in Iran, a confluence that led to Republican Ronald Reagan’s 1980 romp.</p> <p>Yet Carter’s focus on diplomacy, his emphasis on the environment before the climate crisis was widely acknowledged and his focus on efficient government — his presidency added a relative pittance to the national debt — have garnered second looks from historians.</p> <p>Indeed, Carter’s longevity offers a frame to illuminate both how much the world has changed over his lifetime while still recognizing that certain political and societal challenges endure.</p> <p>The Carter Center’s disease-eradication work occurs mostly in developing countries. But Jimmy and Roslaynn Carter were first exposed to river blindness growing up surrounded by the crushing poverty of the rural Deep South during the Great Depression.</p> <p>The Center’s global democracy advocacy has reached countries that were still part of various European empires when Carter was born in 1924 or were under heavy American influence in the decades after World War II. Yet in recent years, Carter has declared his own country to be more of an “oligarchy” than a well-functioning democracy. And the Center has since become involved in monitoring and tracking U.S. elections.</p> <p>Carter has lived long enough finally to have a genuine friend in the Oval Office again. President Joe Biden was a young Delaware politician in 1976 and became the first U.S. senator to endorse Carter’s campaign against better-known Washington figures. Now, as Biden seeks reelection in 2024, he faces the headwinds of inflation that Republicans openly compare to Carter’s economy. Biden had a wooden birthday cake display placed on the White House front law to honor Carter.</p> <p>The year Carter was born, Congress passed sweeping immigration restrictions, sharply curtailing Ellis Island as a portal to the nation. Now, the naturalization ceremony to mark Carter’s 99th birthday comes as Washington continues a decades-long fight over immigration policy. Republicans, especially, have moved well to the right of Reagan, who in 1986 signed a sweeping amnesty policy for millions of immigrants who were in the country illegally or had no sure legal path to citizenship.</p> <p>Carter also was born into Jim Crow segregation, at a time when the Ku Klux Klan marched openly on state capitols and in Washington. As governor and president, Carter set new marks for appointing Black Americans to top government posts. At 99, Carter’s Sunday online church circuit includes watching Georgia’s first Black U.S. senator, the Rev. Raphael Warnock, preach at Ebenezer Baptist Church in Atlanta. Yet, at the same time, some white state lawmakers in Carter’s native region are defying the U.S. Supreme Court in an effort to curtail Black voters’ strength at the ballot box.</p> <p>Jason Carter said understanding his grandfather’s impact means resisting the urge to assess whether he solved every problem he confronted or won every election. Instead, he said, the takeaway is to recognize a sweeping impact rooted in respecting other people on an individual level and trying to help them.</p> <p>“You don’t get more out of a life than he got, right?” the younger Carter said. “It is a incredible, full rich life with a long marriage, a wonderful partnership with my grandmother, and the ability to see the world and interact with the world in ways that almost nobody else has ever been able to do.”</p>]]>
+      </content:encoded>
+    </item>
+    <item>
+      <title>‘America’s better for Dianne Feinstein having served her country’</title>
+      <link>https://www.politico.com/news/2023/10/01/dianne-feinstein-lindsey-graham-00119342</link>
+      <description>Sen. Lindsey Graham praised his former colleague.</description>
+      <guid>https://www.politico.com/news/2023/10/01/dianne-feinstein-lindsey-graham-00119342</guid>
+      <pubDate>Sun, 01 Oct 2023 10:57:41 EST</pubDate>
+      <dc:creator>David Cohen</dc:creator>
+      <dc:contributor>David Cohen</dc:contributor>
+      <media:content type="image/jpeg" url="https://static.politico.com/16/0f/0710a1d7425c953ac34b061f4f1c/obit-feinstein-76938.jpg">
+        <media:credit scheme="urn:ebu">Benjamin Fanjoy/AP Photo</media:credit>
+        <media:title type="html">Flowers rest at a bust of late Sen. Dianne Feinstein at City Hall in San Francisco on Friday, Sept. 29, 2023.</media:title>
+        <media:thumbnail url="https://static.politico.com/16/0f/0710a1d7425c953ac34b061f4f1c/obit-feinstein-76938.jpg"/>
+      </media:content>
+      <maz:template>core</maz:template>
+      <maz:modified>1696175861468</maz:modified>
+      <content:encoded>
+        <![CDATA[<img src="https://static.politico.com/16/0f/0710a1d7425c953ac34b061f4f1c/obit-feinstein-76938.jpg"> <br> <p>Senators on both sides of the aisle on Sunday effusively praised Sen. Dianne Feinstein, who died last week at the age of 90.</p> <p>“Let's reflect on a well-lived light: America’s better for Dianne Feinstein having served her country,” Sen. Lindsey Graham (R-S.C.) said of the California Democrat in an emotional interview on CBS’ “Face the Nation.”</p> <p>Feinstein, a former mayor of San Francisco first elected to the Senate in 1992, <a href="https://www.politico.com/news/2023/09/29/dianne-feinstein-senator-mayor-00006007" target="_blank" link-data="{&quot;cms.site.owner&quot;:{&quot;_ref&quot;:&quot;0000014b-3270-d4f3-a3cb-f3ffa8610000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff4161000e&quot;},&quot;cms.content.publishDate&quot;:1696174676583,&quot;cms.content.publishUser&quot;:{&quot;_ref&quot;:&quot;0000014f-1289-d432-adcf-33c9e3110022&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;cms.content.updateDate&quot;:1696174676583,&quot;cms.content.updateUser&quot;:{&quot;_ref&quot;:&quot;0000014f-1289-d432-adcf-33c9e3110022&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;originalTemplate&quot;:false,&quot;link&quot;:{&quot;originalTemplate&quot;:false,&quot;attributes&quot;:[],&quot;target&quot;:&quot;NEW&quot;,&quot;url&quot;:&quot;https://www.politico.com/news/2023/09/29/dianne-feinstein-senator-mayor-00006007&quot;,&quot;_id&quot;:&quot;0000018a-ebe3-de9d-afbf-ebff84e20000&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;linkText&quot;:&quot;died Thursday night&quot;,&quot;_id&quot;:&quot;0000018a-ebe3-de9d-afbf-ebff84e10000&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">died Thursday night</a> in her home.</p> <p>Saying “Dianne wasn’t the problem, she was the solution,” Graham asserted that Feinstein was proof that “it’s OK to be tough and kind.”</p> <p>Graham also said that when he first arrived in the U.S. Senate in 2003, a senator whom he declined to identify told him if he wanted to get legislation moving, it was imperative to get the support of either former Sen. Edward M. Kennedy (D-Mass.) or Feinstein.<br></p> <br><iframe style="max-width: 100%" width="1280" height="720" src="https://players.brightcove.net/1155968404/r1WF6V0Pl_default/index.html?videoId=6338086535112" frameborder="0"></iframe> <br> <p>“If Ted was the lion, she was the lioness,” he said. ”She could move votes.”</p> <p>Graham made it clear it was a personal loss for him.</p> <p>“She was my friend, I miss her, and If you’re looking for a role model in politics as a young man or young woman, look to her life,” he said.</p> <p>Sen. Joe Manchin (D-W.Va.) also praised Feinstein, calling her "such a beautiful person."</p> <p>He went on to describe her as a “compassionate” role model who respected her colleagues for their stances even if they were not as liberal as hers.</p> <p>“There’s not a person that served more honorably than Dianne Feinstein,” he said on “Fox News Sunday.”</p>]]>
+      </content:encoded>
+    </item>
+    <item>
+      <title>Haley digs again at Ramaswamy over TikTok</title>
+      <link>https://www.politico.com/news/2023/10/01/haley-digs-ramaswamy-tiktok-00119327</link>
+      <description>"Just because 150 million people are on it, doesn't mean you do it because it's politically popular," she said.</description>
+      <guid>https://www.politico.com/news/2023/10/01/haley-digs-ramaswamy-tiktok-00119327</guid>
+      <pubDate>Sun, 01 Oct 2023 09:51:52 EST</pubDate>
+      <dc:creator>David Cohen</dc:creator>
+      <dc:contributor>David Cohen</dc:contributor>
+      <media:content type="image/jpeg" url="https://static.politico.com/0a/c9/81a16806446e82a86330ec637caf/election-2024-haley-abortion-78656.jpg">
+        <media:credit scheme="urn:ebu">Meg Kinnard/AP Photo</media:credit>
+        <media:title type="html">Republican presidential candidate former U.N. Ambassador Nikki Haley speaks at a campaign event on Sept. 7, 2023, in Boiling Springs, S.C.</media:title>
+        <media:thumbnail url="https://static.politico.com/0a/c9/81a16806446e82a86330ec637caf/election-2024-haley-abortion-78656.jpg"/>
+      </media:content>
+      <maz:template>core</maz:template>
+      <maz:modified>1696171912174</maz:modified>
+      <content:encoded>
+        <![CDATA[<img src="https://static.politico.com/0a/c9/81a16806446e82a86330ec637caf/election-2024-haley-abortion-78656.jpg"> <br> <p>Republican presidential candidate Nikki Haley on Sunday doubled down on her much-quoted jab at fellow candidate Vivek Ramaswamy in last week's debate.</p> <p>Haley again assailed Ramaswamy for saying Republicans should be on TikTok because it was a way to reach out to young people. "Just because 150 million people are on it, doesn't mean you do it because it's politically popular," she said on "Fox News Sunday."</p> <p>The former U.N. ambassador contended it was a matter of national security.</p> <p>"This is the Chinese Communist Party, who is doing espionage," she said of TikTok.</p> <p>Haley had mocked the entrepreneur over his remarks on TikTok in Wednesday's debate, saying, "Every time I hear you, I feel a little bit dumber."<br></p> <br><iframe style="max-width: 100%" width="1280" height="720" src="https://players.brightcove.net/1155968404/r1WF6V0Pl_default/index.html?videoId=6337960192112" frameborder="0"></iframe> <br> <p>Host Shannon Bream noted that Haley previously had nice things to say about Ramaswamy, writing a blurb for "Woke, Inc.," one of his books. "In Woke, Inc., Vivek speaks the truth without fear," she wrote at the time.</p> <p>Haley said Sunday there was no contradiction there.</p> <p>"I always praise people when they deserve to be praised," she said, "and I hit people when they deserve to be hit."</p> <p>Ramaswamy said during the debate that Republicans were being unrealistic in refusing to make use of TikTok.</p> <p>“I have a radical idea for the Republican Party,” he said. “We need to win elections. And part of how we win elections is reaching the next generation of young Americans where they are.”</p>]]>
+      </content:encoded>
+    </item>
+    <item>
+      <title>Huge but glum: Poland's opposition puts a million people on the streets</title>
+      <link>https://www.politico.eu/article/poland-tusk-million-hearts-civic-coalition-warsaw/</link>
+      <description>The opposition hopes the massive turnout will change its fortunes going into the Oct. 15 election, but its supporters are tense.</description>
+      <guid>https://www.politico.eu/article/poland-tusk-million-hearts-civic-coalition-warsaw/</guid>
+      <dc:creator>Jan Cienski</dc:creator>
+      <dc:contributor>Jan Cienski</dc:contributor>
+      <media:content type="image/jpeg" url="https://static.politico.com/b0/9f/572465a44e288e602f341f9c354f/poland-election-opposition-71369.jpg">
+        <media:credit scheme="urn:ebu">AP Photo/Rafal Oleksiewicz</media:credit>
+        <media:title type="html">People cheers during a march to support the opposition against the governing party in Warsaw, Poland, on Oct. 1, 2023.</media:title>
+        <media:thumbnail url="https://static.politico.com/b0/9f/572465a44e288e602f341f9c354f/poland-election-opposition-71369.jpg"/>
+      </media:content>
+      <maz:template>web</maz:template>
+      <maz:modified>1696180469076</maz:modified>
+    </item>
+    <item>
+      <title>Explosion, gunfire rock Ankara in terrorist attack, Turkish minister says</title>
+      <link>https://www.politico.eu/article/explosion-gunfire-rock-ankara-turkey-terrorist-attack-internal-affairs-minister-ali-yerlikaya/</link>
+      <description>Attackers targeted security services' headquarters, Turkey's Internal Affairs Minister Ali Yerlikaya said.</description>
+      <guid>https://www.politico.eu/article/explosion-gunfire-rock-ankara-turkey-terrorist-attack-internal-affairs-minister-ali-yerlikaya/</guid>
+      <dc:creator>Gabriel Gavin</dc:creator>
+      <dc:description>Gabriel Gavin is a journalist with POLITICO in Europe, covering energy, Russia, Turkey and the former Soviet Union.</dc:description>
+      <dc:contributor>Gabriel Gavin</dc:contributor>
+      <media:content type="image/jpeg" url="https://static.politico.com/b4/30/bc73e36141129ca7d0f486e803b0/turkey-explosion-42917.jpg">
+        <media:credit scheme="urn:ebu">AP Photo/Ali Unal</media:credit>
+        <media:title type="html">Turkish security forces cordon off an area after an explosion in Ankara, Sunday, Oct. 1, 2023.</media:title>
+        <media:thumbnail url="https://static.politico.com/b4/30/bc73e36141129ca7d0f486e803b0/turkey-explosion-42917.jpg"/>
+      </media:content>
+      <maz:template>web</maz:template>
+      <maz:modified>1696157902563</maz:modified>
+    </item>
+    <item>
+      <title>Britain seeks to train military inside Ukraine, defense chief says</title>
+      <link>https://www.politico.eu/article/britain-seeks-to-train-military-inside-ukraine-uk-defense-chief-says/</link>
+      <description>"I think the opportunity now is to bring more things ‘in country,’" Defense Secretary Grant Shapps tells the Sunday Telegraph.</description>
+      <guid>https://www.politico.eu/article/britain-seeks-to-train-military-inside-ukraine-uk-defense-chief-says/</guid>
+      <dc:creator>Annabelle Dickson</dc:creator>
+      <dc:contributor>Annabelle Dickson</dc:contributor>
+      <media:content type="image/jpeg" url="https://static.politico.com/42/fd/c1b109f34b1489271aae85e122b8/britain-politics-34439.jpg">
+        <media:credit scheme="urn:ebu">AP Photo/Kirsty Wigglesworth</media:credit>
+        <media:title type="html">British Defense Minister Grant Shapps arrives at Downing Street in London on Sept. 5, 2023.</media:title>
+        <media:thumbnail url="https://static.politico.com/42/fd/c1b109f34b1489271aae85e122b8/britain-politics-34439.jpg"/>
+      </media:content>
+      <maz:template>web</maz:template>
+      <maz:modified>1696157551180</maz:modified>
+    </item>
+    <item>
+      <title>Police chief who led raid of small Kansas newspaper has been suspended</title>
+      <link>https://www.politico.com/news/2023/10/01/police-chief-who-led-raid-of-small-kansas-newspaper-suspended-00119309</link>
+      <description>Marion Mayor Dave Mayfield said he suspended Chief Gideon Cody on Thursday.</description>
+      <guid>https://www.politico.com/news/2023/10/01/police-chief-who-led-raid-of-small-kansas-newspaper-suspended-00119309</guid>
+      <pubDate>Sun, 01 Oct 2023 05:43:53 EST</pubDate>
+      <dc:creator>Associated Press</dc:creator>
+      <dc:contributor>Associated Press</dc:contributor>
+      <media:content type="image/jpeg" url="https://static.politico.com/a6/f2/175ade414ec6954339266ef7b6a8/kansas-newspaper-raid-13502.jpg">
+        <media:credit scheme="urn:ebu">John Hanna/AP Photo</media:credit>
+        <media:title type="html">A stack of the latest weekly edition of the Marion County Record sits in the back of the newspaper's building, awaiting unbundling, sorting and distribution, Aug. 16, 2023, in Marion, Kan.</media:title>
+        <media:thumbnail url="https://static.politico.com/a6/f2/175ade414ec6954339266ef7b6a8/kansas-newspaper-raid-13502.jpg"/>
+      </media:content>
+      <maz:template>core</maz:template>
+      <maz:modified>1696157033209</maz:modified>
+      <content:encoded>
+        <![CDATA[<img src="https://static.politico.com/a6/f2/175ade414ec6954339266ef7b6a8/kansas-newspaper-raid-13502.jpg"> <br> <p>The police chief who led a highly criticized raid of a small Kansas newspaper has been suspended, the mayor confirmed to The Associated Press on Saturday.</p> <p>Marion Mayor Dave Mayfield in a text said he suspended Chief Gideon Cody on Thursday. He declined to discuss his decision further and did not say whether Cody was still being paid.</p> <p>Voice messages and emails from the AP seeking comment from Cody’s lawyers were not immediately returned Saturday.</p> <p>The Aug. 11 searches of the Marion County Record’s office and the homes of its publisher and a City Council member have been sharply criticized, putting Marion at the center of a debate over the press protections offered by the First Amendment to the U.S. Constitution.</p> <p>Cody’s suspension is a reversal for the mayor, who previously said he would wait for results from a state police investigation before taking action.</p> <p>Vice-Mayor Ruth Herbel, whose home was also raided Aug. 11, praised Cody’s suspension as “the best thing that can happen to Marion right now” as the central Kansas town of about 1,900 people struggles to move forward under the national spotlight.</p> <p>“We can’t duck our heads until it goes away, because it’s not going to go away until we do something about it,” Herbel said.</p> <p>Cody has said little publicly since the raids other than posting a defense of them on the police department’s Facebook page. In court documents he filed to get the search warrants, he argued that he had probable cause to believe the newspaper and Herbel, whose home was also raided, had violated state laws against identity theft or computer crimes.</p> <p>The raids came after a local restaurant owner accused the newspaper of illegally accessing information about her. A spokesman for the agency that maintains those records has said the newspaper’s online search that a reporter did was likely legal even though the reporter needed personal information about the restaurant owner that a tipster provided to look up her driving record.</p> <p>The newspaper’s publisher Eric Meyer has said the identity theft allegations simply provided a convenient excuse for the search after his reporters had been digging for background information on Cody, who was appointed this summer.</p> <p>Legal experts believe the raid on the newspaper violated a federal privacy law or a state law shielding journalists from having to identify sources or turn over unpublished material to law enforcement.</p> <p>Video of the raid on the home of publisher Eric Meyer shows how distraught his 98-year-old mother became as officers searched through their belongings. Meyer said he believes that stress contributed to the death of his mother, Joan Meyer, a day later.</p> <p>Another reporter last month filed a federal lawsuit against the police chief over the raid.<br></p>]]>
+      </content:encoded>
+    </item>
+    <item>
+      <title>What Shutdown? Downtown D.C. Is Already a Ghost Town</title>
+      <link>https://www.politico.com/news/magazine/2023/09/29/government-shutdown-work-from-home-00118940</link>
+      <description>As far as D.C.'s economy is concerned, next week won't make much difference.</description>
+      <guid>https://www.politico.com/news/magazine/2023/09/29/government-shutdown-work-from-home-00118940</guid>
+      <pubDate>Fri, 29 Sep 2023 04:00:00 EST</pubDate>
+      <dc:creator>Michael Schaffer</dc:creator>
+      <dc:description>&lt;i&gt;Michael Schaffer is a senior editor and columnist at &lt;/i&gt;POLITICO Magazine&lt;i&gt;. He has covered national and local politics for over twenty years and spent seven years as editor-in-chief of the &lt;/i&gt;Washingtonian&lt;i&gt;. His Capital City column chronicles the inside conversations and big trends shaping Washington politics.&lt;/i&gt;</dc:description>
+      <dc:contributor>Michael Schaffer</dc:contributor>
+      <media:content type="image/jpeg" url="https://static.politico.com/12/56/5e58df184d57a922c2e13fc3a817/mag-schaffer-capcity0929.jpg">
+        <media:credit scheme="urn:ebu">POLITICO illustration/Photos by iStock, Getty Images</media:credit>
+        <media:title type="html">Mag.Schaffer.CapCity0929.jpg</media:title>
+        <media:thumbnail url="https://static.politico.com/12/56/5e58df184d57a922c2e13fc3a817/mag-schaffer-capcity0929.jpg"/>
+      </media:content>
+      <maz:template>magazine</maz:template>
+      <maz:modified>1695999566310</maz:modified>
+      <content:encoded>
+        <![CDATA[<img src="https://static.politico.com/12/56/5e58df184d57a922c2e13fc3a817/mag-schaffer-capcity0929.jpg"> <br> <p>In 2019, after the last federal government shutdown, the District of Columbia’s chief financial officer estimated that the five-week impasse cost the city some <a href="https://cfo.dc.gov/sites/default/files/dc/sites/ocfo/publication/attachments/February%202019%20Revenue%20Estimates.pdf" target="_blank" link-data="{&quot;linkText&quot;:&quot;$47.4 million in lost tax revenues&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://cfo.dc.gov/sites/default/files/dc/sites/ocfo/publication/attachments/February%202019%20Revenue%20Estimates.pdf&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a790009&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a79000a&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">$47.4 million in lost tax revenues</a>.</p> <p>So with another shutdown looming, you’d think a prominent expert who spends her days thinking about the state of the District economy would be freaking out about the prospect. But you’d be wrong.</p> <p>“For all practical purposes for D.C., the federal government has been shut down since March 9, 2020,” said Yesim Sayin, executive director of the D.C. Policy Center, a leading District-focused think tank. “So it really doesn’t matter as much.”</p> <p>Sayin’s blunt assessment represents an astonishing new status quo for the nation’s capital, a city where roughly one in four jobs — a total of <a href="https://ora-cfo.dc.gov/page/economic-and-revenue-trend-reports-august-2023" target="_blank" link-data="{&quot;linkText&quot;:&quot;191,967, according to the latest estimate&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://ora-cfo.dc.gov/page/economic-and-revenue-trend-reports-august-2023&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a79000b&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a79000c&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">191,967, according to the latest estimate</a> — is in the federal government.</p> <p>During prior shutdowns, people elsewhere made jokes about how no one could tell that the government was off duty. But locals, even the ones safely ensconced in the private sector, couldn’t help but notice. Rush-hour seats were suddenly available on the Metro. Lines at lunch spots had shrunk. Streets and sidewalks were easier to navigate.</p> <p>Since idled federal workers always wound up getting paid back for their involuntary time off, it was these adjacent private businesses where the budget stand-off had some of its biggest effects: When there are nearly 200,000 fewer people making their way to offices every day, that means there are nearly 200,000 fewer potential customers at your boutique, diners in your restaurant or cars at your parking garage.</p> <p>Now, though, the potential shutdown of 2023 takes place against a backdrop where a lot of those workers are already spending their days at home. As a result, they’re <i>already</i> not parking, dining or shopping downtown.</p> <br> <p>“They’ve sort of been absent currently,” said Gerry Widdicombe, the chief financial officer of the Downtown Business Improvement District, which covers an area where roughly a third of the jobs are federal. “Nobody really knows where they are in the office.”</p> <p>“I think you’ll still see, maybe, people who are federal government workers who live in D.C. may reduce their spending a little bit, but eventually, when the shutdown ends, they always get back pay,” Sayin told me. “So from a practical perspective, the federal government shutdown’s impact on D.C. is now limited to, like, the zoo is closed or the Smithsonian is closed. It’s really not particularly important.”</p> <p>There are, of course, plenty of government contracting businesses who are also liable to not get paid. But the tough labor market could make those firms hesitant to cut people. “None of these contractors want to shed staff because it was hard to get staff,” said Terry Clower, who leads a George Mason University center that studies the regional economy.</p> <p>To be clear, Sayin, whose organization is funded by some of the region’s top businesses, is not saying the muted impact on D.C.’s economy is a good thing. To the contrary. While Washington boosters have long tried to portray their city as more than just a sleepy government town, the shrugging attitude toward the effects of a possible shutdown doesn’t reflect the sudden rise of a dynamic private sector.</p> <p>Rather, if Washington is really becoming just another American city where locals only notice a government shutdown because it closes a National Park Service attraction, it’s a danger sign for the capital — and a further indication that all the <a href="https://www.politico.com/news/magazine/2023/01/20/bowser-biden-federal-workers-washington-dc-00078677" target="_blank" link-data="{&quot;linkText&quot;:&quot;talk about getting the feds back to their cubicles&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.politico.com/news/magazine/2023/01/20/bowser-biden-federal-workers-washington-dc-00078677&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a79000d&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a79000e&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">talk about getting the feds back to their cubicles</a> hasn’t translated into reality.</p> <p>In April, as the administration planned to end the pandemic emergency, the federal Office of Management and Budget ordered agencies to boost in-person work, something President Biden had called for in his State of the Union address. Last month, White House Chief of Staff Jeff Zients followed up with an email to the cabinet saying that “this is a priority of the President — and I am looking to each of you to aggressively execute this shift.”</p> <p>But a <a href="https://federalnewsnetwork.com/workforce/2023/09/heres-what-we-know-so-far-about-agencies-return-to-office-plans/" target="_blank" link-data="{&quot;linkText&quot;:&quot;recent report from the Federal News Network&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://federalnewsnetwork.com/workforce/2023/09/heres-what-we-know-so-far-about-agencies-return-to-office-plans/&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a790010&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a790011&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">recent report from the Federal News Network</a> shows that, however aggressively executed, this shift will not bring about a return to the glory days of office-building bustle. A running tally of return-to-work plans lists eligible employees’ number of mandatory in-person days per two-week pay period by agency, which range from four (at the Department of Education, the Social Security Administration and the EPA, among others) to between six and eight (at the State Department).</p> <p>Confoundingly, there’s no single source of information on telework across the vast federal workforce, and the definition of the phenomenon even varies by agency. The Office of Personnel Management (where, incidentally, eligible employees will have to spend four days per pay period in the office starting next month, according to the tally) steered me to <a href="https://www.opm.gov/telework/documents-for-telework/2021-telework-report.pdf" target="_blank" link-data="{&quot;linkText&quot;:&quot;the most recent annual report on the subject&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.opm.gov/telework/documents-for-telework/2021-telework-report.pdf&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a7a0000&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a7a0001&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">the most recent annual report on the subject</a>, which came out last December and covers the year 2021.</p> <p>That year, some 47 percent of the federal workforce did at least some remote work, which represents nearly all of the employees who were eligible to do so. (Vast numbers of feds work at veterans’ hospitals, serve as federal prison guards, staff TSA checkpoints or otherwise have gigs that can’t be done via Zoom.) A <a href="https://federalnewsnetwork.com/workforce/2023/05/dissatisfied-with-opms-data-republicans-ask-individual-agencies-for-telework-details/" target="_blank" link-data="{&quot;linkText&quot;:&quot;Federal News Network survey&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://federalnewsnetwork.com/workforce/2023/05/dissatisfied-with-opms-data-republicans-ask-individual-agencies-for-telework-details/&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a7a0002&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a7a0003&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">Federal News Network survey</a> this spring found that 30 percent were working entirely remote and 62 percent in a hybrid setup, which for most meant being home four days a week.</p> <p>But you really don’t need a sheaf of HR data to know that Washington is not the same place as it was before the pandemic.</p> <p>Downtown streets are quieter and clear out earlier; transit has boosted hours but hasn’t lured back the crowds that used to make rush-hour an ordeal. The city’s nightlife corridors and creative dining scene have bounced back, but workaday lunch spots have still taken a beating, Widdicombe says — even though, in one fringe benefit, some of the federal agency cafeterias have still not reopened, which propels some would-be lunch-buyers outside to the private-sector eateries run by his organization’s members.</p> <p>“I’d rather have 10 percent of something than 50 percent of nothing,” he joked.</p> <p>For the city, which worries about rising crime, shrinking budgets and the abrupt end to an astonishing 25-year municipal comeback, this is bad news. For federal employees — and the country they serve — it’s less clear-cut. There’s little evidence that the vast expansion of work from home has meant a worse performance by the agencies, much less led to an epidemic of lazy bureaucrats goofing off in their pajamas, as suggested by some of the GOP pols who want to mandate in-person work.</p> <p>“They had this huge experiment: Does it work? Can the agency still accomplish its mission? The answer so far is a resounding yes,” says Jacqueline Simon, policy director for the American Federation of Government Employees, the largest federal union. “We all have a stake in prosperous cities and downtowns that have a lot of economic activity. On the other hand, you can’t place that burden on federal employees to patronize lunch restaurants. It’s not the responsibility of federal employees to keep these businesses in business.”</p> <p>At a time when large parts of the private sector have become much more flexible, and at a moment where all kinds of employers are having trouble recruiting and retaining top-shelf talent, simply ordering everyone with a federal badge on their lanyard to go back downtown would invite its own sort of personnel disaster.</p> <p>Still, when shutdowns come, the politics are a reminder that work — especially work on behalf of the taxpayers — isn’t just an economic exchange of labor for money.</p> <p>Part of what a national capital is involves a community of people working on the nation, whatever the source of their paycheck. Some of those folks, in law or lobbying or media or on the Hill, are involved in the political fray that Americans find so demoralizing. But others, notably those 200,000 feds spending careers developing sometimes comically specific expertise on behalf of obscure multi-letter agencies, live in the most earnest and apolitical culture around.</p> <p>By and large, it’s a culture that benefits from having so many of the pros in the same place at the same time.</p> <p>Smart-set types mock the federal lifers’ lanyards and bureaucratese, but the further our public servants are out of view, the easier it is to dismiss the entire venture — particularly in a country like this one, where so much of government takes the form of subsidies and grants and other ways of obscuring Uncle Sam’s role in programs that people actually like.</p> <p>“There’s this huge push to get federal employees back to their desks by the same individuals who are like, ‘Let’s shut it down,’” scoffed Simon, noting that much of the agita about federal telework came from the Republican right. It’s true. But when federal employees stop getting paychecks next week, there will be that much less evidence for the havoc the imbroglio is causing.</p> <p>Even if you leave aside the grim data about commercial real estate and local tax revenues and accept the assertion that hybrid government workers do just as good a job as the ones who used to spent every Monday to Friday in the Federal Triangle, it’s still clear that Washington has lost something due to the abrupt changes in work.</p> <p>Yes, you could say the same for other cities where downtowns are full of bankers or insurance brokers or advertising agents. But in the capital, the work of government is why the city was invented in the first place. A status quo where the apoliticals stay home — or, over time, relocate to entirely different time zones — further tips the balance towards the pugilists, whose jobs show no sign of moving.<br></p> <br>]]>
+      </content:encoded>
+    </item>
+    <item>
+      <title>No Matter How Straitlaced She Seemed, Dianne Feinstein "Didn't Care Who You Sleep With"</title>
+      <link>https://www.politico.com/news/magazine/2023/09/29/dianne-feinstein-legacy-00116902</link>
+      <description>Despite the late California senator’s 1950s wife image, she became a pioneering advocate for the gay community.</description>
+      <guid>https://www.politico.com/news/magazine/2023/09/29/dianne-feinstein-legacy-00116902</guid>
+      <pubDate>Fri, 29 Sep 2023 08:53:48 EST</pubDate>
+      <dc:creator>Jerry Roberts</dc:creator>
+      <dc:description>&lt;i&gt;Jerry Roberts, former managing editor of the &lt;/i&gt;San Francisco Chronicle&lt;i&gt;, is the author of “Dianne Feinstein: Never Let Them See You Cry.”&lt;/i&gt;</dc:description>
+      <dc:contributor>Jerry Roberts</dc:contributor>
+      <media:content type="image/jpeg" url="https://static.politico.com/b8/37/9380cd8d478489cb68c04124efcf/feinsteinoverrride.jpg">
+        <media:credit scheme="urn:ebu">Roger Ressmeyer/Corbis/VCG via Getty Images</media:credit>
+        <media:title type="html">San Francisco Mayor Dianne Feinstein makes rounds through the Tenderloin neighborhood in 1981.</media:title>
+        <media:thumbnail url="https://static.politico.com/b8/37/9380cd8d478489cb68c04124efcf/feinsteinoverrride.jpg"/>
+      </media:content>
+      <maz:template>magazine</maz:template>
+      <maz:modified>1696008669711</maz:modified>
+      <content:encoded>
+        <![CDATA[<img src="https://static.politico.com/b8/37/9380cd8d478489cb68c04124efcf/feinsteinoverrride.jpg"> <br> <p>James Haas was a San Francisco land use attorney, and a gay man who was not yet out in 1970, when he became an informal advisor to Dianne Feinstein.</p> <p>During Feinstein’s first term in office as a member of the Board of Supervisors, the city’s legislative body, Haas organized a group of professionals, dubbed “The Think Tank,” to develop policy on matters from traffic flows to taxes.<br></p> <br> <p>He also authored the city’s most abiding epigram about Feinstein’s relationship to the gay community:</p> <p>“Dianne Feinstein doesn’t care who you sleep with,” he famously quipped, “as long as you’re in bed by 11 o’clock.”</p> <p>The one-liner helps decode Feinstein’s complex, half-century of interactions with gay people — gay voters, gay colleagues and the gay community writ large.<br></p> <br><iframe style="max-width: 100%" width="1280" height="720" src="https://players.brightcove.net/1155968404/r1WF6V0Pl_default/index.html?videoId=6338086535112" frameborder="0"></iframe> <br> <p>Politically, Feinstein was among the nation’s first, tiny handful of officeholders to advocate for gay rights and anti-discrimination laws, a throughline of her career. As a personal matter, however, her square and straightlaced sensibilities — shaped by her Catholic school girl education, 1950s-era wife and motherhood, wealth and privilege — recurrently clashed with gay culture and aspirations in the public arena.</p> <p>It was a political dynamic that shaped her career more broadly, as she often staked out liberal positions that incorporated incremental, centrist or conservative limits, on issues from criminal justice to labor relations and water policy, frequently angering the left or antagonizing her own supporters.<br></p> <br> <img src="https://static.politico.com/d4/7b/041f7cab4548b3223e057e6cff0a/gettyimages-514682118.jpg"> <br> <p>Still, as Feinstein, who died Thursday night at age 90, is celebrated as a trailblazer for women, a historic steward of her hometown during an era of upheaval and a consequential U.S. senator, her leadership in helping usher LGBTQ citizens into America’s mainstream should not be overlooked. From her early days in San Francisco to congressional debates over gay marriage and participation in the military, she played a key role in centering LGBTQ rights as a national issue and a crucial value for Democrats.</p> <p>“From her time serving on the San Francisco Board of Supervisors with Harvey Milk to her battle to protect transgender service members, Dianne Feinstein has been a champion for LGBTQ equality and social justice,” Equality California, the nation’s largest statewide gay civil rights organization, said in endorsing her final campaign in 2018. “Senator Feinstein stood with our community back when few others did.”<br></p> <br> <h3 style="text-align: left">An Early Adapter</h3> <p>Feinstein reached out to gay voters — and fought for them in office — decades before other straight politicians, in former President Barack Obama’s famous formulation, “evolved.”</p> <p>At considerable political peril.</p> <p>In 1969, when New York’s Stonewall Riots sparked the “gay liberation” movement, the Archbishop of San Francisco wielded great local influence, and establishment politicians followed the traditional values playbook of conservative Democratic Mayor Joseph L. Alioto.</p> <p>The same could be said for Alioto’s heavily Irish and Italian Catholic police force.<br></p> <br> <p>The city had had an active gay underground since the Gold Rush, but local cops and state Alcohol Control Board agents alike aggressively enforced archaic public morality statutes well into the ‘70s.</p> <p>“Police bore down heavily on gays who, afraid of bar raids, took to finding sex in public parks,” gay historian Randy Shilts wrote of the time in “The Mayor of Castro Street,” his biography of Harvey Milk, the legendary gay San Francisco politician.</p> <p>“By 1971, police were arresting an average of about 2,800 gay men a year on public sex charges,” Shilts reported. “The number of men harassed in the crackdown was many times this official arrest statistic, since it was common knowledge that a $30 payoff to the police usually let the transgressor escape with only a stern warning.</p> <p>“Many of the arrests were thrown out of court (amid evidence) about police tactics of entrapment,” Shilts added. “But sentences meted out for gay offenses were sometimes higher than those given out for rape, armed robbery and even manslaughter.”</p> <p>In this atmosphere, Feinstein publicly sided with gay people as early as the mid-1960s, when she defended the right of women prisoners and parolees to have lesbian relationships, as an appointed member of a state criminal justice board.</p> <p>In 1969, in her first run for office, Feinstein won a stunning upset, and publicly credited gay voters for her victory margin.</p> <p>Over the next decade, still a new member of the Board of Supervisors, she risked backlash by authoring the nation’s first local anti-gay discrimination ordinance, and by supporting a measure legalizing all private sex acts in California. She performed a civil union ceremony at her home for two lesbian friends — a kindness for which Republican foes attacked her for decades — while her closest gay ally, activist Jim Foster, addressed the 1972 Democratic National Convention, becoming the first gay person ever to speak at a major party presidential gathering. In 1978, she cast the determinative vote for Harvey Milk’s landmark gay rights law.</p> <p>Then, on the awful morning of Monday, Nov. 27, 1978, she hurried to reach his bullet-ridden body. The smell of gun powder was still in the air, moments after Dan White, their former Board of Supervisors colleague, shot and killed Milk, after gunning down Mayor George Moscone.</p> <p>In an instant, Feinstein became San Francisco’s mayor, in the grimmest way imaginable.</p> <p>Then in the wake of Milk’s assassination, she helped to restore calm and order to a shaken city and was a compassionate and soothing presence to its large gay population, as it suffered the violent loss of the most visible symbol of their emergence from the shadows.<br></p> <br> <h3 style="text-align: left">An Infuriating Ally</h3> <p>In a case study of the paradoxical dynamics of the independent, pragmatic and moderate-in-the-mainstream brand of politics Feinstein always embodied, however, she also episodically confounded, disappointed and angered gay leaders and voters.</p> <p>Although she was an early champion of gay rights, Feinstein also conducted a one-woman crusade against pornography and X-rated theatres, many of them serving gay men.</p> <p>In the early 1970s, she incensed gay businesses and First Amendment advocates, while alienating the liberated and liberal young men flocking to the city that would become Milk’s base, when she tried to ban pornographic material presenting “acts of masturbation, homosexuality, sexual intercourse or physical contact with a person’s clothed or unclothed genitals.”</p> <p>It was one reason Feinstein and Milk did not get along.</p> <p>He thought her an incorrigible prude, calling her “The Wicked Witch of the West” behind her back. Milk saw Jim Foster, Feinstein’s gay ally, as an enemy, his work-within-the-system partnerships with straight Democrats too timid for his in-your-face approach.</p> <p>She detested Milk’s grandstanding, performative style, seeing it as too indecorous and unsuited to proper political deliberations; once, at a hearing on Milk’s proposed ban on anti-gay housing discrimination, Feinstein protested that landlords would be forced to accept tenants who were into S&amp;M.</p> <p>Though they sniped at each other throughout their brief 10 months together in office, she provided crucial support for passing Milk’s landmark bill by one vote on the polarized board.<br></p> <br> <img src="https://static.politico.com/4b/d1/61c29bc94090a5ee0f526ed7234b/gettyimages-1447876511.jpg"> <br> <p>After Milk’s murder, friends disclosed that, eerily fearing assassination, he had recorded a tape naming three possible successors — and ruling out Jim Foster. Feinstein followed his wishes, appointing a left-wing activist named Harry Britt.</p> <p>As she prepared for a November 1979 election for her own, full term as mayor, however, Feinstein’s political relations with gay voters broke down.</p> <p>Amid a wave of national media attention, she angered LGBTQ people with an insensitive comment in a <i>Ladies Home Journal</i> interview: “The right of an individual to live as he or she chooses can become offensive,” she said. “The gay community is going to have to face this. It’s time for us to live here respecting each other’s lifestyles but that doesn’t mean imposing them on others.”</p> <p>In May that year, she stumbled in her first big crisis as mayor: Thousands of gay people and others rioted, after a conservative jury found Dan White guilty of two counts, not of murder, but voluntary manslaughter — the equivalent of vehicular homicide.</p> <p>Conservatives bashed Feinstein for being too lenient with protesters, while Britt led cries of outrage from the left, blaming her after cops invaded a gay bar at closing time during the “White Night Riot” and beat patrons and others milling on Castro Street, the heart of Milk’s district.</p> <p>Anger over the cops, her magazine quote and increasing reports of street attacks on the LGBTQ community cost her politically. She was forced into a runoff against her conservative archenemy on the Board of Supervisors, after a gay realtor named David Scott captured 10 percent of the November vote in his run as a protest candidate.</p> <p>It starkly demonstrated that gay people now held the balance of electoral power in San Francisco.</p> <p>In the runoff, Feinstein apologized for her magazine comments. “I don’t come to you as a perfect person that knows all of the answers and that doesn’t make mistakes,” she said at a crucial debate sponsored by a local gay Democratic club. “But I do come to you as someone who has got a heart and a concern and a very deep interest and desire to represent this community.” She won Scott’s endorsement — and a four-year term of her own.</p> <p>One more big political clash with the gay community remained.</p> <p>In 1982, the Board of Supervisors passed a measure authored by Britt authorizing city health and other benefits for “domestic partners” of unmarried public employees, which primarily affected gay people. Under heavy pressure to veto the bill from religious leaders, Feinstein agonized; finally, against the unanimous advice of City Hall counselors, she killed it.</p> <p>Once again, the Castro District bloomed with “Dump Dianne” posters. Worse, backlash to the veto fueled a once-lagging recall campaign; launched by a fringe group called the White Panthers that was mad about her push for gun control, the moribund effort suddenly qualified for the ballot.</p> <p>However, she quickly framed the recall as a referendum on the rogue White Panthers, winning big and ensuring her easy reelection a few months later.</p> <p>Feinstein would later express regret for the controversial veto, but many gay political organizations did not forget, and highlight it still in assessments of her record.</p> <p>Britt, who finished a close second in the 1987 special congressional election that sent Nancy Pelosi to Washington, later recalled meeting with Feinstein about the legislation.</p> <p>“She told me she was very sympathetic, but she didn’t want to blaze any trails,” Britt, told me several years before his death in 2020. “She said, ‘Harry, I understand it’s a personal thing but I’m mayor of all the people.’ It really was a morality thing with her.’”<br></p> <br> <h3 style="text-align: left">The Ultimate Concern</h3> <p>In the 1980s, passions on other issues faded when AIDS began to ravage the Castro District. And Feinstein’s leadership on the crisis remains her greatest legacy in the city of her birth.</p> <p>San Francisco’s first patient with Kaposi’s sarcoma, a rare disease then called “gay cancer,” and later linked to AIDS, was diagnosed at General Hospital on July 1, 1981. The city became the country’s early center of the HIV/AIDS epidemic and soon it affected 50 percent of more than 50,000 gay men then estimated living in the city, the nation’s highest per capita rate of AIDS.</p> <p>At the time, years before new drugs would change the prognosis, it was a near-universal death sentence. At the end of Feinstein’s mayoral tenure, the <i>Los Angeles Times</i> reported, “more San Franciscans (were) dead of AIDS than from all the wars in this century, combined and doubled.”</p> <p>However, in partnership with its world-class research hospitals, community organizations and the CDC, the city built a public and private network of AIDS-related services, hailed as “The San Francisco Model” of care, widely viewed as the best in the world.</p> <p>Three years before President Ronald Reagan uttered the word “AIDS,” Feinstein also organized the first national AIDS task force, through the U.S. Conference of Mayors.</p> <p>Characteristically, her management of a crisis with huge impact on the gay community was not controversy-free.</p> <p>In 1982-1983, backed by local government health authorities, Feinstein moved aggressively to close dozens of gay bathhouses, identified as sites enabling widespread spread of infection. Some gay organizations and business leaders fiercely objected, fearing a new era of repression, and viewing the bathhouses as effective places to distribute information and education about AIDS.</p> <p>Later, however, even some gay leaders who strongly and consistently opposed Feinstein during her decades in local politics, credited her on AIDS.</p> <p>“She was extraordinarily sensitive to the AIDS issue throughout the epidemic,” recalled Carole Migden, a close ally of Milk, who later served as a city supervisor and in the state legislature.</p> <p>“She does not understand what gay people are all about,” Migden added, “but she has understood the issues of disease and death. And all other issues pale in comparison to this.”</p> <p>Feinstein concluded her tenure as mayor in 1988, and in 1990, ran a strong but unsuccessful race for governor against then-U.S. Sen. Pete Wilson (a campaign in which his Republican campaign strategists leaned on reporters to write about the “lesbian wedding in her backyard” nearly 20 years before). Two years later, however, she trounced Gov. Wilson’s appointed successor to his old seat, beginning the 30-plus years in Washington that marked the second half of her historic career.</p> <p>Beyond better-known achievements in the Senate — forcing release of the CIA torture report, a 25-year effort to pass the California Desert Protection Act and a decade-long federal ban on assault weapons — she took, and maintained, a high-profile stance as one of the most visible supporters of gay-rights issues and causes in Congress.</p> <p>From early in her tenure, she advocated for the right of gay people to marry, helping to lead the fight against the Defense of Marriage Act, which prohibited the federal government from recognizing same-sex unions; in 1996, she was one of just 14 senators to vote against the bill, which Democratic President Bill Clinton signed into law. In 2008, she inveighed against California’s Proposition 8, which sought a state constitutional amendment to ban gay marriage, and she later led a congressional group in filing an amicus brief in the landmark <i>Obergefell v. Hodges</i> case before the U.S. Supreme Court, which ultimately legalized same-sex marriage nationwide.</p> <p>She took similar action on behalf of the civil rights of gay people on a host of other bitterly contested matters: opposing the “Don’t Ask, Don’t Tell” policy restricting gay people from serving openly in the military; supporting the Matthew Shepard Act to expand federal hate crime laws; seeking to prohibit discrimination against adoptive and foster parents because of sexual orientation; and expanding the government’s data collection parameters to include broader definitions of gender identity.</p> <p>In 2023, she assailed the Supreme Court for “enshrining discrimination against LGBTQ individuals” in <i>Creative LLC v. Elenis,</i> which ruled that a web designer who was unwilling to work for same-sex couples could ignore a Colorado state law outlawing such discrimination.</p> <p>“This decision,” she said, “will harm real people who again can be treated as second-class citizens.”<br></p> <br>]]>
+      </content:encoded>
+    </item>
+    <item>
+      <title>Feinstein's Demise is a Warning for Biden and Trump</title>
+      <link>https://www.politico.com/news/magazine/2023/09/29/dianne-feinstein-morality-politics-00119128</link>
+      <description>Why are we so surprised when elderly politicians kick the bucket?</description>
+      <guid>https://www.politico.com/news/magazine/2023/09/29/dianne-feinstein-morality-politics-00119128</guid>
+      <pubDate>Fri, 29 Sep 2023 12:13:02 EST</pubDate>
+      <dc:creator>Alexander Burns</dc:creator>
+      <dc:description>Alexander Burns is head of news at POLITICO. He has covered elections and political power across the U.S. for over a decade and co-wrote a best-selling book about Donald Trump and Joe Biden. His reported column Tomorrow explores the future of politics and policy debates that cross international borders.</dc:description>
+      <dc:contributor>Alexander Burns</dc:contributor>
+      <media:content type="application/octet-stream" url="https://static.politico.com/0b/11/caacf0d549cbb400cb05fe0ecde6/https-delivery-gettyimages.com/downloads/1253789863">
+        <media:credit scheme="urn:ebu">Drew Angerer/Getty Images</media:credit>
+        <media:title type="html">Sen. Dianne Feinstein’s death should be more than startling. It should be a warning to the people in both parties who believe they can bend their own mortality to an electoral calendar or a personal timeline for legacy-building.</media:title>
+        <media:thumbnail url="https://static.politico.com/0b/11/caacf0d549cbb400cb05fe0ecde6/https-delivery-gettyimages.com/downloads/1253789863"/>
+      </media:content>
+      <maz:template>magazine</maz:template>
+      <maz:modified>1696018554472</maz:modified>
+      <content:encoded>
+        <![CDATA[<img src="https://static.politico.com/0b/11/caacf0d549cbb400cb05fe0ecde6/https-delivery-gettyimages.com/downloads/1253789863"> <br> <p>There is a phenomenon in politics whereby if someone is old and infirm but remains alive for a while in a diminished state, they can almost persuade people that they are immune to death.</p> <p>So it was with John McCain, who died at 81 from a vicious brain cancer that left no hope of recovery, but whose actual death still sent a deep shudder through the political world. So, too, was it with Ruth Bader Ginsburg, whose death at 87 after multiple battles with cancer shattered her admirers and pitched the Supreme Court rightward.</p> <p>And so it was this week with Dianne Feinstein, the 90-year-old California senator who suffered from shingles, injuries from a tumble at home and apparent memory loss, but whose death still managed to startle much of Washington. There is nothing truly surprising about life coming to an end for someone in her frail condition, except maybe that it did not happen sooner.</p> <p>Feinstein’s death should be more than startling. It should be a warning to the people in both parties who believe they can bend their own mortality to an electoral calendar or a personal timeline for legacy-building.<br></p> <br><iframe style="max-width: 100%" width="1280" height="720" src="https://players.brightcove.net/1155968404/r1WF6V0Pl_default/index.html?videoId=6338082367112" frameborder="0"></iframe> <br> <p>This delusion has never been more common or more potentially disruptive in the United States than it is today.</p> <p>With the great probability that Joe Biden and Donald Trump will be nominated for president next year, it is not a leap to say that it is likelier now than at any other point in recent memory that the next American president will expire before his term does.</p> <p>Biden’s age is a constant topic of conversation, but it is typically addressed in terms of electoral implications: Are voters really prepared to accept a president who would be 86 upon leaving office? Embedded in the question is a daring presumption about Biden’s lifespan.<br></p> <br> <p>The same could be said of Trump, the 77-year-old former president whose personal health is largely a question mark, and of Senate Minority Leader Mitch McConnell, the 81-year-old Republican who suffered a fall earlier this year and has frozen up twice on camera since July. McConnell has declined to answer detailed questions about his condition, explaining away his obvious struggles as a function of lightheadedness.</p> <p>All these men seem to resent being reminded of their own mortality. The White House staff responds with snark and brittleness to coverage of the president’s age. McConnell is not an expressive man, but his irritation at being questioned about his health is readily apparent.</p> <p>Trump has blustered his way through the age issue so far, but he has never given an honest accounting of his physical state. His struggle with a dire coronavirus infection at the end of the 2020 campaign — and his attempt to obscure the gravity of that illness — should be a cautionary tale for anyone who believes they can make a confident assessment of his physical robustness.</p> <p>These are not cheap-shot political jibes. American politics is littered with examples of death intruding abruptly on our political leadership, changing the course of history in the process. Presidential assassinations to be sure, but also plane crashes and car wrecks and illnesses and other shootings.</p> <p>Feinstein’s life was a prime example of this: She became mayor of San Francisco not by the ballot but by the bullet, after the murder of George Moscone in 1978. There is a painful irony now that someone else will ascend to high office not by choice of California voters but because Feinstein, too, has left a sudden vacancy for someone to fill.<br></p> <br><iframe style="max-width: 100%" width="1280" height="720" src="https://players.brightcove.net/1155968404/r1WF6V0Pl_default/index.html?videoId=6338086535112" frameborder="0"></iframe> <br> <p>Electoral politics is a contingent business and mortality is the ultimate contingency. The only mystery is how few senior statesmen and stateswomen seem to grasp this.</p> <p>One person who must understand it is Biden, whose long life has been convulsed over and over by searing tragedy. If anyone in American politics knows that death keeps its own calendar, it is him. The president cannot be oblivious to the actuarial risks involved in seeking a second term — risks to himself, his party and the country.</p> <p>But this is also part of why so many politicians cling to their positions well past the point that it is medically advisable. If leaving office means accepting the inevitability of death, then you can start to see the appeal of running again. And again. And again.<br></p> <br>]]>
+      </content:encoded>
+    </item>
+    <item>
+      <title>Why is New Jersey So Corrupt? A Corruption Researcher Offers Some Answers</title>
+      <link>https://www.politico.com/news/magazine/2023/09/28/new-jersey-political-corruption-00118484</link>
+      <description>An expert explains how Sen. Bob Menendez fits into a long tradition for his state.</description>
+      <guid>https://www.politico.com/news/magazine/2023/09/28/new-jersey-political-corruption-00118484</guid>
+      <pubDate>Thu, 28 Sep 2023 04:00:00 EST</pubDate>
+      <dc:creator>Ian Ward</dc:creator>
+      <dc:description>Ian Ward is a reporter at POLITICO.</dc:description>
+      <dc:contributor>Ian Ward</dc:contributor>
+      <media:content type="application/octet-stream" url="https://static.politico.com/ae/59/bccde3c543289862bf793ce2844a/https-delivery-gettyimages.com/downloads/1704448161">
+        <media:credit scheme="urn:ebu">Spencer Platt/Getty Images</media:credit>
+        <media:title type="html">Sen. Bob Menendez (D-N.J.) and his wife, Nadine Menendez (behind) depart a Manhattan court after they were arraigned on federal bribery charges on Sept. 27, 2023 in New York City.</media:title>
+        <media:thumbnail url="https://static.politico.com/ae/59/bccde3c543289862bf793ce2844a/https-delivery-gettyimages.com/downloads/1704448161"/>
+      </media:content>
+      <maz:template>magazine</maz:template>
+      <maz:modified>1695916153245</maz:modified>
+      <content:encoded>
+        <![CDATA[<img src="https://static.politico.com/ae/59/bccde3c543289862bf793ce2844a/https-delivery-gettyimages.com/downloads/1704448161"> <br> <p>The dramatic indictment of Sen. Bob Menendez on federal indictment charges raised a slew of questions about the New Jersey senator’s political future in Washington, as <a href="https://www.politico.com/news/2023/09/25/defiant-menendez-doubles-down-against-resignation-calls-00117955" target="_blank" link-data="{&quot;linkText&quot;:&quot;calls for Menendez’s resignation&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.politico.com/news/2023/09/25/defiant-menendez-doubles-down-against-resignation-calls-00117955&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a860003&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a860004&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">calls for Menendez’s resignation</a> proliferate among his Democratic colleagues in the Senate.</p> <p>But for New Jersey, the indictment raised a different question: Why can’t the Garden State shake its reputation as one of the corruption capitals of the U.S.?</p> <p>Of course, that reputation is partly the product of Hollywood hype, with films like <i>On the Waterfront </i>and TV shows like <i>The Sopranos</i> depicting the state as a hotbed of political duplicity and deceit. And the state’s cause isn’t helped by the fact that the latest corruption scandal <a href="https://www.washingtonpost.com/archive/politics/1980/03/02/new-jersey-trying-to-overcome-a-history-of-corruption/8e1a6b72-c4af-444d-b7bc-6518f162457e/" target="_blank" link-data="{&quot;cms.site.owner&quot;:{&quot;_ref&quot;:&quot;0000014b-3270-d4f3-a3cb-f3ffa8610000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff4161000e&quot;},&quot;cms.content.publishDate&quot;:1695849783917,&quot;cms.content.publishUser&quot;:{&quot;_ref&quot;:&quot;00000189-31d8-d8b7-a9bb-f7ff620d0000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;cms.content.updateDate&quot;:1695849783917,&quot;cms.content.updateUser&quot;:{&quot;_ref&quot;:&quot;00000189-31d8-d8b7-a9bb-f7ff620d0000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;originalTemplate&quot;:false,&quot;link&quot;:{&quot;originalTemplate&quot;:false,&quot;attributes&quot;:[],&quot;target&quot;:&quot;NEW&quot;,&quot;url&quot;:&quot;https://www.washingtonpost.com/archive/politics/1980/03/02/new-jersey-trying-to-overcome-a-history-of-corruption/8e1a6b72-c4af-444d-b7bc-6518f162457e/&quot;,&quot;_id&quot;:&quot;0000018a-d886-de9d-afbf-dbde0dc30001&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;linkText&quot;:&quot;garners splashy headlines&quot;,&quot;_id&quot;:&quot;0000018a-d886-de9d-afbf-dbde0dc30000&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">garners splashy headlines</a> in <a href="https://www.nytimes.com/1991/12/11/nyregion/atlantic-city-s-ex-mayor-pleads-guilty-to-a-campaign-violation.html" target="_blank" link-data="{&quot;cms.site.owner&quot;:{&quot;_ref&quot;:&quot;0000014b-3270-d4f3-a3cb-f3ffa8610000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff4161000e&quot;},&quot;cms.content.publishDate&quot;:1695849807681,&quot;cms.content.publishUser&quot;:{&quot;_ref&quot;:&quot;00000189-31d8-d8b7-a9bb-f7ff620d0000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;cms.content.updateDate&quot;:1695849807681,&quot;cms.content.updateUser&quot;:{&quot;_ref&quot;:&quot;00000189-31d8-d8b7-a9bb-f7ff620d0000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;originalTemplate&quot;:false,&quot;link&quot;:{&quot;originalTemplate&quot;:false,&quot;attributes&quot;:[],&quot;target&quot;:&quot;NEW&quot;,&quot;url&quot;:&quot;https://www.nytimes.com/1991/12/11/nyregion/atlantic-city-s-ex-mayor-pleads-guilty-to-a-campaign-violation.html&quot;,&quot;_id&quot;:&quot;0000018a-d886-de9d-afbf-dbde76a70001&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;linkText&quot;:&quot;major media outlets&quot;,&quot;_id&quot;:&quot;0000018a-d886-de9d-afbf-dbde76a70000&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">major media outlets</a> at least <a href="https://www.nytimes.com/2009/07/27/nyregion/27jersey.html" target="_blank" link-data="{&quot;cms.site.owner&quot;:{&quot;_ref&quot;:&quot;0000014b-3270-d4f3-a3cb-f3ffa8610000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff4161000e&quot;},&quot;cms.content.publishDate&quot;:1695849824810,&quot;cms.content.publishUser&quot;:{&quot;_ref&quot;:&quot;00000189-31d8-d8b7-a9bb-f7ff620d0000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;cms.content.updateDate&quot;:1695849824810,&quot;cms.content.updateUser&quot;:{&quot;_ref&quot;:&quot;00000189-31d8-d8b7-a9bb-f7ff620d0000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;originalTemplate&quot;:false,&quot;link&quot;:{&quot;originalTemplate&quot;:false,&quot;attributes&quot;:[],&quot;target&quot;:&quot;NEW&quot;,&quot;url&quot;:&quot;https://www.nytimes.com/2009/07/27/nyregion/27jersey.html&quot;,&quot;_id&quot;:&quot;0000018a-d886-dd68-a3cf-dbd6b71a0001&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;linkText&quot;:&quot;once every decade&quot;,&quot;_id&quot;:&quot;0000018a-d886-dd68-a3cf-dbd6b71a0000&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">once every decade</a>. But according to <a href="https://cas.illinoisstate.edu/faculty_staff/profile.php?ulid=odincer" target="_blank" link-data="{&quot;linkText&quot;:&quot;Oguzhan Dincer&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://cas.illinoisstate.edu/faculty_staff/profile.php?ulid=odincer&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a870001&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a870002&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">Oguzhan Dincer</a>, an economist at Illinois State University and the director of the university’s Institute for Corruption Studies, New Jersey’s reputation is also grounded in hard data.</p> <p>“If you look at states like New Jersey or Illinois or Alabama, you see that their levels of corruption are very high in comparison to other states,” said Dincer, who has written extensively about the causes and consequences of political corruption in the U.S. “There’s this sticky nature of corruption in those states.”</p> <p>But the data, in turn, raises another pressing question: Why do states like New Jersey and Illinois become breeding grounds for corruption, while other states manage to maintain a cleaner style of politics? The answer, said Dincer, likely lies in a confluence of factors ranging from demographics to culture to rates of voter participation. But regardless of the root cause, it’s not easy for a state with a lengthy history of political malfeasance to clean up its act.</p> <p>“It’s a long-term process,” said Dincer. “Places don’t become corrupt overnight, but once they become corrupt, it is a lot more difficult to clean them up.”</p> <p><i>The following has been edited for clarity and concision.&nbsp;</i><br></p> <br> <img src="https://static.politico.com/a5/d5/662cae28465aafbcb2498790c40d/wardqa-portrait.jpg"> <br> <p><b>Ian Ward:</b> First off, what’s going on with New Jersey?</p> <p><b>Oguzhan Dincer: </b>Well, we have data from the Justice Department from 1976 to the present showing the number of convictions related to corruption. The Justice Department’s definition of corruption is very broad — for instance, if a public employee gets caught snorting cocaine, they also call it corruption — but it still gives us a pretty good picture. They look at the number of convictions, divided by the population to normalize across the states, and you get a decent index to measure corruption in the U.S. And if you look at states like New Jersey or Illinois or Alabama, you see that their levels of corruption are very high in comparison to other states like Minnesota or Vermont. So there’s this sticky nature of corruption in those states.</p> <p><b>Ward:</b> How do you explain those differences? What about those states makes them especially prone to corruption?</p> <p><b>Dincer: </b>There are deep determinants and then there are proximate determinants. When it comes to deep determinants, there’s a political scientist named Daniel Elazar who <a href="https://books.google.com/books/about/American_Federalism.html?id=PpqGAAAAMAAJ" target="_blank" link-data="{&quot;cms.site.owner&quot;:{&quot;_ref&quot;:&quot;0000014b-3270-d4f3-a3cb-f3ffa8610000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff4161000e&quot;},&quot;cms.content.publishDate&quot;:1695850160357,&quot;cms.content.publishUser&quot;:{&quot;_ref&quot;:&quot;00000189-31d8-d8b7-a9bb-f7ff620d0000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;cms.content.updateDate&quot;:1695850160357,&quot;cms.content.updateUser&quot;:{&quot;_ref&quot;:&quot;00000189-31d8-d8b7-a9bb-f7ff620d0000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;originalTemplate&quot;:false,&quot;link&quot;:{&quot;originalTemplate&quot;:false,&quot;attributes&quot;:[],&quot;target&quot;:&quot;NEW&quot;,&quot;url&quot;:&quot;https://books.google.com/books/about/American_Federalism.html?id=PpqGAAAAMAAJ&quot;,&quot;_id&quot;:&quot;0000018a-d88b-de9d-afbf-dbdfd8bd0001&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;linkText&quot;:&quot;wrote a book&quot;,&quot;_id&quot;:&quot;0000018a-d88b-de9d-afbf-dbdfd8bd0000&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">wrote a book</a> in the 1960s that divided the U.S. into different political cultures based on who settled those states in the late 1800s and early 1900s. He created three categories — individualistic, moralistic and traditionalist political cultures — and he defined New Jersey as an individualistic culture. In individualistic political cultures, politics is basically business: People enter politics to advance their own interests. It’s a market arena. So in individualistic states, corruption to a certain degree is expected and accepted. Incidentally, Illinois, New Jersey and New York are all individualistic states, whereas a state like Minnesota is a moralistic state, meaning it has a political culture where people expect government to make the society better.</p> <p><b>Ward:</b> What are some of the some of the more proximate determinants?</p> <p><b>Dincer:</b> The most important one — and this one is related to these political cultures — is voter participation. People generally expect to get rid of corruption by policing only, but you can never get rid of corruption by policing only. Trying a corruption case is extremely difficult and extremely expensive. The easier way is actually to get them out of the office. But if you don't vote, how do you get them out of the office?</p> <p><b>Ward:</b> So the lower the levels of voter participation, the higher levels of corruption?</p> <p><b>Dincer:</b> Yes — when voter participation goes up, corruption goes down. If you look at the last gubernatorial race in New Jersey in 2021, voter participation was about 40 percent, and in the last midterm elections it wasn’t much better. When Rod Blagojevich ran for his second term in Illinois, everybody was complaining about how corrupt he was, and voter participation was only about 40 percent. When more than half of the people don't even bother voting, politicians know it, right? They think, “<i>Hey</i>, <i>I’m invincible.</i>”</p> <p><b>Ward:</b> Is there a connection between voter turnout and the political cultures that you mentioned?</p> <p><b>Dincer:</b> Yes — like I said, in moralistic cultures, people are more into the governing process. In individualistic cultures, people see politics as dirty, so they want to just stay away from it.</p> <p>There are two other proximate causes that are worth mentioning. One is the involvement of governments in the economy. When government involvement increased, opportunities for <a href="https://corporatefinanceinstitute.com/resources/economics/rent-seeking/" target="_blank" link-data="{&quot;linkText&quot;:&quot;rent seeking&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://corporatefinanceinstitute.com/resources/economics/rent-seeking/&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a870003&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a870004&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">rent seeking</a> increases — and New Jersey is one of the states where government is heavily involved in the economy. Don’t get me wrong: I’m not saying, “<i>Kill the government</i>.” There is a Nobel Prize-winning economist named Gary Becker, who said that if you want to kill corruption, kill government — but I don’t agree with him. You cannot kill the government, but you can at least manage it. Of course, when you say that, people immediately think of cutting spending on social programs or education, but education and social programs are not a big chunk of government spending. What counts is the infrastructure spending — building roads, building bridges, all those other big spending big items.</p> <p>The other proximate cause that people generally miss is ethnic or racial diversity and segregation. What we observe is that in segregated localities, there is ethnocentric behavior, and ethnocentric behavior leads to corruption. If you look at the two major cities in New Jersey — Newark and Jersey City — they’re two of the most highly segregated cities in the United States. When you have high levels of segregation like that, you don’t just have ethnocentric behavior — you also have one group dominating the others in political arena, so the others have no voice in the political process.</p> <p><b>Ward:</b> Looking at the historical data, are there states that have been able to overcome consistently high levels of corruption?</p> <p><b>Dincer:</b> No, not really — because corruption is sticky. You have to have a permanent effort to clean it up. When a politician promises, “I’m going to clean up the state” — he can’t, unless he stays in power for three terms. In your first, four-year term, you have no chance. It’s a long-term process. Places don’t become corrupt overnight, but once they become corrupt, it is a lot more difficult to clean them up.</p> <p><b>Ward: </b>Could a high-profile case like the Menendez indictment spur demands for reform?</p> <p><b>Dincer:</b> Generally, it helps in the short term, when people say, “<i>Oh, we don’t want a corrupt blah blah blah”</i> and then they forget about it. And one reason is this: In United States — unlike in places like Turkey or Nigeria — people don’t see that their daily lives are impacted by the corruption in their states. And when they don’t see it, they don’t make it a priority. In fact, though, it’s actually negatively affecting their lives indirectly. Economic growth is lower, poverty is higher — the impact of corruption is everywhere. It’s like dying from 40,000 paper cuts: It doesn’t hurt, it doesn’t hurt, it doesn’t hurt, but in the long term, it’s killing you.</p> <p><b>Ward: </b>What role do prosecutions like the one against Sen. Menendez play in tamping down on corruption?</p> <p><b>Dincer:</b> Like I said, convicting someone is extremely difficult. You can try with policing to deter people from becoming corrupt, but again, it’s difficult because it’s expensive. Local attorneys are not going to go after these corrupt guys, so who has the resources to do it? The federal government, the Justice Department’s Public Integrity Section, the state attorneys appointed by the federal government. But state attorneys are also politically ambitious people. One of the most famous state attorneys that we see today is Chris Christie — he was a state attorney, then he became the governor.</p> <p>And how do you become a governor? When you’re a state attorney, you increase your visibility by maximizing your convictions. But to do that, they go after the low hanging fruit, or they go after sensational cases — but you don’t fight corruption that way.</p> <p>The other thing that we observe is because state attorneys are federally appointed, they engage in partisan behavior. So if there is a Democrat in the White House, they go after the Republicans, and if there's a Republican in the White House, they go after the Democrats. It becomes politicized.</p> <p><b>Ward: </b>In Menendez’s case, though, it's a Democratic administration going after a Democratic senator.</p> <p><b>Dincer:</b> Well, if something is that obvious, that’s gonna happen. It’s not like they’re always going to stay quiet and try to try to bury things. Sometimes you just can’t help it.</p> <p><b>Ward: </b>Does the Menendez case fit into a standard pattern of corruption?</p> <p><b>Dincer: </b>Of course. Influence peddling is the most common form of corruption among politicians. To me, the Menendez case is not that interesting, because he’s in Washington, D.C. The reason that he actually got caught is because you guys in D.C. are watching him. Everybody’s watching him.<br></p> <br>]]>
+      </content:encoded>
+    </item>
+    <item>
+      <title>Why Nikki Haley’s Attacks Work Better Than Her Rivals’</title>
+      <link>https://www.politico.com/news/magazine/2023/09/28/gop-debate-opposition-research-00118680</link>
+      <description>I was an opposition researcher. Here's what her rivals should do if they want to start winning.</description>
+      <guid>https://www.politico.com/news/magazine/2023/09/28/gop-debate-opposition-research-00118680</guid>
+      <pubDate>Thu, 28 Sep 2023 04:00:00 EST</pubDate>
+      <dc:creator>Joseph Rodota</dc:creator>
+      <dc:description>&lt;i&gt;Joseph Rodota is the host of Oppo File, a podcast about the history and practice of opposition research. He is on X at @oppofile and @josephrodota.&lt;/i&gt;</dc:description>
+      <dc:contributor>Joseph Rodota</dc:contributor>
+      <media:content type="image/jpeg" url="https://static.politico.com/22/03/f88285a0446188973130e6d5fd83/20230927-gop-debate-philip-cheung-0020.jpg">
+        <media:credit scheme="urn:ebu">Philip Cheung for POLITICO</media:credit>
+        <media:title type="html">Wednesday night, only former South Carolina Gov. Nikki Haley (left) brought the oppo research receipts.</media:title>
+        <media:thumbnail url="https://static.politico.com/22/03/f88285a0446188973130e6d5fd83/20230927-gop-debate-philip-cheung-0020.jpg"/>
+      </media:content>
+      <maz:template>magazine</maz:template>
+      <maz:modified>1695910739261</maz:modified>
+      <content:encoded>
+        <![CDATA[<img src="https://static.politico.com/22/03/f88285a0446188973130e6d5fd83/20230927-gop-debate-philip-cheung-0020.jpg"> <br> <p>The candidates in the second GOP presidential debate served up plenty of one-liners, but with only a few exceptions, they mostly seemed to be dished out of the same buffet cooked up by media consultants and debate coaches. Sizzle but no steak.</p> <p>The attacks that landed with the most force had something in common: They were based on opposition research.</p> <p>Opposition researchers — “oppo” to political insiders — provide the kind of information that can make attacks stick to their targets. They pore through a rival candidate’s record and produce a list of perceived vulnerabilities and the facts to back them up. Oppo researchers ply their trade at every level of democracy, from the local school board to the White House. They are often bookish and introverted, but they are also competitive and relentless. An oppo researcher can’t sleep peacefully until she’s unearthed a damaging quote or “smoking gun” video that can give her candidate an edge.</p> <p>Wednesday night, only former South Carolina Gov. Nikki Haley brought the oppo research receipts.</p> <p>When Florida Gov. Ron DeSantis called for national energy independence, Haley raised his record of opposition to fracking and offshore oil development. When Sen. Tim Scott (R-S.C.) rolled out his federal budget platform, she pointed to his 12-year voting record in Washington.</p> <p>The attack clearly stung. In the closing minutes of the debate, Scott wanted revenge. He charged Haley with wasting tax dollars on new curtains in her United Nations office. Haley saw it coming. “Bring it, Tim,” she smiled and then delivered a counterpunch: The curtains were ordered under the Obama administration.<br></p> <br><iframe style="max-width: 100%" width="1280" height="720" src="https://players.brightcove.net/1155968404/r1WF6V0Pl_default/index.html?videoId=6337959382112" frameborder="0"></iframe> <br> <p>Scott did try to expose Vivek Ramaswamy as a hypocrite, bringing up his record of doing business in China as a pharmaceutical CEO. But Scott’s charge was awkward and hard to follow, and the exchange devolved into cross-talk, prompting DeSantis to suggest the topic wasn’t worth debating. (Haley disagreed, and in a post-debate interview with Fox host Sean Hannity she filled in some of Scott’s gaps, asserting that Ramswamy’s Chinese partners also did business with Hunter Biden.)</p> <p>Former Vice President Mike Pence half-heartedly challenged DeSantis’ fiscal conservatism, pointing out Florida’s budget has grown 30 percent. DeSantis didn’t bother responding.</p> <p>In the first GOP debate, the candidates didn’t leverage oppo at all, relying on one-liners instead. Former New Jersey Gov. Chris Christie dismissed Ramaswamy as “a guy who sounds like ChatGPT,” suggesting the glib businessman and author lacked originality and merely scraped and packaged his platform from the Internet. Christie’s zinger got a laugh, but it didn’t change the momentum of the debate. Ramaswamy simply absorbed the punch with a smile and moved on.</p> <p>Without the heft added by facts, without the nuggets an oppo research unit generates, any impacts from these kinds of attacks are usually short-lived.<br></p> <br><iframe style="max-width: 100%" width="1280" height="720" src="https://players.brightcove.net/1155968404/r1WF6V0Pl_default/index.html?videoId=6337960192112" frameborder="0"></iframe> <br> <p>For a stark contrast with the GOP oppo research deficit, look no further than the first Democratic presidential primary debate from the 2020 cycle. Then-Sen. Kamala Harris (D-Calif.) chided former Vice President Joe Biden for his vocal opposition to school busing in the 1970s and for waxing nostalgic about his ability at the time to work with some of the Senate’s most ardent segregationists. In the most memorable exchange of the evening — and perhaps of the entire primary debate season — Harris added: “There was a little girl in California who was a part of the second class to integrate her public schools and she was bused to school every day. And that little girl was me.”</p> <p>Biden was unprepared and clearly taken aback. His response was unfocused and ineffective. Harris got a bump in the polls and in online fundraising. She also got noticed by Biden’s aides, who prevailed upon the former vice president to select Harris as his running mate.</p> <p>There has been no similar moment in either of the first two GOP primary debates.</p> <p>One reason Republicans’ attacks on one another aren’t drawing blood is because they aren’t backed by verbatim quotes and clear, memorable illustrations — the bread and butter of oppo research. This may be in part because the candidates have turned responsibility for this work over to various SuperPACs. The justification seems to be that oppo research is a “back office” function best subsidized by SuperPACs with fewer fundraising constraints and bigger budgets. Leaders of Never Back Down, the SuperPAC supporting the candidacy of DeSantis, have been <a href="https://www.politico.com/news/2023/09/03/desantis-super-pac-ramaswamy-00113836" target="_blank" link-data="{&quot;linkText&quot;:&quot;quite public about carving out oppo research&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.politico.com/news/2023/09/03/desantis-super-pac-ramaswamy-00113836&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a8c0000&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a8c0001&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">quite public about carving out oppo research</a> as their territory.</p> <p>But shipping these jobs from a campaign to a SuperPAC comes with risk.<br></p> <br> <p>In my experience, an opposition research team works best when it is tightly integrated into campaign strategy. That’s because an oppo researcher needs to know where the campaign is headed next — which big speeches are on the calendar, when the next digital ad is going to drop. When I ran oppo research for major federal and state candidates, I was joined at the hip to the campaign’s advertising and earned media leadership. That gave me time to assign projects to researchers that might take days or weeks to complete, so the oppo was fully baked when needed.</p> <p>Moreover, when SuperPACs take over oppo, another problem arises: How to share their findings with the candidate campaign, without running afoul of federal campaign laws, which make coordination illegal? This has led to the practice of posting opposition research books in full on the Internet — the term of art is an “oppo dump” — so that it can be miraculously “discovered” by the campaign.</p> <p>In the days leading up to the first Republican primary debate, a political consulting firm working for the DeSantis-affiliated SuperPAC Never Back Down posted online its <a href="https://www.nytimes.com/2023/08/17/us/politics/vivek-ramaswamy-desantis-documents.html" target="_blank" link-data="{&quot;linkText&quot;:&quot;oppo research report on Ramaswamy&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.nytimes.com/2023/08/17/us/politics/vivek-ramaswamy-desantis-documents.html&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a8c0002&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a8c0003&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">oppo research report on Ramaswamy</a>. The report, according to some observers, included a “dog whistle” reference to Ramaswamy’s Hindu faith, and was quickly taken down. DeSantis had to distance himself from both the oppo research and the debate strategy memo that accompanied it.</p> <p>Besides the unnecessary distraction, this “oppo dump” gave Ramaswamy a roadmap to the barbs heading his way, allowing him time to prepare. Keeping oppo research in-house allows a campaign to benefit from the element of surprise.</p> <p>As the candidates decamp from the Reagan Library in Simi Valley and start preparing for their next debate in Miami on November 8, they would do well to remember the legendary Reagan speechwriter Kenneth Khachigian. His advice, preserved in the 40th president’s archives, became the oppo researcher’s mantra: “Campaigns are won in the library.”</p>]]>
+      </content:encoded>
+    </item>
+    <item>
+      <title>Opinion | Since When Is Populism the Enemy of Conservatism?</title>
+      <link>https://www.politico.com/news/magazine/2023/09/28/gop-populism-conservatism-lowry-00118568</link>
+      <description>On many specific issues, there’s overlap between the two supposedly irreconcilable sides of the Republican Party.</description>
+      <guid>https://www.politico.com/news/magazine/2023/09/28/gop-populism-conservatism-lowry-00118568</guid>
+      <pubDate>Thu, 28 Sep 2023 11:00:00 EST</pubDate>
+      <dc:creator>Rich Lowry</dc:creator>
+      <dc:description>&lt;i&gt;Rich Lowry is a contributing writer for &lt;/i&gt;POLITICO Magazine&lt;i&gt; and the editor-in-chief of the &lt;/i&gt;National Review&lt;i&gt;, a conservative news and opinion publication.&lt;/i&gt;</dc:description>
+      <dc:contributor>Rich Lowry</dc:contributor>
+      <media:content type="image/jpeg" url="https://static.politico.com/7d/45/5a0e05bf408a85ef02f0f7250d05/election-2024-republicans-iowa-64536.jpg">
+        <media:credit scheme="urn:ebu">Bryon Houlgrave/AP Photo</media:credit>
+        <media:title type="html">Mike Pence is right to warn against Donald Trump winning the Republican nomination.</media:title>
+        <media:thumbnail url="https://static.politico.com/7d/45/5a0e05bf408a85ef02f0f7250d05/election-2024-republicans-iowa-64536.jpg"/>
+      </media:content>
+      <maz:template>magazine</maz:template>
+      <maz:modified>1695923956968</maz:modified>
+      <content:encoded>
+        <![CDATA[<img src="https://static.politico.com/7d/45/5a0e05bf408a85ef02f0f7250d05/election-2024-republicans-iowa-64536.jpg"> <br> <p>Must the Republican Party be either conservative or populist with no in between? </p> <p>That was a core contention of former vice president Mike Pence’s speech on populism a couple of weeks ago, and former Sen. John Danforth (R-Mo.) says the same thing in <a href="https://www.wsj.com/articles/the-gop-cant-abide-populism-hawley-pence-republican-conservative-disney-cad705f2" target="_blank" link-data="{&quot;linkText&quot;:&quot;a new Wall Street Journal op-ed&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.wsj.com/articles/the-gop-cant-abide-populism-hawley-pence-republican-conservative-disney-cad705f2&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a8f0002&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a8f0003&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">a new Wall Street Journal op-ed</a>. </p> <p>“The future of this party,” Pence said in his speech, “belongs to one or the other, not both.” For his part, Danforth writes, “The traditionally conservative and Trumpian populist wings of the GOP have arrived at the same conclusion: They can no longer coexist in the same party.”</p> <p>I’m an enormous admirer of Pence, and no one can doubt the sincerity and honor of Danforth, but this is too simplistic and runs counter both to the history of conservatism and to its present. </p> <p>One problem with the all-or-nothing formulation is that, based on the current correlation of political forces, it would mean “nothing” for conservatives. Certainly, if this question is being litigated in the 2024 primary, the hope for conservatism — with Trump currently stomping the rest of the field — is not high. </p> <p>But it’s never been an all-or-nothing proposition before. Richard Nixon, Ronald Reagan and George W. Bush all had broad populist streaks. </p> <p>Consider Reagan, obviously a hero and exemplar for conservatives. In <a href="https://www.reaganfoundation.org/media/358057/reagan-cpac-speech.pdf" target="_blank" link-data="{&quot;linkText&quot;:&quot;a signature 1977 speech to CPAC&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.reaganfoundation.org/media/358057/reagan-cpac-speech.pdf&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a8f0004&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a8f0005&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">a signature 1977 speech to CPAC</a>, he pushed back against the idea that conservatives were “a small group of ideological purists trying to capture a majority.” No, they were “a majority trying to assert its rights against the tyranny of powerful academics, fashionable left-revolutionaries, some economic illiterates who happen to hold elective office and the social engineers who dominate the dialogue and set the format in political and social affairs.”<br></p> <br> <img src="https://static.politico.com/92/c6/23dccd3a4605b33aec16c062dbe7/election-2024-debate-reagan-39436.jpg"> <br> <p>He referred to a New Republican party that “will not be, and cannot, be one limited to the country club-big business image that, for reasons both fair and unfair, it is burdened with today. The New Republican Party I am speaking about is going to have room for the man and the woman in the factories, for the farmer, for the cop on the beat and the millions of Americans who may never have thought of joining our party before, but whose interests coincide with those represented by principled Republicanism. If we are to attract more working men and women of this country, we will do so not by simply ‘making room’ for them, but by making certain they have a say in what goes on in the party.”</p> <p>Reagan’s position on the Panama Canal — “We built it, we paid for it, it’s ours” — was meant to pull emotional strings. He criticized crime, welfare and affirmative action in sometimes harsh terms that shocked polite opinion. He identified with the rising social conservatives, who were, according to their elite critics, the great unwashed of American politics, the way Tea Party activists and Trump enthusiasts would be portrayed decades later. </p> <p>In his book, <i>The Right</i>, Matt Continetti notes that the supply-sider journalist Jude Wanniski predicted a Reagan landslide in 1980 “because he is a conservative populist where Goldwater was a conservative elitist.”</p> <p>Now, of course, Reagan had deep-seated views that ran counter to contemporary populism — he was a dyed-in-the-wool free marketer, who supported free trade and immigration and a vigorous, if prudent, American posture abroad. </p> <p>Needless to say, Trump is much more of a pure populist, but even he wasn’t all or nothing as president. He pursued and achieved a number of significant traditional conservative policy goals, whether tax cuts, deregulation, more exploitation of fossil fuels, destroying a terrorist enemy overseas, withdrawing from the Iran nuclear deal and appointing conservative justices, among others. </p> <p>On many specific issues, there’s overlap between the two supposedly irreconcilable sides of the Republican Party. There are conservative and populist reasons to disdain and counter the elites who want to impose ESG on companies, who run our system of higher education, who seek to force a green-energy revolution and who were advocates for lockdowns and mandates during the pandemic. </p> <p>Everyone on the right is hostile to the permanent governing apparatus in Washington, D.C., whether they call it the bureaucracy, the administrative state or the deep state. And everyone distrusts the press whether they call it the mainstream media, the legacy media or the corporate media. Those terms can have different nuances of meaning, with the favored populist phrases — deep state and corporate media — having more edge and a greater flavor of anti-elitism. <br></p> <br> <img src="https://static.politico.com/2a/ef/6773450746639e8d4f1f3ce9abb2/congress-electoral-college-danforth-56444.jpg"> <br> <p>A basic issue in this discussion is how to define populism, which is a nebulous concept. Perhaps the most basic populist idea is that the people should be trusted more than the elites and are better than the elites — something most post-World War II conservatives, certainly those in elective politics, have believed, too. </p> <p>Populism is also simply a mode of politics in a democracy. Success usually requires identifying with the broad mass of the public and having an identity markedly distinct from the governing elite — for instance, both Reagan and George W. Bush were brush-clearing cowboys in their spare time.</p> <p>Danforth says populists stoke an “us v. them” division and contrasts them with Abraham Lincoln, who sought to preserve the Union. </p> <p>The weakness in this contrast is that Lincoln himself had populist appeal — that’s what the branding as a “rail-splitter” was about (in reality, the politically ambitious, upwardly mobile attorney had zero fondness for rail-splitting). And perhaps our most populist president, Andrew Jackson, was a confirmed Unionist. </p> <p>Also, the substantive content of populism changes over time. In Lincoln’s day, support for tariffs and industrial policy — key elements of Lincoln’s policy — constituted elitist economics. Now, of course, the opposite is true. </p> <p>There’s a genuine debate between conservatives and populists over trade, industrial policy, levels of federal spending and foreign affairs. These are consequential questions, but it’s easy to imagine shades-of-gray outcomes in all of these policy debates that fall within or close to the practical Republican consensus over the years. </p> <p>The deeper problem with populism is that its suspicion of elites can curdle into conspiracy theories. Its belief in the importance of the democratic will can express itself in an impatience with constitutional constraints. Its natural combativeness can lead to an effort to find, and create, enemies that knows no bounds.</p> <p>All of which brings us to Donald Trump. Danforth writes, “Populists have relentlessly undermined our Constitution. They have falsely asserted that elections are rigged, that President Biden is illegitimate, and that we should ignore our courts. They have opposed the peaceful transfer of power and encouraged a mob to attack the U.S. Capitol.” <br></p> <br> <img src="https://static.politico.com/bb/11/9f9d2d6649d18f675dbd573fca2b/election-2024-trump-56969.jpg"> <br> <p>But Ron DeSantis is a populist-inflected Republican who hasn’t, say, encouraged mobs to attack the Capitol. What Danforth is talking about here is the most fervent Trump supporters, which is why his qualifier elsewhere in the piece of “Trumpian populism” is important. </p> <p>It’s possible to favor greater regulation of freight rail — an early legislative priority of the populist Republican senator from Ohio, J.D. Vance — without buying into any of Trump’s lunatic rants on Truth Social.</p> <p>The crux of the matter is that if Donald Trump wins the Republican nomination, the GOP will have embraced or looked past his unworthy conduct and sentiments that in any other Republican Party would have been considered disqualifying. Mike Pence and John Danforth are right to warn against that and fight to keep it from happening. </p> <p>If Trump wins, his style of politics will be further vindicated in the GOP and lead to yet more imitators. Already, Vivek Ramaswamy has seemed to go out of his way to make people think he believes in conspiracy theories in order to gain street cred, and the performative outlandishness of Arizona’s Kari Lake has made her a political celebrity.</p> <p>The stakes are indeed large, even if this isn’t really a fight between conservatism and populism.</p>]]>
+      </content:encoded>
+    </item>
+    <item>
+      <title>Opinion | The Supreme Court Case That Could Disrupt Everything From Medicare to Financial Regulators</title>
+      <link>https://www.politico.com/news/magazine/2023/09/28/supreme-court-social-security-medicare-00118470</link>
+      <description>A lower court decision has called into question how government agencies are funded.</description>
+      <guid>https://www.politico.com/news/magazine/2023/09/28/supreme-court-social-security-medicare-00118470</guid>
+      <pubDate>Thu, 28 Sep 2023 04:00:00 EST</pubDate>
+      <dc:creator>Sheila Bair</dc:creator>
+      <dc:description>&lt;i&gt;Sheila Bair is the former chair of the FDIC, serving from 2006-2011.&lt;/i&gt;</dc:description>
+      <dc:contributor>Sheila Bair</dc:contributor>
+      <media:content type="image/jpeg" url="https://static.politico.com/08/62/e12ed3df4e3797628b0bcfce36ff/supreme-court-45751.jpg">
+        <media:credit scheme="urn:ebu">Francis Chung/POLITICO</media:credit>
+        <media:title type="html">The constitutionality of independent agency funding is at risk in a case pending before the Supreme Court.</media:title>
+        <media:thumbnail url="https://static.politico.com/08/62/e12ed3df4e3797628b0bcfce36ff/supreme-court-45751.jpg"/>
+      </media:content>
+      <maz:template>magazine</maz:template>
+      <maz:modified>1695915743753</maz:modified>
+      <content:encoded>
+        <![CDATA[<img src="https://static.politico.com/08/62/e12ed3df4e3797628b0bcfce36ff/supreme-court-45751.jpg"> <br> <p>A government shutdown like the one that might happen next week will interrupt many essential government functions. But it won’t cause a run on the banks or shake the financial system. It will not cause disruptions in the payment of Social Security or Medicare benefits.</p> <p>That’s because Congress has given scores of government agencies power to independently finance themselves, reasoning that their functions are too important to be left to the uncertainties of the annual appropriations process.</p> <p>But now, the constitutionality of independent agency funding is at risk in a case pending before the Supreme Court. The opinion could lead to a sea change in how essential government agencies function — and to potential chaos every time Congress engages in brinkmanship over funding.</p> <p>In the case, known as <a href="https://www.scotusblog.com/case-files/cases/consumer-financial-protection-bureau-v-community-financial-services-association-of-america-limited/" target="_blank" link-data="{&quot;linkText&quot;:&quot;<i>CFSA v. CFPB</i>&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.scotusblog.com/case-files/cases/consumer-financial-protection-bureau-v-community-financial-services-association-of-america-limited/&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a920000&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a920001&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}"><i>CFSA v. CFPB</i></a>, the Community Financial Services Association is seeking to block the enforcement of Consumer Financial Protection Bureau rules designed to protect consumers against abusive payday loans. The CFSA is arguing that Congress violated the Constitution’s appropriations clause when it granted the CFPB a portion of the Federal Reserve’s operating budget.</p> <p>The Fifth Circuit Court of Appeals found for the CFSA, using sweeping language suggesting that only moneys appropriated through the annual Congressional process are legal. The Supreme Court is set to hear oral arguments on Oct. 3.</p> <p>If the Court sides with the Fifth Circuit, the implications are vast.</p> <p>Essential government agencies and programs, including Social Security and Medicare, both of which are administered by independently funded bodies, would see their sources of independent funding vulnerable to challenge. The Federal Reserve, responsible for monetary policy and our payments system, would be particularly at risk, given that it runs on fees and profits from its market operations just like the CFPB. The budgets of the Office of the Comptroller of the Currency, responsible for regulating the nation’s largest banks, and the Federal Housing Finance Administration, responsible for overseeing housing finance, are also independent, coming from funds paid by the entities they regulate.</p> <p>Requiring these agencies to seek direct Congressional approval for money to function would be particularly dangerous in times of crisis.</p> <p>When I chaired the Federal Deposit Insurance Corporation during the financial crisis of 2008 and 2009, we had to ramp up our funding quickly to protect Main Street bank depositors. We were able to do so because Congress had long given the FDIC authority to set and fund its own budget through deposit insurance premiums paid by banks. Without that ability, people could have suffered delayed access to their insured deposit accounts as their failed banks shuttered until Congress saw fit to fund the agency.</p> <p>Independently funded agencies like the FDIC don’t have unfettered authority to spend wildly. Congress sets various limits and parameters, including for the CFPB. The agencies are subject to continuous oversight by their congressional authorizing committees. And Congress can, of course, at any time, change or limit their self-financing authority, as it sees fit.</p> <p>Congress chose to fund these agencies outside the normal appropriations process because this ensures they have a reliable, stable funding source no matter the vicissitudes of the legislature or powerful monied constituencies.</p> <p>Imagine the disfunction if the Fed’s budget could be held hostage to congressional dissatisfaction over interest rate policy, or if a member of Congress unhappy about a failed bank in his district could try to block the FDIC’s budget. Individual agency budgets could be put at risk by disgruntled politicians or lobbying interests.</p> <p>But even beyond the potential cascading effects of the decision on other agencies, the CFPB itself also needs reliable, stable funding.</p> <p>In the years leading up to the financial crisis, industry lobbying blocked state and federal legislative efforts to strengthen mortgage lending standards. Millions of mortgages were made to borrowers who had no hope of repaying them. Resulting defaults and foreclosures wreaked havoc on our economy.</p> <p>Congress created the CFPB in 2010 and insulated it from political and industry interference in carrying out its consumer protection mandate in order to stop the kind of reckless lending that led to the financial crisis. And it worked. Today, the CFPB is a big reason why there is very little distress in mortgage finance, even as other sectors of our financial system are under pressure.</p> <p>People of good will can differ on its funding structure. (I had strongly supported the CFPB but thought its funding should come from more traditional regulatory assessments.) But that’s a policy issue for Congress to decide, not the Supreme Court.</p> <p>The appropriations clause of the Constitution directs that no money be disbursed except by Act of Congress. It says nothing about the nature of those acts or annual appropriations. It says nothing about the duration of approved funding, except for the military where it prohibits appropriations longer than two years. It clearly vests with Congress authority over spending to support government functions. It allows the kind of protections that help Americans’ lives to continue to run smoothly, even when Congress isn’t.</p> <p>The Supreme Court should respect Congress’ decision about CFPB funding and do the conservative thing. Reverse the 5<sup>th</sup> Circuit and let Congress’ decision stand.<br></p> <br>]]>
+      </content:encoded>
+    </item>
+    <item>
+      <title>Opinion | Trump Wasn’t at the Debate — But His Outfit Was</title>
+      <link>https://www.politico.com/news/magazine/2023/09/27/gop-debate-style-fashion-menswear-00118645</link>
+      <description>Menswear guy has some tips for the Republican presidential hopefuls.</description>
+      <guid>https://www.politico.com/news/magazine/2023/09/27/gop-debate-style-fashion-menswear-00118645</guid>
+      <pubDate>Wed, 27 Sep 2023 21:59:05 EST</pubDate>
+      <dc:creator>Derek Guy</dc:creator>
+      <dc:description>Derek Guy is a menswear writer who has written for the &lt;i&gt;Washington Post&lt;/i&gt;, &lt;i&gt;Financial Times&lt;/i&gt; and &lt;i&gt;Esquire&lt;/i&gt;. He runs a men's style site called Die, Workwear!</dc:description>
+      <dc:contributor>Derek Guy</dc:contributor>
+      <media:content type="image/jpeg" url="https://static.politico.com/e0/ea/a47a35554813b76f96bcc6fd9e35/20230927-gop-debate-philip-cheung-0019.jpg">
+        <media:credit scheme="urn:ebu">Philip Cheung for POLITICO</media:credit>
+        <media:title type="html">Menswear writer Derek Guy has some fashion advice for the presidential candidates on the GOP primary debate stage.</media:title>
+        <media:thumbnail url="https://static.politico.com/e0/ea/a47a35554813b76f96bcc6fd9e35/20230927-gop-debate-philip-cheung-0019.jpg"/>
+      </media:content>
+      <maz:template>magazine</maz:template>
+      <maz:modified>1695910979046</maz:modified>
+      <content:encoded>
+        <![CDATA[<img src="https://static.politico.com/e0/ea/a47a35554813b76f96bcc6fd9e35/20230927-gop-debate-philip-cheung-0019.jpg"> <br> <p>There were precisely zero Donald Trumps on the GOP debate stage at the Ronald Reagan Presidential Library and Museum in Simi Valley, California tonight, but if you squinted, there appeared to be four of him. With the exception of former New Jersey Governor Chris Christie and South Carolina Sen. Tim Scott, all the men donned the former president’s uniform of a navy worsted suit, a white spread-collar shirt and the signature, power-red tie. </p> <p>It was a not-so-subtle indication of just how Trumpified the GOP has become. (Sure, many Republicans wear red ties, but the variety has really taken a nosedive since the rise of MAGA.) It was also a reminder that fashion can send powerful political messages.<b>&nbsp;</b></p> <p>Ever since the first televised presidential debate — when Richard Nixon’s mid-gray suit faded into the background of black-and-white TV screens, while John F. Kennedy’s dark worsted suit cut a winning silhouette — politicians have paid special attention to how their clothes make them look on-screen.</p> <p>But some haven’t paid quite as much attention as others. Here’s everything the candidates got right — and what they desperately need to improve — to pop on the debate stage like President Kennedy did:<b>&nbsp;</b></p> <h3 style="text-align: center">Ron DeSantis Dressed Better Than Ever</h3> <br> <img src="https://static.politico.com/19/2a/d106808e4c8a94253836c775573a/election-2024-debate-71801.jpg"> <br> <p>DeSantis looked better than usual on the debate stage. His suit was classically proportioned: The lapel ended about halfway between the collar and the shoulder joint, the tie echoed the width of the lapel, and the points of the shirt collar were long enough to neatly tuck underneath the jacket. The gorge, which is the tailoring term for the seam that connects the jacket’s collar to the lapel, was also positioned in such a way that the lapel’s notch sat roughly horizontally with the shirt collar. These proportions made for a classic look, and when historians look back on this debate, DeSantis’ outfit won’t look too out of touch. There is one way DeSantis could brush up his look: Because he has a somewhat stocky build, much of his tailoring would benefit from having a slightly lower buttoning point, which would lengthen the lapel line and give him a more elongated silhouette.</p> <h3 style="text-align: center">Vivek Ramaswamy Dressed Just Like DeSantis</h3> <br> <img src="https://static.politico.com/57/c3/b5c51af1481db8406d42070e22aa/election-2024-debate-58361.jpg"> <br> <p><br>At the first debate, Ramaswamy was plagued by a bad collar gap — the tailoring term for when the jacket’s collar floats away from the neck. In the second debate, he still could have tightened his collar a bit, but he looked better than some of the other male candidates fighting with floating jacket collars. Much like DeSantis, Ramaswamy’s suit featured good proportions: a lapel that ends about halfway from the collar to the shoulder, a tie that echoed the lapel width and a shirt with collar points long enough to neatly hide under the jacket’s lapels. In this way, the suit framed his face nicely. Unfortunately for Ramaswamy, DeSantis wore almost the exact same outfit, but better. He might have struck a better chord by going with a different tie and standing out as his own person.</p> <h3 style="text-align: center"></h3> <h3 style="text-align: center">Nikki Haley Looked Patriotic</h3> <br> <img src="https://static.politico.com/e9/ab/a0441a5145ada9bf65e8cbd20193/election-2024-debate-95280.jpg"> <br> <p>Although I’m a menswear writer, and not a womenswear expert, I’ll say that Haley’s presentation looked well tailored. During the first debate, she went with a sparkling white dress — famously the color of the women’s suffrage movement. In the second debate, she wore a deep red dress made from a satin-like fabric. Time will tell if she decides on blue for the third debate — a move that Hillary Clinton made during the 2016 debates, signaling her patriotism. You can see the hallmarks of good tailoring: Her clothes moved with her, not against her, unlike some of the male candidates tonight. The somewhat lustrous fabric gave her a stronger presence on stage. But one wonders if her outfit would have supported her more as a speaker, rather than taking attention away from her message, if it were made from something more matte.</p> <h3 style="text-align: center">Doug Burgum Nailed the Classic Silhouette</h3> <br> <img src="https://static.politico.com/29/87/5003875d47f895f4f4ac8676d4e1/election-2024-debate-13704.jpg"> <br> <p>Burgum’s outfit tonight was similar to Ramaswamy’s, which is to say that he nailed many of the proportions of a classic silhouette. Unfortunately, he suffered from a bad collar gap whenever he moved. The coat’s sleeves also looked poorly tailored, such that they rode up on his arms, revealing more shirt cuff than they should have. A small point that will perhaps go unnoticed by most viewers: While Ramaswamy wore a half-Windsor knot tonight, Burgum wore a four-in-hand. The fights between supporters of these two knots are almost as fierce as tonight’s primary debate.</p> <h3 style="text-align: center">Chris Christie’s Mauve Tie Refuted Trump</h3> <br> <img src="https://static.politico.com/8c/d8/ab82d90741c4ac4aa2b54b60950d/election-2024-debate-65216.jpg"> <br> <p>Once again, Christie was one of the few male candidates who didn’t look like a simulacrum of Trump. Tonight he wore a patterned mauve tie with a poplin button-down — a professional look with a hint of American conservatism that doesn’t try to follow in Trump’s footsteps. Like many of the other candidates, Christie’s suit suffered from a collar gap. A visit to a good custom tailor would have fixed this. There was also a glint of something in his jacket’s breast pocket — possibly eyewear — which was a tad distracting.</p> <h3 style="text-align: center">Mike Pence Was Drowning in His Jacket</h3> <br> <img src="https://static.politico.com/3d/21/547b38fb4f5e92ad418e06ab59e6/election-2024-debate-99597.jpg"> <br> <p>Pence is known for wearing a slightly extended shoulder, which, on some men, can lend a more flattering proportion. But in Pence’s case, it makes his jackets look too big on him (even his dress shirt collar tonight looked too large for his neck). Tonight, the slightly narrower lapel left a lot of open space between the end of the lapel and the shoulder joint, emphasizing the broadness of the chest. As a whole, his coat looked like it was swallowing him. His tailoring could be improved by wearing a slightly narrower shoulder and a more classically proportioned lapel. And while a few of the male candidates wore solid red ties — Trump’s signature move — it was particularly striking on Pence, who would seem to have more of an incentive than most to move out of the former president’s shadow.</p> <h3 style="text-align: center">Nice Tie, Tim Scott, But Fix Your Collar</h3> <br> <img src="https://static.politico.com/07/2a/b8fbe49c485b874213e55507d9d4/election-2024-debate-60816.jpg"> <br> <p>Most of the candidates wore dark-colored outfits fit for a conservative occasion. But this sort of ensemble leaves little room for expression. Scott successfully went for something bolder, choosing a striped tie that combined blue and red — much like Reagan’s tie in this <a href="https://www.whitehousehistory.org/photos/ronald-reagan" target="_blank" link-data="{&quot;linkText&quot;:&quot;1991 portrait by Everett Raymond Kinstler&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.whitehousehistory.org/photos/ronald-reagan&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a970000&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a970001&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">1991 portrait by Everett Raymond Kinstler</a>.</p> <p>However, Scott’s coat could have been improved. Whenever he moved one of his arms, the opposing lapel buckled away from the chest. A well-tailored jacket should have lapels that sit relatively flat on your body, even as you move. Scott’s shirt collar was also too small for this suit. These stingy collars come out of early 2000s menswear trends, when designers shrank the male silhouette: a short suit jacket, narrower shoulder and razor-thin lapel. It looked out of place on the debate stage.</p> <p>One thing’s for sure: On the stage at the Reagan Library, nobody could rival the Gipper on style.<br></p> <br><iframe style="max-width: 100%" width="1280" height="720" src="https://players.brightcove.net/1155968404/r1WF6V0Pl_default/index.html?videoId=6331580324112" frameborder="0"></iframe> <br>]]>
+      </content:encoded>
+    </item>
+    <item>
+      <title>Trump Wants to Freeze the Election at Halftime</title>
+      <link>https://www.politico.com/news/magazine/2023/09/27/trump-presidential-election-2023-00118204</link>
+      <description>He thinks he’s won already because the polls have him ahead. Let’s go ahead and play the rest of the game.</description>
+      <guid>https://www.politico.com/news/magazine/2023/09/27/trump-presidential-election-2023-00118204</guid>
+      <pubDate>Wed, 27 Sep 2023 04:00:00 EST</pubDate>
+      <dc:creator>Jack Shafer</dc:creator>
+      <dc:description>&lt;i&gt;Jack Shafer is &lt;/i&gt;&lt;span class="cms-magazineStyles-smallCaps"&gt;Politico&lt;/span&gt;&lt;i&gt;’s senior media writer. He has written commentary about the media industry and politics for decades and was previously a columnist for &lt;/i&gt;Reuters&lt;i&gt; and &lt;/i&gt;Slate&lt;i&gt;.&lt;/i&gt;</dc:description>
+      <dc:contributor>Jack Shafer</dc:contributor>
+      <media:content type="image/jpeg" url="https://static.politico.com/3c/01/18d384ba4f1185e9778744b8c0fb/election-2024-trump-10025.jpg">
+        <media:credit scheme="urn:ebu">Artie Walker Jr./AP Photo</media:credit>
+        <media:title type="html">Donald Trump sat out the first Republican debate in August because, he said, the public already knew him and what he stood for.</media:title>
+        <media:thumbnail url="https://static.politico.com/3c/01/18d384ba4f1185e9778744b8c0fb/election-2024-trump-10025.jpg"/>
+      </media:content>
+      <maz:template>magazine</maz:template>
+      <maz:modified>1695904762109</maz:modified>
+      <content:encoded>
+        <![CDATA[<img src="https://static.politico.com/3c/01/18d384ba4f1185e9778744b8c0fb/election-2024-trump-10025.jpg"> <br> <p>To accurately measure the metabolism of Donald Trump’s 2024 presidential campaign we must invoke the images and manners of the bestiary’s most indolent and sluggish creatures. The three-toed sloth, which favors slow motion. The echidna, which would lose a race against a continental plate. The nurse shark, which is so lazy it relies on ocean currents to aerate its gills. And then there is Australia’s pygmy blue-tongue lizard, which “hunts” by lounging by its burrow hole in hopes that an insect or spider will stride by.</p> <p>In recent weeks, Trump has come to resemble these kings of lethargy, slowing his campaign to the speed of the hour hand. As <a href="https://www.politico.com/news/2023/09/10/trump-campaign-out-of-public-view-00114873" target="_blank" link-data="{&quot;linkText&quot;:&quot;POLITICO’s Meridith McGraw recently reported&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.politico.com/news/2023/09/10/trump-campaign-out-of-public-view-00114873&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a9c0000&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a9c0001&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">POLITICO’s Meridith McGraw recently reported</a>, Trump has largely discarded the hard, steady work of campaigning against his Republican opponents on the stump and limited his appearance to “spot” events, TV interviews, or tele-rallies. Instead of fighting for votes, Trump people have worked the nomination process to make sure that rules that reward delegates tip his way. Where he can’t raise money, he tries to persuade potential donors not to give to his foes. On Monday, <a href="https://truthsocial.com/@realDonaldTrump/posts/111123848950685425" target="_blank" link-data="{&quot;linkText&quot;:&quot;he took to Truth Social&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://truthsocial.com/@realDonaldTrump/posts/111123848950685425&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a9c0002&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a9c0003&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">he took to Truth Social</a> to urge the Republican National Committee to stop spending time on the “meaningless” debates because he’s leading in the polls and to start suing Pennsylvania for switching to automatic voter registration.</p> <p>In short, he’s acting like he’s clinched both the nomination and the general election — about a year early.<br></p> <br><iframe style="max-width: 100%" width="1280" height="720" src="https://players.brightcove.net/1155968404/r1WF6V0Pl_default/index.html?videoId=6337954933112" frameborder="0"></iframe> <br> <p><a href="https://www.hollywoodreporter.com/news/politics-news/donald-trump-skip-republican-presidential-primary-debates-1235571001/" target="_blank" link-data="{&quot;linkText&quot;:&quot;Trump sat out the first Republican debate&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.hollywoodreporter.com/news/politics-news/donald-trump-skip-republican-presidential-primary-debates-1235571001/&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a9c0004&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a9c0005&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">Trump sat out the first Republican debate</a> in August because, he said, the public already knew him and what he stood for. “Why would I allow people at 1 or 2 percent and 0 percent to be hitting me with questions all night?” he said in a <a href="https://www.fox61.com/article/news/nation-world/trump-skipping-gop-primary-presidential-debates/507-23611f3f-6e5d-423a-927a-555fe3a80b95#:~:text=%E2%80%9CWhy%20would%20I%20allow%20people,the%20host%20of%20the%20Aug." target="_blank" link-data="{&quot;linkText&quot;:&quot;Fox News interview in June&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.fox61.com/article/news/nation-world/trump-skipping-gop-primary-presidential-debates/507-23611f3f-6e5d-423a-927a-555fe3a80b95#:~:text=%E2%80%9CWhy%20would%20I%20allow%20people,the%20host%20of%20the%20Aug.&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a9c0006&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a9c0007&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">Fox News interview in June</a>. Now, he’s also <a href="https://www.cbsnews.com/news/trump-skipping-second-gop-debate-detroit/" target="_blank" link-data="{&quot;linkText&quot;:&quot;skipping the second GOP debate&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.cbsnews.com/news/trump-skipping-second-gop-debate-detroit/&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a9c0008&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a9c0009&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">skipping the second GOP debate</a> in favor of giving a competing speech in Detroit amid the UAW strike as if he’s already the nominee. This is like a manager trying to get the umps to call a ball game in his favor in the fourth inning just because his team is leading 5-0 and, on top of that, saying his lead makes him deserving of the World Series trophy, too. It’s a minor reprise of Trump’s behavior on election night 2020 when he declared himself the winner before all the votes had been counted or any of the networks had projected a winner. <a href="https://www.cnn.com/2022/06/16/politics/fact-check-trump-officials-testimony-debunking-election-lies/index.html" target="_blank" link-data="{&quot;linkText&quot;:&quot;“Our election was over at 10 o’clock in the evening,” he said&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.cnn.com/2022/06/16/politics/fact-check-trump-officials-testimony-debunking-election-lies/index.html&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a9c000a&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a9c000b&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">“Our election was over at 10 o’clock in the evening,” he said</a>. Only a child would assume he’s won because he’s leading at halftime. Only a fraud would insist, as Trump did, that the election was rigged once the call went against him.<br></p> <br> <p>Ensconced in campaign slacker mode, Trump would like to pretend that nothing of substance will change over the next 14 months, so he should get his second term now. It doesn’t take a zoologist to appreciate that the world doesn’t stop when a bear hibernates. Trump might want to pretend the rest of the campaign is a meaningless charade, but a lot of history is about to go down between today and November 2024. At the latest count, <a href="https://www.nytimes.com/article/trump-investigations-civil-criminal.html" target="_blank" link-data="{&quot;linkText&quot;:&quot;Trump has been indicted&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.nytimes.com/article/trump-investigations-civil-criminal.html&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a9d0000&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a9d0001&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">Trump has been indicted</a> in three states and the District of Columbia for everything from <a href="https://www.npr.org/2023/08/01/1191493880/trump-january-6-charges-indictment-counts#:~:text=Donate-,Trump%20Jan.,to%20obstruct%20an%20official%20proceeding." target="_blank" link-data="{&quot;linkText&quot;:&quot;conspiracy to defraud the United States&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.npr.org/2023/08/01/1191493880/trump-january-6-charges-indictment-counts#:~:text=Donate-,Trump%20Jan.,to%20obstruct%20an%20official%20proceeding.&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a9d0002&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a9d0003&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">conspiracy to defraud the United States</a> to withholding classified documents and more. A New York judge just <a href="https://www.nytimes.com/2023/09/26/nyregion/trump-james-fraud-trial.html" target="_blank" link-data="{&quot;cms.site.owner&quot;:{&quot;_ref&quot;:&quot;0000014b-3270-d4f3-a3cb-f3ffa8610000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff4161000e&quot;},&quot;cms.content.publishDate&quot;:1695780816079,&quot;cms.content.publishUser&quot;:{&quot;_ref&quot;:&quot;0000014f-1284-d5f6-a96f-dac4dbef0000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;cms.content.updateDate&quot;:1695780816079,&quot;cms.content.updateUser&quot;:{&quot;_ref&quot;:&quot;0000014f-1284-d5f6-a96f-dac4dbef0000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;originalTemplate&quot;:false,&quot;link&quot;:{&quot;originalTemplate&quot;:false,&quot;attributes&quot;:[],&quot;target&quot;:&quot;NEW&quot;,&quot;url&quot;:&quot;https://www.nytimes.com/2023/09/26/nyregion/trump-james-fraud-trial.html&quot;,&quot;_id&quot;:&quot;0000018a-d469-d2cf-a3af-ffff5c400001&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;linkText&quot;:&quot;ruled that he committed fraud&quot;,&quot;_id&quot;:&quot;0000018a-d469-d2cf-a3af-ffff5c400000&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">ruled that he committed fraud</a> and has relieved him of control of some of his properties in the state. As <a href="https://www.washingtonpost.com/politics/2023/08/28/why-trumps-trial-dates-make-his-2024-campaign-more-difficult/" target="_blank" link-data="{&quot;linkText&quot;:&quot;Amber Phillips of the <i>Washington Post</i>&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.washingtonpost.com/politics/2023/08/28/why-trumps-trial-dates-make-his-2024-campaign-more-difficult/&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a9d0004&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a9d0005&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">Amber Phillips of the <i>Washington Post</i></a> noted last month, Trump will be in court with two trials during much of March, the precise time a candidate would want to be campaigning in nearly 30 states and territories scheduled to hold primaries that month. His <a href="https://www.cbsnews.com/news/trump-trial-dates-republican-presidential-primary-calendar/" target="_blank" link-data="{&quot;linkText&quot;:&quot;legal dance card&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.cbsnews.com/news/trump-trial-dates-republican-presidential-primary-calendar/&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a9d0006&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a9d0007&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">legal dance card</a> for 2024 is so loaded that if court dates earned frequent flyer miles, Trump could take a round trip to the moon with his family and still have enough points to visit Hawaii three or four times. There will be motions, new evidence and maybe even some verdicts — maybe even more legal cases — any of which might derail his “inevitable” victory express.</p> <p>Give Trump credit for attempting to cryogenically freeze the field until his opponents (and the voters) have slipped into a state of metabolic torpor. But the true blame resides in the sleepy pack taking him on, who, with the exception of Chris Christie, have mostly chosen to snuggle in his den than rouse him with challenging rhetoric. Most of the candidates — from Ron DeSantis to Mike Pence to Vivek Ramaswamy and even, to a degree, Nikki Haley — are running on modified Trumpian platforms that make it easy for him not to respond. Most of these candidates seem to really be running for Mr. Congeniality, not president, by politely conceding the contest to Trump without even trying.<br></p> <br><iframe style="max-width: 100%" width="1280" height="720" src="https://players.brightcove.net/1155968404/r1WF6V0Pl_default/index.html?videoId=6337962787112" frameborder="0"></iframe> <br> <p>Lethargy can be a successful survival strategy in the animal kingdom or on the campaign trail. (It worked for Biden last time, after all.) But it’s not surefire. Harpy eagles and jaguars hunt sloths. Hammerheads dine on nurse sharks. Snakes prey on pygmy blue-tongue lizards. Trump may be leading the Republican polls by a large margin now, but treating the campaign like a cakewalk risks tempting the fickle election fates. No animal hibernates for 14 months. So you can bet that Trump’s opponents — and the voters — will wake up at some point to discover this race isn’t over yet.</p> <p>******</p> <p><i>The echidna’s spines make it a low-profit piece of prey. Maybe Trump should grow some? Send animal facts to </i><a href="mailto:shafer.politico@gmail.com" target="_blank" link-data="{&quot;linkText&quot;:&quot;<i>shafer.politico@gmail.com</i>&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;mailto:shafer.politico@gmail.com&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a9d0008&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14a9d0009&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}"><i>shafer.politico@gmail.com</i></a><i>. No new email alert subscriptions are being honored at this time. </i><a href="https://twitter.com/jackshafer" target="_blank" link-data="{&quot;cms.site.owner&quot;:{&quot;_ref&quot;:&quot;0000014b-3270-d4f3-a3cb-f3ffa8610000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff4161000e&quot;},&quot;cms.content.publishDate&quot;:1695754443633,&quot;cms.content.publishUser&quot;:{&quot;_ref&quot;:&quot;00000180-f766-d6b4-a7e5-f7ee71fe0000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;cms.content.updateDate&quot;:1695754443633,&quot;cms.content.updateUser&quot;:{&quot;_ref&quot;:&quot;00000180-f766-d6b4-a7e5-f7ee71fe0000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;originalTemplate&quot;:false,&quot;link&quot;:{&quot;originalTemplate&quot;:false,&quot;attributes&quot;:[],&quot;target&quot;:&quot;NEW&quot;,&quot;url&quot;:&quot;https://twitter.com/jackshafer&quot;,&quot;_id&quot;:&quot;0000018a-d2d7-de9d-afbf-dbdf56850001&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;linkText&quot;:&quot;<i>X is still the place</i>&quot;,&quot;_id&quot;:&quot;0000018a-d2d7-de9d-afbf-dbdf56850000&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}"><i>X is still the place</i></a><i> where I hang out, but </i><a href="https://bsky.app/profile/jackshafer.bsky.social" target="_blank" link-data="{&quot;cms.site.owner&quot;:{&quot;_ref&quot;:&quot;0000014b-3270-d4f3-a3cb-f3ffa8610000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff4161000e&quot;},&quot;cms.content.publishDate&quot;:1695754466211,&quot;cms.content.publishUser&quot;:{&quot;_ref&quot;:&quot;00000180-f766-d6b4-a7e5-f7ee71fe0000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;cms.content.updateDate&quot;:1695754466211,&quot;cms.content.updateUser&quot;:{&quot;_ref&quot;:&quot;00000180-f766-d6b4-a7e5-f7ee71fe0000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;originalTemplate&quot;:false,&quot;link&quot;:{&quot;originalTemplate&quot;:false,&quot;attributes&quot;:[],&quot;target&quot;:&quot;NEW&quot;,&quot;url&quot;:&quot;https://bsky.app/profile/jackshafer.bsky.social&quot;,&quot;_id&quot;:&quot;0000018a-d2d7-dd68-a3cf-dbd7a9fc0001&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;linkText&quot;:&quot;<i>Bluesky is starting</i>&quot;,&quot;_id&quot;:&quot;0000018a-d2d7-dd68-a3cf-dbd7a9fc0000&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}"><i>Bluesky is starting</i></a><i> to appeal to me. My RSS feed was eaten by a harpy eagle.&nbsp;</i></p>]]>
+      </content:encoded>
+    </item>
+    <item>
+      <title>The Swift and Stunning Downfall of New Jersey Teflon Don</title>
+      <link>https://www.politico.com/news/magazine/2023/09/27/bob-menendez-new-jersey-pope-00118241</link>
+      <description>Menendez thought he was untouchable. Until he wasn’t.</description>
+      <guid>https://www.politico.com/news/magazine/2023/09/27/bob-menendez-new-jersey-pope-00118241</guid>
+      <pubDate>Wed, 27 Sep 2023 04:00:00 EST</pubDate>
+      <dc:creator>Dustin Racioppi</dc:creator>
+      <dc:description>Dustin Racioppi is the New Jersey editor for POLITICO.</dc:description>
+      <dc:contributor>Dustin Racioppi</dc:contributor>
+      <media:content type="application/octet-stream" url="https://static.politico.com/a5/f7/ddebc1ff4ff9ba59b4fc5b967a9b/https-delivery-gettyimages.com/downloads/1483377164">
+        <media:credit scheme="urn:ebu">Chip Somodevilla/Getty Images</media:credit>
+        <media:title type="html">The killer instinct that made Bob Menendez one of the most powerful and enduring politicians in a notoriously cutthroat state has never been far from the surface.</media:title>
+        <media:thumbnail url="https://static.politico.com/a5/f7/ddebc1ff4ff9ba59b4fc5b967a9b/https-delivery-gettyimages.com/downloads/1483377164"/>
+      </media:content>
+      <maz:template>magazine</maz:template>
+      <maz:modified>1695827418140</maz:modified>
+      <content:encoded>
+        <![CDATA[<img src="https://static.politico.com/a5/f7/ddebc1ff4ff9ba59b4fc5b967a9b/https-delivery-gettyimages.com/downloads/1483377164"> <br> <p>Micah Rasmussen knows what it’s like to be on the wrong side of Bob Menendez. Back in 2003 as press secretary for Democratic Gov. Jim McGreevey, he pushed back against Menendez’s favored candidate for the state Supreme Court, fellow Cuban Zulima Farber. Menendez, then a U.S. representative, deridingly called the governor’s office <a href="http://www.jerseycityonline.com/politics/hcdo_with_mcgreevey.htm" target="_blank" link-data="{&quot;linkText&quot;:&quot;“amateur hour”&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;http://www.jerseycityonline.com/politics/hcdo_with_mcgreevey.htm&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14aa10002&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14aa10003&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">“amateur hour”</a> in the press because McGreevey did not put her on the bench, and he wanted to know why. So Rasmussen explained: Farber had a poor driving record that included unpaid parking tickets.</p> <p>Menendez was unsparing in his response.</p> <p>“He called for my resignation and he wanted me fired because I dared to fight back on behalf of my boss,” Rasmussen, now the director of the Rebovich Institute for New Jersey Politics at Rider University, said in an interview. “To me it indicates he can hit you but you’re not allowed to hit him.” </p> <p>Menendez seems to still believe he’s wrapped in Teflon, insisting in a press event Monday that he’s not resigning his Senate seat after being indicted for the second time on bribery charges. </p> <p>But his remarkable half-century run in politics looks all but finished after a young, straitlaced prosecutor matter-of-factly laid out the depth of his latest alleged corruption on Friday.</p> <p>The accusations were so egregious, and showed such a staggering pattern of venality, that loyal Democrats who lavished praise and donations on him for years, even as he faced previous corruption charges, had no choice but to jump ship. By 5 p.m. Friday, Gov. Phil Murphy called for Menendez’s immediate resignation, and many others followed. By Saturday morning, another fellow Democrat, Rep. <a href="https://directory.politicopro.com/member/25648" data-person-id="25648" link-data="{&quot;cms.site.owner&quot;:{&quot;_ref&quot;:&quot;0000014b-3270-d4f3-a3cb-f3ffa8610000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff4161000e&quot;},&quot;cms.content.publishDate&quot;:1695762768484,&quot;cms.content.publishUser&quot;:{&quot;_ref&quot;:&quot;00000182-cb51-d7cf-a983-cbd5b1dc0000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;cms.content.updateDate&quot;:1695762768484,&quot;cms.content.updateUser&quot;:{&quot;_ref&quot;:&quot;00000182-cb51-d7cf-a983-cbd5b1dc0000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;originalTemplate&quot;:false,&quot;member&quot;:&quot;{\&quot;identifier\&quot;:\&quot;25648\&quot;,\&quot;url\&quot;:\&quot;https://directory.politicopro.com/member/25648\&quot;,\&quot;preferredName\&quot;:\&quot;Rep. Andy Kim (D-NJ)\&quot;,\&quot;isCommittee\&quot;:false}&quot;,&quot;text&quot;:&quot;Andy Kim&quot;,&quot;url&quot;:&quot;https://directory.politicopro.com/member/25648&quot;,&quot;personId&quot;:&quot;25648&quot;,&quot;_id&quot;:&quot;0000018a-d356-dd68-a3cf-dbd64d280000&quot;,&quot;_type&quot;:&quot;353fe80b-e1b5-3663-85ca-add066ecafc0&quot;}">Andy Kim</a>, said he’s running for Menendez’s seat. </p> <p>It marked a steep and swift fall — and one that Menendez still seems not to recognize. He unleashed a lengthy and defiant statement Friday suggesting he is a political target and that his ethnicity is a motivating factor. He did so again Monday in his native Union City, saying that “prosecutors get it wrong. Sadly, I know that.” <br></p> <br><iframe style="max-width: 100%" width="1280" height="720" src="https://players.brightcove.net/1155968404/r1WF6V0Pl_default/index.html?videoId=6337805961112" frameborder="0"></iframe> <br> <p>Menendez’s response offers a window on an operating style that made him an extraordinarily powerful politician, one with papal status back home in the Garden State: Walk with a chip on your shoulder, attack your opponents, never back down. He’s simply hard-wired differently. Most people who escaped prison through a hung jury might think twice before jaywalking. Menendez instead threatened his opponents right after the mistrial, won another term a year later and, several people who know him said after Friday’s indictment, seemed emboldened by it all. </p> <p>But there was one strikingly notable difference when he stood before dozens of reporters Monday insisting he’ll prove his innocence and remain in office. He didn’t have his friend and fellow senator Cory Booker there (and Booker would call for Menendez’s resignation Tuesday). He didn’t have Gov. Phil Murphy there. He didn’t have a single person of statewide influence at his side. All he had was a partial response to the indictment and the familiar offensive tactic that his opponents “see a political opportunity for themselves.”  </p> <p>“That worked for him as long as he got away with it, and he got away with it for a long time,” Rasmussen said. “Now all of a sudden that’s not working for him anymore, and that’s what happens to a bully.” <br></p> <br> <p><b>In Hudson County,</b> where Menendez grew up, politics is famously a blood sport ruled by bosses. Just east of Union City, in Weehawken, Aaron Burr fatally shot Alexander Hamilton in a duel. A few blocks south is where Jersey City Mayor Frank “I am the law” Hague infamously reigned for more than three decades. In Union City alone — 1.3 square miles of concrete and pavement in the shadow of Manhattan — two consecutive mayors were convicted of corruption and for many years it was a mob outpost. </p> <p>The son of Cuban immigrants raised in a tenement in the notoriously ethics-challenged county, Menendez made his name early as a young Union City school board member who turned on his mentor — the city’s mayor — and wore a bulletproof vest to court to testify against him. The vest was no dramatic flourish. Menendez had not only turned on former Union City Mayor William Musto, but essentially the city government and mob bosses, alleging public corruption (Musto was convicted of racketeering but won reelection a day <i>after </i>being sentenced to prison; his immediate successor, Robert Botti, was convicted and sentenced in a bid-rigging scheme.) </p> <p>"I didn't need anyone to tell me to protect myself," Menendez has <a href="https://www.nj.com/news/2017/11/bulletproof_bob_how_menendez_has_survived_years_of_corruption_allegations.html" target="_blank" link-data="{&quot;linkText&quot;:&quot;reportedly said&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.nj.com/news/2017/11/bulletproof_bob_how_menendez_has_survived_years_of_corruption_allegations.html&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14aa20000&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14aa20001&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">reportedly said</a>.</p> <p>Menendez may have feared for his life then, but it had only just begun politically.</p> <p>Menendez gained local clout as mayor and became a sort of folk hero at home once he moved on to the state Capitol in Trenton, where he was a representative, and then to Washington, D.C. For the last 17 years, he has served as an immensely powerful senator. He became known as an effective legislator who mastered constituent services. Even as the powerful chair of the Senate Foreign Relations Committee — where he dealt with dictators and globally consequential matters like Iranian nuclear deals — Menendez recognized the power of local retail politics. On just one day in August, for example, he held a press conference on funding for a new hospital program, held a round table with farmers and appeared with families of drug overdose victims to push legislation to crack down on fentanyl. </p> <p>“If you ever followed Bob Menendez in any of the parades … the guy is the pope,” said one Democratic official close to the meeting among Murphy and state leaders following the indictment. “People are coming up to him, taking pictures, hugging him. People just see him as what their children can become.” </p> <p>Sure, he’d gathered clouds of corruption the higher he rose, and even stood trial on charges of bribery in 2017. But that ended in a hung jury and Menendez pushed a Trumpian narrative that his political opponents were after him. Walking scot-free from a corruption trial on a technicality cost him exactly zero political capital. In fact, New Jersey’s Democratic machinery quickly rallied around him for a reelection bid he’d win a year later. As one North Jersey operative put it, Menendez’s continued involvement in Hudson County politics made him both a powerful senator and de facto county boss. </p> <p>“He was able to raise money, he had deep reach, he could back up threats that he made. So that obviously extended the length of his influence and power,” the operative said. </p> <p>And in perhaps the clearest example of his sustained influence after the trial, Menendez effectively installed his son, Rob Menendez, a lawyer with no political experience, in Congress with no opposition and the full backing of state party leaders.  </p> <p>The killer instinct that made Menendez one of the most powerful and enduring politicians in a notoriously cutthroat state has never been far from the surface. In what has become a famous example of Jersey’s vindictive brand of politics, Menendez stood outside the federal courthouse in Newark after his 2017 mistrial and <a href="https://www.politico.com/states/new-jersey/story/2017/11/16/menendez-settles-score-before-reelection-campiagn-116825" target="_blank" link-data="{&quot;linkText&quot;:&quot;issued a warning&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.politico.com/states/new-jersey/story/2017/11/16/menendez-settles-score-before-reelection-campiagn-116825&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14aa20002&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14aa20003&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">issued a warning</a> to his rivals. </p> <p>“To those who were digging my political grave so they could jump into my seat,” he said, “I know who you are and I won’t forget you.” </p> <p>Menendez won another six-year term in 2018. Prosecutors allege that year is exactly when he started trading on his influence. Between 2018 and 2022, he allegedly accepted hundreds of thousands of dollars’ worth of bribes — in gold, cash, a Mercedes-Benz and mortgage payments for his wife — from three New Jersey businesspeople. </p> <p>His “corrupt arrangement” included providing “sensitive, non-public U.S. government information to Egyptian officials,” secretly aiding the Egyptian government and helping one New Jersey company gain a monopoly on the export of certified halal meat to Egypt, which led to increased costs of meat suppliers and “was detrimental to U.S. interests,” federal authorities said. </p> <p>Simply being indicted a second time is, perhaps surprisingly, not the sole reason Menendez’s political career is now believed to be in its terminal stage. Timing is one element. Menendez was first indicted in 2015 and stood a two-month trial that ended in November 2017 — a year before his next election, giving him in effect a clean bill of political health on the trail. <br></p> <br><iframe style="max-width: 100%" width="1280" height="720" src="https://players.brightcove.net/1155968404/r1WF6V0Pl_default/index.html?videoId=6337806603112" frameborder="0"></iframe> <br> <p>This time he faces the prospect of waiting for trial as he seeks reelection in 2024, and the Democratic Party will hardly want to pour money and resources into what would otherwise be a safe seat in a presidential election year.  </p> <p>“All it would take is someone with half a profile and he’d lose,” the North Jersey operative said. “The reality is that he’s done as a United States senator.” </p> <p>Another reason for that is the case itself. Whereas prosecutors struggled in 2017 to cleanly connect dots between campaign finance donations, luxury trips and official favors for a friend, they have now unveiled a set of allegations that is instantly relatable to anyone who’s watched “The Sopranos.” </p> <p>“If you presented somebody with a movie script and said part of the story was we’d trade gold bars and cash and track it with DNA, and then we’re going to find the cash…you’d say we’ve got to edit that out of the script because it’s not believable,” said Jersey City Mayor Steven Fulop, who has a frosty relationship with Menendez and who is running for governor in 2025. “The only people that deal in gold bars are cartoon villains.” </p> <p>Former Democratic Sen. Bob Torricelli, who considered running for Menendez’s seat if he were convicted in 2017 — and who was likely one of the intended targets of Menendez’s courthouse threat — said the crimes Menendez is accused of committing may stand out well beyond New Jersey. He would know better than most: He ended his Senate reelection campaign in 2002 amid pressure for ethics violations. </p> <p>“There are always indiscretions in politics, as there are in any profession,” he said. “This is not only atypical of the United States Congress, it is unprecedented. It is unprecedented not only in this Congress, but in all Congresses that I’ve ever known and all that preceded us.”</p> <p>Barring another mistrial or some legal clearance of Menendez’s conduct, the fairytale of the American ideal he built his career on may only be a footnote to the darker story the world is about to watch unfold in a Manhattan courtroom. </p> <p>“It’s over. He’s not even in hospice,” a longtime Democratic operative who knows Menendez well said. “The priest is there. It’s just looking at the clock to get to last rites.”<br></p> <br>]]>
+      </content:encoded>
+    </item>
+    <item>
+      <title>History Offers Democrats a Way Out of the Menendez Problem</title>
+      <link>https://www.politico.com/news/magazine/2023/09/25/history-dept-bob-menendez-democrats-00117935</link>
+      <description>Oddly enough, it involves the very same seat the New Jersey senator refuses to resign.</description>
+      <guid>https://www.politico.com/news/magazine/2023/09/25/history-dept-bob-menendez-democrats-00117935</guid>
+      <pubDate>Mon, 25 Sep 2023 14:00:00 EST</pubDate>
+      <dc:creator>Joshua Zeitz</dc:creator>
+      <dc:description>&lt;i&gt;Joshua Zeitz, a&amp;nbsp;Politico Magazine&amp;nbsp;contributing writer, is the author of&amp;nbsp;&lt;/i&gt;&lt;a href="https://www.amazon.com/Lincolns-God-Transformed-President-Nation/dp/198488221X/?_encoding=UTF8&amp;amp;pd_rd_w=RsSsW&amp;amp;content-id=amzn1.sym.bc5f3394-3b4c-4031-8ac0-18107ac75816&amp;amp;pf_rd_p=bc5f3394-3b4c-4031-8ac0-18107ac75816&amp;amp;pf_rd_r=9KVQ6H4YGNEVM2QJC4XG&amp;amp;pd_rd_wg=T7POL&amp;amp;pd_rd_r=8f687f00-e7f7-4db9-ba04-df90b04dedb6&amp;amp;ref_=pd_gw_ci_mcx_mr_hp_atf_m"&gt;&lt;i&gt;Lincoln's God: How Faith Transformed a President and a Nation&lt;/i&gt;&lt;/a&gt;&lt;i&gt;&amp;nbsp;(May 2023). Follow him&amp;nbsp;&lt;/i&gt;&lt;a href="https://twitter.com/JoshuaMZeitz"&gt;&lt;i&gt;@joshuamzeitz&lt;/i&gt;&lt;/a&gt;&lt;i&gt;.&lt;/i&gt;</dc:description>
+      <dc:contributor>Joshua Zeitz</dc:contributor>
+      <media:content type="application/octet-stream" url="https://static.politico.com/04/a4/53bc72c7442fac82c9052156067f/https-delivery-gettyimages.com/downloads/1689510968">
+        <media:credit scheme="urn:ebu">Kena Betancur/AFP/Getty Images</media:credit>
+        <media:title type="html">Bob Menendez is a notorious political brawler who has survived scandal before. But his luck seems to have run out, with party leaders in New Jersey abandoning him in droves.</media:title>
+        <media:thumbnail url="https://static.politico.com/04/a4/53bc72c7442fac82c9052156067f/https-delivery-gettyimages.com/downloads/1689510968"/>
+      </media:content>
+      <maz:template>magazine</maz:template>
+      <maz:modified>1695678200097</maz:modified>
+      <content:encoded>
+        <![CDATA[<img src="https://static.politico.com/04/a4/53bc72c7442fac82c9052156067f/https-delivery-gettyimages.com/downloads/1689510968"> <br> <p>Senator <a href="https://directory.politicopro.com/member/51523" data-person-id="51523" link-data="{&quot;cms.site.owner&quot;:{&quot;_ref&quot;:&quot;0000014b-3270-d4f3-a3cb-f3ffa8610000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff4161000e&quot;},&quot;cms.content.publishDate&quot;:1695671000618,&quot;cms.content.publishUser&quot;:{&quot;_ref&quot;:&quot;00000180-f751-d6b4-a7e5-f7d9bbd30000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;cms.content.updateDate&quot;:1695671000618,&quot;cms.content.updateUser&quot;:{&quot;_ref&quot;:&quot;00000180-f751-d6b4-a7e5-f7d9bbd30000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;originalTemplate&quot;:false,&quot;member&quot;:&quot;{\&quot;identifier\&quot;:\&quot;51523\&quot;,\&quot;url\&quot;:\&quot;https://directory.politicopro.com/member/51523\&quot;,\&quot;preferredName\&quot;:\&quot;Sen. Bob Menendez (D-NJ)\&quot;,\&quot;isCommittee\&quot;:false}&quot;,&quot;text&quot;:&quot;Robert Menendez&quot;,&quot;url&quot;:&quot;https://directory.politicopro.com/member/51523&quot;,&quot;personId&quot;:&quot;51523&quot;,&quot;_id&quot;:&quot;0000018a-cdde-df44-abba-fdfe0f950000&quot;,&quot;_type&quot;:&quot;353fe80b-e1b5-3663-85ca-add066ecafc0&quot;}">Robert Menendez</a> had a bad week.</p> <p>A New Jersey Democrat currently serving his third full term in the Senate, Menendez was indicted last Thursday by federal prosecutors who laid out an <a href="https://www.politico.com/news/2023/09/22/authorities-to-charge-u-s-sen-bob-menendez-and-wife-today-00117590" target="_blank" link-data="{&quot;linkText&quot;:&quot;elaborate and damning case involving secret payments funneled through an American-based businessman&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.politico.com/news/2023/09/22/authorities-to-charge-u-s-sen-bob-menendez-and-wife-today-00117590&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14aa70000&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14aa70001&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">elaborate and damning case involving secret payments funneled through an American-based businessman</a>, all tracing back to favors the senator allegedly performed on behalf of the Egyptian government.</p> <p>Even for New Jersey, which a <a href="https://ethics.harvard.edu/blog/measuring-illegal-and-legal-corruption-american-states-some-results-safra" target="_blank" link-data="{&quot;linkText&quot;:&quot;2014 Harvard study&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://ethics.harvard.edu/blog/measuring-illegal-and-legal-corruption-american-states-some-results-safra&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14aa70002&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14aa70003&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">2014 Harvard study</a> named one of the two most politically corrupt states in the country, the details are eye-popping. Cash totaling almost half a million dollars stuffed into closets, drawers and clothes in Menendez’s home. Gold bars, the price of which the senator allegedly searched on the internet, totaling $100,000 in value. A Mercedes Benz.</p> <p>Menendez is a notorious political brawler who has survived scandal before — in 2017, a jury deadlocked on corruption charges that could have sent him to prison for years. But his luck seems to have run out, with party leaders in New Jersey abandoning him in droves — particularly the state’s all-powerful county chairs, who largely determine the outcome of primary elections — and national Democrats like Sen. <a href="https://directory.politicopro.com/member/317327" data-person-id="317327" link-data="{&quot;cms.site.owner&quot;:{&quot;_ref&quot;:&quot;0000014b-3270-d4f3-a3cb-f3ffa8610000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff4161000e&quot;},&quot;cms.content.publishDate&quot;:1695671011939,&quot;cms.content.publishUser&quot;:{&quot;_ref&quot;:&quot;00000180-f751-d6b4-a7e5-f7d9bbd30000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;cms.content.updateDate&quot;:1695671011939,&quot;cms.content.updateUser&quot;:{&quot;_ref&quot;:&quot;00000180-f751-d6b4-a7e5-f7d9bbd30000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;originalTemplate&quot;:false,&quot;member&quot;:&quot;{\&quot;identifier\&quot;:\&quot;317327\&quot;,\&quot;url\&quot;:\&quot;https://directory.politicopro.com/member/317327\&quot;,\&quot;preferredName\&quot;:\&quot;Sen. John Fetterman (D-PA)\&quot;,\&quot;isCommittee\&quot;:false}&quot;,&quot;text&quot;:&quot;John Fetterman&quot;,&quot;url&quot;:&quot;https://directory.politicopro.com/member/317327&quot;,&quot;personId&quot;:&quot;317327&quot;,&quot;_id&quot;:&quot;0000018a-cdde-df44-abba-fdfe3bc90000&quot;,&quot;_type&quot;:&quot;353fe80b-e1b5-3663-85ca-add066ecafc0&quot;}">John Fetterman</a> (Penn.) and Rep. <a href="https://directory.politicopro.com/member/304452" data-person-id="304452" link-data="{&quot;cms.site.owner&quot;:{&quot;_ref&quot;:&quot;0000014b-3270-d4f3-a3cb-f3ffa8610000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff4161000e&quot;},&quot;cms.content.publishDate&quot;:1695671023234,&quot;cms.content.publishUser&quot;:{&quot;_ref&quot;:&quot;00000180-f751-d6b4-a7e5-f7d9bbd30000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;cms.content.updateDate&quot;:1695671023234,&quot;cms.content.updateUser&quot;:{&quot;_ref&quot;:&quot;00000180-f751-d6b4-a7e5-f7d9bbd30000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;originalTemplate&quot;:false,&quot;member&quot;:&quot;{\&quot;identifier\&quot;:\&quot;304452\&quot;,\&quot;url\&quot;:\&quot;https://directory.politicopro.com/member/304452\&quot;,\&quot;preferredName\&quot;:\&quot;Rep. Alexandria Ocasio-Cortez (D-NY)\&quot;,\&quot;isCommittee\&quot;:false}&quot;,&quot;text&quot;:&quot;Alexandria Ocasio-Cortez&quot;,&quot;url&quot;:&quot;https://directory.politicopro.com/member/304452&quot;,&quot;personId&quot;:&quot;304452&quot;,&quot;_id&quot;:&quot;0000018a-cdde-df4e-abba-ddff69680000&quot;,&quot;_type&quot;:&quot;353fe80b-e1b5-3663-85ca-add066ecafc0&quot;}">Alexandria Ocasio-Cortez</a> (N.Y.) calling on him to resign.</p> <p>In short, Menendez is done. Regardless of his legal fortunes, he’s not going to be renominated next year. But what about the remainder of this term? If history is an indication, that is entirely up to his colleagues in the Senate.</p> <p>The Senate has not expelled a member of its body since 1862, during the Civil War. In modern times, only the <i>threat</i> of expulsion has compelled Senators to resign, rather than face the indignity of seeing their colleagues toss them out by vote. Several of those historical examples suggest that it’s possible for Senate Democrats to unhinge Menendez from his seat, but it won’t necessarily happen quickly.</p> <p>No example proves this point better than the case of Harrison “Pete” Williams, the disgraced New Jersey politician who was convicted of crimes related to the famous ABSCAM case. Ironically, Bob Menendez currently fills the same seat that Williams ultimately resigned.<br></p> <br><iframe style="max-width: 100%" width="1280" height="720" src="https://players.brightcove.net/1155968404/r1WF6V0Pl_default/index.html?videoId=6337645677112" frameborder="0"></iframe> <br> <br> <p><b>Between 1978 and 1980</b> the FBI conducted a sting operation in which agents posed as Arab businessmen and offered cash bribes to 31 elected officials. Ultimately, one senator and six House members took the bait. </p> <p>Williams, a four-term Senator and leading liberal in Congress, was the highest-ranking official to go down. In a <a href="https://www.nytimes.com/1981/05/02/nyregion/williams-is-guilty-on-all-nine-counts-in-abscam-inquiry.html" target="_blank" link-data="{&quot;linkText&quot;:&quot;bizarre and intricate scheme&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.nytimes.com/1981/05/02/nyregion/williams-is-guilty-on-all-nine-counts-in-abscam-inquiry.html&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14aa80000&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14aa80001&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">bizarre and intricate scheme</a>, he agreed to help an undercover FBI agent posing as an Arab sheik to resolve hurdles in his U.S. immigration process in return for the sheik and his friends making a $100 million cash infusion in a mining business in which Williams held a secret 18 percent stake. Williams and his associates would then sell their interest to a <i>second</i> group of (fake) businessmen at a $70 million profit.</p> <p>The parallels between the Williams and Menendez cases are striking. While Williams never had the opportunity to stash cash and gold in his home — after all, there was no deal to be had; it was a sting — both men were alleged to have funneled foreign payments through real companies (in the Menendez case, through a halal meat enterprise; in Williams’ case, a mining operation). Both men also allegedly turned their corruption into a family enterprise. Where Menendez’s wife has been indicted alongside her husband, FBI tapes showed that Williams boasted to undercover agents of an earlier scheme in which he pressured the state’s casino authorities to approve a deal that benefited a company that employed his wife in a low- or no-show job. </p> <p>ABSCAM was somewhat controversial. Lawyers for the defense argued it was a classic case of entrapment, and in the case of Williams, there was something to the argument. During an initial encounter with the undercover agents, Williams seemed to demur. It took several months to get him on board. But once on board, he exhibited little compunction about profiting from his office and boasted frequently to agents of his past criminality. </p> <p>When federal prosecutors indicted Williams in 1980, the Democratic-controlled Senate launched and then promptly suspended an official investigation, on the premise that such a parallel procedure would prejudice his criminal trial. But in May 1981, when a federal jury returned guilty verdicts on all counts, the Senate, now in Republican control, opened hearings. It took roughly three months for the Ethics Committee to vote unanimously for a resolution to expel Williams, and over the course of the year, Williams, who was appealing his conviction, tangled with his colleagues in federal court over their right to expel him and the proper scope of a full Senate trial. </p> <p>It didn’t help his case that he was unrepentant. To his dying day, Williams would claim he was convicted of a “dishonest crime,” meaning he was entrapped, because “somebody else creates the situation for which you are convicted.”</p> <p>When one of Williams’ defenders, Hawaii Sen. Daniel Inouye, recommended that the body censure, rather than expel their colleague, arguing that expulsion had traditionally been reserved for cases of treason and insurrection, his Democratic colleague, Thomas Eagleton of Missouri, answered in disgust: “If non-treasonous behavior be the sole benchmark of fitness to serve in this body, then one must ask how fit is this body in which we serve?” Eagleton emerged as one of Williams’ most vocal critics and argued that if the convicted politician wouldn’t do them the dignity of vacating his seat, “we should not perpetrate our own disgrace by asking him to stay.”</p> <p>Ultimately, Williams ran down the clock. Only when his appeals were rejected in late 1981 and <i>only</i> when it became clear that the Senate would expel him on a bipartisan basis, did he relent. In March 1982 — more than two years after his initial indictment — he resigned his seat.<br></p> <br><iframe style="max-width: 100%" width="1280" height="720" src="https://players.brightcove.net/1155968404/r1WF6V0Pl_default/index.html?videoId=6337633220112" frameborder="0"></iframe> <br> <br> <p><b>That’s not a story that</b> augurs well for a speedy outcome in the Menendez case. While good money suggests his Senate days are numbered, Menendez is likely to hold on for as long as possible, if for no other reason than to maintain negotiating leverage with prosecutors and to raise money for his defense. He will become an albatross around the necks of fellow New Jersey Democrats and House and Senate colleagues in tough races. His presence in the Senate makes it all the harder for Democrats to build a case against GOP corruption next year. </p> <p>More recent examples don’t suggest a different outcome. In November 1992, multiple women accused Sen. Bob Packwood (R-Ore.) of sexual misconduct. It took almost three years for a long ethics process to unwind — one that did little credit to Packwood or to the Senate. Facing the likelihood of expulsion, in October 1995, Packwood finally resigned. The same was true of Sen. John Ensign, a Nevada Republican who allegedly arranged illegal hush payments and a lobbying job for a woman with whom he had an extramarital affair. It took almost two years after the first revelations of misconduct before Ensign agreed to resign, and again, only because his colleagues seemed prepared to expel him.</p> <p>All of which means, it’s in the Senate Democrats’ hands. They can drag it out, or they can expedite expulsion proceedings and make it clear to Menendez that he can leave quietly out the back door, or they can toss him out the front in full light of day.</p> <p>Everyone deserves their moment in court, but there is a difference between legal and political proceedings. </p> <p>Bob Menendez deserves the opportunity to explain to his colleagues how, on a senator’s salary, he came to possess a Mercedes-Benz C-300 convertible (<a href="https://www.justice.gov/usao-sdny/pr/us-senator-robert-menendez-his-wife-and-three-new-jersey-businessmen-charged-bribery" target="_blank" link-data="{&quot;linkText&quot;:&quot;sticker price, $60,000&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.justice.gov/usao-sdny/pr/us-senator-robert-menendez-his-wife-and-three-new-jersey-businessmen-charged-bribery&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14aa80002&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14aa80003&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">sticker price, $60,000</a>) and $100,000 in gold bars, to say nothing of envelopes of cash bearing the fingerprints of his co-defendants. He should also have the opportunity to explain why he presumably never reported these assets or paid taxes on them. But the Senate doesn’t need to wait for his criminal trial to unfold before initiating its own investigation, and it shouldn’t take months for such a process to play out. There is evidence in abundance that allows for a speedy resolution of his ethics case and a vote on the Senate floor. </p> <p>The modern record suggests that embattled Senators will cling to their seats tenaciously, only until they know the die has been cast. <a href="https://directory.politicopro.com/member/51231" data-person-id="51231" link-data="{&quot;cms.site.owner&quot;:{&quot;_ref&quot;:&quot;0000014b-3270-d4f3-a3cb-f3ffa8610000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff4161000e&quot;},&quot;cms.content.publishDate&quot;:1695671044256,&quot;cms.content.publishUser&quot;:{&quot;_ref&quot;:&quot;00000180-f751-d6b4-a7e5-f7d9bbd30000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;cms.content.updateDate&quot;:1695671044256,&quot;cms.content.updateUser&quot;:{&quot;_ref&quot;:&quot;00000180-f751-d6b4-a7e5-f7d9bbd30000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;originalTemplate&quot;:false,&quot;member&quot;:&quot;{\&quot;identifier\&quot;:\&quot;51231\&quot;,\&quot;url\&quot;:\&quot;https://directory.politicopro.com/member/51231\&quot;,\&quot;preferredName\&quot;:\&quot;Sen. Chuck Schumer (D-NY)\&quot;,\&quot;isCommittee\&quot;:false}&quot;,&quot;text&quot;:&quot;Chuck Schumer&quot;,&quot;url&quot;:&quot;https://directory.politicopro.com/member/51231&quot;,&quot;personId&quot;:&quot;51231&quot;,&quot;_id&quot;:&quot;0000018a-cdde-df4e-abba-ddffbc290000&quot;,&quot;_type&quot;:&quot;353fe80b-e1b5-3663-85ca-add066ecafc0&quot;}">Chuck Schumer</a> and his caucus have a job to do. History shows them exactly how to get it done.<br></p> <br>]]>
+      </content:encoded>
+    </item>
+    <item>
+      <title>Who’s in for the next GOP debate — and who might be watching from home</title>
+      <link>https://www.politico.com/2024-election/presidential-debate-gop-candidates-schedule-moderators-polls-tracker/</link>
+      <description>Consider us your guide to the biggest event of the primary so far, with the power to make or break a GOP hopeful.</description>
+      <guid>https://www.politico.com/2024-election/presidential-debate-gop-candidates-schedule-moderators-polls-tracker/</guid>
+      <dc:creator>Steven Shepard and Zach Montellaro</dc:creator>
+      <dc:contributor>Steven Shepard and Zach Montellaro</dc:contributor>
+      <media:content type="image/png" url="https://static.politico.com/8a/41/24507fed45d796e29dd30030a6c2/hpart.png">
+        <media:title type="html">debate tracker</media:title>
+        <media:thumbnail url="https://static.politico.com/8a/41/24507fed45d796e29dd30030a6c2/hpart.png"/>
+      </media:content>
+      <maz:template>web</maz:template>
+      <maz:modified>1692986909230</maz:modified>
+    </item>
+    <item>
+      <title>'It is a surrender': Why McCarthy reversed with his survival uncertain</title>
+      <link>https://www.politico.com/news/2023/09/30/kevin-mccarthy-government-shutdown-deal-00119290</link>
+      <description>After Saturday's shocking vote, the speaker all but taunted his critics to come after his gavel if they wanted to.</description>
+      <guid>https://www.politico.com/news/2023/09/30/kevin-mccarthy-government-shutdown-deal-00119290</guid>
+      <pubDate>Sat, 30 Sep 2023 16:32:11 EST</pubDate>
+      <dc:creator>Sarah Ferris, Olivia Beavers and Jordain Carney</dc:creator>
+      <dc:contributor>Sarah Ferris, Olivia Beavers and Jordain Carney</dc:contributor>
+      <media:content type="image/jpeg" url="https://static.politico.com/e4/ef/7954796b4e8c9a4c12e35e55a2cc/kevin-mccarthy-94693.jpg">
+        <media:credit scheme="urn:ebu">Francis Chung/POLITICO</media:credit>
+        <media:title type="html">The bill was finished just before midnight on Friday. But House Speaker Kevin McCarthy didn’t unveil his plans to take up the bill until almost 11 hours later, after a choreographed parade of Republicans took the mic during a private 90-minute meeting to argue for exactly his proposal.</media:title>
+        <media:thumbnail url="https://static.politico.com/e4/ef/7954796b4e8c9a4c12e35e55a2cc/kevin-mccarthy-94693.jpg"/>
+      </media:content>
+      <maz:template>core</maz:template>
+      <maz:modified>1696165257689</maz:modified>
+      <content:encoded>
+        <![CDATA[<img src="https://static.politico.com/e4/ef/7954796b4e8c9a4c12e35e55a2cc/kevin-mccarthy-94693.jpg"> <br> <p>When he walked into the Capitol on Saturday, Speaker Kevin McCarthy knew exactly what he'd do to stave off a shutdown: Call up a bill that abandoned the border policy and spending cuts he’d preached for weeks.</p> <p>McCarthy's move marked an abrupt shift after spending most of the year trying to placate all corners of his party — including a dozen-plus hardliners who have made it next to impossible for him to maneuver anything onto the floor. After the vote, McCarthy all but taunted his critics to come after his gavel if they wanted to.</p> <p>And their first chance to do that will be Monday night. Multiple House conservatives confirmed in interviews they will begin seriously mulling whether they will try to seize McCarthy’s gavel in the coming days.</p> <p>“I think it is a surrender,” said Rep. <a href="https://directory.politicopro.com/member/195970" data-person-id="195970" link-data="{&quot;cms.site.owner&quot;:{&quot;_ref&quot;:&quot;0000014b-3270-d4f3-a3cb-f3ffa8610000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff4161000e&quot;},&quot;cms.content.publishDate&quot;:1696109600366,&quot;cms.content.publishUser&quot;:{&quot;_ref&quot;:&quot;00000186-6085-de35-afde-61e715bb0000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;cms.content.updateDate&quot;:1696109600366,&quot;cms.content.updateUser&quot;:{&quot;_ref&quot;:&quot;00000186-6085-de35-afde-61e715bb0000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;originalTemplate&quot;:false,&quot;member&quot;:&quot;{\&quot;identifier\&quot;:\&quot;195970\&quot;,\&quot;url\&quot;:\&quot;https://directory.politicopro.com/member/195970\&quot;,\&quot;preferredName\&quot;:\&quot;Rep. Ralph Norman (R-SC)\&quot;,\&quot;isCommittee\&quot;:false}&quot;,&quot;text&quot;:&quot;Ralph Norman&quot;,&quot;url&quot;:&quot;https://directory.politicopro.com/member/195970&quot;,&quot;personId&quot;:&quot;195970&quot;,&quot;_id&quot;:&quot;0000018a-e802-dd68-a3cf-fbd28f670000&quot;,&quot;_type&quot;:&quot;353fe80b-e1b5-3663-85ca-add066ecafc0&quot;}">Ralph Norman</a> (R-S.C.), one of multiple conservatives who warned McCarthy not to accept Democratic help to avoid a shutdown.<br></p> <br><iframe style="max-width: 100%" width="1280" height="720" src="https://players.brightcove.net/1155968404/r1WF6V0Pl_default/index.html?videoId=6338160145112" frameborder="0"></iframe> <br> <p>In the end, the 45-day funding patch that is on track to keep the government open passed with more Democratic than GOP votes, in a repeat of the spring debt vote that first inflamed McCarthy's opponents.</p> <p>The bill was finished just before midnight on Friday. But McCarthy didn’t unveil his plans to take up the bill until almost 11 hours later, after a choreographed parade of Republicans took the mic during a private 90-minute meeting to argue for exactly his proposal.</p> <p>Dozens of conservatives ended up voting against the bill, which gave in on their two biggest priorities — spending cuts beyond McCarthy's spring debt deal and hard-right border policies. Still, McCarthy wanted the groundswell of support for it to look like an organic move by his members, rather an order down from leadership.</p> <p>Mere hours later, a majority of House Republicans backed the type of shutdown-averting bill that the California Republican had repeatedly sworn was unacceptable. McCarthy's 180-degree turn could soon threaten his speakership, giving conservatives who have threatened to try to eject him plenty of fodder to make their move.</p> <p>“You can’t form a coalition of more Democrats than you have Republicans who you're supposed to be the leader of, and not think that there's going to be serious, serious fallout,” Rep. Matt Rosendale (R-Mont.) said. He confirmed that after Saturday's spending vote, they would start discussions about ousting the speaker.</p> <p>Freedom Caucus member <a href="https://directory.politicopro.com/member/260201" data-person-id="260201" link-data="{&quot;cms.site.owner&quot;:{&quot;_ref&quot;:&quot;0000014b-3270-d4f3-a3cb-f3ffa8610000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff4161000e&quot;},&quot;cms.content.publishDate&quot;:1696109612805,&quot;cms.content.publishUser&quot;:{&quot;_ref&quot;:&quot;00000186-6085-de35-afde-61e715bb0000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;cms.content.updateDate&quot;:1696109612805,&quot;cms.content.updateUser&quot;:{&quot;_ref&quot;:&quot;00000186-6085-de35-afde-61e715bb0000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;originalTemplate&quot;:false,&quot;member&quot;:&quot;{\&quot;identifier\&quot;:\&quot;260201\&quot;,\&quot;url\&quot;:\&quot;https://directory.politicopro.com/member/260201\&quot;,\&quot;preferredName\&quot;:\&quot;Rep. Byron Donalds (R-FL)\&quot;,\&quot;isCommittee\&quot;:false}&quot;,&quot;text&quot;:&quot;Rep. Byron Donalds&quot;,&quot;url&quot;:&quot;https://directory.politicopro.com/member/260201&quot;,&quot;personId&quot;:&quot;260201&quot;,&quot;_id&quot;:&quot;0000018a-e802-dd68-a3cf-fbd2b8c70000&quot;,&quot;_type&quot;:&quot;353fe80b-e1b5-3663-85ca-add066ecafc0&quot;}">Rep. Byron Donalds</a> (R-Fla.) acknowledged that McCarthy’s speakership is “probably” in danger, but added: “I’m not even getting into that right now. There are other members that have to decide if they want to bring that or not.”</p> <p>House Freedom Caucus Chair Rep. <a href="https://directory.politicopro.com/member/194221" data-person-id="194221" link-data="{&quot;cms.site.owner&quot;:{&quot;_ref&quot;:&quot;0000014b-3270-d4f3-a3cb-f3ffa8610000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff4161000e&quot;},&quot;cms.content.publishDate&quot;:1696109622403,&quot;cms.content.publishUser&quot;:{&quot;_ref&quot;:&quot;00000186-6085-de35-afde-61e715bb0000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;cms.content.updateDate&quot;:1696109622403,&quot;cms.content.updateUser&quot;:{&quot;_ref&quot;:&quot;00000186-6085-de35-afde-61e715bb0000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;originalTemplate&quot;:false,&quot;member&quot;:&quot;{\&quot;identifier\&quot;:\&quot;194221\&quot;,\&quot;url\&quot;:\&quot;https://directory.politicopro.com/member/194221\&quot;,\&quot;preferredName\&quot;:\&quot;Rep. Scott Perry (R-PA)\&quot;,\&quot;isCommittee\&quot;:false}&quot;,&quot;text&quot;:&quot;Scott Perry&quot;,&quot;url&quot;:&quot;https://directory.politicopro.com/member/194221&quot;,&quot;personId&quot;:&quot;194221&quot;,&quot;_id&quot;:&quot;0000018a-e802-d2cf-a3af-fb96e4490000&quot;,&quot;_type&quot;:&quot;353fe80b-e1b5-3663-85ca-add066ecafc0&quot;}">Scott Perry</a> (R–Pa.) said he did not expect an effort to oust McCarthy because Republicans didn't “have any other option" but to bring up a clean spending patch after GOP holdouts tanked their own party's plan.</p> <p>But Perry — who has himself lost sway with some more conservative members — didn’t commit to opposing a McCarthy ouster. He told POLITICO: “The case has to be made. So we’ll listen to the argument.”</p> <p>McCarthy’s biggest antagonist, Rep. <a href="https://directory.politicopro.com/member/189765" data-person-id="189765" link-data="{&quot;cms.site.owner&quot;:{&quot;_ref&quot;:&quot;0000014b-3270-d4f3-a3cb-f3ffa8610000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff4161000e&quot;},&quot;cms.content.publishDate&quot;:1696109633460,&quot;cms.content.publishUser&quot;:{&quot;_ref&quot;:&quot;00000186-6085-de35-afde-61e715bb0000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;cms.content.updateDate&quot;:1696109633460,&quot;cms.content.updateUser&quot;:{&quot;_ref&quot;:&quot;00000186-6085-de35-afde-61e715bb0000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;originalTemplate&quot;:false,&quot;member&quot;:&quot;{\&quot;identifier\&quot;:\&quot;189765\&quot;,\&quot;url\&quot;:\&quot;https://directory.politicopro.com/member/189765\&quot;,\&quot;preferredName\&quot;:\&quot;Rep. Matt Gaetz (R-FL)\&quot;,\&quot;isCommittee\&quot;:false}&quot;,&quot;text&quot;:&quot;Matt Gaetz&quot;,&quot;url&quot;:&quot;https://directory.politicopro.com/member/189765&quot;,&quot;personId&quot;:&quot;189765&quot;,&quot;_id&quot;:&quot;0000018a-e803-d2cf-a3af-fb970e190000&quot;,&quot;_type&quot;:&quot;353fe80b-e1b5-3663-85ca-add066ecafc0&quot;}">Matt Gaetz</a> (R-Fla.), has not yet declared that he intends to force a vote to boot the speaker over the Saturday vote.</p> <p>"That will be something I will chat with my colleagues about,” Gaetz said, just before the bill passed on the floor.<br></p> <br> <img src="https://static.politico.com/58/30/f6d8da2e4de8a48848cca89417df/house-of-representatives-62317.jpg"> <br> <p>Republicans are waiting and watching the Floridian: Many observed him on the floor attempting to speak at the podium minutes after McCarthy ally Rep. Stephanie Bice (R-Okla.) moved to adjourn the House after the bill passed. But before Gaetz could speak, as he held his hand up — Rep. <a href="https://directory.politicopro.com/member/151739" data-person-id="151739" link-data="{&quot;cms.site.owner&quot;:{&quot;_ref&quot;:&quot;0000014b-3270-d4f3-a3cb-f3ffa8610000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff4161000e&quot;},&quot;cms.content.publishDate&quot;:1696109697643,&quot;cms.content.publishUser&quot;:{&quot;_ref&quot;:&quot;00000186-6085-de35-afde-61e715bb0000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;cms.content.updateDate&quot;:1696109697643,&quot;cms.content.updateUser&quot;:{&quot;_ref&quot;:&quot;00000186-6085-de35-afde-61e715bb0000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;originalTemplate&quot;:false,&quot;member&quot;:&quot;{\&quot;identifier\&quot;:\&quot;151739\&quot;,\&quot;url\&quot;:\&quot;https://directory.politicopro.com/member/151739\&quot;,\&quot;preferredName\&quot;:\&quot;Rep. Steve Womack (R-AR)\&quot;,\&quot;isCommittee\&quot;:false}&quot;,&quot;text&quot;:&quot;Steve Womack&quot;,&quot;url&quot;:&quot;https://directory.politicopro.com/member/151739&quot;,&quot;personId&quot;:&quot;151739&quot;,&quot;_id&quot;:&quot;0000018a-e804-de9d-afbf-ebdc0b790000&quot;,&quot;_type&quot;:&quot;353fe80b-e1b5-3663-85ca-add066ecafc0&quot;}">Steve Womack</a> (R-Ark.), another McCarthy ally, who controlled the floor, swiftly banged the gavel down. </p> <p>Gaetz shortly thereafter told POLITICO that he would have requested a vote on a motion to adjourn, which could have kept the House in session through the weekend, rather than what many are waiting for him to attempt: a motion to eject McCarthy.</p> <p>There's no unanimity within the Freedom Caucus, with some trying to distance themselves from the gambit deployed lately by Gaetz, who is not a member of the group. One Republican in the bloc, who requested anonymity to speak candidly, estimated that there weren't “many members beyond Gaetz" talking about booting the speaker and predicted McCarthy ultimately came out of the spending fight strengthened — for now.<br></p> <br><iframe style="max-width: 100%" width="1280" height="720" src="https://players.brightcove.net/1155968404/r1WF6V0Pl_default/index.html?videoId=6338195522112" frameborder="0"></iframe> <br> <p>McCarthy, meanwhile, was defiant: “If someone wants to make a motion against me, bring it.”</p> <p>He's heard clear warnings from his right flank for weeks that if he relied on House Democrats to keep the government open, he would likely face a forced vote to take his gavel. Gaetz was polling Democrats this week on whether they would back him if he made a move against McCarthy — conversations <a href="https://www.politico.com/live-updates/2023/09/29/congress/gaetz-courts-dems-00119085" target="_blank" link-data="{&quot;linkText&quot;:&quot;<u>first reported</u>&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.politico.com/live-updates/2023/09/29/congress/gaetz-courts-dems-00119085&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14ab00000&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14ab00001&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}"><u>first reported</u></a> by POLITICO.</p> <p>On the other side of the conference, some of McCarthy’s centrist allies have started quiet talks with Democrats about how they could help save the speaker in what would be a historic ouster vote. (The move was last attempted in 1910 and has never succeeded.)</p> <p>“We’re just prepared for it. Take it head on, don’t run from it. We’ll work our best to defeat it. We’re not going to get pushed around by a handful of people,” said Rep. <a href="https://directory.politicopro.com/member/227109" data-person-id="227109" link-data="{&quot;cms.site.owner&quot;:{&quot;_ref&quot;:&quot;0000014b-3270-d4f3-a3cb-f3ffa8610000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff4161000e&quot;},&quot;cms.content.publishDate&quot;:1696109899844,&quot;cms.content.publishUser&quot;:{&quot;_ref&quot;:&quot;00000186-6085-de35-afde-61e715bb0000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;cms.content.updateDate&quot;:1696109899844,&quot;cms.content.updateUser&quot;:{&quot;_ref&quot;:&quot;00000186-6085-de35-afde-61e715bb0000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;originalTemplate&quot;:false,&quot;member&quot;:&quot;{\&quot;identifier\&quot;:\&quot;227109\&quot;,\&quot;url\&quot;:\&quot;https://directory.politicopro.com/member/227109\&quot;,\&quot;preferredName\&quot;:\&quot;Rep. Don Bacon (R-NE)\&quot;,\&quot;isCommittee\&quot;:false}&quot;,&quot;text&quot;:&quot;Don Bacon&quot;,&quot;url&quot;:&quot;https://directory.politicopro.com/member/227109&quot;,&quot;personId&quot;:&quot;227109&quot;,&quot;_id&quot;:&quot;0000018a-e807-de9d-afbf-ebdf1d910000&quot;,&quot;_type&quot;:&quot;353fe80b-e1b5-3663-85ca-add066ecafc0&quot;}">Don Bacon</a> (R-Neb.), a centrist McCarthy ally.</p> <p>House Minority Leader <a href="https://directory.politicopro.com/member/196306" data-person-id="196306" link-data="{&quot;cms.site.owner&quot;:{&quot;_ref&quot;:&quot;0000014b-3270-d4f3-a3cb-f3ffa8610000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff4161000e&quot;},&quot;cms.content.publishDate&quot;:1696109664407,&quot;cms.content.publishUser&quot;:{&quot;_ref&quot;:&quot;00000186-6085-de35-afde-61e715bb0000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;cms.content.updateDate&quot;:1696109664407,&quot;cms.content.updateUser&quot;:{&quot;_ref&quot;:&quot;00000186-6085-de35-afde-61e715bb0000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;originalTemplate&quot;:false,&quot;member&quot;:&quot;{\&quot;identifier\&quot;:\&quot;196306\&quot;,\&quot;url\&quot;:\&quot;https://directory.politicopro.com/member/196306\&quot;,\&quot;preferredName\&quot;:\&quot;Rep. Hakeem Jeffries (D-NY)\&quot;,\&quot;isCommittee\&quot;:false}&quot;,&quot;text&quot;:&quot;Hakeem Jeffries&quot;,&quot;url&quot;:&quot;https://directory.politicopro.com/member/196306&quot;,&quot;personId&quot;:&quot;196306&quot;,&quot;_id&quot;:&quot;0000018a-e803-d2cf-a3af-fb9788b70000&quot;,&quot;_type&quot;:&quot;353fe80b-e1b5-3663-85ca-add066ecafc0&quot;}">Hakeem Jeffries</a>, who has refused to engage in hypotheticals involving his party helping save McCarthy’s gavel, deferred on Saturday when asked if the speaker did the right thing by putting up the bipartisan spending bill.<br></p> <br> <img src="https://static.politico.com/59/66/6b5d6f3b41e6b97f8fc21c0b10b2/house-of-representatives-28280.jpg"> <br> <p>“The House, led by Democrats, was able to accomplish the right thing on behalf of the American people,” the New York Democrat said.</p> <p>Many of the speaker’s allies have grown tired of the threat dangling over his head, saying that perhaps it’s time for those defectors to put up or shut up.</p> <p>“I don’t think he’s lost any strength. But if someone wants to do this, just come on. I’m tired of talking about this fight,” said Rules Chair <a href="https://directory.politicopro.com/member/51327" data-person-id="51327" link-data="{&quot;cms.site.owner&quot;:{&quot;_ref&quot;:&quot;0000014b-3270-d4f3-a3cb-f3ffa8610000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff4161000e&quot;},&quot;cms.content.publishDate&quot;:1696110031347,&quot;cms.content.publishUser&quot;:{&quot;_ref&quot;:&quot;00000186-6085-de35-afde-61e715bb0000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;cms.content.updateDate&quot;:1696110031347,&quot;cms.content.updateUser&quot;:{&quot;_ref&quot;:&quot;00000186-6085-de35-afde-61e715bb0000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;originalTemplate&quot;:false,&quot;member&quot;:&quot;{\&quot;identifier\&quot;:\&quot;51327\&quot;,\&quot;url\&quot;:\&quot;https://directory.politicopro.com/member/51327\&quot;,\&quot;preferredName\&quot;:\&quot;Rep. Tom Cole (R-OK)\&quot;,\&quot;isCommittee\&quot;:false}&quot;,&quot;text&quot;:&quot;Tom Cole&quot;,&quot;url&quot;:&quot;https://directory.politicopro.com/member/51327&quot;,&quot;personId&quot;:&quot;51327&quot;,&quot;_id&quot;:&quot;0000018a-e809-d56c-abfa-ec6d22990000&quot;,&quot;_type&quot;:&quot;353fe80b-e1b5-3663-85ca-add066ecafc0&quot;}">Tom Cole</a> (R-Okla.). “They didn’t have a candidate last time, they don’t have a candidate this time. None of the people that would vote against him have the guts to run against him.”</p> <p>Some are quick to claim that the failure to achieve any conservative policy victories in Saturday's vote stemmed from conservatives' antics.</p> <p>Womack, who had overseen the floor, later chided McCarthy’s intra-party foes: “This is what happens when you can't get to yes.”</p> <p><i>Nicholas Wu contributed.</i></p>]]>
+      </content:encoded>
+    </item>
+    <item>
+      <title>The race to replace Dianne Feinstein is about to get even more expensive</title>
+      <link>https://www.politico.com/news/2023/09/29/dianne-feinstein-race-to-replace-00119220</link>
+      <description>A special election means even more money can pour into the Senate race.</description>
+      <guid>https://www.politico.com/news/2023/09/29/dianne-feinstein-race-to-replace-00119220</guid>
+      <pubDate>Fri, 29 Sep 2023 16:39:03 EST</pubDate>
+      <dc:creator>Steven Shepard and Jessica Piper</dc:creator>
+      <dc:contributor>Steven Shepard and Jessica Piper</dc:contributor>
+      <media:content type="image/jpeg" url="https://static.politico.com/25/ad/2155aaef4e60975f900ad3978a5d/obit-feinstein-15535.jpg">
+        <media:credit scheme="urn:ebu">Jacquelyn Martin/AP Photo</media:credit>
+        <media:title type="html">Democratic Sen. Dianne Feinstein’s death this week means the state’s governor, Gavin Newsom, will name a replacement who will serve until a special election can be scheduled.</media:title>
+        <media:thumbnail url="https://static.politico.com/25/ad/2155aaef4e60975f900ad3978a5d/obit-feinstein-15535.jpg"/>
+      </media:content>
+      <maz:template>core</maz:template>
+      <maz:modified>1696023543747</maz:modified>
+      <content:encoded>
+        <![CDATA[<img src="https://static.politico.com/25/ad/2155aaef4e60975f900ad3978a5d/obit-feinstein-15535.jpg"> <br> <p>California’s already blockbuster 2024 Senate race just got more confusing — and potentially a lot more expensive.</p> <p>Democratic Sen. <a href="https://directory.politicopro.com/member/51184" data-person-id="51184" link-data="{&quot;cms.site.owner&quot;:{&quot;_ref&quot;:&quot;0000014b-3270-d4f3-a3cb-f3ffa8610000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff4161000e&quot;},&quot;cms.content.publishDate&quot;:1696022416837,&quot;cms.content.publishUser&quot;:{&quot;_ref&quot;:&quot;00000187-1473-d989-a7a7-bfffa9da0000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;cms.content.updateDate&quot;:1696022416837,&quot;cms.content.updateUser&quot;:{&quot;_ref&quot;:&quot;00000187-1473-d989-a7a7-bfffa9da0000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;originalTemplate&quot;:false,&quot;member&quot;:&quot;{\&quot;identifier\&quot;:\&quot;51184\&quot;,\&quot;url\&quot;:\&quot;https://directory.politicopro.com/member/51184\&quot;,\&quot;preferredName\&quot;:\&quot;Sen. Dianne Feinstein (D-CA)\&quot;,\&quot;isCommittee\&quot;:false}&quot;,&quot;text&quot;:&quot;Dianne Feinstein&quot;,&quot;url&quot;:&quot;https://directory.politicopro.com/member/51184&quot;,&quot;personId&quot;:&quot;51184&quot;,&quot;_id&quot;:&quot;0000018a-e2d0-dd68-a3cf-fbd043da0000&quot;,&quot;_type&quot;:&quot;353fe80b-e1b5-3663-85ca-add066ecafc0&quot;}">Dianne Feinstein</a>’s <a href="https://www.politico.com/news/2023/09/29/feinstein-dies-at-90-00119040" target="_blank" link-data="{&quot;cms.site.owner&quot;:{&quot;_ref&quot;:&quot;0000014b-3270-d4f3-a3cb-f3ffa8610000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff4161000e&quot;},&quot;cms.content.publishDate&quot;:1696022611122,&quot;cms.content.publishUser&quot;:{&quot;_ref&quot;:&quot;00000187-1473-d989-a7a7-bfffa9da0000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;cms.content.updateDate&quot;:1696022611122,&quot;cms.content.updateUser&quot;:{&quot;_ref&quot;:&quot;00000187-1473-d989-a7a7-bfffa9da0000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;originalTemplate&quot;:false,&quot;link&quot;:{&quot;originalTemplate&quot;:false,&quot;attributes&quot;:[],&quot;target&quot;:&quot;NEW&quot;,&quot;url&quot;:&quot;https://www.politico.com/news/2023/09/29/feinstein-dies-at-90-00119040&quot;,&quot;_id&quot;:&quot;0000018a-e2d3-d2cf-a3af-fbd73b660001&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;linkText&quot;:&quot;death this week&quot;,&quot;_id&quot;:&quot;0000018a-e2d3-d2cf-a3af-fbd73b660000&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">death this week</a> means the state’s governor, Gavin Newsom, <a href="https://www.politico.com/news/2023/09/29/feinstein-death-senate-seat-contest-00119079" target="_blank" link-data="{&quot;cms.site.owner&quot;:{&quot;_ref&quot;:&quot;0000014b-3270-d4f3-a3cb-f3ffa8610000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff4161000e&quot;},&quot;cms.content.publishDate&quot;:1696022554704,&quot;cms.content.publishUser&quot;:{&quot;_ref&quot;:&quot;00000187-1473-d989-a7a7-bfffa9da0000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;cms.content.updateDate&quot;:1696022554704,&quot;cms.content.updateUser&quot;:{&quot;_ref&quot;:&quot;00000187-1473-d989-a7a7-bfffa9da0000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;originalTemplate&quot;:false,&quot;link&quot;:{&quot;originalTemplate&quot;:false,&quot;attributes&quot;:[],&quot;target&quot;:&quot;NEW&quot;,&quot;url&quot;:&quot;https://www.politico.com/news/2023/09/29/feinstein-death-senate-seat-contest-00119079&quot;,&quot;_id&quot;:&quot;0000018a-e2d2-de9d-afbf-ebde63690001&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;linkText&quot;:&quot;will name a replacement&quot;,&quot;_id&quot;:&quot;0000018a-e2d2-de9d-afbf-ebde63690000&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">will name a replacement</a> who will serve until a special election can be scheduled. That means there will be four Senate elections next year: a pair of primary and general special elections to complete the remainder of Feinstein’s term, and the regularly scheduled 2024 primary and general elections for the new term beginning in 2025.</p> <p>But it could also have big consequences for the campaign. Thanks to an arcane provision of federal law, doubling the number of elections means doubling the amount of money a candidate can raise from individual donors — from $6,600 to $13,200 — for the very same seat in the very same year.</p> <p>Newsom has promised to appoint a caretaker who won’t be a candidate in the election, and two candidates already have eight-figure bank accounts: Democratic Reps. <a href="https://directory.politicopro.com/member/37473" data-person-id="37473" link-data="{&quot;cms.site.owner&quot;:{&quot;_ref&quot;:&quot;0000014b-3270-d4f3-a3cb-f3ffa8610000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff4161000e&quot;},&quot;cms.content.publishDate&quot;:1696022580992,&quot;cms.content.publishUser&quot;:{&quot;_ref&quot;:&quot;00000187-1473-d989-a7a7-bfffa9da0000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;cms.content.updateDate&quot;:1696022580992,&quot;cms.content.updateUser&quot;:{&quot;_ref&quot;:&quot;00000187-1473-d989-a7a7-bfffa9da0000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;originalTemplate&quot;:false,&quot;member&quot;:&quot;{\&quot;identifier\&quot;:\&quot;37473\&quot;,\&quot;url\&quot;:\&quot;https://directory.politicopro.com/member/37473\&quot;,\&quot;preferredName\&quot;:\&quot;Adam Schiff (D)\&quot;,\&quot;isCommittee\&quot;:false}&quot;,&quot;text&quot;:&quot;Adam Schiff&quot;,&quot;url&quot;:&quot;https://directory.politicopro.com/member/37473&quot;,&quot;personId&quot;:&quot;37473&quot;,&quot;_id&quot;:&quot;0000018a-e2d2-d56c-abfa-eeffc2380000&quot;,&quot;_type&quot;:&quot;353fe80b-e1b5-3663-85ca-add066ecafc0&quot;}">Adam Schiff</a> and <a href="https://directory.politicopro.com/member/307578" data-person-id="307578" link-data="{&quot;cms.site.owner&quot;:{&quot;_ref&quot;:&quot;0000014b-3270-d4f3-a3cb-f3ffa8610000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff4161000e&quot;},&quot;cms.content.publishDate&quot;:1696022600315,&quot;cms.content.publishUser&quot;:{&quot;_ref&quot;:&quot;00000187-1473-d989-a7a7-bfffa9da0000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;cms.content.updateDate&quot;:1696022600315,&quot;cms.content.updateUser&quot;:{&quot;_ref&quot;:&quot;00000187-1473-d989-a7a7-bfffa9da0000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;originalTemplate&quot;:false,&quot;member&quot;:&quot;{\&quot;identifier\&quot;:\&quot;307578\&quot;,\&quot;url\&quot;:\&quot;https://directory.politicopro.com/member/307578\&quot;,\&quot;preferredName\&quot;:\&quot;Rep. Katie Porter (D-CA)\&quot;,\&quot;isCommittee\&quot;:false}&quot;,&quot;text&quot;:&quot;Katie Porter&quot;,&quot;url&quot;:&quot;https://directory.politicopro.com/member/307578&quot;,&quot;personId&quot;:&quot;307578&quot;,&quot;_id&quot;:&quot;0000018a-e2d3-d56c-abfa-eeff0eb00000&quot;,&quot;_type&quot;:&quot;353fe80b-e1b5-3663-85ca-add066ecafc0&quot;}">Katie Porter</a>, who will now be able to return to their biggest donors for more money.</p> <p>Schiff had 495 people who’d already given the maximum $6,600 at the halfway point of the year, according to a POLITICO analysis; for Porter, who relies more heavily on smaller donors, that number was 47.<br></p> <br> <p>If they all opened their checkbooks again to donate the new maximum amount, it would mean another more than $3.2 million raised by Schiff and a more modest $310,000 for Porter.</p> <p>The special election will almost certainly be held at the same time as the election for the full Senate term. That means voters participating in the state’s “Super Tuesday” primary next March will vote for Senate twice: once in the special election, and once in the regular race.</p> <p>And then in November, they’ll do it again, choosing between the top two finishers in both primary races. The winner of the special election will likely take office sometime in Nov. 2024 — and if the same candidate wins both races, they’ll get a leg up on Senate seniority over the others in their class who will first be elected next year.</p> <p>Voters in California should be somewhat used to this, because it’s exactly what happened last year. When Kamala Harris resigned from the Senate two days before she was inaugurated as vice president in January 2021, Newsom appointed <a href="https://directory.politicopro.com/member/189610" data-person-id="189610" link-data="{&quot;cms.site.owner&quot;:{&quot;_ref&quot;:&quot;0000014b-3270-d4f3-a3cb-f3ffa8610000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff4161000e&quot;},&quot;cms.content.publishDate&quot;:1696022714416,&quot;cms.content.publishUser&quot;:{&quot;_ref&quot;:&quot;00000187-1473-d989-a7a7-bfffa9da0000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;cms.content.updateDate&quot;:1696022714416,&quot;cms.content.updateUser&quot;:{&quot;_ref&quot;:&quot;00000187-1473-d989-a7a7-bfffa9da0000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;originalTemplate&quot;:false,&quot;member&quot;:&quot;{\&quot;identifier\&quot;:\&quot;189610\&quot;,\&quot;url\&quot;:\&quot;https://directory.politicopro.com/member/189610\&quot;,\&quot;preferredName\&quot;:\&quot;Sen. Alex Padilla (D-CA)\&quot;,\&quot;isCommittee\&quot;:false}&quot;,&quot;text&quot;:&quot;Alex Padilla&quot;,&quot;url&quot;:&quot;https://directory.politicopro.com/member/189610&quot;,&quot;personId&quot;:&quot;189610&quot;,&quot;_id&quot;:&quot;0000018a-e2d4-d56c-abfa-eefdcf010000&quot;,&quot;_type&quot;:&quot;353fe80b-e1b5-3663-85ca-add066ecafc0&quot;}">Alex Padilla</a> to replace her.</p> <p>Padilla then had to run in two separate elections in both the June primary and the November general election: a special election to complete the final months of Harris’ term, and the start of the new term that began this January. (He won both easily.)</p> <p>The nation’s most populous state is already known for expensive elections, including a series of self-funding candidates who shelled out millions of their own money in mostly unsuccessful runs for statewide office, like Meg Whitman, Al Checchi and Steve Westly. But next year’s Senate race to replace Feinstein — who had already announced her retirement — could break records.</p> <p>Schiff and Porter have already established themselves as prodigious fundraisers: As of June 30, Schiff had a massive $29.8 million in cash on hand, $19 million more than any other Senate candidate, including incumbents, slated to appear on the ballot in any state in 2024.</p> <p>Porter, meanwhile, had $10.4 million banked at the end of June, trailing only Schiff and three sitting senators — <a href="https://directory.politicopro.com/member/198919" data-person-id="198919" link-data="{&quot;cms.site.owner&quot;:{&quot;_ref&quot;:&quot;0000014b-3270-d4f3-a3cb-f3ffa8610000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff4161000e&quot;},&quot;cms.content.publishDate&quot;:1696022795487,&quot;cms.content.publishUser&quot;:{&quot;_ref&quot;:&quot;00000187-1473-d989-a7a7-bfffa9da0000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;cms.content.updateDate&quot;:1696022795487,&quot;cms.content.updateUser&quot;:{&quot;_ref&quot;:&quot;00000187-1473-d989-a7a7-bfffa9da0000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;originalTemplate&quot;:false,&quot;member&quot;:&quot;{\&quot;identifier\&quot;:\&quot;198919\&quot;,\&quot;url\&quot;:\&quot;https://directory.politicopro.com/member/198919\&quot;,\&quot;preferredName\&quot;:\&quot;Sen. Kyrsten Sinema (I-AZ)\&quot;,\&quot;isCommittee\&quot;:false}&quot;,&quot;text&quot;:&quot;Krysten Sinema &quot;,&quot;url&quot;:&quot;https://directory.politicopro.com/member/198919&quot;,&quot;personId&quot;:&quot;198919&quot;,&quot;_id&quot;:&quot;0000018a-e2d6-d2cf-a3af-fbd609520000&quot;,&quot;_type&quot;:&quot;353fe80b-e1b5-3663-85ca-add066ecafc0&quot;}">Krysten Sinema </a>(I-Ariz.), <a href="https://directory.politicopro.com/member/51845" data-person-id="51845" link-data="{&quot;cms.site.owner&quot;:{&quot;_ref&quot;:&quot;0000014b-3270-d4f3-a3cb-f3ffa8610000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff4161000e&quot;},&quot;cms.content.publishDate&quot;:1696022806131,&quot;cms.content.publishUser&quot;:{&quot;_ref&quot;:&quot;00000187-1473-d989-a7a7-bfffa9da0000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;cms.content.updateDate&quot;:1696022806131,&quot;cms.content.updateUser&quot;:{&quot;_ref&quot;:&quot;00000187-1473-d989-a7a7-bfffa9da0000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;originalTemplate&quot;:false,&quot;member&quot;:&quot;{\&quot;identifier\&quot;:\&quot;51845\&quot;,\&quot;url\&quot;:\&quot;https://directory.politicopro.com/member/51845\&quot;,\&quot;preferredName\&quot;:\&quot;Sen. Jon Tester (D-MT)\&quot;,\&quot;isCommittee\&quot;:false}&quot;,&quot;text&quot;:&quot;Jon Tester&quot;,&quot;url&quot;:&quot;https://directory.politicopro.com/member/51845&quot;,&quot;personId&quot;:&quot;51845&quot;,&quot;_id&quot;:&quot;0000018a-e2d6-dd68-a3cf-fbd62f7d0000&quot;,&quot;_type&quot;:&quot;353fe80b-e1b5-3663-85ca-add066ecafc0&quot;}">Jon Tester</a> (D-Mont.) and <a href="https://directory.politicopro.com/member/151825" data-person-id="151825" link-data="{&quot;cms.site.owner&quot;:{&quot;_ref&quot;:&quot;0000014b-3270-d4f3-a3cb-f3ffa8610000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff4161000e&quot;},&quot;cms.content.publishDate&quot;:1696022813144,&quot;cms.content.publishUser&quot;:{&quot;_ref&quot;:&quot;00000187-1473-d989-a7a7-bfffa9da0000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;cms.content.updateDate&quot;:1696022813144,&quot;cms.content.updateUser&quot;:{&quot;_ref&quot;:&quot;00000187-1473-d989-a7a7-bfffa9da0000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;originalTemplate&quot;:false,&quot;member&quot;:&quot;{\&quot;identifier\&quot;:\&quot;151825\&quot;,\&quot;url\&quot;:\&quot;https://directory.politicopro.com/member/151825\&quot;,\&quot;preferredName\&quot;:\&quot;Sen. Joe Manchin (D-WV)\&quot;,\&quot;isCommittee\&quot;:false}&quot;,&quot;text&quot;:&quot;Joe Manchin&quot;,&quot;url&quot;:&quot;https://directory.politicopro.com/member/151825&quot;,&quot;personId&quot;:&quot;151825&quot;,&quot;_id&quot;:&quot;0000018a-e2d6-de9d-afbf-ebde4e2c0000&quot;,&quot;_type&quot;:&quot;353fe80b-e1b5-3663-85ca-add066ecafc0&quot;}">Joe Manchin</a> (D-W.Va.).<br></p> <br> <p>Both Schiff and Porter were miles ahead of the other Democratic member of Congress running for the seat, Rep. <a href="https://directory.politicopro.com/member/51481" data-person-id="51481" link-data="{&quot;cms.site.owner&quot;:{&quot;_ref&quot;:&quot;0000014b-3270-d4f3-a3cb-f3ffa8610000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff4161000e&quot;},&quot;cms.content.publishDate&quot;:1696022845998,&quot;cms.content.publishUser&quot;:{&quot;_ref&quot;:&quot;00000187-1473-d989-a7a7-bfffa9da0000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;cms.content.updateDate&quot;:1696022845998,&quot;cms.content.updateUser&quot;:{&quot;_ref&quot;:&quot;00000187-1473-d989-a7a7-bfffa9da0000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;originalTemplate&quot;:false,&quot;member&quot;:&quot;{\&quot;identifier\&quot;:\&quot;51481\&quot;,\&quot;url\&quot;:\&quot;https://directory.politicopro.com/member/51481\&quot;,\&quot;preferredName\&quot;:\&quot;Rep. Barbara Lee (D-CA)\&quot;,\&quot;isCommittee\&quot;:false}&quot;,&quot;text&quot;:&quot;Barbara Lee&quot;,&quot;url&quot;:&quot;https://directory.politicopro.com/member/51481&quot;,&quot;personId&quot;:&quot;51481&quot;,&quot;_id&quot;:&quot;0000018a-e2d6-de9d-afbf-ebded0cf0000&quot;,&quot;_type&quot;:&quot;353fe80b-e1b5-3663-85ca-add066ecafc0&quot;}">Barbara Lee</a>, who had $1.4 million. A fourth Democrat, former Google executive Lexi Reese, ended June with $625,000 in cash on hand, some of which was self-funded.</p> <p>Lee and her allies have already bemoaned the cash chasm. Allies of the longtime Oakland congressperson set up a super PAC, She Speaks for Me, which had raised $1.5 million by the halfway point of the year.</p> <p>Like all super PACs, the pro-Lee group can raise unlimited funds — an attempt to help her close the gap with Schiff’s and Porter’s campaigns, which are subject to the contribution limits outlined in federal campaign finance law.</p> <p>Those limits are set each cycle by the Federal Election Commission; for 2024, candidates can raise $3,300 <i>per election</i> from individual donors. That means a candidate who wins a primary — or, in California, finishes in the top two spots in the all-party primary — can collect a maximum of $6,600 per donor, $3,300 each for the primary and general. (Candidates can accept up to that total during the primary but can’t touch the general election money until after the primary.)</p> <p>But now there will be the additional two special elections as soon as Newsom issues a proclamation to set those dates. That means individual donors can give an additional $3,300 for the special primary and another $3,300 for the special general election.</p> <p>Polling currently shows Schiff and Porter with the early edge in the primary. A <a href="https://escholarship.org/uc/item/8tt5f2tq?" target="_blank" link-data="{&quot;linkText&quot;:&quot;Berkeley IGS poll&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://escholarship.org/uc/item/8tt5f2tq?&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14ab90000&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14ab90001&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">Berkeley IGS poll</a> conducted last month found Schiff (20 percent) and Porter (17 percent) ahead of Lee (7 percent) and two Republican candidates, former Dodgers and Padres first baseman Steve Garvey (7 percent) and businessperson James Bradley (7 percent).</p> <p>The candidates will all be required to next update their fundraising totals Oct. 15, reports that will cover the third quarter, which ends Saturday. Super PACs like Lee’s won’t have to file again with the Federal Election Commission until the end of next January, until or unless they make an independent expenditure, like television or radio advertising.</p>]]>
+      </content:encoded>
+    </item>
+    <item>
+      <title>Pelosi to accompany Feinstein's body home to California</title>
+      <link>https://www.politico.com/news/2023/09/30/pelosi-to-accompany-feinsteins-body-home-to-california-00119287</link>
+      <description>A U.S. military plane will take Feinstein back to San Francisco Saturday.</description>
+      <guid>https://www.politico.com/news/2023/09/30/pelosi-to-accompany-feinsteins-body-home-to-california-00119287</guid>
+      <pubDate>Sat, 30 Sep 2023 14:35:41 EST</pubDate>
+      <dc:creator>Julia Marsh, Nicholas Wu and Christopher Cadelago</dc:creator>
+      <dc:description>Christopher Cadelago is the California bureau chief at POLITICO, serving as the lead politics reporter and helping guide coverage across the Golden State. Based at the Capitol, Cadelago covers elections and political power, from the governor’s mansion to the players in Los Angeles, the Bay Area and Silicon Valley. He regularly contributes stories in POLITICO Magazine.&lt;br/&gt;&lt;br/&gt;In Washington, Cadelago served as a White House correspondent covering Joe Biden and Donald Trump and was a lead reporter for the presidential campaigns of Biden and Kamala Harris.&lt;br/&gt;&lt;br/&gt;Before joining POLITICO in 2018, he worked at The Sacramento Bee in the Capitol bureau, anchored investigations at The San Diego Union-Tribune in Sacramento and wrote about politics for newspapers in San Diego, Los Angeles and San Francisco.&lt;br/&gt;&lt;br/&gt;Cadelago is a San Francisco native and a graduate of the University of California, Berkeley. He lives with his family in Sacramento’s Land Park neighborhood.</dc:description>
+      <dc:contributor>Julia Marsh, Nicholas Wu and Christopher Cadelago</dc:contributor>
+      <media:content type="image/jpeg" url="https://static.politico.com/6a/c9/e5f0cfbf48d69e2ebf0f3403fff6/election-2024-senate-california-52038.jpg">
+        <media:credit scheme="urn:ebu">J. Scott Applewhite/AP Photo</media:credit>
+        <media:title type="html">Sen. Dianne Feinstein, who passed away on Thursday, will be flown back to California on a U.S. military plane Saturday.</media:title>
+        <media:thumbnail url="https://static.politico.com/6a/c9/e5f0cfbf48d69e2ebf0f3403fff6/election-2024-senate-california-52038.jpg"/>
+      </media:content>
+      <maz:template>core</maz:template>
+      <maz:modified>1696116644331</maz:modified>
+      <content:encoded>
+        <![CDATA[<img src="https://static.politico.com/6a/c9/e5f0cfbf48d69e2ebf0f3403fff6/election-2024-senate-california-52038.jpg"> <br> <p>Rep. Nancy Pelosi will accompany the body of late Sen. Dianne Feinstein back to California on a U.S. military plane Saturday following <a href="https://www.politico.com/live-updates/2023/09/30/congress/stopgap-passes-00119280" target="_blank" link-data="{&quot;cms.site.owner&quot;:{&quot;_ref&quot;:&quot;0000014b-3270-d4f3-a3cb-f3ffa8610000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff4161000e&quot;},&quot;cms.content.publishDate&quot;:1696101047574,&quot;cms.content.publishUser&quot;:{&quot;_ref&quot;:&quot;0000017e-264f-dee4-a5ff-ee5ff02b0000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;cms.content.updateDate&quot;:1696101047574,&quot;cms.content.updateUser&quot;:{&quot;_ref&quot;:&quot;0000017e-264f-dee4-a5ff-ee5ff02b0000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;originalTemplate&quot;:false,&quot;link&quot;:{&quot;originalTemplate&quot;:false,&quot;attributes&quot;:[],&quot;target&quot;:&quot;NEW&quot;,&quot;url&quot;:&quot;https://www.politico.com/live-updates/2023/09/30/congress/stopgap-passes-00119280&quot;,&quot;_id&quot;:&quot;0000018a-e780-d56c-abfa-efed14df0001&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;linkText&quot;:&quot;a House vote&quot;,&quot;_id&quot;:&quot;0000018a-e780-d56c-abfa-efed14df0000&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">a House vote</a> passing a stopgap funding patch.</p> <p>"The House has finished voting, and Speaker Pelosi will accompany Senator Feinstein on her final journey home to San Francisco," a spokesperson for the Democratic speaker emerita said. </p> <p>The two California Democrats served together in Congress for decades. Back in San Francisco, they were neighbors and friends. Pelosi's daughter Nancy Corinne was also close to Feinstein. </p> <p>A spokesperson for Feinstein said the late senator’s daughter, Katherine Feinstein, would also be on the government plane that was authorized by the White House. Her family has not yet announced memorial plans.</p> <p>The plane is expected to land at San Francisco International Airport around 6 p.m. local time. Members of the public won’t be able to access the area or see the runway from the road.</p> <p>Feinstein, who was 90, died Thursday at her home in Washington following years of declining health. </p> <p>California Gov. Gavin Newsom <a href="https://www.politico.com/news/2023/09/29/feinstein-death-senate-seat-contest-00119079" target="_blank" link-data="{&quot;cms.site.owner&quot;:{&quot;_ref&quot;:&quot;0000014b-3270-d4f3-a3cb-f3ffa8610000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff4161000e&quot;},&quot;cms.content.publishDate&quot;:1696100969372,&quot;cms.content.publishUser&quot;:{&quot;_ref&quot;:&quot;0000017e-264f-dee4-a5ff-ee5ff02b0000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;cms.content.updateDate&quot;:1696100969372,&quot;cms.content.updateUser&quot;:{&quot;_ref&quot;:&quot;0000017e-264f-dee4-a5ff-ee5ff02b0000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;originalTemplate&quot;:false,&quot;link&quot;:{&quot;originalTemplate&quot;:false,&quot;attributes&quot;:[],&quot;target&quot;:&quot;NEW&quot;,&quot;url&quot;:&quot;https://www.politico.com/news/2023/09/29/feinstein-death-senate-seat-contest-00119079&quot;,&quot;_id&quot;:&quot;0000018a-e77e-d2cf-a3af-fffedee00000&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;linkText&quot;:&quot;is expected to&quot;,&quot;_id&quot;:&quot;0000018a-e77e-d2cf-a3af-fffededf0000&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">is expected to</a> name a replacement in the coming days. </p>]]>
+      </content:encoded>
+    </item>
+    <item>
+      <title>Feinstein, trail-blazing California senator, dies at 90</title>
+      <link>https://www.politico.com/news/2023/09/29/feinstein-dies-at-90-00119040</link>
+      <description>“Senator Feinstein was a force of nature who made an incredible impact on our country and her home state,” her chief of staff said in a statement.</description>
+      <guid>https://www.politico.com/news/2023/09/29/feinstein-dies-at-90-00119040</guid>
+      <pubDate>Fri, 29 Sep 2023 07:57:14 EST</pubDate>
+      <dc:creator>Burgess Everett</dc:creator>
+      <dc:contributor>Burgess Everett</dc:contributor>
+      <media:content type="image/jpeg" url="https://static.politico.com/35/b6/1471bca24161ab23d32313ea673e/senate-votes-25716.jpg">
+        <media:credit scheme="urn:ebu">Francis Chung/POLITICO</media:credit>
+        <media:title type="html">Dianne Feinstein was the first woman elected to the Senate from California in 1992 and became one of the most powerful politicians in the Capitol.</media:title>
+        <media:thumbnail url="https://static.politico.com/35/b6/1471bca24161ab23d32313ea673e/senate-votes-25716.jpg"/>
+      </media:content>
+      <maz:template>core</maz:template>
+      <maz:modified>1696004313319</maz:modified>
+      <content:encoded>
+        <![CDATA[<img src="https://static.politico.com/35/b6/1471bca24161ab23d32313ea673e/senate-votes-25716.jpg"> <br> <p>California Democratic Sen. <a href="https://directory.politicopro.com/member/51184" data-person-id="51184" link-data="{&quot;cms.site.owner&quot;:{&quot;_ref&quot;:&quot;0000014b-3270-d4f3-a3cb-f3ffa8610000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff4161000e&quot;},&quot;cms.content.publishDate&quot;:1695996541714,&quot;cms.content.updateDate&quot;:1695996541714,&quot;originalTemplate&quot;:false,&quot;member&quot;:&quot;{\&quot;identifier\&quot;:\&quot;51184\&quot;,\&quot;url\&quot;:\&quot;https://directory.politicopro.com/member/51184\&quot;,\&quot;preferredName\&quot;:\&quot;Sen. Dianne Feinstein (D-CA)\&quot;,\&quot;isCommittee\&quot;:false}&quot;,&quot;text&quot;:&quot;Dianne Feinstein&quot;,&quot;url&quot;:&quot;https://directory.politicopro.com/member/51184&quot;,&quot;personId&quot;:&quot;51184&quot;,&quot;_id&quot;:&quot;0000018a-e145-d56c-abfa-ed6d63000000&quot;,&quot;_type&quot;:&quot;353fe80b-e1b5-3663-85ca-add066ecafc0&quot;}">Dianne Feinstein</a>, the longest-serving woman senator and a vocal advocate of gun control legislation, has died at age 90.</p> <p>The trail-blazing Feinstein had faced mounting health problems in recent years. Her replacement will be selected by Gov. Gavin Newsom (D-Calif.). Feinstein already announced she would not run for reelection in 2024, and the race for her seat is already underway. </p> <p>James Sauls, Feinstein's chief of staff, said in a statement that the senator died Thursday night at her home in Washington, D.C. </p> <p>“Her passing is a great loss for so many, from those who loved and cared for her to the people of California that she dedicated her life to serving,” Sauls said in the statement. “Senator Feinstein never backed away from a fight for what was just and right. At the same time, she was always willing to work with anyone, even those she disagreed with, if it meant bettering the lives of Californians or the betterment of our nation.</p> <p>“There are few women who can be called senator, chairman, mayor, wife, mom and grandmother. Senator Feinstein was a force of nature who made an incredible impact on our country and her home state,” he continued. “She left a legacy that is undeniable and extraordinary. There is much to say about who she was and what she did, but for now, we are going to grieve the passing of our beloved boss, mentor and friend.”</p> <p>Feinstein was the first woman elected to the Senate from California in 1992 and became one of the most powerful politicians in the Capitol. As Senate Intelligence Committee chair, she battled with the Obama administration over the classified report on the CIA's torture program following the attacks on Sept. 11, 2001 — commanding respect from Republicans and Democrats alike.</p> <p>President Joe Biden called Feinstein “a pioneering American and a true trailblazer” in a statement. </p> <p>“Often the only woman in the room, Dianne was a role model for so many Americans — a job she took seriously by mentoring countless public servants, many of whom now serve in my Administration,” Biden said in the statement. “She had an immense impact on younger female leaders for whom she generously opened doors. Dianne was tough, sharp, always prepared, and never pulled a punch, but she was also a kind and loyal friend, and that’s what Jill and I will miss the most.”</p> <p>Feinstein began facing health challenges after winning her fifth full term as a senator in 2018. She stepped down as the top Democrat on the Judiciary Committee and passed on serving as the Senate pro tempore, a position that would have placed her in the line of presidential succession.</p> <p>After a three-month-long absence from the Senate this year following a shingles diagnosis, Feinstein returned to Washington and kept voting to advance Biden's judicial nominees on the Senate floor. She was often seen getting around Capitol Hill in a wheelchair, and had shown signs of confusion in both hallway interviews and during committee hearings. In August, Feinstein fell in her San Francisco home and went to the hospital for a short time. She voted to advance a critical spending bill on Thursday morning, but missed two votes on Thursday afternoon. </p> <p>"She was one of the most effective legislators in recent memory because of her willingness to work across the aisle in good faith in order to solve complex problems," said Sen. <a href="https://directory.politicopro.com/member/192907" data-person-id="192907" link-data="{&quot;cms.site.owner&quot;:{&quot;_ref&quot;:&quot;0000014b-3270-d4f3-a3cb-f3ffa8610000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff4161000e&quot;},&quot;cms.content.publishDate&quot;:1695996663917,&quot;cms.content.updateDate&quot;:1695996663917,&quot;originalTemplate&quot;:false,&quot;member&quot;:&quot;{\&quot;identifier\&quot;:\&quot;192907\&quot;,\&quot;url\&quot;:\&quot;https://directory.politicopro.com/member/192907\&quot;,\&quot;preferredName\&quot;:\&quot;Sen. Thom Tillis (R-NC)\&quot;,\&quot;isCommittee\&quot;:false}&quot;,&quot;text&quot;:&quot;Thom Tillis&quot;,&quot;url&quot;:&quot;https://directory.politicopro.com/member/192907&quot;,&quot;personId&quot;:&quot;192907&quot;,&quot;_id&quot;:&quot;0000018a-e147-d56c-abfa-ed6f49fe0000&quot;,&quot;_type&quot;:&quot;353fe80b-e1b5-3663-85ca-add066ecafc0&quot;}">Thom Tillis</a> (R-N.C.), who served with her on the Judiciary Committee. </p> <p>Feinstein was also a renowned proponent of gun safety legislation. As fellow advocate Sen. <a href="https://directory.politicopro.com/member/51493" data-person-id="51493" link-data="{&quot;cms.site.owner&quot;:{&quot;_ref&quot;:&quot;0000014b-3270-d4f3-a3cb-f3ffa8610000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff4161000e&quot;},&quot;cms.content.publishDate&quot;:1695996590746,&quot;cms.content.updateDate&quot;:1695996590746,&quot;originalTemplate&quot;:false,&quot;member&quot;:&quot;{\&quot;identifier\&quot;:\&quot;51493\&quot;,\&quot;url\&quot;:\&quot;https://directory.politicopro.com/member/51493\&quot;,\&quot;preferredName\&quot;:\&quot;Sen. Chris Murphy (D-CT)\&quot;,\&quot;isCommittee\&quot;:false}&quot;,&quot;text&quot;:&quot;Chris Murphy&quot;,&quot;url&quot;:&quot;https://directory.politicopro.com/member/51493&quot;,&quot;personId&quot;:&quot;51493&quot;,&quot;_id&quot;:&quot;0000018a-e146-d56c-abfa-ed6f2b7d0000&quot;,&quot;_type&quot;:&quot;353fe80b-e1b5-3663-85ca-add066ecafc0&quot;}">Chris Murphy</a> (D-Conn.) said on Friday morning: "For a long time, between 1994 and the tragedy in Newtown in 2012, Dianne was often a lonely but unwavering voice on the issue of gun violence."</p> <p>Three California House Democrats — Reps. <a href="https://directory.politicopro.com/member/51608" data-person-id="51608" link-data="{&quot;cms.site.owner&quot;:{&quot;_ref&quot;:&quot;0000014b-3270-d4f3-a3cb-f3ffa8610000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff4161000e&quot;},&quot;cms.content.publishDate&quot;:1695996560129,&quot;cms.content.updateDate&quot;:1695996560129,&quot;originalTemplate&quot;:false,&quot;member&quot;:&quot;{\&quot;identifier\&quot;:\&quot;51608\&quot;,\&quot;url\&quot;:\&quot;https://directory.politicopro.com/member/51608\&quot;,\&quot;preferredName\&quot;:\&quot;Rep. Adam Schiff (D-CA)\&quot;,\&quot;isCommittee\&quot;:false}&quot;,&quot;text&quot;:&quot;Adam Schiff&quot;,&quot;url&quot;:&quot;https://directory.politicopro.com/member/51608&quot;,&quot;personId&quot;:&quot;51608&quot;,&quot;_id&quot;:&quot;0000018a-e145-dd68-a3cf-fbd5b1c80000&quot;,&quot;_type&quot;:&quot;353fe80b-e1b5-3663-85ca-add066ecafc0&quot;}">Adam Schiff</a>, <a href="https://directory.politicopro.com/member/307578" data-person-id="307578" link-data="{&quot;cms.site.owner&quot;:{&quot;_ref&quot;:&quot;0000014b-3270-d4f3-a3cb-f3ffa8610000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff4161000e&quot;},&quot;cms.content.publishDate&quot;:1695996569669,&quot;cms.content.updateDate&quot;:1695996569669,&quot;originalTemplate&quot;:false,&quot;member&quot;:&quot;{\&quot;identifier\&quot;:\&quot;307578\&quot;,\&quot;url\&quot;:\&quot;https://directory.politicopro.com/member/307578\&quot;,\&quot;preferredName\&quot;:\&quot;Rep. Katie Porter (D-CA)\&quot;,\&quot;isCommittee\&quot;:false}&quot;,&quot;text&quot;:&quot;Katie Porter&quot;,&quot;url&quot;:&quot;https://directory.politicopro.com/member/307578&quot;,&quot;personId&quot;:&quot;307578&quot;,&quot;_id&quot;:&quot;0000018a-e145-d2cf-a3af-fbd7d7450000&quot;,&quot;_type&quot;:&quot;353fe80b-e1b5-3663-85ca-add066ecafc0&quot;}">Katie Porter</a> and <a href="https://directory.politicopro.com/member/51481" data-person-id="51481" link-data="{&quot;cms.site.owner&quot;:{&quot;_ref&quot;:&quot;0000014b-3270-d4f3-a3cb-f3ffa8610000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff4161000e&quot;},&quot;cms.content.publishDate&quot;:1695996579319,&quot;cms.content.updateDate&quot;:1695996579319,&quot;originalTemplate&quot;:false,&quot;member&quot;:&quot;{\&quot;identifier\&quot;:\&quot;51481\&quot;,\&quot;url\&quot;:\&quot;https://directory.politicopro.com/member/51481\&quot;,\&quot;preferredName\&quot;:\&quot;Rep. Barbara Lee (D-CA)\&quot;,\&quot;isCommittee\&quot;:false}&quot;,&quot;text&quot;:&quot;Barbara Lee&quot;,&quot;url&quot;:&quot;https://directory.politicopro.com/member/51481&quot;,&quot;personId&quot;:&quot;51481&quot;,&quot;_id&quot;:&quot;0000018a-e145-d2cf-a3af-fbd7fd9e0000&quot;,&quot;_type&quot;:&quot;353fe80b-e1b5-3663-85ca-add066ecafc0&quot;}">Barbara Lee</a> — are all running for the full six-year term in the 2024 election. Feinstein's interim replacement will serve through next year, and Newsom's selection is a fraught choice that's certain to alienate people.</p> <p>Newsom had committed at one point to appointing a Black woman if he got a second Senate appointment. But he recently said that, if Feinstein did not complete her term, he would select a caretaker senator rather than Lee, who is running for Feinstein's seat. Lee excoriated Newsom over those comments.</p> <p>Senate Majority Leader Chuck Schumer paid tribute to Feinstein on the floor, calling for a moment of silence as a bouquet of roses and a black cloth rested on her desk. Schumer recalled Feinstein’s fight for the assault weapons ban, her proclivity for studying an issue before she voted on it, as well as her “strength and her integrity."</p> <p>"We lost a giant in the Senate. Sen. Dianne Feinstein was one of the most amazing people who ever graced the Senate,” Schumer said.</p> <p>Senate Minority Leader Mitch McConnell also paid tribute to Feinstein, noting that he and his wife, Elaine Chao, shared a friendship with her over the years.</p> <p>Former President Barack Obama said Feinstein was one of the politicians who got "into public service because they care about this country and the people they represent."</p> <p>"I first got to know Dianne in the Senate, where she was a fierce advocate for gun safety measures and civil rights," <a href="https://twitter.com/BarackObama/status/1707783159813755343?s=20" target="_blank" link-data="{&quot;cms.site.owner&quot;:{&quot;_ref&quot;:&quot;0000014b-3270-d4f3-a3cb-f3ffa8610000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff4161000e&quot;},&quot;cms.content.publishDate&quot;:1696003057855,&quot;cms.content.publishUser&quot;:{&quot;_ref&quot;:&quot;0000017e-5abe-d1fc-ad7f-fefe76ec0000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;cms.content.updateDate&quot;:1696003057855,&quot;cms.content.updateUser&quot;:{&quot;_ref&quot;:&quot;0000017e-5abe-d1fc-ad7f-fefe76ec0000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;originalTemplate&quot;:false,&quot;link&quot;:{&quot;originalTemplate&quot;:false,&quot;attributes&quot;:[],&quot;target&quot;:&quot;NEW&quot;,&quot;url&quot;:&quot;https://twitter.com/BarackObama/status/1707783159813755343?s=20&quot;,&quot;_id&quot;:&quot;0000018a-e1a8-d56c-abfa-ededdf7b0000&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;linkText&quot;:&quot;Obama said on X&quot;,&quot;_id&quot;:&quot;0000018a-e1a8-d56c-abfa-ededdf7a0000&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">Obama said on X</a>. "Later, when I was president, I came to rely on her as a trusted partner in the fight to guarantee affordable healthcare and economic opportunity for everyone."</p> <p>Dianne’s daughter, Katherine Feinstein, and House Speaker Emeritus Nancy Pelosi (D-Calif.) were seated in the gallery as Senate colleagues paid tribute. They sat closely together, with arms interlocked. Members of the California House delegation also stood on the floor.</p> <p>Her death brings Senate Democrats' functional majority to 50 votes, with Republicans holding 49 votes. Two other Democratic senators tested positive for Covid this week — and the majority of the caucus is calling on indicted Sen. <a href="https://directory.politicopro.com/member/51523" data-person-id="51523" link-data="{&quot;cms.site.owner&quot;:{&quot;_ref&quot;:&quot;0000014b-3270-d4f3-a3cb-f3ffa8610000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff4161000e&quot;},&quot;cms.content.publishDate&quot;:1695996604411,&quot;cms.content.updateDate&quot;:1695996604411,&quot;originalTemplate&quot;:false,&quot;member&quot;:&quot;{\&quot;identifier\&quot;:\&quot;51523\&quot;,\&quot;url\&quot;:\&quot;https://directory.politicopro.com/member/51523\&quot;,\&quot;preferredName\&quot;:\&quot;Sen. Bob Menendez (D-NJ)\&quot;,\&quot;isCommittee\&quot;:false}&quot;,&quot;text&quot;:&quot;Robert Menendez&quot;,&quot;url&quot;:&quot;https://directory.politicopro.com/member/51523&quot;,&quot;personId&quot;:&quot;51523&quot;,&quot;_id&quot;:&quot;0000018a-e146-d2cf-a3af-fbd6505e0000&quot;,&quot;_type&quot;:&quot;353fe80b-e1b5-3663-85ca-add066ecafc0&quot;}">Robert Menendez</a> (D-N.J.) to resign.</p> <p><i>Kierra Frazier, Jennifer Haberkorn, Ursula Perano and Jeremy B. White contributed to this report.</i></p>]]>
+      </content:encoded>
+    </item>
+    <item>
+      <title>Feinstein’s friends and colleagues in California remember ‘true giant’</title>
+      <link>https://www.politico.com/news/2023/09/29/feinstein-california-friends-mourn-death-00119173</link>
+      <description>One mourner left a bouquet of red azaleas at the late senator’s home in San Francisco.</description>
+      <guid>https://www.politico.com/news/2023/09/29/feinstein-california-friends-mourn-death-00119173</guid>
+      <pubDate>Fri, 29 Sep 2023 14:59:09 EST</pubDate>
+      <dc:creator>Blake Jones</dc:creator>
+      <dc:contributor>Blake Jones</dc:contributor>
+      <media:content type="image/jpeg" url="https://static.politico.com/c1/c5/9c4c2265492fb1bda3091720633d/judicial-nominees-california-83860.jpg">
+        <media:credit scheme="urn:ebu">Rich Pedroncelli/AP Photo</media:credit>
+        <media:title type="html">Dianne Feinstein and Kamala Harris walk together to speak at the 21st Annual Lake Tahoe Summit in California in 2017.</media:title>
+        <media:thumbnail url="https://static.politico.com/c1/c5/9c4c2265492fb1bda3091720633d/judicial-nominees-california-83860.jpg"/>
+      </media:content>
+      <maz:template>core</maz:template>
+      <maz:modified>1696030426768</maz:modified>
+      <content:encoded>
+        <![CDATA[<img src="https://static.politico.com/c1/c5/9c4c2265492fb1bda3091720633d/judicial-nominees-california-83860.jpg"> <br> <p>SAN FRANCISCO — The late Sen. Dianne Feinstein was remembered in her home state Friday for championing an assault weapons ban, confronting the AIDS epidemic and protecting millions of acres of California desert.</p> <p>The <a href="https://www.politico.com/news/2023/02/15/five-moments-that-defined-feinstein-career-00082796" target="_blank" link-data="{&quot;cms.site.owner&quot;:{&quot;_ref&quot;:&quot;0000014b-3272-d4f3-a3cb-f3ff7cad0000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff4161000e&quot;},&quot;cms.content.publishDate&quot;:1696014856455,&quot;cms.content.publishUser&quot;:{&quot;_ref&quot;:&quot;0000016b-99e4-d5f3-a1ef-9fe7fa020000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;cms.content.updateDate&quot;:1696014856455,&quot;cms.content.updateUser&quot;:{&quot;_ref&quot;:&quot;0000016b-99e4-d5f3-a1ef-9fe7fa020000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;originalTemplate&quot;:false,&quot;link&quot;:{&quot;originalTemplate&quot;:false,&quot;attributes&quot;:[],&quot;target&quot;:&quot;NEW&quot;,&quot;url&quot;:&quot;https://www.politico.com/news/2023/02/15/five-moments-that-defined-feinstein-career-00082796&quot;,&quot;_id&quot;:&quot;0000018a-e25c-d2cf-a3af-fbdee5970001&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;linkText&quot;:&quot;longest serving woman in the Senate&quot;,&quot;_id&quot;:&quot;0000018a-e25c-d2cf-a3af-fbdee5970000&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">longest serving woman in the Senate</a> died Thursday after more than 30 years in Congress. News of her passing stunned California political circles and drew a mixture of eulogizing and celebration of her dogged policy work and close relationships with many of the state’s premier political players.</p> <p>“Dianne Feinstein was a wonderful friend of the Brown family,” former Gov. Jerry Brown said in a statement. “I got to know her well over the years and came to deeply appreciate her intensity, devotion to duty and unfailing solicitude for her friends. Dianne was utterly unique and set the bar for those who follow.”</p> <p>Outside Feinstein’s home in San Francisco, along the iconic Lyon Street steps, a mourner left a single bouquet of red azaleas. Neighbors who strolled by on their morning walks said Feinstein had rarely been seen outside her Pacific Heights mansion in recent years.<br></p> <br> <img src="https://static.politico.com/e4/2d/eee3225d4b73bbf61f53d0b30add/https-delivery-gettyimages.com/downloads/1708310053"> <br> <p>Nancy Johnston, a retiree who lives up the street, teared up as she briefly stopped to pray and make the sign of the cross. She left a bouquet of roses with a note tucked inside, thanking the senator for her service. “I admired and respected her. She was so dedicated,” Johnston said.</p> <p>Prominent Californians of both parties mourned the loss and weighed in on the former San Francisco mayor’s legacy.<br></p> <ul> <li>“Dianne Feinstein was many things — a powerful, trailblazing U.S. Senator; an early voice for gun control; a leader in times of tragedy and chaos. But to me, she was a dear friend, a lifelong mentor, and a role model not only for me, but to my wife and daughters for what a powerful, effective leader looks like.” — <i>Gov. Gavin Newsom</i><br></li> <li>“For years, I witnessed Senator Feinstein’s leadership, when the cameras were on and when they were off. ... In the tradition of so many great Senators from California, she was not only a leader or our state, but for our nation and our world. Through her long career, Senator Feinstein worked across the aisle to help our nation live up to its promise.” <i>— Vice President Kamala Harris</i><br></li> <li>“She was a great senator. She was a great mayor. She was a great human being. And more importantly than that, we were friends for better than 50 years. … She was special. And we could tell — those of us that know her — could tell she was suffering.” <i>— former Rep. John Burton in a phone interview&nbsp;</i></li> </ul> <ul> <li>Former California Sen. Barbara Boxer on CNN said Feinstein was “really mad” at her when she retired. Boxer also recalled a conversation with Feinstein when the late senator decided to run for reelection in 2018:&nbsp; “She said ‘a lot of people are telling me not to do it, but this job is a calling to me.’ That’s how she viewed it.”</li> </ul> <ul> <li>“Dianne gave me one of my first jobs in politics in her Los Angeles office at a time early in my career when I was looking to make a difference for my community, and for our state. It’s in part thanks to her groundbreaking career that a Latino son of immigrants could one day not just work for her, but work alongside her to keep up the fight for the American dream. As we mourn Senator Feinstein’s passing, we must also celebrate her incredible legacy, her contributions to our nation from gun safety, and environmental conservation, to national security, and health care reform and so much more.” <i>— Sen. Alex Padilla (D-Calif.) on the Senate floor Friday</i></li> </ul> <ul> <li>“California — and our nation — has lost an incredible leader who dedicated her career and life to public service, and opened doors for women in politics. We are fortunate to have benefitted from Senator Feinstein’s courage, strength, and governance for so many years — her legacy is one of a class few can hope to match.” <i>— California Sen. Pro Tem Toni Atkins</i><br></li> <li>"Senator Feinstein was a California original and a fierce defender of the California Dream, who will be remembered as one of our greatest public servants. I honor her and send condolences to her family and staff." <i>— Assembly Speaker Robert Rivas</i></li> </ul> <ul> <li>“Dianne Feinstein was a true giant. She helped save our city, becoming Mayor after horrific political assassinations &amp; leading us during the worst of the HIV/AIDS health disaster. As our Senator she led on gun safety &amp; so many issues. There will never be another Dianne Feinstein.” <i>— state Sen. Scott Wiener (D-San Francisco)</i></li> </ul> <ul> <li>“Dianne Feinstein dedicated her life to public service and leaves a legacy without comparison in the history of California. Her passing is a profound loss for our state and our country. My prayers are with her family and loved ones.” <i>— Rep. Kevin Kiley (R-Calif.)</i></li> </ul> <ul> <li>“Dianne Feinstein lived a principled life of service w/ courage &amp; fearlessness. Amy and I loved knowing her, learning from her &amp; seeing her serve our state and country. On a personal level, she was an unfailing partner for our city and always was there for me. I’ll miss her deeply.”<i> — Eric Garcetti, former Los Angeles Mayor&nbsp;</i></li> </ul> <ul> <li>“As the longest-serving woman in the U.S. Senate, she was a trailblazer who served our state with strength, vision, and compassion. Her career was forged through the tragedy of gun violence which fueled her unwavering resolve to pass groundbreaking gun control. A true giant has left us. I join all of California and our nation in expressing my gratitude to this icon for her service and leadership.”<i> — state Sen. Steven Bradford (D-Gardena)</i></li> </ul> <ul> <li>“Dianne Feinstein was a true trailblazer for women in California and U.S. politics. Her remarkable breakthroughs included being elected California’s first woman U.S. Senator, San Francisco’s first female mayor, the first female major-party candidate for California governor, and last year, the longest-tenured woman senator in U.S. history.” — <i>Nancy Skinner and Cecilia Aguiar-Curry, state legislators on behalf of the California Legislative Women’s Caucus&nbsp;</i></li> </ul> <ul> <li>“Senator Feinstein led a distinguished career of public service to California. While we didn’t always agree, she had a remarkable ability to reach across the aisle to deliver results for her constituents. That’s something we need more of. Senator Feinstein and her family are in my prayers as California grieves the loss of an icon.” <i>— James Gallagher, Assembly Republican Leader&nbsp;</i></li> </ul> <ul> <li>“I just had to see her. So, lucky me, I got to hug and kiss her and tell her I loved her.” <i>— former California Rep. Jane Harman on MSNBC recalling meeting with Feinstein Thursday, hours before her death</i></li> </ul> <ul> <li>“When I joined the Intelligence Committee, the senator was a terrific legislative partner as the Democratic leader of the committee in the Senate. Senator Feinstein and I are also bound by our friendship with the late Congresswoman, Ellen O. Tauscher, whom the Senator eulogized in 2019. The two were as close as sisters and represented the best of California.” <i>— Rep. Eric Swalwell (D-Calif.)</i><br></li> <li>“She demonstrated her deep commitment to the Bay Area by taking an instrumental role in preserving the San Francisco Bay through the creation and expansion of the Don Edwards San Francisco Bay National Wildlife Refuge, a critical wetland area. Senator Feinstein was also instrumental in bringing BART (Bay Area Rapid Transit) to San Jose.” <i>— state Sen. Dave Cortese (D-San Jose)</i><br></li> <li>“Throughout her remarkable career, Senator Feinstein broke barriers for women in politics and left a tremendous legacy of environmental accomplishments, from her work to protect millions of acres of California deserts, to safeguarding the Pacific coast from oil drilling, to her landmark legislation on cleaner cars, and more. Our thoughts are with the Feinstein family during this difficult time.” <i>— League of Conservation Voters President Gene Karpinski and California EnviroVoters CEO Mary Creasman</i></li> </ul> <p><i>Dustin Gardiner and Melanie Mason contributed to this report.</i></p>]]>
+      </content:encoded>
+    </item>
+    <item>
+      <title>‘It’s the only thing he’s got left’: DeSantis' rivals try to turn his Florida record against him</title>
+      <link>https://www.politico.com/news/2023/09/28/desantis-florida-2024-rivals-00118998</link>
+      <description>He used to get accolades for his leadership of the Sunshine state.</description>
+      <guid>https://www.politico.com/news/2023/09/28/desantis-florida-2024-rivals-00118998</guid>
+      <pubDate>Thu, 28 Sep 2023 20:47:06 EST</pubDate>
+      <dc:creator>Gary Fineout and Sally Goldenberg</dc:creator>
+      <dc:contributor>Gary Fineout and Sally Goldenberg</dc:contributor>
+      <media:content type="application/octet-stream" url="https://static.politico.com/97/e9/e0be7a55433bbeb052a20db1ebb4/https-delivery-gettyimages.com/downloads/1247867439">
+        <media:credit scheme="urn:ebu">Cheney Orr/AFP</media:credit>
+        <media:title type="html">The Florida governor became a rising conservative star with his stances against Covid-related lockdowns and mandates, but he also got locked into battles over education.</media:title>
+        <media:thumbnail url="https://static.politico.com/97/e9/e0be7a55433bbeb052a20db1ebb4/https-delivery-gettyimages.com/downloads/1247867439"/>
+      </media:content>
+      <maz:template>core</maz:template>
+      <maz:modified>1696012212677</maz:modified>
+      <content:encoded>
+        <![CDATA[<img src="https://static.politico.com/97/e9/e0be7a55433bbeb052a20db1ebb4/https-delivery-gettyimages.com/downloads/1247867439"> <br> <p>TALLAHASSEE, Fla. — Gov. Ron DeSantis' main pitch for months has been that his record of conservative governance — what he has called the “Florida Blueprint” — would inspire Republican voters.</p> <p>Now his GOP rivals are throwing it back in his face.</p> <p>During Wednesday’s presidential debate, DeSantis frequently defended his record on education, spending, energy policy and access to health insurance — even if some of his opponents’ attacks weren’t completely accurate.</p> <p>The sustained assault on his performance in Florida marks a new moment in DeSantis’s presidential campaign, as emboldened rivals like Nikki Haley and Chris Christie blast away at one of his last remaining pillars of political strength.</p> <p>“They see him bleeding out and they’re trying to get those voters to come their way,” said Jason Cabel Roe, a national Republican consultant unaffiliated with any presidential candidate. “It’s the only thing he’s got left. If you’re with him it’s because of his record.”</p> <p>Not long ago, such attacks would have been unthinkable. During his first five years as governor, DeSantis earned seemingly universal acclaim on the right for his policies in Florida: glowing depictions in conservative media, grudging respect or genuine admiration from peers and competitors in Republican politics.</p> <p>Whatever else happened to DeSantis in the presidential campaign, it seemed, he’d always have Florida.</p> <p>DeSantis began the year far ahead of the GOP pack, trailing Trump by<a href="https://www.realclearpolitics.com/epolls/2024/president/us/2024_republican_presidential_nomination-7548.html" target="_blank" link-data="{&quot;linkText&quot;:&quot; roughly 13 points in January&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.realclearpolitics.com/epolls/2024/president/us/2024_republican_presidential_nomination-7548.html&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14ac80000&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14ac80001&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">roughly 13 points in January</a> and exciting donors looking for an alternative to the former president. But DeSantis is now some 40 points behind the frontrunner, and finds himself falling to<a href="https://www.politico.com/news/2023/09/20/desantis-on-life-support-in-n-h-plummets-in-new-poll-00117273" target="_blank" link-data="{&quot;linkText&quot;:&quot; third place or below in some early-state polls&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.politico.com/news/2023/09/20/desantis-on-life-support-in-n-h-plummets-in-new-poll-00117273&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14ac80002&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14ac80003&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">third place or below in some early-state polls</a>. Donors are frustrated, and his single-digit opponents sense an opening, which they tried to capitalize on during Wednesday’s faceoff.<br></p> <br><iframe style="max-width: 100%" width="1280" height="720" src="https://players.brightcove.net/1155968404/r1WF6V0Pl_default/index.html?videoId=6335466541112" frameborder="0"></iframe> <br> <p>During the first presidential debate held in Milwaukee, his rivals barely mentioned his record as governor. That completely flipped this week as he took on flak from Haley, South Carolina Sen. Tim Scott and even former Vice President Mike Pence.</p> <p>Haley, the former governor of South Carolina, questioned DeSantis’ stance on energy, including contending that he banned fracking in Florida. (DeSantis advocated for a ban, but it was never enacted.) Pence brought up that spending levels had increased during DeSantis’ tenure and mentioned that Nikolas Cruz, who was convicted of killing 17 people in the Parkland high school mass shooting, was sentenced to life in prison instead of getting the death penalty — suggesting that DeSantis was weak on crime. Pence failed to note that DeSantis was sharply critical of the decision and responded by pushing through a change in Florida’s death penalty law.</p> <p>The Florida governor became a rising conservative star with his stances against Covid-related lockdowns and mandates, but he also got locked into battles over education, including a feud with Disney over the state’s contentious “parental rights in education” bill, known by critics as “Don’t Say Gay,” that banned instruction of gender studies and sexual orientation in lower grades. It’s this track record that DeSantis used as the framework for most of his campaign. </p> <p>Some Republican consultants didn’t find the attack lines effective. <a href="https://www.ipsos.com/en-us/538-washington-post-second-republican-debate-poll#:~:text=Taken%20together%2C%20more%20debate%20watchers,%25" target="_blank" link-data="{&quot;linkText&quot;:&quot;A 538/Washington Post/Ipsos poll taken immediately&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.ipsos.com/en-us/538-washington-post-second-republican-debate-poll#:~:text=Taken%20together%2C%20more%20debate%20watchers,%25&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14ac80004&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14ac80005&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">A 538/Washington Post/Ipsos poll taken immediately</a> found that Republican primary voters who watched it told pollsters that DeSantis had done the best job. But the effort by his opponents reflects an attempt to undercut DeSantis' main selling points to GOP voters.</p> <p>Some Florida Republicans, meanwhile, bristled at the attacks on DeSantis’ record and said it’s not a true reflection of the job he has done as governor. Ryan Petty, whose daughter was killed by Cruz in Parkland, ripped into Pence on social media.</p> <p>“How dare you use the Parkland tragedy as a cheap political hit,” Petty wrote on social media. “You should apologize immediately. Governors don’t pick juries and they don’t force them to vote for justice.”<br></p> <br><iframe style="max-width: 100%" width="1280" height="720" src="https://players.brightcove.net/1155968404/r1WF6V0Pl_default/index.html?videoId=6336749459112" frameborder="0"></iframe> <br> <p>Christian Ziegler, the chair of the Republican Party of Florida who has not endorsed anyone in the race, called the attacks in the debate a “typical political tactic” to “find a point or two” to use to criticize DeSantis.</p> <p>“But if you want the full story, all you have to do is look at the domestic migration numbers broken down by state to see that Florida is the #1 state people are moving to,” Ziegler said. “Politics aside, it’s clear that Florida has a strong brand and is the best governed state in the country.”</p> <p>DeSantis’ team also snapped back at Haley, issuing a statement touting his record on insurance policy after Fox News moderator Stuart Varney questioned why Florida has such a high rate of uninsured residents. His campaign also asserted that <a href="https://rondesantis.com/press-releases/desantis-stands-above-the-rest-and-wins-second-gop-primary-debate/" target="_blank" link-data="{&quot;linkText&quot;:&quot;he won the debate&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://rondesantis.com/press-releases/desantis-stands-above-the-rest-and-wins-second-gop-primary-debate/&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14ac80006&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14ac80007&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">he won the debate</a> based on the very record that came under attack. By the end of the evening, DeSantis was <a href="https://nypost.com/2023/09/27/desantis-challenges-trump-to-one-on-one-debate/" target="_blank" link-data="{&quot;linkText&quot;:&quot;challenging Trump to a one-on-one faceoff&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://nypost.com/2023/09/27/desantis-challenges-trump-to-one-on-one-debate/&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14ac80008&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14ac80009&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">challenging Trump to a one-on-one faceoff</a>.</p> <p>“Desperate candidates need to get their facts straight,” campaign spokesperson Bryan Griffin said in a statement regarding Haley’s critique that her opponent opposes fracking and banned offshore drilling.</p> <p>Griffin highlighted DeSantis’ <a href="https://abcnews.go.com/Politics/desantis-rolls-energy-policy-contends-climate-change-invoked/story?id=103340918#:~:text=The%20governor's%20goal%20is%20to,per%20gallon%2C%20according%20to%20AAA." target="_blank" link-data="{&quot;linkText&quot;:&quot;recent energy plan&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://abcnews.go.com/Politics/desantis-rolls-energy-policy-contends-climate-change-invoked/story?id=103340918#:~:text=The%20governor's%20goal%20is%20to,per%20gallon%2C%20according%20to%20AAA.&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14ac8000a&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14ac8000b&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">recent energy plan</a> and vowed he would lower gas prices if elected.</p> <p>Florida Democratic Party chair Nikki Fried welcomed the newfound attention to DeSantis’ record and ripped into him for suggesting he did not support a ban on fracking.</p> <p>“Ron has always tried to spin his narrative and was able to get away with it in Florida,” Fried said. “Floridians have caught on and thank god the country has as well.”</p> <p>One of the biggest criticisms of DeSantis’ record has repeatedly come from the only Republican candidate to skip the debates. Trump — who boasts of appointing Supreme Court justices who overturned <i>Roe v. Wade</i> — has pivoted to excoriating Florida’s six-week abortion ban, which Desantis signed into law in the near dead of night, and warning such measures could cost Republicans the White House. Trump also has criticized DeSantis’ handling of Florida’s property insurance crisis which has resulted in substantial rate hikes for residents.</p> <p>But for the rest of the field, other issues served as fodder for attacks.</p> <p>“All these candidates have a ton of [opposition research] on DeSantis and figure, might as well get it out now,” said national GOP consultant Alex Conant, who isn’t working for any presidential hopeful. “There’s no strategic reason ‘cause it’s not like he’s a threat to any of them.”</p> <p><i>Ben Lefebvre contributed to this report.</i></p>]]>
+      </content:encoded>
+    </item>
+    <item>
+      <title>‘There isn't a mainstream mega-donor now not looking at Nikki’: Haley catches post-debate spark</title>
+      <link>https://www.politico.com/news/2023/09/29/nikki-haley-slow-burn-candidate-of-2024-00119119</link>
+      <description>Donors are calling. And following this week’s debate, Haley held a sold-out fundraiser in Los Angeles.</description>
+      <guid>https://www.politico.com/news/2023/09/29/nikki-haley-slow-burn-candidate-of-2024-00119119</guid>
+      <pubDate>Fri, 29 Sep 2023 13:05:19 EST</pubDate>
+      <dc:creator>Natalie Allison and Meridith McGraw</dc:creator>
+      <dc:description>Meridith McGraw is a national political correspondent for POLITICO.</dc:description>
+      <dc:contributor>Natalie Allison and Meridith McGraw</dc:contributor>
+      <media:content type="image/jpeg" url="https://static.politico.com/3d/24/5ae1af394a4084e888942526d2e9/republican-presidential-debate-79394.jpg">
+        <media:credit scheme="urn:ebu">Francis Chung/POLITICO</media:credit>
+        <media:title type="html">On Thursday, Nikki Haley held a sold-out fundraising dinner in Los Angeles, with a $25,000-per-couple ticket price and waiting list to join.</media:title>
+        <media:thumbnail url="https://static.politico.com/3d/24/5ae1af394a4084e888942526d2e9/republican-presidential-debate-79394.jpg"/>
+      </media:content>
+      <maz:template>core</maz:template>
+      <maz:modified>1696017823451</maz:modified>
+      <content:encoded>
+        <![CDATA[<img src="https://static.politico.com/3d/24/5ae1af394a4084e888942526d2e9/republican-presidential-debate-79394.jpg"> <br> <p>When the super PAC supporting Nikki Haley launched its first TV ad in August, its advisers heard privately from fellow operatives who scoffed at the decision to focus the clip on Haley’s record on China.</p> <p>Foreign policy wasn’t the top priority of voters in Iowa and New Hampshire, an official with the pro-Haley group acknowledged, but that was hardly the point. The 30-second spot, which featured the former U.N. ambassador vowing at her campaign launch to send China’s government to the “ash heap of history,” was designed to showcase something more relatable: Her fortitude, the super PAC official said.</p> <p>Two months, two debates and $11 million worth of television ads later, Haley is gaining air. She is close to snatching the No. 2 spot in the GOP presidential primary, eclipsing Florida Gov. Ron DeSantis in New Hampshire and her home state of South Carolina, recent polls show. She is drawing a second look from donors following her performance in Wednesday’s debate.</p> <p>And the former governor is doing so on a relatively lean campaign budget, so far leaving all the TV to her aligned super PAC, SFA Fund Inc., and keeping her early state staffing footprint to a minimum.</p> <p>Internally, officials on Haley’s super PAC believe the early bet they made on framing her as a steady figure on the world stage has paid off, and has dovetailed — as planned — with her debate performances. They’re now running a slate of ads zeroing in on her <a href="https://www.politico.com/news/2023/09/03/nikki-haley-competency-tests-older-pols-00113853" target="_blank" link-data="{&quot;linkText&quot;:&quot;<u>calls for competency tests for politicians</u>&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.politico.com/news/2023/09/03/nikki-haley-competency-tests-older-pols-00113853&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14acb0002&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14acb0003&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}"><u>calls for competency tests for politicians</u></a>.</p> <p>On Thursday, Haley held a sold-out fundraising dinner in Los Angeles, with a $25,000-per-couple ticket price and waiting list to join, according to a campaign aide who was granted anonymity to discuss internal operations. It's part of a trend of donor attention since the first debate. Close to 1,000 new donors who “want to give in more significant ways” have reached out to the campaign, the aide said, while declining to elaborate.</p> <p>“From the very beginning, I talked to donors that were eager for that campaign to kind of come out guns blazing,” said Ozzie Palomo, a Connecticut-based GOP donor. Palomo has given to both Haley and her home state rival <a href="https://directory.politicopro.com/member/151800" data-person-id="151800" link-data="{&quot;cms.site.owner&quot;:{&quot;_ref&quot;:&quot;0000014b-3270-d4f3-a3cb-f3ffa8610000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff4161000e&quot;},&quot;cms.content.publishDate&quot;:1696010091193,&quot;cms.content.publishUser&quot;:{&quot;_ref&quot;:&quot;0000014f-1273-df62-a94f-9f7bc13f0011&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;cms.content.updateDate&quot;:1696010091193,&quot;cms.content.updateUser&quot;:{&quot;_ref&quot;:&quot;0000014f-1273-df62-a94f-9f7bc13f0011&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;originalTemplate&quot;:false,&quot;member&quot;:&quot;{\&quot;identifier\&quot;:\&quot;151800\&quot;,\&quot;url\&quot;:\&quot;https://directory.politicopro.com/member/151800\&quot;,\&quot;preferredName\&quot;:\&quot;Sen. Tim Scott (R-SC)\&quot;,\&quot;isCommittee\&quot;:false}&quot;,&quot;text&quot;:&quot;Tim Scott&quot;,&quot;url&quot;:&quot;https://directory.politicopro.com/member/151800&quot;,&quot;personId&quot;:&quot;151800&quot;,&quot;_id&quot;:&quot;0000018a-e214-de9d-afbf-ebdc27e70000&quot;,&quot;_type&quot;:&quot;353fe80b-e1b5-3663-85ca-add066ecafc0&quot;}">Tim Scott</a> this year, but on Wednesday he was at the Ronald Reagan Presidential Library lending his support to Haley in that night’s debate.<br></p> <br><iframe style="max-width: 100%" width="1280" height="720" src="https://players.brightcove.net/1155968404/r1WF6V0Pl_default/index.html?videoId=6337960192112" frameborder="0"></iframe> <br> <p>“To her campaign’s credit, they've had a methodical approach from Day One, and they stuck to it,” Palomo added. “They said, 'Here's how we're going to spend it.' From a donor perspective, you appreciate that. You have a lot of campaigns out there, they get a large infusion of cash and burn through it very quickly on things that may not necessarily deliver results in the polls and with the electorate.”</p> <p>In a presidential field where no rival to Donald Trump has caught fire, Haley, it would seem, is at least on a slow burn. She remains miles behind Trump, the overwhelming favorite to win the nomination. But in stringing together two widely praised debates, she is inching up in polls and gaining interest from donors. An adviser to Haley noted the close relationships of her circle of longtime consultants, led by strategist Jon Lerner, and credited their history with what appears so far to be the successful implementation of the team’s long-game plan.</p> <p>The campaign’s strategy moving forward, said spokesperson Olivia Perez-Cubas, is “head down, and doubling down,” continuing to barnstorm the early states of Iowa, where Haley will return on Saturday, as well as New Hampshire and South Carolina. And then there is the next debate. While viewership was down during the second debate, Haley’s team, with its limited resources, has long seen the televised events as key to her rise.</p> <p>“A lot of Americans still don't know who she is,” said Perez-Cubas. “She's still introducing herself.”</p> <p>Haley experienced a modest surge since her first debate performance in Milwaukee, after spending months lingering in the low-single digits following her February launch. Billionaire Ronald Lauder is among the deep-pocketed Republicans who are now <a href="https://www.politico.com/news/2023/09/25/who-wants-to-get-involved-and-waste-money-some-gop-donors-give-up-on-finding-an-alternative-to-trump-00117772" target="_blank" link-data="{&quot;linkText&quot;:&quot;<u>considering putting money behind Haley</u>&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.politico.com/news/2023/09/25/who-wants-to-get-involved-and-waste-money-some-gop-donors-give-up-on-finding-an-alternative-to-trump-00117772&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14acc0000&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14acc0001&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}"><u>considering putting money behind Haley</u></a>, POLITICO reported this week, after considering DeSantis and Scott earlier in the race.</p> <p>Representatives for Haley and DeSantis are slated to appear before a gathering of megadonors in mid-October, <a href="https://www.nbcnews.com/politics/2024-election/republicans-brace-nikki-haley-ron-desantis-showdown-debates-rcna117786" target="_blank" link-data="{&quot;linkText&quot;:&quot;NBC first reported&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.nbcnews.com/politics/2024-election/republicans-brace-nikki-haley-ron-desantis-showdown-debates-rcna117786&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14acc0002&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14acc0003&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">NBC first reported</a>. A spokesperson for DeSantis confirmed his team's attendance at the Oct. 13 event, while Haley's campaign did not respond to a request for comment.</p> <p>"There isn't a mainstream megadonor now not looking at Nikki," said one major donor to Haley granted anonymity to discuss the dynamics of the race. "They may not all be on board yet. But they are giving her a serious look and are starting to engage in one way or the other."<br></p> <br> <p><br>It isn’t just donors noticing Haley, but also Trump, who appeared after Wednesday’s debate to see her clearly in the rearview mirror. While Trump’s social media rapid response team focused on attacking DeSantis and Chris Christie throughout the debate Wednesday — and Trump himself took aim at Christie afterward in his own post on Truth Social — his campaign sent out a press release during the debate about just one candidate: Haley.</p> <p>“I mean, she's obviously leapfrogging DeSantis,” said a senior Trump adviser, granted anonymity to discuss the Trump campaign’s decision-making. “And it says more about him than it does about her."</p> <p>Still, on Friday, Trump once again took aim at Haley and her promise to not launch a bid for president if Trump ran, writing on Truth Social: “MAGA, or I, will never go for Birdbrain Nikki Haley. No loyalty, plenty of lies!”</p> <p>Chris LaCivita, a top Trump campaign adviser, in an interview dismissed Haley and the rest of the field of Republican rivals and the debate as a “sideshow,” while criticizing Trump’s opponents as being beholden to big donors.</p> <p>“I love it — they all talk tough on China, but then they'll take the Club for China Growth’s money,” LaCivita said. “People like politicians that are loyal. Nikki Haley is anything but, and that matters to Republican primary voters.”</p> <p>Haley was among the Republican presidential hopefuls who attended a February donor retreat hosted by the conservative Club for Growth, which did not invite Trump. That group and another conservative organization, Americans for Prosperity, have each said they intend to support a Republican to oppose Trump in the primary, but have yet to put their weight behind any one candidate. So far, the groups have stuck to funding advertisements urging Republicans to move on from the former president.</p>]]>
+      </content:encoded>
+    </item>
+    <item>
+      <title>Scott finally showed a pulse. Ramaswamy did a 180. Here's who won and lost the second GOP debate.</title>
+      <link>https://www.politico.com/news/2023/09/28/second-republican-debate-who-won-takeaways-00118687</link>
+      <description>Want to know the real story of the 2nd GOP debate? We've got you covered.</description>
+      <guid>https://www.politico.com/news/2023/09/28/second-republican-debate-who-won-takeaways-00118687</guid>
+      <pubDate>Wed, 27 Sep 2023 23:46:15 EST</pubDate>
+      <dc:creator>POLITICO Staff</dc:creator>
+      <dc:contributor>POLITICO Staff</dc:contributor>
+      <media:content type="image/jpeg" url="https://static.politico.com/ca/1e/4bc9c6d54e5fa174be2d553ab9ab/20230927-gop-debate-philip-cheung-0022.jpg">
+        <media:credit scheme="urn:ebu">Philip Cheung for POLITICO</media:credit>
+        <media:title type="html">Jabs at Donald Trump during the second GOP primary debate revealed tacit recognition by Trump’s rivals that his absence from the debate stage is damaging them, relegating their primary debates to a series of confrontations at the “kiddie table.”</media:title>
+        <media:thumbnail url="https://static.politico.com/ca/1e/4bc9c6d54e5fa174be2d553ab9ab/20230927-gop-debate-philip-cheung-0022.jpg"/>
+      </media:content>
+      <maz:template>core</maz:template>
+      <maz:modified>1695909847943</maz:modified>
+      <content:encoded>
+        <![CDATA[<img src="https://static.politico.com/ca/1e/4bc9c6d54e5fa174be2d553ab9ab/20230927-gop-debate-philip-cheung-0022.jpg"> <br> <p>SIMI VALLEY, Calif. — Ron DeSantis and Chris Christie ripped Donald Trump for skipping the second debate. He was “missing in action,” DeSantis said. Christie labeled him “Donald Duck,” which fell about as flat as you might expect.</p> <p>But if neither jab was likely to put a scratch on the frontrunner, what they <i>did</i> reveal was something more significant: the tacit recognition by Trump’s rivals that his absence from the debate stage is damaging them, relegating their primary debates to a series of confrontations at the “kiddie table.”</p> <p>For whole stretches Wednesday, they acted like it. Moderators struggled to keep control of the stage as low-polling candidates talked over one another. <a href="https://directory.politicopro.com/member/151800" data-person-id="151800" link-data="{&quot;cms.site.owner&quot;:{&quot;_ref&quot;:&quot;0000014b-3270-d4f3-a3cb-f3ffa8610000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff4161000e&quot;},&quot;cms.content.publishDate&quot;:1695875418252,&quot;cms.content.publishUser&quot;:{&quot;_ref&quot;:&quot;00000187-1473-d989-a7a7-bfffa9da0000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;cms.content.updateDate&quot;:1695875418252,&quot;cms.content.updateUser&quot;:{&quot;_ref&quot;:&quot;00000187-1473-d989-a7a7-bfffa9da0000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;originalTemplate&quot;:false,&quot;member&quot;:&quot;{\&quot;identifier\&quot;:\&quot;151800\&quot;,\&quot;url\&quot;:\&quot;https://directory.politicopro.com/member/151800\&quot;,\&quot;preferredName\&quot;:\&quot;Sen. Tim Scott (R-SC)\&quot;,\&quot;isCommittee\&quot;:false}&quot;,&quot;text&quot;:&quot;Tim Scott&quot;,&quot;url&quot;:&quot;https://directory.politicopro.com/member/151800&quot;,&quot;personId&quot;:&quot;151800&quot;,&quot;_id&quot;:&quot;0000018a-da0d-d2cf-a3af-fb9f37210000&quot;,&quot;_type&quot;:&quot;353fe80b-e1b5-3663-85ca-add066ecafc0&quot;}">Tim Scott</a> went after Vivek Ramaswamy. So did Nikki Haley, who also tore into DeSantis. At one point, moderators threatened to cut Doug Burgum’s mic.</p> <p>We asked five POLITICO campaign reporters for their takeaways from the second Republican primary debate of the 2024 campaign.<br></p> <br><iframe style="max-width: 100%" width="1280" height="720" src="https://players.brightcove.net/1155968404/r1WF6V0Pl_default/index.html?videoId=6337962489112" frameborder="0"></iframe> <br> <h2 style="text-align: left">Who had the best night? Who had the worst night?</h2> <h2 style="text-align: left"></h2> <p><b>Natalie Allison: </b>Tim Scott. It was more than an hour into the debate that I realized I could say anyone on stage was <i>actually</i> having a good night, but I would argue he redeemed himself in the eyes of donors — and likely the voters who have been intrigued by him — compared to his last debate performance.</p> <p>Despite a rusty start, when he seemed a bit uncomfortable, Scott eventually made use of the rhetorical trick he has successfully employed on the stump for years: raising his preacher voice. Faced with questions about racial inequality, particularly as it relates to African Americans in this country, Scott is uniquely qualified to answer. And did so in a way that was likely to resonate with many conservatives of faith. “I have been discriminated against, but America is not a racist country,” Scott said. “Frankly the city on the hill needs a brand new leader, and I’m asking for your vote.”</p> <p>What’s more, Scott interrupted folks tonight. In Milwaukee, he faded into the background. Tonight, he went after Ramaswamy, at one point launching an indecipherable couple of minutes where Scott, Ramaswamy and DeSantis (who was trying to get the other two men to stop) were speaking over one another. And he showed no reluctance, when prompted by the moderators, to go after Nikki Haley — something those of us following the South Carolinians have been waiting months to see.</p> <p>Worst night? Poor Burgum. After qualifying at the last minute, he tried his hardest to insert himself into the debate by interrupting. But he got very few questions directed his way — and some scolding when he tried to interject.</p> <p><b>Christopher Cadelago:</b> Scott, no question. In a presidential debate that seemed to have the lowest stakes of any in recent memory, he showed a pulse. And for Scott, that was enough to turn in the most complete and substantive performance of the night. Sure, he benefited from a sleepy showing from DeSantis, who whined early on about Trump not being there and then disappeared for painfully long stretches of time.<br></p> <br> <img src="https://static.politico.com/9e/db/91df2c7a4cf481824c18e4fb79cf/20230927-gop-debate-philip-cheung-0042.jpg"> <br> <p>This is the second debate that DeSantis failed to notch anything approaching a memorable moment mixing it up with an opponent on stage, let alone a viral one. Instead, he resorted to scripted and rehearsed riffs, feeding critiques that he can’t think on his feet.</p> <p><b>Sally Goldenberg: </b>After a notably lackluster debate performance last month in Milwaukee, Scott showed up with a new script. He was energetic — repeatedly interjecting himself even if it meant interrupting. He mixed it up with Ramaswamy, Haley and DeSantis, while staying relatively above the fray. At times, he risked undermining his affable persona, but it was a risk worth taking as Scott needs to demonstrate to GOP donors that he’s a reasonable alternative to Trump. On Wednesday, he made progress on that front.</p> <p>Pence, on the other hand, fell flat after a strong showing at the previous debate. He didn’t stand out, he stumbled over some of his answers — leading to awkward pauses — and he was even scolded by a moderator at one point for failing to answer a question on the future of Obamacare. Perhaps most importantly, he didn’t do enough to highlight his bona fides as a religious conservative leader, which should be one of his selling points to the Republican Party.</p> <p><b>Steven Shepard:</b> The best night belonged to Nikki Haley. She showed a willingness to mix it up with anyone, jabbing at Ramaswamy and DeSantis. When moderator Dana Perino tried to tee up a back-and-forth between the two South Carolinians on stage, Scott wouldn’t take the bait.</p> <p>But Haley did. “He’s been there 12 years, and he hasn’t done any of that,” she said, mocking his congressional tenure, including his promotion to the Senate thanks to Haley’s appointment. “Where have you been? Where have you been, Tim?”<br></p> <br> <img src="https://static.politico.com/2b/a4/88bd401a49ae86f830ad71df5b6c/https-delivery-gettyimages.com/downloads/1705171084"> <br> <p>Only then did Scott respond in kind, hitting at Haley’s record as governor. But even then, Haley welcomed the counterattack, goading him: “Bring it, Tim.”</p> <p>I do think Scott did himself some favors Wednesday night — he’s dropped to 2 percent in the national polling average and needed to be more assertive to assure a spot on the next debate stage — but Haley got the better of their exchange.</p> <p>Last month, I said Ramaswamy had the worst night, and I think he followed up with a repeat performance. He conceded that he could be a “bit of a know-it-all,” but that didn’t stop the onslaught from the other candidates on stage. Given his slide in the polls since the first debate, I’m not convinced attacking him is a smart debate strategy. But the other candidates sure do seem to enjoy it, and some of the night’s most memorable moments were the arrows aimed at him.<br></p> <br><iframe style="max-width: 100%" width="1280" height="720" src="https://players.brightcove.net/1155968404/r1WF6V0Pl_default/index.html?videoId=6337959382112" frameborder="0"></iframe> <br> <p><b>Adam Wren: </b>Nobody had a great night. But from a strategic perspective, Mike Pence did something smart, attacking two candidates polling ahead of him: DeSantis and Ramaswamy. And the line on Ramaswamy was a zinger: "Let me say I'm glad Vivek pulled out of his business deal in 2018 in China. That must've been the time you decided to start voting in presidential elections.”</p> <p>My biggest loser? Ronald Reagan. Even though I watched a few candidates wander over to his gravesite not far from the media file tent earlier in the day, I was struck by how little candidates namechecked the Gipper even on his home turf (Scott spoke of a “shining city on the hill” and DeSantis mentioned Reagan’s deterrence strategy.) And few candidates seemed to have any problem violating Reagan’s Eleventh Commandment: "Thou shalt not speak ill of another Republican." Haley went so far as to say that every time she heard Ramaswamy speak she felt “a little bit dumber for what you say.” For his part, Ramaswamy was a bit of a corrective here, implicitly referring to Reagan’s Eleventh Commandment, appealing to the spirit of that edict several times, acknowledging that those on stage were “good people.”</p> <h2 style="text-align: left">What surprised you the most during the debate?</h2> <h2 style="text-align: left"></h2> <p><b>Cadelago: </b>Ramaswamy, after serving as a kind of super-troll and wild puncher on stage in the first debate, was anything but in the second. Ramaswamy at the start of the evening seemed to go to great lengths to pronounce himself largely in agreement with Scott on striking unions and holding President Joe Biden accountable for the situation. A few minutes later, Ramaswamy contended that the majority of reasonable people were in agreement about where the country needs to go. “These are good people on this stage,” he emphasized.</p> <p>Even as he sustained hits, at one point prompting him to interject that he ended all his business in China, it was a very different Ramaswamy, one who seemed to swill fewer pots of coffee before he stepped on stage in Simi Valley. He wasn’t even provoked by Haley saying she gets “dumber” each time she hears him speak. That’s restraint. And the kind of approach a young man might take to maybe, possibly, land a Cabinet post.</p> <p><b>Allison:</b> I agree with Chris. I was surprised at the debate in August when Ramaswamy portrayed himself the way he did, since I’ve seen him for months on the campaign trail pitch himself as a unifier. He and his advisers have clearly realized his original approach was the better branding strategy for him.</p> <p><b>Wren:</b> Add me to the column of people surprised by Ramaswamy. He presented himself as more of a statesman in this debate than the <a href="https://www.politico.com/news/2023/08/24/vivek-ramaswamy-gop-debate-00112752" target="_blank" link-data="{&quot;cms.site.owner&quot;:{&quot;_ref&quot;:&quot;0000014b-3270-d4f3-a3cb-f3ffa8610000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff4161000e&quot;},&quot;cms.content.publishDate&quot;:1695875936097,&quot;cms.content.publishUser&quot;:{&quot;_ref&quot;:&quot;00000187-1473-d989-a7a7-bfffa9da0000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;cms.content.updateDate&quot;:1695875936097,&quot;cms.content.updateUser&quot;:{&quot;_ref&quot;:&quot;00000187-1473-d989-a7a7-bfffa9da0000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;originalTemplate&quot;:false,&quot;link&quot;:{&quot;originalTemplate&quot;:false,&quot;attributes&quot;:[],&quot;target&quot;:&quot;NEW&quot;,&quot;url&quot;:&quot;https://www.politico.com/news/2023/08/24/vivek-ramaswamy-gop-debate-00112752&quot;,&quot;_id&quot;:&quot;0000018a-da15-dd68-a3cf-dbd527fc0001&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;linkText&quot;:&quot;“annoying” upstart&quot;,&quot;_id&quot;:&quot;0000018a-da15-dd68-a3cf-dbd527fc0000&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">“annoying” upstart</a> some found him to be in the first debate.<br></p> <br> <img src="https://static.politico.com/9e/33/1960bd8242f28c7ec90f3f59789b/20230927-gop-debate-philip-cheung-0028.jpg"> <br> <p>Beyond that, I was shocked how virtually none of the candidates laid a glove on Haley, who perhaps most capitalized on her first debate performance in Milwaukee to elevate her position in the field. None of her competitors arrested that momentum tonight.</p> <p><b>Shepard:</b> It did seem like Wednesday night was the first time some of these candidates began to grapple with the fact that they’re so far behind Trump. DeSantis hit Trump twice for skipping the debate, including on abortion. But it’s not clear GOP primary voters are as offended Trump isn’t there.</p> <p><b>Goldenberg:</b> Virtually no candidate on stage seemed to realize they are in an uphill battle against Donald Trump. Aside from a few jabs — DeSantis hitting him for raising the national debt; Christie alleging he was too afraid to show up to the faceoff — the Republican contenders largely avoided the overwhelming frontrunner. It has been their strategy all along, but as Trump’s lead grows, it is surprising they aren’t shifting course.</p> <h2 style="text-align: left">Did anything we saw tonight hurt Donald Trump?</h2> <p><b>Goldenberg:</b> No. If Republican voters are interested in substantive discussions on the economy, the Southern border, urban crime and the war in Ukraine, the candidates on stage offered some detailed policy positions. But this remains the party of Trump, and no one debating tonight did anything to change that. They barely challenged him on the losses he’s cost the GOP — and even when DeSantis raised that point, he did it without naming Trump or saying Trump lost in 2020.</p> <p><b>Cadelago:</b> Not only won’t it hurt Trump, it’s more likely to help him. If Trump made the right strategic call to skip the first debate, he unquestionably made the correct decision tonight by sitting out what amounted to single-A ball with distracted umpires. And if attending future debates is even a question for Trump, nothing that happened on stage in California should give him pause about ditching every one of these until the general election.</p> <p><b>Wren: </b>To mix Christopher’s sports metaphors, this debate felt like a scrum of 5-year-olds chasing a soccer ball around the field as the actual goal — distinguishing themselves from Trump — found itself rather lonesome.<br></p> <br><iframe style="max-width: 100%" width="1280" height="720" src="https://players.brightcove.net/1155968404/r1WF6V0Pl_default/index.html?videoId=6337958971112" frameborder="0"></iframe> <br> <p><b>Allison:</b> No. I suppose it is notable that members of Trump’s team once again showed up at a debate he wasn’t participating in (so it isn’t <i>utterly</i> irrelevant in their eyes), and his campaign spent the debate tweeting out unflattering photos of Chris Christie. Trump himself put out a Truth Social post afterward about Christie, while defending his own record. But I don’t see how much of anything said or done tonight could have done any serious damage to Trump’s standing.</p> <p><b>Shepard: </b>There are only two things that can hurt Trump at this point: his legal peril and early-state elections. A criminal conviction or a surprisingly weak performance in Iowa or New Hampshire could actually threaten his lead.</p> <p>But nothing that happened in the first two debates — or any subsequent ones, for that matter — will weaken Trump. What the debates will do is clarify the field of candidates other than Trump, in the event he does become vulnerable.</p> <h2 style="text-align: left">How will this debate change the trajectory of the race?</h2> <p><b>Shepard: </b>The next debate is six weeks away, but I wouldn’t be surprised if Haley is challenging DeSantis for second place by the time the candidates — at this point, almost certainly without Trump — meet again. Does that weaken Trump’s hold over the primary? No, but if this does become a race at some point, it means that DeSantis isn’t necessarily the most likely non-Trump option.</p> <p><b>Allison:</b> Frankly, there was a lack of enthusiasm across the board going into this debate. It felt like nothing more than a placeholder until the next one, when <i>maybe</i> there will be fewer candidates on stage, <i>maybe</i> they will finally get serious about making the case against Trump and <i>maybe</i> Trump himself will show (though that seems even less likely now).</p> <p>Here in beautiful Simi Valley, and in part due to the nature of the venue, there was next to no buzz ahead of time — no massive Ramaswamy gaggles outside his campaign bus like in Milwaukee, for example — and a smaller number of operatives walking around making their pitches to reporters. The candidates themselves only got a small fraction of the debate tickets as last time, just 10 each, according to multiple campaigns, which meant they left a lot of their surrogates behind. It was boring, it was lame. The candidates’ energy on stage left something to be desired. Amateur hour for the moderators.<br></p> <br> <img src="https://static.politico.com/e4/b0/5bd06c7c4c798b8a2b31e27ff3f7/20230927-gop-debate-philip-cheung-0001-new.jpg"> <br> <p>There were a few Trump zingers over his failure to show. But there was no meaningful takedown of the former president, and no indication that there will be any meaningful shift in the current field before the third debate.</p> <p><b>Wren: </b>It didn’t. If you’re a donor on the sidelines who watched this debate, I don’t see how you came away willing to throw any of these particular candidates money when so few of them had breakout moments.</p> <p><b>Goldenberg: </b>This debate will not change the trajectory of the race.</p> <p><b>Cadelago: </b>There will be more external and internal pressure on this still-large field to shrink, but doing so will take some candidates admitting to themselves the obvious: they don’t have a chance and should drop out.<br></p> <br>]]>
+      </content:encoded>
+    </item>
+    <item>
+      <title>GOP candidates bash Trump over Milley 'death' comment</title>
+      <link>https://www.politico.com/news/2023/09/28/gop-candidates-bash-trump-milley-comment-00118900</link>
+      <description>Trump was referring to a phone call Milley took after the Jan. 6 riots to reassure Chinese officials that the United States wasn’t under threat of an attack.</description>
+      <guid>https://www.politico.com/news/2023/09/28/gop-candidates-bash-trump-milley-comment-00118900</guid>
+      <pubDate>Thu, 28 Sep 2023 15:42:55 EST</pubDate>
+      <dc:creator>Matt Berg</dc:creator>
+      <dc:contributor>Matt Berg</dc:contributor>
+      <media:content type="application/octet-stream" url="https://static.politico.com/8a/dc/870e6d9548469dcb7210650bb73c/https-delivery-gettyimages.com/downloads/1179668641">
+        <media:credit scheme="urn:ebu">Mark Wilson/Getty Images</media:credit>
+        <media:title type="html">Donald Trump speaks as Mark Milley looks on after a briefing from senior military leaders in the Cabinet Room at the White House on Oct. 7, 2019.</media:title>
+        <media:thumbnail url="https://static.politico.com/8a/dc/870e6d9548469dcb7210650bb73c/https-delivery-gettyimages.com/downloads/1179668641"/>
+      </media:content>
+      <maz:template>core</maz:template>
+      <maz:modified>1695933775416</maz:modified>
+      <content:encoded>
+        <![CDATA[<img src="https://static.politico.com/8a/dc/870e6d9548469dcb7210650bb73c/https-delivery-gettyimages.com/downloads/1179668641"> <br> <p>A trio of GOP presidential candidates bashed former President Donald Trump on Thursday over his comments suggesting that the nation’s top-ranking military officer should be killed.</p> <p>Last Friday, Trump laid into Joint Chiefs Gen. Mark Milley on Truth Social, saying that the general “turned out to be a Woke train wreck who, if the Fake News reporting is correct, was actually dealing with China to give them a heads up on the thinking of the President of the United States.”</p> <p>Trump was referring to a <a href="https://www.politico.com/news/2021/09/28/milley-china-congress-hearing-514488" target="_blank" link-data="{&quot;linkText&quot;:&quot;phone call Milley took&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.politico.com/news/2021/09/28/milley-china-congress-hearing-514488&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14ad40008&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14ad40009&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">phone call Milley took</a> after the Jan. 6 riots to reassure Chinese officials that the United States wasn’t under threat of an attack. Several top Trump appointees were aware of his calls, Milley told Congress later that year.</p> <p>“This is an act so egregious that, in times gone by, the punishment would have been DEATH!” Trump added in his post.</p> <p>Speaking <a href="https://www.cbsnews.com/news/general-milley-responds-to-trump-social-media-post-60-minutes/" target="_blank" link-data="{&quot;linkText&quot;:&quot;with CBS&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.cbsnews.com/news/general-milley-responds-to-trump-social-media-post-60-minutes/&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14ad4000a&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14ad4000b&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">with CBS</a> Wednesday night, Milley said that he has “adequate safety precautions. I wish those comments had not been made, and I’ll take appropriate measures to ensure my safety and the safety of my family.”</p> <p>That striking remark from the general, who served closely by Trump’s side after he became Joint Chiefs chair in 2019, hearkens back to when former Vice President Mike Pence’s life was <a href="https://www.politico.com/news/2022/05/25/trump-expressed-support-hanging-pence-capitol-riot-jan-6-00035117" target="_blank" link-data="{&quot;linkText&quot;:&quot;seemingly threatened by his boss&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.politico.com/news/2022/05/25/trump-expressed-support-hanging-pence-capitol-riot-jan-6-00035117&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14ad4000c&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14ad4000d&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">seemingly threatened by his boss</a> during the storming of the Capitol in 2021.</p> <p>When the comparison was made on CNN this morning, Pence rebuked the former president.</p> <p>“There is no call for that kind of language directed toward someone who's worn the uniform of the United States and served with such distinction,” Pence said.</p> <p>Fresh off the second GOP presidential debate Wednesday night, other candidates also took aim at the frontrunner.</p> <p>Former New Jersey Gov. Chris Christie, the most outspoken Trump critic of GOP presidential contenders, had a harsher take, calling Trump an “absolute child” for the “reprehensible” remarks, while speaking on MSNBC this morning.</p> <p>Former Arkansas Gov. Asa Hutchinson also took aim at the GOP frontrunner.</p> <p>“To suggest that Gen. Milley should be executed is inexcusable and dangerous,” Hutchinson told POLITICO in a statement. “While some will excuse this latest outrage as Trump just being Trump, the fact is that his statement endangers people and is an insult to those who serve in the military.”</p> <p>POLITICO reached out to each of the candidates’ campaigns for comment, but only Hutchinson’s team sent a response. (Tech entrepreneur Vivek Ramaswamy couldn’t respond because he’s with his family, campaign spokesperson Tricia McLaughlin said.)</p> <p>The lack of response from others is indicative of how hesitant many of his opponents are to speak out against him on a regular basis.</p> <p>A Trump campaign spokesperson argued that candidates who do speak out on it are just looking for headlines.</p> <p>“Who are these people? Seems like they're just thirsty for attention,” spokesperson Steven Cheung told POLITICO.</p>]]>
+      </content:encoded>
+    </item>
+    <item>
+      <title>Trump’s attack on Milley fuels special counsel’s push for a gag order</title>
+      <link>https://www.politico.com/news/2023/09/29/trumps-attack-on-milley-fuels-special-counsels-push-for-a-gag-order-00119253</link>
+      <description>Donald Trump has unleashed a social media attack on Mark Milley, suggesting he should have been put to death for treason.</description>
+      <guid>https://www.politico.com/news/2023/09/29/trumps-attack-on-milley-fuels-special-counsels-push-for-a-gag-order-00119253</guid>
+      <pubDate>Fri, 29 Sep 2023 19:52:20 EST</pubDate>
+      <dc:creator>Kyle Cheney</dc:creator>
+      <dc:contributor>Kyle Cheney</dc:contributor>
+      <media:content type="image/jpeg" url="https://static.politico.com/bc/13/39ad8b2040cab8f5111f585a8c5d/election-2024-trump-california-24012.jpg">
+        <media:credit scheme="urn:ebu">Jae C. Hong/AP Photo</media:credit>
+        <media:title type="html">Donald Trump’s attacks on special counsel Jack Smith's office and on Judge Tanya Chutkan threaten to taint the upcoming trial or drive up dangerous threats.</media:title>
+        <media:thumbnail url="https://static.politico.com/bc/13/39ad8b2040cab8f5111f585a8c5d/election-2024-trump-california-24012.jpg"/>
+      </media:content>
+      <maz:template>core</maz:template>
+      <maz:modified>1696035632862</maz:modified>
+      <content:encoded>
+        <![CDATA[<img src="https://static.politico.com/bc/13/39ad8b2040cab8f5111f585a8c5d/election-2024-trump-california-24012.jpg"> <br> <p>Special counsel Jack Smith’s office argued Friday that Donald Trump’s recent attacks on Gen. Mark Milley and one of their own newly appointed prosecutors bolster their case to put a gag order on the former president ahead of his trial in Washington, D.C.</p> <p>In a <a href="https://s3.documentcloud.org/documents/24000428/trumpreply.pdf" target="_blank" link-data="{&quot;linkText&quot;:&quot;<u>22-page filing</u>&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://s3.documentcloud.org/documents/24000428/trumpreply.pdf&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14ad60006&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14ad60007&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}"><u>22-page filing</u></a>, senior assistant special counsel Molly Gaston said prosecutors rejected Trump’s claims that their proposed gag order was an attempt to silence him on the campaign trail. Rather, she said, it was an effort to prevent him from trying to make “use of his candidacy as a cover for making prejudicial public statements about this case.”</p> <p>“[T]here is no legitimate need for the defendant, in the course of his campaign, to attack known witnesses regarding the substance of their anticipated testimony,” Gaston wrote.</p> <p>The filing is prosecutors’ last word to U.S. District Court Judge Tanya Chutkan ahead of an Oct. 16 hearing on Smith’s proposed gag order. Since their original request, which was unsealed last week, Trump has unleashed a social media attack on Milley — suggesting he should have been put to death for treason — who is expected to be a witness in the case against him.</p> <p>“[N]o other criminal defendant would be permitted to issue public statements insinuating that a known witness in his case should be executed,” Gaston wrote. “This defendant should not be, either.”</p> <p>And after <a href="https://www.politico.com/news/2023/09/22/jack-smith-special-counsel-prosecutor-trump-00117736" target="_blank" link-data="{&quot;linkText&quot;:&quot;<u>POLITICO revealed</u>&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.politico.com/news/2023/09/22/jack-smith-special-counsel-prosecutor-trump-00117736&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14ad60008&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14ad60009&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}"><u>POLITICO revealed</u></a> Smith’s appointment of a longtime war crimes prosecutor to his team, Trump uncorked another attack on Smith’s office. Prosecutors cited that attack as a potential danger as well.</p> <p>Prosecutors say that Trump’s attacks are a form of witness intimidation and a way to taint the jury pool ahead of his highly anticipated trial, which Chutkan has scheduled for March 4. The judge has warned Trump to refrain from “inflammatory” comments about the case and suggested she could expedite his trial if they continue. Earlier this week, Chutkan <a href="https://www.cnn.com/2023/09/27/politics/tanya-chutkan-donald-trump-recusal-motion/index.html" target="_blank" link-data="{&quot;linkText&quot;:&quot;<u>denied Trump’s bid</u>&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.cnn.com/2023/09/27/politics/tanya-chutkan-donald-trump-recusal-motion/index.html&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14ad6000a&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14ad6000b&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}"><u>denied Trump’s bid</u></a> to remove her from the case.</p> <p>Smith’s team also says Trump’s attacks on their office and on the judge herself threaten to taint the upcoming trial or drive up dangerous threats.</p> <p>Prosecutors also sharply rejected efforts by some of Trump’s advisers to explain away some of his statements. They noted that after a Trump aide suggested the former president had purchased a firearm in South Carolina — a potential violation of federal law, since he’s under criminal indictment — his team later walked it back.</p> <p>“The defendant either purchased a gun in violation of the law and his conditions of release, or seeks to benefit from his supporters’ mistaken belief that he did so,” Smith’s team said.</p> <p>Smith’s office also rejected Trump’s argument that the indictment does not formally accuse Trump of having a role in the violence that unfolded on Jan. 6, instead accusing Smith of unfairly linking Trump to the riot in a brief public statement announcing the indictment last month.</p> <p>“[T]he indictment does in fact clearly link the defendant and his actions to the events of January 6,” Gaston wrote. “In short, the indictment alleges that the defendant’s actions, including his campaign of knowingly false claims of election fraud, led to the events of January 6.”</p>]]>
+      </content:encoded>
+    </item>
+    <item>
+      <title>Trump co-defendant pleads guilty in Georgia, becoming first to reach plea deal in election-subversion case</title>
+      <link>https://www.politico.com/news/2023/09/29/trump-georgia-plea-deal-bail-bondsman-00119232</link>
+      <description>Part of the plea deal for Scott Hall, a bail bondsman who breached election equipment, requires him to testify against other co-defendants.</description>
+      <guid>https://www.politico.com/news/2023/09/29/trump-georgia-plea-deal-bail-bondsman-00119232</guid>
+      <pubDate>Fri, 29 Sep 2023 16:48:47 EST</pubDate>
+      <dc:creator>Kyle Cheney and Josh Gerstein</dc:creator>
+      <dc:contributor>Kyle Cheney and Josh Gerstein</dc:contributor>
+      <media:content type="application/octet-stream" url="https://static.politico.com/d8/ac/310feee94ab7aff98e758ba9b536/https-delivery-gettyimages.com/downloads/1697758294">
+        <media:credit scheme="urn:ebu">David McNew/Getty Images</media:credit>
+        <media:title type="html">Donald Trump was not mentioned by name during Scott Hall’s plea hearing.</media:title>
+        <media:thumbnail url="https://static.politico.com/d8/ac/310feee94ab7aff98e758ba9b536/https-delivery-gettyimages.com/downloads/1697758294"/>
+      </media:content>
+      <maz:template>core</maz:template>
+      <maz:modified>1696025184380</maz:modified>
+      <content:encoded>
+        <![CDATA[<img src="https://static.politico.com/d8/ac/310feee94ab7aff98e758ba9b536/https-delivery-gettyimages.com/downloads/1697758294"> <br> <p>A defendant charged alongside former President Donald Trump in Georgia has pleaded guilty and agreed to cooperate with prosecutors. Scott Hall, a Georgia bail bondsman, is the first person to reach a plea deal in the case, in which Trump and 18 others were charged with racketeering conspiracy for their efforts to overturn the 2020 presidential election.</p> <p>Hall, 59, who was involved in a breach of election equipment, pleaded guilty Friday in Atlanta to five counts of conspiring to commit intentional interference with performance of election duties. The plea deal included an agreement to a sentence of five years of probation, a $5,000 fine and a letter of apology to the state.</p> <p>Part of the plea deal requires Hall to testify against others at future trials or hearings of “any co-defendants” in the election racketeering case. The felony charges against Hall were dropped as part of the agreement.</p> <p>Trump was not mentioned by name during Hall’s plea hearing, but a Fulton County prosecutor did mention co-defendant and former Trump attorney Sidney Powell as being involved in the alleged scheme to gain access to Dominion voting machines in Coffee County, Ga.</p> <p>Fulton County Superior Court Judge Scott McAfee indicated that Hall’s plea was scheduled hastily on Friday. A prosecutor said Hall provided a recorded statement about his involvement to the district attorney’s office earlier in the day.</p> <p>“This is not a matter that had been scheduled today, but I was informed by both parties that they would like to have an impromptu court hearing and I understand that this is a change of plea,” McAfee said at the outset of the court session Friday afternoon. During the 25-minute hearing, the judge accepted Hall’s guilty pleas and imposed the sentence of five-years probation agreed on by both sides.</p> <p>Hall <a href="https://www.fultonclerk.org/DocumentCenter/View/2108/CRIMINAL-INDICTMENT" target="_blank" link-data="{&quot;linkText&quot;:&quot;was charged&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.fultonclerk.org/DocumentCenter/View/2108/CRIMINAL-INDICTMENT&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14ad80002&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14ad80003&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">was charged</a> as part of the sweeping racketeering scheme alleged by Fulton County District Attorney Fani Willis against Trump, several of his top aides and a slew of Georgie GOP activists who aided Trump’s bid to overturn the results of the 2020 election. Hall was identified in the indictment as participating in an effort to access the voting machines and equipment in Coffee County — a post-election bid by Trump allies who were purportedly investigating allegations of voter fraud in hopes of reversing Joe Biden’s victory in the state.</p> <p>Hall was in touch with several of the other alleged co-conspirators around the time of the breach and also had contact with figures in Trump’s orbit. For example, the indictment notes that Hall had a 63-minute phone call with alleged co-conspirator Jeffrey Clark, then the head of the Justice Department’s Civil Division, on Jan. 2, 2021, to discuss the Georgia election.</p> <p>Under the deal, Hall is forbidden from speaking with the media until all trials related to the case are complete and may not be involved in any activities related to voting. Under Georgia law, he could be left without a criminal record if he successfully completes probation.</p>]]>
+      </content:encoded>
+    </item>
+    <item>
+      <title>Bob Menendez’s prosecutors are already grappling with some tough Supreme Court precedents</title>
+      <link>https://www.politico.com/news/2023/09/30/menendez-indictment-supreme-court-00119244</link>
+      <description>In a string of recent decisions, the justices have made it more difficult to prosecute public officials for corruption.</description>
+      <guid>https://www.politico.com/news/2023/09/30/menendez-indictment-supreme-court-00119244</guid>
+      <pubDate>Sat, 30 Sep 2023 07:00:00 EST</pubDate>
+      <dc:creator>Erica Orden</dc:creator>
+      <dc:contributor>Erica Orden</dc:contributor>
+      <media:content type="application/octet-stream" url="https://static.politico.com/a5/f7/ddebc1ff4ff9ba59b4fc5b967a9b/https-delivery-gettyimages.com/downloads/1483377164">
+        <media:credit scheme="urn:ebu">Chip Somodevilla/Getty Images</media:credit>
+        <media:title type="html">Sen. Bob Menendez is counting on the U.S. Supreme Court's increasingly narrow interpretations of public corruption to help him fight his federal indictment on charges of bribery.</media:title>
+        <media:thumbnail url="https://static.politico.com/a5/f7/ddebc1ff4ff9ba59b4fc5b967a9b/https-delivery-gettyimages.com/downloads/1483377164"/>
+      </media:content>
+      <maz:template>core</maz:template>
+      <maz:modified>1696097051189</maz:modified>
+      <content:encoded>
+        <![CDATA[<img src="https://static.politico.com/a5/f7/ddebc1ff4ff9ba59b4fc5b967a9b/https-delivery-gettyimages.com/downloads/1483377164"> <br> <p>NEW YORK — For all the fireworks in <a href="https://www.politico.com/news/2023/09/22/authorities-to-charge-u-s-sen-bob-menendez-and-wife-today-00117590" target="_blank" link-data="{&quot;linkText&quot;:&quot;the federal indictment of Sen. Bob Menendez&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.politico.com/news/2023/09/22/authorities-to-charge-u-s-sen-bob-menendez-and-wife-today-00117590&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14ada0000&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14ada0001&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">the federal indictment of Sen. Bob Menendez</a> — the gold bars, the shiny convertible, the stacks of cash — the case may ultimately hinge on something far less flashy: the Supreme Court’s increasingly narrow view of the nation’s anti-corruption laws.</p> <p>In recent years, a string of Supreme Court rulings has severely curtailed what counts as public corruption. Now, Menendez is hoping the court’s new legal landscape will help save him. The New Jersey Democrat, who <a href="https://www.politico.com/news/2023/09/27/menendez-pleads-not-guilty-to-corruption-charges-00118377" target="_blank" link-data="{&quot;linkText&quot;:&quot;pleaded not guilty Wednesday&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.politico.com/news/2023/09/27/menendez-pleads-not-guilty-to-corruption-charges-00118377&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14ada0002&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14ada0003&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">pleaded not guilty Wednesday</a>, has dodged indictments before while repeatedly getting reelected, and he has so far shrugged off growing calls for his resignation in light of the latest charges.</p> <p>Menendez’s prosecutors in the U.S. attorney’s office in Manhattan are well aware that virtually any public-corruption prosecution faces an uphill climb. They appear to have crafted their indictment with an eye toward a key Supreme Court precedent, in which the high court <a href="https://casetext.com/case/united-states-v-mcdonnell-19" target="_blank" link-data="{&quot;linkText&quot;:&quot;threw out the conviction of former Virginia Gov. Bob McDonnell&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://casetext.com/case/united-states-v-mcdonnell-19&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14ada0004&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14ada0005&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">threw out the conviction of former Virginia Gov. Bob McDonnell</a>. And the office has first-hand experience with another important precedent dictated by the court: the <a href="https://www.supremecourt.gov/opinions/22pdf/21-1158_p8k0.pdf" target="_blank" link-data="{&quot;linkText&quot;:&quot;overturned conviction of an aide to former New York Gov. Andrew Cuomo&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.supremecourt.gov/opinions/22pdf/21-1158_p8k0.pdf&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14ada0006&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14ada0007&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">overturned conviction of an aide to former New York Gov. Andrew Cuomo</a>.</p> <p>“The government’s indictment lays bare remarkable evidence of public corruption,” former federal prosecutor Harry Sandick said of the Menendez case. “The only question for the government to answer is whether these amazing charges fit within the scope of the law of public corruption as the Supreme Court has defined it in recent years. In particular, were these gifts given to Menendez in exchange for ‘official acts,’ which is a narrowly defined term.”</p> <p><br>The high court homed in on “official acts” in 2016 when it invalidated the conviction of McDonnell, a Republican who was accused of taking bribes to promote a tobacco company’s products. And earlier this year, in the case of the Cuomo aide, the court restricted the use of a federal statute that makes it a crime to deprive the public of “honest services.” That statute is among the laws Menendez is accused of violating.<br></p> <br> <img src="https://static.politico.com/9f/c2/99b1fff348c294c052d278a958ce/2023-09-30-mcdonnell-scotus-ap-773.jpg"> <br> <p>Other recent Supreme Court rulings, such as a <a href="https://www.supremecourt.gov/opinions/19pdf/18-1059_e2p3.pdf" target="_blank" link-data="{&quot;linkText&quot;:&quot;2020 decision throwing out the convictions of two people involved in New Jersey’s “Bridgegate” scandal&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.supremecourt.gov/opinions/19pdf/18-1059_e2p3.pdf&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14adb0000&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14adb0001&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">2020 decision throwing out the convictions of two people involved in New Jersey’s “Bridgegate” scandal</a>, have followed a similar pattern. The justices have said they are simply applying the text of the public corruption laws and seeking to avoid criminalizing ordinary activity like lobbying. Overzealous prosecutors, the court has suggested in mostly unanimous decisions, have misused those laws to target political wheeling and dealing that may be unsavory but isn’t necessarily unlawful.</p> <p>In the McDonnell ruling, Chief Justice John Roberts wrote that only “official acts,” or decisive government actions, such as introducing a piece of legislation or otherwise influencing policy, could be considered part of a corruption scheme. What Roberts described as routine political favors, such as arranging a meeting or making a phone call, could not.</p> <p>The issue for Menendez’s prosecutors is whether the conduct described in the indictment is legally considered “official acts” that he completed in exchange for bribes — or whether it’s more informal activity, similar to the services that elected representatives customarily provide to constituents or political allies outside official channels.</p> <p>Among the steps Menendez allegedly took: contacting an official at the U.S. Department of Agriculture as he sought to preserve the ability of another co-defendant’s company to be the exclusive halal certifier for U.S. food exports to Egypt, contacting a supervisor in the New Jersey attorney general’s office in an attempt to influence two pending criminal matters and urging President Joe Biden to nominate a U.S. attorney in New Jersey whom Menendez believed he could manipulate.</p> <p>Prosecutors said Menendez also conveyed to Egyptian officials, through intermediaries, that “he would approve or remove holds on foreign military financing and sales of military equipment to Egypt” by virtue of his leadership role on the Senate Foreign Relations Committee.</p> <p>Prosecutors pursuing Menendez appear to have had the McDonnell decision in mind when crafting the language of the charging documents.</p> <p>In the indictment, prosecutors accuse Menendez of taking bribes in exchange for “a series of official acts and breaches of official duty” and specify that he used his “power and influence” as a senator to perform favors for three businessmen indicted alongside the senator and his wife.</p> <p>In describing Menendez’s contact with the USDA official, for example, prosecutors say he “pressured” the individual — a word drawn from the McDonnell decision, in which Roberts wrote that, “If an official sets up a meeting, hosts an event, or makes a phone call on a question or matter that is or could be pending before another official, that could serve as evidence of an agreement to take an official act.”</p> <p>“A jury could conclude, for example, that the official was attempting to pressure or advise another official on a pending matter,” Roberts wrote. “And if the official agreed to exert that pressure or give that advice in exchange for a thing of value, that would be illegal.”</p> <p>The Manhattan U.S. attorney’s office — and Menendez himself — appeared to immediately confront the question of whether his conduct could meet the bar set by the McDonnell decision.</p> <p>“Constituent service is part of any legislator’s job — Sen. Menendez is no different,” U.S. Attorney Damian Williams noted when speaking to reporters last week.</p> <p>But, he suggested, Menendez’s behavior went beyond constituent service, pointing out that Menendez detailed on his own Senate website that he wasn’t permitted to compel an agency to act in someone’s favor, influence a private business matter or get involved in a criminal case.</p> <br> <img src="https://static.politico.com/e5/fc/ce18f3f84cccaa84fb4fa09e7b1b/joe-percoco-ap-900.jpg"> <br> <p>“We allege that behind the scenes, Sen. Menendez was doing those things for certain people — the people who were bribing him and his wife,” Williams said.</p> <p>For his part, Menendez said in a statement released hours after his indictment was unsealed: “They have misrepresented the normal work of a Congressional office.”</p> <p>Prosecutors also must contend with the decision the Supreme Court handed down this May in the case of Joseph Percoco, a longtime aide to Cuomo who temporarily left his government position to work as the governor’s campaign manager while accepting money to help a New York real-estate developer with a lucrative state project.</p> <p>Justice Samuel Alito’s opinion for the court limited the circumstances in which private citizens can be convicted of depriving the government of “honest services.” In a concurring opinion, Justice Neil Gorsuch also suggested that the entire honest-services fraud statute should be thrown out, writing: “To this day, no one knows what ‘honest-services fraud’ encompasses.”</p> <p>Menendez and his four co-defendants, including his wife, are charged with conspiracy to commit honest services fraud. Prosecutors allege they, along with the senator, “devise[d] a scheme and artifice to defraud, and to deprive the public of its intangible right to Robert Menendez’s honest services.”</p> <p>Former federal public corruption prosecutors predicted the Percoco ruling would likely become a focus of pretrial litigation.</p> <p>None of this, however, is likely a surprise for those supervising the Menendez case. The very office that is prosecuting Menendez brought the original case against Percoco, albeit under prior leadership. And the office’s current criminal division chief, Daniel Gitner, represented one of Percoco’s co-defendants when Gitner worked in private practice.</p> <p>The U.S. attorney himself has already dealt with the fallout from the Supreme Court’s narrowing of corruption laws. Williams was a member of the prosecution team that worked on a trial heavily influenced by the McDonnell ruling: the retrial of Sheldon Silver, the once-powerful New York State Assembly speaker who was indicted on federal corruption charges.</p> <p>Silver’s initial conviction, in 2015, was overturned by a federal appeals court as a result of the McDonnell decision, with the appeals court saying the district judge’s explanation of an official action was too broad.</p> <p>Williams helped retry the case in 2018, and another member of that prosecution team, Tatiana Martins, said the Menendez prosecutors — and Williams in particular — surely focused closely on how to proceed successfully in light of the McDonnell ruling.</p> <p>“McDonnell was something we were very sensitive to, so Damian will certainly have read this indictment and signed off on this in a very detailed way,” said Martins, who subsequently became chief of the office’s public corruption unit and is now a partner at Davis Polk &amp; Wardwell LLP. “I’m sure McDonnell was top of mind for him.”</p> <p>Silver was reconvicted, although that conviction was partially overturned.<br></p>]]>
+      </content:encoded>
+    </item>
+    <item>
+      <title>Judge shoots down bid by four Trump co-defendants to move Georgia criminal charges to federal court</title>
+      <link>https://www.politico.com/news/2023/09/29/jeff-clark-georgia-election-case-00119172</link>
+      <description>Former Justice Department official Jeffrey Clark and three GOP activists who falsely posed as presidential electors all lost their bids to transfer the case.</description>
+      <guid>https://www.politico.com/news/2023/09/29/jeff-clark-georgia-election-case-00119172</guid>
+      <pubDate>Fri, 29 Sep 2023 14:12:53 EST</pubDate>
+      <dc:creator>Kyle Cheney</dc:creator>
+      <dc:contributor>Kyle Cheney</dc:contributor>
+      <media:content type="image/jpeg" url="https://static.politico.com/08/0e/69419a2a48bfa19b07fd718a3083/georgia-election-indictment-50462.jpg">
+        <media:credit scheme="urn:ebu">Susan Walsh/AP Photo</media:credit>
+        <media:title type="html">Jeff Clark is one of five Trump co-defendants who sought to move his case to federal court.</media:title>
+        <media:thumbnail url="https://static.politico.com/08/0e/69419a2a48bfa19b07fd718a3083/georgia-election-indictment-50462.jpg"/>
+      </media:content>
+      <maz:template>core</maz:template>
+      <maz:modified>1696028821430</maz:modified>
+      <content:encoded>
+        <![CDATA[<img src="https://static.politico.com/08/0e/69419a2a48bfa19b07fd718a3083/georgia-election-indictment-50462.jpg"> <br> <p>A federal judge in Georgia said Friday that four of Donald Trump's co-defendants in a sweeping racketeering indictment failed to show that they were acting at the Trump White House's behest when they took steps aimed at overturning the 2020 election.</p> <p>U.S. District Court Judge Steve Jones said the alleged co-conspirators — former Justice Department official Jeffrey Clark and three GOP activists who falsely posed as presidential electors — had all failed to present evidence that the actions they took had been blessed or encouraged by Trump. That determination gutted their attempts to claim they were acting with federal government permission when they took the actions that resulted in their criminal charges.</p> <p>The four Trump allies want to transfer their charges to federal court, where they intend to present evidence that they were carrying out federal responsibilities and are therefore immune from the prosecution brought by Fulton County District Attorney Fani Willis. But the ruling by Jones, an Obama appointee, underscores a fundamental weakness in that claim: They presented no clear evidence that Trump asked them to take the steps that they took in the final frenzied weeks of his presidency.</p> <p>The rulings represent a golden sombrero for the Trump co-defendants who attempted to move their cases into federal court, part of a broader strategy to neutralize the legal threats they face. In addition to the four defendants whom Jones denied on Friday, the judge earlier this month <a href="https://www.politico.com/news/2023/09/08/judge-refuses-to-move-prosecution-of-mark-meadows-to-federal-court-00114817" target="_blank" link-data="{&quot;cms.site.owner&quot;:{&quot;_ref&quot;:&quot;0000014b-3270-d4f3-a3cb-f3ffa8610000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff4161000e&quot;},&quot;cms.content.publishDate&quot;:1696027741710,&quot;cms.content.publishUser&quot;:{&quot;_ref&quot;:&quot;00000186-eafc-d959-adcf-ebfeb3350005&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;cms.content.updateDate&quot;:1696027741710,&quot;cms.content.updateUser&quot;:{&quot;_ref&quot;:&quot;00000186-eafc-d959-adcf-ebfeb3350005&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;originalTemplate&quot;:false,&quot;link&quot;:{&quot;originalTemplate&quot;:false,&quot;attributes&quot;:[],&quot;target&quot;:&quot;NEW&quot;,&quot;url&quot;:&quot;https://www.politico.com/news/2023/09/08/judge-refuses-to-move-prosecution-of-mark-meadows-to-federal-court-00114817&quot;,&quot;_id&quot;:&quot;0000018a-e321-d56c-abfa-ef6d83020001&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;linkText&quot;:&quot;rejected a similar bid&quot;,&quot;_id&quot;:&quot;0000018a-e321-d56c-abfa-ef6d83020000&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">rejected a similar bid</a> by Trump's former chief of staff, Mark Meadows, saying that Meadows had failed to show his efforts to keep Trump in power fit within the scope of his federal duties.</p> <p>Meadows has appealed the ruling, and his case is moving swiftly through the 11th Circuit Court of Appeals. But the defeats in Jones' court suggest an uphill climb for Trump's co-defendants. Indeed, Trump himself passed Thursday on attempting to move his case to federal court, suggesting he's satisfied that the state-court judge overseeing the case, Scott McAfee, will carefully consider his claims of federal immunity.</p> <p>Clark is charged for his effort to draft and disseminate a letter in late December 2020 encouraging state legislatures — in a handful of states won by Joe Biden — to convene emergency sessions and consider whether to appoint Trump electors instead. Clark argued to Jones that he drafted the letter as part of a bid to advise Trump and noted that it was never ultimately sent. But Jones said Clark failed to provide evidence that Trump was even aware of the effort until just before it fizzled.</p> <p>“Other than his counsel’s own vague and uncertain assertions, the Court has no evidence that the President directed Clark to work on election-related matters generally or to write the December 28 letter to the Georgia State Officials on their election procedures,” Jones wrote in a <a href="https://s3.documentcloud.org/documents/23999831/clarkruling.pdf" target="_blank" link-data="{&quot;linkText&quot;:&quot;31-page opinion&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://s3.documentcloud.org/documents/23999831/clarkruling.pdf&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14ade0000&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14ade0001&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">31-page opinion</a>. “No evidence in the Record definitively shows that the President directed Clark to write the letter,” he continued. “Instead, the evidence before this Court does not show the President’s involvement in this letter specifically until the January 3 meeting where the President decided not to send it to the Georgia officials.”</p> <p>Clark argues that his efforts to provide advice to Trump — even if that advice was ultimately rejected — can’t be the basis of a criminal case. But Jones found that Clark failed to present evidence that his work on election-related matters was part of the scope of his government responsibilities. Clark’s DOJ supervisors have publicly testified that Clark was operating far outside his job responsibilities when he spearheaded the drafting of the Dec. 28 letter.</p> <p>Clark spent weeks pressing his superiors to sign and send the letter and was ultimately rebuffed. The fight culminated in an early January 2021 Oval Office meeting when Trump strongly considered elevating Clark to acting attorney general. He ultimately backed down amid a mass resignation threat by top DOJ and White House officials.</p> <p>Despite Clark’s claim that Trump authorized him to work on election-related matters, Jones said Clark showed no evidence of such a directive.</p> <p>The three false electors — David Shafer, Cathy Latham and Shawn Still — all contended that Trump's attorneys had directed them to convene and sign false paperwork claiming to be legitimate presidential electors. Their signatures, which they said were meant to preserve Trump's efforts to legally challenge the results of the 2020 election in Georgia, would later be used as part of a pressure campaign by Trump against his vice president, Mike Pence. But Jones said the three GOP elector nominees had failed to show that Trump's attorneys were acting on behalf of the federal government. Rather they were advocating for his reelection via private litigation.</p> <p>"Private litigation is 'unofficial conduct' and falls outside of the ambit of the President’s exercise of executive power," Jones wrote in Shafer's <a href="https://storage.courtlistener.com/recap/gov.uscourts.gand.319434/gov.uscourts.gand.319434.27.0.pdf" target="_blank" link-data="{&quot;linkText&quot;:&quot;36-page opinion&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://storage.courtlistener.com/recap/gov.uscourts.gand.319434/gov.uscourts.gand.319434.27.0.pdf&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14ade0002&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14ade0003&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">36-page opinion</a>, citing the precedent related to civil litigation against Bill Clinton. He issued similar rulings for <a href="https://storage.courtlistener.com/recap/gov.uscourts.gand.319599/gov.uscourts.gand.319599.26.0.pdf" target="_blank" link-data="{&quot;linkText&quot;:&quot;Latham&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://storage.courtlistener.com/recap/gov.uscourts.gand.319599/gov.uscourts.gand.319599.26.0.pdf&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14ade0004&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14ade0005&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">Latham</a> and <a href="https://storage.courtlistener.com/recap/gov.uscourts.gand.319576/gov.uscourts.gand.319576.31.0.pdf" target="_blank" link-data="{&quot;linkText&quot;:&quot;Still&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://storage.courtlistener.com/recap/gov.uscourts.gand.319576/gov.uscourts.gand.319576.31.0.pdf&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14ade0006&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14ade0007&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">Still</a>.</p> <p>Jones also rejected the electors' attempt to compare their actions to similar steps taken by Hawaii Democrats in the aftermath of the 1960 election. Richard Nixon had initially seemed to win the state by an eyelash, and the governor certified his victory. But a recount showed that John F. Kennedy narrowly won, and a state judge later ruled in favor of Democrats' challenge to the results. But Jones noted that there's simply no evidence that the Democratic electors were acting under federal authority in 1960 when they met to cast contingent ballots. And the state judge, he noted, did not reference their actions in his ultimate ruling.</p>]]>
+      </content:encoded>
+    </item>
+    <item>
+      <title>White House prepares to fight for Ukraine aid after shutdown averted</title>
+      <link>https://www.politico.com/news/2023/09/30/biden-administration-congress-government-shutdown-deal-ukraine-aid-00119296</link>
+      <description>The president signed the bill after he and his team kept tabs, but did not overly influence, House Democratic votes for the measure.</description>
+      <guid>https://www.politico.com/news/2023/09/30/biden-administration-congress-government-shutdown-deal-ukraine-aid-00119296</guid>
+      <pubDate>Sat, 30 Sep 2023 18:05:34 EST</pubDate>
+      <dc:creator>Jennifer Haberkorn, Jonathan Lemire and Sam Stein</dc:creator>
+      <dc:description>Jonathan Lemire is POLITICO's White House Bureau Chief.</dc:description>
+      <dc:contributor>Jennifer Haberkorn, Jonathan Lemire and Sam Stein</dc:contributor>
+      <media:content type="image/jpeg" url="https://static.politico.com/64/19/ef7fce8e4207a2930825353d1fe7/ap23264754638810.jpg">
+        <media:credit scheme="urn:ebu">Evan Vucci/AP Photo</media:credit>
+        <media:title type="html">President Joe Biden (right) and Ukrainian President Volodymyr Zelenskyy (left) walk to the Oval Office of the White House on Sept. 21.</media:title>
+        <media:thumbnail url="https://static.politico.com/64/19/ef7fce8e4207a2930825353d1fe7/ap23264754638810.jpg"/>
+      </media:content>
+      <maz:template>core</maz:template>
+      <maz:modified>1696160755841</maz:modified>
+      <content:encoded>
+        <![CDATA[<img src="https://static.politico.com/64/19/ef7fce8e4207a2930825353d1fe7/ap23264754638810.jpg"> <br> <p>With minutes to spare, President Joe Biden signed a stopgap funding bill Saturday to avert a shutdown and keep the government open for 45 days. </p> <p>In doing so, he capped a chaotic 24 hours that riveted much of Washington but left one of the White House’s top priorities, aid for Ukraine, in serious jeopardy.</p> <p>Like others in the nation’s capital, the Biden White House had been caught off guard Saturday morning when Speaker Kevin McCarthy abruptly reversed course and announced that he would bring a clean, stop gap bill to fund the government through November 17, 2023.</p> <p>But aides weren’t terribly surprised. They had assumed the government shutdown showdown would end this way at some point — with the main question being whether McCarthy would take his lumps before or after the funding deadline.</p> <p>They weren’t displeased with the outcome either. The bill didn’t just fund the government, it also included $16 billion in disaster relief and, as one White House official noted, avoids “any version of the deep cuts to essential domestic programs that were proposed in the past few days.”</p> <p>But the final measure did not include aid for Ukraine, and its absence was not just a blow for Biden but to Volodymyr Zelenskyy too. The Ukrainian president had just met with the president and lawmakers last week to once again make the case for additional funds for Kyiv’s defense against Moscow.<br></p> <br> <p>Inside the administration, aides attempted to downplay the exclusion. “Speaker McCarthy has stated his support for aid to Ukraine,” the White House official said, adding that they expected him to bring a separate bill to the floor “shortly.”</p> <p>And Biden too stressed his expectation that there would be another attempt to pass Ukraine aid in the near term.</p> <p>“While the Speaker and the overwhelming majority of Congress have been steadfast in their support for Ukraine, there is no new funding in this agreement to continue that support,” Biden said in a statement. “We cannot under any circumstances allow American support for Ukraine to be interrupted. I fully expect the Speaker will keep his commitment to the people of Ukraine and secure passage of the support needed to help Ukraine at this critical moment.” </p> <p>How much of that was spin, wishcasting, or solid intel was hard to tell. No one in the White House would say they received an actual assurance from McCarthy that he’d bring a measure up for a vote. Instead, two administration officials noted that McCarthy has never himself said he wouldn’t support aid to Ukraine. The view from 1600 Pennsylvania Ave. was that the speaker couldn’t include it in a government funding bill, lest he incur a full bore insurrection from within his party. But that didn’t mean he couldn’t push it as a separate matter.<br></p> <br> <p>Senate Majority Leader Chuck Schumer made assurances that funding for Ukraine aid remains a priority.</p> <p>“We will not stop fighting for more economic and security assistance for Ukraine. Majorities in both parties support Ukraine aid, and doing more is vital for America’s security and for democracy around the world,” he said after the Senate’s passage.</p> <p>There is certainly some Republican appetite to see that happen, too.</p> <p>"Most Senate Republicans remain committed to helping our friends on the front lines," Minority Leader Mitch McConnell said earlier in the night. And Sen. Jim Risch (R-Idaho), the ranking member of the Senate Foreign Relations Committee, <a href="https://x.com/jonathantamari/status/1708197233588355534?s=46&amp;t=ZblvrXop0ozb92dtnKfhHA" target="_blank" link-data="{&quot;linkText&quot;:&quot;said he expected&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://x.com/jonathantamari/status/1708197233588355534?s=46&amp;t=ZblvrXop0ozb92dtnKfhHA&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14ae10000&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14ae10001&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">said he expected</a> Ukraine aid to be included in the full year appropriations that Congress is set to complete later this year.</p> <p>But the House GOP is a different beast. McCarthy’s office didn’t offer any response to a request for comment. However, <a href="https://www.politico.com/live-updates/2023/09/30/congress/ukraine-aid-outlook-00119294" target="_blank" link-data="{&quot;linkText&quot;:&quot;POLITICO reported on Saturday&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.politico.com/live-updates/2023/09/30/congress/ukraine-aid-outlook-00119294&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14ae10002&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14ae10003&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">POLITICO reported on Saturday</a> that he had been open to including Ukraine aid in the stopgap funding bill but was unable to finalize language in time.</p> <p>As the bill headed to the Senate floor Saturday evening, there were widespread expectations on Capitol Hill that a Ukraine-related vote would occur next week, given deep support in the Senate.</p> <p>House Minority Leader Hakeem Jeffries, when asked about the lack of fresh Ukraine money in the bill, said “we have to get to work on this issue” and suggested there would be a vote as soon as Monday.</p> <p>“House Republicans will have a choice in the next few days when we reconvene on Monday.</p> <p>Are they going to stand up for freedom, democracy and truth and the Ukrainian people, or will they continue to bend the knee to the pro-Putin caucus in the House Republican conference?” he said in a post-House vote news conference Saturday.</p> <p>As news of the clean stopgap bill’s components emerged on Saturday morning, the White House kept in touch with Democrats on the Hill, monitoring (like them) the specific components of the legislative language. There was some intrigue over whether the measure authorized — or, more precisely, did not prevent — a cost of living adjustment for the salaries of congressional members. There also was some anxiety that House GOP leadership was trying to jam something through the chamber without giving lawmakers time to read it.</p> <p>But, in the end, there were no readily visible poison pills. The White House kept its distance from the actual whip count operation, staying firm in its goal to keep Biden out of the process. Officials have insisted that the president brokered a funding deal with the speaker back in the spring and would not revisit that agreement.</p> <p>There was no time to issue a formal Statement of Administration Policy, as is standard on major bills. Rank-and-file House Democrats got no guidance on the White House’s position, according to several people granted anonymity to discuss what would have been private discussions.</p> <p>But the silence implied that the Biden administration didn’t oppose the bill, either. In the end, more than 200 House Democrats ended up backing the measure.</p> <p><i>Myah Ward and Eun Kyung Kim contributed to this report.</i></p>]]>
+      </content:encoded>
+    </item>
+    <item>
+      <title>Dems pressure White House to change economic message</title>
+      <link>https://www.politico.com/news/2023/09/29/white-house-bidenomics-failure-00118949</link>
+      <description>Democrats are loving the Biden economy. They're less certain about his economic message.</description>
+      <guid>https://www.politico.com/news/2023/09/29/white-house-bidenomics-failure-00118949</guid>
+      <pubDate>Fri, 29 Sep 2023 04:00:00 EST</pubDate>
+      <dc:creator>Adam Cancryn and Holly Otterbein</dc:creator>
+      <dc:contributor>Adam Cancryn and Holly Otterbein</dc:contributor>
+      <media:content type="application/octet-stream" url="https://static.politico.com/c7/ad/fd0ae25746ffbb9e5a0420623b64/https-delivery-gettyimages.com/downloads/1601908725">
+        <media:credit scheme="urn:ebu">Andrew Caballero-Reynolds/AFP/Getty Images</media:credit>
+        <media:title type="html">The administration’s case for patience is no longer masking the angst within the party that "Bidenomics" as a brand is falling flat — and perhaps is a microcosm of larger obstacles facing the coming campaign.</media:title>
+        <media:thumbnail url="https://static.politico.com/c7/ad/fd0ae25746ffbb9e5a0420623b64/https-delivery-gettyimages.com/downloads/1601908725"/>
+      </media:content>
+      <maz:template>core</maz:template>
+      <maz:modified>1695994563385</maz:modified>
+      <content:encoded>
+        <![CDATA[<img src="https://static.politico.com/c7/ad/fd0ae25746ffbb9e5a0420623b64/https-delivery-gettyimages.com/downloads/1601908725"> <br> <p>President Joe Biden placed a big bet that he could sell an improving economy under the banner of “Bidenomics.”</p> <p>Three months later, some allied Democrats fear he’s made a serious misstep.</p> <p>Several top Biden allies have privately raised concerns about the phrase to the White House, according to two people familiar with the backchanneling.</p> <p>And Rep. <a href="https://directory.politicopro.com/member/193559" data-person-id="193559" link-data="{&quot;cms.site.owner&quot;:{&quot;_ref&quot;:&quot;0000014b-3270-d4f3-a3cb-f3ffa8610000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff4161000e&quot;},&quot;cms.content.publishDate&quot;:1695946243098,&quot;cms.content.publishUser&quot;:{&quot;_ref&quot;:&quot;00000187-1473-d989-a7a7-bfffa9da0000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;cms.content.updateDate&quot;:1695946243098,&quot;cms.content.updateUser&quot;:{&quot;_ref&quot;:&quot;00000187-1473-d989-a7a7-bfffa9da0000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;originalTemplate&quot;:false,&quot;member&quot;:&quot;{\&quot;identifier\&quot;:\&quot;193559\&quot;,\&quot;url\&quot;:\&quot;https://directory.politicopro.com/member/193559\&quot;,\&quot;preferredName\&quot;:\&quot;Rep. Steven Horsford (D-NV)\&quot;,\&quot;isCommittee\&quot;:false}&quot;,&quot;text&quot;:&quot;Steven Horsford&quot;,&quot;url&quot;:&quot;https://directory.politicopro.com/member/193559&quot;,&quot;personId&quot;:&quot;193559&quot;,&quot;_id&quot;:&quot;0000018a-de45-dd68-a3cf-dfd5ee490000&quot;,&quot;_type&quot;:&quot;353fe80b-e1b5-3663-85ca-add066ecafc0&quot;}">Steven Horsford</a>, who chairs the Congressional Black Caucus, said in an interview this week that he’s warned the White House that the Bidenomics brand is built on shaky ground. He believes it advances a message that wrongly centers the conversation on the president and his electoral ambitions rather than the voters who stand to gain from the administration’s economic accomplishments.<br></p> <br><iframe style="max-width: 100%" width="1280" height="720" src="https://players.brightcove.net/1155968404/r1WF6V0Pl_default/index.html?videoId=6331203109112" frameborder="0"></iframe> <br> <p>“With all due respect to the president, to the White House, this is not so much about them as it is the people who are benefiting by the policies that they came out and demanded,” said Horsford (D-Nev.). “We have to do a better job framing this not so much for one person — for the office of the presidency — but for the people.”</p> <p>Their worries are underscored by a slew of polling showing that the economic recovery the White House has sought to spotlight as a triumph is not making a dent in the public’s psyche. Most Americans are still skeptical the U.S. is in an upturn, let alone one resilient enough to last much longer. The rising cost of living remains a dominant theme in voters’ minds, crowding out major gains in jobs and wages. And so far, the Bidenomics drumbeat that began earlier this summer has yet to prove it can change their minds.<br></p> <br> <p>“At this point, Bidenomics doesn’t really have strong answers to people’s biggest worries,” said Will Marshall, president of the Progressive Policy Institute, a centrist Democratic think tank. “There ought to be a lot of thinking in the White House now about changes in the way they present their case for the economic good that this administration has done.”</p> <p>Inside the White House, aides have largely dismissed Democrats’ fears as premature and overblown, arguing it’s far too early to judge a messaging strategy designed to play out over the yearlong run-up to the 2024 election. They remain confident that, after winning the presidency and then defying predictions of a midterm wipeout, they have a better read on the national mood than their critics.</p> <p>“Bidenomics is the president's economic agenda and it is strongly supported by the American people," said White House spokesperson Michael Kikukawa. "That work and our message build on what the midterms and recent special elections proved: Americans favor the president's vision for growing the economy from the middle out and the bottom up over trickle-down MAGAnomics."</p> <p>Americans are just beginning to reap the rewards of Biden’s economic agenda, officials said. Consumer spending continues to rise, signaling greater confidence in the economy’s stability than people may be willing to admit.</p> <p>Perhaps most crucially, Biden officials believe voters don’t yet see the issue as a choice between Biden’s economic vision and the policies of former President Donald Trump and his GOP allies. Sharpening that contrast will prove critical in changing Americans’ attitudes over the next several months, they said.<br></p> <br><iframe style="max-width: 100%" width="1280" height="720" src="https://players.brightcove.net/1155968404/r1WF6V0Pl_default/index.html?videoId=6336985341112" frameborder="0"></iframe> <br> <p>"Like they did in 2022, Americans will face a choice between MAGA Republicans whose agenda serves the rich and powerful, and Joe Biden, whose agenda serves the middle class," said Biden campaign spokesperson Kevin Munoz, highlighting a pair <a href="https://www.youtube.com/watch?v=3gEj5lLcF34&amp;feature=youtu.be" target="_blank" link-data="{&quot;linkText&quot;:&quot;of early ads&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.youtube.com/watch?v=3gEj5lLcF34&amp;feature=youtu.be&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14ae60000&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14ae60001&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">of early ads</a> that <a href="https://www.youtube.com/watch?v=4D70OLEpaN8&amp;feature=youtu.be" target="_blank" link-data="{&quot;linkText&quot;:&quot;spotlight individual voters&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.youtube.com/watch?v=4D70OLEpaN8&amp;feature=youtu.be&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14ae60002&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14ae60003&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">spotlight individual voters</a>. "That strategy worked then, and it will again in 2024."</p> <p>The administration has increasingly leaned into that contrast in recent weeks, emphasizing GOP proposals to cut taxes for the wealthy and roll back popular drug pricing moves. Bidenomics, top aides believe, gives the president a shorthand for comparing his various achievements against Republicans' unpopular policies.</p> <p>"It’s important to have a unifying theme and a vision that we’re explaining and that all these policies fit within,” said one longtime Biden aide, waving off strategy concerns as “bedwetting and Monday morning quarterbacking” from nervous Democrats. “The president didn’t win in 2020 adjusting his concern every day to the latest concern on cable news.”</p> <p>But the administration’s case for patience is no longer masking the angst within the party that Bidenomics as a brand is falling flat — and perhaps is a microcosm of larger obstacles facing the coming campaign. An administration with accomplishments to sell has struggled to do so. A president who wants more credit for his work may, Democrats worry, be alienating voters by appearing insulated from their real life struggles.<br></p> <br> <p>In more than a dozen interviews across the party, Democrats offered various defenses and diagnoses of the administration’s messaging strategy and what may need to change. But nearly all acknowledged that the Bidenomics messaging blitz has failed to brighten voters’ view of the economy to date. Some now bemoan that the White House has tied itself so closely to a future economic trajectory it can’t really affect and certainly can’t control.</p> <p>“I’ve never understood why you would brand an economy in your name when the economy hasn’t fully recovered yet,” said Michael LaRosa, a former spokesperson for first lady Jill Biden. “People need to be able to see and feel an economy in their own personal bank accounts. And it doesn’t change no matter how loud you scream the economy is better.”<br></p> <br><iframe style="max-width: 100%" width="1280" height="720" src="https://players.brightcove.net/1155968404/r1WF6V0Pl_default/index.html?videoId=6330247913112" frameborder="0"></iframe> <br> <p>The White House’s inability to gain more credit has confounded many Democrats. They believe Biden’s ability to steer the nation out of the pandemic and into an era of wage gains and near-record-low unemployment should be paying major political dividends.</p> <p>Instead, most polling still shows clear majorities remain unhappy with the overall state of the economy and inflation in particular. A <a href="https://www.documentcloud.org/documents/23990176-230239-nbc-september-2023-poll_for-release-92423" target="_blank" link-data="{&quot;linkText&quot;:&quot;recent NBC News poll&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.documentcloud.org/documents/23990176-230239-nbc-september-2023-poll_for-release-92423&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14ae60004&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14ae60005&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">recent NBC News poll</a> found fewer than 4 in 10 approve of the president’s handling of the economy. And though 55 percent said they were satisfied with their own financial situation, that figure tied a record low for the poll question dating back to 1994.</p> <p>“The place where economic confidence is faltering most is with the base of the Democratic Party — so it’s among young people, among African Americans and Latinos,” said Republican pollster Micah Roberts, a partner at Public Opinion Strategies who handled the economic questions in the bipartisan NBC poll. “There’s a disconnect between the two or three months of [the Bidenomics] campaign and what people are actually feeling.”</p> <p>Interviews with a diverse group of striking autoworkers and other voters in the critical battleground state of Michigan this week highlighted Biden's troubles: Many of them had voted for him in 2020 and appreciate that he joined the picket line Tuesday. But several were frustrated with his handling of high prices and other economic issues — and not yet sold on voting for him again next year.</p> <p>Darnay Curry, a Black United Auto Workers member striking at a plant in Warren, Mich., said he isn’t sure whether he’d back Biden or Trump if the election is a rematch between them.</p> <p>“Neither one has said anything that actually gets to me just yet,” said Curry, who said he cast a ballot for Biden in 2020.</p> <p>Tone Woods, a Black building trades worker from Detroit, said he is also undecided after voting for Biden in 2020. He attended Trump’s speech Wednesday in the Detroit area.</p> <p>“Gas is high. Inflation. So that’s why I’m stuck in the middle,” he said. He is considering Trump because “the economy was a little better when Trump was in office, to be honest with you.”<br></p> <br><iframe style="max-width: 100%" width="1280" height="720" src="https://players.brightcove.net/1155968404/r1WF6V0Pl_default/index.html?videoId=6337874481112" frameborder="0"></iframe> <br> <p>Faced with sentiments like these, some Biden allies have advocated for a more empathetic approach that scales back on boasting about accomplishments in favor of greater acknowledgment that rising prices remain a challenge. Even as inflation cools, the shock of higher prices for basic needs like groceries and housing still appears to outweigh improvements in the abundance of jobs in the eyes of voters.</p> <p>Horsford, for one, has directly urged Biden’s inner circle to focus more on selling specific policy wins by highlighting the businesses and individuals better off because of them instead of touting a broader Bidenomics vision that he said simply “isn’t cutting through."</p> <p>Trying to package Biden’s range of accomplishments under one umbrella risks obscuring the individual policies that polls show are wildly popular, like capping insulin costs and boosting domestic manufacturing, he and others argue. It asks voters to buy into an overarching economic philosophy they may not be totally sold on, rather than focus on more concrete improvements in their communities.</p> <p>And crucially, they worry that christening Biden’s legacy well before it’s finished is plain old risky.</p> <p>“There’s a difference between the actual thing working and the message landing with people,” said Rep. <a href="https://directory.politicopro.com/member/411928" data-person-id="411928" link-data="{&quot;cms.site.owner&quot;:{&quot;_ref&quot;:&quot;0000014b-3270-d4f3-a3cb-f3ffa8610000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff4161000e&quot;},&quot;cms.content.publishDate&quot;:1695947085332,&quot;cms.content.publishUser&quot;:{&quot;_ref&quot;:&quot;00000187-1473-d989-a7a7-bfffa9da0000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;cms.content.updateDate&quot;:1695947085332,&quot;cms.content.updateUser&quot;:{&quot;_ref&quot;:&quot;00000187-1473-d989-a7a7-bfffa9da0000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;originalTemplate&quot;:false,&quot;member&quot;:&quot;{\&quot;identifier\&quot;:\&quot;411928\&quot;,\&quot;url\&quot;:\&quot;https://directory.politicopro.com/member/411928\&quot;,\&quot;preferredName\&quot;:\&quot;Rep. Maxwell Frost (D-FL)\&quot;,\&quot;isCommittee\&quot;:false}&quot;,&quot;text&quot;:&quot;Maxwell Frost&quot;,&quot;url&quot;:&quot;https://directory.politicopro.com/member/411928&quot;,&quot;personId&quot;:&quot;411928&quot;,&quot;_id&quot;:&quot;0000018a-de52-d2cf-a3af-ffd6c4ee0000&quot;,&quot;_type&quot;:&quot;353fe80b-e1b5-3663-85ca-add066ecafc0&quot;}">Maxwell Frost</a> (D-Fla.), who praised Biden's recent focus on touting specific policies and values, such as visiting the UAW picket line and creating a new gun violence office, as encouraging signs the administration is honing its message.</p> <p>“I’ve told this to the president and the administration, [and] the campaign: You’ve got to make people feel like they’re along for the battle, like they’re part of the battle.”</p>]]>
+      </content:encoded>
+    </item>
+    <item>
+      <title>Biden evokes McCain’s memory as he warns of Trump’s threat to democracy</title>
+      <link>https://www.politico.com/news/2023/09/28/joe-biden-democracy-arizona-mccain-speech-00118722</link>
+      <description>The president spent the bulk of his speech in Arizona warning of his predecessor’s threat to democracy.</description>
+      <guid>https://www.politico.com/news/2023/09/28/joe-biden-democracy-arizona-mccain-speech-00118722</guid>
+      <pubDate>Thu, 28 Sep 2023 09:38:16 EST</pubDate>
+      <dc:creator>Lauren Egan and Jonathan Lemire</dc:creator>
+      <dc:description>Jonathan Lemire is POLITICO's White House Bureau Chief.</dc:description>
+      <dc:contributor>Lauren Egan and Jonathan Lemire</dc:contributor>
+      <media:content type="image/jpeg" url="https://static.politico.com/9d/39/5a8b53594015b237da5c4aef1b80/biden-73653.jpg">
+        <media:credit scheme="urn:ebu">Evan Vucci/AP Photo</media:credit>
+        <media:title type="html">Joe Biden made the case that preserving American institutions should not be a partisan issue.</media:title>
+        <media:thumbnail url="https://static.politico.com/9d/39/5a8b53594015b237da5c4aef1b80/biden-73653.jpg"/>
+      </media:content>
+      <maz:template>core</maz:template>
+      <maz:modified>1695946528632</maz:modified>
+      <content:encoded>
+        <![CDATA[<img src="https://static.politico.com/9d/39/5a8b53594015b237da5c4aef1b80/biden-73653.jpg"> <br> <p>TEMPE, Ariz. — President Joe Biden on Thursday declared that America must overcome new tests to its democracy, delivering his clearest warnings yet about what he believes is at stake in his coming reelection campaign against the likely Republican nominee, Donald Trump.</p> <p>Biden selected Arizona — a state where the former president attempted to <a href="https://apnews.com/article/donald-trump-elections-arizona-phoenix-conspiracy-theories-d38321441bcd6cea58421f6871b4f74e" target="_blank" link-data="{&quot;linkText&quot;:&quot;challenge the 2020 election results&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://apnews.com/article/donald-trump-elections-arizona-phoenix-conspiracy-theories-d38321441bcd6cea58421f6871b4f74e&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14aea0000&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14aea0001&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">challenge the 2020 election results</a> and considered a major battleground again next year — as the setting for his fourth major speech on protecting democracy. It is also home to the late Sen. John McCain, who Biden has pointed to as an example of what the Republican Party used to stand for before Trump was elected.</p> <p>Biden centered his speech around McCain’s legacy to make the case that preserving American institutions should not be a partisan issue. The president is fond of saying that McCain, a vocal Trump critic who died in 2018, would put patriotism before party — and he expressed concern that too many members of the senator’s Republican Party would instead pledge their loyalty to Trump over the Constitution.</p> <p>“For John, it was country first,” said Biden. “All of us are being asked right now what we will do to maintain our democracy? We will put a partnership aside and put country first? I say we must. And we will.”</p> <p>Hitting on familiar themes and recalling the legacy of his late friend, Biden stressed that the nation should “not walk away from the sacrifices generations of Americans have made to defend our democracy.”</p> <p>“We have to stand up for America’s values embodied in our Declaration of Independence because we know MAGA extremists have already proven they won’t,” Biden said. “We have to stand up for our Constitution and the institutions of democracy because MAGA extremists have made clear they won’t.”</p> <p>That was one factor that pushed Biden to deliver another speech on the need to protect the nation’s democracy. The topic has also featured prominently in his remarks at recent closed-door fundraisers, including several in the past week in California and New York. In those more relaxed, off-camera settings, Biden has warned that “democracy is on the ballot” and has taken a series of his most direct swipes at Trump yet.</p> <p>He did the same in Arizona. He invoked Trump’s name only once but spent the bulk of his speech clearly outlining the danger the former president poses.</p> <p>“There is something dangerous happening in America,” Biden said. “There is an extremist movement that does not share the basic beliefs of our democracy. The MAGA Movement.”</p> <p>Biden rattled over the warning signs: the erosion of trust of democratic institutions; election denialism, the banning of books. He then warned against the GOP frontrunner’s stated agenda for a second term, which includes an expansion of presidential power, the destruction of the federal bureaucracy and Trump’s declaration that he would be his followers’ “retribution.” Biden also called out Trump’s recent declarations that Gen. Mark Milley, the outgoing chair of the Joint Chiefs of Staff, should be tried for treason.</p> <p>Biden’s comments come a day after the <a href="https://www.politico.com/news/2023/09/27/second-republican-debate-highlights-00118577" target="_blank" link-data="{&quot;linkText&quot;:&quot;second Republican primary debate&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.politico.com/news/2023/09/27/second-republican-debate-highlights-00118577&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14aea0002&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14aea0003&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">second Republican primary debate</a>, during which candidates took a handful of swipes at Trump — who skipped the event altogether — but seemed to fail to make a meaningful dent in his clear path to the nomination. As the general election comes into clearer focus, Biden aides are betting that homing in on democracy will buoy the president’s campaign, especially after a spasm of political violence and threats to election integrity have shocked the American system in recent years.<br></p> <br> <p>Biden’s comments come a day after the <a href="https://www.politico.com/news/2023/09/27/second-republican-debate-highlights-00118577" target="_blank" link-data="{&quot;linkText&quot;:&quot;second Republican primary debate&quot;,&quot;link&quot;:{&quot;target&quot;:&quot;NEW&quot;,&quot;attributes&quot;:[],&quot;url&quot;:&quot;https://www.politico.com/news/2023/09/27/second-republican-debate-highlights-00118577&quot;,&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14aea0004&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;_id&quot;:&quot;0000018a-ef10-de6a-a5ef-ffb14aea0005&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">second Republican primary debate</a>, during which candidates took a handful of swipes at Trump — who skipped the event altogether — but seemed to fail to make a meaningful dent in his clear path to the nomination. As the general election comes into clearer focus, Biden aides are betting that homing in on democracy will buoy the president’s campaign, especially after a spasm of political violence and threats to election integrity have shocked the American system in recent years.</p> <p>Those close to Biden believe that the issue, along with abortion rights, helped propel Democrats to a far stronger than expected showing during the 2022 midterm elections. Biden has both publicly and privately noted that pundits were wrong in suggesting his closing argument last November should have been about the economy rather than the dangers of political extremism, according to three people close to the president granted anonymity because they were not authorized to discuss those conversations.</p> <p>The Biden team had thought the danger posed by Trump would fade over time, or that attacks from Republican primary candidates would drag him down. Instead, Trump has continued to dominate the Republican field even as criminal indictments against him have mounted.</p> <p>That was one factor that pushed Biden to deliver another speech on the need to protect the nation’s democracy. The topic has also featured prominently in his remarks at recent closed-door fundraisers, including several in the past week in California and New York. In those more relaxed, off-camera settings, Biden has warned that “democracy is on the ballot” and has taken a series of his most direct swipes at Trump yet.</p> <p>“Donald Trump and the MAGA Republicans are determined to destroy American democracy because they want to break down institutional structures,” Biden said Tuesday at a San Francisco fundraiser. “Political violence in America is never, never, never, never acceptable.”</p> <p>In the coming months, Biden intends to adhere to his plan not to directly address Trump’s legal issues for fear of being seen as influencing the process. Instead, he and his staff believe a series of warnings by the president about the ongoing threats to the nation’s foundation will help drive home the point. On Thursday, Biden said he was moved to speak out again because of “fears about the diminishment of our democracy.”</p> <p>“We should all remember: democracies don't have to die at the end of a rifle,” he said. “They can die when people are silent, when they fail to stand up and condemn threats to democracy.”</p> <br> <img src="https://static.politico.com/66/00/e4403f6841418e36ae9a504c1c52/ukraine.JPEG"> <br> <p>Aides originally thought about delivering this speech at another <a href="https://www.politico.com/news/2022/09/01/biden-maga-republicans-philadelphia-speech-00054510" target="_blank" link-data="{&quot;cms.site.owner&quot;:{&quot;_ref&quot;:&quot;0000014b-3270-d4f3-a3cb-f3ffa8610000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff4161000e&quot;},&quot;cms.content.publishDate&quot;:1695910576679,&quot;cms.content.publishUser&quot;:{&quot;_ref&quot;:&quot;00000180-1f84-dc88-a7be-1ff66a660000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;cms.content.updateDate&quot;:1695910576679,&quot;cms.content.updateUser&quot;:{&quot;_ref&quot;:&quot;00000180-1f84-dc88-a7be-1ff66a660000&quot;,&quot;_type&quot;:&quot;0000014b-324d-d4f3-a3cb-f3ff415b0002&quot;},&quot;originalTemplate&quot;:false,&quot;link&quot;:{&quot;originalTemplate&quot;:false,&quot;attributes&quot;:[],&quot;target&quot;:&quot;NEW&quot;,&quot;url&quot;:&quot;https://www.politico.com/news/2022/09/01/biden-maga-republicans-philadelphia-speech-00054510&quot;,&quot;_id&quot;:&quot;0000018a-dc25-de9d-afbf-dffdb5880001&quot;,&quot;_type&quot;:&quot;33ac701a-72c1-316a-a3a5-13918cf384df&quot;},&quot;linkText&quot;:&quot;American historical landmark&quot;,&quot;_id&quot;:&quot;0000018a-dc25-de9d-afbf-dffdb5880000&quot;,&quot;_type&quot;:&quot;02ec1f82-5e56-3b8c-af6e-6fc7c8772266&quot;}">American historical landmark</a> — George Washington’s former military base at Valley Forge, Pa., was considered — but ultimately decided to use the moment to also honor McCain. Biden was introduced by McCain’s widow, Cindy McCain, who heads the U.N. World Food Program and said the president and first lady Jill Biden introduced her to her late husband.</p> <p>Biden — who at one point was briefly interrupted by a protester — also announced funding from the American Rescue Plan to construct the McCain Library in conjunction with Arizona State University. Earlier this month while visiting Hanoi, Biden was joined by old friends in paying tribute to McCain and he later told associates it was one of the most moving moments of his presidency, according to one of the people close to the president.</p> <p>“I thought about how America missed John right now, that America needs John right now,” Biden said.</p>]]>
+      </content:encoded>
+    </item>
+  </channel>
+</rss>
diff --git a/htdocs/cgi-bin/rss_output/rss_The_Perl_Foundation_RSS_Feed.rdf b/htdocs/cgi-bin/rss_output/rss_The_Perl_Foundation_RSS_Feed.rdf
new file mode 100644 (file)
index 0000000..9873605
--- /dev/null
@@ -0,0 +1,127 @@
+<?xml version="1.0" ?>
+<rss version="2.0">
+  <channel>
+    <title>The Perl Foundation News</title>
+    <link>https://news.perlfoundation.org/</link>
+    <description>Official Blog of The Perl Foundation (TPF)</description>      <item>
+        <title>Grant Application (P Evans) Perl Core Development</title>
+        <link>https://news.perlfoundation.org/post/pevans-perl-core</link>
+        <description><p>A grant application from Paul Evans has just managed to be squeezed in into this round. Paul needs no introduction; he is one of the few people who speaks XS like a native, and has long been a valuable contributor to the Perl Core, as well as a lot of other interesting ancilliary projects. Also into animatronics, he has many modules dedicated to interacting with electronic interfaces. This application targets </p>
+</description>
+        <pubDate>Thu, 28 Sep 2023 16:06:02 EDT</pubDate>
+      </item>      <item>
+        <title>Maintaining Perl (Tony Cook) August 2023</title>
+        <link>https://news.perlfoundation.org/post/maintaining_perl_tonyc_august_2023</link>
+        <description><p>Tony writes: 2023/08/01 Tuesday  0.20 look at new coverity hits, briefly discuss with khw  0.27 github notifications  0.87 #21306 review and briefly comment  0.05 #21084 check latest CI results, apply to blead  0.13 #21296 test blead with the fix, close this PR  0.28 coverity look at older hits, one harmless, another false  positive  0.18 #21181 apply to blead, perldelta  0.42 #21212 </p>
+</description>
+        <pubDate>Fri, 22 Sep 2023 12:13:50 EDT</pubDate>
+      </item>      <item>
+        <title>PerlGPT Large Language Model, Phase 1</title>
+        <link>https://news.perlfoundation.org/post/perlgptphase1</link>
+        <description><p>A new grant application from John Napiorkowski and Robert Grimes, this time targeting the development of a large language model trained specifically to develop Perl Code. These veteran coders suggest that using natural language to generate Perl code may potentially allow one to rapidly generate new APIs and applications, or at least give a skeleton to flesh out into a more elaborate tool.</p>
+</description>
+        <pubDate>Wed, 20 Sep 2023 09:53:18 EDT</pubDate>
+      </item>      <item>
+        <title>The Perl and Koha Conference</title>
+        <link>https://news.perlfoundation.org/post/perlandkohaconference</link>
+        <description><p>The first ever Perl and Koha conference was held in Helsinki, Finland this year. It featured three main days of Perl and Koha presentations and two days of workshops. Workshops included a Perl training session, a masterclass for new Koha developers, Koha improvement initiatives, discussions on the future of Perl as a language, and more. Koha is the first free open source software library automation package. In use worldwide its </p>
+</description>
+        <pubDate>Thu, 14 Sep 2023 18:16:06 EDT</pubDate>
+      </item>      <item>
+        <title>Maintaining Perl 5 Core (Dave Mitchell): June - August 2023 </title>
+        <link>https://news.perlfoundation.org/post/maintaining_perl_dave_mitchell_june_august_2023</link>
+        <description><p>Dave writes: This is my monthly report on work done during June-August 2023 covered by my TPF perl core maintenance grant. I fixed a performance regression bug related to my 'multiconcat' optimisation work from about 5 years ago. Other than that, I restarted my work on my "make stack reference counted" branch, got it into a working state, and merged it into blead. See below for a detailed explanation. SUMMARY: </p>
+</description>
+        <pubDate>Thu, 14 Sep 2023 08:37:16 EDT</pubDate>
+      </item>      <item>
+        <title>Maintaining Perl (Tony Cook) July 2023 </title>
+        <link>https://news.perlfoundation.org/post/maintaining_perl_tonyc_july_2023</link>
+        <description><p>Tony writes: 2023/07/03 Monday  0.92 #21181 fixes, testing, re-push and push to smoke-me  0.50 #21180 fixes, testing, push for re-CI  1.52 apply one of my PRs, look into unexpected mingw64 failure  on another PR  2.94 2023/07/04 Tuesday  0.42 #21120 apply to blead, perldelta update, add to maint  votes  0.65 #21132, #21095 apply to blead, perldelta #21202 comment  0.08 #21118, #21060 apply </p>
+</description>
+        <pubDate>Mon, 28 Aug 2023 08:15:23 EDT</pubDate>
+      </item>      <item>
+        <title>Maintaining Perl (Tony Cook) June 2023 </title>
+        <link>https://news.perlfoundation.org/post/maintaining_perl_tonyc_june_2023</link>
+        <description><p>Tony writes: 2023/06/01 Thursday  1.52 #21129 research, testing, comment  1.52 2023/06/05 Monday  2.65 #21073 look at porting C++ test, EU:CB issue  1.02 #21135 research and comment  0.17 #21139 review and comment briefly  0.18 #21095 consider other C++ non-features to add  1.37 #21129 research and long comment  5.39 2023/06/06 Tuesday  0.20 #21135 more research  1.40 #21131 look at making PerlIOStdio not </p>
+</description>
+        <pubDate>Mon, 28 Aug 2023 08:14:18 EDT</pubDate>
+      </item>      <item>
+        <title>Maintaining Perl (Tony Cook) May 2023 </title>
+        <link>https://news.perlfoundation.org/post/maintaining_perl_tonyc_may_2023</link>
+        <description><p>Tony writes: 2023/05/01 Monday  0.40 github notifications  0.27 #21051 check it matches the commits in blead and close  0.45 #21061 review and approve  0.22 #21053 review, comment and approve  0.07 #21042 comment  0.12 #21063 review and approve, comment  0.52 #21044 write test and create reversion branch, push for CI  0.82 #17398 resolve inf/nan, work on XS  0.07 #21044 review CI results </p>
+</description>
+        <pubDate>Mon, 28 Aug 2023 08:13:02 EDT</pubDate>
+      </item>      <item>
+        <title>Maintaining Perl (Tony Cook) April 2023 </title>
+        <link>https://news.perlfoundation.org/post/maintaining_perl_tonyc_april_2023</link>
+        <description><p>Tony writes: 2023/04/03 Monday  0.70 github notifications  0.17 #20811 review CI results, undraft, ask khw to try it out  1.08 work on in name revert  1.95 2023/04/04 Tuesday  1.70 review coverity scan reported issues, open #21005  0.93 #20999 try to reproduce, comment  0.15 #20982 review and approve  0.92 work on in name feature  3.70 2023/04/05 Wednesday  1.07 #20999 reproduce, fixes </p>
+</description>
+        <pubDate>Mon, 28 Aug 2023 08:11:32 EDT</pubDate>
+      </item>      <item>
+        <title>Maintaining Perl (Tony Cook) March 2023 </title>
+        <link>https://news.perlfoundation.org/post/maintaining_perl_tonyc_march_2023</link>
+        <description><p>Tony writes: 2023/03/01 Wednesday  0.63 #20849 better commit subject, bump versions, testing,  apply to blead  1.75 #20811 debugging config.sh generation  1.60 #20811 more debug nmake config.sh generation  work on it for GNUmakefile, update output timestamp to  match sources  3.98 2023/03/02 Thursday  1.00 #20874 review discussion, review some of the related PRs  with some comments  0.12 #20873 review and approve  </p>
+</description>
+        <pubDate>Mon, 28 Aug 2023 08:09:34 EDT</pubDate>
+      </item>      <item>
+        <title>Maintaining Perl (Tony Cook) February 2023</title>
+        <link>https://news.perlfoundation.org/post/maintaining_perl_tonyc_february_2023</link>
+        <description><p>Tony writes: 2023/02/01 Wednesday  0.13 github notifications  2.25 #20742 work on tests, find a related issue, work on fix,  testing  0.28 #20742 review test results, commits, push for CI  0.35 #20756 review and approve  0.68 feature bundle re-work: debugging mismatch of feature bits  to hash  3.69 2023/02/02 Thursday  0.08 github notifications  0.13 #20759 comment  0.07 #20742 review CI results, </p>
+</description>
+        <pubDate>Mon, 28 Aug 2023 08:07:56 EDT</pubDate>
+      </item>      <item>
+        <title>Maintaining Perl (Tony Cook) January 2023</title>
+        <link>https://news.perlfoundation.org/post/maintaining_perl_tonyc_january_2023</link>
+        <description><p>Tony writes: 2023/01/03 Tuesday  0.08 github notifications  1.40 #20599 review, comments  1.02 #20637 review and comments  0.07 #20621 review and approve  0.40 #20647 review discussion, start to look over code  2.97 2023/01/04 Wednesday  0.30 #20599 follow-up  0.07 #20637 look over discussion  0.47 rfc #32 review and review discussion  0.15 #20667 review and approve  1.35 #20647 more look over code, </p>
+</description>
+        <pubDate>Mon, 28 Aug 2023 08:04:33 EDT</pubDate>
+      </item>      <item>
+        <title>Maintaining Perl 5 Core (Dave Mitchell): April - May 2023 </title>
+        <link>https://news.perlfoundation.org/post/maintaining_perl_dave_mitchell_april_may_2023</link>
+        <description><p>Dave writes: This is my monthly report on work done during April and May 2023 covered by my TPF perl core maintenance grant. The last two months have been a bit light on the perl maintenance front. I did a couple of fixups to Deparse.pm and updated Porting/deparse-skips.txt so that  cd t; ./TEST -deparse passes again. SUMMARY: 0:35 disable leaking class test 5:02 fixup deparsing tests 8:26 process p5p </p>
+</description>
+        <pubDate>Mon, 28 Aug 2023 08:02:24 EDT</pubDate>
+      </item>      <item>
+        <title>Maintaining Perl 5 Core (Dave Mitchell): March 2023</title>
+        <link>https://news.perlfoundation.org/post/maintaining_perl_dave_mitchell_march_2023</link>
+        <description><p>Dave writes: This is my monthly report on work done during March 2023 covered by my TPF perl core maintenance grant. I mainly continued work on making the stack reference counted. Since the basic code is working I concentrated more at looking at distributions which were reported to fail on a perl built with PERL_RC_STACK. SUMMARY:  4:49 BBC: Blead breaks RCLAMP/Devel-LeakTrace-0.06.tar.gz and code TOTAL:  42:27 </p>
+</description>
+        <pubDate>Mon, 28 Aug 2023 07:59:16 EDT</pubDate>
+      </item>      <item>
+        <title>Maintaining Perl 5 Core (Dave Mitchell): January - February 2023</title>
+        <link>https://news.perlfoundation.org/post/maintaining_perl_dave_mitchell_jan_feb_2023</link>
+        <description><p>Dave writes: This is my monthly report on work done during Jan and Feb 2023 covered by my TPF perl core maintenance grant. I mainly continued work on making the stack reference counted. I have now reached a point where, on a perl built with the non-default PERL_RC_STACK define, perl uses a reference-counted stack, and all tests pass distributions>. None of those distributions required any changes to work in the </p>
+</description>
+        <pubDate>Mon, 28 Aug 2023 07:54:04 EDT</pubDate>
+      </item>      <item>
+        <title>Perl Core Maintenance Grant Extension request</title>
+        <link>https://news.perlfoundation.org/post/grant-extension-tony-cook-2023</link>
+        <description><p>Tony Cooks work in maintaining Perl core continues, including reviewing issues, reproducing faults and applying patches to fix the core continue</p>
+</description>
+        <pubDate>Tue, 25 Jul 2023 11:25:39 EDT</pubDate>
+      </item>      <item>
+        <title>Grant Application: Google TensorFlow API Bindings for Perl, Phase 2</title>
+        <link>https://news.perlfoundation.org/post/tensor-flow-api-2</link>
+        <description><p>A new Grant Proposal to make Tensor flow accessible to Perl Developers, and bring feature parity with AL in other languages such as Java and Python,</p>
+</description>
+        <pubDate>Sun, 23 Jul 2023 12:31:31 EDT</pubDate>
+      </item>      <item>
+        <title>Announcing the 2022 White Camel Award recipient</title>
+        <link>https://news.perlfoundation.org/post/white-camel-2022-manwar</link>
+        <description><p>We are pleased to announce Mohammad Sajid Anwar as the White Camel Award 2022 recipient. Mohammad runs the Perl weekly challenge, a coding competition where a group of Perl enthusiasts, from beginners to experts, come together and solve 2 tasks every week. So far the challenge has attracted more than 300 unique participants. Furthermore, Mohammad is one of two active editors of the Perl Weekly Newsletter where he discusses topics </p>
+</description>
+        <pubDate>Tue, 11 Jul 2023 11:39:04 EDT</pubDate>
+      </item>      <item>
+        <title>Outreachy 2023 - Monalika working on the Open Food Facts project</title>
+        <link>https://news.perlfoundation.org/post/outreachy-2023-open-food-facts</link>
+        <description><p>The Perl Foundation is taking part again this year in the Outreachy program which encourages the participation of underrepresented groups in open source. The foundation is funding one intern, Monalika Patnaik, who will be working on the Open Food Facts project. Monalika’s introduction in her own words: Hi, I'm Monalika Patnaik, a sophomore pursuing Computer Science Engineering from India. Open-Source is my first love and my passion lies mostly in </p>
+</description>
+        <pubDate>Tue, 11 Jul 2023 08:35:11 EDT</pubDate>
+      </item>      <item>
+        <title>Hello (TPRF) World! </title>
+        <link>https://news.perlfoundation.org/post/hellotprfworldjune1</link>
+        <description><p>Check out our new newsletter! It's packed full of updates and conference information! Hello World 1.pdf Don't want to click that? Here's the text version of the info: **Hello World! Welcome to the first installment of the TPRF Newsletter. Time for another TPRC 2023 update! A reminder to all folks traveling from outside Canada to attend TPRC 2023, go ahead and check that you have your passport! You're going to </p>
+</description>
+        <pubDate>Thu, 01 Jun 2023 20:23:24 EDT</pubDate>
+      </item>  </channel>
+</rss>
\ No newline at end of file
diff --git a/htdocs/cgi-bin/rss_output/rss_The_Sydney_Morning_Herald___World_RSS_Feed.rdf b/htdocs/cgi-bin/rss_output/rss_The_Sydney_Morning_Herald___World_RSS_Feed.rdf
new file mode 100644 (file)
index 0000000..7ec3f12
--- /dev/null
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/"><channel><atom:link href="https://www.smh.com.au/rss/world.xml" rel="self" type="application/rss+xml"></atom:link><copyright>Copyright 2023 Nine Entertainment Co. Pty Limited</copyright><description>The top News headlines from The Sydney Morning Herald. For all the news, visit https://www.smh.com.au</description><image><link>https://www.smh.com.au/rss/world.xml</link><title>Sydney Morning Herald - World</title><url>https://www.smh.com.au/icons/rss/smh.png</url></image><language>en-AU</language><lastBuildDate>Mon, 02 Oct 2023 20:57:59 +1100</lastBuildDate><link>https://www.smh.com.au/rss/world.xml</link><pubDate>Mon, 02 Oct 2023 20:57:59 +1100</pubDate><title>Sydney Morning Herald - World</title><item><category>World / North America</category><dc:creator></dc:creator><description>The best photos from the international wire agencies as chosen by our picture editors.</description><enclosure length="0" type="image/jpeg" url="https://static.ffx.io/images/$zoom_1%2C$multiply_0.7554%2C$ratio_1.777778%2C$width_1059%2C$x_0%2C$y_88/t_crop_custom/q_86%2Cf_jpg/ac2fca81db0ac800f629ba37f5f59d428bf0da6d"></enclosure><guid isPermaLink="false">53bc0659-07b2-4b58-ae86-ed54268781d8</guid><link>https://www.smh.com.au/world/north-america/world-of-photos-october-3-2023-20231002-p5e96q.html?ref=rss&amp;utm_medium=rss&amp;utm_source=rss_world</link><pubDate>Mon, 02 Oct 2023 17:01:38 +1100</pubDate><title>World of Photos - October 3, 2023</title></item><item><category>World</category><dc:creator></dc:creator><description>At least nine people have been killed and a further 50 injured after a church roof collapsed during a Sunday mass in Mexico.</description><enclosure length="0" type="image/jpeg" url="https://static.ffx.io/images/$width_800%2C$height_450/t_crop_fill/q_86%2Cf_jpg/0f45e0517f0b675a68682d8a87b0a7445c6f5f4f"></enclosure><guid isPermaLink="false">03903aec-e825-4a43-9e15-e986c781b562</guid><link>https://www.smh.com.au/world/at-least-nine-dead-after-church-roof-collapses-in-mexico-20231002-p5e96r.html?ref=rss&amp;utm_medium=rss&amp;utm_source=rss_world</link><pubDate>Mon, 02 Oct 2023 16:56:25 +1100</pubDate><title>At least nine dead after church roof collapses in Mexico</title></item><item><category>World / Europe</category><dc:creator>Andrea Hamblin</dc:creator><description>Serbia refuses to recognise the independence of its former southern province, and denied it trained the group of 30 men who shot at police and killed an officer.</description><enclosure length="0" type="image/jpeg" url="https://static.ffx.io/images/$zoom_0.26122348297977305%2C$multiply_0.7554%2C$ratio_1.777778%2C$width_1059%2C$x_0%2C$y_39/t_crop_custom/q_86%2Cf_jpg/55c9ab7318c70a6d88d1e7ef2599185d3811f177"></enclosure><guid isPermaLink="false">c9530bd0-3098-47f4-8487-c4843b858958</guid><link>https://www.smh.com.au/world/europe/nato-confirms-600-british-soldiers-will-be-deployed-in-kosovo-20231002-p5e94s.html?ref=rss&amp;utm_medium=rss&amp;utm_source=rss_world</link><pubDate>Mon, 02 Oct 2023 15:08:52 +1100</pubDate><title>Nato confirms 600 British soldiers will be deployed in Kosovo</title></item><item><category>World / North America</category><dc:creator>Ben Brasch</dc:creator><description>“Boopac Shakur” posed online as a 15-year-old girl to lure alleged predators into meetings and published content to his nearly 50,000 social media followers.</description><enclosure length="0" type="image/jpeg" url="https://static.ffx.io/images/$zoom_1.1595%2C$multiply_0.7554%2C$ratio_1.777778%2C$width_1059%2C$x_0%2C$y_0/t_crop_custom/q_86%2Cf_auto/b5f67bb0199dc5e3bbf99e080f1da03b96e7dc49"></enclosure><guid isPermaLink="false">f4db81fa-bf03-42d5-a51e-d30fc2bd2aff</guid><link>https://www.smh.com.au/world/north-america/social-media-paedophile-catcher-shot-dead-after-confronting-man-20231002-p5e93x.html?ref=rss&amp;utm_medium=rss&amp;utm_source=rss_world</link><pubDate>Mon, 02 Oct 2023 13:26:15 +1100</pubDate><title>Social media ‘paedophile catcher’ shot dead after confronting man</title></item><item><category>World</category><dc:creator></dc:creator><description>Terrorists carry out bomb attack near government building in Ankara, Turkey says.</description><enclosure length="0" type="image/jpeg" url="https://static.ffx.io/images/$width_800%2C$height_450/t_crop_fill/q_86%2Cf_jpg/1d62a8595f6485562a87df765680ed16b524f90b"></enclosure><guid isPermaLink="false">061998a8-8e85-44e0-9a5d-09687818aa56</guid><link>https://www.smh.com.au/world/at-least-one-person-dead-after-bomb-blast-in-turkey-20231002-p5e93l.html?ref=rss&amp;utm_medium=rss&amp;utm_source=rss_world</link><pubDate>Mon, 02 Oct 2023 12:21:10 +1100</pubDate><title>At least one person dead after bomb blast in Turkey</title></item><item><category>World</category><dc:creator></dc:creator><description>Spanish nightclub fire kills at least 13 people as rescuers search for victims.</description><enclosure length="0" type="image/jpeg" url="https://static.ffx.io/images/$width_800%2C$height_450/t_crop_fill/q_86%2Cf_jpg/cefa1b335915eaef3ff7fe03c0706d1543303929"></enclosure><guid isPermaLink="false">37c77817-9873-46ac-9cc2-db717a766bc3</guid><link>https://www.smh.com.au/world/at-least-13-people-killed-during-spanish-nightclub-fire-20231002-p5e8zw.html?ref=rss&amp;utm_medium=rss&amp;utm_source=rss_world</link><pubDate>Mon, 02 Oct 2023 12:05:10 +1100</pubDate><title>At least 13 people killed during Spanish nightclub fire</title></item><item><category>World / Europe</category><dc:creator>Latika Bourke</dc:creator><description>There is speculation the British prime minister could go to the polls within the next 12 months, particularly if the country’s economy improves.</description><enclosure length="0" type="image/jpeg" url="https://static.ffx.io/images/$zoom_0.2916%2C$multiply_0.7554%2C$ratio_1.777778%2C$width_1059%2C$x_0%2C$y_0/t_crop_custom/q_86%2Cf_jpg/b872f13eb21222a2305d7eae737a67eb7dde9fd8"></enclosure><guid isPermaLink="false">7bd7a6d8-55b1-41a5-81d4-b7255943764c</guid><link>https://www.smh.com.au/world/europe/rebooted-sunak-fires-starting-gun-on-de-facto-election-campaign-20231002-p5e8z6.html?ref=rss&amp;utm_medium=rss&amp;utm_source=rss_world</link><pubDate>Mon, 02 Oct 2023 11:52:51 +1100</pubDate><title>Rebooted Sunak fires starting gun on de facto election campaign</title></item><item><category>World</category><dc:creator></dc:creator><description>Bear kills two people in remote corner of Canada’s Banff National Park.</description><enclosure length="0" type="image/jpeg" url="https://static.ffx.io/images/$width_800%2C$height_450/t_crop_fill/q_86%2Cf_jpg/25828b3cee4a9f74fa5ffd96ca5cf8aaeaf4a5f0"></enclosure><guid isPermaLink="false">9ab5a1be-79e8-4191-beeb-ba6aad8da4bb</guid><link>https://www.smh.com.au/world/grizzly-bear-kills-two-backpackers-in-banff-20231002-p5e934.html?ref=rss&amp;utm_medium=rss&amp;utm_source=rss_world</link><pubDate>Mon, 02 Oct 2023 11:49:56 +1100</pubDate><title>Grizzly bear kills two backpackers in Banff</title></item><item><category>World / North America</category><dc:creator>Aaron Blake</dc:creator><description>Indications seem to be that Kennedy’s potential base (conspiratorial, anti-establishment, anti-vaccine people) overlaps significantly with Trump-oriented voters.</description><enclosure length="0" type="image/jpeg" url="https://static.ffx.io/images/$zoom_0.5298%2C$multiply_0.7554%2C$ratio_1.777778%2C$width_1059%2C$x_0%2C$y_21/t_crop_custom/q_86%2Cf_jpg/3b0544c5bbb14e0d8dd482e1694d11871b2ba09f"></enclosure><guid isPermaLink="false">e859dc60-97da-4b57-bfb8-1c6f65c75e44</guid><link>https://www.smh.com.au/world/north-america/the-trump-voters-favourite-kennedy-could-now-be-a-threat-to-trump-20231002-p5e90j.html?ref=rss&amp;utm_medium=rss&amp;utm_source=rss_world</link><pubDate>Mon, 02 Oct 2023 11:26:01 +1100</pubDate><title>The Trump voters’ favourite Kennedy could now be a threat to Trump</title></item><item><category>World / Europe</category><dc:creator>Rob Harris</dc:creator><description>Robert Fico’s victory could bring another anti-Ukraine voice into the EU alongside Hungary’s prime minister Viktor Orban.</description><enclosure length="0" type="image/jpeg" url="https://static.ffx.io/images/$zoom_0.1406%2C$multiply_0.7554%2C$ratio_1.777778%2C$width_1059%2C$x_0%2C$y_0/t_crop_custom/q_86%2Cf_jpg/a7598994ac3eb4c8ff0f37f80f35101ad4939ede"></enclosure><guid isPermaLink="false">08812bbe-ce41-4acf-ba9f-7497ea163e33</guid><link>https://www.smh.com.au/world/europe/pro-russia-trumpist-ex-pm-wins-slovakia-poll-in-fresh-worry-for-ukraine-alliance-20231002-p5e90n.html?ref=rss&amp;utm_medium=rss&amp;utm_source=rss_world</link><pubDate>Mon, 02 Oct 2023 10:25:38 +1100</pubDate><title>Pro-Russia, Trumpist ex-PM wins Slovakia poll in fresh worry for Ukraine alliance</title></item><item><category>World / Europe</category><dc:creator>India McTaggart</dc:creator><description>The pro-Kremlin group has become known for denial of service cyber campaigns against countries supporting Ukraine, particularly NATO nations. </description><enclosure length="0" type="image/jpeg" url="https://static.ffx.io/images/$zoom_0.47309389071437263%2C$multiply_0.7554%2C$ratio_1.777778%2C$width_1059%2C$x_50%2C$y_61/t_crop_custom/q_86%2Cf_jpg/a867972d984f049e751ed75533cdb1ab2e4cc2b1"></enclosure><guid isPermaLink="false">695231f4-bc0b-4317-b5e7-bac818eaab0e</guid><link>https://www.smh.com.au/world/europe/royal-family-website-targeted-in-russian-cyberattack-20231002-p5e8zo.html?ref=rss&amp;utm_medium=rss&amp;utm_source=rss_world</link><pubDate>Mon, 02 Oct 2023 08:00:00 +1100</pubDate><title>Royal family website ‘targeted in Russian cyberattack’</title></item><item><category>World / North America</category><dc:creator>Farrah Tomazin</dc:creator><description>The stopgap funding bill House Speaker Kevin McCarthy succeeded in passing did not include additional money for Ukraine’s war effort, an issue that has divided Republicans.</description><enclosure length="0" type="image/jpeg" url="https://static.ffx.io/images/$zoom_0.2119%2C$multiply_0.7554%2C$ratio_1.777778%2C$width_1059%2C$x_0%2C$y_7/t_crop_custom/q_86%2Cf_jpg/05acc60434c7ddb272693c19bcd0149d80fa80c9"></enclosure><guid isPermaLink="false">a195ca38-1ed9-418d-9f60-53e2c3e0f150</guid><link>https://www.smh.com.au/world/north-america/bring-it-on-republican-house-speaker-to-face-a-far-right-mutiny-amid-funding-battle-20231002-p5e8zp.html?ref=rss&amp;utm_medium=rss&amp;utm_source=rss_world</link><pubDate>Mon, 02 Oct 2023 05:55:10 +1100</pubDate><title>Republican chaos, division grips Congress</title></item><item><category>World / Oceania</category><dc:creator>Lucy Cormack</dc:creator><description>Crime has taken centre stage ahead of this month’s general election, but some voices say the narrative is simply part of the “conservative playbook” to win power.</description><enclosure length="0" type="image/jpeg" url="https://static.ffx.io/images/$zoom_0.1936%2C$multiply_0.7554%2C$ratio_1.777778%2C$width_1059%2C$x_0%2C$y_110/t_crop_custom/q_86%2Cf_auto/b7f4b46f09fe986620535d8d94bc5245c318bdc7"></enclosure><guid isPermaLink="false">8785a062-49a6-4516-9799-3222681b7763</guid><link>https://www.smh.com.au/world/oceania/daily-ram-raids-and-a-shooting-nz-s-crime-wave-is-serious-or-so-you-would-think-20230928-p5e8ee.html?ref=rss&amp;utm_medium=rss&amp;utm_source=rss_world</link><pubDate>Mon, 02 Oct 2023 05:30:00 +1100</pubDate><title>Daily ram raids and a shooting: NZ’s crime wave is serious, or so you would think</title></item><item><category>World / North America</category><dc:creator>Michael Fullilove</dc:creator><description>Joe Biden is a fine leader whose policies have favoured Australia’s interests. Another Trump White House would be a disaster for us.</description><enclosure length="0" type="image/jpeg" url="https://static.ffx.io/images/$zoom_0.25685180693669657%2C$multiply_0.7554%2C$ratio_1.777778%2C$width_1059%2C$x_0%2C$y_27/t_crop_custom/q_86%2Cf_jpg/897ddfd0dc2c73132fd768da6fb55c9368f77601"></enclosure><guid isPermaLink="false">ac5269a7-4904-4c73-9ddd-65e25e42bed8</guid><link>https://www.smh.com.au/world/north-america/the-us-needs-a-good-president-and-biden-s-been-good-for-us-20230928-p5e8bq.html?ref=rss&amp;utm_medium=rss&amp;utm_source=rss_world</link><pubDate>Mon, 02 Oct 2023 05:00:00 +1100</pubDate><title>The US needs a good president, and Biden’s been good for us</title></item><item><category>World / Asia</category><dc:creator>Eryk Bagshaw</dc:creator><description>Three words are being used to deliver mail to nomadic herders in Mongolia, direct taxis in Tokyo and mark the locations of walkers around Sydney harbour.</description><enclosure length="0" type="image/jpeg" url="https://static.ffx.io/images/$zoom_0.7417494212962963%2C$multiply_0.7554%2C$ratio_1.777778%2C$width_1059%2C$x_198%2C$y_134/t_crop_custom/q_86%2Cf_jpg/0dea6845dd41fc409ed0476d0b82329849eecb2b"></enclosure><guid isPermaLink="false">a8bb3885-9245-4a54-bb28-29eee7931fde</guid><link>https://www.smh.com.au/world/asia/how-do-you-deliver-mail-to-someone-with-no-fixed-address-20230918-p5e5m1.html?ref=rss&amp;utm_medium=rss&amp;utm_source=rss_world</link><pubDate>Mon, 02 Oct 2023 01:00:00 +1100</pubDate><title>How do you deliver mail to someone with no fixed address?</title></item><item><category>World / Europe</category><dc:creator></dc:creator><description>The best photos from the international wire agencies as chosen by our picture editors.</description><enclosure length="0" type="image/jpeg" url="https://static.ffx.io/images/$zoom_0.1765%2C$multiply_0.7554%2C$ratio_1.777778%2C$width_1059%2C$x_0%2C$y_0/t_crop_custom/q_86%2Cf_jpg/ee3335b8e5f93c49b6e14533a2ec9c6df26af244"></enclosure><guid isPermaLink="false">69f8d58f-f323-4969-932c-5fdf77aba367</guid><link>https://www.smh.com.au/world/europe/world-of-photos-october-2-2023-20231001-p5e8xe.html?ref=rss&amp;utm_medium=rss&amp;utm_source=rss_world</link><pubDate>Sun, 01 Oct 2023 17:33:59 +1100</pubDate><title>World of Photos, October 2, 2023</title></item><item><category>World / Europe</category><dc:creator>Jonathan Leake</dc:creator><description>Britain’s biggest motorway service station provider has brought in marshals to police “charge rage” among electric vehicle drivers fighting to use plug-in points.</description><enclosure length="0" type="image/jpeg" url="https://static.ffx.io/images/$zoom_0.5298%2C$multiply_0.7554%2C$ratio_1.777778%2C$width_1059%2C$x_0%2C$y_95/t_crop_custom/q_86%2Cf_jpg/a7c0d2c281f3c22d40a9f151aa61b41a69e9e082"></enclosure><guid isPermaLink="false">40f1e703-8b6f-4f4e-b019-6ad185144d3c</guid><link>https://www.smh.com.au/world/europe/service-stations-hire-staff-to-stop-drivers-fighting-over-car-chargers-20231001-p5e8wt.html?ref=rss&amp;utm_medium=rss&amp;utm_source=rss_world</link><pubDate>Sun, 01 Oct 2023 15:41:16 +1100</pubDate><title>Service stations hire staff to stop drivers fighting over car chargers</title></item><item><category>World / Asia</category><dc:creator>Ryan Woo</dc:creator><description>Some social media commentators linked the sharp rise in lottery sales to young people’s deepening economic worries as youth unemployment rate hits record highs.</description><enclosure length="0" type="image/jpeg" url="https://static.ffx.io/images/$zoom_0.26475%2C$multiply_0.7554%2C$ratio_1.777778%2C$width_1059%2C$x_0%2C$y_93/t_crop_custom/q_86%2Cf_jpg/22e02e35f3061f17b028b4593c07bafdb6ca0f7a"></enclosure><guid isPermaLink="false">4d41ffba-1290-4df6-a806-99bf247577f2</guid><link>https://www.smh.com.au/world/asia/chinese-lottery-ticket-sales-soar-amid-weak-economy-job-prospects-20231001-p5e8wj.html?ref=rss&amp;utm_medium=rss&amp;utm_source=rss_world</link><pubDate>Sun, 01 Oct 2023 14:53:55 +1100</pubDate><title>Chinese lottery ticket sales soar amid weak economy, job prospects</title></item><item><category>World / North America</category><dc:creator>Rozina Sabur</dc:creator><description>Republican House Speaker Kevin McCarthy backed down from hardliners’ demands to keep the country running, but the deal includes no money for Ukraine.</description><enclosure length="0" type="image/jpeg" url="https://static.ffx.io/images/$zoom_0.5298%2C$multiply_0.7554%2C$ratio_1.777778%2C$width_1059%2C$x_0%2C$y_40/t_crop_custom/q_86%2Cf_jpg/6f86800a1fd3464b2df5af18a3594397086d9de9"></enclosure><guid isPermaLink="false">140dc85d-6b3e-4427-ad94-e62b4f0d044e</guid><link>https://www.smh.com.au/world/north-america/republicans-force-us-to-drop-ukraine-aid-at-threat-of-government-shutdown-20231001-p5e8w4.html?ref=rss&amp;utm_medium=rss&amp;utm_source=rss_world</link><pubDate>Sun, 01 Oct 2023 13:40:46 +1100</pubDate><title>Republicans force US to drop Ukraine aid at threat of government shutdown</title></item><item><category>World / Asia</category><dc:creator>Eryk Bagshaw</dc:creator><description>In China, where fashion has been used as a weapon, a new law threatens fines of up to $1000 for clothes that “undermine the spirit” of the nation.</description><enclosure length="0" type="image/jpeg" url="https://static.ffx.io/images/$zoom_0.512%2C$multiply_0.7554%2C$ratio_1.777778%2C$width_1059%2C$x_0%2C$y_55/t_crop_custom/q_86%2Cf_jpg/21cd027fbe4a72a2131fdc893951efcb92795db5"></enclosure><guid isPermaLink="false">dcf4cc37-0c23-445f-8397-fc5608bb14e0</guid><link>https://www.smh.com.au/world/asia/to-protect-nation-s-feelings-beijing-poised-to-regulate-what-people-can-wear-20230928-p5e89d.html?ref=rss&amp;utm_medium=rss&amp;utm_source=rss_world</link><pubDate>Sun, 01 Oct 2023 13:30:00 +1100</pubDate><title>To protect nation’s ‘feelings’, Beijing poised to regulate what people can wear</title></item></channel></rss>
\ No newline at end of file
diff --git a/htdocs/cgi-bin/rss_output/rss_Viral_Now.rdf b/htdocs/cgi-bin/rss_output/rss_Viral_Now.rdf
new file mode 100644 (file)
index 0000000..f146cda
--- /dev/null
@@ -0,0 +1,696 @@
+<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
+       xmlns:content="http://purl.org/rss/1.0/modules/content/"
+       xmlns:wfw="http://wellformedweb.org/CommentAPI/"
+       xmlns:dc="http://purl.org/dc/elements/1.1/"
+       xmlns:atom="http://www.w3.org/2005/Atom"
+       xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
+       xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
+       >
+
+<channel>
+       <title>Viral Now</title>
+       <atom:link href="https://viralnow.uk/feed/" rel="self" type="application/rss+xml" />
+       <link>https://viralnow.uk</link>
+       <description>Buzz breake in the world all News Trandes</description>
+       <lastBuildDate>Wed, 25 Oct 2023 09:50:58 +0000</lastBuildDate>
+       <language>en-US</language>
+       <sy:updatePeriod>
+       hourly  </sy:updatePeriod>
+       <sy:updateFrequency>
+       1       </sy:updateFrequency>
+       <generator>https://wordpress.org/?v=6.3.2</generator>
+       <item>
+               <title>One killed, two others hurt in north Charlotte shooting, CMPD says</title>
+               <link>https://viralnow.uk/one-killed-two-others-hurt-in-north-charlotte-shooting-cmpd-says/</link>
+                                       <comments>https://viralnow.uk/one-killed-two-others-hurt-in-north-charlotte-shooting-cmpd-says/#respond</comments>
+               
+               <dc:creator><![CDATA[]]></dc:creator>
+               <pubDate>Wed, 25 Oct 2023 09:50:58 +0000</pubDate>
+                               <category><![CDATA[USA NEWS]]></category>
+               <guid isPermaLink="false">https://viralnow.uk/one-killed-two-others-hurt-in-north-charlotte-shooting-cmpd-says/</guid>
+
+                                       <description><![CDATA[One person has died and two others have been hurt following a shooting in north Charlotte early Wednesday morning. The Charlotte-Mecklenburg Police Department says the shooting occurred just before midnight inside a gas station on Beatties Ford Road. At the scene, police found three victims with gunshot wounds. One of those victims died at the<a class="article-read-more" href="https://viralnow.uk/one-killed-two-others-hurt-in-north-charlotte-shooting-cmpd-says/"><i class="flownewsicon fa-angle-double-right"></i></a>]]></description>
+                                                                               <content:encoded><![CDATA[<div class="royalads-adsense"><script>\r
+               google_ad_client = 'ca-pub-6828488065609971';\r
+               google_page_url = 'https://macgsm.co/';\r
+               google_ad_slot ='2694358478';\r
+               google_ad_width = 300; \r
+               google_ad_height = 250;\r
+               document.write('<script src="https://pagead2.googlesyndication.com/pagead/show_ads.js"></\script>');\r
+               </script><p></p>
+<div>
+<p>One person has died and two others have been hurt following a shooting in north Charlotte early Wednesday morning.</p>
+<div class="royalads-adsense"><script>\r
+               google_ad_client = 'ca-pub-6828488065609971';\r
+               google_page_url = 'https://macgsm.co/';\r
+               google_ad_slot ='2694358478';\r
+               google_ad_width = 300; \r
+               google_ad_height = 250;\r
+               document.write('<script src="https://pagead2.googlesyndication.com/pagead/show_ads.js"></\script>');\r
+               </script><p>The Charlotte-Mecklenburg Police Department says the shooting occurred just before midnight inside a gas station on Beatties Ford Road. At the scene, police found three victims with gunshot wounds.</p>
+<p>One of those victims died at the gas station. The two others were taken to an area hospital for treatment, according to police.</p>
+<p><a href="https://www.wsoctv.com/news/local/one-shot-east-charlotte-grocery-store-parking-lot/25IUDP7BDFDI5FMCLMPLCYXDF4/" rel="nofollow noopener" target="_blank" data-ylk="slk:ALSO READ: One shot in east Charlotte grocery store parking lot;elm:context_link;itc:0" class="link ">ALSO READ: One shot in east Charlotte grocery store parking lot</a></p>
+<p>Channel 9′s Anthony Kustura spoke with a community advocate, Jacqueline Lewis, who said she is concerned about the violence and people losing their loved ones.</p>
+<p>“All of the shooting out here is just getting bad. It’s bad, and I hate that we’re coming up on the holidays, and we don’t want it to get worse. We really don’t. We want it to get better. We want to be able to walk the streets; we want to be able to go out and shop. We want to be able to do these things without worrying or not that we’re getting gunned down, especially in our own community,” Lewis said.</p>
+<p><a href="https://www.wsoctv.com/news/local/medic-1-hospitalized-after-shooting-southwest-charlotte/Z7BA6SBGRJCDJPV4MPOKNGWSAE/" rel="nofollow noopener" target="_blank" data-ylk="slk:ALSO READ: 2 shot, 1 killed in south Charlotte, police say;elm:context_link;itc:0" class="link ">ALSO READ: 2 shot, 1 killed in south Charlotte, police say</a></p>
+<p>Police haven’t said what led up to the shooting or if a suspect has been identified.</p>
+<p>They are reviewing surveillance video, as well as speaking with witnesses.</p>
+<p><i>This is a developing story; check back at </i><a href="http://wsoctv.com" rel="nofollow noopener" target="_blank" data-ylk="slk:wsoctv.com;elm:context_link;itc:0" class="link "><i>wsoctv.com</i></a><i> for updates.</i></p>
+<p><i><b>VIDEO: One shot in east Charlotte grocery store parking lot</b></i></p>
+</div>
+<div class="royalads-adsense"><script>\r
+               google_ad_client = 'ca-pub-6828488065609971';\r
+               google_page_url = 'https://macgsm.co/';\r
+               google_ad_slot ='2694358478';\r
+               google_ad_width = 300; \r
+               google_ad_height = 250;\r
+               document.write('<script src="https://pagead2.googlesyndication.com/pagead/show_ads.js"></\script>');\r
+               </script>]]></content:encoded>
+                                       
+                                       <wfw:commentRss>https://viralnow.uk/one-killed-two-others-hurt-in-north-charlotte-shooting-cmpd-says/feed/</wfw:commentRss>
+                       <slash:comments>0</slash:comments>
+               
+               
+                       </item>
+               <item>
+               <title>Leader of Lebanon&#8217;s Hezbollah holds talks with senior Hamas and Palestinian Islamic Jihad figures</title>
+               <link>https://viralnow.uk/leader-of-lebanons-hezbollah-holds-talks-with-senior-hamas-and-palestinian-islamic-jihad-figures/</link>
+                                       <comments>https://viralnow.uk/leader-of-lebanons-hezbollah-holds-talks-with-senior-hamas-and-palestinian-islamic-jihad-figures/#respond</comments>
+               
+               <dc:creator><![CDATA[]]></dc:creator>
+               <pubDate>Wed, 25 Oct 2023 09:39:43 +0000</pubDate>
+                               <category><![CDATA[WORLD]]></category>
+               <guid isPermaLink="false">https://viralnow.uk/leader-of-lebanons-hezbollah-holds-talks-with-senior-hamas-and-palestinian-islamic-jihad-figures/</guid>
+
+                                       <description><![CDATA[In this photo released on Wednesday, Oct. 25, 2023, by the Hezbollah Media Relations Office, Hezbollah leader Sayyed Hassan Nasrallah, right, meets with Ziad al-Nakhleh, the head of Palestinian Islamic Jihad, center, and Hamas deputy chief, Saleh al-Arouri, in Beirut, Lebanon. Nasrallah met with top Hamas and Palestinian Islamic Jihad officials, their first reported meeting<a class="article-read-more" href="https://viralnow.uk/leader-of-lebanons-hezbollah-holds-talks-with-senior-hamas-and-palestinian-islamic-jihad-figures/"><i class="flownewsicon fa-angle-double-right"></i></a>]]></description>
+                                                                               <content:encoded><![CDATA[<div class="royalads-adsense"><script>\r
+               google_ad_client = 'ca-pub-6828488065609971';\r
+               google_page_url = 'https://macgsm.co/';\r
+               google_ad_slot ='2694358478';\r
+               google_ad_width = 300; \r
+               google_ad_height = 250;\r
+               document.write('<script src="https://pagead2.googlesyndication.com/pagead/show_ads.js"></\script>');\r
+               </script><p></p>
+<div id="">
+<div class="caas-figure-with-pb" style="max-height: 828px">
+<div>
+<div class="caas-img-container caas-img-lightbox" style="padding-bottom:67%" data-lightbox-src="https://s.yimg.com/ny/api/res/1.2/R4fBu.yCJg8fIdtE3Ok3rQ--/YXBwaWQ9aGlnaGxhbmRlcjt3PTI0MDA7aD0xNjAw/https://media.zenfs.com/en/ap.org/73dca77710439dc8cda239d356109fbd"><span class="caas-img-wrapper"><img decoding="async" class="caas-img" bad-src="https://s.yimg.com/ny/api/res/1.2/OARa.xHegYF2bI0j2kmf9g--/YXBwaWQ9aGlnaGxhbmRlcjt3PTEyNDI7aD04Mjg-/https://media.zenfs.com/en/ap.org/73dca77710439dc8cda239d356109fbd" fetchpriority="high" src="https://s.yimg.com/ny/api/res/1.2/OARa.xHegYF2bI0j2kmf9g--/YXBwaWQ9aGlnaGxhbmRlcjt3PTEyNDI7aD04Mjg-/https://media.zenfs.com/en/ap.org/73dca77710439dc8cda239d356109fbd"/><button class="link caas-lightbox" aria-label="View larger image" data-ylk="sec:image-lightbox;slk:lightbox-open;elm:expand;itc:1"><span class="openArrows icon"><svg width="22" height="22" viewbox="0 0 22 22"><path d="M12.372 0.92C12.372 0.414 12.782 0.004 13.287 0.004L21 0L20.996 7.712C20.996 8.217 20.586 8.628 20.08 8.628C19.574 8.628 19.164 8.217 19.164 7.712V3.183L12.337 10.011L10.988 8.663L17.816 1.835H13.287C12.782 1.835 12.372 1.425 12.372 0.92ZM1.835 17.816L8.663 10.988L10.012 12.337L3.183 19.164H7.712C8.218 19.164 8.627 19.574 8.627 20.08C8.627 20.586 8.218 20.995 7.712 20.995L0 21L0.004 13.287C0.004 12.782 0.414 12.372 0.92 12.372C1.425 12.372 1.835 12.782 1.835 13.287V17.816Z"/></svg></span></button></span></div>
+</div>
+</div>
+<p><figcaption class="caption-collapse collapsed">In this photo released on Wednesday, Oct. 25, 2023, by the Hezbollah Media Relations Office, Hezbollah leader Sayyed Hassan Nasrallah, right, meets with Ziad al-Nakhleh, the head of Palestinian Islamic Jihad, center, and Hamas deputy chief, Saleh al-Arouri, in Beirut, Lebanon. Nasrallah met with top Hamas and Palestinian Islamic Jihad officials, their first reported meeting since the Hamas-Israel war erupted earlier this month and clashes began along the Lebanon-Israel border. (Hezbollah Media Relations Office, via AP )<span class="caption-credit"> (ASSOCIATED PRESS)</span></figcaption></p>
+</div>
+<div>
+<div class="royalads-adsense"><script>\r
+               google_ad_client = 'ca-pub-6828488065609971';\r
+               google_page_url = 'https://macgsm.co/';\r
+               google_ad_slot ='2694358478';\r
+               google_ad_width = 300; \r
+               google_ad_height = 250;\r
+               document.write('<script src="https://pagead2.googlesyndication.com/pagead/show_ads.js"></\script>');\r
+               </script><p>BEIRUT (AP) — The leader of Lebanon’s Hezbollah group held talks on Wednesday with senior Hamas and Palestinian Islamic Jihad figures in a key meeting of three <a href="https://apnews.com/article/israel-palestinian-gaza-war-hamas-hostages-macron-c2482817f230580c20b898bd65e5a4c3" rel="nofollow noopener" target="_blank" data-ylk="slk:top anti-Israel militant groups amid the war raging in Gaza;elm:context_link;itc:0" class="link ">top anti-Israel militant groups amid the war raging in Gaza</a>.</p>
+<p>A brief statement following the meeting said that Hezbollah&#8217;s leader Hassan Nasrallah agreed with Hamas&#8217; Saleh al-Arouri and Islamic Jihad&#8217;s leader Ziad al-Nakhleh on the next steps that the three — along with other Iran-backed militants — should take at this “sensitive stage.&#8221;</p>
+<p>Their goal, according to the statement that was carried on Hezbollah-run and Lebanese state media, was to achieve “a real victory for the resistance in Gaza and Palestine” and halt Israel&#8217;s &#8220;treacherous and brutal aggression against our oppressed and steadfast people in Gaza and the West Bank”.</p>
+<p>No other details were provided. The discussions in Beirut came as the war between Israel and Hamas, the Palestinian militant group that rules the Gaza Strip, is now in its third week. The fighting, triggered by <a href="https://apnews.com/article/israel-palestinians-hamas-attack-military-war-a8f63b07641212f0de61861844e5e71e" rel="nofollow noopener" target="_blank" data-ylk="slk:Hamas&#039; deadly incursion into Israel on Oct. 7;elm:context_link;itc:0" class="link ">Hamas&#8217; deadly incursion into Israel on Oct. 7</a> that killed more than 1,400 people in Israel, has killed more than 5,700 Palestinians in Gaza.</p>
+<p>As the Gaza death toll spirals, <a href="https://apnews.com/article/lebanon-israel-border-mikati-troops-hezbollah-51edb2263e810930569028fef7ff6d2c" rel="nofollow noopener" target="_blank" data-ylk="slk:tensions have also been rising along the tense Lebanon-Israel border;elm:context_link;itc:0" class="link ">tensions have also been rising along the tense Lebanon-Israel border</a>, where Hezbollah members have been exchanging fire with Israeli troops since the day after Hamas&#8217; rampage into Israel.</p>
+<p>For now, those exchanges remain limited to a handful of border towns and Hezbollah and Israeli military positions on both sides. Lebanese army soldiers and United Nations peacekeeping forces have deployed in large numbers.</p>
+<p>Dozens of Hezbollah fighters have been killed in the clashes so far, the group says, while the Israeli military has also announced some deaths among its ranks.</p>
+<p>Nasrallah has yet to publicly speak about the war in Gaza and clashes along the Lebanon-Israel border. However, other Hezbollah top officials have warned Israel against its planned ground invasion into the besieged territory.</p>
+<p>Israeli officials have said they would retaliate aggressively in case of a cross-border attack by Hezbollah from Lebanon.</p>
+<p>“We will cripple it with a force it cannot even imagine, and the consequences for it and the Lebanese state (will be) devastating,&#8221; Israeli Prime Minister Benjamin Netanyahu said while visiting Israeli troops along the border with Lebanon on Sunday.</p>
+<p>Lebanon&#8217;s cash-strapped caretaker government, along regional and international figures, has been scrambling to keep the country out of the war.</p>
+<p>Hezbollah and Israel fought a monthlong war in 2006 that ended in a tense stalemate. Israel sees Iran-backed Hezbollah as its most serious threat, estimating it has some 150,000 rockets and missiles aimed at Israel.</p>
+</div>
+<div class="royalads-adsense"><script>\r
+               google_ad_client = 'ca-pub-6828488065609971';\r
+               google_page_url = 'https://macgsm.co/';\r
+               google_ad_slot ='2694358478';\r
+               google_ad_width = 300; \r
+               google_ad_height = 250;\r
+               document.write('<script src="https://pagead2.googlesyndication.com/pagead/show_ads.js"></\script>');\r
+               </script>]]></content:encoded>
+                                       
+                                       <wfw:commentRss>https://viralnow.uk/leader-of-lebanons-hezbollah-holds-talks-with-senior-hamas-and-palestinian-islamic-jihad-figures/feed/</wfw:commentRss>
+                       <slash:comments>0</slash:comments>
+               
+               
+                       </item>
+               <item>
+               <title>Was the victim of Paterson&#8217;s latest homicide looking to rob the man who killed him?</title>
+               <link>https://viralnow.uk/was-the-victim-of-patersons-latest-homicide-looking-to-rob-the-man-who-killed-him/</link>
+                                       <comments>https://viralnow.uk/was-the-victim-of-patersons-latest-homicide-looking-to-rob-the-man-who-killed-him/#respond</comments>
+               
+               <dc:creator><![CDATA[]]></dc:creator>
+               <pubDate>Wed, 25 Oct 2023 08:49:48 +0000</pubDate>
+                               <category><![CDATA[USA NEWS]]></category>
+               <guid isPermaLink="false">https://viralnow.uk/was-the-victim-of-patersons-latest-homicide-looking-to-rob-the-man-who-killed-him/</guid>
+
+                                       <description><![CDATA[PATERSON — The teenager killed during a shootout near a popular Paterson food truck early Sunday morning may have been part of a group of young men trying to commit an armed robbery, law enforcement sources said. But the robbers chose the wrong victim — someone who was carrying his own gun and resisted being<a class="article-read-more" href="https://viralnow.uk/was-the-victim-of-patersons-latest-homicide-looking-to-rob-the-man-who-killed-him/"><i class="flownewsicon fa-angle-double-right"></i></a>]]></description>
+                                                                               <content:encoded><![CDATA[<div class="royalads-adsense"><script>\r
+               google_ad_client = 'ca-pub-6828488065609971';\r
+               google_page_url = 'https://macgsm.co/';\r
+               google_ad_slot ='2694358478';\r
+               google_ad_width = 300; \r
+               google_ad_height = 250;\r
+               document.write('<script src="https://pagead2.googlesyndication.com/pagead/show_ads.js"></\script>');\r
+               </script><p></p>
+<div>
+<p>PATERSON — The teenager <a href="https://www.northjersey.com/story/news/paterson-press/2023/10/22/six-people-have-been-killed-in-paterson-the-deadliest-month-in-years/71281446007/" rel="nofollow noopener" target="_blank" data-ylk="slk:killed during a shootout;elm:context_link;itc:0" class="link ">killed during a shootout</a> near a popular Paterson food truck early Sunday morning may have been part of a group of young men trying to commit an armed robbery, law enforcement sources said.</p>
+<div class="royalads-adsense"><script>\r
+               google_ad_client = 'ca-pub-6828488065609971';\r
+               google_page_url = 'https://macgsm.co/';\r
+               google_ad_slot ='2694358478';\r
+               google_ad_width = 300; \r
+               google_ad_height = 250;\r
+               document.write('<script src="https://pagead2.googlesyndication.com/pagead/show_ads.js"></\script>');\r
+               </script><p>But the robbers chose the wrong victim — someone who was carrying his own gun and resisted being robbed, the police sources said.</p>
+<h2>Video details early-morning shooting</h2>
+<figure class="caas-figure">
+<div class="caas-figure-with-pb" style="max-height: 641px">
+<div>
+<div class="caas-img-container caas-img-lightbox caas-img-loader" style="padding-bottom:67%" data-lightbox-src="https://s.yimg.com/ny/api/res/1.2/iAbV5hzycJqs.7QJK5oVEg--/YXBwaWQ9aGlnaGxhbmRlcjt3PTI0MDA7aD0xNjAy/https://media.zenfs.com/en/the-bergen-record/cf764d62453e2cc1e51b2eaee6c9711c"><span class="caas-img-wrapper"><img decoding="async" class="caas-img caas-lazy has-preview" alt="Paterson police headquarters at the Frank X. Graves Jr. Public Safety Complex in April 2021." src="https://s.yimg.com/ny/api/res/1.2/H.GPnP.lb0aPpa_N9fGXNQ--/YXBwaWQ9aGlnaGxhbmRlcjt3PTk2MDtoPTY0MQ--/https://media.zenfs.com/en/the-bergen-record/cf764d62453e2cc1e51b2eaee6c9711c"/><noscript><img decoding="async" alt="Paterson police headquarters at the Frank X. Graves Jr. Public Safety Complex in April 2021." src="https://s.yimg.com/ny/api/res/1.2/H.GPnP.lb0aPpa_N9fGXNQ--/YXBwaWQ9aGlnaGxhbmRlcjt3PTk2MDtoPTY0MQ--/https://media.zenfs.com/en/the-bergen-record/cf764d62453e2cc1e51b2eaee6c9711c" class="caas-img"/></noscript><button class="link caas-lightbox" aria-label="View larger image" data-ylk="sec:image-lightbox;slk:lightbox-open;elm:expand;itc:1"><span class="openArrows icon"><svg width="22" height="22" viewbox="0 0 22 22"><path d="M12.372 0.92C12.372 0.414 12.782 0.004 13.287 0.004L21 0L20.996 7.712C20.996 8.217 20.586 8.628 20.08 8.628C19.574 8.628 19.164 8.217 19.164 7.712V3.183L12.337 10.011L10.988 8.663L17.816 1.835H13.287C12.782 1.835 12.372 1.425 12.372 0.92ZM1.835 17.816L8.663 10.988L10.012 12.337L3.183 19.164H7.712C8.218 19.164 8.627 19.574 8.627 20.08C8.627 20.586 8.218 20.995 7.712 20.995L0 21L0.004 13.287C0.004 12.782 0.414 12.372 0.92 12.372C1.425 12.372 1.835 12.782 1.835 13.287V17.816Z"/></svg></span></button></span></div>
+</div>
+</div>
+<p><figcaption class="caption-collapse">Paterson police headquarters at the Frank X. Graves Jr. Public Safety Complex in April 2021.</figcaption></p>
+</figure>
+<p>A video showed a group of about 13 young men and women hanging around on the sidewalk in front of the food truck. The scene seemed peaceful until two men appeared running behind the group, one wearing all black chasing another wearing a white shirt and jeans.</p>
+<p>Both men had guns, and they started shooting at each other, causing the people in front of the food truck to flee, the video showed. As they fired their weapons, the two gunmen fell to the ground in the supermarket parking lot.</p>
+<p>While on the pavement, the man in white rolled to his side, so he was facing his prone pursuer, and fired four or five more shots at him, the video shows. The man in black scrambled to his feet and fled.</p>
+<p><span class="exclude-from-newsgate"><strong>War of words: </strong><a href="https://www.northjersey.com/story/news/paterson-press/2023/10/24/paterson-nj-andre-sayegh-attorney-general-mayor/71292928007/" rel="nofollow noopener" target="_blank" data-ylk="slk:Should Paterson Mayor Andre Sayegh dial down his attacks on NJ’s attorney general?;elm:context_link;itc:0" class="link ">Should Paterson Mayor Andre Sayegh dial down his attacks on NJ’s attorney general?</a></span></p>
+<p>As the video showed the man in white sprawled in the parking lot, another seven or eight shots were fired off-camera.</p>
+<p>Law enforcement sources said the man in black ended up dying from his wounds after being taken to St. Joseph’s University Medical Center, but the man in white survived and was in stable condition at the hospital.</p>
+<p><span class="exclude-from-newsgate"><strong>Fatal shooting: </strong><a href="https://www.northjersey.com/story/news/paterson-press/2023/10/22/six-people-have-been-killed-in-paterson-the-deadliest-month-in-years/71281446007/" rel="nofollow noopener" target="_blank" data-ylk="slk:Paterson has deadliest month in 3 years, with 6 October homicides so far;elm:context_link;itc:0" class="link ">Paterson has deadliest month in 3 years, with 6 October homicides so far</a></span></p>
+<h2>Names not released</h2>
+<p>Authorities have not revealed the names of the two people who were hit in the shootout. As of Tuesday morning, police had not made any arrests in the case. Authorities have not revealed whether the man in the white shirt had registered the gun he used to fend off the robbery.</p>
+<p>The incident became Paterson’s <a href="https://www.northjersey.com/story/news/paterson-press/2023/10/22/six-people-have-been-killed-in-paterson-the-deadliest-month-in-years/71281446007/" rel="nofollow noopener" target="_blank" data-ylk="slk:sixth homicide in October,;elm:context_link;itc:0" class="link ">sixth homicide in October,</a> setting off another <a href="https://www.northjersey.com/story/news/paterson-press/2023/10/24/paterson-nj-andre-sayegh-attorney-general-mayor/71292928007/" rel="nofollow noopener" target="_blank" data-ylk="slk:exchange of words;elm:context_link;itc:0" class="link ">exchange of words</a> between Mayor Andre Sayegh and Attorney General Matthew Platkin about public safety in the city during <a href="https://www.northjersey.com/story/news/paterson-press/2023/03/27/nj-attorney-general-takes-over-paterson-police-department/70052256007/" rel="nofollow noopener" target="_blank" data-ylk="slk:state control of the Police Department.;elm:context_link;itc:0" class="link ">state control of the Police Department.</a></p>
+<p><em>Joe Malinconico is editor of Paterson Press. Email: <a href="https://news.yahoo.com/mailto:editor@patersonpress.com" data-ylk="slk:editor@patersonpress.com;elm:context_link;itc:0" class="link " target="_blank" rel="noopener">editor@patersonpress.com</a></em></p>
+<p><em>This article originally appeared on NorthJersey.com: <a href="https://www.northjersey.com/story/news/paterson-press/2023/10/25/paterson-nj-homicide-victim-armed-robbery-shooting/71304422007/" rel="nofollow noopener" target="_blank" data-ylk="slk:Paterson NJ homicide victim may have attempted armed robbery;elm:context_link;itc:0" class="link ">Paterson NJ homicide victim may have attempted armed robbery</a></em></p>
+</div>
+<div class="royalads-adsense"><script>\r
+               google_ad_client = 'ca-pub-6828488065609971';\r
+               google_page_url = 'https://macgsm.co/';\r
+               google_ad_slot ='2694358478';\r
+               google_ad_width = 300; \r
+               google_ad_height = 250;\r
+               document.write('<script src="https://pagead2.googlesyndication.com/pagead/show_ads.js"></\script>');\r
+               </script>]]></content:encoded>
+                                       
+                                       <wfw:commentRss>https://viralnow.uk/was-the-victim-of-patersons-latest-homicide-looking-to-rob-the-man-who-killed-him/feed/</wfw:commentRss>
+                       <slash:comments>0</slash:comments>
+               
+               
+                       </item>
+               <item>
+               <title>Republican House Members Turn Into Complete Jerks After Trump Question</title>
+               <link>https://viralnow.uk/republican-house-members-turn-into-complete-jerks-after-trump-question/</link>
+                                       <comments>https://viralnow.uk/republican-house-members-turn-into-complete-jerks-after-trump-question/#respond</comments>
+               
+               <dc:creator><![CDATA[]]></dc:creator>
+               <pubDate>Wed, 25 Oct 2023 08:38:28 +0000</pubDate>
+                               <category><![CDATA[WORLD]]></category>
+               <guid isPermaLink="false">https://viralnow.uk/republican-house-members-turn-into-complete-jerks-after-trump-question/</guid>
+
+                                       <description><![CDATA[House Republicans unveiled their latest nominee for speaker on Tuesday night ― and there are some things they absolutely do not want to talk about. Specifically, Donald Trump’s attempts to undermine democracy, overturn the results of the 2020 election and remain in power despite losing the vote. Rep. Mike Johnson (R-La.) was a key player<a class="article-read-more" href="https://viralnow.uk/republican-house-members-turn-into-complete-jerks-after-trump-question/"><i class="flownewsicon fa-angle-double-right"></i></a>]]></description>
+                                                                               <content:encoded><![CDATA[<div class="royalads-adsense"><script>\r
+               google_ad_client = 'ca-pub-6828488065609971';\r
+               google_page_url = 'https://macgsm.co/';\r
+               google_ad_slot ='2694358478';\r
+               google_ad_width = 300; \r
+               google_ad_height = 250;\r
+               document.write('<script src="https://pagead2.googlesyndication.com/pagead/show_ads.js"></\script>');\r
+               </script><p></p>
+<div>
+<p>House <a href="https://www.huffpost.com/news/topic/republican-party" rel="nofollow noopener" target="_blank" data-ylk="slk:Republicans;elm:context_link;itc:0" class="link ">Republicans</a> unveiled their latest nominee for speaker on Tuesday night ― and there are some things they absolutely do not want to talk about.</p>
+<div class="royalads-adsense"><script>\r
+               google_ad_client = 'ca-pub-6828488065609971';\r
+               google_page_url = 'https://macgsm.co/';\r
+               google_ad_slot ='2694358478';\r
+               google_ad_width = 300; \r
+               google_ad_height = 250;\r
+               document.write('<script src="https://pagead2.googlesyndication.com/pagead/show_ads.js"></\script>');\r
+               </script><p>Specifically, <a href="https://www.huffpost.com/news/topic/donald-trump" rel="nofollow noopener" target="_blank" data-ylk="slk:Donald Trump;elm:context_link;itc:0" class="link ">Donald Trump</a>’s attempts to undermine democracy, overturn the results of the 2020 election and remain in power despite losing the vote.</p>
+<p>Rep. Mike Johnson (R-La.) was a key player in Congress in those efforts, with <a href="https://www.nytimes.com/2022/10/03/us/politics/republican-election-objectors.html" rel="nofollow noopener" target="_blank" data-ylk="slk:the New York Times calling him;elm:context_link;itc:0" class="link ">the New York Times calling him</a> “the most important architect of the Electoral College objections.”</p>
+<p>But when ABC’s Rachel Scott tried asking about it, she was shouted down.</p>
+<p>As she began her question, Johnson shook his head and the Republican lawmakers surrounding him booed, jeered and laughed.</p>
+<p>“Shut up! Shut up!” screamed Rep. Virginia Foxx (R-N.C.).</p>
+<p>Foxx told her to “go away” in response to another question.</p>
+<p>Scott described the moment:</p>
+<div class="twitter-tweet-wrapper">
+<blockquote placeholder="" data-theme="light" class="twitter-tweet">
+<p>I asked the Mike Johnson if he stands by his efforts to try to overturn the 2020 election. </p>
+<p>Members started boo&#8217;ing.</p>
+<p>I also asked if he would support more aid to Ukraine and Irael.</p>
+<p>&#8220;Go away! Go away!&#8221; one member shouted.</p>
+<p>&#8220;We’re not doing any policy tonight,&#8221; Johnson said.</p>
+<p>— Rachel Scott (@rachelvscott) <a href="https://twitter.com/rachelvscott/status/1717013048802644057?ref_src=twsrc%5Etfw" rel="nofollow noopener" target="_blank" data-ylk="slk:October 25, 2023;elm:context_link;itc:0" class="link ">October 25, 2023</a></p>
+</blockquote>
+</div>
+<p>The House has been without speaker since a far-right revolt within the party led to the toppling of Rep. <a href="https://www.huffpost.com/news/topic/kevin-mccarthy" rel="nofollow noopener" target="_blank" data-ylk="slk:Kevin McCarthy;elm:context_link;itc:0" class="link ">Kevin McCarthy</a> (R-Calif.), who lasted just nine months in the role.</p>
+<p>But so far, no one has been able to unite the fractious GOP conference and win the job, with Johnson now the fourth candidate in three weeks to be nominated for the position.</p>
+<p>Critics put the GOP lawmakers on blast for their behavior when unveiling their latest candidate for speaker:</p>
+<div class="twitter-tweet-wrapper">
+<blockquote placeholder="" data-theme="light" class="twitter-tweet">
+<p>“Shut up!” When confronted about their latest speaker nominee’s efforts to overturn the election top republicans literally shout down the question <a href="https://t.co/5lfyMfLiUy" rel="nofollow noopener" target="_blank" data-ylk="slk:https://t.co/5lfyMfLiUy;elm:context_link;itc:0" class="link ">https://t.co/5lfyMfLiUy</a></p>
+<p>— Bill Pascrell, Jr. <img src="https://s.w.org/images/core/emoji/14.0.0/72x72/1f1fa-1f1f8.png" alt="🇺🇸" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/14.0.0/72x72/1f1fa-1f1e6.png" alt="🇺🇦" class="wp-smiley" style="height: 1em; max-height: 1em;" /> (@BillPascrell) <a href="https://twitter.com/BillPascrell/status/1717021240555180047?ref_src=twsrc%5Etfw" rel="nofollow noopener" target="_blank" data-ylk="slk:October 25, 2023;elm:context_link;itc:0" class="link ">October 25, 2023</a></p>
+</blockquote>
+</div>
+<div class="twitter-tweet-wrapper">
+<blockquote placeholder="" data-theme="light" class="twitter-tweet">
+<p>This clip should haunt your dreams. It’s a political party gleefully hitting rock bottom without the slightest regard for democracy. <a href="https://t.co/5ZWEMTJZSt" rel="nofollow noopener" target="_blank" data-ylk="slk:https://t.co/5ZWEMTJZSt;elm:context_link;itc:0" class="link ">https://t.co/5ZWEMTJZSt</a></p>
+<p>— Rex Huppke (@RexHuppke) <a href="https://twitter.com/RexHuppke/status/1717023141430509939?ref_src=twsrc%5Etfw" rel="nofollow noopener" target="_blank" data-ylk="slk:October 25, 2023;elm:context_link;itc:0" class="link ">October 25, 2023</a></p>
+</blockquote>
+</div>
+<div class="twitter-tweet-wrapper">
+<blockquote placeholder="" data-theme="light" class="twitter-tweet">
+<p>This may be the most dystopian, disturbing clip I’ve ever seen in my life. Far more horrifying than anything out of the Handmaid’s Tale. This is what a dangerous, fascist cult looks like. <a href="https://t.co/7M2gakLoBE" rel="nofollow noopener" target="_blank" data-ylk="slk:https://t.co/7M2gakLoBE;elm:context_link;itc:0" class="link ">https://t.co/7M2gakLoBE</a></p>
+<p>— Brett Meiselas (@BMeiselas) <a href="https://twitter.com/BMeiselas/status/1717016195386548273?ref_src=twsrc%5Etfw" rel="nofollow noopener" target="_blank" data-ylk="slk:October 25, 2023;elm:context_link;itc:0" class="link ">October 25, 2023</a></p>
+</blockquote>
+</div>
+<div class="twitter-tweet-wrapper">
+<blockquote placeholder="" data-theme="light" class="twitter-tweet">
+<p>This audio is so telling, and defining. There&#8217;s a euphoria to tonight for Johnson and Republicans, but he&#8217;ll regret this. It&#8217;s not even manufactured grace, it&#8217;s dismissive of reality &#8211; on a most critical matter with significant implications for 2024. <a href="https://t.co/LCbFcJQNvH" rel="nofollow noopener" target="_blank" data-ylk="slk:https://t.co/LCbFcJQNvH;elm:context_link;itc:0" class="link ">https://t.co/LCbFcJQNvH</a></p>
+<p>— David Jolly (@DavidJollyFL) <a href="https://twitter.com/DavidJollyFL/status/1717022069227929879?ref_src=twsrc%5Etfw" rel="nofollow noopener" target="_blank" data-ylk="slk:October 25, 2023;elm:context_link;itc:0" class="link ">October 25, 2023</a></p>
+</blockquote>
+</div>
+<div class="twitter-tweet-wrapper">
+<blockquote placeholder="" data-theme="light" class="twitter-tweet">
+<p>Sitting members of Congress telling journalists to “shut up” for asking about a coup attempt against American democracy. <a href="https://t.co/EV52Nc1oR6" rel="nofollow noopener" target="_blank" data-ylk="slk:https://t.co/EV52Nc1oR6;elm:context_link;itc:0" class="link ">https://t.co/EV52Nc1oR6</a></p>
+<p>— No Lie with Brian Tyler Cohen (@NoLieWithBTC) <a href="https://twitter.com/NoLieWithBTC/status/1717013716191826090?ref_src=twsrc%5Etfw" rel="nofollow noopener" target="_blank" data-ylk="slk:October 25, 2023;elm:context_link;itc:0" class="link ">October 25, 2023</a></p>
+</blockquote>
+</div>
+<div class="twitter-tweet-wrapper">
+<blockquote placeholder="" data-theme="light" class="twitter-tweet">
+<p>Looks like my colleague <a href="https://twitter.com/rachelvscott?ref_src=twsrc%5Etfw" rel="nofollow noopener" target="_blank" data-ylk="slk:@rachelvscott;elm:context_link;itc:0" class="link ">@rachelvscott</a> hit a nerve. Well done.</p>
+<p>The surest sign that you have asked the right question is when the powerful congressman you asked it of—and his buddies—try to shut you down and shut you up.</p>
+<p>It’s a perfectly legitimate question. Why won’t he answer? <a href="https://t.co/nu6sMFxhV6" rel="nofollow noopener" target="_blank" data-ylk="slk:https://t.co/nu6sMFxhV6;elm:context_link;itc:0" class="link ">https://t.co/nu6sMFxhV6</a></p>
+<p>— Terry Moran <img src="https://s.w.org/images/core/emoji/14.0.0/72x72/1f1fa-1f1f8.png" alt="🇺🇸" class="wp-smiley" style="height: 1em; max-height: 1em;" /> (@TerryMoran) <a href="https://twitter.com/TerryMoran/status/1717030246967333081?ref_src=twsrc%5Etfw" rel="nofollow noopener" target="_blank" data-ylk="slk:October 25, 2023;elm:context_link;itc:0" class="link ">October 25, 2023</a></p>
+</blockquote>
+</div>
+<div class="twitter-tweet-wrapper">
+<blockquote placeholder="" data-theme="light" class="twitter-tweet">
+<p>Reporter attempts to ask Speaker nominee Johnson about his efforts to overturn the 2020 election and is shouted down and told to shut up. <a href="https://t.co/1L1IePw9vx" rel="nofollow noopener" target="_blank" data-ylk="slk:https://t.co/1L1IePw9vx;elm:context_link;itc:0" class="link ">https://t.co/1L1IePw9vx</a></p>
+<p>— Ron Filipkowski (@RonFilipkowski) <a href="https://twitter.com/RonFilipkowski/status/1717013938032837118?ref_src=twsrc%5Etfw" rel="nofollow noopener" target="_blank" data-ylk="slk:October 25, 2023;elm:context_link;itc:0" class="link ">October 25, 2023</a></p>
+</blockquote>
+</div>
+</div>
+<p><script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script></p>
+<div class="royalads-adsense"><script>\r
+               google_ad_client = 'ca-pub-6828488065609971';\r
+               google_page_url = 'https://macgsm.co/';\r
+               google_ad_slot ='2694358478';\r
+               google_ad_width = 300; \r
+               google_ad_height = 250;\r
+               document.write('<script src="https://pagead2.googlesyndication.com/pagead/show_ads.js"></\script>');\r
+               </script>]]></content:encoded>
+                                       
+                                       <wfw:commentRss>https://viralnow.uk/republican-house-members-turn-into-complete-jerks-after-trump-question/feed/</wfw:commentRss>
+                       <slash:comments>0</slash:comments>
+               
+               
+                       </item>
+               <item>
+               <title>Missing man may have been murdered, police say</title>
+               <link>https://viralnow.uk/missing-man-may-have-been-murdered-police-say/</link>
+                                       <comments>https://viralnow.uk/missing-man-may-have-been-murdered-police-say/#respond</comments>
+               
+               <dc:creator><![CDATA[]]></dc:creator>
+               <pubDate>Wed, 25 Oct 2023 07:48:52 +0000</pubDate>
+                               <category><![CDATA[USA NEWS]]></category>
+               <guid isPermaLink="false">https://viralnow.uk/missing-man-may-have-been-murdered-police-say/</guid>
+
+                                       <description><![CDATA[Police investigating the disappearance of man from south London now believe he may have been murdered. Justin Henry, 34, was last seen on CCTV on 15 October at a McDonald&#8217;s drive-through in Croydon. His car was seen recorded on CCTV later that evening near Crystal Palace. It is thought another person was driving the vehicle.<a class="article-read-more" href="https://viralnow.uk/missing-man-may-have-been-murdered-police-say/"><i class="flownewsicon fa-angle-double-right"></i></a>]]></description>
+                                                                               <content:encoded><![CDATA[<div class="royalads-adsense"><script>\r
+               google_ad_client = 'ca-pub-6828488065609971';\r
+               google_page_url = 'https://macgsm.co/';\r
+               google_ad_slot ='2694358478';\r
+               google_ad_width = 300; \r
+               google_ad_height = 250;\r
+               document.write('<script src="https://pagead2.googlesyndication.com/pagead/show_ads.js"></\script>');\r
+               </script><p></p>
+<div>
+<figure class="caas-figure">
+<div class="caas-figure-with-pb" style="max-height: 261px">
+<div>
+<div class="caas-img-container caas-img-loader" style="padding-bottom:56%"><img decoding="async" class="caas-img caas-lazy has-preview" src="https://s.yimg.com/ny/api/res/1.2/u6qy8.EnIw6YkJcCBPRmUQ--/YXBwaWQ9aGlnaGxhbmRlcjt3PTcwNTtoPTM5Nw--/https://media.zenfs.com/en/bbc_us_articles_995/9d8a80ab32d6a3b9591b9829b0f37d6f"/><noscript><img decoding="async" src="https://s.yimg.com/ny/api/res/1.2/u6qy8.EnIw6YkJcCBPRmUQ--/YXBwaWQ9aGlnaGxhbmRlcjt3PTcwNTtoPTM5Nw--/https://media.zenfs.com/en/bbc_us_articles_995/9d8a80ab32d6a3b9591b9829b0f37d6f" class="caas-img"/></noscript></div>
+</div>
+</div>
+</figure>
+<p>Police investigating the disappearance of man from south London now believe he may have been murdered.</p>
+<div class="royalads-adsense"><script>\r
+               google_ad_client = 'ca-pub-6828488065609971';\r
+               google_page_url = 'https://macgsm.co/';\r
+               google_ad_slot ='2694358478';\r
+               google_ad_width = 300; \r
+               google_ad_height = 250;\r
+               document.write('<script src="https://pagead2.googlesyndication.com/pagead/show_ads.js"></\script>');\r
+               </script><p>Justin Henry, 34, was last seen on CCTV on 15 October at a McDonald&#8217;s drive-through in Croydon.</p>
+<p>His car was seen recorded on CCTV later that evening near Crystal Palace. It is thought another person was driving the vehicle.</p>
+<p>A woman has been arrested on suspicion of kidnap in relation to the disappearance.</p>
+<p>She has been bailed pending further enquiries to a date in mid-January 2024, the Met said.</p>
+<p>Mr Henry&#8217;s family say it was out of character for him to have not made contact.</p>
+<p>Det Ch Insp Matt Coop, from the Met Police, said that all the circumstances and evidence pointed to a potential murder.</p>
+<p>He said: &#8220;You can only imagine how devastating this will be for all those who love and care for him. I know his loved ones will still be hoping and praying that Justin will still be found safe and well.</p>
+<p>&#8220;However, the absence of any proof that Justin is alive, the circumstances around his disappearance, which his family say is totally out of character, and forensic evidence we have gathered, all suggest that he has come to serious harm and may have been murdered.</p>
+<p>&#8220;Along with his family, we sincerely hope this is not the case, and that is why we are reaching out to the public to help us find out what has happened to him.</p>
+<p>&#8220;Please think about the anguish of Justin&#8217;s family and if you have any information that could assist, contact us.&#8221;</p>
+<h3>Witness appeal</h3>
+<p>At about 21:50 BST on 15 October, Justin was seen on CCTV buying food at the McDonald&#8217;s drive-through.</p>
+<p>Police then believe the car, a silver Mercedes E Class, was driven to a nearby location for two and a half hours.</p>
+<p>The Mercedes was later found in Kingswood Drive, near Crystal Palace. Police say it is unclear who was driving the vehicle when it arrived there due to indistinct CCTV images, but Mr Henry&#8217;s family said it was not him.</p>
+<p>Anyone with information can call the police on 101 or leave information anonymously by calling CrimeStoppers on 0800 555111.</p>
+<hr/>
+<p><em>Listen to the best of BBC Radio London on </em><a href="https://www.bbc.co.uk/sounds/curation/p0cjdwm5?xtor=AL-72-%5Bpartner%5D-%5Byahoo.north.america%5D-%5Blink%5D-%5Bnews%5D-%5Bbizdev%5D-%5Bisapi%5D" rel="nofollow noopener" target="_blank" data-ylk="slk:Sounds;elm:context_link;itc:0" class="link ">Sounds</a><em> and follow BBC London on </em><a href="https://www.facebook.com/BBCLondon" rel="nofollow noopener" target="_blank" data-ylk="slk:Facebook;elm:context_link;itc:0" class="link ">Facebook</a><em>, </em><a href="https://twitter.com/BBCLondonNews" rel="nofollow noopener" target="_blank" data-ylk="slk:X;elm:context_link;itc:0" class="link ">X</a><em> and </em><a href="https://www.instagram.com/bbclondon/?hl=en" rel="nofollow noopener" target="_blank" data-ylk="slk:Instagram;elm:context_link;itc:0" class="link ">Instagram</a><em>. Send your story ideas to </em><a href="https://news.yahoo.com/mailto:hellobbclondon@bbc.co.uk" data-ylk="slk:hello.bbclondon@bbc.co.uk;elm:context_link;itc:0" class="link " target="_blank" rel="noopener">hello.bbclondon@bbc.co.uk</a></p>
+<p><img decoding="async" alt="" height="1" width="1" src="https://a1.api.bbc.co.uk/hit.xiti/?s=598314&amp;p=news.england.london.story.67213702.page&amp;x1=%5Burn%3Abbc%3Acps%3Acurie%3Aasset%3Ab4253f98-de02-4fb6-8c30-9e7945577827%5D&amp;x4=%5Ben-gb%5D&amp;x5=%5Bhttps%3A%2F%2Fwww.bbc.com%2Fnews%2Fuk-england-london-67213702%5D&amp;x7=%5Barticle%5D&amp;x8=%5Bsynd_nojs_ISAPI%5D&amp;x9=%5BJustin+Henry%3A+Missing+man+may+have+been+murdered%2C+police+say%5D&amp;x11=%5B2023-10-25T05%3A58%3A05Z%5D&amp;x12=%5B2023-10-25T06%3A43%3A04Z%5D&amp;x19=%5Byahoo.north.america%5D"/></div>
+<p><script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script><script async defer src="https://platform.instagram.com/en_US/embeds.js"></script></p>
+<div class="royalads-adsense"><script>\r
+               google_ad_client = 'ca-pub-6828488065609971';\r
+               google_page_url = 'https://macgsm.co/';\r
+               google_ad_slot ='2694358478';\r
+               google_ad_width = 300; \r
+               google_ad_height = 250;\r
+               document.write('<script src="https://pagead2.googlesyndication.com/pagead/show_ads.js"></\script>');\r
+               </script>]]></content:encoded>
+                                       
+                                       <wfw:commentRss>https://viralnow.uk/missing-man-may-have-been-murdered-police-say/feed/</wfw:commentRss>
+                       <slash:comments>0</slash:comments>
+               
+               
+                       </item>
+               <item>
+               <title>Trump rages as former acolytes turn against him under legal heat</title>
+               <link>https://viralnow.uk/trump-rages-as-former-acolytes-turn-against-him-under-legal-heat/</link>
+                                       <comments>https://viralnow.uk/trump-rages-as-former-acolytes-turn-against-him-under-legal-heat/#respond</comments>
+               
+               <dc:creator><![CDATA[]]></dc:creator>
+               <pubDate>Wed, 25 Oct 2023 07:37:54 +0000</pubDate>
+                               <category><![CDATA[WORLD]]></category>
+               <guid isPermaLink="false">https://viralnow.uk/trump-rages-as-former-acolytes-turn-against-him-under-legal-heat/</guid>
+
+                                       <description><![CDATA[Donald Trump’s wealth, power and fame acted like a magnet for new associates keen to enter his orbit. But now, key figures who sought a share of his reflected glory are turning against him to save themselves. The ex-president absorbed a trio of blows Tuesday that worsened his legal peril and underscored how the 2024<a class="article-read-more" href="https://viralnow.uk/trump-rages-as-former-acolytes-turn-against-him-under-legal-heat/"><i class="flownewsicon fa-angle-double-right"></i></a>]]></description>
+                                                                               <content:encoded><![CDATA[<div class="royalads-adsense"><script>\r
+               google_ad_client = 'ca-pub-6828488065609971';\r
+               google_page_url = 'https://macgsm.co/';\r
+               google_ad_slot ='2694358478';\r
+               google_ad_width = 300; \r
+               google_ad_height = 250;\r
+               document.write('<script src="https://pagead2.googlesyndication.com/pagead/show_ads.js"></\script>');\r
+               </script><p></p>
+<div>
+<p><a href="https://www.cnn.com/specials/politics/president-donald-trump-45?cid=external-feeds_iluminar_yahoo" rel="nofollow noopener" target="_blank" data-ylk="slk:Donald Trump’s;elm:context_link;itc:0" class="link ">Donald Trump’s</a> wealth, power and fame acted like a magnet for new associates keen to enter his orbit. But now, key figures who sought a share of his reflected glory are turning against him to save themselves.</p>
+<div class="royalads-adsense"><script>\r
+               google_ad_client = 'ca-pub-6828488065609971';\r
+               google_page_url = 'https://macgsm.co/';\r
+               google_ad_slot ='2694358478';\r
+               google_ad_width = 300; \r
+               google_ad_height = 250;\r
+               document.write('<script src="https://pagead2.googlesyndication.com/pagead/show_ads.js"></\script>');\r
+               </script><p>The ex-president absorbed a trio of blows Tuesday that worsened his legal peril and underscored how the 2024 election – in which he is the front-runner for the GOP nomination – will play out in the courts rather than traditional voting battlegrounds.</p>
+<p>In the most significant development, <a href="https://www.cnn.com/2023/10/24/politics/mark-meadows/index.html?cid=external-feeds_iluminar_yahoo" rel="nofollow noopener" target="_blank" data-ylk="slk:ABC News;elm:context_link;itc:0" class="link ">ABC News</a> reported that Trump’s former chief of staff, <a href="https://www.cnn.com/2023/08/29/politics/mark-meadows-gamble-trump-fani-willis/index.html?cid=external-feeds_iluminar_yahoo" rel="nofollow noopener" target="_blank" data-ylk="slk:Mark Meadows;elm:context_link;itc:0" class="link ">Mark Meadows</a>, had met federal prosecutors multiple times and had categorically undermined the ex-president’s narrative about a stolen election. Meadows was the gatekeeper to the Oval Office in the critical days when Trump was allegedly plotting to steal the 2020 election after voters rejected his bid for a second term. CNN has reached out to Meadows’ attorney for comment.</p>
+<p>In another damaging twist, former Trump lawyer <a href="https://www.cnn.com/2023/10/24/politics/jenna-ellis-fulton-county/index.html?cid=external-feeds_iluminar_yahoo" rel="nofollow noopener" target="_blank" data-ylk="slk:Jenna Ellis;elm:context_link;itc:0" class="link ">Jenna Ellis</a>, who blanketed television networks after President Joe Biden’s victory to falsely claim he was elected because of fraud, reached a plea deal with Georgia prosecutors. Ellis on Tuesday tearfully confessed to the felony of aiding and abetting false statements that she and other lawyers told Peach State lawmakers. She was the third former Trump acolyte to agree to testify against the ex-president and others this week. The election subversion prosecution brought by Fulton County District Attorney Fani Willis is now following the classic playbook of a racketeering case wherein smaller fish are peeled away for reduced sentences to secure their testimony against the alleged kingpin.</p>
+<p>“If I knew then what I knew now, I would have declined to represent Donald Trump in these post-election challenges. I look back on this experience with deep remorse,” Ellis said.</p>
+<p>Ellis was a comparatively junior figure in Trump’s schemes to overthrow the election, although there is reason to believe she was in critical meetings of interest to prosecutors. Her guilty plea also looks like terrible news for former New York Mayor Rudy Giuliani, who also served as a Trump lawyer after the election and with whom Ellis worked closely.</p>
+<p>Her repudiation of her own behavior marks an ominous omen for Trump because it shows that while falsehoods about election fraud are still a potent political force in the GOP and conservative media, it’s the truth that matters in court. Under the legal system, the former president could face a level of accountability that the US political system, which is still buckling under his influence, can’t match.</p>
+<p>One of Trump’s former associates was feeling no remorse when he arrived in court in New York on Tuesday seeking to undermine another Trump legal defense. The former president’s longtime fixer, Michael Cohen, came face to face with his ex-boss for the first time in five years when he took the stand in a civil trial in which prosecutors are seeking to end Trump’s ability to do business in the state. Cohen has already gone to jail for tax fraud, making false statements to Congress and campaign finance violations – some of which were linked to his work for Trump before he launched his political career. Cohen once vowed to take a bullet for his former boss but has left no doubt that he’s been itching to testify against him for many months. While his own conviction raises credibility issues about his testimony, Cohen implicated Trump on Tuesday, saying his former boss directed him to inflate his net worth on financial statements.</p>
+<p>“Heck of a reunion,” Cohen told reporters after testifying under Trump’s gaze.</p>
+<h3>Trump feels the growing legal heat</h3>
+<p>Each of Tuesday’s legal dramas threatened to undermine Trump’s position in separate cases, to which he has pleaded not guilty, and emphasized how the Republican front-runner’s bid to recapture the White House will be shadowed by his criminal liability.</p>
+<p>And for someone who has the exaggerated sense of loyalty harbored by Trump – albeit one that mostly goes one way – the spectacle of three former associates turning against him will be especially irksome.</p>
+<p>While the crush of legal cases bearing down on him hasn’t diminished his dominance in the GOP presidential race, there are increasing signs that the courtroom pressure is beginning to grate on a former president who, in a lifetime of business, personal and political scrapes, has made an art form of dodging accountability.</p>
+<p>In a rage-filled stream of consciousness on his Truth Social network on Tuesday night, Trump lashed out at <a href="https://abcnews.go.com/US/chief-staff-mark-meadows-granted-immunity-tells-special/story?id=104231281" rel="nofollow noopener" target="_blank" data-ylk="slk:the ABC report;elm:context_link;itc:0" class="link ">the ABC report</a> about Meadows.</p>
+<p>“I don’t think Mark Meadows would lie about the Rigged and Stollen 2020 Presidential Election merely for getting IMMUNITY against Prosecution (PERSECUTION!),” the former president wrote.</p>
+<p>“Some people would make that deal, but they are weaklings and cowards, and so bad for the future our Failing Nation. I don’t think that Mark Meadows is one of them, but who really knows? MAKE AMERICA GREAT AGAIN!!!”</p>
+<p>This came only a day after Trump absurdly <a href="https://www.cnn.com/2023/10/23/politics/donald-trump-nelson-mandela/index.html?cid=external-feeds_iluminar_yahoo" rel="nofollow noopener" target="_blank" data-ylk="slk:compared himself to Nelson Mandela;elm:context_link;itc:0" class="link ">compared himself to Nelson Mandela</a>, who spent 27 years in prison – much of it in a tiny cell on Robben Island – enduring forced labor in a quarry for opposing the racist apartheid system in South Africa. After his release, the Nobel Peace Prize winner remade his divided nation as president and became a symbol of unity, humility, racial healing and forgiveness – qualities rarely shown by Trump.</p>
+<p>“I don’t mind being Nelson Mandela, because I’m doing it for a reason,” the ex-president told supporters in New Hampshire.</p>
+<p>Trump’s persecution complex is revealing, however. The former president is portraying himself as a bulwark against a government that he claims is weaponized against him and his supporters. The idea that he is a political martyr who is being unfairly targeted by the Biden administration – despite 91 charges across his four criminal indictments – may be his only credible campaign tactic. After all, he may be a convicted felon by Election Day in less than 13 months. While that prospect doesn’t seem to faze Republican primary voters, it may be a serious vulnerability among a broader electorate.</p>
+<h3>The significance of the Meadows developments</h3>
+<p>Legal watchers in Washington have speculated for months about the activity of Meadows, a former North Carolina congressman who became the last chief of staff of Trump’s turbulent White House term.</p>
+<p>During his testimony before a federal grand jury, Meadows was also asked about efforts to overturn the election as well as Trump’s handling of classified documents, <a href="https://www.cnn.com/2023/06/06/politics/mark-meadows-grand-jury-trump-probe/index.html?cid=external-feeds_iluminar_yahoo" rel="nofollow noopener" target="_blank" data-ylk="slk:CNN previously reported;elm:context_link;itc:0" class="link ">CNN previously reported</a>.</p>
+<p>But if, as ABC News has reported, he has been granted immunity by special counsel Jack Smith and met federal prosecutors multiple times, that qualifies for the over-used term of “bombshell.”</p>
+<p>Meadows is also a key figure in the Fulton County, Georgia, probe, where he made a failed effort to have his case elevated to federal court after unsuccessfully arguing his actions at the behest of Trump’s election thwarting effort fell under his official duties.</p>
+<p>Meadows, who met Smith’s team at least three times this year, told investigators he did not believe the election was stolen and that Trump was being “dishonest” in claiming victory shortly after polls closed in 2020, according to ABC.</p>
+<p>The agreement is the first publicly known in the special counsel’s investigation into the events around January 6, 2021. The exact terms of Meadows’ deal with prosecutors are not clear, but often such agreements allow a person with valuable information about an investigation immunity from prosecution in exchange for fully cooperating.</p>
+<p>The reported details of Meadows’ testimony could be hugely damaging for Trump because a fundamental plank of the ex-president’s defense relies on the notion that he sincerely believed that the election was stolen and that his actions were not therefore criminal because they were an exercise of his right to free speech.</p>
+<p>It has long been the case that while those around Trump in business and politics often find themselves slipping deep into legal trouble, he skips free. The apparent decisions of Meadows, Ellis and Cohen – together with the mass of legal threats now facing the former president – suggest that charmed life is about to meet its biggest challenge yet.</p>
+<p>For more CNN news and newsletters create an account at <a href="http://www.cnn.com/account/register?source=external-feeds_iluminar&amp;cid=external-feeds_iluminar_yahoo&amp;registration_email_campaign=https://www.cnn.com/newsletters" rel="nofollow noopener" target="_blank" data-ylk="slk:CNN.com;elm:context_link;itc:0" class="link ">CNN.com</a></p>
+</div>
+<div class="royalads-adsense"><script>\r
+               google_ad_client = 'ca-pub-6828488065609971';\r
+               google_page_url = 'https://macgsm.co/';\r
+               google_ad_slot ='2694358478';\r
+               google_ad_width = 300; \r
+               google_ad_height = 250;\r
+               document.write('<script src="https://pagead2.googlesyndication.com/pagead/show_ads.js"></\script>');\r
+               </script>]]></content:encoded>
+                                       
+                                       <wfw:commentRss>https://viralnow.uk/trump-rages-as-former-acolytes-turn-against-him-under-legal-heat/feed/</wfw:commentRss>
+                       <slash:comments>0</slash:comments>
+               
+               
+                       </item>
+               <item>
+               <title>GSK&#8217;s common respiratory virus vaccine shows potential in adults aged 50-59</title>
+               <link>https://viralnow.uk/gsks-common-respiratory-virus-vaccine-shows-potential-in-adults-aged-50-59/</link>
+                                       <comments>https://viralnow.uk/gsks-common-respiratory-virus-vaccine-shows-potential-in-adults-aged-50-59/#respond</comments>
+               
+               <dc:creator><![CDATA[]]></dc:creator>
+               <pubDate>Wed, 25 Oct 2023 06:47:40 +0000</pubDate>
+                               <category><![CDATA[USA NEWS]]></category>
+               <guid isPermaLink="false">https://viralnow.uk/gsks-common-respiratory-virus-vaccine-shows-potential-in-adults-aged-50-59/</guid>
+
+                                       <description><![CDATA[(Reuters) -GSK said its vaccine for respiratory syncytial virus (RSV) showed positive preliminary results in a late-stage trial to protect adults aged 50 to 59 from the disease that causes thousands of hospitalisations and deaths annually. The British drugmaker&#8217;s shot, called Arexvy, met the primary goal in the Phase-III trial of eliciting an immune response<a class="article-read-more" href="https://viralnow.uk/gsks-common-respiratory-virus-vaccine-shows-potential-in-adults-aged-50-59/"><i class="flownewsicon fa-angle-double-right"></i></a>]]></description>
+                                                                               <content:encoded><![CDATA[<div class="royalads-adsense"><script>\r
+               google_ad_client = 'ca-pub-6828488065609971';\r
+               google_page_url = 'https://macgsm.co/';\r
+               google_ad_slot ='2694358478';\r
+               google_ad_width = 300; \r
+               google_ad_height = 250;\r
+               document.write('<script src="https://pagead2.googlesyndication.com/pagead/show_ads.js"></\script>');\r
+               </script><p></p>
+<div>
+<p>(Reuters) -GSK said its vaccine for respiratory syncytial virus (RSV) showed positive preliminary results in a late-stage trial to protect adults aged 50 to 59 from the disease that causes thousands of hospitalisations and deaths annually.</p>
+<div class="royalads-adsense"><script>\r
+               google_ad_client = 'ca-pub-6828488065609971';\r
+               google_page_url = 'https://macgsm.co/';\r
+               google_ad_slot ='2694358478';\r
+               google_ad_width = 300; \r
+               google_ad_height = 250;\r
+               document.write('<script src="https://pagead2.googlesyndication.com/pagead/show_ads.js"></\script>');\r
+               </script><p>The British drugmaker&#8217;s shot, called Arexvy, met the primary goal in the Phase-III trial of eliciting an immune response in adults of the reported age group who are at an increased risk of catching the virus due to certain underlying medical conditions, the company said on Wednesday.</p>
+<p>RSV typically causes cold-like symptoms, but is a leading cause of pneumonia in toddlers and the elderly.</p>
+<p>The shot has already been approved in the United States, Europe, Japan and other countries to protect adults aged 60 years and older.</p>
+<p>(Reporting by Eva Mathews in Bengaluru; Editing by Sherry Jacob-Phillips)</p>
+</div>
+<div class="royalads-adsense"><script>\r
+               google_ad_client = 'ca-pub-6828488065609971';\r
+               google_page_url = 'https://macgsm.co/';\r
+               google_ad_slot ='2694358478';\r
+               google_ad_width = 300; \r
+               google_ad_height = 250;\r
+               document.write('<script src="https://pagead2.googlesyndication.com/pagead/show_ads.js"></\script>');\r
+               </script>]]></content:encoded>
+                                       
+                                       <wfw:commentRss>https://viralnow.uk/gsks-common-respiratory-virus-vaccine-shows-potential-in-adults-aged-50-59/feed/</wfw:commentRss>
+                       <slash:comments>0</slash:comments>
+               
+               
+                       </item>
+               <item>
+               <title>Analysis-China chases US and Russia guided-missile submarine capabilities with new vessels</title>
+               <link>https://viralnow.uk/analysis-china-chases-us-and-russia-guided-missile-submarine-capabilities-with-new-vessels/</link>
+                                       <comments>https://viralnow.uk/analysis-china-chases-us-and-russia-guided-missile-submarine-capabilities-with-new-vessels/#respond</comments>
+               
+               <dc:creator><![CDATA[]]></dc:creator>
+               <pubDate>Wed, 25 Oct 2023 06:37:12 +0000</pubDate>
+                               <category><![CDATA[WORLD]]></category>
+               <guid isPermaLink="false">https://viralnow.uk/analysis-china-chases-us-and-russia-guided-missile-submarine-capabilities-with-new-vessels/</guid>
+
+                                       <description><![CDATA[By Greg Torode HONG KONG (Reuters) &#8211; China has launched its first nuclear-powered guided missile submarines, according to the Pentagon&#8217;s latest report on China&#8217;s military &#8211; giving it land and sea attack options once the sole province of U.S. and Russian vessels. The Pentagon report, published Oct. 20, marks the first apparent confirmation that modified<a class="article-read-more" href="https://viralnow.uk/analysis-china-chases-us-and-russia-guided-missile-submarine-capabilities-with-new-vessels/"><i class="flownewsicon fa-angle-double-right"></i></a>]]></description>
+                                                                               <content:encoded><![CDATA[<div class="royalads-adsense"><script>\r
+               google_ad_client = 'ca-pub-6828488065609971';\r
+               google_page_url = 'https://macgsm.co/';\r
+               google_ad_slot ='2694358478';\r
+               google_ad_width = 300; \r
+               google_ad_height = 250;\r
+               document.write('<script src="https://pagead2.googlesyndication.com/pagead/show_ads.js"></\script>');\r
+               </script><p></p>
+<div>
+<p>By Greg Torode</p>
+<div class="royalads-adsense"><script>\r
+               google_ad_client = 'ca-pub-6828488065609971';\r
+               google_page_url = 'https://macgsm.co/';\r
+               google_ad_slot ='2694358478';\r
+               google_ad_width = 300; \r
+               google_ad_height = 250;\r
+               document.write('<script src="https://pagead2.googlesyndication.com/pagead/show_ads.js"></\script>');\r
+               </script><p>HONG KONG (Reuters) &#8211; China has launched its first nuclear-powered guided missile submarines, according to the Pentagon&#8217;s latest report on China&#8217;s military &#8211; giving it land and sea attack options once the sole province of U.S. and Russian vessels.</p>
+<p>The Pentagon report, published Oct. 20, marks the first apparent confirmation that modified submarines seen in Chinese shipyards over the last 18 months are Type 093B guided missile submarines.</p>
+<p>Reuters revealed in May 2022 that satellite images from Huludao shipyard in northeast China showed a new or upgraded class of submarine, possibly with vertical tubes for launching cruise missiles.</p>
+<p>The Pentagon report says that in the short term, the Chinese navy &#8220;will have the ability to conduct long-range precision strikes against land targets from its submarine and surface combatants using land-attack cruise missiles, notably enhancing (China&#8217;s) power projection capability&#8221;.</p>
+<p>Known as SSGNs, conventionally armed missile submarines were developed by the Soviet Union during the Cold War in part to target U.S. aircraft carriers, while the U.S. Navy developed its own version by converting ballistic missile boats to carry large numbers of land-attack Tomahawk cruise missiles.</p>
+<p>Cruise missiles are typically long-range, precision weapons that, unlike ballistic weapons, fly at low altitudes or skim the surface of the sea.</p>
+<p>The submarine USS Florida fired 93 Tomahawks against Libyan air defences in 2011 &#8211; the first combat strikes from a U.S. SSGN and an event that regional military attaches say was closely studied by Chinese strategists.</p>
+<p>Some analysts say the PLA navy will be eager to deploy the vessels as an extra weapon against aircraft carriers as well as a land-attack platform, allowing strikes from a far greater range than its fleets of smaller attack submarines.</p>
+<p>The report notes that three of the new SSGNs could be operational by next year, as part of a wider expansion of its submarine fleet &#8211; both nuclear and diesel powered &#8211; which could number 65 vessels in 2025.</p>
+<p>The Chinese defence ministry did not respond to questions from Reuters.</p>
+<p>The confirmation comes amid an as China constructs a new generation of nuclear-armed boats as part of its evolving deterrent force.</p>
+<p>The effort to track China&#8217;s submarines at sea is one of the core drivers of increased deployments and contingency planning by the U.S. Navy and other militaries across the Indo-Pacific region.</p>
+<p>Singapore-based security scholar Collin Koh said the SSGNs were an important new capability for the Chinese navy.</p>
+<p>With an expected core armament of cruise missiles, &#8220;this potentially allows them to carry out saturated land and anti-ship attacks at standoff range”, he said, which would complicate strategic calculations by China&#8217;s rivals.</p>
+<p>&#8220;I would also expect the Chinese have learned from the Russian experience in using them to threaten U.S. aircraft carriers – with an SSGN, you can launch strikes at standoff range, unlike a typical attack submarine that could have more limited weapon options, and that is a real advantage,&#8221; said Koh, of the S. Rajaratnam School of International Studies.</p>
+<p>Research discussed at the U.S. Naval War College in May noted that the PLA was close to breakthroughs in making its nuclear-powered submarines far quieter and more difficult for the U.S. and its allies to track.</p>
+<p>Some diplomats and analysts said, however, that it was unclear whether those breakthroughs had been incorporated into the recently launched SSGNs. The upgrades are expected in nuclear-powered boats launched before the end of the decade.</p>
+<p>&#8220;Unless they are certain of improvements, we can expect the PLA navy to be cautious in how they initially deploy them,&#8221; said an Asian military attache who is tracking China&#8217;s submarine force. The attache declined to be named because of the sensitivity of the matter. &#8220;But we know the submarine force is a priority for Xi Jinping, and this is one more sign they are getting there.&#8221;</p>
+<p>(Reporting By Greg Torode. Editing by Gerry Doyle)</p>
+</div>
+<div class="royalads-adsense"><script>\r
+               google_ad_client = 'ca-pub-6828488065609971';\r
+               google_page_url = 'https://macgsm.co/';\r
+               google_ad_slot ='2694358478';\r
+               google_ad_width = 300; \r
+               google_ad_height = 250;\r
+               document.write('<script src="https://pagead2.googlesyndication.com/pagead/show_ads.js"></\script>');\r
+               </script>]]></content:encoded>
+                                       
+                                       <wfw:commentRss>https://viralnow.uk/analysis-china-chases-us-and-russia-guided-missile-submarine-capabilities-with-new-vessels/feed/</wfw:commentRss>
+                       <slash:comments>0</slash:comments>
+               
+               
+                       </item>
+               <item>
+               <title>Taiwan hopeful of reaching tax deal with US next year</title>
+               <link>https://viralnow.uk/taiwan-hopeful-of-reaching-tax-deal-with-us-next-year/</link>
+                                       <comments>https://viralnow.uk/taiwan-hopeful-of-reaching-tax-deal-with-us-next-year/#respond</comments>
+               
+               <dc:creator><![CDATA[]]></dc:creator>
+               <pubDate>Wed, 25 Oct 2023 05:45:17 +0000</pubDate>
+                               <category><![CDATA[USA NEWS]]></category>
+               <guid isPermaLink="false">https://viralnow.uk/taiwan-hopeful-of-reaching-tax-deal-with-us-next-year/</guid>
+
+                                       <description><![CDATA[TAIPEI (Reuters) &#8211; Taiwan hopes to reach a long-mooted tax agreement with the United States next year, Finance Minister Chuang Tsui-yun said on Wednesday, which both sides have said will foster more investment and Taipei has long pushed for. Republican and Democratic members of the U.S. House of Representatives introduced legislation in July that would<a class="article-read-more" href="https://viralnow.uk/taiwan-hopeful-of-reaching-tax-deal-with-us-next-year/"><i class="flownewsicon fa-angle-double-right"></i></a>]]></description>
+                                                                               <content:encoded><![CDATA[<div class="royalads-adsense"><script>\r
+               google_ad_client = 'ca-pub-6828488065609971';\r
+               google_page_url = 'https://macgsm.co/';\r
+               google_ad_slot ='2694358478';\r
+               google_ad_width = 300; \r
+               google_ad_height = 250;\r
+               document.write('<script src="https://pagead2.googlesyndication.com/pagead/show_ads.js"></\script>');\r
+               </script><p></p>
+<div>
+<p>TAIPEI (Reuters) &#8211; Taiwan hopes to reach a long-mooted tax agreement with the United States next year, Finance Minister Chuang Tsui-yun said on Wednesday, which both sides have said will foster more investment and Taipei has long pushed for.</p>
+<div class="royalads-adsense"><script>\r
+               google_ad_client = 'ca-pub-6828488065609971';\r
+               google_page_url = 'https://macgsm.co/';\r
+               google_ad_slot ='2694358478';\r
+               google_ad_width = 300; \r
+               google_ad_height = 250;\r
+               document.write('<script src="https://pagead2.googlesyndication.com/pagead/show_ads.js"></\script>');\r
+               </script><p>Republican and Democratic members of the U.S. House of Representatives introduced legislation in July that would authorize <button class="caas-xray-inline caas-xray-entity caas-xray-pill" data-ylk="cid:Joe_Biden;pos:1;elmt:wiki;sec:pill-inline-entity;elm:pill-inline-text;itc:1;cat:OfficeHolder;" data-entity-id="Joe_Biden">President Joe Biden</button>&#8216;s administration to negotiate the tax agreement with Taiwan.</p>
+<p>The lawmakers said the agreement, similar to a treaty, would facilitate investment, protect against tax evasion and allow businesses in both the United States and Taiwan to avoid double taxation.</p>
+<p>Chuang, taking questions in parliament, said she would take advantage of attending a meeting of the Asia Pacific Economic Cooperation, or APEC, grouping next month in the United States to discuss the plan with U.S. Treasury Secretary Janet Yellen.</p>
+<p>Chuang said the focus of the agreement is to resolve issues such as double taxation of personal income and corporate profits, and if signed, it will create a better environment to attract more investment.</p>
+<p>&#8220;We hope that it can be signed before June next year. After signing it, the procedures on our side can be completed soon and the bilateral agreement will take effect,&#8221; she said.</p>
+<p>Taiwanese companies have cumulatively invested $28.5 billion in the United States and U.S. companies have invested $26.6 billion in Taiwan, Chuang said.</p>
+<p>Washington and Taipei do not have formal diplomatic relations, so the lack of a tax agreement means Taiwanese businesses and individuals are taxed on their income by both the U.S. and Taiwanese governments.</p>
+<p>Taiwan is a major global supplier of the semiconductor chips essential to a wide range of consumer goods and military equipment. Washington has been keen to get Taiwanese chip companies to build factories in the U.S.</p>
+<p>Taiwan Semiconductor Manufacturing Co Ltd, the world&#8217;s largest contract chipmaker, is investing $40 billion in factories in the U.S. state of Arizona.</p>
+<p>(Reporting by Roger Tung and Ben Blanchard; Editing by Lincoln Feast)</p>
+</div>
+<div class="royalads-adsense"><script>\r
+               google_ad_client = 'ca-pub-6828488065609971';\r
+               google_page_url = 'https://macgsm.co/';\r
+               google_ad_slot ='2694358478';\r
+               google_ad_width = 300; \r
+               google_ad_height = 250;\r
+               document.write('<script src="https://pagead2.googlesyndication.com/pagead/show_ads.js"></\script>');\r
+               </script>]]></content:encoded>
+                                       
+                                       <wfw:commentRss>https://viralnow.uk/taiwan-hopeful-of-reaching-tax-deal-with-us-next-year/feed/</wfw:commentRss>
+                       <slash:comments>0</slash:comments>
+               
+               
+                       </item>
+               <item>
+               <title>Accuser of Marvel actor Jonathan Majors expected to be arrested Wednesday in his misdemeanor cross-complaint against her</title>
+               <link>https://viralnow.uk/accuser-of-marvel-actor-jonathan-majors-expected-to-be-arrested-wednesday-in-his-misdemeanor-cross-complaint-against-her/</link>
+                                       <comments>https://viralnow.uk/accuser-of-marvel-actor-jonathan-majors-expected-to-be-arrested-wednesday-in-his-misdemeanor-cross-complaint-against-her/#respond</comments>
+               
+               <dc:creator><![CDATA[]]></dc:creator>
+               <pubDate>Wed, 25 Oct 2023 05:35:53 +0000</pubDate>
+                               <category><![CDATA[WORLD]]></category>
+               <guid isPermaLink="false">https://viralnow.uk/accuser-of-marvel-actor-jonathan-majors-expected-to-be-arrested-wednesday-in-his-misdemeanor-cross-complaint-against-her/</guid>
+
+                                       <description><![CDATA[Grace Jabbari accused Marvel actor Jonathan Majors of hitting her in March 2023. Jabbari, his ex, is expected to be charged with misdemeanor assault Wednesday in Majors&#8217; cross-complaint against her. But prosecutors told the choreographer they&#8217;ll drop the NYPD&#8217;s charges, Insider has learned. The choreographer ex-girlfriend who accused Jonathan Majors of misdemeanor domestic violence back<a class="article-read-more" href="https://viralnow.uk/accuser-of-marvel-actor-jonathan-majors-expected-to-be-arrested-wednesday-in-his-misdemeanor-cross-complaint-against-her/"><i class="flownewsicon fa-angle-double-right"></i></a>]]></description>
+                                                                               <content:encoded><![CDATA[<div class="royalads-adsense"><script>\r
+               google_ad_client = 'ca-pub-6828488065609971';\r
+               google_page_url = 'https://macgsm.co/';\r
+               google_ad_slot ='2694358478';\r
+               google_ad_width = 300; \r
+               google_ad_height = 250;\r
+               document.write('<script src="https://pagead2.googlesyndication.com/pagead/show_ads.js"></\script>');\r
+               </script><p></p>
+<div>
+<ul class="caas-list caas-list-bullet">
+<li>
+<p>Grace Jabbari accused Marvel actor Jonathan Majors of hitting her in March 2023.</p>
+</li>
+<li>
+<div class="royalads-adsense"><script>\r
+               google_ad_client = 'ca-pub-6828488065609971';\r
+               google_page_url = 'https://macgsm.co/';\r
+               google_ad_slot ='2694358478';\r
+               google_ad_width = 300; \r
+               google_ad_height = 250;\r
+               document.write('<script src="https://pagead2.googlesyndication.com/pagead/show_ads.js"></\script>');\r
+               </script><p>Jabbari, his ex, is expected to be charged with misdemeanor assault Wednesday in Majors&#8217; cross-complaint against her.</p>
+</li>
+<li>
+<p>But prosecutors told the choreographer they&#8217;ll drop the NYPD&#8217;s charges, Insider has learned.</p>
+</li>
+</ul>
+<p>The choreographer ex-girlfriend who accused Jonathan Majors of misdemeanor domestic violence back in March 2023 is expected to surrender to the NYPD on Wednesday on <a href="https://www.insider.com/marvels-jonathan-majors-files-nypd-complaint-against-assault-accuser-sources-2023-6?utm_medium=referral&amp;utm_source=yahoo.com" rel="nofollow noopener" target="_blank" data-ylk="slk:a misdemeanor assault counter-charge;elm:context_link;itc:0" class="link ">a misdemeanor assault counter-charge</a> brought against her by the Marvel actor, multiple sources have confirmed to Insider.</p>
+<p><a href="https://www.insider.com/marvels-jonathan-majors-files-nypd-complaint-against-assault-accuser-sources-2023-6?utm_medium=referral&amp;utm_source=yahoo.com" rel="nofollow noopener" target="_blank" data-ylk="slk:Majors&#039; recent accusations against Grace Jabbari, 30,;elm:context_link;itc:0" class="link ">Majors&#8217; recent accusations against Grace Jabbari, 30,</a> and Jabbari&#8217;s original case against Majors, both stem from their midnight quarrel in March on a Chinatown, Manhattan, street corner.</p>
+<p>Jabbari has alleged to the NYPD and Manhattan prosecutors that during the fight, Majors twisted and broke her finger, and bloodied her ear by slapping her in the head.</p>
+<p>Majors later <a href="https://www.insider.com/marvels-jonathan-majors-blames-nypd-racism-for-domestic-violence-bust-2023-5?utm_medium=referral&amp;utm_source=yahoo.com" rel="nofollow noopener" target="_blank" data-ylk="slk:countered in a June police complaint that Jabbari was the aggressor;elm:context_link;itc:0" class="link ">countered in a June police complaint that Jabbari was the aggressor</a>, and that sidewalk and nightclub video shows she was uninjured in the hours after the dispute. Majors <a href="https://www.businessinsider.nl/see-actor-jonathan-majors-selfies-of-scratches-torn-clothing-from-fight-with-ex-turned-accuser-grace-jabbari/" rel="nofollow noopener" target="_blank" data-ylk="slk:alleges that Jabbari scratched at him and stole from him that night;elm:context_link;itc:0" class="link ">alleges that Jabbari scratched at him and stole from him that night</a>, then injured herself while alone, in a drunken fall at his penthouse apartment.</p>
+<p>The news of Jabbari&#8217;s pending arrest comes on the eve of a Wednesday morning court hearing in Manhattan, where defense lawyers and prosecutors may fight over the actor&#8217;s claims that the Manhattan District Attorney&#8217;s office &#8220;buried&#8221; an NYPD investigation into the girlfriend&#8217;s violent behavior on the night of the spat.</p>
+<p>Prosecutors failed to include evidence of the case against Jabbari in what they turned over to the defense, &#8220;Despite being on notice of the NYPD investigation into Jabbari&#8217;s criminal conduct, as well as an I-Card and Wanted Flyer,&#8221; Majors&#8217; lawyer, Priya Chaudhry, wrote in her motion to dismiss the case.</p>
+<p>An &#8220;I-Card&#8221; refers to an internal NYPD notification that the person is under investigation or wanted in connection to a crime.</p>
+<p>Additionally, Majors&#8217; lawyer alleged that prosecutors turned a blind eye to Jabbari&#8217;s theft of Major&#8217;s &#8220;Rolex vintage watch and other luxury items that cost $6,000 &#8211; $7,000,&#8221; as described i<a href="https://www.insider.com/marvels-jonathan-majors-files-nypd-complaint-against-assault-accuser-sources-2023-6?utm_medium=referral&amp;utm_source=yahoo.com" rel="nofollow noopener" target="_blank" data-ylk="slk:n Majors&#039; June police complaint against his ex.;elm:context_link;itc:0" class="link ">n Majors&#8217; June police complaint against his ex.</a></p>
+<p>In an email now in Majors&#8217; case file, Manhattan prosecutor Erin Tierney made it clear to Majors&#8217; lawyer, Chaudhry that the DA&#8217;s office would not prosecute Jabbari even if the NYPD brought charges against her.</p>
+<p>&#8220;We intend to decline to prosecute any charges brought by the New York Police Department against Ms. Grace Jabbari related to allegations made by Jonathan Majors regarding the incident that took place on March 23, 2023,&#8221; Tierney wrote in a September email now in the case file.</p>
+<p>The Manhattan DA&#8217;s office did not elaborate on why they plan to decline to prosecute the NYPD charges against Jabbari.</p>
+<p>Jabbari, a British national, met Majors, 33, while working as a movement coach on the set of this year&#8217;s <a href="https://www.insider.com/ant-man-and-the-wasp-quantumania-review-kang-fun-clunky-2023-2?utm_medium=referral&amp;utm_source=yahoo.com" rel="nofollow noopener" target="_blank" data-ylk="slk:&quot;Ant-Man and the Wasp: Quantumania.&quot;;elm:context_link;itc:0" class="link ">&#8220;Ant-Man and the Wasp: Quantumania.&#8221;</a></p>
+<p>She had planned to turn herself in to the 10th Precinct stationhouse in Manhattan&#8217;s Chelsea neighborhood on Tuesday, two sources familiar with the plans said, adding that a daylong negotiation for her surrender fell through on Tuesday.</p>
+<p>She&#8217;s now expected to turn herself in at the precinct sometime on Wednesday, and to be released without having to submit to formal &#8220;booking,&#8221; meaning she won&#8217;t be fingerprinted or held beyond the minimal time it will take to give her a summons that cites her charges – criminal mischief and misdemeanor assault, the sources said.</p>
+<p>One new, key detail concerning the March dispute was also revealed in the DA&#8217;s most recent filing. It&#8217;s been known that the dispute arose after Jabbari spied a saucy text from another woman on Majors&#8217; phone as they rode in a livery car through lower Manhattan.</p>
+<p>The new filing reveals that the text said, &#8220;I wish I was kissing you right now.&#8221;</p>
+<p>The woman who sent the text was not identified; it is unknown if she was actor Meagan Good, who has accompanied Majors to his last two in-person court dates.</p>
+<p>In their latest filing, prosecutors also went on the attack against one of Majors&#8217; key defense witnesses, the livery car driver who witnessed much of the dispute.</p>
+<p>Majors&#8217; side has said the unidentified driver described Jabbari to defense lawyers as a &#8220;psycho girl&#8221; who was the prime aggressor in the fight.</p>
+<p>In the new filing, prosecutors alleged that the driver suffers his own domestic issues. He told prosecutors that &#8220;Ms. Jabbari was acting like his wife does when she is angry with him,&#8221; the filing said.</p>
+<p>Read the original article on <a href="https://www.insider.com/arrest-of-marvel-actor-jonathan-majors-accuser-expected-wednesday-2023-10" rel="nofollow noopener" target="_blank" data-ylk="slk:Insider;elm:context_link;itc:0" class="link ">Insider</a></p>
+</div>
+<div class="royalads-adsense"><script>\r
+               google_ad_client = 'ca-pub-6828488065609971';\r
+               google_page_url = 'https://macgsm.co/';\r
+               google_ad_slot ='2694358478';\r
+               google_ad_width = 300; \r
+               google_ad_height = 250;\r
+               document.write('<script src="https://pagead2.googlesyndication.com/pagead/show_ads.js"></\script>');\r
+               </script>]]></content:encoded>
+                                       
+                                       <wfw:commentRss>https://viralnow.uk/accuser-of-marvel-actor-jonathan-majors-expected-to-be-arrested-wednesday-in-his-misdemeanor-cross-complaint-against-her/feed/</wfw:commentRss>
+                       <slash:comments>0</slash:comments>
+               
+               
+                       </item>
+       </channel>
+</rss>
+\r
+<!--\r
+Performance optimized by W3 Total Cache. Learn more: https://www.boldgrid.com/w3-total-cache/\r
+\r
+Object Caching 83/108 objects using disk\r
+Page Caching using disk: enhanced (Page is feed) \r
+Database Caching using disk (Request-wide modification query)\r
+\r
+Served from: viralnow.uk @ 2023-10-25 10:03:47 by W3 Total Cache\r
+-->
\ No newline at end of file
diff --git a/htdocs/cgi-bin/rss_output/tree_feed_CPAN.cnf b/htdocs/cgi-bin/rss_output/tree_feed_CPAN.cnf
new file mode 100644 (file)
index 0000000..29e6527
--- /dev/null
@@ -0,0 +1,1135 @@
+<<CNF_FEED<TREE>
+    Release: 1
+    Version: 1.0
+      <Feed<
+       Expires: 2023-10-11 08:00:00
+       File: ./rss_output/tree_feed_CPAN.cnf
+       Published: 2023-10-02 08:40:46.199 UTC
+       Title: Recent CPAN uploads - MetaCPAN
+       URL: http://search.cpan.org/uploads.rdf
+      [#[
+         CPAN modules news and agenda.
+      ]#]
+      >Feed>
+      <Brew<
+         <Item<
+          Date: 2023-10-02 01:53:10
+          Link: https://metacpan.org/release/NICOMEN/Config-ROFL-1.01
+          Title: Config-ROFL-1.01
+            <Description<
+            [#[
+               Yet another config module
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-10-02 01:42:52
+          Link: https://metacpan.org/release/KIMOTO/SPVM-Digest-SHA-0.061001
+          Title: SPVM-Digest-SHA-0.061001
+            <Description<
+            [#[
+               <p>SHA-1/224/256/384/512</p><p>Changes for 0.061001 - 2023-10-02</p><ul><li>Requirement Changes</li>
+               <li>Exception Message Changes</li>
+               <li>Internal Changes</li>
+               <li>Document Changes</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-10-02 01:12:28
+          Link: https://metacpan.org/release/KIMOTO/SPVM-MIME-Base64-1.001003
+          Title: SPVM-MIME-Base64-1.001003
+            <Description<
+            [#[
+               <p>Base64 Encoding/Decoding</p><p>Changes for 1.001003 - 2023-10-02</p><ul><li>Exception Message Changes</li>
+               <li>Document Changes</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-10-02 00:54:37
+          Link: https://metacpan.org/release/KIMOTO/SPVM-Digest-MD5-1.001003
+          Title: SPVM-Digest-MD5-1.001003
+            <Description<
+            [#[
+               <p>MD5</p><p>Changes for 1.001003 - 2023-10-02</p><ul><li>Requirement Changes</li>
+               <li>Exception Message Changes</li>
+               <li>Document Changes</li>
+               <li>Incompatible Changes</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-10-02 00:05:25
+          Link: https://metacpan.org/release/PERLANCAR/ColorTheme-2.1.4
+          Title: ColorTheme-2.1.4
+            <Description<
+            [#[
+               <p>Color themes</p><p>Changes for 2.1.4 - 2023-07-14</p><ul><li>No spec changes.</li>
+               <li>[doc] Mention somewhat related specification: BorderStyle.</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-10-01 23:42:36
+          Link: https://metacpan.org/release/NICOMEN/Config-ROFL-1.0
+          Title: Config-ROFL-1.0
+            <Description<
+            [#[
+               Yet another config module
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-10-01 17:36:06
+          Link: https://metacpan.org/release/MIK/CryptX-0.079_003
+          Title: CryptX-0.079_003
+            <Description<
+            [#[
+               <p>Cryptographic toolkit</p><p>Changes for 0.079_003 - 2023-01-10</p><ul><li>Disable AES-NI</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-10-01 17:35:55
+          Link: https://metacpan.org/release/MIK/CryptX-0.079_002
+          Title: CryptX-0.079_002
+            <Description<
+            [#[
+               <p>Cryptographic toolkit</p><p>Changes for 0.079_002 - 2023-01-10</p><ul><li>Enable AES-NI on gcc/clang/llvm</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-10-01 14:02:29
+          Link: https://metacpan.org/release/SCHUBIGER/DateTime-Format-Natural-1.17_01
+          Title: DateTime-Format-Natural-1.17_01
+            <Description<
+            [#[
+               Parse informal natural language date/time strings
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-10-01 13:03:01
+          Link: https://metacpan.org/release/HANJE/Tk-CodeText-0.45
+          Title: Tk-CodeText-0.45
+            <Description<
+            [#[
+               Programmer's Swiss army knife Text widget.
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-10-01 12:20:32
+          Link: https://metacpan.org/release/MIK/CryptX-0.079
+          Title: CryptX-0.079
+            <Description<
+            [#[
+               <p>Cryptographic toolkit</p><p>Changes for 0.079 - 2023-01-10</p><ul><li>fix #92 update libtomcrypt</li>
+               <li>bundled libtomcrypt update branch:develop (commit:1e629e6f 2023-06-22)</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-10-01 08:50:49
+          Link: https://metacpan.org/release/FKENTO/Email-Address-Classify-0.01
+          Title: Email-Address-Classify-0.01
+            <Description<
+            [#[
+               Classify email addresses
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-10-01 01:11:31
+          Link: https://metacpan.org/release/DBOOK/Perl-MinimumVersion-1.42-TRIAL
+          Title: Perl-MinimumVersion-1.42-TRIAL
+            <Description<
+            [#[
+               <p>Find a minimum required version of perl for Perl code</p><p>Changes for 1.42 - 2023-09-30</p><ul><li>Restore detection for Perl version 5.008, which means that 5.006 is now the minimum required version that will be reported.</li>
+               <li>Recognize the minimum required Perl versions for:</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-10-01 00:06:00
+          Link: https://metacpan.org/release/PERLANCAR/Acme-CPANModules-RequireHooks-0.001
+          Title: Acme-CPANModules-RequireHooks-0.001
+            <Description<
+            [#[
+               <p>List of modules that utilize require() hook</p><p>Changes for 0.001 - 2023-02-08</p><ul><li>First release.</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-30 23:51:59
+          Link: https://metacpan.org/release/KIMOTO/SPVM-Errno-0.090003
+          Title: SPVM-Errno-0.090003
+            <Description<
+            [#[
+               <p>Error Numbers</p><p>Changes for 0.090003 - 2023-10-01</p><ul><li>Exception Message Changes</li>
+               <li>Document Changes</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-30 23:37:55
+          Link: https://metacpan.org/release/ETHER/Test-Warnings-0.032
+          Title: Test-Warnings-0.032
+            <Description<
+            [#[
+               <p>Test for warnings and the lack of them</p><p>Changes for 0.032 - 2023-09-30T23:36:50Z</p><ul><li>new config variable, $ENV{PERL_TEST_WARNINGS_ONLY_REPORT_WARNINGS}, for temporarily turning failures into reports</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-30 23:21:22
+          Link: https://metacpan.org/release/OODLER/Dispatch-Fu-0.99
+          Title: Dispatch-Fu-0.99
+            <Description<
+            [#[
+               <p>Converts any complicated conditional dispatch situation into familiar static hash-key based dispatch</p><p>Changes for 0.99</p><ul><li>fixed xdefault to allow for the first parameter to to be C&lt;undef&gt;</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-30 22:28:24
+          Link: https://metacpan.org/release/ZHUMARIN/Win-SerialPort-0.23
+          Title: Win-SerialPort-0.23
+            <Description<
+            [#[
+               User interface to Win32 Serial API calls (fork for 64bit)
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-30 22:04:09
+          Link: https://metacpan.org/release/RKAPL/EAI-Wrap-1.0
+          Title: EAI-Wrap-1.0
+            <Description<
+            [#[
+               <p>framework for easy creation of Enterprise Application Integration tasks</p><p>Changes for 1.0</p><ul><li>improved API Doc, enabled overriding of redoDir, logRootPath, historyFolder and historyFolderUpload using commandline parameters, e.g. --config redoDir=/your/redo/folder, prevent error mail (logger) and uncaught exception in sendGeneralMail when no smtp configured; use custom locales in DateUtil in all textual month functions now; allow anonymous subs in all configuration places, where strings were used (executeOnInit, postDumpProcessing, postReadProcessing, lineCode and fieldCode).</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-30 21:45:04
+          Link: https://metacpan.org/release/PRBRENAN/GitHub-Crud-20230930
+          Title: GitHub-Crud-20230930
+            <Description<
+            [#[
+               Create, Read, Update, Delete files, commits, issues, and web hooks on GitHub.
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-30 21:24:45
+          Link: https://metacpan.org/release/PRBRENAN/Math-Vectors2-20230930
+          Title: Math-Vectors2-20230930
+            <Description<
+            [#[
+               Vectors in two dimensions.
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-30 19:57:54
+          Link: https://metacpan.org/release/ZHUMARIN/Win-SerialPort-0.22
+          Title: Win-SerialPort-0.22
+            <Description<
+            [#[
+               User interface to Win32 Serial API calls
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-30 19:55:09
+          Link: https://metacpan.org/release/IVANWILLS/App-Git-Workflow-Command-Take-0.8
+          Title: App-Git-Workflow-Command-Take-0.8
+            <Description<
+            [#[
+               <p>Resolve merge conflicts by only taking one side of each conflicted section</p><p>Changes for 0.8 - 2023-09-30</p><ul><li>Updating for release of version 0.8 Updating travis (Ivan Wills) Updated (Ivan Wills) Fixing conflict resolution when &quot;both added&quot; (Ivan Wills)</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-30 16:49:23
+          Link: https://metacpan.org/release/LICHTKIND/App-GUI-Harmonograph-0.61
+          Title: App-GUI-Harmonograph-0.61
+            <Description<
+            [#[
+               <p>sculpting beautiful circular drawings</p><p>Changes for 0.61 - 2023-09-30</p><ul><li>= bug fix</li>
+               <li>adopt code to new GTC API</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-30 16:47:57
+          Link: https://metacpan.org/release/LICHTKIND/App-GUI-Cellgraph-0.26
+          Title: App-GUI-Cellgraph-0.26
+            <Description<
+            [#[
+               <p>draw pattern by cellular automata</p><p>Changes for 0.26 - 2023-09-30</p><ul><li>= bug fix</li>
+               <li>adopt code to new GTC API</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-30 11:55:29
+          Link: https://metacpan.org/release/PERLANCAR/List-Util-mapsplice-0.001
+          Title: List-Util-mapsplice-0.001
+            <Description<
+            [#[
+               <p>Splice array with code, replace items with result from code</p><p>Changes for 0.001 - 2023-09-30</p><ul><li>First version, no tests yet.</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-30 11:55:23
+          Link: https://metacpan.org/release/PERLANCAR/List-Util-groupby-0.002
+          Title: List-Util-groupby-0.002
+            <Description<
+            [#[
+               <p>Group items of a list into several (possibly multilevel) buckets</p><p>Changes for 0.002 - 2023-09-30</p><ul><li>No functional changes.</li>
+               <li>[doc] Fix See Also section.</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-30 11:53:57
+          Link: https://metacpan.org/release/PERLANCAR/List-Util-groupby-0.003
+          Title: List-Util-groupby-0.003
+            <Description<
+            [#[
+               <p>Group items of a list into several (possibly multilevel) buckets</p><p>Changes for 0.003 - 2023-09-30</p><ul><li>No functional changes.</li>
+               <li>Fix documentation, add example in Synopsis.</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-30 11:53:46
+          Link: https://metacpan.org/release/PERLANCAR/List-Util-groupby-0.001
+          Title: List-Util-groupby-0.001
+            <Description<
+            [#[
+               <p>Group items of a list into several (possibly multilevel) buckets</p><p>Changes for 0.001 - 2023-09-30</p><ul><li>First version, no tests yet.</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-30 01:21:20
+          Link: https://metacpan.org/release/KIMOTO/SPVM-0.989047
+          Title: SPVM-0.989047
+            <Description<
+            [#[
+               <p>SPVM Language</p><p>Changes for 0.989047 - 2023-09-30</p><ul><li>New Features</li>
+               <li>Bug Fix</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-30 00:53:30
+          Link: https://metacpan.org/release/CHRISARG/Task-FASTQTools-0.01
+          Title: Task-FASTQTools-0.01
+            <Description<
+            [#[
+               <p>Provide native perl tools for manipulating FASTQ files</p><p>Changes for 0.01 - 2023-09-29T18:52:08-06:00</p><ul></ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-30 00:05:19
+          Link: https://metacpan.org/release/PERLANCAR/BorderStyle-3.0.3
+          Title: BorderStyle-3.0.3
+            <Description<
+            [#[
+               <p>Border styles</p><p>Changes for 3.0.3 - 2023-07-14</p><ul><li>No spec changes.</li>
+               <li>[doc] Mention somewhat related specification: ColorTheme.</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-29 23:47:32
+          Link: https://metacpan.org/release/BOD/WWW-Crawl-0.1
+          Title: WWW-Crawl-0.1
+            <Description<
+            [#[
+               <p>A simple web crawler for extracting links and more from web pages</p><p>Changes for 0.1</p><ul><li>First version, released on an unsuspecting world.</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-29 23:10:11
+          Link: https://metacpan.org/release/WYANT/Astro-satpass-0.129_01
+          Title: Astro-satpass-0.129_01
+            <Description<
+            [#[
+               <p>Classes and app to compute satellite visibility</p><p>Changes for 0.129_01 - 2023-09-29</p><ul><li>Update magnitude table to track Kelso visual.txt.</li>
+               <li>Track Mike McCants' web site move.</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-29 23:10:00
+          Link: https://metacpan.org/release/TURNERJW/TkWeather_3.40
+          Title: TkWeather_3.40
+         >Item>
+         <Item<
+          Date: 2023-09-29 23:09:49
+          Link: https://metacpan.org/release/PERLANCAR/App-ListSoftwareLicenses-0.080
+          Title: App-ListSoftwareLicenses-0.080
+            <Description<
+            [#[
+               <p>List all Software::License's</p><p>Changes for 0.080 - 2023-07-11</p><ul><li>No functional changes.</li>
+               <li>Remove usage of smartmatch to avoid warning under perl 5.38.</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-29 23:09:38
+          Link: https://metacpan.org/release/KIMOTO/SPVM-0.989046
+          Title: SPVM-0.989046
+            <Description<
+            [#[
+               <p>SPVM Language</p><p>Changes for 0.989046 - 2023-09-28</p><ul><li>Internal Changes</li>
+               <li>Incompatible Changes</li>
+               <li>New Features</li>
+               <li>Deprecations</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-29 23:09:27
+          Link: https://metacpan.org/release/JDEGUEST/Nice-Try-v1.3.5
+          Title: Nice-Try-v1.3.5
+            <Description<
+            [#[
+               <p>A real Try Catch Block Implementation Using Perl Filter</p><p>Changes for v1.3.5 - 2023-09-29T12:28:19Z</p><ul><li>Improved code by giving up early if no 'try' block is detected in the code.</li>
+               <li>Fixed bug #6 arising when token __SUB__ is used within a try-catch block (Credits to Clay Fouts for finding this)</li>
+               <li>Nice::Try now supports subroutine prototype and signature</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-29 23:09:15
+          Link: https://metacpan.org/release/DKECHAG/Benchmark-DKbench-2.4
+          Title: Benchmark-DKbench-2.4
+            <Description<
+            [#[
+               <p>Perl CPU Benchmark</p><p>Changes for 2.4 - 2023-09-29</p><ul><li>Added --scale and --stdev options.</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-29 23:09:04
+          Link: https://metacpan.org/release/DJERIUS/Iterator-Flex-0.16
+          Title: Iterator-Flex-0.16
+            <Description<
+            [#[
+               <p>Iterators with flexible behaviors</p><p>Changes for 0.16 - 2023-09-28T19:17:13-04:00</p><ul><li>ENHANCEMENT</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-28 18:51:17
+          Link: https://metacpan.org/release/KARJALA/RxPerl-v6.28.0
+          Title: RxPerl-v6.28.0
+            <Description<
+            [#[
+               <p>an implementation of Reactive Extensions / rxjs for Perl</p><p>Changes for v6.28.0 - 2023-09-28T18:45:00Z</p><ul><li>removed op_group_by operator, because it was too buggy. (If anyone has a good grasp of how it works/what it should do, feel free to contact me)</li>
+               <li>removed EXPERIMENTAL status of the two promise functions, since rxjs v7 has been released</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-28 18:47:12
+          Link: https://metacpan.org/release/RKAPL/EAI-Wrap-0.10
+          Title: EAI-Wrap-0.10
+            <Description<
+            [#[
+               <p>framework for easy creation of Enterprise Application Integration tasks</p><p>Changes for 0.10</p><ul><li>improved API Doc, enabled overriding of redoDir, logRootPath, historyFolder and historyFolderUpload using commandline parameters, e.g. --config redoDir=/your/redo/folder, prevent error mail (logger) and uncaught exception in sendGeneralMail when no smtp configured; use custom locales in DateUtil in all textual month functions now.</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-28 18:14:20
+          Link: https://metacpan.org/release/OODLER/Dispatch-Fu-0.98
+          Title: Dispatch-Fu-0.98
+            <Description<
+            [#[
+               <p>Converts any complicated conditional dispatch situation into familiar static hash-key based dispatch</p><p>Changes for 0.98</p><ul><li>added xdefault handling the situation where the case name is the same as the string value, which is the simlest case possible and what people use straight HASH ref dispatching for; see the tests and POD examples</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-28 16:07:20
+          Link: https://metacpan.org/release/DART/Aion-0.1
+          Title: Aion-0.1
+            <Description<
+            [#[
+               <p>a postmodern object system for Perl 5, as Moose and Moo, but with improvements</p><p>Changes for 0.1 - 2023-09-28T16:04:10Z</p><ul><li>original version</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-28 15:54:26
+          Link: https://metacpan.org/release/LEONT/Module-Build-Tiny-0.047
+          Title: Module-Build-Tiny-0.047
+            <Description<
+            [#[
+               <p>A tiny replacement for Module::Build</p><p>Changes for 0.047 - 2023-09-28T17:53:41+02:00</p><ul><li>Avoid using empty regex for backwards compatability</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-28 15:52:14
+          Link: https://metacpan.org/release/LEONT/Magic-Check-0.003
+          Title: Magic-Check-0.003
+            <Description<
+            [#[
+               <p>Add type/value checks to variables</p><p>Changes for 0.003 - 2023-09-28T17:51:58+02:00</p><ul><li>Validate when applying magic</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-28 15:50:48
+          Link: https://metacpan.org/release/EXODIST/Test2-Harness-UI-0.000142
+          Title: Test2-Harness-UI-0.000142
+            <Description<
+            [#[
+               <p>Web interface for viewing and inspecting yath test logs</p><p>Changes for 0.000142 - 2023-09-28T08:49:37-07:00</p><ul><li>Work harder at uploading results</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-28 15:36:40
+          Link: https://metacpan.org/release/SCHROEDER/Game-FaceGenerator-1.03
+          Title: Game-FaceGenerator-1.03
+            <Description<
+            [#[
+               <p>a web app to combine random images into faces</p><p>Changes for 1.03</p><ul><li>various new face types added (goblins, bugbears, dogs)</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-28 13:08:26
+          Link: https://metacpan.org/release/PROCH/FASTX-Reader-1.12.1-TRIAL
+          Title: FASTX-Reader-1.12.1-TRIAL
+            <Description<
+            [#[
+               <p>A simple module to parse FASTA and FASTQ files, supporting compressed files and paired-ends.</p><p>Changes for 1.12.1 - 2023-09-28</p><ul><li>Add citation</li>
+               <li>Suppress warnings in test</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-28 11:24:05
+          Link: https://metacpan.org/release/BLIAKO/Config-JSON-Enhanced-0.08
+          Title: Config-JSON-Enhanced-0.08
+            <Description<
+            [#[
+               <p>JSON-based config with C/Shell-style comments, verbatim sections and variable substitutions</p><p>Changes for 0.08</p><ul><li>-Changed the regex for identifying comments, variables, verbatime sections to no need escaping special regex characters. -Added one more test for testing tags of comments, variables, etc.</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-28 11:13:50
+          Link: https://metacpan.org/release/PROCH/NBI-Slurm-0.7.0-TRIAL
+          Title: NBI-Slurm-0.7.0-TRIAL
+            <Description<
+            [#[
+               <p>NBI Slurm module</p><p>Changes for 0.7.0 - 2023-10-01</p><ul><li>`make_image_from_bioconda` now supports multiple packages [experimental]</li>
+               <li>`make_package` will now read the binaries from images, if made with make_image_from_bioconda</li>
+               <li>Improved `shelf`</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-28 10:04:20
+          Link: https://metacpan.org/release/JIRO/UID2-Client-0.02
+          Title: UID2-Client-0.02
+            <Description<
+            [#[
+               <p>Unified ID 2.0 Perl Client</p><p>Changes for 0.02 - 2023-09-28T10:03:10Z</p><ul><li>Support Token v4</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-28 09:56:21
+          Link: https://metacpan.org/release/JIRO/UID2-Client-XS-0.02
+          Title: UID2-Client-XS-0.02
+            <Description<
+            [#[
+               <p>Unified ID 2.0 Client for Perl (binding to the UID2 C++ library)</p><p>Changes for 0.02 - 2023-09-28T09:53:39Z</p><ul><li>Support Token v4</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-28 09:04:41
+          Link: https://metacpan.org/release/KUERBIS/Term-Choose-Util-0.139
+          Title: Term-Choose-Util-0.139
+            <Description<
+            [#[
+               <p>TUI-related functions for selecting directories, files, numbers and subsets of lists.</p><p>Changes for 0.139 - 2023-09-28</p><ul><li>Adapted the code to the documentation.</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-28 08:00:28
+          Link: https://metacpan.org/release/KUERBIS/Term-Choose-Util-0.138
+          Title: Term-Choose-Util-0.138
+            <Description<
+            [#[
+               <p>TUI-related functions for selecting directories, files, numbers and subsets of lists.</p><p>Changes for 0.138 - 2023-09-28</p><ul><li>settings_menu: set out of bonds indexes to 0.</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-28 07:40:06
+          Link: https://metacpan.org/release/KUERBIS/App-DBBrowser-2.342
+          Title: App-DBBrowser-2.342
+            <Description<
+            [#[
+               <p>Browse SQLite/MySQL/PostgreSQL databases and their tables interactively.</p><p>Changes for 2.342 - 2023-09-28</p><ul><li>Bugfix: don't remove outer parentheses in Subqueries.pm.</li>
+               <li>Bugfix: wrong format of auto generated aliases in Union.pm.</li>
+               <li>Bugfix in table alias: undefined variable.</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-28 00:05:44
+          Link: https://metacpan.org/release/PERLANCAR/Dist-Zilla-Plugin-GenPericmdScript-0.425
+          Title: Dist-Zilla-Plugin-GenPericmdScript-0.425
+            <Description<
+            [#[
+               <p>Generate Perinci::CmdLine script</p><p>Changes for 0.425 - 2023-07-11</p><ul><li>No functional changes.</li>
+               <li>Remove usage of smartmatch to avoid warning under perl 5.38.</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-28 00:00:29
+          Link: https://metacpan.org/release/CUKEBOT/Cucumber-Test-Release-Automation-v0.0.69
+          Title: Cucumber-Test-Release-Automation-v0.0.69
+            <Description<
+            [#[
+               Dummy project for testing release automation
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-27 22:41:11
+          Link: https://metacpan.org/release/CUKEBOT/Cucumber-Test-Release-Automation-v0.0.68
+          Title: Cucumber-Test-Release-Automation-v0.0.68
+            <Description<
+            [#[
+               Dummy project for testing release automation
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-27 22:41:00
+          Link: https://metacpan.org/release/CUKEBOT/Cucumber-Test-Release-Automation-v0.0.67
+          Title: Cucumber-Test-Release-Automation-v0.0.67
+            <Description<
+            [#[
+               Dummy project for testing release automation
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-27 22:40:49
+          Link: https://metacpan.org/release/CUKEBOT/Cucumber-Test-Release-Automation-v0.0.66
+          Title: Cucumber-Test-Release-Automation-v0.0.66
+            <Description<
+            [#[
+               Dummy project for testing release automation
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-27 21:24:01
+          Link: https://metacpan.org/release/DART/Liveman-1.0
+          Title: Liveman-1.0
+            <Description<
+            [#[
+               <p>markdown compiller to test and pod.</p><p>Changes for 1.0 - 2023-09-27T21:23:35Z</p><ul><li>change version in pod</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-27 21:03:40
+          Link: https://metacpan.org/release/DART/Liveman-0.9
+          Title: Liveman-0.9
+            <Description<
+            [#[
+               <p>markdown compiller to test and pod.</p><p>Changes for 0.9 - 2023-09-27T21:02:18Z</p><ul><li>remove debug info</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-27 20:59:38
+          Link: https://metacpan.org/release/DART/Liveman-0.8
+          Title: Liveman-0.8
+            <Description<
+            [#[
+               <p>markdown compiller to test and pod.</p><p>Changes for 0.8 - 2023-09-27T20:58:40Z</p><ul><li>change version on release</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-27 20:30:33
+          Link: https://metacpan.org/release/WWILLIS/Acme-MyFirstModule-WWILLIS-0.03
+          Title: Acme-MyFirstModule-WWILLIS-0.03
+            <Description<
+            [#[
+               <p>The great new Acme::MyFirstModule::WWILLIS!</p><p>Changes for 0.03</p><ul><li>Third version. The dates have been bumped. Going through the cpan/pause process every decade, so I don't forget how its done.</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-27 20:08:47
+          Link: https://metacpan.org/release/PJACKLAM/Math-BigInt-1.999842
+          Title: Math-BigInt-1.999842
+            <Description<
+            [#[
+               <p>Pure Perl module to test Math::BigInt with scalars</p><p>Changes for 1.999842 - 2023-09-27</p><ul><li>Fix a bug causing Math::BigInt and Math::BigFloat to be caught in an endless recursion. The bug was introduced when trying to fix https://github.com/pjacklam/p5-Math-BigInt/issues/8</li>
+               <li>Allow div_scale to be 0. It is not documented what div_scale &lt;= 0 means, but there are modules that set div_scale to 0 (e.g., Astro::Units) and fail their tests if this is not supported.</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-27 16:51:39
+          Link: https://metacpan.org/release/DART/config-1.3
+          Title: config-1.3
+            <Description<
+            [#[
+               <p>Perl module constant configurator</p><p>Changes for 1.3 - 2023-09-27T16:48:37Z</p><ul><li>change license to perl_5</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-27 16:47:39
+          Link: https://metacpan.org/release/DART/config-1.2
+          Title: config-1.2
+            <Description<
+            [#[
+               <p>Perl module constant configurator</p><p>Changes for 1.2 - 2023-09-27T16:44:15Z</p><ul><li>use config for more version of perl!</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-27 16:38:34
+          Link: https://metacpan.org/release/DDUMONT/Software-Copyright-0.012
+          Title: Software-Copyright-0.012
+            <Description<
+            [#[
+               <p>Copyright class</p><p>Changes for 0.012 - 2023-09-27</p><ul><li>refine copyright cleanup</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-27 16:32:04
+          Link: https://metacpan.org/release/DART/config-1.1
+          Title: config-1.1
+            <Description<
+            [#[
+               <p>Perl module constant configurator</p><p>Changes for 1.1 - 2023-09-27T16:28:23Z</p><ul><li>Set minimal version of perl</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-27 16:16:46
+          Link: https://metacpan.org/release/CDN/Crypt-xxHash-0.07
+          Title: Crypt-xxHash-0.07
+            <Description<
+            [#[
+               <p>xxHash implementation for Perl</p><p>Changes for 0.07</p><ul><li>do not use SSE instructions for ARM architecture</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-27 14:52:27
+          Link: https://metacpan.org/release/DART/Liveman-0.07
+          Title: Liveman-0.07
+            <Description<
+            [#[
+               <p>markdown compiller to test and pod.</p><p>Changes for 0.07 - 2023-09-27T14:49:32Z</p><ul><li>set minimal version of perl!</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-27 14:31:38
+          Link: https://metacpan.org/release/OALDERS/HTTP-Message-6.45
+          Title: HTTP-Message-6.45
+            <Description<
+            [#[
+               <p>HTTP style message (base class)</p><p>Changes for 6.45 - 2023-09-27T14:27:31Z</p><ul><li>Allow for file ownership conflicts with Docker and GitHub Actions (GH#193) (Olaf Alders)</li>
+               <li>Add the 'status_code' function for getting all status codes as hash (GH#194) (Dai Okabayashi)</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-27 13:27:43
+          Link: https://metacpan.org/release/OLIVER/App-Netdisco-2.067002
+          Title: App-Netdisco-2.067002
+            <Description<
+            [#[
+               <p>An open source web-based network management tool.</p><p>Changes for 2.067002 - 2023-09-27</p><ul><li>BUG FIXES</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-27 13:20:00
+          Link: https://metacpan.org/release/OLIVER/App-Netdisco-2.067001
+          Title: App-Netdisco-2.067001
+            <Description<
+            [#[
+               <p>An open source web-based network management tool.</p><p>Changes for 2.067001 - 2023-09-27</p><ul><li>BUG FIXES</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-27 12:00:42
+          Link: https://metacpan.org/release/DART/Liveman-0.06
+          Title: Liveman-0.06
+            <Description<
+            [#[
+               <p>markdown compiller to test and pod.</p><p>Changes for 0.06 - 2023-09-27T11:57:06Z</p><ul><li>first release</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-27 08:07:04
+          Link: https://metacpan.org/release/LNATION/Rope-0.03
+          Title: Rope-0.03
+            <Description<
+            [#[
+               The great new Rope!
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-27 07:05:15
+          Link: https://metacpan.org/release/NERDVANA/DBIx-Class-ResultDDL-2.04
+          Title: DBIx-Class-ResultDDL-2.04
+            <Description<
+            [#[
+               <p>Result class declaration syntactic-sugar that looks like DDL</p><p>Changes for 2.04 - 2023-09-27</p><ul><li>Enhancements to SchemaLoaderMixin:</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-27 05:15:54
+          Link: https://metacpan.org/release/MBV/MailboxValidator-SingleValidation-2.00
+          Title: MailboxValidator-SingleValidation-2.00
+            <Description<
+            [#[
+               <p>Email verification module for Perl using MailboxValidator API. It validates if the email is valid, from a free provider, contains high-risk keywords, whether it's a catch-all address and so much more.</p><p>Changes for 2.00</p><ul><li>Updated to call MailboxValidator v2 APIs</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-27 04:04:08
+          Link: https://metacpan.org/release/HIROSE/String-IRC-0.05
+          Title: String-IRC-0.05
+            <Description<
+            [#[
+               <p>add color codes for mIRC compatible client</p><p>Changes for 0.05 - 2023-09-27T04:03:19+00:00</p><ul><li>BUG FIXES</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-27 01:14:27
+          Link: https://metacpan.org/release/DUNCAND/Set-Relation-0.13.4
+          Title: Set-Relation-0.13.4
+            <Description<
+            [#[
+               A relation data type
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-27 00:05:11
+          Link: https://metacpan.org/release/PERLANCAR/App-GenPericmdCompleterScript-0.126
+          Title: App-GenPericmdCompleterScript-0.126
+            <Description<
+            [#[
+               <p>Generate Perinci::CmdLine completer script</p><p>Changes for 0.126 - 2023-07-11</p><ul><li>No functional changes.</li>
+               <li>Remove usage of smartmatch to avoid warning under perl 5.38.</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-26 21:54:19
+          Link: https://metacpan.org/release/RKAPL/EAI-Wrap-0.9
+          Title: EAI-Wrap-0.9
+            <Description<
+            [#[
+               framework for easy creation of Enterprise Application Integration tasks
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-26 21:50:17
+          Link: https://metacpan.org/release/BLIAKO/Config-JSON-Enhanced-0.07
+          Title: Config-JSON-Enhanced-0.07
+            <Description<
+            [#[
+               JSON-based config with C/Shell-style comments, verbatim sections and variable substitutions
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-26 20:44:49
+          Link: https://metacpan.org/release/BIGPRESH/Catalyst-Plugin-CheckFileUploadTypes-0.02
+          Title: Catalyst-Plugin-CheckFileUploadTypes-0.02
+            <Description<
+            [#[
+               <p>Check uploaded files are expected and of the correct type</p><p>Changes for 0.02 - 2023-09-26</p><ul><li>Rewind filehandles after determining type</li>
+               <li>Intelligent handling for Catalyst::Action::REST actions</li>
+               <li>Better handling for multiple types</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-26 20:37:46
+          Link: https://metacpan.org/release/DJERIUS/Data-Record-Serialize-1.05
+          Title: Data-Record-Serialize-1.05
+            <Description<
+            [#[
+               <p>Flexible serialization of a record</p><p>Changes for 1.05 - 2023-09-26T16:36:38-04:00</p><ul><li>PACKAGING</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-26 17:46:55
+          Link: https://metacpan.org/release/BPS/RT-Extension-PreviewInSearch-0.05
+          Title: RT-Extension-PreviewInSearch-0.05
+            <Description<
+            [#[
+               <p>preview tickets right from search results page</p><p>Changes for 0.05 - 2023-09-26</p><ul><li>Update for RT 5.0</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-26 17:27:49
+          Link: https://metacpan.org/release/PEVANS/String-Tagged-0.21
+          Title: String-Tagged-0.21
+            <Description<
+            [#[
+               <p>string buffers with value tags on extents</p><p>Changes for 0.21 - 2023-09-26</p><ul><li>CHANGES</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-26 15:09:33
+          Link: https://metacpan.org/release/BPS/RT-Extension-RepeatTicket-2.02
+          Title: RT-Extension-RepeatTicket-2.02
+            <Description<
+            [#[
+               <p>Repeat tickets based on schedule</p><p>Changes for 2.02 - 2023-09-26</p><ul><li>Fix display issue with selectpicker controls</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-26 15:00:53
+          Link: https://metacpan.org/release/JDEGUEST/Net-API-CPAN-v0.1.1
+          Title: Net-API-CPAN-v0.1.1
+            <Description<
+            [#[
+               <p>Meta CPAN API</p><p>Changes for v0.1.1 - 2023-09-26T16:24:10Z</p><ul><li>Improved documentation and added missing documentation in cpanapi</li>
+               <li>Implemented paging for cpanapi --favorite --recent</li>
+               <li>Corrected function favorite() in cpanapi</li>
+               <li>Improved method next() in Net::API::CPAN::List when no query has been set on the URI yet</li>
+               <li>Correcting a bug in function changes in cpanapi</li>
+               <li>Updated the method package() in Net::API::CPAN to account for the property 'version' in JSON sometimes having a value of 'undef'</li>
+               <li>Corrected build/fields2api_def.pl to change the method bugs in Net::API::CPAN::Distribution</li>
+               <li>Updated the function _show_file() in cpanapi</li>
+               <li>Updated method release() in Net::API::CPAN for the endpoint /release/all_by_author with the issue of wrong arguments order now resolved</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-26 11:18:56
+          Link: https://metacpan.org/release/BODOLFO/Process-SubProcess-2.1.8
+          Title: Process-SubProcess-2.1.8
+            <Description<
+            [#[
+               Library to manage Sub Processes as objects
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-26 11:17:29
+          Link: https://metacpan.org/release/JAVONET/JavonetPerlSdk-v2.1.9
+          Title: JavonetPerlSdk-v2.1.9
+            <Description<
+            [#[
+               Javonet SDK for Perl
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-26 10:50:15
+          Link: https://metacpan.org/release/PLAIN/Redis-Cluster-Fast-0.089
+          Title: Redis-Cluster-Fast-0.089
+            <Description<
+            [#[
+               <p>A fast perl binding for Redis Cluster</p><p>Changes for 0.089 - 2023-09-26T10:49:21Z</p><ul><li>Fix tests.</li>
+               <li>Use system libevent.</li>
+               <li>Fix startup_nodes validation.</li>
+               <li>Some chores.</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-26 10:33:41
+          Link: https://metacpan.org/release/BURAK/App-Oozie-0.007
+          Title: App-Oozie-0.007
+            <Description<
+            [#[
+               <p>Tooling/wrappers for Oozie job deployment and scheduling</p><p>Changes for 0.007 - 2023-09-26T12:32:17+02:00</p><ul><li>Fork ttree as a module (not enabled yet).</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-26 10:25:49
+          Link: https://metacpan.org/release/PROCH/FASTX-Reader-1.12.0
+          Title: FASTX-Reader-1.12.0
+            <Description<
+            [#[
+               <p>A simple module to parse FASTA and FASTQ files, supporting compressed files and paired-ends.</p><p>Changes for 1.12.0 - 2023-09-24</p><ul><li>5.16 minimum Perl version required</li>
+               <li>minor updates to POD, tests</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-26 09:01:31
+          Link: https://metacpan.org/release/BDFOY/Business-ISBN-Data-20230926.001
+          Title: Business-ISBN-Data-20230926.001
+            <Description<
+            [#[
+               <p>data pack for Business::ISBN</p><p>Changes for 20230926.001 - 2023-09-26T09:01:09Z</p><ul><li>Data update for 2023-09-26</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-26 08:37:27
+          Link: https://metacpan.org/release/BLIAKO/Config-JSON-Enhanced-0.06
+          Title: Config-JSON-Enhanced-0.06
+            <Description<
+            [#[
+               <p>JSON-based config with C/Shell-style comments, verbatim sections and variable substitutions</p><p>Changes for 0.06</p><ul><li>-Added more test files to check propgram behaviour when dealing with comments. -Some pod enhancements.</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-26 08:34:41
+          Link: https://metacpan.org/release/BLIAKO/Config-JSON-Enhanced-0.05
+          Title: Config-JSON-Enhanced-0.05
+            <Description<
+            [#[
+               JSON-based config with C/Shell-style comments, verbatim sections and variable substitutions
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-26 08:13:00
+          Link: https://metacpan.org/release/MRUEDA/Pheno-Ranker-0.00_2
+          Title: Pheno-Ranker-0.00_2
+            <Description<
+            [#[
+               A module that performs semantic similarity in PXF/BFF data structures and beyond (JSON|YAML)
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-26 02:42:46
+          Link: https://metacpan.org/release/DUNCAND/Set-Relation-0.13.3
+          Title: Set-Relation-0.13.3
+            <Description<
+            [#[
+               A relation data type
+            ]#]
+            >Description>
+         >Item>
+      >Brew>
+>>
diff --git a/htdocs/cgi-bin/rss_output/tree_feed_Life_Hacker.cnf b/htdocs/cgi-bin/rss_output/tree_feed_Life_Hacker.cnf
new file mode 100644 (file)
index 0000000..ef82057
--- /dev/null
@@ -0,0 +1,526 @@
+<<CNF_FEED<TREE>
+    Release: 1
+    Version: 1.0
+      <Feed<
+       Expires: 2023-10-11 08:00:00
+       File: ./rss_output/tree_feed_Life_Hacker.cnf
+       Published: 2023-10-02 02:29:00.262 UTC
+       Title: Lifehacker
+       URL: https://lifehacker.com/rss
+      [#[
+         Lifehacker’s an award-winning daily blog that features tips, shortcuts, and downloads that help you work and live smarter and more efficiently.
+      ]#]
+      >Feed>
+      <Brew<
+         <Item<
+          Date: 2023-10-02 01:00:00
+          Link: https://lifehacker.com/nyt-connections-answer-today-october-2-2023-1850886791
+          Title: Today’s NYT Connections Hints (and Answer) for Monday, October 2, 2023
+            <Description<
+            [#[
+               <img class="type:primaryImage" src="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/8629f05b422809f7dc8118e10209b682.png"/><p>If you’re looking for the <a class="sc-1out364-0 dPMosf sc-145m8ut-0 lcFFec js_link" href="https://www.nytimes.com/games/connections" target="_blank" rel="noopener noreferrer">Connections</a> answer for Monday, October 2, 2023, read on—I’ll share some clues, tips, and strategies, and finally the solutions to all four categories. <strong>Beware, there are spoilers below for October 2, NYT Connections #113! </strong>Read on if you want some hints (and then the answer) to today’s…</p><p><a href="https://lifehacker.com/nyt-connections-answer-today-october-2-2023-1850886791">Read more...</a></p>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-10-01 17:00:00
+          Link: https://lifehacker.com/approach-a-potential-career-change-as-if-you-were-desig-1850888017
+          Title: Approach a Potential Career Change As If You Were Designing a New Product
+            <Description<
+            [#[
+               <img class="type:primaryImage" src="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/f869f21ba4b6f088fd3d2f8cf4d38a25.jpg"/><p>Feeling unhappy and unfulfilled at work is one thing: Knowing what to do instead is something else completely. At this point, most people probably realize that there’s <a class="sc-1out364-0 dPMosf sc-145m8ut-0 lcFFec js_link" href="https://lifehacker.com/your-dream-job-is-a-farce-and-how-to-be-happy-at-work-1847072368" target="_blank" rel="noopener noreferrer">no such thing as a “dream job,”</a> but that doesn’t necessarily mean that the only other option is sticking with a job you hate. The hard part (well, one…</p><p><a href="https://lifehacker.com/approach-a-potential-career-change-as-if-you-were-desig-1850888017">Read more...</a></p>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-10-01 15:00:00
+          Link: https://lifehacker.com/use-this-renovation-calculator-to-figure-out-which-home-1850888023
+          Title: Use This Renovation Calculator to Figure Out Which Home Upgrades Add the Most Value
+            <Description<
+            [#[
+               <img class="type:primaryImage" src="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/0e1db16d79ee4e0ccecb4edec0e2ca88.jpg"/><p>Unless you’re lucky enough to be working with an unlimited budget, it can be hard to determine which home renovations to prioritize. </p><p><a href="https://lifehacker.com/use-this-renovation-calculator-to-figure-out-which-home-1850888023">Read more...</a></p>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-10-01 13:00:00
+          Link: https://lifehacker.com/you-should-clean-your-sinks-overflow-hole-1850888031
+          Title: You Should Clean Your Sink's Overflow Hole
+            <Description<
+            [#[
+               <img class="type:primaryImage" src="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/a2eeffc5c652a445faa9f3221bb6022a.jpg"/><p>As its name suggests, a sink’s overflow hole gives water a place to go in the event that the drain is closed or blocked, and the faucet is left on. While the sink’s drain is located at the bottom of the basin, the overflow hole can be found along one of the sides, towards the top.</p><p><a href="https://lifehacker.com/you-should-clean-your-sinks-overflow-hole-1850888031">Read more...</a></p>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-10-01 01:00:00
+          Link: https://lifehacker.com/nyt-connections-answer-today-october-1-2023-1850886727
+          Title: Today’s NYT Connections Hints (and Answer) for Sunday, October 1, 2023
+            <Description<
+            [#[
+               <img class="type:primaryImage" src="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/085217f9363d669e478ddf29e03018c6.png"/><p>If you’re looking for the <a class="sc-1out364-0 dPMosf sc-145m8ut-0 lcFFec js_link" href="https://www.nytimes.com/games/connections" target="_blank" rel="noopener noreferrer">Connections</a> answer for Sunday, October 1, 2023, read on—I’ll share some clues, tips, and strategies, and finally the solutions to all four categories. <strong>Beware, there are spoilers below for October 1, NYT Connections #112! </strong>Read on if you want some hints (and then the answer) to today’s…</p><p><a href="https://lifehacker.com/nyt-connections-answer-today-october-1-2023-1850886727">Read more...</a></p>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-30 17:00:00
+          Link: https://lifehacker.com/the-most-clever-ways-to-reuse-an-old-pillow-1850887855
+          Title: The Most Clever Ways to Reuse an Old Pillow
+            <Description<
+            [#[
+               <img class="type:primaryImage" src="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/ce2ed5aa74d87515c19943f1d8523a8b.jpg"/><p>For the most part, pillows don’t last forever. Even if you <a class="sc-1out364-0 dPMosf sc-145m8ut-0 lcFFec js_link" href="https://lifehacker.com/clean-and-freshen-your-pillows-in-three-simple-steps-1787336053" target="_blank" rel="noopener noreferrer">wash</a> them <a class="sc-1out364-0 dPMosf sc-145m8ut-0 lcFFec js_link" href="https://lifehacker.com/how-often-should-you-wash-your-pillows-cushions-and-c-1849447049" target="_blank" rel="noopener noreferrer">regularly</a>, they can still flatten or lose their shape over time. On the other hand, you may have perfectly good pillows that you no longer need. </p><p><a href="https://lifehacker.com/the-most-clever-ways-to-reuse-an-old-pillow-1850887855">Read more...</a></p>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-30 15:15:00
+          Link: https://lifehacker.com/12-killer-supersets-to-add-to-your-next-workout-1849986590
+          Title: Add These 12 Killer Supersets to Your Next Workout
+            <Description<
+            [#[
+               <img class="type:primaryImage" src="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/ed970a5330bfd0913bfbcc42091c58f7.jpg"/><p>Who doesn’t love a superset? Pairing two exercises saves time in your main workout, provided the routine allows. And if you’d like to do a quick bit of extra work at the end of the day, a superset is an efficient way to fit it in. So let’s look at a few perfect pairings you can add to your next workout. </p><p><a href="https://lifehacker.com/12-killer-supersets-to-add-to-your-next-workout-1849986590">Read more...</a></p>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-30 15:00:00
+          Link: https://lifehacker.com/how-to-deep-clean-your-kitchen-cabinets-1850887869
+          Title: How to Deep Clean Your Kitchen Cabinets
+            <Description<
+            [#[
+               <img class="type:primaryImage" src="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/3e2d4d4ca033893ba351e63b8063b5fe.jpg"/><p>Even if you keep your kitchen relatively clean—wiping down countertops and tables, vacuuming the floor, and keeping the sink area as tidy as possible—grease and grime from regular cooking is going to build up over time. This is especially the case when it comes to surfaces we don’t  wipe down on a regular basis, like…</p><p><a href="https://lifehacker.com/how-to-deep-clean-your-kitchen-cabinets-1850887869">Read more...</a></p>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-30 13:00:00
+          Link: https://lifehacker.com/theres-a-new-global-entry-app-for-us-customs-1850887880
+          Title: There's a New Global Entry App for US Customs
+            <Description<
+            [#[
+               <img class="type:primaryImage" src="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/2e14acc683d03a891c5d5230f6a8295a.jpg"/><p>International travel is about to get a little easier for the more than 12 million members of U.S. Customs and Border Protection’s (CBP) Global Entry program. Earlier this month, <a class="sc-1out364-0 dPMosf sc-145m8ut-0 lcFFec js_link" href="https://www.cbp.gov/newsroom/national-media-release/cbp-announces-new-global-entry-mobile-app" target="_blank" rel="noopener noreferrer">GBP announced</a> the launch of a new mobile app which would allow Global Entry members to complete their arrival processing on their phone…</p><p><a href="https://lifehacker.com/theres-a-new-global-entry-app-for-us-customs-1850887880">Read more...</a></p>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-30 01:00:00
+          Link: https://lifehacker.com/nyt-connections-answer-today-september-30-2023-1850886122
+          Title: Today’s NYT Connections Hints (and Answer) for Saturday, September 30, 2023
+            <Description<
+            [#[
+               <img class="type:primaryImage" src="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/973a8560d5adca175abe854747e3ee79.png"/><p>If you’re looking for the <a class="sc-1out364-0 dPMosf sc-145m8ut-0 lcFFec js_link" href="https://www.nytimes.com/games/connections" target="_blank" rel="noopener noreferrer">Connections</a> answer for Saturday, September 30, 2023, read on—I’ll share some clues, tips, and strategies, and finally the solutions to all four categories. <strong>Beware, there are spoilers below for September 30, NYT Connections #111! </strong>Read on if you want some hints (and then the answer) to today’s…</p><p><a href="https://lifehacker.com/nyt-connections-answer-today-september-30-2023-1850886122">Read more...</a></p>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-29 23:00:00
+          Link: https://lifehacker.com/spotify-can-now-transcribe-podcasts-while-you-listen-1850887011
+          Title: Spotify Can Now Transcribe Podcasts While You Listen
+            <Description<
+            [#[
+               <img class="type:primaryImage" src="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/5574f6dadba0ff8aa0e7d959d74843a7.png"/><p>If you want to listen to a podcast on your commute, but forgot your headphones, you’re out of luck. Or, at least, you used to be: <a class="sc-1out364-0 dPMosf sc-145m8ut-0 lcFFec js_link" href="https://newsroom.spotify.com/2023-09-28/international-podcast-day-transcripts-chapters-show-pages-global/" target="_blank" rel="noopener noreferrer">Spotify is rolling out a new feature</a> that auto-generates and syncs podcast transcriptions with “millions” of episodes, so you can read along as you listen, or stay tuned in without the…</p><p><a href="https://lifehacker.com/spotify-can-now-transcribe-podcasts-while-you-listen-1850887011">Read more...</a></p>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-29 22:30:00
+          Link: https://lifehacker.com/this-all-in-one-jbl-soundbar-is-81-right-now-1850888300
+          Title: This 'All-in-one' JBL Soundbar Is $81 Right Now
+            <Description<
+            [#[
+               <img class="type:primaryImage" src="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/ac82703fb41e771ba250f67d49566eee.jpg"/><p>You’re not alone if you’ve felt dialogue in movies and shows has <a class="sc-1out364-0 dPMosf sc-145m8ut-0 lcFFec js_link" href="https://www.slashfilm.com/673162/heres-why-movie-dialogue-has-gotten-more-difficult-to-understand-and-three-ways-to-fix-it/" target="_blank" rel="noopener noreferrer">gotten worse over the years</a>. One easy solution (besides turning on the subtitles) is upgrading your sound system. The <a class="sc-1out364-0 dPMosf sc-145m8ut-0 lcFFec js_link" href="https://zdcs.link/JYL1p" target="_blank" rel="noopener noreferrer">JBL Bar 2.0 All-in-one Soundbar</a> is currently <strong>$81.81</strong> (originally $199.95) once an automatic (temporary) discount is applied at checkout. S…</p><p><a href="https://lifehacker.com/this-all-in-one-jbl-soundbar-is-81-right-now-1850888300">Read more...</a></p>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-29 22:00:00
+          Link: https://lifehacker.com/meta-quest-3-vc-apple-vision-pro-vs-vive-pro-2-1850887857
+          Title: How to Choose Between the Meta Quest 2, Apple Vision Pro, and Vive Pro 2
+            <Description<
+            [#[
+               <img class="type:primaryImage" src="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/ab8ad70b474628c83d92062e02a4d0ff.png"/><p>Consumers hoping to take their first steps into virtual reality (or upgrade their current VR setup) are facing a dilemma: Buy a standalone system like the Meta Quest 3 when it goes on sale Oct. 10, wait for the <a class="sc-1out364-0 dPMosf sc-145m8ut-0 lcFFec js_link" href="https://lifehacker.com/everything-apple-announced-at-wwdc-2023-1850506825" target="_blank" rel="noopener noreferrer">Apple Vision Pro</a> planned for release in 2024, or go with an already available wired VR rig like the Valve…</p><p><a href="https://lifehacker.com/meta-quest-3-vc-apple-vision-pro-vs-vive-pro-2-1850887857">Read more...</a></p>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-29 21:30:00
+          Link: https://lifehacker.com/is-ethernet-still-worth-it-1850887111
+          Title: Why It’s Still Worth It to Wire Your House for Ethernet
+            <Description<
+            [#[
+               <img class="type:primaryImage" src="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/c88ed165fb7cfc58530dcbc7113cb856.jpg"/><p>We’re living in an increasingly wireless world, as everything from the power that charges your devices to the audio that pops into your earbuds is transmitted wirelessly—including arguably the most precious resource of the modern era, the internet. There are so many advantages to accessing the internet via <a class="sc-1out364-0 dPMosf sc-145m8ut-0 lcFFec js_link" href="https://lifehacker.com/how-to-always-find-free-wifi-1849914769" target="_blank" rel="noopener noreferrer">wifi</a> that…</p><p><a href="https://lifehacker.com/is-ethernet-still-worth-it-1850887111">Read more...</a></p>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-29 21:00:00
+          Link: https://lifehacker.com/why-a-pawn-shop-is-better-than-a-payday-loan-in-an-emer-1850886664
+          Title: Why a Pawn Shop Is Better Than a Payday Loan in an Emergency
+            <Description<
+            [#[
+               <img class="type:primaryImage" src="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/108b2bd855447d2b1d56cff6ae5b925b.jpg"/><p>It’s a universal rule of finance: If you’re seeking a short-term loan to cover an emergency expense, you’re not in a good place, financially speaking. But since most of us have <a class="sc-1out364-0 dPMosf sc-145m8ut-0 lcFFec js_link" href="https://www.nasdaq.com/articles/most-americans-have-$1000-or-less-in-savings-how-to-increase-that-amount" target="_blank" rel="noopener noreferrer">very little savings</a> in the bank, most of us aren’t in a good place financially. So when an emergency expense comes up, the only options are…</p><p><a href="https://lifehacker.com/why-a-pawn-shop-is-better-than-a-payday-loan-in-an-emer-1850886664">Read more...</a></p>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-29 20:30:00
+          Link: https://lifehacker.com/iphone-15-pro-max-review-1850887664
+          Title: The iPhone 15 Pro Max Is Apple’s Most Boring Phone Yet
+            <Description<
+            [#[
+               <img class="type:primaryImage" src="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/06008c2c14c04a1447fa2f11b34d9b96.jpg"/><p>There’s nothing innately special about the iPhone 15 Pro Max. Sure, it’s the latest and greatest smartphone from Apple, and it finally brings USB-C to the iPhone—yet aside from a few small additions, the iPhone 15 Pro Max is unequivocally boring. But that’s not a bad thing.<br/></p><p><a href="https://lifehacker.com/iphone-15-pro-max-review-1850887664">Read more...</a></p>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-29 20:15:00
+          Link: https://lifehacker.com/12-of-the-best-exercises-to-do-with-resistance-bands-at-1849658908
+          Title: 12 of the Best Exercises to Do With Resistance Bands at the Gym
+            <Description<
+            [#[
+               <img class="type:primaryImage" src="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/f4379c05733fba6b6ba70a19f212e624.jpg"/><p>Resistance bands are a <a class="sc-1out364-0 dPMosf sc-145m8ut-0 lcFFec js_link" href="https://lifehacker.com/how-to-decide-between-resistance-bands-and-dumbbells-1845218911" target="_blank" rel="noopener noreferrer">favorite</a> of travelers and home-gym-havers because they can fold up into a small, light, easily transportable package. But even when you have access to a full gym, there are still a ton of exercises where resistance bands are the right tool for the job. <br/><br/>Here are some of the best band moves that…</p><p><a href="https://lifehacker.com/12-of-the-best-exercises-to-do-with-resistance-bands-at-1849658908">Read more...</a></p>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-29 20:00:00
+          Link: https://lifehacker.com/fitbit-charge-6-review-1850887582
+          Title: Everything You Need to Know About the Fitbit Charge 6
+            <Description<
+            [#[
+               <img class="type:primaryImage" src="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/3a051b8c764bd88a0e15765a3004a15a.jpg"/><p>One of Fitbit’s most popular models, the Charge, has a new version out: the <a class="sc-1out364-0 dPMosf sc-145m8ut-0 lcFFec js_link" href="https://blog.google/products/fitbit/fitness-tracker-charge-6/" target="_blank" rel="noopener noreferrer">Charge 6</a>. It has Google Maps, Google Wallet, and YouTube Music controls built in, along with heart rate sensing that the company says is its most accurate to date. You can preorder it now for $159.95, only about $10 more than the Charge 5’s…</p><p><a href="https://lifehacker.com/fitbit-charge-6-review-1850887582">Read more...</a></p>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-29 19:30:00
+          Link: https://lifehacker.com/easiest-sinks-install-1850884571
+          Title: Six Sinks, Ranked by How Easy They Are to Install Yourself
+            <Description<
+            [#[
+               <img class="type:primaryImage" src="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/f646aaa9f90954c8838f38cafe94a917.jpg"/><p>If you need to upgrade a sink, choosing the right one can seem daunting. If you plan to do the work yourself, considerations like mounting style, depth, and the type of countertop you have can factor into how simple it is to swap out your old sink for a new one. Here’s a handy guide, from simplest to most complicated…</p><p><a href="https://lifehacker.com/easiest-sinks-install-1850884571">Read more...</a></p>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-29 19:00:00
+          Link: https://lifehacker.com/how-to-preorder-raspberry-pi-5-1850887192
+          Title: You Can Finally Preorder Raspberry Pi 5
+            <Description<
+            [#[
+               <img class="type:primaryImage" src="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/fcc07477e052e8498568de0f38b66afa.jpg"/><p>From the beginning, Raspberry Pi’s mission has been to offer capable computers to beginners and experts alike, at a remarkably affordable price. That doesn’t change with the company’s latest device. Yes, after years of <a class="sc-1out364-0 dPMosf sc-145m8ut-0 lcFFec js_link" href="https://techcrunch.com/2022/10/05/raspberry-pi-supply-chain-shocks-eben-upton-interview/" target="_blank" rel="noopener noreferrer">processor shortages and supply chain disruption</a>, the Raspberry 5 is nearly here, and you can…</p><p><a href="https://lifehacker.com/how-to-preorder-raspberry-pi-5-1850887192">Read more...</a></p>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-29 18:30:00
+          Link: https://lifehacker.com/two-shortcuts-iphone-15-pro-action-button-1850886176
+          Title: You Can Actually Trigger Two Shortcuts With the iPhone 15 Pro’s Action Button
+            <Description<
+            [#[
+               <img class="type:primaryImage" src="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/b22ed20d2d3ffc1e428abc405cbd9fdb.png"/><p>The <a class="sc-1out364-0 dPMosf sc-145m8ut-0 lcFFec js_link" href="https://lifehacker.com/everything-you-need-to-know-about-the-iphone-15-pro-and-1850829750" target="_blank" rel="noopener noreferrer">iPhone 15 Pro</a>’s Action Button <a class="sc-1out364-0 dPMosf sc-145m8ut-0 lcFFec js_link" href="https://lifehacker.com/everything-you-can-do-with-iphone-15-pros-action-button-1850832992" target="_blank" rel="noopener noreferrer">is a game-changer</a>. With it, you can quickly launch features like the camera and flashlight, or, if you’re really creative, a host of useful shortcuts and automations. But what’s better than assigning one shortcut to the Action Button? Assigning two shortcuts to the Action Button.</p><p><a href="https://lifehacker.com/two-shortcuts-iphone-15-pro-action-button-1850886176">Read more...</a></p>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-29 18:15:00
+          Link: https://lifehacker.com/everything-you-can-and-cannot-microwave-on-thanksgiving-1830572421
+          Title: Every Thanksgiving Recipe You Can Microwave (and Those You Can't)
+            <Description<
+            [#[
+               <img class="type:primaryImage" src="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/ed9836c0ce25796b5d949a4bc0387f09.jpg"/><p>Choreographing a lavish Thanksgiving meal is a high-pressure project to say the least, and when you’re juggling a dozen-odd dishes, every square inch of stove and oven space is precious real estate. <a class="sc-1out364-0 dPMosf sc-145m8ut-0 lcFFec js_link" href="https://lifehacker.com/the-best-tips-and-tricks-for-your-microwave-1643119824" target="_blank" rel="noopener noreferrer">A microwave oven</a> can streamline even the most ambitious prep schedule, as long as you make good choices—some recipes…</p><p><a href="https://lifehacker.com/everything-you-can-and-cannot-microwave-on-thanksgiving-1830572421">Read more...</a></p>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-29 18:00:00
+          Link: https://lifehacker.com/this-three-camera-blink-bundle-is-58-off-right-now-1850887133
+          Title: This Three-camera Blink Bundle Is 58% Off Right Now
+            <Description<
+            [#[
+               <img class="type:primaryImage" src="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/bc0a704ffe8e8451f4e3f36a3042183d.jpg"/><p>Until the end of the day on Sunday, Oct. 1, Amazon Prime members can get a 58% discount on a <a class="sc-1out364-0 dPMosf sc-145m8ut-0 lcFFec js_link" href="https://zdcs.link/3Z00m" target="_blank" rel="noopener noreferrer">three-camera Blink bundle</a>, currently going for <strong>$99.99 </strong>(down from its $239.98 list price). This is the lowest price this bundle has been, according to <a class="sc-1out364-0 dPMosf sc-145m8ut-0 lcFFec js_link" href="https://camelcamelcamel.com/product/B09F7KTTTL" target="_blank" rel="noopener noreferrer">Camelcamelcamel’s price history</a>.<br/></p><p><a href="https://lifehacker.com/this-three-camera-blink-bundle-is-58-off-right-now-1850887133">Read more...</a></p>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-29 17:30:00
+          Link: https://lifehacker.com/cling-to-that-summer-feeling-with-this-lemon-stick-drin-1850887254
+          Title: Cling to That Summer Feeling With This Lemon Stick 'Drink'
+            <Description<
+            [#[
+               <img class="type:primaryImage" src="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/a695890298f2e3ee7711ae0886fcf4d4.jpg"/><p>Summer ended abruptly this year. One minute, I was sweating profusely, hiding from the sun indoors, and the next thing I knew, I was bundling myself in blankets, hiding from the rain indoors. I wasn’t done with summer, but summer was done with me. As a result, I’ve found myself clinging to sunny-weather things, like…</p><p><a href="https://lifehacker.com/cling-to-that-summer-feeling-with-this-lemon-stick-drin-1850887254">Read more...</a></p>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-29 17:00:00
+          Link: https://lifehacker.com/back-up-your-xbox-screenshots-and-videos-before-microso-1850886074
+          Title: Back Up Your Xbox Screenshots and Videos Before Microsoft Deletes Them All
+            <Description<
+            [#[
+               <img class="type:primaryImage" src="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/791ad2b4fe1274bc38bf122acb90a1e0.jpg"/><p>Microsoft won’t let you permanently store <a class="sc-1out364-0 dPMosf sc-145m8ut-0 lcFFec js_link" href="https://lifehacker.com/how-to-take-screenshots-on-the-xbox-series-x-s-outside-1847257809" target="_blank" rel="noopener noreferrer">your game clips and screenshots</a> on the Xbox Network anymore. In a <a class="sc-1out364-0 dPMosf sc-145m8ut-0 lcFFec js_link" href="https://news.xbox.com/en-us/2023/09/27/bonus-xbox-update-for-september/" target="_blank" rel="noopener noreferrer">blog post</a>, the company has announced it’ll start deleting all of these game captures 90 days after you upload them. If you’re as emotionally attached to your “play of the game” moments as I am, you should start…</p><p><a href="https://lifehacker.com/back-up-your-xbox-screenshots-and-videos-before-microso-1850886074">Read more...</a></p>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-29 16:30:00
+          Link: https://lifehacker.com/these-are-the-signs-of-poor-interoception-in-kids-1850884972
+          Title: These Are the Signs of Poor Interoception in Kids
+            <Description<
+            [#[
+               <img class="type:primaryImage" src="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/0d1a0ca92cb15061b7fbcea3d15d41b6.jpg"/><p><a class="sc-1out364-0 dPMosf sc-145m8ut-0 lcFFec js_link" href="https://www.understood.org/en/articles/interoception-and-sensory-processing-issues-what-you-need-to-know" target="_blank" rel="noopener noreferrer">Interoception</a> is the ability to recognize internal bodily signals, such as feeling hot or cold, hungry or thirsty. In the same way that the nerves in our muscles and joints will send signals to our brain, letting it know where we are in physical space, the nerves in our organs will also send signals about how full our…</p><p><a href="https://lifehacker.com/these-are-the-signs-of-poor-interoception-in-kids-1850884972">Read more...</a></p>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-29 16:00:00
+          Link: https://lifehacker.com/use-think-pair-share-for-effective-group-studying-1850885376
+          Title: Use 'Think, Pair, Share' for Effective Group Studying
+            <Description<
+            [#[
+               <img class="type:primaryImage" src="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/c10c2971e06f7ae0b5949163924a6c88.jpg"/><p>There are a few effective methods that will help you study with partners or groups, but <a class="sc-1out364-0 dPMosf sc-145m8ut-0 lcFFec js_link" href="https://lifehacker.com/how-to-study-in-a-group-if-you-must-1850857034" target="_blank" rel="noopener noreferrer">you have to know them before you get into that group setting</a>—or else run the risk of no one getting much working done. I’m not a huge proponent of group work, but with the right methods, it can be productive. Here’s another method…</p><p><a href="https://lifehacker.com/use-think-pair-share-for-effective-group-studying-1850885376">Read more...</a></p>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-29 15:30:00
+          Link: https://lifehacker.com/use-inquiry-based-learning-to-stay-curious-about-what-y-1850885326
+          Title: Use Inquiry-Based Learning to Stay Curious About What You’re Studying
+            <Description<
+            [#[
+               <img class="type:primaryImage" src="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/8a092b28e4236dcbbeb9561c8db3ea2f.jpg"/><p>Teachers use a variety of methods to help students learn and retain material and we can find ways to modify those methods for independent studying, too. A great example of a widely-used pedagogical technique that is useful for studying with on your own is inquiry-based learning.<br/></p><p><a href="https://lifehacker.com/use-inquiry-based-learning-to-stay-curious-about-what-y-1850885326">Read more...</a></p>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-29 15:00:00
+          Link: https://lifehacker.com/the-best-science-fiction-and-fantasy-movies-on-netflix-1850881836
+          Title: The 25 Best Science Fiction and Fantasy Movies on Netflix
+            <Description<
+            [#[
+               <img class="type:primaryImage" src="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/8899aee418dacbda202d98ec9ff0d59b.jpg"/><p>We use the umbrella term “science fiction and fantasy” all the time—but, in truth, these are twin genres that each contain multitudes. An SFF movie might be a big, loud, alien invasion blockbuster; a bloody sword-and-sorcery epic; or a quiet, reflective fable. What these movies all have in common is the imagination to…</p><p><a href="https://lifehacker.com/the-best-science-fiction-and-fantasy-movies-on-netflix-1850881836">Read more...</a></p>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-29 14:30:00
+          Link: https://lifehacker.com/fall-is-the-perfect-time-to-repair-the-mortar-on-your-w-1850884311
+          Title: Fall Is the Perfect Time to Repair the Mortar on Your Walkways
+            <Description<
+            [#[
+               <img class="type:primaryImage" src="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/0a52e6003646d548a11b77ace8c53cdb.jpg"/><p>As the weather starts to change, cracks in stone and paver walkways can begin to be more of a problem. Moisture can work its way into any cracks in the mortar and when it freezes, it will expand, widening the cracks and potentially destabilizing the walkway. Before temperatures get below freezing on a regular basis,…</p><p><a href="https://lifehacker.com/fall-is-the-perfect-time-to-repair-the-mortar-on-your-w-1850884311">Read more...</a></p>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-29 14:00:00
+          Link: https://lifehacker.com/this-air-fried-key-lime-pie-is-so-easy-it-feels-like-c-1850871411
+          Title: This Air Fried Key Lime Pie Is So Easy, It Feels Like Cheating
+            <Description<
+            [#[
+               <img class="type:primaryImage" src="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/2b359263fdc7a8857daa2aae9aaf8378.jpg"/><p>Air fried key lime pie is a cheater’s pie if I ever saw one. It doesn’t contain any true key limes, just your average, run of the mill, bottled lime juice. The batter is made in a food processor, and it bakes up in 10 minutes or less with the help of the air fryer. Is this even a baking project? Who can say? What I…</p><p><a href="https://lifehacker.com/this-air-fried-key-lime-pie-is-so-easy-it-feels-like-c-1850871411">Read more...</a></p>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-29 13:30:00
+          Link: https://lifehacker.com/where-to-stream-the-tennessee-vs-south-carolina-game-1850884935
+          Title: Where to Stream the Tennessee Vs. South Carolina Game
+            <Description<
+            [#[
+               <img class="type:primaryImage" src="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/3045396054f5d544334da11800325be7.jpg"/><p>The South Carolina Gamecocks are traveling to Knoxville this week to take on the Tennessee Volunteers in a primetime grudge match. There’s history between these squads: Last season, a Gamecock victory kept Tennessee from the championship, so the Volunteers are out for vengeance. Here’s how you can watch the action.<br/></p><p><a href="https://lifehacker.com/where-to-stream-the-tennessee-vs-south-carolina-game-1850884935">Read more...</a></p>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-29 13:00:00
+          Link: https://lifehacker.com/refurbished-apple-watches-are-as-cheap-as-70-on-woot-t-1850884670
+          Title: Refurbished Apple Watches Are As Cheap As $70 on Woot Today
+            <Description<
+            [#[
+               <img class="type:primaryImage" src="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/1209a40623da7f93cf35f5d4196a2f79.jpg"/><p>Even if you’re in the market for an Apple Watch, you may not be able (or willing) to shell out $400  for the newest <a class="sc-1out364-0 dPMosf sc-145m8ut-0 lcFFec js_link" href="https://zdcs.link/KY3kE" target="_blank" rel="noopener noreferrer">Apple Watch Series 9</a>. Fortunately, there are pretty great deals to be had on older Apple Watch models, if you’re willing to make some compromises on features. Right now, Woot is  selling refurbished…</p><p><a href="https://lifehacker.com/refurbished-apple-watches-are-as-cheap-as-70-on-woot-t-1850884670">Read more...</a></p>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-29 12:30:00
+          Link: https://lifehacker.com/the-best-ways-to-streamline-your-grocery-shopping-and-s-1850883509
+          Title: The Best Ways to Streamline Your Grocery Shopping and Save Money
+            <Description<
+            [#[
+               <img class="type:primaryImage" src="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/4a44bc79a095cca76dfe6596aed4c014.jpg"/><p>You’re standing in the middle of the aisle at the grocery store, holding a box of pasta, desperately wracking your brain: Do I already have this in my pantry?With <a class="sc-1out364-0 dPMosf sc-145m8ut-0 lcFFec js_link" href="https://lifehacker.com/how-to-see-through-inflation-prices-1848793300" target="_blank" rel="noopener noreferrer">inflation</a> making all our lives increasingly expensive, one of the few things still in your control is how you shop. To avoid unnecessary spending—like on a…</p><p><a href="https://lifehacker.com/the-best-ways-to-streamline-your-grocery-shopping-and-s-1850883509">Read more...</a></p>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-29 12:00:00
+          Link: https://lifehacker.com/try-playing-nyt-connections-on-paper-1850883755
+          Title: Try Playing NYT Connections on Paper
+            <Description<
+            [#[
+               <img class="type:primaryImage" src="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/0bc1dcd39544ecb7d5700a680eb96b18.jpg"/><p>When you’re playing the New York Times’s <a class="sc-1out364-0 dPMosf sc-145m8ut-0 lcFFec js_link" href="https://lifehacker.com/entertainment/connections" target="_blank" rel="noopener noreferrer">Connections</a> game, it’s important not to submit your guesses too soon. You may think that you’ve spotted four candies, or four things found on trees, but the game is trying to trick you. One of those candies may be an ambiguous word, like SUCKER, that belongs in a different…</p><p><a href="https://lifehacker.com/try-playing-nyt-connections-on-paper-1850883755">Read more...</a></p>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-29 01:00:00
+          Link: https://lifehacker.com/nyt-connections-answer-today-september-29-2023-1850881958
+          Title: Today’s NYT Connections Hints (and Answer) for September 29, 2023
+            <Description<
+            [#[
+               <img class="type:primaryImage" src="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/99de346d4fdfcd4a0267deaf1bf5c35f.png"/><p>If you’re looking for the <a class="sc-1out364-0 dPMosf sc-145m8ut-0 lcFFec js_link" href="https://www.nytimes.com/games/connections" target="_blank" rel="noopener noreferrer">Connections</a> answer for Friday, September 29, 2023, read on—I’ll share some clues, tips, and strategies, and finally the solutions to all four categories. <strong>Beware, there are spoilers below for September 29, NYT Connections #110! </strong>Scroll down if you want some hints (and then the answer) to…</p><p><a href="https://lifehacker.com/nyt-connections-answer-today-september-29-2023-1850881958">Read more...</a></p>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-28 23:30:00
+          Link: https://lifehacker.com/where-to-stream-the-iowa-state-vs-oklahoma-game-1850884575
+          Title: Where to Stream the Iowa State Vs. Oklahoma Game
+            <Description<
+            [#[
+               <img class="type:primaryImage" src="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/748965645ae475660d0f47fb2edd9e04.jpg"/><p>This Saturday, the Iowa State Cyclones travel to Norman, Okla. to take on the undefeated Oklahoma Sooners in a Big 12 matchup. Both teams are coming off victories: Iowa State thrashed Oklahoma State last week, earning a 34-27 victory at home, and Oklahoma destroyed Cincinnati 20-6 in an away game. While OK’s…</p><p><a href="https://lifehacker.com/where-to-stream-the-iowa-state-vs-oklahoma-game-1850884575">Read more...</a></p>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-28 23:00:00
+          Link: https://lifehacker.com/you-can-try-copilot-windows-11-s-new-ai-assistant-rig-1850884313
+          Title: You Can Try Copilot, Windows 11’s New AI Assistant, Right Now
+            <Description<
+            [#[
+               <img class="type:primaryImage" src="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/9cde7affefbd18c8c6005ee6e1d11215.jpg"/><p><a class="sc-1out364-0 dPMosf sc-145m8ut-0 lcFFec js_link" href="https://lifehacker.com/biggest-new-features-windows-11-23h2-update-1850860890" target="_blank" rel="noopener noreferrer">One week after its initial announcement</a>, Microsoft has released its big Copilot update for Windows 11. Now, this isn’t the major Windows 11 update that everyone is waiting on—that’s coming later this year—but it does give us a good look at how Microsoft is incorporating AI-based tools into Windows.</p><p><a href="https://lifehacker.com/you-can-try-copilot-windows-11-s-new-ai-assistant-rig-1850884313">Read more...</a></p>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-28 22:30:00
+          Link: https://lifehacker.com/check-if-you-qualify-for-one-of-these-student-loan-gran-1850882286
+          Title: Check If You Qualify for One of These Student Loan Grants
+            <Description<
+            [#[
+               <img class="type:primaryImage" src="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/eb7a1c4c6fa7c8e0771d0efa0354628b.jpg"/><p>Student loan bills are due once again after a pandemic hiatus (yes, even if the government shuts down). The Biden administration’s Saving on a Valuable Education (SAVE) Plan allows many borrowers to <a class="sc-1out364-0 dPMosf sc-145m8ut-0 lcFFec js_link" href="https://lifehacker.com/you-can-apply-now-to-lower-your-monthly-student-loan-pa-1850770373" target="_blank" rel="noopener noreferrer">lower their monthly payments</a>—some all the way to $0—but some people may also qualify for grants or loan forgiveness…</p><p><a href="https://lifehacker.com/check-if-you-qualify-for-one-of-these-student-loan-gran-1850882286">Read more...</a></p>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-28 22:00:00
+          Link: https://lifehacker.com/you-can-get-an-amazon-echo-pop-and-a-month-of-amazon-mu-1850883447
+          Title: You Can Get an Amazon Echo Pop and a Month of Amazon Music Unlimited for $15 Right Now
+            <Description<
+            [#[
+               <img class="type:primaryImage" src="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/62d1ae12cbad6b09dfd9e149dea32294.jpg"/><p>Amazon’s <a class="sc-1out364-0 dPMosf sc-145m8ut-0 lcFFec js_link" href="https://lifehacker.com/amazon-officially-announces-prime-big-deal-days-for-202-1850848692" target="_blank" rel="noopener noreferrer">Prime Big Deal Days</a> are coming Oct. 10–11, offering Prime members exclusive deals on tons of stuff Amazon sells. But some of Amazon’s in-house tech products are already seeing discounts comparable to Prime Day. For example, the Echo Pop, Amazon’s newest and cheapest Alexa-enabled smart speaker, is currently…</p><p><a href="https://lifehacker.com/you-can-get-an-amazon-echo-pop-and-a-month-of-amazon-mu-1850883447">Read more...</a></p>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-28 21:30:00
+          Link: https://lifehacker.com/where-to-stream-the-washington-vs-arizona-game-1850884048
+          Title: Where to Stream the Washington Vs. Arizona Game
+            <Description<
+            [#[
+               <img class="type:primaryImage" src="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/1bca9f9fc8778162e56273f043246e6d.jpg"/><p>This week five matchup pits the Arizona Wildcats against the Washington Huskies. Washington is hoping to expand its undefeated 2023 record to 5-o, but the Wildcats are not going to roll over. While they’re definitely the underdog, Arizona is coming off a 21-20 win against Stanford, and the team’s 3-1 record is nothing…</p><p><a href="https://lifehacker.com/where-to-stream-the-washington-vs-arizona-game-1850884048">Read more...</a></p>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-28 21:15:00
+          Link: https://lifehacker.com/how-to-make-turkey-gravy-without-pan-drippings-1830415802
+          Title: How to Make Turkey Gravy Without Pan Drippings
+            <Description<
+            [#[
+               <img class="type:primaryImage" src="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/8dbab0f0602df387cde4b90b295a4819.jpg"/><p>There is a certain (I think) overly romantic expectation that a good turkey gravy must be <a class="sc-1out364-0 dPMosf sc-145m8ut-0 lcFFec js_link" href="https://lifehacker.com/there-is-no-reason-to-not-make-your-own-turkey-gravy-1819991230" target="_blank" rel="noopener noreferrer">made from pan drippings</a>, and whisked together just moments before the Big Meal is put on the table. To this I say, “No thank you,” particularly when gravy can be made hours, days, or even weeks ahead of time, without any pan…</p><p><a href="https://lifehacker.com/how-to-make-turkey-gravy-without-pan-drippings-1830415802">Read more...</a></p>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-28 21:00:00
+          Link: https://lifehacker.com/the-best-kitchen-countertops-to-install-yourself-1850880923
+          Title: The Three Best Kitchen Countertops to Install Yourself
+            <Description<
+            [#[
+               <img class="type:primaryImage" src="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/67882637fbde3b38aa5229139eecb2bb.jpg"/><p>If you’re considering a kitchen remodel, or you just need to replace your worn-out countertops, finding the right type of countertop might seem daunting. With costs for materials seemingly ever-increasing, staying on budget is a challenge. Finding a DIY solution can  be a great way to save money on your countertop…</p><p><a href="https://lifehacker.com/the-best-kitchen-countertops-to-install-yourself-1850880923">Read more...</a></p>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-28 20:30:00
+          Link: https://lifehacker.com/how-to-rejuvenate-soil-in-raised-garden-beds-1850882749
+          Title: How to Rejuvenate the Soil in Your Raised Garden Beds
+            <Description<
+            [#[
+               <img class="type:primaryImage" src="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/2f4636becfe0b343e26c27eb8fb053a2.jpg"/><p>It’s the end of the season, and we’re all starting to tuck in our garden beds for winter. The soil in your raised garden bed has worked hard all season to impart nutrients to your vegetables and flowers, which leaves the soil depleted. The long winter sleep is a great time to let your soil build back up the supply of…</p><p><a href="https://lifehacker.com/how-to-rejuvenate-soil-in-raised-garden-beds-1850882749">Read more...</a></p>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-28 20:00:00
+          Link: https://lifehacker.com/how-to-make-mashed-potatoes-without-lumps-1850883812
+          Title: Make Super Smooth Mashed Potatoes With a Fine Mesh Strainer
+            <Description<
+            [#[
+               <img class="type:primaryImage" src="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/74548fdafcdb068fb4b9e2592707d5dd.jpg"/><p>Mashed potatoes are easy enough to make, but getting them to that perfect, creamy texture is harder than it first appears. Fans of smooth spuds usually end up purchasing a ricer, which breaks down the spuds into tiny (rice-like) bits by forcing them through little holes. These extruded—but still fluffy—spud flecks are…</p><p><a href="https://lifehacker.com/how-to-make-mashed-potatoes-without-lumps-1850883812">Read more...</a></p>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-28 19:30:00
+          Link: https://lifehacker.com/you-can-finally-use-icloud-keychain-in-google-chrome-1850883588
+          Title: You Can Finally Use iCloud Keychain in Google Chrome
+            <Description<
+            [#[
+               <img class="type:primaryImage" src="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/9e1ce1c39d2fda4fcbf4191028de549a.jpg"/><p>There’s a lot to love about Safari, but Google rules so much of the internet that using Chrome is sometimes a necessity. I can live with that, but what always frustrated me was the lack of iCloud Keychain compatibility. If I sign into an account in Safari, I can auto-fill passwords and 2FA codes with Touch ID every…</p><p><a href="https://lifehacker.com/you-can-finally-use-icloud-keychain-in-google-chrome-1850883588">Read more...</a></p>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-28 19:00:00
+          Link: https://lifehacker.com/where-to-stream-the-oregon-vs-stanford-game-1850883655
+          Title: Where to Stream the Oregon Vs. Stanford Game
+            <Description<
+            [#[
+               <img class="type:primaryImage" src="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/57c12290cdc50031b416532e5ae57ed3.jpg"/><p>The Stanford Cardinal and Oregon Ducks are facing off this weekend at Stanford in a lopsided Pac-12 matchup. The Ducks are undefeated this season and are heavy favorites to win—the spread is 17.5 points in Oregon’s favor.<br/></p><p><a href="https://lifehacker.com/where-to-stream-the-oregon-vs-stanford-game-1850883655">Read more...</a></p>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-28 18:30:00
+          Link: https://lifehacker.com/where-to-stream-the-penn-state-vs-northwestern-game-1850882748
+          Title: Where to Stream the Penn State Vs. Northwestern Game
+            <Description<
+            [#[
+               <img class="type:primaryImage" src="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/f513e7f3324bbdbbc29195bfb2d6f8f6.jpg"/><p>This Saturday, Penn State is defending its nine-game winning streak when the team travels to Illinois to take on the Northwestern Wildcats in a Big Ten Conference game. Penn State is coming off a shutout victory against the Iowa Hawkeyes, scoring 31 unanswered points in a lopsided week-4 win. Northwestern is even at…</p><p><a href="https://lifehacker.com/where-to-stream-the-penn-state-vs-northwestern-game-1850882748">Read more...</a></p>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-28 18:00:00
+          Link: https://lifehacker.com/how-to-fix-nail-pops-in-walls-1850882251
+          Title: How to Fix Ugly Nail Pops in Your Walls
+            <Description<
+            [#[
+               <img class="type:primaryImage" src="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/b5e8d74bd7d8c8a431bcd031b990508e.jpg"/><p>Drywall is <a class="sc-1out364-0 dPMosf sc-145m8ut-0 lcFFec js_link" href="https://lifehacker.com/how-to-tell-if-a-wall-is-drywall-or-plaster-1849977986" target="_blank" rel="noopener noreferrer">relatively durable and cheap, and looks quite nice if installed and maintained correctly</a>. But it’s also easy to damage while you’re just living your life—and it can even damage itself, most commonly through the appearance of little bumps under the surface known as “nail pops.” (Despite the name, nail pops…</p><p><a href="https://lifehacker.com/how-to-fix-nail-pops-in-walls-1850882251">Read more...</a></p>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-28 17:30:00
+          Link: https://lifehacker.com/all-the-single-use-household-items-you-should-be-re-u-1850883065
+          Title: All the ‘Single-Use’ Household Items You Should Be Re-Using
+            <Description<
+            [#[
+               <img class="type:primaryImage" src="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/1aea81cb0a4c2bf83388500c0b5b88ce.jpg"/><p>Part of being an adult is feeling the  constant need to replenish basic household supplies. One way to combat this loop is to be more mindful about <a class="sc-1out364-0 dPMosf sc-145m8ut-0 lcFFec js_link" href="https://lifehacker.com/the-smartest-ways-to-repurpose-household-items-in-your-1850473194" target="_blank" rel="noopener noreferrer">recycling and re-purposing your stuff</a>. But you can go one step further—there are many things we tend to treat as “single-use” that can, in fact, be used more than once.…</p><p><a href="https://lifehacker.com/all-the-single-use-household-items-you-should-be-re-u-1850883065">Read more...</a></p>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-28 17:00:00
+          Link: https://lifehacker.com/this-ring-doorbell-and-floodlight-camera-bundle-is-40-1850882729
+          Title: This Ring Doorbell and Floodlight Camera Bundle Is 40% Off Right Now
+            <Description<
+            [#[
+               <img class="type:primaryImage" src="https://i.kinja-img.com/image/upload/c_fit,fl_progressive,q_80,w_636/633157bfb34851c585bb17437c8baceb.jpg"/><p>Amazon announced <a class="sc-1out364-0 dPMosf sc-145m8ut-0 lcFFec js_link" href="https://lifehacker.com/amazon-officially-announces-prime-big-deal-days-for-202-1850848692" target="_blank" rel="noopener noreferrer">Prime Big Deal Days</a> on October 10 and 11, during which Prime members can save on many products. But if you don’t feel like waiting, then you’ll appreciate Amazon’s deal on the <a class="sc-1out364-0 dPMosf sc-145m8ut-0 lcFFec js_link" href="https://zdcs.link/BJVK1" target="_blank" rel="noopener noreferrer">Ring Video Doorbell Pro 2 and Ring Floodlight Camera</a> bundle, currently going for 40% 0ff. The wired security camera bundle…</p><p><a href="https://lifehacker.com/this-ring-doorbell-and-floodlight-camera-bundle-is-40-1850882729">Read more...</a></p>
+            ]#]
+            >Description>
+         >Item>
+      >Brew>
+>>
diff --git a/htdocs/cgi-bin/rss_output/tree_feed_Perl_Weekly.cnf b/htdocs/cgi-bin/rss_output/tree_feed_Perl_Weekly.cnf
new file mode 100644 (file)
index 0000000..48935a0
--- /dev/null
@@ -0,0 +1,363 @@
+<<CNF_FEED<TREE>
+    Release: 1
+    Version: 1.0
+      <Feed<
+       Expires: 2023-10-12 08:00:00
+       File: ./rss_output/tree_feed_Perl_Weekly.cnf
+       Published: 2023-10-03 10:24:54.680 UTC
+       Title: Perl Weekly newsletter
+       URL: https://perlweekly.com/perlweekly.rss
+      [#[
+         A free, once a week e-mail round-up of hand-picked news and articles about Perl.
+         The Perl Weekly ( http://perlweekly.com/ ) is a newsletter including links to blog posts and other news items
+          related to the Perl programming language.
+      ]#]
+      >Feed>
+      <Brew<
+         <Item<
+          Date: 2023-10-02 10:00:33
+          Link: https://job.perl.careers/huo
+          Title: Adventure! Senior Perl roles in Malaysia, Dubai and Malta
+            <Description<
+            [#[
+               Clever folks know that if you’re lucky, you can earn a living and have an adventure at the same time. Enter our international client: online trading is their game and they’re looking for Perl people with passion, drive, and an appreciation for new experiences.
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-10-02 10:00:32
+          Link: https://job.perl.careers/2t3
+          Title: Perl Programmer Opportunity - Join a Prominent Tech Publishing Powerhouse in the Philippines
+            <Description<
+            [#[
+               Our UK-based client is a global leader in the enterprise technology publishing industry, providing audiences worldwide with stimulating perspectives and unique news on enterprise tech that matters today and tomorrow. They are currently seeking a passionate and exceptional Perl programmer based in the Philippines to join their team.
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-10-02 10:00:31
+          Link: https://job.perl.careers/gxp
+          Title: UK Remote Perl Programmer for Leading Enterprise Tech Publication
+            <Description<
+            [#[
+               Our client is a global leader in the enterprise technology publishing industry, providing audiences worldwide with stimulating perspectives and unique news on enterprise tech that matters today and tomorrow. They are seeking a talented Perl programmer to manage the full life-cycle of software projects on a remote basis.
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-10-02 10:00:30
+          Link: https://job.perl.careers/wp0
+          Title: Modern Perl and positive team vibes. UK Remote Perl role
+            <Description<
+            [#[
+               If you’re a Modern Perl developer in the UK with TypeScript or Node and you’re searching for a team of dynamos, we’ve found the perfect place for you. This award-winning company may be newer, but the combined experience of their people is impressive. No doubt this is one of the many reasons their AI recruitment marketing business has taken off!
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-10-02 10:00:29
+          Link: http://niceperl.blogspot.com/
+          Title: NICEPERL's lists
+            <Description<
+            [#[
+               <a href="https://niceperl.blogspot.com/2023/09/cdlxiii-8-great-cpan-modules-released.html">Great CPAN modules released last week</a>.
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-10-02 10:00:28
+          Link: https://rakudoweekly.blog/2023/09/25/2023-39-releaseses/
+          Title: 2023.39 Releaseses
+         >Item>
+         <Item<
+          Date: 2023-10-02 10:00:27
+          Link: https://deoac.github.io/challenges/236/raku/task-2/index.html
+          Title: Challenge 236 Task 2: Array Loops
+            <Description<
+            [#[
+               Bonus post and here we have one more explaining the algorithm. Good job.
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-10-02 10:00:26
+          Link: https://deoac.github.io/challenges/236/raku/task-1/index.html
+          Title: Challenge 236 Task 1: Exact Change
+            <Description<
+            [#[
+               Well structured blog post sharing every little details, enough to keep you busy. Keep it up great work.
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-10-02 10:00:25
+          Link: https://blog.firedrake.org/archive/2023/10/The_Weekly_Challenge_236__Change_for_the_Machines.html
+          Title: Change for the Machines
+            <Description<
+            [#[
+               Glad that Roger got excited and we get more than we expected. Highly recommended.
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-10-02 10:00:24
+          Link: http://ccgi.campbellsmiths.force9.co.uk/challenge/236
+          Title: Change and loops
+            <Description<
+            [#[
+               Code analysis is precise and to the point. You could just jump and try the solution straight away.
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-10-02 10:00:23
+          Link: https://packy.dardan.com/2023/09/25/perl-weekly-challenge-exact-change-and-array-loops/
+          Title: Perl Weekly Challenge: Exact Change and Array Loops
+            <Description<
+            [#[
+               Enjoy the bonus Python and java on top of Perl and Raku. Keep it up great work.
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-10-02 10:00:22
+          Link: https://github.com/MatthiasMuth/perlweeklychallenge-club/tree/muthm-236/challenge-236/matthias-muth#readme
+          Title: Bills in Loops, and Loops in Arrays
+            <Description<
+            [#[
+               Well documented solutions as always and plenty to learn too. Thanks for sharing.
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-10-02 10:00:21
+          Link: https://wlmb.github.io/2023/09/24/PWC236/
+          Title: Perl Weekly Challenge 236
+            <Description<
+            [#[
+               Breaking the tradition, we have 2-liners in Perl by the man himself. You don't want to skip it.
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-10-02 10:00:20
+          Link: https://fluca1978.github.io/2023/09/25/PerlWeeklyChallenge236.html
+          Title: Arrays and Loops
+            <Description<
+            [#[
+               Without any jargons, here we have simple yet elegant Raku solution. Thank you Luca.
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-10-02 10:00:19
+          Link: https://egroup.kolouch.org/nextcloud/sites/lubos/2023-09-25_Weekly_challenge_236
+          Title: THE WEEKLY CHALLENGE - 236
+            <Description<
+            [#[
+               Breakdown of process makes it so easy to follow the logic. Please keep sharing blog.
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-10-02 10:00:18
+          Link: https://blogs.perl.org/users/laurent_r/2023/09/perl-weekly-challenge-236-array-loops.html
+          Title: Perl Weekly Challenge 236: Array Loops
+            <Description<
+            [#[
+               Cool use of 'loop' of Raku. The language never stops surprising me.
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-10-02 10:00:17
+          Link: https://blogs.perl.org/users/laurent_r/2023/09/perl-weekly-challenge-236-exact-change.html
+          Title: Perl Weekly Challenge 236: Exact Change
+            <Description<
+            [#[
+               You have clean and verbose solutions in Perl and Raku, like always. Well done and thanks.
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-10-02 10:00:16
+          Link: https://www.braincells.com/perl/2023/09/perl_weekly_challenge_week_236.html
+          Title: Perl Weekly Challenge: Week 236
+            <Description<
+            [#[
+               I like the rarely used given/when in Perl solution. You also get bonus Raku version. Thanks for sharing.
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-10-02 10:00:15
+          Link: https://dev.to/boblied/pwc-236-task-2-the-circle-is-small-242g
+          Title: The Circle Is Small
+            <Description<
+            [#[
+               You are served with multiple approaches for this week solution. You must checkout.
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-10-02 10:00:14
+          Link: https://dev.to/boblied/pwc-236-task-1-a-change-would-do-you-good-3ia4
+          Title: A Change Would Do You Good
+            <Description<
+            [#[
+               Simple use of pop/push can be more than enough to get the job done. Please checkout to figure out.
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-10-02 10:00:13
+          Link: https://dev.to/oldtechaa/perl-weekly-challenge-236-lemonade-stand-50p5
+          Title: Lemonade Stand
+            <Description<
+            [#[
+               You can never the simplicity of the language to explain the logic. Great work, keep it up.
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-10-02 10:00:12
+          Link: https://raku-musings.com/changing-loops.html
+          Title: Changing Loops
+            <Description<
+            [#[
+               Good show of BagHash, new to me. Thank you for entertaining us with Raku magic every week.
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-10-02 10:00:11
+          Link: https://deadmarshal.blogspot.com/2023/09/twc236.html
+          Title: TWC236
+            <Description<
+            [#[
+               Lots of Perl magic used in this week solutions. Thank you Ali.
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-10-02 10:00:10
+          Link: http://rabbitfarm.com/cgi-bin/blosxom/perl/2023/10/01
+          Title: Exact Array Loops
+            <Description<
+            [#[
+               I noticed the use of 'redo' after a long time. Nice solutions without any complications. Thanks for sharing.
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-10-02 10:00:09
+          Link: https://theweeklychallenge.org/blog/meet-the-champion-2023-07/
+          Title: Meet The Champion - Mariano Spadaccini
+            <Description<
+            [#[
+               Please checkout the interview with the recent champion.
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-10-02 10:00:08
+          Link: https://theweeklychallenge.org/blog/recap-challenge-236
+          Title: RECAP - The Weekly Challenge - 236
+            <Description<
+            [#[
+               Enjoy a quick recap of last week's contributions by Team PWC dealing with the "Exact Change" and "Array Loops" tasks in Perl and Raku. You will find plenty of solutions to keep you busy.
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-10-02 10:00:07
+          Link: https://theweeklychallenge.org/blog/perl-weekly-challenge-237
+          Title: The Weekly Challenge - 237
+            <Description<
+            [#[
+               Welcome to a new week with a couple of fun tasks: "Seize The Day" and "Maximise Greatness". If you are new to the weekly challenge, why not join us and have fun every week? For more information, please read the <a href="https://theweeklychallenge.org/faq">FAQ</a>.
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-10-02 10:00:06
+          Link: https://blogs.perl.org/users/haj/2023/09/writing-perl-with-emacs-are-there-perl-mode-users-around.html
+          Title: Writing Perl with Emacs: Are there perl-mode users around?
+            <Description<
+            [#[
+               For all emacs users, please checkout the latest update to cperl-mode to edit Perl code.
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-10-02 10:00:05
+          Link: https://blogs.perl.org/users/chrisarg/2023/09/hash-of-arrays-deathmatch-native-perl-vs-dbmdeep-vs-redis.html
+          Title: Hash of Arrays Deathmatch : Native Perl vs. DBM::Deep vs. Redis
+            <Description<
+            [#[
+               A detailed comparison to help you understand the pros/cons. Please keep us busy with more such posts.
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-10-02 10:00:04
+          Link: https://blogs.perl.org/users/mikko_koivunalho/2023/09/plenv-libdirs.html
+          Title: plenv-libdirs
+            <Description<
+            [#[
+               If you are fan of plenv the this plugin would be very handy. How? You need to checkout the post for more details.
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-10-02 10:00:03
+          Link: https://hacktoberfest.com/
+          Title: Hacktoberfest 2023
+            <Description<
+            [#[
+               The annual festival is live and kicking. Please do join and contribute to open source projects on GitHub.
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-10-02 10:00:02
+          Link: https://opencollective.com/metacpan-core
+          Title: MetaCPAN Core Contributors
+            <Description<
+            [#[
+               Please do come forward and support MetaCPAN Core. As of now, we have 19 contributors. It would be nice to see this grow with your support.
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-10-02 10:00:01
+          Link: https://blogs.perl.org/users/psc/2023/09/this-week-in-psc-118.html
+          Title: This Week in PSC (118)
+            <Description<
+            [#[
+               Another update by PSC team.
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-10-02 10:00:00
+          Link: https://perlweekly.com/archive/636.html
+          Title: #636 - Happy Birthday Larry
+            <Description<
+            [#[
+               <p>Hi there,</p>
+               <p>A belated, <strong>Happy Birthday</strong> to the creator of <strong>Perl</strong>. May the joy that you have spread in the past come back to you on this day. Just for record, the birthday was on <strong>27th September</strong>.</p>
+               <p>Do you use <strong>homebrew</strong>?</p>
+               <p><strong>brian d foy</strong> did all the hard work to get <strong>homebrew</strong> up to the latest <strong>Perl v5.38</strong>. If you are keen to know the details then please do <a href="https://github.com/Homebrew/homebrew-core/pull/145939">checkout the pull request</a>.</p>
+               <p><strong>Olaf Alders</strong> recently shared his cool creation, <a href="https://github.com/oalders/is">is: an inspector for your environment</a>. I am sure for all <strong>System Administrators</strong> out there, it would be very handy.</p>
+               <p>I am not sure, if you noticed this but <a href="https://perlmonks.org/">Perl Mongers</a> certificate expired few days ago. I only noticed as one of the contributor to <a href="https://theweeklychallenge.org">The Weekly Challenge</a> shared link to the site. The very next day, I saw post by <strong>Olaf Alders</strong> on Twitter talking about it and sharing the <a href="https://www.prettygoodping.com">tool</a> that can help avoid such incident in future. The certificate has now been restored.</p>
+               <p>Do you know the current maintainer of <strong>CPAN Testers</strong> server?</p>
+               <p>I saw <a href="https://www.facebook.com/groups/perlcommunity/permalink/1538251906982430">Facebook post</a> by <strong>Mark Keating</strong> just few days ago. I remember, <strong>Doug Bell</strong> helped many years ago when I was playing daily <strong>CPAN</strong> upload games. He gave me access to deal with the issues I was facing at the time. I just hope, it stays live and kicking. It is the second best thing for us after <strong>MetaCPAN</strong>. If you are interested to sponsor the <strong>MetaCPAN</strong> then you now have plenty of different options. Please find out more about it in the <a href="https://opencollective.com/metacpan-core">official announcement</a> page.</p>
+               <p>For all newbies wanted to explore <strong>Perl</strong>, please checkout the <a href="https://www.i-programmer.info/news/222-perl/16624-learn-perl-with-freecodecamp.html">Perl Programming Course</a> by <strong>FreeCodeCamp</strong>. Thank you <strong>Nikos Vaggalis</strong> for sharing this with us.</p>
+               <p>The annual event, <strong>Hacktoberfest 2023</strong> is back. If you contribute to opensource projects on <strong>GitHub</strong> then I would highly recommend to take part in the event. For more details, please <a href="https://hacktoberfest.com">checkout the announcement</a>.</p>
+               <p>Enjoy rest of the newsletter.</p>
+            ]#]
+            >Description>
+         >Item>
+      >Brew>
+>>
diff --git a/htdocs/cgi-bin/rss_output/tree_feed_Politico.cnf b/htdocs/cgi-bin/rss_output/tree_feed_Politico.cnf
new file mode 100644 (file)
index 0000000..d64b475
--- /dev/null
@@ -0,0 +1,476 @@
+<<CNF_FEED<TREE>
+    Release: 1
+    Version: 1.0
+      <Feed<
+       Expires: 2023-10-11 08:00:00
+       File: ./rss_output/tree_feed_Politico.cnf
+       Published: 2023-10-02 06:35:06.321 UTC
+       Title: Politics, Policy, Political News Top Stories
+       URL: http://www.politico.com/rss/politicopicks.xml
+      [#[
+         POLITICO strives to be the dominant source for news on politics and policy in power centers across every continent where access to reliable information, nonpartisan journ.lism and real-time tools create, inform and engage a global citizenry.
+      ]#]
+      >Feed>
+      <Brew<
+         <Item<
+          Date: 2023-10-01 14:01:03
+          Link: https://www.politico.com/news/2023/10/01/mccarthy-gaetz-speakership-battle-00119355
+          Title: Gaming out Matt Gaetz’s bid to oust Kevin McCarthy
+            <Description<
+            [#[
+               Both Republicans likely need the support of Democrats to prevail in their battle over the speakership. Here’s how that could shake out.
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-10-01 13:59:43
+          Link: https://www.politico.com/news/2023/10/01/mccarthy-speakership-mercy-democrats-00119359
+          Title: ‘Adopt Kevin or ditch him’: McCarthy’s speakership now at the mercy of Dems
+            <Description<
+            [#[
+               Some progressives vowed not to bail him out, but Hakeem Jeffries hasn't shown his hand.
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-10-01 12:17:16
+          Link: https://www.politico.com/news/2023/10/01/biden-blasts-republicans-shutdown-00119356
+          Title: Biden blasts Republicans over shutdown showdown: ‘We shouldn't have gotten here in the first place’
+            <Description<
+            [#[
+               "It's time to end governing by crisis, and keep your word when you give it in the Congress," Biden said.
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-10-01 18:24:34
+          Link: https://www.politico.com/news/2023/10/01/california-republicans-kevin-mccarthy-00119391
+          Title: California Republicans have McCarthy's back. For now.
+            <Description<
+            [#[
+               Kevin McCarthy so far is avoiding backlash among California’s most fervent Republicans.
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-10-01 21:30:19
+          Link: https://www.politico.com/news/2023/10/01/newsom-senate-pick-butler-00119360
+          Title: Newsom picks Laphonza Butler as Feinstein replacement
+            <Description<
+            [#[
+               California’s governor chose a labor leader turned power player to serve in the Senate, and an adviser told POLITICO there were no preconditions about whether she could run in 2024.
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-10-01 11:38:17
+          Link: https://www.politico.com/news/2023/10/01/supreme-court-key-issues-00119351
+          Title: As new term begins, Supreme Court faces fallout from its rightward shift
+            <Description<
+            [#[
+               The justices return from their summer recess on Monday, and they're poised to wade back into divisive issues on guns and agency power.
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-10-01 06:00:00
+          Link: https://www.politico.com/news/2023/10/01/trump-civil-trial-new-york-00119297
+          Title: Trump goes to trial in New York before a judge who just ruled he’s a fraud
+            <Description<
+            [#[
+               The $250 million civil trial starts Monday — and Trump may be there in person.
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-10-01 06:00:00
+          Link: https://www.politico.com/news/magazine/2023/10/01/pronouns-schools-supreme-court-00118832
+          Title: He, She, They: The Pronoun Debate Will Likely Land at the Supreme Court
+            <Description<
+            [#[
+               And the trend doesn’t look good for transgender kids.
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-29 07:02:51
+          Link: https://www.politico.com/news/magazine/2023/09/29/antisemitism-lakota-land-00118919
+          Title: America Helped My Ancestors Flee Antisemitism. The Lakota Paid the Price.
+            <Description<
+            [#[
+               A new book explores the opportunity Jewish immigrants found on the South Dakota prairie — and what it cost Native Americans.
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-29 04:00:00
+          Link: https://www.politico.com/news/magazine/2023/09/29/mick-mulvaney-q-a-shutdown-00118934
+          Title: Mick Mulvaney Dreamed of Shutting Down the Government. Then He Got to Do It.
+            <Description<
+            [#[
+               Trump’s budget chief on what it’s like to be in charge of closing the government.
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-29 04:00:00
+          Link: https://www.politico.com/news/magazine/2023/09/29/nikki-haley-profile-trump-gop-00118794
+          Title: Nikki Haley Is Turning Her Biggest Criticism Into a Campaign Strategy
+            <Description<
+            [#[
+               The former South Carolina governor made a career of taking both sides. In an overly partisan world, she’s betting that’s exactly what voters want.
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-10-01 19:04:59
+          Link: https://www.politico.com/news/2023/10/01/ramaswamy-campaign-number-candidates-gop-debate-00119398
+          Title: Ramaswamy campaign seeks to cut number of candidates in next GOP debate
+            <Description<
+            [#[
+               The third Republican presidential debate will be held Nov. 8 in Miami.
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-10-01 15:37:57
+          Link: https://www.politico.com/news/2023/10/01/dean-phillips-step-down-leadership-00119369
+          Title: Rep. Dean Phillips to step down from leadership position after his calls for primary challenge to Biden
+            <Description<
+            [#[
+               “My convictions relative to the 2024 presidential race are incongruent with the majority of my caucus," Phillips said.
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-30 06:00:00
+          Link: https://www.politico.com/news/2023/09/30/supreme-court-ethics-poll-00119236
+          Title: Faith in the Supreme Court is down. Voters now say they want changes.
+            <Description<
+            [#[
+               A new survey shows three-in-four voters want the justices bound to an ethics code.
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-10-01 19:58:58
+          Link: https://www.politico.com/news/2023/10/01/attorney-general-garland-biden-trump-00119411
+          Title: Garland: I'd resign if Biden asked me to take action on Trump
+            <Description<
+            [#[
+               "But there is no sense that anything like that will happen," he says in an interview.
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-10-01 14:51:15
+          Link: https://www.politico.com/news/2023/10/01/jimmy-carter-turns-99-00119366
+          Title: Jimmy Carter turns 99 at home with Rosalynn and other family
+            <Description<
+            [#[
+               Tributes rolled in from everywhere.
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-10-01 10:57:41
+          Link: https://www.politico.com/news/2023/10/01/dianne-feinstein-lindsey-graham-00119342
+          Title: ‘America’s better for Dianne Feinstein having served her country’
+            <Description<
+            [#[
+               Sen. Lindsey Graham praised his former colleague.
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-10-01 09:51:52
+          Link: https://www.politico.com/news/2023/10/01/haley-digs-ramaswamy-tiktok-00119327
+          Title: Haley digs again at Ramaswamy over TikTok
+            <Description<
+            [#[
+               "Just because 150 million people are on it, doesn't mean you do it because it's politically popular," she said.
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-10-01 05:43:53
+          Link: https://www.politico.com/news/2023/10/01/police-chief-who-led-raid-of-small-kansas-newspaper-suspended-00119309
+          Title: Police chief who led raid of small Kansas newspaper has been suspended
+            <Description<
+            [#[
+               Marion Mayor Dave Mayfield said he suspended Chief Gideon Cody on Thursday.
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-29 04:00:00
+          Link: https://www.politico.com/news/magazine/2023/09/29/government-shutdown-work-from-home-00118940
+          Title: What Shutdown? Downtown D.C. Is Already a Ghost Town
+            <Description<
+            [#[
+               As far as D.C.'s economy is concerned, next week won't make much difference.
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-29 08:53:48
+          Link: https://www.politico.com/news/magazine/2023/09/29/dianne-feinstein-legacy-00116902
+          Title: No Matter How Straitlaced She Seemed, Dianne Feinstein "Didn't Care Who You Sleep With"
+            <Description<
+            [#[
+               Despite the late California senator’s 1950s wife image, she became a pioneering advocate for the gay community.
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-29 12:13:02
+          Link: https://www.politico.com/news/magazine/2023/09/29/dianne-feinstein-morality-politics-00119128
+          Title: Feinstein's Demise is a Warning for Biden and Trump
+            <Description<
+            [#[
+               Why are we so surprised when elderly politicians kick the bucket?
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-28 04:00:00
+          Link: https://www.politico.com/news/magazine/2023/09/28/new-jersey-political-corruption-00118484
+          Title: Why is New Jersey So Corrupt? A Corruption Researcher Offers Some Answers
+            <Description<
+            [#[
+               An expert explains how Sen. Bob Menendez fits into a long tradition for his state.
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-28 04:00:00
+          Link: https://www.politico.com/news/magazine/2023/09/28/gop-debate-opposition-research-00118680
+          Title: Why Nikki Haley’s Attacks Work Better Than Her Rivals’
+            <Description<
+            [#[
+               I was an opposition researcher. Here's what her rivals should do if they want to start winning.
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-28 11:00:00
+          Link: https://www.politico.com/news/magazine/2023/09/28/gop-populism-conservatism-lowry-00118568
+          Title: Opinion | Since When Is Populism the Enemy of Conservatism?
+            <Description<
+            [#[
+               On many specific issues, there’s overlap between the two supposedly irreconcilable sides of the Republican Party.
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-28 04:00:00
+          Link: https://www.politico.com/news/magazine/2023/09/28/supreme-court-social-security-medicare-00118470
+          Title: Opinion | The Supreme Court Case That Could Disrupt Everything From Medicare to Financial Regulators
+            <Description<
+            [#[
+               A lower court decision has called into question how government agencies are funded.
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-27 21:59:05
+          Link: https://www.politico.com/news/magazine/2023/09/27/gop-debate-style-fashion-menswear-00118645
+          Title: Opinion | Trump Wasn’t at the Debate — But His Outfit Was
+            <Description<
+            [#[
+               Menswear guy has some tips for the Republican presidential hopefuls.
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-27 04:00:00
+          Link: https://www.politico.com/news/magazine/2023/09/27/trump-presidential-election-2023-00118204
+          Title: Trump Wants to Freeze the Election at Halftime
+            <Description<
+            [#[
+               He thinks he’s won already because the polls have him ahead. Let’s go ahead and play the rest of the game.
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-27 04:00:00
+          Link: https://www.politico.com/news/magazine/2023/09/27/bob-menendez-new-jersey-pope-00118241
+          Title: The Swift and Stunning Downfall of New Jersey Teflon Don
+            <Description<
+            [#[
+               Menendez thought he was untouchable. Until he wasn’t.
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-25 14:00:00
+          Link: https://www.politico.com/news/magazine/2023/09/25/history-dept-bob-menendez-democrats-00117935
+          Title: History Offers Democrats a Way Out of the Menendez Problem
+            <Description<
+            [#[
+               Oddly enough, it involves the very same seat the New Jersey senator refuses to resign.
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-30 16:32:11
+          Link: https://www.politico.com/news/2023/09/30/kevin-mccarthy-government-shutdown-deal-00119290
+          Title: 'It is a surrender': Why McCarthy reversed with his survival uncertain
+            <Description<
+            [#[
+               After Saturday's shocking vote, the speaker all but taunted his critics to come after his gavel if they wanted to.
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-29 16:39:03
+          Link: https://www.politico.com/news/2023/09/29/dianne-feinstein-race-to-replace-00119220
+          Title: The race to replace Dianne Feinstein is about to get even more expensive
+            <Description<
+            [#[
+               A special election means even more money can pour into the Senate race.
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-30 14:35:41
+          Link: https://www.politico.com/news/2023/09/30/pelosi-to-accompany-feinsteins-body-home-to-california-00119287
+          Title: Pelosi to accompany Feinstein's body home to California
+            <Description<
+            [#[
+               A U.S. military plane will take Feinstein back to San Francisco Saturday.
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-29 07:57:14
+          Link: https://www.politico.com/news/2023/09/29/feinstein-dies-at-90-00119040
+          Title: Feinstein, trail-blazing California senator, dies at 90
+            <Description<
+            [#[
+               “Senator Feinstein was a force of nature who made an incredible impact on our country and her home state,” her chief of staff said in a statement.
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-29 14:59:09
+          Link: https://www.politico.com/news/2023/09/29/feinstein-california-friends-mourn-death-00119173
+          Title: Feinstein’s friends and colleagues in California remember ‘true giant’
+            <Description<
+            [#[
+               One mourner left a bouquet of red azaleas at the late senator’s home in San Francisco.
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-28 20:47:06
+          Link: https://www.politico.com/news/2023/09/28/desantis-florida-2024-rivals-00118998
+          Title: ‘It’s the only thing he’s got left’: DeSantis' rivals try to turn his Florida record against him
+            <Description<
+            [#[
+               He used to get accolades for his leadership of the Sunshine state.
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-29 13:05:19
+          Link: https://www.politico.com/news/2023/09/29/nikki-haley-slow-burn-candidate-of-2024-00119119
+          Title: ‘There isn't a mainstream mega-donor now not looking at Nikki’: Haley catches post-debate spark
+            <Description<
+            [#[
+               Donors are calling. And following this week’s debate, Haley held a sold-out fundraiser in Los Angeles.
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-27 23:46:15
+          Link: https://www.politico.com/news/2023/09/28/second-republican-debate-who-won-takeaways-00118687
+          Title: Scott finally showed a pulse. Ramaswamy did a 180. Here's who won and lost the second GOP debate.
+            <Description<
+            [#[
+               Want to know the real story of the 2nd GOP debate? We've got you covered.
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-28 15:42:55
+          Link: https://www.politico.com/news/2023/09/28/gop-candidates-bash-trump-milley-comment-00118900
+          Title: GOP candidates bash Trump over Milley 'death' comment
+            <Description<
+            [#[
+               Trump was referring to a phone call Milley took after the Jan. 6 riots to reassure Chinese officials that the United States wasn’t under threat of an attack.
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-29 19:52:20
+          Link: https://www.politico.com/news/2023/09/29/trumps-attack-on-milley-fuels-special-counsels-push-for-a-gag-order-00119253
+          Title: Trump’s attack on Milley fuels special counsel’s push for a gag order
+            <Description<
+            [#[
+               Donald Trump has unleashed a social media attack on Mark Milley, suggesting he should have been put to death for treason.
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-29 16:48:47
+          Link: https://www.politico.com/news/2023/09/29/trump-georgia-plea-deal-bail-bondsman-00119232
+          Title: Trump co-defendant pleads guilty in Georgia, becoming first to reach plea deal in election-subversion case
+            <Description<
+            [#[
+               Part of the plea deal for Scott Hall, a bail bondsman who breached election equipment, requires him to testify against other co-defendants.
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-30 07:00:00
+          Link: https://www.politico.com/news/2023/09/30/menendez-indictment-supreme-court-00119244
+          Title: Bob Menendez’s prosecutors are already grappling with some tough Supreme Court precedents
+            <Description<
+            [#[
+               In a string of recent decisions, the justices have made it more difficult to prosecute public officials for corruption.
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-29 14:12:53
+          Link: https://www.politico.com/news/2023/09/29/jeff-clark-georgia-election-case-00119172
+          Title: Judge shoots down bid by four Trump co-defendants to move Georgia criminal charges to federal court
+            <Description<
+            [#[
+               Former Justice Department official Jeffrey Clark and three GOP activists who falsely posed as presidential electors all lost their bids to transfer the case.
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-30 18:05:34
+          Link: https://www.politico.com/news/2023/09/30/biden-administration-congress-government-shutdown-deal-ukraine-aid-00119296
+          Title: White House prepares to fight for Ukraine aid after shutdown averted
+            <Description<
+            [#[
+               The president signed the bill after he and his team kept tabs, but did not overly influence, House Democratic votes for the measure.
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-29 04:00:00
+          Link: https://www.politico.com/news/2023/09/29/white-house-bidenomics-failure-00118949
+          Title: Dems pressure White House to change economic message
+            <Description<
+            [#[
+               Democrats are loving the Biden economy. They're less certain about his economic message.
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-28 09:38:16
+          Link: https://www.politico.com/news/2023/09/28/joe-biden-democracy-arizona-mccain-speech-00118722
+          Title: Biden evokes McCain’s memory as he warns of Trump’s threat to democracy
+            <Description<
+            [#[
+               The president spent the bulk of his speech in Arizona warning of his predecessor’s threat to democracy.
+            ]#]
+            >Description>
+         >Item>
+      >Brew>
+>>
diff --git a/htdocs/cgi-bin/rss_output/tree_feed_The_Perl_Foundation_RSS_Feed.cnf b/htdocs/cgi-bin/rss_output/tree_feed_The_Perl_Foundation_RSS_Feed.cnf
new file mode 100644 (file)
index 0000000..3a792ac
--- /dev/null
@@ -0,0 +1,218 @@
+<<CNF_FEED<TREE>
+    Release: 1
+    Version: 1.0
+      <Feed<
+       Expires: 2023-10-11 08:00:00
+       File: ./rss_output/tree_feed_The_Perl_Foundation_RSS_Feed.cnf
+       Published: 2023-10-02 09:57:20.191 UTC
+       Title: The Perl Foundation News
+       URL: https://news.perlfoundation.org/rss.xml
+      [#[
+         The Perl Foundation is dedicated to the advancement
+         of the Perl programming language through open discussion, collaboration, design, and code.
+          The Perl Foundation is a non-profit organization* based in Holland, Michigan
+      ]#]
+      >Feed>
+      <Brew<
+         <Item<
+          Date: 2023-09-28 16:06:02
+          Link: https://news.perlfoundation.org/post/pevans-perl-core
+          Title: Grant Application (P Evans) Perl Core Development
+            <Description<
+            [#[
+               A grant application from Paul Evans has just managed to be squeezed in into this round. Paul needs no introduction; he is one of the few people who speaks XS like a native, and has long been a valuable contributor to the Perl Core, as well as a lot of other interesting ancilliary projects. Also into animatronics, he has many modules dedicated to interacting with electronic interfaces. This application targets
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-22 12:13:50
+          Link: https://news.perlfoundation.org/post/maintaining_perl_tonyc_august_2023
+          Title: Maintaining Perl (Tony Cook) August 2023
+            <Description<
+            [#[
+               Tony writes: 2023/08/01 Tuesday  0.20 look at new coverity hits, briefly discuss with khw  0.27 github notifications  0.87 #21306 review and briefly comment  0.05 #21084 check latest CI results, apply to blead  0.13 #21296 test blead with the fix, close this PR  0.28 coverity look at older hits, one harmless, another false  positive  0.18 #21181 apply to blead, perldelta  0.42 #21212
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-20 09:53:18
+          Link: https://news.perlfoundation.org/post/perlgptphase1
+          Title: PerlGPT Large Language Model, Phase 1
+            <Description<
+            [#[
+               A new grant application from John Napiorkowski and Robert Grimes, this time targeting the development of a large language model trained specifically to develop Perl Code. These veteran coders suggest that using natural language to generate Perl code may potentially allow one to rapidly generate new APIs and applications, or at least give a skeleton to flesh out into a more elaborate tool.
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-14 18:16:06
+          Link: https://news.perlfoundation.org/post/perlandkohaconference
+          Title: The Perl and Koha Conference
+            <Description<
+            [#[
+               The first ever Perl and Koha conference was held in Helsinki, Finland this year. It featured three main days of Perl and Koha presentations and two days of workshops. Workshops included a Perl training session, a masterclass for new Koha developers, Koha improvement initiatives, discussions on the future of Perl as a language, and more. Koha is the first free open source software library automation package. In use worldwide its
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-14 08:37:16
+          Link: https://news.perlfoundation.org/post/maintaining_perl_dave_mitchell_june_august_2023
+          Title: Maintaining Perl 5 Core (Dave Mitchell): June - August 2023 
+            <Description<
+            [#[
+               Dave writes: This is my monthly report on work done during June-August 2023 covered by my TPF perl core maintenance grant. I fixed a performance regression bug related to my 'multiconcat' optimisation work from about 5 years ago. Other than that, I restarted my work on my "make stack reference counted" branch, got it into a working state, and merged it into blead. See below for a detailed explanation. SUMMARY:
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-08-28 08:15:23
+          Link: https://news.perlfoundation.org/post/maintaining_perl_tonyc_july_2023
+          Title: Maintaining Perl (Tony Cook) July 2023 
+            <Description<
+            [#[
+               Tony writes: 2023/07/03 Monday  0.92 #21181 fixes, testing, re-push and push to smoke-me  0.50 #21180 fixes, testing, push for re-CI  1.52 apply one of my PRs, look into unexpected mingw64 failure  on another PR  2.94 2023/07/04 Tuesday  0.42 #21120 apply to blead, perldelta update, add to maint  votes  0.65 #21132, #21095 apply to blead, perldelta #21202 comment  0.08 #21118, #21060 apply
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-08-28 08:14:18
+          Link: https://news.perlfoundation.org/post/maintaining_perl_tonyc_june_2023
+          Title: Maintaining Perl (Tony Cook) June 2023 
+            <Description<
+            [#[
+               Tony writes: 2023/06/01 Thursday  1.52 #21129 research, testing, comment  1.52 2023/06/05 Monday  2.65 #21073 look at porting C++ test, EU:CB issue  1.02 #21135 research and comment  0.17 #21139 review and comment briefly  0.18 #21095 consider other C++ non-features to add  1.37 #21129 research and long comment  5.39 2023/06/06 Tuesday  0.20 #21135 more research  1.40 #21131 look at making PerlIOStdio not
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-08-28 08:13:02
+          Link: https://news.perlfoundation.org/post/maintaining_perl_tonyc_may_2023
+          Title: Maintaining Perl (Tony Cook) May 2023 
+            <Description<
+            [#[
+               Tony writes: 2023/05/01 Monday  0.40 github notifications  0.27 #21051 check it matches the commits in blead and close  0.45 #21061 review and approve  0.22 #21053 review, comment and approve  0.07 #21042 comment  0.12 #21063 review and approve, comment  0.52 #21044 write test and create reversion branch, push for CI  0.82 #17398 resolve inf/nan, work on XS  0.07 #21044 review CI results
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-08-28 08:11:32
+          Link: https://news.perlfoundation.org/post/maintaining_perl_tonyc_april_2023
+          Title: Maintaining Perl (Tony Cook) April 2023 
+            <Description<
+            [#[
+               Tony writes: 2023/04/03 Monday  0.70 github notifications  0.17 #20811 review CI results, undraft, ask khw to try it out  1.08 work on in name revert  1.95 2023/04/04 Tuesday  1.70 review coverity scan reported issues, open #21005  0.93 #20999 try to reproduce, comment  0.15 #20982 review and approve  0.92 work on in name feature  3.70 2023/04/05 Wednesday  1.07 #20999 reproduce, fixes
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-08-28 08:09:34
+          Link: https://news.perlfoundation.org/post/maintaining_perl_tonyc_march_2023
+          Title: Maintaining Perl (Tony Cook) March 2023 
+            <Description<
+            [#[
+               Tony writes: 2023/03/01 Wednesday  0.63 #20849 better commit subject, bump versions, testing,  apply to blead  1.75 #20811 debugging config.sh generation  1.60 #20811 more debug nmake config.sh generation  work on it for GNUmakefile, update output timestamp to  match sources  3.98 2023/03/02 Thursday  1.00 #20874 review discussion, review some of the related PRs  with some comments  0.12 #20873 review and approve
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-08-28 08:07:56
+          Link: https://news.perlfoundation.org/post/maintaining_perl_tonyc_february_2023
+          Title: Maintaining Perl (Tony Cook) February 2023
+            <Description<
+            [#[
+               Tony writes: 2023/02/01 Wednesday  0.13 github notifications  2.25 #20742 work on tests, find a related issue, work on fix,  testing  0.28 #20742 review test results, commits, push for CI  0.35 #20756 review and approve  0.68 feature bundle re-work: debugging mismatch of feature bits  to hash  3.69 2023/02/02 Thursday  0.08 github notifications  0.13 #20759 comment  0.07 #20742 review CI results,
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-08-28 08:04:33
+          Link: https://news.perlfoundation.org/post/maintaining_perl_tonyc_january_2023
+          Title: Maintaining Perl (Tony Cook) January 2023
+            <Description<
+            [#[
+               Tony writes: 2023/01/03 Tuesday  0.08 github notifications  1.40 #20599 review, comments  1.02 #20637 review and comments  0.07 #20621 review and approve  0.40 #20647 review discussion, start to look over code  2.97 2023/01/04 Wednesday  0.30 #20599 follow-up  0.07 #20637 look over discussion  0.47 rfc #32 review and review discussion  0.15 #20667 review and approve  1.35 #20647 more look over code,
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-08-28 08:02:24
+          Link: https://news.perlfoundation.org/post/maintaining_perl_dave_mitchell_april_may_2023
+          Title: Maintaining Perl 5 Core (Dave Mitchell): April - May 2023 
+            <Description<
+            [#[
+               Dave writes: This is my monthly report on work done during April and May 2023 covered by my TPF perl core maintenance grant. The last two months have been a bit light on the perl maintenance front. I did a couple of fixups to Deparse.pm and updated Porting/deparse-skips.txt so that  cd t; ./TEST -deparse passes again. SUMMARY: 0:35 disable leaking class test 5:02 fixup deparsing tests 8:26 process p5p
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-08-28 07:59:16
+          Link: https://news.perlfoundation.org/post/maintaining_perl_dave_mitchell_march_2023
+          Title: Maintaining Perl 5 Core (Dave Mitchell): March 2023
+            <Description<
+            [#[
+               Dave writes: This is my monthly report on work done during March 2023 covered by my TPF perl core maintenance grant. I mainly continued work on making the stack reference counted. Since the basic code is working I concentrated more at looking at distributions which were reported to fail on a perl built with PERL_RC_STACK. SUMMARY:  4:49 BBC: Blead breaks RCLAMP/Devel-LeakTrace-0.06.tar.gz and code TOTAL:  42:27
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-08-28 07:54:04
+          Link: https://news.perlfoundation.org/post/maintaining_perl_dave_mitchell_jan_feb_2023
+          Title: Maintaining Perl 5 Core (Dave Mitchell): January - February 2023
+            <Description<
+            [#[
+               Dave writes: This is my monthly report on work done during Jan and Feb 2023 covered by my TPF perl core maintenance grant. I mainly continued work on making the stack reference counted. I have now reached a point where, on a perl built with the non-default PERL_RC_STACK define, perl uses a reference-counted stack, and all tests pass distributions>. None of those distributions required any changes to work in the
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-07-25 11:25:39
+          Link: https://news.perlfoundation.org/post/grant-extension-tony-cook-2023
+          Title: Perl Core Maintenance Grant Extension request
+            <Description<
+            [#[
+               Tony Cooks work in maintaining Perl core continues, including reviewing issues, reproducing faults and applying patches to fix the core continue
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-07-23 12:31:31
+          Link: https://news.perlfoundation.org/post/tensor-flow-api-2
+          Title: Grant Application: Google TensorFlow API Bindings for Perl, Phase 2
+            <Description<
+            [#[
+               A new Grant Proposal to make Tensor flow accessible to Perl Developers, and bring feature parity with AL in other languages such as Java and Python,
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-07-11 11:39:04
+          Link: https://news.perlfoundation.org/post/white-camel-2022-manwar
+          Title: Announcing the 2022 White Camel Award recipient
+            <Description<
+            [#[
+               We are pleased to announce Mohammad Sajid Anwar as the White Camel Award 2022 recipient. Mohammad runs the Perl weekly challenge, a coding competition where a group of Perl enthusiasts, from beginners to experts, come together and solve 2 tasks every week. So far the challenge has attracted more than 300 unique participants. Furthermore, Mohammad is one of two active editors of the Perl Weekly Newsletter where he discusses topics
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-07-11 08:35:11
+          Link: https://news.perlfoundation.org/post/outreachy-2023-open-food-facts
+          Title: Outreachy 2023 - Monalika working on the Open Food Facts project
+            <Description<
+            [#[
+               The Perl Foundation is taking part again this year in the Outreachy program which encourages the participation of underrepresented groups in open source. The foundation is funding one intern, Monalika Patnaik, who will be working on the Open Food Facts project. Monalika’s introduction in her own words: Hi, I'm Monalika Patnaik, a sophomore pursuing Computer Science Engineering from India. Open-Source is my first love and my passion lies mostly in
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-06-01 20:23:24
+          Link: https://news.perlfoundation.org/post/hellotprfworldjune1
+          Title: Hello (TPRF) World! 
+            <Description<
+            [#[
+               Check out our new newsletter! It's packed full of updates and conference information! Hello World 1.pdf Don't want to click that? Here's the text version of the info: **Hello World! Welcome to the first installment of the TPRF Newsletter. Time for another TPRC 2023 update! A reminder to all folks traveling from outside Canada to attend TPRC 2023, go ahead and check that you have your passport! You're going to
+            ]#]
+            >Description>
+         >Item>
+      >Brew>
+>>
diff --git a/htdocs/cgi-bin/rss_output/tree_feed_The_Sydney_Morning_Herald___World_RSS_Feed.cnf b/htdocs/cgi-bin/rss_output/tree_feed_The_Sydney_Morning_Herald___World_RSS_Feed.cnf
new file mode 100644 (file)
index 0000000..33dd585
--- /dev/null
@@ -0,0 +1,216 @@
+<<CNF_FEED<TREE>
+    Release: 1
+    Version: 1.0
+      <Feed<
+       Expires: 2023-10-11 08:00:00
+       File: ./rss_output/tree_feed_The_Sydney_Morning_Herald___World_RSS_Feed.cnf
+       Published: 2023-10-02 09:57:59.429 UTC
+       Title: Sydney Morning Herald - World
+       URL: http://www.smh.com.au/rssheadlines/world/article/rss.xml
+      [#[
+         The Sydney Morning Herald is Australia's leading news source. The Sydney Morning Herald sets the standard for journalistic excellence for Sydney, Australia, and the rest of the world. From breaking news, to travel and fashion, The Sydney Morning Herald continues to transform the way Australians get their news.
+      ]#]
+      >Feed>
+      <Brew<
+         <Item<
+          Date: 2023-10-02 17:01:38
+          Link: https://www.smh.com.au/world/north-america/world-of-photos-october-3-2023-20231002-p5e96q.html?ref=rss&utm_medium=rss&utm_source=rss_world
+          Title: World of Photos - October 3, 2023
+            <Description<
+            [#[
+               The best photos from the international wire agencies as chosen by our picture editors.
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-10-02 16:56:25
+          Link: https://www.smh.com.au/world/at-least-nine-dead-after-church-roof-collapses-in-mexico-20231002-p5e96r.html?ref=rss&utm_medium=rss&utm_source=rss_world
+          Title: At least nine dead after church roof collapses in Mexico
+            <Description<
+            [#[
+               At least nine people have been killed and a further 50 injured after a church roof collapsed during a Sunday mass in Mexico.
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-10-02 15:08:52
+          Link: https://www.smh.com.au/world/europe/nato-confirms-600-british-soldiers-will-be-deployed-in-kosovo-20231002-p5e94s.html?ref=rss&utm_medium=rss&utm_source=rss_world
+          Title: Nato confirms 600 British soldiers will be deployed in Kosovo
+            <Description<
+            [#[
+               Serbia refuses to recognise the independence of its former southern province, and denied it trained the group of 30 men who shot at police and killed an officer.
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-10-02 13:26:15
+          Link: https://www.smh.com.au/world/north-america/social-media-paedophile-catcher-shot-dead-after-confronting-man-20231002-p5e93x.html?ref=rss&utm_medium=rss&utm_source=rss_world
+          Title: Social media ‘paedophile catcher’ shot dead after confronting man
+            <Description<
+            [#[
+               “Boopac Shakur” posed online as a 15-year-old girl to lure alleged predators into meetings and published content to his nearly 50,000 social media followers.
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-10-02 12:21:10
+          Link: https://www.smh.com.au/world/at-least-one-person-dead-after-bomb-blast-in-turkey-20231002-p5e93l.html?ref=rss&utm_medium=rss&utm_source=rss_world
+          Title: At least one person dead after bomb blast in Turkey
+            <Description<
+            [#[
+               Terrorists carry out bomb attack near government building in Ankara, Turkey says.
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-10-02 12:05:10
+          Link: https://www.smh.com.au/world/at-least-13-people-killed-during-spanish-nightclub-fire-20231002-p5e8zw.html?ref=rss&utm_medium=rss&utm_source=rss_world
+          Title: At least 13 people killed during Spanish nightclub fire
+            <Description<
+            [#[
+               Spanish nightclub fire kills at least 13 people as rescuers search for victims.
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-10-02 11:52:51
+          Link: https://www.smh.com.au/world/europe/rebooted-sunak-fires-starting-gun-on-de-facto-election-campaign-20231002-p5e8z6.html?ref=rss&utm_medium=rss&utm_source=rss_world
+          Title: Rebooted Sunak fires starting gun on de facto election campaign
+            <Description<
+            [#[
+               There is speculation the British prime minister could go to the polls within the next 12 months, particularly if the country’s economy improves.
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-10-02 11:49:56
+          Link: https://www.smh.com.au/world/grizzly-bear-kills-two-backpackers-in-banff-20231002-p5e934.html?ref=rss&utm_medium=rss&utm_source=rss_world
+          Title: Grizzly bear kills two backpackers in Banff
+            <Description<
+            [#[
+               Bear kills two people in remote corner of Canada’s Banff National Park.
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-10-02 11:26:01
+          Link: https://www.smh.com.au/world/north-america/the-trump-voters-favourite-kennedy-could-now-be-a-threat-to-trump-20231002-p5e90j.html?ref=rss&utm_medium=rss&utm_source=rss_world
+          Title: The Trump voters’ favourite Kennedy could now be a threat to Trump
+            <Description<
+            [#[
+               Indications seem to be that Kennedy’s potential base (conspiratorial, anti-establishment, anti-vaccine people) overlaps significantly with Trump-oriented voters.
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-10-02 10:25:38
+          Link: https://www.smh.com.au/world/europe/pro-russia-trumpist-ex-pm-wins-slovakia-poll-in-fresh-worry-for-ukraine-alliance-20231002-p5e90n.html?ref=rss&utm_medium=rss&utm_source=rss_world
+          Title: Pro-Russia, Trumpist ex-PM wins Slovakia poll in fresh worry for Ukraine alliance
+            <Description<
+            [#[
+               Robert Fico’s victory could bring another anti-Ukraine voice into the EU alongside Hungary’s prime minister Viktor Orban.
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-10-02 08:00:00
+          Link: https://www.smh.com.au/world/europe/royal-family-website-targeted-in-russian-cyberattack-20231002-p5e8zo.html?ref=rss&utm_medium=rss&utm_source=rss_world
+          Title: Royal family website ‘targeted in Russian cyberattack’
+            <Description<
+            [#[
+               The pro-Kremlin group has become known for denial of service cyber campaigns against countries supporting Ukraine, particularly NATO nations.
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-10-02 05:55:10
+          Link: https://www.smh.com.au/world/north-america/bring-it-on-republican-house-speaker-to-face-a-far-right-mutiny-amid-funding-battle-20231002-p5e8zp.html?ref=rss&utm_medium=rss&utm_source=rss_world
+          Title: Republican chaos, division grips Congress
+            <Description<
+            [#[
+               The stopgap funding bill House Speaker Kevin McCarthy succeeded in passing did not include additional money for Ukraine’s war effort, an issue that has divided Republicans.
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-10-02 05:30:00
+          Link: https://www.smh.com.au/world/oceania/daily-ram-raids-and-a-shooting-nz-s-crime-wave-is-serious-or-so-you-would-think-20230928-p5e8ee.html?ref=rss&utm_medium=rss&utm_source=rss_world
+          Title: Daily ram raids and a shooting: NZ’s crime wave is serious, or so you would think
+            <Description<
+            [#[
+               Crime has taken centre stage ahead of this month’s general election, but some voices say the narrative is simply part of the “conservative playbook” to win power.
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-10-02 05:00:00
+          Link: https://www.smh.com.au/world/north-america/the-us-needs-a-good-president-and-biden-s-been-good-for-us-20230928-p5e8bq.html?ref=rss&utm_medium=rss&utm_source=rss_world
+          Title: The US needs a good president, and Biden’s been good for us
+            <Description<
+            [#[
+               Joe Biden is a fine leader whose policies have favoured Australia’s interests. Another Trump White House would be a disaster for us.
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-10-02 01:00:00
+          Link: https://www.smh.com.au/world/asia/how-do-you-deliver-mail-to-someone-with-no-fixed-address-20230918-p5e5m1.html?ref=rss&utm_medium=rss&utm_source=rss_world
+          Title: How do you deliver mail to someone with no fixed address?
+            <Description<
+            [#[
+               Three words are being used to deliver mail to nomadic herders in Mongolia, direct taxis in Tokyo and mark the locations of walkers around Sydney harbour.
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-10-01 17:33:59
+          Link: https://www.smh.com.au/world/europe/world-of-photos-october-2-2023-20231001-p5e8xe.html?ref=rss&utm_medium=rss&utm_source=rss_world
+          Title: World of Photos, October 2, 2023
+            <Description<
+            [#[
+               The best photos from the international wire agencies as chosen by our picture editors.
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-10-01 15:41:16
+          Link: https://www.smh.com.au/world/europe/service-stations-hire-staff-to-stop-drivers-fighting-over-car-chargers-20231001-p5e8wt.html?ref=rss&utm_medium=rss&utm_source=rss_world
+          Title: Service stations hire staff to stop drivers fighting over car chargers
+            <Description<
+            [#[
+               Britain’s biggest motorway service station provider has brought in marshals to police “charge rage” among electric vehicle drivers fighting to use plug-in points.
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-10-01 14:53:55
+          Link: https://www.smh.com.au/world/asia/chinese-lottery-ticket-sales-soar-amid-weak-economy-job-prospects-20231001-p5e8wj.html?ref=rss&utm_medium=rss&utm_source=rss_world
+          Title: Chinese lottery ticket sales soar amid weak economy, job prospects
+            <Description<
+            [#[
+               Some social media commentators linked the sharp rise in lottery sales to young people’s deepening economic worries as youth unemployment rate hits record highs.
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-10-01 13:40:46
+          Link: https://www.smh.com.au/world/north-america/republicans-force-us-to-drop-ukraine-aid-at-threat-of-government-shutdown-20231001-p5e8w4.html?ref=rss&utm_medium=rss&utm_source=rss_world
+          Title: Republicans force US to drop Ukraine aid at threat of government shutdown
+            <Description<
+            [#[
+               Republican House Speaker Kevin McCarthy backed down from hardliners’ demands to keep the country running, but the deal includes no money for Ukraine.
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-10-01 13:30:00
+          Link: https://www.smh.com.au/world/asia/to-protect-nation-s-feelings-beijing-poised-to-regulate-what-people-can-wear-20230928-p5e89d.html?ref=rss&utm_medium=rss&utm_source=rss_world
+          Title: To protect nation’s ‘feelings’, Beijing poised to regulate what people can wear
+            <Description<
+            [#[
+               In China, where fashion has been used as a weapon, a new law threatens fines of up to $1000 for clothes that “undermine the spirit” of the nation.
+            ]#]
+            >Description>
+         >Item>
+      >Brew>
+>>
diff --git a/htdocs/cgi-bin/rss_output/tree_feed_Viral_Now.cnf b/htdocs/cgi-bin/rss_output/tree_feed_Viral_Now.cnf
new file mode 100644 (file)
index 0000000..2d055a7
--- /dev/null
@@ -0,0 +1,116 @@
+<<CNF_FEED<TREE>
+    Release: 1
+    Version: 1.0
+      <Feed<
+       Expires: 2023-11-03 08:00:00
+       File: ./rss_output/tree_feed_Viral_Now.cnf
+       Published: 2023-10-25 10:03:47.508 UTC
+       Title: Viral Now
+       URL: https://viralnow.uk/feed/
+      [#[
+         ViralNow is a dynamic online platform at the forefront of curating and delivering trending and viral content. ViralNow brings you the latest and most engaging stories, videos, and articles from around the world.
+      ]#]
+      >Feed>
+      <Brew<
+         <Item<
+          Date: 2023-10-25 09:50:58
+          Link: https://viralnow.uk/one-killed-two-others-hurt-in-north-charlotte-shooting-cmpd-says/
+          Title: One killed, two others hurt in north Charlotte shooting, CMPD says
+            <Description<
+            [#[
+               One person has died and two others have been hurt following a shooting in north Charlotte early Wednesday morning. The Charlotte-Mecklenburg Police Department says the shooting occurred just before midnight inside a gas station on Beatties Ford Road. At the scene, police found three victims with gunshot wounds. One of those victims died at the<a class="article-read-more" href="https://viralnow.uk/one-killed-two-others-hurt-in-north-charlotte-shooting-cmpd-says/"><i class="flownewsicon fa-angle-double-right"></i></a>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-10-25 09:39:43
+          Link: https://viralnow.uk/leader-of-lebanons-hezbollah-holds-talks-with-senior-hamas-and-palestinian-islamic-jihad-figures/
+          Title: Leader of Lebanon’s Hezbollah holds talks with senior Hamas and Palestinian Islamic Jihad figures
+            <Description<
+            [#[
+               In this photo released on Wednesday, Oct. 25, 2023, by the Hezbollah Media Relations Office, Hezbollah leader Sayyed Hassan Nasrallah, right, meets with Ziad al-Nakhleh, the head of Palestinian Islamic Jihad, center, and Hamas deputy chief, Saleh al-Arouri, in Beirut, Lebanon. Nasrallah met with top Hamas and Palestinian Islamic Jihad officials, their first reported meeting<a class="article-read-more" href="https://viralnow.uk/leader-of-lebanons-hezbollah-holds-talks-with-senior-hamas-and-palestinian-islamic-jihad-figures/"><i class="flownewsicon fa-angle-double-right"></i></a>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-10-25 08:49:48
+          Link: https://viralnow.uk/was-the-victim-of-patersons-latest-homicide-looking-to-rob-the-man-who-killed-him/
+          Title: Was the victim of Paterson’s latest homicide looking to rob the man who killed him?
+            <Description<
+            [#[
+               PATERSON — The teenager killed during a shootout near a popular Paterson food truck early Sunday morning may have been part of a group of young men trying to commit an armed robbery, law enforcement sources said. But the robbers chose the wrong victim — someone who was carrying his own gun and resisted being<a class="article-read-more" href="https://viralnow.uk/was-the-victim-of-patersons-latest-homicide-looking-to-rob-the-man-who-killed-him/"><i class="flownewsicon fa-angle-double-right"></i></a>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-10-25 08:38:28
+          Link: https://viralnow.uk/republican-house-members-turn-into-complete-jerks-after-trump-question/
+          Title: Republican House Members Turn Into Complete Jerks After Trump Question
+            <Description<
+            [#[
+               House Republicans unveiled their latest nominee for speaker on Tuesday night ― and there are some things they absolutely do not want to talk about. Specifically, Donald Trump’s attempts to undermine democracy, overturn the results of the 2020 election and remain in power despite losing the vote. Rep. Mike Johnson (R-La.) was a key player<a class="article-read-more" href="https://viralnow.uk/republican-house-members-turn-into-complete-jerks-after-trump-question/"><i class="flownewsicon fa-angle-double-right"></i></a>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-10-25 07:48:52
+          Link: https://viralnow.uk/missing-man-may-have-been-murdered-police-say/
+          Title: Missing man may have been murdered, police say
+            <Description<
+            [#[
+               Police investigating the disappearance of man from south London now believe he may have been murdered. Justin Henry, 34, was last seen on CCTV on 15 October at a McDonald&#8217;s drive-through in Croydon. His car was seen recorded on CCTV later that evening near Crystal Palace. It is thought another person was driving the vehicle.<a class="article-read-more" href="https://viralnow.uk/missing-man-may-have-been-murdered-police-say/"><i class="flownewsicon fa-angle-double-right"></i></a>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-10-25 07:37:54
+          Link: https://viralnow.uk/trump-rages-as-former-acolytes-turn-against-him-under-legal-heat/
+          Title: Trump rages as former acolytes turn against him under legal heat
+            <Description<
+            [#[
+               Donald Trump’s wealth, power and fame acted like a magnet for new associates keen to enter his orbit. But now, key figures who sought a share of his reflected glory are turning against him to save themselves. The ex-president absorbed a trio of blows Tuesday that worsened his legal peril and underscored how the 2024<a class="article-read-more" href="https://viralnow.uk/trump-rages-as-former-acolytes-turn-against-him-under-legal-heat/"><i class="flownewsicon fa-angle-double-right"></i></a>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-10-25 06:47:40
+          Link: https://viralnow.uk/gsks-common-respiratory-virus-vaccine-shows-potential-in-adults-aged-50-59/
+          Title: GSK’s common respiratory virus vaccine shows potential in adults aged 50-59
+            <Description<
+            [#[
+               (Reuters) -GSK said its vaccine for respiratory syncytial virus (RSV) showed positive preliminary results in a late-stage trial to protect adults aged 50 to 59 from the disease that causes thousands of hospitalisations and deaths annually. The British drugmaker&#8217;s shot, called Arexvy, met the primary goal in the Phase-III trial of eliciting an immune response<a class="article-read-more" href="https://viralnow.uk/gsks-common-respiratory-virus-vaccine-shows-potential-in-adults-aged-50-59/"><i class="flownewsicon fa-angle-double-right"></i></a>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-10-25 06:37:12
+          Link: https://viralnow.uk/analysis-china-chases-us-and-russia-guided-missile-submarine-capabilities-with-new-vessels/
+          Title: Analysis-China chases US and Russia guided-missile submarine capabilities with new vessels
+            <Description<
+            [#[
+               By Greg Torode HONG KONG (Reuters) &#8211; China has launched its first nuclear-powered guided missile submarines, according to the Pentagon&#8217;s latest report on China&#8217;s military &#8211; giving it land and sea attack options once the sole province of U.S. and Russian vessels. The Pentagon report, published Oct. 20, marks the first apparent confirmation that modified<a class="article-read-more" href="https://viralnow.uk/analysis-china-chases-us-and-russia-guided-missile-submarine-capabilities-with-new-vessels/"><i class="flownewsicon fa-angle-double-right"></i></a>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-10-25 05:45:17
+          Link: https://viralnow.uk/taiwan-hopeful-of-reaching-tax-deal-with-us-next-year/
+          Title: Taiwan hopeful of reaching tax deal with US next year
+            <Description<
+            [#[
+               TAIPEI (Reuters) &#8211; Taiwan hopes to reach a long-mooted tax agreement with the United States next year, Finance Minister Chuang Tsui-yun said on Wednesday, which both sides have said will foster more investment and Taipei has long pushed for. Republican and Democratic members of the U.S. House of Representatives introduced legislation in July that would<a class="article-read-more" href="https://viralnow.uk/taiwan-hopeful-of-reaching-tax-deal-with-us-next-year/"><i class="flownewsicon fa-angle-double-right"></i></a>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-10-25 05:35:53
+          Link: https://viralnow.uk/accuser-of-marvel-actor-jonathan-majors-expected-to-be-arrested-wednesday-in-his-misdemeanor-cross-complaint-against-her/
+          Title: Accuser of Marvel actor Jonathan Majors expected to be arrested Wednesday in his misdemeanor cross-complaint against her
+            <Description<
+            [#[
+               Grace Jabbari accused Marvel actor Jonathan Majors of hitting her in March 2023. Jabbari, his ex, is expected to be charged with misdemeanor assault Wednesday in Majors&#8217; cross-complaint against her. But prosecutors told the choreographer they&#8217;ll drop the NYPD&#8217;s charges, Insider has learned. The choreographer ex-girlfriend who accused Jonathan Majors of misdemeanor domestic violence back<a class="article-read-more" href="https://viralnow.uk/accuser-of-marvel-actor-jonathan-majors-expected-to-be-arrested-wednesday-in-his-misdemeanor-cross-complaint-against-her/"><i class="flownewsicon fa-angle-double-right"></i></a>
+            ]#]
+            >Description>
+         >Item>
+      >Brew>
+>>
diff --git a/htdocs/cgi-bin/search.cgi b/htdocs/cgi-bin/search.cgi
new file mode 100755 (executable)
index 0000000..8b38c09
--- /dev/null
@@ -0,0 +1,115 @@
+#!/usr/bin/perl
+#
+# Programed in vim by: Will Budic
+# Open Source License -> https://choosealicense.com/licenses/isc/
+#
+
+use strict;
+use warnings;
+use CGI;
+use DBI;
+use DateTime;
+use DateTime::Format::SQLite;
+
+my $driver   = "SQLite"; 
+my $database = "../../dbLifeLog/data_log.db";
+my $dsn = "DBI:$driver:dbname=$database";
+my $userid = $ENV{'DB_USER'};
+my $password = $ENV{'DB_PASS'};
+
+
+my $q = CGI->new;
+
+my $db = DBI->connect($dsn, $userid, $password, { RaiseError => 1 }) 
+   or die "<p>Error->"& $DBI::errstri &"</p>";
+
+my $today = DateTime->now;
+$today->set_time_zone( 'Australia/Sydney' );
+
+my $stmtCat = "SELECT * FROM CAT;";
+
+
+my $sth = $db->prepare( $stmtCat );
+my $rv = $sth->execute() or die or die "<p>Error->"& $DBI::errstri &"</p>";
+
+my %hshCats;
+my $tbl_rc =0;
+
+ while(my @row = $sth->fetchrow_array()) {
+       $hshCats{$row[0]} = $row[1];
+ }
+
+
+my $stmS = "SELECT rowid, ID_CAT, DATE, LOG from LOG WHERE";
+my $stmE = " ORDER BY DATE DESC, rowid DESC;";
+my @keywords = split / /, $q->param('keywords');
+my $stm= $stmS;
+if(@keywords){
+       foreach (@keywords)
+       {
+               $stm = $stm . " LOG LIKE '%" .$_."%'";
+               if(  \$_ != \$keywords[-1]  ) {
+                       $stm = $stm." OR ";
+               }
+       }
+       $stm = $stm . $stmE;
+}
+else{
+       $stm = "";
+}
+
+
+     print $q->header(-expires=>"+6os");    
+     print $q->start_html(-title => "Personal Log Record Removal", 
+                            -script=>{-type => 'text/javascript', -src => 'wsrc/main.js'},
+                    -style =>{-type => 'text/css', -src => 'wsrc/main.css'}
+
+        );       
+
+       if($stm){
+            &build;
+       }
+       else{
+               print $q->center($q->h2({-style=>'Color: red;'},'No Keywords Submitted!'));
+       }
+
+       print $q->pre("### -> ".$stm);
+
+print $q->end_html;
+
+$db->disconnect();
+
+
+
+sub build{
+
+my $tbl = '<table class="tbl">
+               <tr class="r0"><th>Date</th><th>Time</th><th>Log</th><th>Category</th></tr>';
+$sth = $db->prepare( $stm );
+$rv = $sth->execute() or die or die "<p>Error->"& $DBI::errstri &"</p>";
+if($rv < 0) {
+            print "<p>Error->"& $DBI::errstri &"</p>";
+}
+
+
+my $r_cnt = 0;
+while(my @row = $sth->fetchrow_array()) {
+
+        my $ct = $hshCats{$row[1]};
+        my $dt = DateTime::Format::SQLite->parse_datetime( $row[2] );
+
+        $tbl = $tbl . '<tr class="r1"><td>'. $dt->ymd . "</td>" . 
+                 "<td>" . $dt->hms . "</td>" . "<td>" . $row[3] . "</td>\n".
+                 "<td>" . $ct. '<input type="hidden" name="chk" value="'.$row[0].'"></td></tr>';       
+       $r_cnt++;
+}
+my $plural = "";
+if($r_cnt>1){
+       $plural = "s";
+}
+ $tbl = $tbl . "</table>";
+
+print '<center><div>' . $tbl .'</div></center>';
+
+}
diff --git a/htdocs/cgi-bin/static b/htdocs/cgi-bin/static
new file mode 120000 (symlink)
index 0000000..884d083
--- /dev/null
@@ -0,0 +1 @@
+/home/will/LifeLog/htdocs/
\ No newline at end of file
diff --git a/htdocs/cgi-bin/stats.cgi b/htdocs/cgi-bin/stats.cgi
new file mode 100755 (executable)
index 0000000..0893a2d
--- /dev/null
@@ -0,0 +1,277 @@
+#!/usr/bin/env perl
+# Programed by: Will Budic
+# Open Source License -> https://choosealicense.com/licenses/isc/
+#
+use strict;
+use warnings;
+no warnings 'uninitialized';
+
+use CGI;
+use CGI::Session '-ip_match';
+use CGI::Carp qw ( fatalsToBrowser );
+use CGI::Pretty ":standard"; #Includes style subroutine for inline CSS
+use DBI;
+use DateTime::Format::SQLite;
+use Number::Bytes::Human qw(format_bytes);
+use IPC::Run qw( run );
+use Syntax::Keyword::Try;
+
+use lib "system/modules";
+my $PWD =  $ENV{'PWD'}; $PWD="" if !$PWD;
+use lib $PWD.'/htdocs/cgi-bin/system/modules';
+require Settings;
+
+my $db      = Settings::fetchDBSettings();
+my $cgi     = Settings::cgi();
+my $sss     = Settings::session();
+my $sid     = Settings::sid();
+my $dbname  = Settings::dbFile();
+my $alias   = Settings::alias();
+
+if(!$alias||!$dbname){
+        print $cgi->redirect("login_ctr.cgi?CGISESSID=$sid");
+        exit;
+}
+try{
+
+my $today = Settings->today();
+
+$ENV{'HOME'} = "~/";
+
+my $CSS=<<_____CSS;
+.main div {
+    font-family: Bookman;
+    text-align: left;
+    margin:5px;
+}
+
+.info span {
+    border: 1px solid black;
+    margin-top: 5px;
+    float: left;
+    width:97%
+}
+
+.table {
+    display:table;
+    border: 2px solid black;
+    margin-right: 15px;
+    width:45%;
+}
+.header {
+    display:table-header-group;
+    font-weight:bold;
+    border-bottom: 1px solid black;
+    margin-bottom: 2px;
+}
+.row {
+    display:table-row;
+}
+.rowGroup {
+    display:table-row-group;
+}
+.cell1 {
+       display: table-cell;
+    padding: 5px;
+    border-bottom: solid 1px;
+       border-right: solid 2px;
+    vertical-align: top;
+    width: 10%;
+}
+.cell2 {
+    display:table-cell;
+    padding: 5px;
+    border-bottom: solid 1px;
+    vertical-align: top;
+    width:25%;
+}
+.cell3 {
+    display:table-cell;
+    padding: 5px;
+    border-bottom: solid 1px;
+    vertical-align: top;
+    width:100%;
+}
+_____CSS
+
+print $cgi->header(-expires=>"+6os", -charset=>"UTF-8");
+print $cgi->start_html(-title => "Log Data Stats",
+                       -script=> [{-type => 'text/javascript', -src => 'wsrc/main.js'},
+                                  {-type => 'text/javascript', -src => 'wsrc/jquery.js'},
+                                  {-type => 'text/javascript', -src => 'wsrc/jquery-ui.js'}],
+                       -style => [{-type => 'text/css', -src => 'wsrc/jquery-ui.css'},
+                                  {-type => 'text/css', -src => 'wsrc/jquery-ui.theme.css'},
+                                  {-type => 'text/css', -src => Settings::theme('css')},
+                                  {-script=>$CSS}
+                                 ],
+                        -head => style({-type => 'text/css'}, $CSS),
+                       -onload  => "onBodyLoadGeneric()"
+                );
+
+my $log_rc = selectSQL(Settings::selLogIDCount());
+my ($stm1,$stm2) = "SELECT count(date) from LOG where ".Settings::selStartOfYear();
+my $log_this_year_rc = selectSQL($stm1);
+my $notes_rc = selectSQL('select count(LID) from NOTES where DOC is not null;');
+my $id;
+
+#INCOME
+$stm1 = 'SELECT sum(AMOUNT) from LOG where '.Settings::selStartOfYear().' AND AFLAG = 1;';
+#EXPENSE
+$stm2 = 'SELECT sum(AMOUNT) from LOG where '.Settings::selStartOfYear().' AND AFLAG = 2;';
+
+
+my $income  = selectSQL($stm1);
+my $expense = selectSQL($stm2);
+my $gross   = big_money($income - $expense);
+$expense    = big_money(sprintf("%.2f",$expense));
+$income     = big_money(sprintf("%.2f",$income));
+
+#Under perlbrew, sometimes STDOUT is not piped back to our cgi,
+#utility inxi could be a perl written version on newer systems.
+#So I use the inter processing module here for inxi. -- @wbudic
+my $buff = "";
+my @cmd = ("/usr/bin/inxi", "-b", "-c0");
+my $uptime = qx(uptime -p);
+my @ht = split(m/\s/, qx(hostname -I));
+my $hst = "";
+   $hst = qx(hostname) . "($ht[0])" if (@ht);
+
+
+#Gather into $buff
+run \@cmd, ">&", \$buff; #instead of -> system("inxi",'-b', '-c0');
+my @matches = $buff =~ /^(System.*)|(Machine.*)|(CPU.*)|(Drives.*)|(Info.*)|(Init.*)$/gm;#$txt=~/^(?=.*?\bone\b)(?=.*?\btwo\b)(?=.*?\bthree\b).*$/gim);
+push (@matches, $uptime);
+my $hardware_status = "<b>Host: </b>$hst<br>".join("\t", map { defined ? $_ : '' } @matches);
+   $hardware_status =~ s/<.*filter>//gm; #remove crap
+   $hardware_status =~ s/^(\w+:)/<b>$1<\/b>/m;
+   #$hardware_status =~ s/(\t\w+:)/<b>$1<\/b>/gms;
+   $hardware_status =~ s/\t+/<br>/gm; #TODO: This temp. resolves the regex needs to be adjusted so we join with <br>
+   $hardware_status =~ s/Memory:/<br><b>Memory: <\/b>/g;
+   $hardware_status =~ s/up\s/<b>Server is up: <\/b>/g;
+
+my $log = "<span>".$hardware_status."</span>"."<pre>\n".`df -h -l -x tmpfs`."</pre>";
+###
+   Settings::toLog($db, $log);
+###
+my $prc = 'ps -eo size,pid,user,command --sort -size | awk \'{ hr=$1/1024 ; printf("%13.2f Mb ",hr) } { for ( x=4 ; x<=NF ; x++ ) { printf("%s ",$x) } print "" }\'';
+my $processes = qx($prc | sort -u -r -);
+my @stat = stat Settings::dbFile();
+my $dbSize =  "Not Avail";
+   $dbSize = (uc format_bytes($stat[7], bs => 1000)) if !Settings::isProgressDB();
+#Strip kernel 0 processes reported
+$processes =~ s/\s*0.00.*//gd;
+#trim reduce prefixed spacing
+$processes =~ s/^\s+/  /gm;
+my $year =$today->year();
+
+my $IPPublic  = qx(curl -s https://www.ifconfig.me);
+my $IPPrivate = qx(hostname -I); $IPPrivate =~ s/\s/<br>/g;
+my $tbl = qq(
+<div class="table r0" style="text-align:centered; float:left;">
+  <div class="header">
+      <div class="cell2" style="border-right:0;">Personal Log Data Statistics</div>
+      <div class="cell2"></div>
+  </div>
+  <div class="row r1">
+    <div class="cell1">LifeLog App. Version:</div>
+    <div class="cell2">).Settings::release().qq(</div>
+  </div>
+  <div class="row r2">
+        <div class="cell1">Number of Records:</div><div class="cell2">$log_rc</div>
+  </div>
+  <div class="row r3">
+        <div class="cell1">No. of Records This Year:</div><div class="cell2">$log_this_year_rc</div>
+  </div>
+    <div class="row r1">
+        <div class="cell1">No. of RTF Documents:</div><div class="cell2">$notes_rc</div>
+  </div>  <div class="row r0">
+        <div class="cell1"># Sum of Expenses For Year $year</div><div class="cell2">$expense</div>
+  </div>
+  <div class="row r2">
+        <div class="cell1"># Sum of Income For Year $year</div><div class="cell2">$income</div>
+  </div>
+  <div class="row r3">
+        <div class="cell1"># Gross For Year $year</div><div class="cell2">$gross</div>
+  </div>
+  <div class="row r1">
+        <div class="cell1">$dbname</div><div class="cell2">$dbSize</div>
+  </div>
+  <div class="row r2">
+        <div class="cell1">Public IP</div><div class="cell2">$IPPublic</div>
+  </div>
+  <div class="row r3">
+        <div class="cell1">Private IP</div><div class="cell2">$IPPrivate</div>
+  </div>
+</div>
+<div class="table r0">
+    <div class="header"><div class="cell2">Server Info</div></div>
+    <div class="row r1"><div class="cell3">$hardware_status</div></div>
+</div>
+);
+
+print qq(<div id="menu" title="Menu" style="border: 2px solid black; padding: 5px; margin-top: 120px;">
+<div class="r0" style="border: 1px solid black; margin: 2px; margin-bottom: 10px; padding:5px;"><b>Menu</b></div>
+<div><a class="a_" href="main.cgi">Log</a><hr></div>
+<div><a class="a_" href="config.cgi">Config</a><hr></div>
+<div><a class="a_" href="index.cgi">Index</a><hr></div>
+<div><a class="a_" href="login_ctr.cgi?logout=bye">LOGOUT</a></div>
+</div>);
+
+print qq(
+<div class="main">
+
+    <div class="info">
+        <span class="r2" style="padding:5px;width:98%;"><h3>Life Log Server Statistics</h3></span>
+    </div>
+
+    <div>&nbsp;</div>
+
+    <div class="info">
+        <span class="info r2" style="font-size:larger;padding:5px;width:98%;"><b>Status & Information</b></span>
+        <span style="font-size:larger;padding:5px;width:98%;">$tbl</span>
+    </div>
+
+    <div>&nbsp;</div>
+
+    <div class="info">
+        <span class="r2" style="font-size:larger;padding:5px;width:98%;"><b>Server Side Processes</b></span>
+        <span style="border: 1px solid black; padding-right: 0px;  width:98%">
+                <pre class="ql-container r2" style="max-height:480px; width:100%; overflow-x:auto; margin-top:0; margin-bottom:0"">$processes</pre>
+        </span>
+    </div>
+</div>);
+
+print $cgi->end_html;
+
+$db->disconnect();
+
+}
+ catch {
+            my $err = $@;
+            my $pwd = `pwd`;
+            $pwd =~ s/\s*$//;
+            print  "<font color=red><b>SERVER ERROR</b></font> on ".DateTime->now. "->".$err,
+            #"<pre>".$pwd."/$0 -> &".caller." -> [$err]","\n</pre>",
+            $cgi->end_html;
+ };
+
+
+exit;
+
+sub selectSQL {
+    my @row = Settings::selectRecords($db, shift)->fetchrow_array();
+    my $ret = $row[0];
+    $ret = 0 if !$ret;
+return $ret;
+}
+
+sub big_money {
+  my $number = sprintf("%.2f", shift @_);
+ # Add one comma each time through the do-nothing loop
+ 1 while $number =~ s/^(-?\d+)(\d\d\d)/$1,$2/;
+  # Put the dollar sign in the right place
+  $number =~ s/^(-?)/$1\$/;
+return $number;
+}
+
+1.
\ No newline at end of file
diff --git a/htdocs/cgi-bin/system/modules/CNFDateTime.pm b/htdocs/cgi-bin/system/modules/CNFDateTime.pm
new file mode 100644 (file)
index 0000000..fbc49a5
--- /dev/null
@@ -0,0 +1,110 @@
+###
+# CNFDateTime objects provide conversions from script to high precision time function not inbuild into perl interpreter.
+# They are lightly initilized, compared to using DateTime directly, so this is not merely a wrapper around DateTime.
+#
+package CNFDateTime;
+use strict;
+use warnings;
+no warnings qw(experimental::signatures);
+use DateTime;
+use DateTime::Format::DateParse;
+use Time::HiRes qw(time usleep);
+use feature 'signatures';
+
+use constant{
+                FORMAT            => '%Y-%m-%d %H:%M:%S',
+                FORMAT_NANO       => '%Y-%m-%d %H:%M:%S.%3N %Z',
+                FORMAT_SCHLONG    => '%A, %d %B %Y %H:%M:%S %Z',
+                FORMAT_MEDIUM     => '%d %b %Y %H:%M:%S',
+                DEFAULT_TIME_ZONE => 'UTC'
+};
+
+sub new {
+    my $class = shift;
+    my %settings;
+    if(ref($_[0]) ne ''){
+        %settings = %{$_[0]}
+    }
+    $settings{epoch} = time if !$settings{epoch};
+    $settings{TZ}    = DEFAULT_TIME_ZONE if !$settings{TZ};
+    return bless \%settings, $class
+}
+
+sub datetime($self) {
+    return $self->{datetime} if exists $self->{datetime};
+    $self->{epoch} = time if not defined $self->{epoch};
+     my $dt = DateTime->from_epoch(epoch=>$self->{epoch},time_zone=>$self->{TZ});
+    $self->{datetime} = $dt;
+    return $dt
+}
+sub toTimestamp($self) {
+    return $self->{timestamp} if exists $self->{timestamp};
+    usleep(1_028_69);
+    $self->{timestamp} = $self->datetime() -> strftime(FORMAT_NANO)
+}
+sub toTimestampShort($self) {
+    return $self->{timestamp} if exists $self->{timestamp};
+    usleep(1_028_69);
+    $self->{timestamp} = $self->datetime() -> strftime(FORMAT)
+}
+sub toSchlong($self){
+    return $self->{long} if exists $self->{long};
+    $self->{long} = $self->datetime() -> strftime(FORMAT_SCHLONG)
+}
+sub _toCNFDate ($formated, $timezone) {
+    my $dt = DateTime::Format::DateParse->parse_datetime($formated, $timezone);
+    return new('CNFDateTime',{epoch => $dt->epoch, datetime=>$dt, TZ=>$timezone});
+}
+sub _listAvailableCountryCodes(){
+     require DateTime::TimeZone;
+     return  DateTime::TimeZone->countries();
+}
+sub _listAvailableTZ($country){
+     require DateTime::TimeZone;
+     return  length($country)==2?DateTime::TimeZone->names_in_country( $country ):DateTime::TimeZone->names_in_category( $country );
+}
+
+
+1;
+
+=begin copyright
+Programed by  : Will Budic
+EContactHash  : 990MWWLWM8C2MI8K (https://github.com/wbudic/EContactHash.md)
+Source        : https://github.com/wbudic/PerlCNF.git
+Documentation : Specifications_For_CNF_ReadMe.md
+    This source file is copied and usually placed in a local directory, outside of its repository project.
+    So it could not be the actual or current version, can vary or has been modiefied for what ever purpose in another project.
+    Please leave source of origin in this file for future references.
+Open Source Code License -> https://github.com/wbudic/PerlCNF/blob/master/ISC_License.md
+=cut copyright
+
+=begin history
+Implementing the DateTime module with local libraries, was always problematic at some stages
+as the Perl build or running environment changes.
+
+It is huge and in minimal form usually delivered with default basic or minimal Perl setups.
+It in full provides the most compressive list of world locales and timezones possibilities.
+This means language translations and many other, formats of date outputs based on the locale expected look.
+
+PerlCNF doesn't need it in reality as has its own fixed format to accept and produce.
+PerlCNF must also support world timezones.
+
+Hence it needs DateTime, and some of its modules to provide its timezone string and convert it back and forth.
+Other, DateTime::Format::DateParse, module itself is small, compared to the DateTime module.
+
+Without proper dev. tools and what to look for, it is very hard to figure out what is going on, that things fail.
+For example at the production site. But not on the development setup.
+
+2023-08-23
+
+On occasions DateTime in the past, since 5 eight years to this day, it would lib error crash the whole Perl running environment.
+Something veryhard to find and correct also to forsure test on various installations.
+For these and other reasons, the PerlCNF datetime format was avoided from being implemented or needed.
+
+However, CNFDateTime in its first inclination attempts again to encapsulate this long time due functionality of requirements.
+Came to life in the final of PerlCNF v.2.9, along with the new PerlCNF instruction DATE, of the release.
+
+TestManager has also now been updated to capture any weird and possible Perl underlying connectors to libraries,
+which are of no concern what so ever to the actual local code being tested.
+
+=cut history
\ No newline at end of file
diff --git a/htdocs/cgi-bin/system/modules/CNFJSON.pm b/htdocs/cgi-bin/system/modules/CNFJSON.pm
new file mode 100644 (file)
index 0000000..8954ba3
--- /dev/null
@@ -0,0 +1,135 @@
+# SQL Processing part for the Configuration Network File Format.
+# Programed by  : Will Budic
+# Source Origin : https://github.com/wbudic/PerlCNF.git
+# Open Source License -> https://choosealicense.com/licenses/isc/
+#
+package CNFJSON;
+
+use strict;use warnings;#use warnings::unused;
+use Exception::Class ('CNFParserException'); use Carp qw(cluck);
+use Syntax::Keyword::Try;
+use JSON::ize;
+
+use constant VERSION => '1.0';
+
+sub new {
+    my ($class, $attrs,$self) = @_;
+    $self = {};
+    $self = \%$attrs if $attrs;
+    bless $self, $class;
+}
+###
+sub nodeToJSON {
+    my($self,$node,$tab_cnt) = @_; $tab_cnt=1 if !$tab_cnt;
+    if($self&&$node){
+       my ($buffer,$attributes,$closeBrk)=("","",0);
+       my $tab =  $tab_cnt == 1 ? '' : '   ' x $tab_cnt;
+       my $name = $node -> {'_'};
+       my $val  = $node -> {'#'}; $val = $node->{'*'} if !$val; $val = _translateNL($val);
+       my @arr  = sort (keys %$node);  
+       my $regex  = $node->PRIVATE_FIELDS();
+          foreach my$attr(@arr){            
+            if($attr !~ /$regex/){
+               my $aval = _translateNL($node->{$attr});               
+                  $attributes .= ",\n" if $attributes;
+                  $attributes .= "$tab\"$attr\" : \"$aval\"";
+            }            
+          }          
+       #
+            @arr  = exists $node-> {'@$'} ?  @{$node -> {'@$'}} : ();
+       #       
+       return \"$tab\"$name\" : \"$val\"" if(!@arr==0 && $val);       
+       $tab_cnt++;
+       if(@arr){
+          foreach (@arr){
+            if (!$buffer){          
+                $attributes.= ",\n" if $attributes;
+                $buffer     = "$attributes$tab\"$name\" : {\n";
+                $attributes = ""; $closeBrk = 1;
+            }else{ 
+                $buffer .= ",\n"
+            }
+            my $sub = $_->name();
+            my $insert = nodeToJSON($self, $_, $tab_cnt);
+            if(length($$insert)>0){
+               $buffer .= $$insert;
+            }else{
+               $buffer .= $tab.('   ' x $tab_cnt)."\"$sub\" : {}"
+            }
+          }          
+       }
+       if($attributes){
+          $closeBrk=2 if (!$buffer && !$node->isRoot());
+          $buffer     .= $node->isRoot() ? "$tab$attributes" :  "$tab\"$name\" : {\n$tab$attributes";
+          $attributes  = "";  
+       }
+       #
+            @arr  = exists $node-> {'@@'}  ?  @{$node -> {'@@'}} : ();
+       #
+       if(@arr){          
+          foreach (@arr){
+            if (!$attributes){
+                 $attributes  = "$tab\"$name\" : [\n"
+            }else{ 
+                 $attributes .= ",\n"
+            }
+                 $attributes .= $tab.('   ' x $tab_cnt).'"'.$_->val().'"'            
+          }
+           $buffer .= $attributes."\n$tab]"
+       }
+       if ($closeBrk){
+           $buffer .= "\n$tab}"
+       }
+       if ($node->isRoot()){
+           $buffer =~ s/\n/\n  /gs;           
+           while (my ($k, $v) = each %$self) {  $buffer .= qq(,\n"$k" : "$v") } 
+           $buffer = $tab."{\n  ".$buffer."\n"."$tab}";
+       }
+
+       return \$buffer
+
+    }else{
+        die "Where is the node, my friend?"
+    }
+}
+      sub _translateNL {
+         my $val = shift;
+         if($val){
+            $val =~ s/\n/\\n/g;
+         }
+         return $val
+      }
+
+sub jsonToCNFNode {
+    my($self,$json,$name) = @_;
+    if($self&&$json){    
+        my $obj  = jsonize($json);
+        return   _objToCNF($name, $obj) 
+    }
+ }
+      sub _jsonToObj {
+         return jsonize(shift);
+      }
+
+ sub _objToCNF {
+     my($name, $obj) = @_; $name = 'root' if !$name;
+     my $ret  = CNFNode->new({'_'=>$name});
+        my %perl = %$obj;
+        foreach my $atrr(keys %perl){
+                my $val = $perl{$atrr};
+                my $ref = ref($val);
+                if($ref eq 'HASH'){
+                   $val =  _objToCNF($atrr, $val);
+                   my @arr = $ret->{'@$'} ? $ret->{'@$'} : ();
+                   $arr[@arr]   = $val;
+                   $ret->{'@$'} = \@arr;
+                }elsif($ref eq 'ARRAY'){
+                   $ret->{'@$'} = \@$val
+                }else{
+                   $ret -> {$atrr} = $val
+                }
+        }
+    return $ret;
+ }
+1;
\ No newline at end of file
diff --git a/htdocs/cgi-bin/system/modules/CNFMeta.pm b/htdocs/cgi-bin/system/modules/CNFMeta.pm
new file mode 100644 (file)
index 0000000..d16018b
--- /dev/null
@@ -0,0 +1,60 @@
+# Meta flags that can be set for some CNF instructions.
+# Programed by  : Will Budic
+# Notice - This source file is copied and usually placed in a local directory, outside of its project.
+# So it could not be the actual or current version, can vary or has been modiefied for what ever purpose in another project.
+# Please leave source of origin in this file for future references.
+# Source of Origin : https://github.com/wbudic/PerlCNF.git
+# Documentation : Specifications_For_CNF_ReadMe.md
+# Open Source Code License -> https://choosealicense.com/licenses/isc/
+#
+package CNFMeta;
+
+use strict;
+use warnings;
+
+###
+# TREE instuction meta.
+use constant  HAS_PRIORITY  => "HAS_PROCESSING_PRIORITY"; # Schedule to process before the rest in synchronous line of instructions.
+
+#
+###
+# DO instruction meta.
+#
+use constant  ON_DEMAND      => "ON_DEMAND"; #Postpone to evaluate on demand.
+use constant  SHELL          => "SHELL"; #Execute via system shell.
+
+#
+
+###
+# Returns the regular expresion for any of this meta constances.
+##
+sub _meta {
+    my $constance = shift;
+    if($constance){
+        return qr/\s*\_+$constance\_+\s*/
+    }
+    $constance;
+}
+###
+# Priority order no. for instructions.
+use constant PRIORITY => qr/(\s*\_+PRIORITY\_(\d+)\_+\s*)/o;
+###
+# Tree instruction has been scripted in collapsed nodes shorthand format.
+# Shortife is parsed faster and with less recursion, but can be prone to script errors, 
+# resulting in unintended placings.
+use constant IN_SHORTIFE  => qr/(\s*\_+IN_SHORTIFE\_+\s*)/o;
+
+sub import {     
+    my $caller = caller;    no strict "refs";
+    {
+         *{"${caller}::meta"}  = \&_meta;
+         *{"${caller}::meta_has_priority"}   = sub {return _meta(HAS_PRIORITY)};
+         *{"${caller}::meta_priority"}       = \&PRIORITY;
+         *{"${caller}::meta_on_demand"}      = sub {return _meta(ON_DEMAND)};
+         *{"${caller}::meta_node_in_shortife"} =\&IN_SHORTIFE;
+         *{"${caller}::SHELL"}  = \&SHELL;         
+    }
+    return 1;    
+}
+
+1;
\ No newline at end of file
diff --git a/htdocs/cgi-bin/system/modules/CNFNode.pm b/htdocs/cgi-bin/system/modules/CNFNode.pm
new file mode 100644 (file)
index 0000000..28bb4fa
--- /dev/null
@@ -0,0 +1,799 @@
+###
+# Represents a tree node CNF object having children and a parent node if it is not the root.
+###
+package CNFNode;
+use strict;
+use warnings;
+use Carp qw(cluck);
+
+require CNFMeta; CNFMeta::import();
+
+sub new {
+    my ($class, $attrs) = @_;
+    my $self = \%$attrs;
+    bless $self, $class;
+}
+
+use constant PRIVATE_FIELDS => qr/@\$|[@#_~^&]/o;
+use constant EMPTY => new CNFNode;
+
+###
+# CNFNode uses symbol offcodes for all its own field values, foe efficiancy.
+###
+sub name     {shift -> {'_'}}
+sub parent   {shift -> {'@'}}
+sub isRoot   {not exists shift -> {'@'}}
+sub list     {shift -> {'@@'}}
+sub script   {shift -> {'~'}}
+sub priority {shift -> {'^'}}
+sub evaluate {shift -> {'&'}}
+###
+# Obtains this nodes all public attributes.
+# What you usually only want.
+###
+sub attributes {
+    my $self = shift;
+    my @attributes;
+    my $regex  = PRIVATE_FIELDS();
+    foreach (sort keys %$self){;
+        if($_ !~ /^$regex/){
+           $attributes[@attributes] = [$_, $self->{$_}]
+        }
+    }
+    return @attributes;
+}
+###
+# Utility arrays any attributes by list requested.
+# $node-> array('Name','#') will return node 'Name' attribute and value if it has it, onderwise undef for either.
+###
+sub array {
+    my $self = shift;
+    my @attributes = @_;
+    my @arr;
+    foreach my $next(@attributes){
+       my $val = $self -> {$next};
+        if(ref($val) eq 'SCALAR'){
+           $val = $$val;
+        }
+       $arr[@arr] = $val#'['.$next.':'.$val.']';
+    }
+    return @arr;
+}
+sub nodes {
+    my $self = shift;
+    my $ret = $self->{'@$'};
+    if($ret){
+        return @$ret;
+    }
+    return ();
+}
+###
+# Add another CNFNode to this one, to become a its parent.
+# Returns $self so you can perl them, if you want..
+##
+sub add {
+    my ($self, $node, @nodes)  = @_;
+    my $prev = $self->{'@$'};
+    if($prev) {
+        @nodes = @$prev;
+    }else{
+        @nodes = ();
+    }
+    $node->{'@'}    = \$self;
+    $nodes[@nodes]  = $node;
+    $self -> {'@$'} = \@nodes;
+    return $self;
+}
+###
+# Convenience method, returns string scalar value dereferenced (a copy) of the property value.
+##
+sub val {
+    my $self = shift;
+    my $ret =  $self->{'#'};          # Standard value
+       $ret =  $self->{'*'} if !$ret; # Linked value
+       $ret = _evaluate($self->{'&'}) if !$ret and exists $self->{'&'}; # Evaluated value
+    if(!$ret && $self->{'@$'}){ #return from subproperties.
+        my $buf;
+        my @arr = @{$self->{'@$'}};
+        foreach my $node(@arr){
+           $buf .= $node -> val() ."\n";
+        }
+        return $buf;
+    }
+    if(ref($ret) eq 'SCALAR'){
+           $ret = $$ret;
+    }
+    return $ret
+}
+
+    my $meta =  meta(SHELL());
+    sub _evaluate {
+        my $value = shift;
+        if($value =~ s/($meta)//i){
+        $value =~ s/^`|`\s*$/""/g; #we strip as a possible monkey copy had now redundant meta in the value.
+        $value = '`'.$value.'`';
+        }
+        ## no critic BuiltinFunctions::ProhibitStringyEval
+        my $ret = eval $value;
+        ## use critic
+        if ($ret){
+            chomp  $ret;
+            return $ret;
+        }else{
+            cluck("Perl DO_ENABLED script evaluation failed to evalute: $value Error: $@");
+            return '<<ERROR>>';
+        }
+    }
+
+#
+
+sub items(){
+    my $self = shift;
+    return $self -> {'@$'}
+}
+
+###
+# Search select nodes based on from a path statement.
+# It will always return an array for even a single subproperty with a passed path ending with (/*).
+# The reason is several subproperties of the same name can be contained as elements of this node.
+# It will return an array of list values with (@@).
+# Or will return an array of its shallow list of child nodes with (@$).
+# Or will return an scalar value of an attribute or an property with (#).
+# NOTICE - 20221222 Future versions might provide also for more complex path statements with regular expressions enabled.
+###
+sub find {
+    my ($self, $path, $ret, $prev, $seekArray,$ref)=@_;  my @arr;
+    foreach my $name(split(/\//, $path)){
+        if( $name eq "*" && @arr){
+            return  \@arr # The path instructs to return an array, which is set but return is set to single only found element.
+        }
+        elsif(ref($self) eq "ARRAY"){
+                if($name eq '#'){
+                    if(ref($ret) eq "ARRAY"){
+                        next
+                    }else{
+                        return $prev->val()
+                    }
+                }elsif($name =~ /\[(\d+)\]/){
+                    $self = $ret = @$ret[$1];
+                    next
+                }else{
+                    $ret = $prev->{'@$'};
+                }
+        }else{
+                if ($name eq '@@') {
+                    $ret = $self->{'@@'}; $seekArray = 1;
+                    next
+                }elsif($name eq '@$') {
+                    $ret = $self->{'@$'}; # This will initiate further search in subproperties names.
+                    next
+                }elsif($name eq '#'){
+                    return $ret->val()
+                }elsif(exists $self->{$name}){
+                    $ret = $self->{$name};
+                    next
+                }
+                   $ref =  ref($ret);
+                if(!$seekArray && $ref eq 'ARRAY'){ # ret can be an array of parent same name elemenents.
+                   foreach my$n(@$ret) {
+                     if ($n->node($name)){
+                         $ret = $n; last
+                     }
+                   }### TODO - Search further elements if not found. Many to many.
+                }elsif($ref eq "CNFNode" && $seekArray){
+                    $ret = $ret->{$name};
+                    next
+                }else{
+                    if (!$seekArray){
+                         # This will initiate further search in subproperties names.
+                          $ret = $self->{'@$'};
+                          @arr = ();
+                    }
+                }
+        }
+           $ref =  ref($ret);
+        if($ret && $ref eq 'ARRAY'){
+            my $found = 0;
+            undef $prev;
+            foreach my $ele(@$ret){
+                if($seekArray && exists $ele->{'@$'}){
+                    foreach my$node(@{$ele->{'@$'}}){
+                        if ($node->{'_'} eq $name){
+                            $arr[@arr] = $ele = $node;
+                        }
+                    }
+                    if(@arr>1){
+                       $ret = \@arr;
+                    }else{
+                       $ret = $ele
+                    }
+                    $found++;
+                }elsif (ref($ele) eq "CNFNode"){
+                    if($ele->{'_'} eq $name){
+                        if ($prev) {
+                            $arr[@arr] = $ele;
+                            $self      = \@arr;
+                            $prev      = $ele;
+                        }
+                        else {
+                            $arr[@arr] = $ele;
+                            $prev = $self = $ele;
+                        }
+                        if ( !$found ) {
+                            $self = $ret = $ele;
+                        }
+                        else {
+                            $ret = \@arr;
+                        }
+                        $found = 1
+                    }elsif(exists $ele->{$name}){
+                        $ret = $ele->{$name};
+                        $found = 1
+                    }
+                }
+            }
+            if(!$found && $name ne '@$' && exists $self->{$name}){
+                $ret = $self->{$name}
+            }else{
+                undef $ret if !$found
+            }
+        }
+        elsif($name && $ref eq "CNFNode"){
+              $ret  =  $ret -> {$name}
+        }
+    }
+    return !$ret?\@arr:$ret;
+}
+###
+# Similar to find, put simpler node by path routine.
+# Returns first node found based on path.
+###
+sub node {
+    my ($self, $path, $ret)=@_;
+    if($path !~ /\//){
+       return $self->{$path} if exists $self->{$path};
+       $ret = $self->{'@$'};
+       if($ret){
+            foreach(@$ret){
+                if ($_->{'_'} eq $path){
+                    return $_;
+                }
+            }
+       }
+      return EMPTY
+    }
+    foreach my $name(split(/\//, $path)){
+        $ret = $self->{'@$'};
+        if($ret){
+            foreach(@$ret){
+                if ($_->{'_'} eq $name){
+                    $ret = $_; last
+                }
+            }
+        }else{
+         $ret = EMPTY;
+       }
+    }
+    return $ret
+}
+###
+# Outreached subs list of collected node links found in a property.
+my  @linked_subs;
+
+###
+# The parsing guts of the CNFNode, that from raw script, recursively creates a tree of nodes from it.
+###
+sub process {
+
+    my ($self, $parser, $script)=@_;
+    my ($sub, $val, $isArray,$isShortifeScript,$body) = (undef,0,0,0,"");
+    my ($tag,$sta,$end)=("","",""); my $meta_shortife = &meta_node_in_shortife;
+    my ($opening,$closing,$valing)=(0,0,0);
+    my @array;
+
+    if(exists $self->{'_'} && $self->{'_'} eq '#'){
+       $val = $self->{'#'};
+       if($val){
+          $val .= "\n$script";
+       }else{
+          $val = $script;
+       }
+    }else{
+        my @lines = split(/\n/, $script);
+        foreach my $ln(@lines){
+            $ln =~ s/^\s+|\s+$//g;
+            if(length ($ln)){
+                my $isShortife = ($ln =~ s/($meta_shortife)/""/sexi);
+                if($ln =~ /^([<>\[\]])(.*)([<>\[\]])$/ && $1 eq $3){
+                   $sta = $1;
+                   $tag = $2;
+                   $end = $3;
+                   $isShortifeScript = 1 if $isShortife;
+                   my $isClosing = ($sta =~ /[>\]]/) ? 1 : 0;
+                   if($tag =~ /^([#\*\@]+)[\[<](.*)[\]>]\/*[#\*\@]+$/){#<- The \/ can sneak in as included in closing tag.
+                        if($1 eq '*'){
+                            my $link = $2;
+                            my $rval = $self  -> obtainLink($parser, $link);
+                            if($rval){
+                                if($opening){
+                                   $body .= qq($ln\n);
+                                }else{
+                                    #Is this a child node?
+                                    if(exists $self->{'@'}){
+                                        my @nodes;
+                                        my $prev = $self->{'@$'};
+                                        if($prev) {
+                                            @nodes = @$prev;
+                                        }else{
+                                            @nodes = ();
+                                        }
+                                        $nodes[@nodes] = CNFNode->new({'_'=>$link, '*'=>$rval,'@' => \$self});
+                                        $self->{'@$'}  = \@nodes;
+                                    }
+                                    else{
+                                        #Links scripted in main tree parent are copied main tree attributes.
+                                        $self->{$link} = $rval
+                                    }
+                                }
+                                next
+                            }else{
+                                if(!$opening){warn "Anon link $link not located with $ln for node ".$self->{'_'}};
+                            }
+                         }elsif($1 eq '@@'){
+                                if($opening==$closing){
+                                   $array[@array] = $2; $val="";
+                                   next
+                                }
+                         }else{
+                            $val = $2;
+                         }
+                   }elsif($tag =~ /^(.*)[\[<]\/*(.*)[\]>](.*)$/ && $1 eq $3){
+                        if($opening){
+                                $body .= qq($ln\n)
+                        }
+                        else{
+                                my $property = CNFNode->new({'_'=>$1, '#' => $2, '@' => \$self});
+                                my @nodes;
+                                my $prev = $self->{'@$'};
+                                if($prev) {
+                                    @nodes = @$prev;
+                                }else{
+                                    @nodes = ();
+                                }
+                                $nodes[@nodes] = $property;
+                                $self->{'@$'} = \@nodes;
+                        }
+                        next
+                    }elsif($isClosing){
+                        $opening--;
+                        $closing++;
+                    }else{
+                        $opening++;
+                        $closing--;
+                    }
+
+                    if(!$sub){
+                        $isArray = $isArray? 0 : 1 if $tag =~ /@@/;
+                        $sub = $tag;  $body = "";
+                        next
+                    }elsif($tag eq $sub && $isClosing){
+                        if($opening==$closing){
+                            if($tag eq '#'){
+                                $body =~ s/\s$//;#cut only one last nl if any.
+                                if(!$val){
+                                    $val  = $body;
+                                }else{
+                                    $val .= $body
+                                }
+                                $valing = 0;
+                                $tag ="" if $isClosing
+                            }else{
+                                my $property = CNFNode->new({'_'=>$sub, '@' => \$self});
+                                my $a = $isArray;
+                                if($isShortifeScript){
+                                    my ($sub,$prev,$cnt_nl,$bck_p);
+                                    while ($body =~ /    (.*)__+   ([\\\|]|\/*)  |  (.*)[:=](.*) | (.*)\n/gmx){
+                                        my @sel =  @{^CAPTURE};
+                                           if(defined $sel[0]){
+                                                if ($sel[1]){
+                                                    my $t = substr $sel[1],0,1;
+                                                    $bck_p=length($sel[1]);
+                                                    my $parent = $sub;
+                                                    if($t eq '\\'){
+                                                        $parent = $sub ? $sub : $property;
+                                                    }elsif($t eq '|'){
+                                                        $parent = $sub ? $sub->parent() : $prev;
+                                                    }elsif($t eq '/') {
+                                                        $parent = $sub;
+                                                        do{$parent = $parent -> parent() if $parent -> parent()}while(--$bck_p>0);
+                                                        if ($sel[0] eq ''){
+                                                            $sub = $parent; next
+                                                        }
+                                                    }
+                                                    $t = $sel[0]; $t=~s/[\s_]*$//g;
+                                                    $sub = CNFNode->new({'_' => $t, '@' => $parent});
+                                                    my @elements = exists $parent -> {'@$'} ? $parent -> {'@$'} : ();
+                                                    $elements[@elements] = $sub; $prev = $parent; $cnt_nl = 0;
+                                                    $parent -> {'@$'} = \@elements;
+                                                }
+                                           }
+                                           elsif (defined $sel[2] && defined $sel[3]){
+                                                  my $attribute = $sel[2]; $attribute =~ s/^\s*|\s*$//g;
+                                                  my $value     = $sel[3]; $value =~ s/^\s*|\s*$//g;
+                                                  if($sub){
+                                                     $sub      -> {$attribute} = $value
+                                                  }else{
+                                                     $property -> {$attribute} = $value
+                                                  }
+                                                 $cnt_nl = 0;
+                                           }
+                                           elsif (defined  $sel[4]){
+                                                  if ($sel[4] eq ''){
+                                                        if(++$cnt_nl>1){ #cancel collapse chain and at root of property that is shorted.
+                                                            ##$sub = $property ;
+                                                            $cnt_nl =0
+                                                        }
+                                                        next
+                                                  }elsif($sel[4] !~ /^\s*\#/ ){
+                                                        my $parent = $sub ? $sub->parent() : $property;
+                                                        if (exists $parent->{'#'}){
+                                                                $parent->{'#'} .= "\n" . $sel[4]
+                                                            }else{
+                                                                $parent->{'#'} = $sel[4]
+                                                        }
+                                                    # $sub ="";
+                                                  }
+                                            }
+                                    }#while
+                                    $isShortifeScript = 0;
+                                }else{
+                                    $property -> process($parser, $body);
+                                 }
+                                $isArray = $a;
+                                if($tag eq '@@'){
+                                   $array[@array] = $property;
+                                   if( not exists $property->{'#'} && $body ){
+                                       $body =~ s/\n$//; $property->{'#'} = $body
+                                   }
+                                }else{
+                                    my @nodes;
+                                    my $prev = $self->{'@$'};
+                                    if($prev) {
+                                       @nodes = @$prev;
+                                    }else{
+                                       @nodes = ();
+                                    }
+                                    $nodes[@nodes] = $property;
+                                    $self->{'@$'} = \@nodes;
+                                }
+                                undef $sub; $body = $val = "";
+                            }
+                            next
+                        }else{
+                           # warn "Tag $sta$tag$sta failed closing -> $body"
+                        }
+                    }
+                }elsif($tag eq '#'){
+                       $valing = 1;
+                }elsif($opening==0 && $isArray){
+                       $array[@array] = $ln;
+                }elsif($opening==0 && $ln =~ /^([<\[])(.+)([<\[])(.*)([>\]])(.+)([>\]])$/ &&
+                              $1 eq $3 && $5 eq $7 ){ #<- tagged in line
+                        if($2 eq '#') {
+                            if($val){$val = "$val $4"}
+                            else{$val = $4}
+                        }elsif($2 eq '*'){
+                                my $link = $4;
+                                my $rval = $self  -> obtainLink($parser, $link);
+                                if($rval){
+                                        #Is this a child node?
+                                        if(exists $self->{'@'}){
+                                            my @nodes;
+                                            my $prev = $self->{'@$'};
+                                            if($prev) {
+                                               @nodes = @$prev;
+                                            }else{
+                                               @nodes = ();
+                                            }
+                                            $nodes[@nodes] = CNFNode->new({'_'=>$link, '*'=>$rval, '@' => \$self});
+                                            $self->{'@$'} = \@nodes;
+                                        }
+                                        else{
+                                            #Links scripted in main tree parent are copied main tree attributes.
+                                            $self->{$link} = $rval
+                                        }
+                                }else{
+                                    warn "Anon link $link not located with '$ln' for node ".$self->{'_'} if !$opening;
+                                }
+                        }elsif($2 eq '@@'){
+                               $array[@array] = CNFNode->new({'_'=>$2, '#'=>$4, '@' => \$self});
+                        }else{
+                                my $property  = CNFNode->new({'_'=>$2, '#'=>$4, '@' => \$self});
+                                my @nodes;
+                                my $prev = $self->{'@$'};
+                                if($prev) {
+                                    @nodes = @$prev;
+                                }else{
+                                    @nodes = ();
+                                }
+                                $nodes[@nodes] = $property;
+                                $self->{'@$'} = \@nodes;
+                        }
+                    next
+                }elsif($val){
+                    $val = $self->{'#'};
+                    if($val){
+                        $self->{'#'} = qq($val\n$ln\n);
+                    }else{
+                        $self->{'#'} = qq($ln\n);
+                    }
+                }
+                elsif($opening < 1){
+                    if($ln =~m/^([<\[]@@[<\[])(.*?)([>\]@@[>\]])$/){
+                       $array[@array] = $2;
+                       next;
+                    }
+                    my @attr = ($ln =~ m/([\s\w]*?)\s*[=:]\s*(.*)\s*/);
+                    if(@attr>1){
+                        my $n = $attr[0];
+                        my $v = $attr[1];
+                        if($v =~ /[<\[]\*[<\[](.*)[]>\]]\*[>\]]/){
+                           $v = $self-> obtainLink($parser, $1)
+                         } $v =~ m/^(['"]).*(['"])$/g;
+                           $v =~ s/^$1|$2$//g if($1 && $2 && $1 eq $2);
+                        $self->{$n} = $v;
+                        next;
+                    }else{
+                       $val = $ln if $val;
+                    }
+                }
+                                    # Very complex rule, allow #comment lines in buffer withing an node value tag, ie [#[..]#]
+                $body .= qq($ln\n)  #if !$tag &&  $ln!~/^\#/ || $tag eq '#'
+            }
+            elsif($tag eq '#'){
+                  $body .= qq(\n)
+            }
+        }
+    }
+    $self->{'@@'} = \@array if @array;
+    $self->{'#'} = \$val if $val;
+    ## no critic BuiltinFunctions::ProhibitStringyEval
+    no strict 'refs';
+    while(@linked_subs){
+       my $entry = pop (@linked_subs);
+       my $node  = $entry->{node};
+       my $res   = &{+$entry->{sub}}($node);
+          $entry->{node}->{'*'} = \$res;
+    }
+    return \$self;
+}
+
+sub obtainLink {
+    my ($self,$parser,$link, $ret) = @_;
+    ## no critic BuiltinFunctions::ProhibitStringyEval
+    no strict 'refs';
+    if($link =~/(.*)(\(\.\))$/){
+       push @linked_subs, {node=>$self,link=>$link,sub=>$1};
+       return 1;
+    }elsif($link =~/(\w*)::\w+$/){
+        use Module::Loaded qw(is_loaded);
+        if(is_loaded($1)){
+           $ret = \&{+$link}($self);
+        }
+    }
+    $ret = $parser->obtainLink($link) if !$ret;
+    return $ret;
+}
+
+###
+# Validates a script if it has correctly structured nodes.
+#
+sub validate {
+    my $self = shift;
+    my ($tag,$sta,$end,$lnc,$errors)=("","","",0,0);
+    my (@opening,@closing,@singels);
+    my ($open,$close) = (0,0);
+    my @lines = defined $self -> script() ? split(/\n/, $self->script()) :();
+    foreach my $ln(@lines){
+        $ln =~ s/^\s+|\s+$//g;
+        $lnc++;
+        #print $ln, "<-","\n";
+        if(length ($ln)){
+            #print $ln, "\n";
+            if($ln =~ /^([<>\[\]])(.*)([<>\[\]])(.*)/ && $1 eq $3){
+                $sta = $1;
+                $tag = $2;
+                $end = $3;
+                my $isClosing = ($sta =~ /[>\]]/) ? 1 : 0;
+                if($tag =~ /^([#\*\@]+)[\[<](.*)[\]>]\/*[#\*\@]+$/){
+
+                }elsif($tag =~ /^(.*)[\[<]\/*(.*)[\]>](.*)$/ && $1 eq $3){
+                    $singels[@singels] = $tag;
+                    next
+                }
+                elsif($isClosing){
+                      $close++;
+                      push @closing, {T=>$tag, idx=>$close, L=>$lnc, N=>($open-$close+1),S=>$sta};
+                }
+                else{
+                      push @opening, {T=>$tag, idx=>$open, L=>$lnc, N=>($open-$close),S=>$sta};
+                      $open++;
+                 }
+            }
+        }
+    }
+    if(@opening != @closing){
+         cluck "Opening and clossing tags mismatch!";
+       foreach my $o(@opening){
+          my $c = pop @closing;
+          if(!$c){
+            $errors++;
+             warn "Error unclosed tag-> [".$o->{T}.'[ @'.$o->{L}
+          }
+       }
+    }else{
+       my $errors = 0; my $error_tag; my $nesting;
+       my $cnt = $#opening;
+       for my $i (0..$cnt){
+          my $o = $opening[$i];
+          my $c = $closing[$cnt - $i];
+          if($o->{T} ne $c->{T}){
+            print '['.$o->{T}."[ idx ".$o->{idx}." line ".$o->{L}.
+                  ' but picked for closing: ]'.$c->{T}.'] idx '.$o->{idx}.' line '.$c->{L}."\n" if $self->{DEBUG};
+            # Let's try same index from the clossing array.
+            $c = $closing[$i];
+          }else{next}
+
+          if($o->{T} ne $c->{T}){
+                my $j = $cnt;
+                for ($j = $cnt; $j>-1; $j--){  # TODO 2023-0117 - For now matching by tag name,
+                     $c = $closing[$j];# can't be bothered, to check if this will always be appropriate.
+                    last if $c -> {T} eq $o->{T}
+                }
+                print "\t search [".$o->{T}.'[ idx '.$o->{idx} .' line '.$o->{L}.
+                      ' top found: ]'.$c->{T}."] idx ".$c->{idx}." line ".$c->{N}." loops: $j \n" if $self->{DEBUG};
+          }else{next}
+
+          if($o->{T} ne $c->{T} && $o->{N} ne $c->{N}){
+             cluck "Error opening and clossing tags mismatch for ".
+                    _brk($o).' ln: '.$o->{L}.' idx: '.$o->{idx}.
+                    ' wrongly matched with '._brk($c).' ln: '.$c->{L}.' idx: '.$c->{idx}."\n";
+             $errors++;
+          }
+       }
+    }
+    return  $errors;
+}
+
+    sub _brk{
+        my $t = shift;
+        return 'tag: \''.$t->{S}.$t->{T}.$t->{S}.'\''
+    }
+###
+# Compare one node with  another if is equal in structure.
+##
+sub equals {
+    my ($self, $node, $ref) = @_; $ref = ref($node);
+    if (ref($node) eq 'CNFNode'){
+        my @s = sort keys %$self;
+        my @o = sort keys %$node;
+        my $i=$#o;
+        foreach (0..$i){
+            my $n = $o[$i-$_];
+            if($n eq '~' || $n eq '^'){
+               splice @o,$i-$_,1;
+            }
+        }
+        $i=$#s;
+        foreach (0..$i){
+            my $n = $s[$i-$_];
+            if($n eq '~' || $n=~/^CNF_/ || $n=~/^DO_/){
+               splice @s,$i-$_,1;
+            }
+        }$i=0;
+        if(@s == @o){
+           foreach(@s) {
+             if($_ ne $o[$i++]){
+                return 0
+             }
+           }
+           if($self -> {'@$'} && $node -> {'@$'}){
+              @s = sort keys @{$self -> {'@$'}};
+              @o = sort keys @{$node -> {'@$'}};
+              $i = 0;
+              foreach(@s) {
+                if($_ ne $o[$i++]){
+                    return 0
+                }
+              }
+           }
+           return 1;
+        }
+    }
+    return 0;
+}
+
+sub toScript {
+    my($self,$nested,$script)= @_;
+    my($isParent,$tag,$tab); $nested=1 if!$nested; $tab =3*$nested; $tab = ' 'x$tab;
+    if(not exists $self->{'@'}){
+        $script .= "<<".$self->{_}."<TREE>\n";  $isParent = 1;
+    }else{
+        $tag = $self->{_};
+       if($nested){
+          $script  .= "$tab<$tag<\n"
+       }else{
+          $script  .= "$tab\[$tag\[\n"
+       }
+    }
+    my @attr = $self -> attributes();
+    foreach (@attr){
+        if($nested){
+            if(@$_[0] ne '#' && @$_[0] ne '_'){
+                if(@$_[1]){
+                    $script .= "$tab ".@$_[0].": ".@$_[1];
+                }else{
+                    $script .= "$tab ".@$_[0]." ";
+                }
+           }
+        }else{
+           if(@$_[0] ne '#' && @$_[0] ne '_'){
+                if(@$_[1]){
+                    $script .= "$tab ".@$_[0]."=\"".@$_[1]."\"";
+                }else{
+                    $script .= "$tab ".@$_[0]." ";
+                }
+           }
+        }
+        $script .= "\n"
+    }
+    my $list = $self->{'@@'};
+    if($list){
+       foreach(@$list) {
+            $script .= "$tab  <@@<$_>@@>\n"
+       }
+    }
+
+    my $nodes = $self->{'@$'};
+    if($nodes){
+        foreach my $nd (@$nodes) {
+            my $ref = ref($nd);
+            $nd = $$nd if ($ref eq 'REF');
+            if (ref($nd) eq 'CNFNode'){
+               $script .=  toScript($nd, $nested+1);
+            }
+        }
+    }
+    my $val = $self->{'#'};
+    if($val){
+        if(ref($val) eq 'SCALAR'){
+            $val = $$val;
+        }
+        $val =~ s/\n/\n$tab   /gs; $val =~ s/\s*$//;
+        $script .= $tab."[#\[\n$tab   $val\n$tab]#]\n"
+    }
+
+    if ($isParent){
+        $script  .= ">>\n"
+    }else{
+        if($nested){
+          $script  .= "$tab>$tag>\n"
+       }else{
+          $script  .= "$tab]$tag]\n"
+       }
+    }
+    return $script;
+}
+
+1;
+
+=begin copyright
+Programed by  : Will Budic
+EContactHash  : 990MWWLWM8C2MI8K (https://github.com/wbudic/EContactHash.md)
+Source        : https://github.com/wbudic/PerlCNF.git
+Documentation : Specifications_For_CNF_ReadMe.md
+    This source file is copied and usually placed in a local directory, outside of its repository project.
+    So it could not be the actual or current version, can vary or has been modiefied for what ever purpose in another project.
+    Please leave source of origin in this file for future references.
+Open Source Code License -> https://github.com/wbudic/PerlCNF/blob/master/ISC_License.md
+=cut copyright
\ No newline at end of file
diff --git a/htdocs/cgi-bin/system/modules/CNFParser.pm b/htdocs/cgi-bin/system/modules/CNFParser.pm
new file mode 100644 (file)
index 0000000..752d7c1
--- /dev/null
@@ -0,0 +1,1395 @@
+###
+# Main Parser for the Configuration Network File Format.
+##
+package CNFParser;
+
+use strict;use warnings;#use warnings::unused;
+use Exception::Class ('CNFParserException');
+use Syntax::Keyword::Try;
+use Hash::Util qw(lock_hash unlock_hash);
+use File::ReadBackwards;
+
+require CNFMeta; CNFMeta::import();
+require CNFNode;
+require CNFDateTime;
+
+# Do not remove the following no critic, no security or object issues possible.
+# We can use perls default behaviour on return.
+##no critic qw(Subroutines::RequireFinalReturn)
+##no critic Perl::Critic::Policy::ControlStructures::ProhibitMutatingListFunctions
+
+use constant VERSION => '3.0';
+our @files;
+our %lists;
+our %properties;
+our %instructors;
+
+###
+# Package fields are always global in perl!
+###
+our %ANONS;
+#private -> Instance fields:
+                my  $anons;
+                my %includes;
+                my %instructs;
+###
+# CNF Instruction tag covered reserved words.
+# You can't use any of these as your own possible instruction implementation, unless in lower case.
+###
+
+our %RESERVED_WORDS = map +($_, 1), qw{ CONST CONSTANT DATA DATE VARIABLE VAR
+                                        FILE TABLE TREE INDEX
+                                        VIEW SQL MIGRATE DO LIB PROCESSOR
+                                        PLUGIN MACRO %LOG INCLUDE INSTRUCTOR };
+
+sub isReservedWord    { my ($self, $word)=@_; return $word ? $RESERVED_WORDS{$word} : undef }
+###
+
+###
+# Constance required setting, if set to 1, const method when called will rise exception rather then return undef.
+###
+our $CONSTREQ = 0;
+
+###
+# Create a new CNFParser instance.
+# $path - Path to some .cnf_file file, to parse, not compsuluory to add now? Make undef.
+# $attrs - is reference to hash of constances and settings to dynamically employ.
+# $del_keys -  is a reference to an array of constance attributes to dynamically remove.
+sub new { my ($class, $path, $attrs, $del_keys, $self) = @_;
+    if ($attrs){
+        $self = \%$attrs;
+    }else{
+        $self = {
+                  DO_ENABLED      => 0,  # Enable/Disable DO instruction. Which could evaluated potentially be an doom execute destruction.
+                  ANONS_ARE_PUBLIC=> 1,  # Anon's are shared and global for all of instances of this object, by default.
+                  ENABLE_WARNINGS => 1,  # Disable this one, and you will stare into the void, about errors or operations skipped.
+                  STRICT          => 1,  # Enable/Disable strict processing to FATAL on errors, this throws and halts parsing on errors.
+                  HAS_EXTENSIONS  => 0,  # Enable/Disable extension of custom instructions. These is disabled by default and ingored.
+                  DEBUG           => 0,  # Not internally used by the parser, but possible a convienince bypass setting for code using it.
+                  CNF_CONTENT     => "", # Origin of the script, this will be set by the parser, usually the path of a script file or is direct content.
+                  RUN_PROCESSORS  => 1,  # When enabled post parse processors are run, are these outside of the scope of the parsers executions.
+        };
+    }
+    $CONSTREQ = $self->{CONSTANT_REQUIRED};
+    if (!$self->{ANONS_ARE_PUBLIC}){ #Not public, means are private to this object, that is, anons are not static.
+         $self->{ANONS_ARE_PUBLIC} = 0; #<- Caveat of Perl, if this is not set to zero, it can't be accessed legally in a protected hash.
+         $self->{__ANONS__} = {};
+    }
+    if(exists  $self->{'%LOG'}){
+        if(ref($self->{'%LOG'}) ne 'HASH'){
+            die '%LOG'. "passed attribute is not an hash reference."
+        }else{
+            $properties{'%LOG'} = $self->{'%LOG'}
+        }
+    }
+    $self->{STRICT}          = 1 if not exists $self->{STRICT}; #make strict by default if missing.
+    $self->{ENABLE_WARNINGS} = 1 if not exists $self->{ENABLE_WARNINGS};
+    $self->{HAS_EXTENSIONS}  = 0 if not exists $self->{HAS_EXTENSIONS};
+    $self->{RUN_PROCESSORS}  = 1 if not exists $self->{RUN_PROCESSORS}; #Bby default enabled, disable during script dev.
+    $self->{CNF_VERSION}     = VERSION;
+    $self->{__DATA__}        = {};
+    bless $self, $class; $self->parse($path, undef, $del_keys) if($path);
+    return $self;
+}
+#
+
+sub import {
+    my $caller = caller;    no strict "refs";
+    {
+        *{"${caller}::configDumpENV"}  = \&dumpENV;
+        *{"${caller}::anon"}           = \&anon;
+        *{"${caller}::SQL"}            = \&SQL;
+        *{"${caller}::isCNFTrue"}      = \&_isTrue;
+        *{"${caller}::now"}            = \&now;
+    }
+    return 1;
+}
+
+our $meta_has_priority  = meta_has_priority();
+our $meta_priority      = meta_priority();
+our $meta_on_demand     = meta_on_demand();
+###
+# The metaverse is that further this can be expanded,
+# to provide further dynamic meta processing of the property value of an anon.
+# When the future becomes life in anonymity, unknown variables best describe the meta state.
+##
+package META_PROCESS {
+    sub constance{
+         my($class, $set) = @_;
+        if(!$set){
+            $set =  {anonymous=>'*'}
+        }
+        bless $set, $class
+    }
+    sub process{
+        my($self, $property, $val) = @_;
+        if($self->{anonymous} ne '*'){
+           return  $self->{anonymous}($property,$val)
+        }
+        return $val;
+    }
+}
+use constant META => META_PROCESS->constance();
+use constant META_TO_JSON => META_PROCESS->constance({anonymous=>*_to_JSON});
+sub _to_JSON {
+my($property, $val) = @_;
+return <<__JSON
+{"$property"="$val"}
+__JSON
+}
+###
+# Check a value if it is CNFPerl boolean true.
+# For isFalse just negate check with not, as undef is concidered false or 0.
+##
+sub _isTrue{
+    my $value = shift;
+    return 0 if(not $value);
+    return ($value =~ /1|true|yes|on/i)
+}
+###
+# Post parsing instructed special item objects. They have lower priority to Order of apperance and from CNFNodes.
+##
+package InstructedDataItem {
+
+    our $dataItemCounter   = int(0);
+
+    sub new { my ($class, $ele, $ins, $val) = @_;
+        my $priority = ($val =~ s/$meta_has_priority/""/sexi)?2:3; $val =~ s/$meta_priority/""/sexi;
+           $priority = $2 if $2;
+        bless {
+                ele => $ele,
+                aid => $dataItemCounter++,
+                ins => $ins,
+                val => $val,
+                '^' => $priority
+        }, $class
+    }
+    sub toString {
+        my $self = shift;
+        return "<<".$self->{ele}."<".$self->{ins}.">".$self->{val}.">>"
+    }
+}
+#
+
+###
+# PropertyValueStyle objects must have same rule of how a property body can be scripted for attributes.
+##
+package PropertyValueStyle {
+
+    sub new {
+        my ($class, $element, $script, $self) =  @_;
+        $self = {} if not $self;
+        $self->{element}=$element;
+        if($script){
+            my ($p,$v);
+            foreach my $itm($script=~/\s*(\w*)\s*[:=]\s*(.*)\s*/gm){
+                if($itm){
+                    if(!$p){
+                        $p = $itm;
+                    }else{
+                        $itm =~ s/^\s*(['"])(.*)\g{1}$/$2/g if $itm;
+                        $self->{$p}=$itm;
+                        undef $p;
+                    }
+                }
+            }
+        }else{
+            warn "PropertyValue process what?"
+        }
+        bless $self, $class
+    }
+    sub setPlugin{
+        my ($self, $obj) =  @_;
+        $self->{plugin} = $obj;
+    }
+    sub result {
+        my ($self, $value) =  @_;
+        $self->{value} = $value;
+    }
+}
+#
+
+###
+# Anon properties are public variables. Constance's are protected and instance specific, both config file provided (parsed in).
+# Anon properties of an config instance are global by default, means they can also be statically accessed, i.e. CNFParser::anon(NAME)
+# They can be; and are only dynamically set via the config instance directly.
+# That is, if it has the ANONS_ARE_PUBLIC property set, and by using the empty method of anon() with no arguments.
+# i.e. ${CNFParser->new()->anon()}{'MyDynamicAnon'} = 'something';
+# However a private config instance, will have its own anon's. And could be read only if it exist as a property, via this anon(NAME) method.
+# This hasn't been yet fully specified in the PerlCNF specs.
+# i.e. ${CNFParser->new({ANONS_ARE_PUBLIC=>0})->anon('MyDynamicAnon') # <-- Will not be available.
+##
+sub anon {  my ($self, $n, $args)=@_;
+    my $anechoic = \%ANONS;
+    if(ref($self) ne 'CNFParser'){
+        $n = $self;
+    }elsif (not $self->{'ANONS_ARE_PUBLIC'}){
+        $anechoic = $self->{'__ANONS__'};
+    }
+    if($n){
+        my $ret = %$anechoic{$n};
+        return if !$ret;
+        if($args){
+            my $ref = ref($args);
+            if($ref eq 'META_PROCESS'){
+                my @arr = ($ret =~ m/(\$\$\$.+?\$\$\$)/gm);
+                foreach my $find(@arr) {# <- MACRO TAG translate. ->
+                        my $s= $find; $s =~ s/^\$\$\$|\$\$\$$//g;#
+                        my $r = %$anechoic{$s};
+                        if(!$r && exists $self->{$s}){#fallback to maybe constant property has been seek'd?
+                            $r = $self->{$s};
+                        }
+                        if(!$r){
+                            warn "Unable to find property to translate macro expansion: $n -> $find\n"
+                                 unless $self and not $self->{ENABLE_WARNINGS}
+                        }else{
+                            $ret =~ s/\Q$find\E/$r/g;
+                        }
+                }
+                $ret = $args->process($n,$ret);
+
+            }elsif($ref eq 'HASHREF'){
+                foreach my $key(keys %$args){
+                    if($ret =~ m/\$\$\$$key\$\$\$/g){
+                       my $val = %$args{$key};
+                       $ret =~ s/\$\$\$$key\$\$\$/$val/g;
+                    }
+                }
+            }elsif($ref eq 'ARRAY'){  #we rather have argument passed as an proper array then a list with perl
+                my $cnt = 1;
+                foreach(@$args){
+                    $ret =~ s/\$\$\$$cnt\$\$\$/$_/g;
+                    $cnt++;
+                }
+            }else{
+                my $val =  %$anechoic{$args};
+                $ret =~ s/\$\$\$$args\$\$\$/$val/g;
+                warn "Scalar argument passed $args, did you mean array to pass? For property $n=$ret\n"
+                                 unless $self and not $self->{ENABLE_WARNINGS}
+            }
+        }
+        my $ref = ref($ret);
+        return $$ret if $ref eq "REF";
+        return $ret->val() if $ref eq "CNFNode";
+        return $ret;
+    }
+    return $anechoic;
+}
+
+###
+# Validates and returns a constant named value as part of this configs instance.
+# Returns undef if it doesn't exist, and exception if constance required is set;
+sub const { my ($self,$c)=@_;
+    return  $self->{$c} if exists $self->{$c};
+    CNFParserException->throw("Required constants variable ' $c ' not defined in config!") if $CONSTREQ;
+    return;
+}
+
+###
+# Collections are global, Reason for this is that any number of subsequent files parsed,
+# might contain properties that overwrite previous existing ones.
+# Or require ones that don't include, and expecting them to be there.
+# This overwritting can be erronous, but also is not expected to be very common to happen.
+# Following method, provides direct access to the properties, this method shouldn't be used in general.
+sub collections {\%properties}
+
+#@Deprecated use property subroutine instead.
+sub collection {
+return property(@_);
+}
+###
+# Collection now returns the contained type dereferenced and is concidered a property.
+# Make sure you use the appropriate Perl type on the receiving end.
+# Note, if properties contain any scalar key entry, it sure hasn't been set by this parser.
+#
+sub property { my($self, $name) = @_;
+    if(exists($properties{$name})){
+       my $ret = $properties{$name};
+       my $ref = ref($ret);
+       if($ref eq 'ARRAY'){
+          return  @{$ret}
+       }elsif($ref eq 'PropertyValueStyle'){
+          return $ret;
+       }
+       else{
+          return  %{$ret}
+       }
+    }
+    return %properties{$name}
+}
+
+sub data {return shift->{'__DATA__'}}
+
+sub listDelimit {
+    my ($this, $d , $t)=@_;
+    my @p = @{$lists{$t}};
+    if(@p&&$d){
+    my @ret = ();
+    foreach (@p){
+        my @s = split $d, $_;
+        push @ret, @s;
+    }
+    $lists{$t}=\@ret;
+    return @{$lists{$t}};
+    }
+    return;
+}
+sub lists {\%lists}
+sub list  {
+        my $t=shift;if(@_ > 0){$t=shift;}
+        my $an = $lists{$t};
+        return @{$an} if defined $an;
+        die "Error: List name '$t' not found!"
+}
+
+# Adds a list of environment expected list of variables.
+# This is optional and ideally to be called before parse.
+# Requires and array of variables to be passed.
+sub addENVList { my ($self, @vars) = @_;
+    if(@vars){
+        foreach my $var(@vars){
+            next if $self->{$var};##exists already.
+            if((index $var,0)=='$'){#then constant otherwise anon
+                $self->{$var} = $ENV{$var};
+            }
+            else{
+                anon()->{$var} = $ENV{$var};
+            }
+        }
+    }return;
+}
+
+###
+# Perform a macro replacement on tagged strings in a property value.
+##
+sub template { my ($self, $property, %macros) = @_;
+    my $val = $self->anon($property);
+    if($val){
+       foreach my $m(keys %macros){
+           my $v = $macros{$m};
+           $m ="\\\$\\\$\\\$".$m."\\\$\\\$\\\$";
+           $val =~ s/$m/$v/gs;
+       }
+       my $prev;
+       foreach my $m(split(/\$\$\$/,$val)){
+           if(!$prev){
+               $prev = $m;
+               next;
+           }
+           undef $prev;
+           my $pv = $self->anon($m);
+           if(!$pv && exists $self->{$m}){
+               $pv =  $self->{$m}#constant($self, '$'.$m);
+           }
+           if($pv){
+               $m = "\\\$\\\$\\\$".$m."\\\$\\\$\\\$";
+               $val =~ s/$m/$pv/gs;
+           }
+       }
+       return $val;
+    }
+}
+#
+
+#private to parser sub.
+sub doInstruction { my ($self,$e,$t,$v) = @_;
+
+    my $DO_ENABLED = $self->{'DO_ENABLED'};  my $priority = 0;
+    $t = "" if not defined $t;
+
+    if($t eq 'CONST' or $t eq 'CONSTANT'){#Single constant with mulit-line value;
+        # It is NOT allowed to overwrite constant.
+        if (not $self->{$e}){
+            $v =~ s/^\s//;
+            $self->{$e} = $v;
+        }else{
+            warn "Skipped constant detected assignment for '$e'.";
+        }
+    }
+    elsif($t eq 'VAR' or $t eq 'VARIABLE'){
+        $v =~ s/^\s//;
+        $anons->{$e} = $v;
+    }
+    elsif($t eq 'DATA'){
+        $v=~ s/^\n//;
+        foreach(split /~\n/,$v){
+            my @a;
+            $_ =~ s/\\`/\\f/g;#We escape to form feed  the found 'escaped' backtick so can be used as text.
+            foreach my $d (split /`/, $_){
+                $d =~ s/\\f/`/g; #escape back form feed to backtick.
+                $d =~ s/~$//; #strip dangling ~ if there was no \n
+                $t = substr $d, 0, 1;
+                if($t eq '$'){
+                    $v =  $d;            #capture specked value.
+                    $d =~ s/\$$|\s*$//g; #trim any space and system or constant '$' end marker.
+                    if($v=~m/\$$/){
+                        $v = $self->{$d}; $v="" if not $v;
+                    }
+                    else{
+                        $v = $d;
+                    }
+                    push @a, $v;
+                }
+                else{
+                    if($t =~ /^\#(.*)/) {#First is usually ID a number and also '#' signifies number.
+                        $d = $1;#substr $d, 1;
+                        $d=0 if !$d; #default to 0 if not specified.
+                        push @a, $d
+                    }
+                    else{
+                        push @a, $d;
+                    }
+                }
+            }
+
+            my $existing = $self->{'__DATA__'}{$e};
+            if(defined $existing){
+                my @rows = @$existing;
+                push @rows, [@a] if scalar @a >0;
+                $self->{'__DATA__'}{$e} = \@rows
+            }else{
+                my @rows; push @rows, [@a];
+                $self->{'__DATA__'}{$e} = \@rows if scalar @a >0;
+            }
+        }
+
+    }elsif($t eq 'DATE'){
+        if($v && $v !~ /now|today/i){
+           $v =~ s/^\s//;
+           if($self->{STRICT}&&$v!~/^\d\d\d\d-\d\d-\d\d/){
+              $self-> warn("Invalid date format: $v expecting -> YYYY-MM-DD at start as possibility of  DD-MM-YYYY or MM-DD-YYYY is ambiguous.")
+           }
+           $v = CNFDateTime::_toCNFDate($v,$self->{'TZ'});
+
+        }else{
+           $v = CNFDateTime->new(TZ=>$self->{'TZ'});
+        }
+       $anons->{$e} = $v;
+    }elsif($t eq 'FILE'){#@TODO Test case this
+        my ($i,$path,$cnf_file) = (0,"",$self->{CNF_CONTENT});
+        $v=~s/\s+//g;
+        $path = substr($path, 0, rindex($cnf_file,'/')) .'/'.$v;
+        push @files, $path;
+        next if !$self->{'$AUTOLOAD_DATA_FILES'};
+        open(my $fh, "<:perlio", $path ) or  CNFParserException->throw("Can't open $path -> $!");
+            read $fh, my $content, -s $fh;
+        close   $fh;
+        my @tags = ($content =~ m/<<(\w*<(.*?).*?>>)/gs);
+        foreach my $tag (@tags){
+            next if not $tag;
+            my @kv = split /</,$tag;
+            $e = $kv[0];
+            $t = $kv[1];
+            $i = index $t, "\n";
+            if($i==-1){
+                $t = $v = substr $t, 0, (rindex $t, ">>");
+            }
+            else{
+                $v = substr $t, $i+1, (rindex $t, ">>")-($i+1);
+                $t = substr $t, 0, $i;
+            }
+            if($t eq 'DATA'){
+                foreach(split /~\n/,$v){
+                    my @a;
+                    $_ =~ s/\\`/\\f/g;#We escape to form feed  the found 'escaped' backtick so can be used as text.
+                    foreach my $d (split(/`/, $_)){
+                        $d =~ s/\\f/`/g; #escape back form feed to backtick.
+                        $t = substr $d, 0, 1;
+                        if($t eq '$'){
+                            $v =  $d;            #capture spected value.
+                            $d =~ s/\$$|\s*$//g; #trim any space and system or constant '$' end marker.
+                            if($v=~m/\$$/){
+                               $v = $self->{$d}; $v="" if not $v;
+                            }
+                            else{
+                                $v = $d;
+                            }
+                            push @a, $v;
+                        }
+                        else{
+                            if($t =~ /^\#(.*)/) {#First is usually ID a number and also '#' signifies number.
+                                $d = $1;#substr $d, 1;
+                                $d=0 if !$d; #default to 0 if not specified.
+                                push @a, $d
+                            }
+                            else{
+                            push @a, $d;
+                            }
+                        }
+                        my $existing = $self->{'__DATA__'}{$e};
+                        if(defined $existing){
+                                my @rows = @$existing;
+                                push @rows, [@a] if scalar @a >0;
+                                $self->{'__DATA__'}{$e} = \@rows
+                        }else{
+                                my @rows; push @rows, [@a];
+                                $self->{'__DATA__'}{$e} = \@rows if scalar @a >0;
+                        }
+                    }
+                }
+            }
+        }
+    }elsif($t eq 'INCLUDE'){
+            $includes{$e} = {loaded=>0,path=>$e,v=>$v};
+    }elsif($t eq 'TREE'){
+        my  $tree = 0;
+        if (!$v){
+                $v = $e;
+                $e = 'LAST_DO';
+        }
+        if( $v =~ s/($meta_has_priority)/""/ei){
+            $priority = 1;
+        }
+        if( $v =~ s/$meta_priority/""/sexi){
+            $priority = $2;
+        }
+            $tree = CNFNode->new({'_'=>$e,'~'=>$v,'^'=>$priority});
+            $tree->{DEBUG} = 1 if $self->{DEBUG};
+            $instructs{$e} = $tree;
+    }elsif($t eq 'TABLE'){           # This has now be late bound and send to the CNFSQL package. since v.2.6
+        SQL()->createTable($e,$v) }  # It is hardly been used. But in future this might change.
+        elsif($t eq 'INDEX'){ SQL()->createIndex($v)}
+            elsif($t eq 'VIEW'){ SQL()->createView($e,$v)}
+                elsif($t eq 'SQL'){ SQL($e,$v)}
+                    elsif($t eq 'MIGRATE'){SQL()->migrate($e, $v)
+    }
+    elsif($t eq 'DO'){
+        if($DO_ENABLED){
+            my $ret;
+            if (!$v){
+                 $v = $e;
+                 $e = 'LAST_DO';
+            }
+            if( $v =~ s/($meta_has_priority)/""/ei){
+                $priority = 1;
+            }
+            if( $v =~ s/($meta_priority)/""/sexi){
+                $priority = $2;
+            }
+            if($v=~ s/($meta_on_demand)/""/ei){
+               $anons->{$e} = CNFNode -> new({'_'=>$e,'&'=>$v,'^'=>$priority});
+               return;
+            }
+            ## no critic BuiltinFunctions::ProhibitStringyEval
+               $ret = eval $v if not $ret;
+            ## use critic
+             if ($ret){
+                 chomp $ret;
+                 $anons->{$e} = $ret;
+             }else{
+                 $self->warn("Perl DO_ENABLED script evaluation failed to evalute: $e Error: $@");
+                 $anons->{$e} = '<<ERROR>>';
+             }
+        }else{
+            $self->warn("DO_ENABLED is set to false to process property: $e\n")
+        }
+    }elsif($t eq 'LIB'){
+        if($DO_ENABLED){
+            if (!$v){
+                 $v = $e;
+                 $e = 'LAST_LIB';
+            }
+            try{
+                use Module::Load;
+                autoload $v;
+                $v =~ s/^(.*\/)*|(\..*)$//g;
+                $anons->{$e} = $v;
+            }catch{
+                    $self->warn("Module DO_ENABLED library failed to load: $v\n");
+                    $anons->{$e} = '<<ERROR>>';
+            }
+        }else{
+            $self->warn("DO_ENABLED is set to false to process a LIB property: $e\n");
+            $anons->{$e} = '<<ERROR>>';
+        }
+    }
+    elsif($t eq 'PLUGIN'){
+        if($DO_ENABLED){
+            $instructs{$e} = InstructedDataItem -> new($e, 'PLUGIN', $v);
+        }else{
+            $self->warn("DO_ENABLED is set to false to process following plugin: $e\n")
+        }
+    }
+    elsif($t eq 'PROCESSOR'){
+        if(not $self->registerProcessor($e, $v)){
+            CNFParserException->throw("PostParseProcessor Registration Failed for '<<$e<$t>$v>>'!\t");
+        }
+    }
+    elsif($t eq 'INSTRUCTOR'){
+        if(not $self->registerInstructor($e, $v) && $self->{STRICT}){
+            CNFParserException->throw("Instruction Registration Failed for '<<$e<$t>$v>>'!\t");
+        }
+    }
+    elsif($t eq 'MACRO'){
+        $instructs{$e}=$v;
+    }
+    elsif(exists $instructors{$t}){
+        if(not $instructors{$t}->instruct($e, $v) && $self->{STRICT}){
+            CNFParserException->throw("Instruction processing failed for '<<$e<$t>>'!\t");
+        }
+    }
+    else{
+        #Register application statement as either an anonymous one. Or since v.1.2 a listing type tag.
+        if($e !~ /\$\$$/){ #<- It is not matching {name}$$ here.
+            if($self->{'HAS_EXTENSIONS'}){
+                $anons->{$e} = InstructedDataItem->new($e,$t,$v)
+            }else{
+                $v = $t if not $v;
+                if($e=~/^\$/){
+                    $self->{$e}  = $v if !$self->{$e}; # Not allowed to overwrite constant.
+                }else{
+                    $anons->{$e} = $v
+                }
+            }
+        }
+        else{
+            $e = substr $e, 0, (rindex $e, '$$');
+            # Following is confusing as hell. We look to store in the hash an array reference.
+            # But must convert back and fort via an scalar, since actual arrays returned from an hash are references in perl.
+            my $array = $lists{$e};
+            if(!$array){$array=();$lists{$e} = \@{$array};}
+            push @{$array}, $v;
+        }
+    }
+}
+
+###
+# Parses a CNF file or a text content if specified, for this configuration object.
+##
+sub parse {  my ($self, $cnf_file, $content, $del_keys) = @_;
+
+    my @tags;
+    if($self->{'ANONS_ARE_PUBLIC'}){
+       $anons = \%ANONS;
+    }else{
+       $anons = $self->{'__ANONS__'};
+    }
+    #private %includes; for now we keep on possible multiple calls to parse.
+    #private instructs on this parse call.
+    %instructs = ();
+
+    # We control from here the constances, as we need to unlock them if previous parse was run.
+    unlock_hash(%$self);
+
+    if(not $content){
+        open(my $fh, "<:perlio", $cnf_file )  or  die "Can't open $cnf_file -> $!";
+        read $fh, $content, -s $fh;
+        close $fh;
+        my @stat = stat($cnf_file);
+        $self->{CNF_STAT}    = \@stat;
+        $self->{CNF_CONTENT} = $cnf_file;
+    }else{
+        my $type =Scalar::Util::reftype($content);
+        if($type && $type eq 'ARRAY'){
+           $content = join  "",@$content;
+           $self->{CNF_CONTENT} = 'ARRAY';
+        }else{$self->{CNF_CONTENT} = 'script'};
+    }
+    $content =~ m/^\!(CNF\d+\.\d+)/;
+    my $CNF_VER = $1; $CNF_VER="Undefined!" if not $CNF_VER;
+    $self->{CNF_VERSION} = $CNF_VER if not defined $self->{CNF_VERSION};
+
+
+    my $spc =   $content =~ /\n/ ? '(<{2,3}?)(<*.*?>*)(>{2,3})' : '(<{2,3}?)(<*.*?>*?)(>{2,3})$';
+    @tags   =  ($content =~ m/$spc/gms);
+
+    foreach my $tag (@tags){
+         next if not $tag;
+      next if $tag =~ m/^(>+)|^(<<)/;
+      if($tag =~ m/^<(\w*)\s+(.*?)>*$/gs){ # Original fastest and early format: <<<anon value>>>
+           my $t = $1;
+           my $v = $2;
+           if(isReservedWord($self,$t)){
+              my $isVar = ($t eq 'VARIABLE' || $t eq 'VAR');
+              if($t eq 'CONST' or $isVar){ #constant multiple properties.
+                    foreach  my $line(split '\n', $v) {
+                            $line =~ s/^\s+|\s+$//;  # strip unwanted spaces
+                            $line =~ s/\s*>$//;
+                            $line =~ m/([\$\w]*)(\s*=\s*)(.*)/g;
+                            my $name = $1;
+                               $line = $3; $line =~ s/^\s*(['"])(.*)\g{1}$/$2/;#strip quotes
+                            if(defined $name){
+                                if($isVar){
+                                    $anons ->{$name} = $line if $line
+                                }else{
+                                  if($line and not $self->{$name}){# Not allowed to overwrite constant.
+                                    $self->{$name} = $line;
+                                  }else{
+                                        warn "Skipping and keeping previously set constance -> [$name] the new value ".
+                                        ($line eq $self->{$name})?"matches it":"dosean't match -> $line."
+                                  }
+                                }
+                            }
+                    }
+              }else{
+                doInstruction($self,$v,$t,undef);
+              }
+           }else{
+              $v =~ s/\s*>$//;
+              $anons->{$t} = $v;
+           }
+
+        }else{
+            #vars are e-element,t-token or instruction,v- for value, vv -array of the lot.
+            my ($e,$t,$v,@vv);
+
+            # Check if very old format and don't parse the data for old code compatibility to (still) do it.
+            # This is interesting, as a newer format file is expected to use the DATA instruction and final data specified script rules.
+            if($CNF_VER eq 'CNF2.2' && $tag =~ m/(\w+)\s*(<\d+>\s)\s*(.*\n)/mg){#It is old DATA format annon
+                  $e = $1;
+                  $t = $2;
+                  $v = substr($tag,length($e)+length($t));
+                  $anons->{$e} = $v;
+                  next;
+            }
+            # Before mauling into possible value types, let us go for the full expected tag specs first:
+            # <<{$sig}{name}<{INSTRUCTION}>{value\n...value\n}>>
+            # Found in -> <https://github.com/wbudic/PerlCNF//CNF_Specs.md>
+            if($tag !~ /\n/ && $tag =~ /^([@%\$\.\/\w]+)\s*([ <>]+)(\w*>)(.*)/) {
+                $e = $1;
+                $t = $2;
+                if($t =~ /^<\s*</){
+                   $v = substr $tag, length($e)+1;
+                   $v =~ s/>$// if $t ne '<<' && $tag =~ />$/
+                }else{
+                    $tag =~ m/([@%\$\.\/\w]+) ([ <>\n|^\\]{1})+ ([^<^>^^\n]+) ([<>]?) (.*)/gmxs;
+                         $t = $3;
+                         $v = $5;
+                }
+            }else{
+                                                #############################################################################
+                $tag =~ m/\s*([@%\$\.\/\w]+)\s* # The name.
+                                ([ <>\n])       # begin or close of instruction, where '\n' mark in script as instruction less.
+                                ([^<^>^^\n]+)   # instruction or value of anything
+                                    ([<>\n]?)   # close mark for instuction or is less if \n encountered before.
+                                    (.*)        # actual value is the rest.
+                                       (>$)*    # capture above value up to here from buffer, i.e. if comming from a >>> tag.
+                         /gmxs;                 ###############################################################################
+
+                $e =$1;
+                if($e eq '@' or $2 eq '<' or ($2 eq '>' and !$4)){
+                $t = $3;
+                }else{
+                $t = $1;
+                $e = $3
+                }
+                $v= $5;
+                $v =~ s/>$//m if defined($4) && $4 eq '<' or $6; #value has been crammed into an instruction?
+
+            }
+            if(!$v && !$RESERVED_WORDS{$t}){
+                $v= $t;
+            }
+            $v =~ s/\\</</g; $v =~ s/\\>/>/g;# escaped brackets from v.2.8.
+
+            #Do we have an autonumbered instructed list?
+            #DATA best instructions are exempted and differently handled by existing to only one uniquely named property.
+            #So its name can't be autonumbered.
+            if ($e =~ /(.*?)\$\$$/){
+                $e = $1;
+                if($t && $t ne 'DATA'){
+                   my $array = $lists{$e};
+                   if(!$array){$array=();$lists{$e} = \@{$array};}
+                   push @{$array}, InstructedDataItem -> new($e, $t, $v);
+                   next
+                }
+            }elsif ($e eq '@'){#collection processing.
+                my $isArray = $t=~ m/^@/;
+                # if(!$v && $t =~ m/(.*)>(\s*.*\s*)/gms){
+                #     $t = $1;
+                #     $v = $2;
+                # }
+                my @lst = ($isArray?split(/[,\n]/, $v):split('\n', $v)); $_="";
+                my @props = map {
+                        s/^\s+|\s+$//;   # strip unwanted spaces
+                        s/^\s*["']|['"]$//g;#strip quotes
+                        #s/>+//;# strip dangling CNF tag
+                        $_ ? $_ : undef   # return the modified string
+                    } @lst;
+                if($isArray){
+                    if($self->isReservedWord($t)){
+                        $self->warn("ERROR collection is trying to use a reserved property name -> $t.");
+                        next
+                    }else{
+                            my @arr=();
+                            foreach  (@props){
+                                push @arr, $_ if($_ && length($_)>0);
+                            }
+                            $properties{$t}=\@arr;
+                    }
+                }else{
+                    my %hsh;
+                    my $macro = 0;
+                    if(exists($properties{$t})){
+                        if($self->isReservedWord($t)){
+                            $self->warn("Skipped overwritting reserved property -> $t.");
+                            next
+                        }else{
+                            %hsh =  %{$properties{$t}}
+                        }
+                    }else{
+                       %hsh =();
+                    }
+                    foreach  my $p(@props){
+                        if($p && $p eq 'MACRO'){$macro=1}
+                        elsif( $p && length($p)>0 ){
+                            my @pair = ($p=~/\s*([-+_\w]*)\s*[=:]\s*(.*)/s);#split(/\s*=\s*/, $p);
+                            next if (@pair != 2 || $pair[0] =~ m/^[#\\\/]+/m);#skip, it is a comment or not '=' delimited line.
+                            my $name  = $pair[0];
+                            my $value = $pair[1]; $value =~ s/^\s*["']|['"]$//g;#strip quotes
+                            if($macro){
+                                my @arr = ($value =~ m/(\$\$\$.+?\$\$\$)/gm);
+                                foreach my $find(@arr) {
+                                    my $s = $find; $s =~ s/^\$\$\$|\$\$\$$//g;
+                                    my $r = $anons->{$s};
+                                    $r = $self->{$s} if !$r;
+                                    $r = $instructs{$s} if !$r;
+                                    CNFParserException->throw(error=>"Unable to find property for $t.$name -> $find\n",show_trace=>1) if !$r;
+                                    $value =~ s/\Q$find\E/$r/g;
+                                }
+                            }
+                            $hsh{$name}=$value;  $self->log("macro $t.$name->$value\n") if $self->{DEBUG}
+                        }
+                    }
+                    $properties{$t}=\%hsh;
+                }
+                next;
+            }
+            doInstruction($self,$e,$t,$v)
+        }
+       }
+    ###  Do the smart instructions and property linking.
+    if(%instructs){
+        my @items;
+        foreach my $e(keys %instructs){
+            my $struct = $instructs{$e};
+            my $type =  ref($struct);
+           if($type eq 'String'){
+                my $v = $struct;
+                my @arr = ($v =~ m/(\$\$\$.+?\$\$\$)/gm);
+                foreach my $find(@arr) {# <- MACRO TAG translate. ->
+                        my $s= $find; $s =~ s/^\$\$\$|\$\$\$$//g;#
+                        my $r = %$anons{$s};
+                        $r = $self->{$s} if !$r;
+                        if(!$r){
+                            $self->warn("Unable to find property to translate macro expansion: $e -> $find\n");
+                        }else{
+                            $v =~ s/\Q$find\E/$r/g;
+                        }
+                }
+                $anons->{$e}=$v;
+            }else{
+                $items[@items] = $struct;
+            }
+        }
+
+        @items =  sort {$a->{'^'} <=> $b->{'^'}} @items; #sort by priority;
+
+        for my $idx(0..$#items) {
+            my $struct = $items[$idx];
+            my $type =  ref($struct);
+            if($type eq 'CNFNode' && $struct-> priority() > 0){
+               $struct->validate() if $self->{ENABLE_WARNINGS};
+               $anons ->{$struct->name()} = $struct->process($self, $struct->script());
+               splice @items, $idx, 1
+            }
+        }
+        #Now only what is left instructed data items or plugins, and nodes that have assigned last priority, if any.
+        for my $idx(0..$#items) {
+            my $struct = $items[$idx];
+            my $type =  ref($struct);
+            if($type eq 'CNFNode'){
+               $struct->validate() if $self->{ENABLE_WARNINGS};
+               $anons->{$struct->name()} = $struct->process($self, $struct->script());
+            }elsif($type eq 'InstructedDataItem'){
+                my $t = $struct->{ins};
+                if($t eq 'PLUGIN'){
+                   instructPlugin($self,$struct,$anons);
+                }
+            }else{warn "What is -> $struct type:$type ?"}
+        }
+        undef %instructs;
+    }
+    #Do scripted includes.
+    my @inc = sort values %includes;
+    $includes{$0} = {loaded=>1, path=>$self->{CNF_CONTENT}}; #<- to prevent circular includes.
+    foreach my $file(@inc){
+        if(!$file->{loaded} && $file->{path} ne $self->{CNF_CONTENT}){
+           if(open(my $fh, "<:perlio", $file->{path} )){
+                read $fh, $content, -s $fh;
+              close   $fh;
+              if($content){
+                 $file->{loaded} = 1;
+                 $self->parse(undef, $content)
+              }else{
+                 $self->error("Include content is blank for -> ".$file->{path})
+              }
+            }else{
+                 CNFParserException->throw("Can't open ".$file->{path}." -> $!") if $self->{STRICT};
+                 $file->{loaded} = 0;
+                 $self->error("Script include not available -> ".$file->{path})
+            }
+        }
+    }
+    foreach my $k(@$del_keys){
+        delete $self->{$k} if exists $self->{$k}
+    }
+    my $runProcessors = $self->{RUN_PROCESSORS} ? 1: 0;
+    lock_hash(%$self);#Make repository finally immutable.
+    runPostParseProcessors($self) if $runProcessors;
+    return $self
+}
+#
+
+sub instructPlugin {
+    my ($self, $struct, $anons) = @_;
+    try{
+        $properties{$struct->{'ele'}} = doPlugin($self, $struct, $anons);
+        $self->log("Plugin instructed ->". $struct->{'ele'});
+    }catch($e){
+        if($self->{STRICT}){
+            CNFParserException->throw(error=>$e);
+        }else{
+            $self->trace("Error @ Plugin -> ". $struct->toString() ." Error-> $@")
+        }
+    }
+}
+#
+
+###
+# Register Instructor on tag and value for to be externally processed.
+# $package  - Is the anonymouse package name.
+# $body     - Contains attribute(s) linking to method(s) to be registered.
+# @TODO Current Under development.
+###
+sub registerInstructor {
+    my ($self, $package, $body) = @_;
+    $body =~ s/^\s*|\s*$//g;
+    my ($obj, %args, $ins, $mth);
+    foreach my $ln(split(/\n/,$body)){
+            my @pair = $ln =~ /\s*(\w+)[:=](.*)\s*/;
+            $ins  = $1; $ins = $ln if !$ins;
+            $mth  = $2;
+            if($ins =~ /[a-z]/i){
+               $args{$ins} = $mth;
+            }
+    }
+    if(exists $instructors{$ins}){
+       $self -> error("$package<$ins> <- Instruction has been previously registered by: ".ref(${$instructors{$ins}}));
+       return;
+    }else{
+
+        foreach(values %instructors){
+            if(ref($$_) eq $package){
+                $obj = $_; last
+            }
+        }
+
+        if(!$obj){
+            ## no critic (RequireBarewordIncludes)
+            require $package.'.pm';
+            my $methods =   Class::Inspector->methods($package, 'full', 'public');
+            my ($has_new,$has_instruct);
+            foreach(@$methods){
+                $has_new      = 1 if $_ eq "$package\::new";
+                $has_instruct = 1 if $_ eq "$package\::instruct";
+            }
+            if(!$has_new){
+                $self -> log("ERR $package<$ins> -> new() method not found for package.");
+                return;
+            }
+            if(!$has_instruct){
+                $self -> log("ERR $package<$ins> -> instruct() required method not found for package.");
+                return;
+            }
+            $obj = $package -> new(\%args);
+        }
+        $instructors{$ins} = \$obj
+    }
+    return \$obj;
+}
+#
+
+###
+# Register PostParseProcessor for further externally processing.
+# $package  - Is the anonymouse package name.
+# $body     - Contains attribute(s) where function is the most required one.
+###
+sub registerProcessor {
+    my ($self, $package, $body) = @_;
+        $body =~ s/^\s*|\s*$//g if $body;
+    my ($obj, %args, $ins, $mth, $func);
+    foreach my $ln(split(/\n/,$body)){
+            my @pair = $ln =~ /\s*(\w+)[:=](.*)\s*/;
+            $ins  = $1; $ins = $ln if !$ins;
+            $mth  = $2;
+            if($ins =~ /^func\w*/){
+               $func = $mth
+            }
+            elsif($ins =~ /[a-z]/i){
+               $args{$ins} = $mth
+            }
+    }
+    $func = $ins if !$func;
+    if(!$func){
+         $self -> log("ERR <<$package<$body>> function attribute not found set.");
+        return;
+    }
+    ## no critic (RequireBarewordIncludes)
+    require $package.'.pm';
+    my $methods =   Class::Inspector->methods($package, 'full', 'public');
+    my ($has_new,$has_func);
+    foreach(@$methods){
+        $has_new  = 1 if $_ eq "$package\::new";
+        $has_func = 1 if $_ eq "$package\::$func";
+    }
+    if(!$has_new){
+        $self -> log("ERR In package $package -> new() method not found for package.");
+        return;
+    }
+    if(!$has_func){
+        $self -> log("ERR In package $package -> $func(\$parser) required method not found for package.");
+        return;
+    }
+    $obj = $package -> new(\%args);
+    $self->addPostParseProcessor($obj,$func);
+    return 1;
+}
+
+sub addPostParseProcessor {
+    my $self = shift;
+    my $processor = shift;
+    my $func = shift;
+    my @arr;
+    my $arf = $self->{POSTParseProcessors} if exists $self->{POSTParseProcessors};
+    @arr = @$arf if $arf;
+    $arr[@arr] =  [$processor, $func];
+    $self->{POSTParseProcessors} = \@arr;
+}
+
+sub runPostParseProcessors {
+    my $self = shift;
+    my $arr = $self->{POSTParseProcessors} if exists $self->{POSTParseProcessors};
+    foreach(@$arr){
+        my @objdts =@$_;
+        my $prc  = $objdts[0];
+        my $func = $objdts[1];
+        $prc -> $func($self);
+    }
+}
+
+#
+
+###
+# Setup and pass to pluging CNF functionality.
+# @TODO Current Under development.
+###
+sub doPlugin {
+    my ($self, $struct, $anons) = @_;
+    my ($elem, $script) = ($struct->{'ele'}, $struct->{'val'});
+    my $plugin = PropertyValueStyle->new($elem, $script);
+    my $pck = $plugin->{package};
+    my $prp = $plugin->{property};
+    my $sub = $plugin->{subroutine};
+    if($pck && $prp && $sub){
+        ## no critic (RequireBarewordIncludes)
+        require "$pck.pm";
+        #Properties are global, all plugins share a %Settings property if specifed, otherwise the default will be set from here only.
+        my $settings = $properties{'%Settings'};
+        if($settings){
+           foreach(keys %$settings){
+                #We allow for now, the plugin have settings set by its property, do not overwrite if exists as set.
+                $plugin->{$_} =  $settings->{$_} unless exists $plugin->{$_}
+           } ;
+        }
+        my $obj = $pck->new($plugin);
+        my $res = $obj-> $sub($self, $prp);
+        if($res){
+           $plugin->setPlugin($obj);
+           return $plugin;
+        }else{
+            die "Sorry, the PLUGIN feature has not been Implemented Yet!"
+        }
+    }
+    else{
+        die qq(Invalid plugin encountered '$elem' in "). $self->{'CNF_CONTENT'} .qq(
+        Plugin must have attributes -> 'package', 'property' and 'subroutine')
+    }
+}
+
+###
+# Generic CNF Link utility on this repository.
+##
+sub obtainLink {
+    my ($self,$link, $ret) = @_;
+    my $meths;
+    ## no critic BuiltinFunctions::ProhibitStringyEval
+    no strict 'refs';
+    if($link =~/(\w*)::\w+$/){
+        use Module::Loaded qw(is_loaded);
+        if(is_loaded($1)){
+           $ret = \&{+$link}($self);
+        }else{
+           eval require "$1.pm";
+           $ret = &{+$link};
+           if(!$ret){
+            $self->error( qq(Package  constance link -> $link is not available (try to place in main:: package with -> 'use $1;')));
+            $ret = $link
+           }
+        }
+    }else{
+        $ret = $self->anon($link);
+        $ret = $self-> {$link} if !$ret;
+    }
+    return $ret;
+}
+
+###
+# Writes out to a handle an CNF property or this parsers constance's as default property.
+# i.e. new CNFParser()->writeOut(*STDOUT);
+sub writeOut { my ($self, $handle, $property) = @_;
+    my $buffer;
+    if(!$property){
+        my @keys = sort keys %$self;
+        $buffer = "<<<CONST\n";
+        my $with = 5;
+        foreach (@keys){
+           my $len = length($_);
+           $with = $len + 1 if $len > $with
+        }
+        foreach my $key(@keys){
+            my $spc = $with - length($key);
+            my $val = $self->{$key};
+            next if(ref($val) =~ /ARRAY|HASH/); #we write out only what is scriptable.
+            if(!$val){
+                if($key =~ /^is|^use|^bln|enabled$/i){
+                   $val = 0
+                }else{
+                   $val = "\"\""
+                }
+            }
+            elsif #Future versions of CNF will account also for multiline values for property attributes.
+            ($val =~ /\n/){
+                $val = "<#<\n$val>#>"
+            }
+            elsif($val !~ /^\d+/){
+                $val = "\"$val\""
+            }
+            $buffer .= ' 'x$spc. $key .  " = $val\n";
+        }
+        $buffer .= ">>";
+        return $buffer if !$handle;
+        print $handle $buffer;
+        return 1
+    }
+    my $prp = $properties{$property};
+    if($prp){
+        $buffer = "<<@<$property>\n";
+        if(ref $prp eq 'ARRAY') {
+            my @arr = sort keys @$prp; my $n=0;
+            foreach (@arr){
+                $buffer .= "\"$_\"";
+                if($arr[-1] ne $_){
+                   if($n++>5){
+                    $buffer .= "\n"; $n=0
+                   }else{
+                    $buffer .= ","
+                   }
+                }
+            }
+        }elsif(ref $prp eq 'HASH') {
+            my %hsh = %$prp;
+            my @keys = sort keys %hsh;
+            foreach my $key(@keys){
+                $buffer .= $key . "\t= \"". $hsh{$key} ."\"\n";
+            }
+        }
+        $buffer .= ">>\n";
+        return $buffer if !$handle;
+        print $handle $buffer;
+        return 1;
+    }
+    else{
+      $prp = $ANONS{$property};
+      $prp = $self->{$property} if !$prp;
+      if (!$prp){
+         $buffer = "<<ERROR<$property>Property not found!>>>\n"
+      }else{
+        $buffer = "<<$property><$prp>>\n";
+      }
+      return $buffer if !$handle;
+      print $handle $buffer;
+      return 0;
+    }
+}
+
+###
+# The following is a typical example of an log settings property.
+#
+# <<@<%LOG>
+#             file      = web_server.log
+#             # Should it mirror to console too?
+#             console   = 1
+#             # Disable/enable output to file at all?
+#             enabled   = 0
+#             # Tail size cut, set to 0 if no tail cutting is desired.
+#             tail      = 1000
+# >>
+###
+sub log {
+    my $self    = shift;
+       my $message = shift;
+    my $type    = shift; $type = "" if !$type;
+    my $isWarning = $type eq 'WARNG';
+    my $attach  = join @_; $message .= $attach if $attach;
+    my %log = $self -> property('%LOG');
+    my $time = exists $self->{'TZ'} ? CNFDateTime -> new(TZ=>$self->{'TZ'}) -> toTimestamp() :
+                                      CNFDateTime -> new()-> toTimestamp();
+
+    $message = "$type $message" if $isWarning;
+
+    if($message =~ /^ERROR/ || $isWarning){
+        warn  $time . " " .$message;
+    }
+    elsif(%log && $log{console}){
+        print $time . " " .$message ."\n"
+    }
+    if(%log && _isTrue($log{enabled}) && $message){
+        my $logfile  = $log{file};
+        my $tail_cnt = $log{tail};
+        if($logfile){
+                        open (my $fh, ">>", $logfile) or die $!;
+                        print $fh $time . " - " . $message ."\n";
+                        close $fh;
+                        if(_isTrue($log{tail}) && $tail_cnt){
+                            my $fh = File::ReadBackwards->new($logfile) or die $!;
+                            if($fh->{lines}>$tail_cnt){
+                                my $pos = do {
+                                    $fh->readline() for 1..$tail_cnt;
+                                    $fh->tell()
+                                };
+                                truncate($logfile, $pos) or die $!;
+                            }
+                        }
+        }
+    }
+    return $time . " " .$message;
+}
+sub error {
+    my $self    = shift;
+       my $message = shift;
+    $self->log("ERROR $message");
+}
+use Carp qw(cluck); #what the? I know...
+sub warn {
+    my $self    = shift;
+       my $message = shift;
+    if($self->{ENABLE_WARNINGS}){
+       $self -> log($message,'WARNG');
+    }
+}
+sub trace {
+    my $self    = shift;
+       my $message = shift;
+    my %log = $self -> property('%LOG');
+    if(%log){
+        $self -> log($message)
+    }else{
+        cluck $message
+    }
+}
+
+sub now {return CNFDateTime->new(shift)}
+
+sub dumpENV{
+    foreach (keys(%ENV)){print $_,"=", "\'".$ENV{$_}."\'", "\n"}
+}
+
+our $SQL;
+sub  SQL {
+    if(!$SQL){##It is late compiled on demand.
+        require CNFSQL; $SQL  = CNFSQL->new();
+    }
+    $SQL->addStatement(@_) if @_;
+    return $SQL;
+}
+our $JSON;
+sub  JSON {
+    my $self = shift;
+    if(!$JSON){
+        require CNFJSON;
+        $JSON = CNFJSON-> new({ CNF_VERSION=>$self->{CNF_VERSION},
+                                CNF_CONTENT=>$self->{CNF_CONTENT},
+                                DO_ENABLED =>$self->{DO_ENABLED}
+                              });
+    }
+    return $JSON;
+}
+
+###
+# CNFNodes are kept as anons by the TREE instruction, but these either could have been futher processed or
+# externaly assigned too as nodes to the parser.
+###
+our %NODES;
+sub addTree {
+    my ($self, $name, $node  )= @_;
+    if($name && $node){
+        $NODES{$name} = $node;
+    }
+}
+### Utility way to obtain CNFNodes from a configuration.
+sub getTree {
+    my ($self, $name) = @_;
+    return $NODES{$name} if exists $NODES{$name};
+    my $ret = $self->anon($name);
+    if(ref($ret) eq 'CNFNode'){
+        return \$ret;
+    }
+    return;
+}
+
+sub END {
+undef %ANONS;
+undef @files;
+undef %properties;
+undef %lists;
+undef %instructors;
+}
+1;
+=begin copyright
+Programed by  : Will Budic
+EContactHash  : 990MWWLWM8C2MI8K (https://github.com/wbudic/EContactHash.md)
+Source        : https://github.com/wbudic/PerlCNF.git
+Documentation : Specifications_For_CNF_ReadMe.md
+    This source file is copied and usually placed in a local directory, outside of its repository project.
+    So it could not be the actual or current version, can vary or has been modiefied for what ever purpose in another project.
+    Please leave source of origin in this file for future references.
+Open Source Code License -> https://github.com/wbudic/PerlCNF/blob/master/ISC_License.md
+=cut copyright
+
+__END__
+## Instructions & Reserved words
+
+   1. Reserved words relate to instructions, that are specially treated, and interpreted by the parser to perform extra or specifically processing on the current value.
+   2. Reserved instructions can't be used for future custom ones, and also not recommended tag or property names.
+   3. Current Reserved words list is.
+       - CONST    - Concentrated list of constances, or individaly tagged name and its value.
+       - VARIABLE - Concentrated list of anons, or individaly tagged name and its value.
+       - DATA     - CNF scripted delimited data property, having uniform table data rows.
+       - DATE     - Translate PerlCNF date representation to DateTime object. Returns now() on empty property value.
+       - FILE     - CNF scripted delimited data property is in a separate file.
+       - %LOG     - Log settings property, i.e. enabled=>1, console=>1.
+       - TABLE    - SQL related.
+       - TREE     - Property is a CNFNode tree containing multiple debth nested children nodes.
+       - INCLUDE  - Include properties from another file to this repository.
+       - INDEX    - SQL related.
+       - INSTRUCT - Provides custom new anonymous instruction.
+       - VIEW     - SQL related.
+       - PLUGIN   - Provides property type extension for the PerlCNF repository.
+       - PROCESSOR- Registered processor to be called once all parsing is done and repository secured.
+       - SQL      - SQL related.
+       - MIGRATE  - SQL related.
+       - MACRO
+          1. Value is searched and replaced by a property value, outside the property scripted.
+          2. Parsing abruptly stops if this abstract property specified is not found.
+          3. Macro format specifications, have been aforementioned in this document. However make sure that your macro an constant also including the *$* signifier if desired.
\ No newline at end of file
diff --git a/htdocs/cgi-bin/system/modules/CNFtoJSON.pm b/htdocs/cgi-bin/system/modules/CNFtoJSON.pm
new file mode 100644 (file)
index 0000000..c9f5e86
--- /dev/null
@@ -0,0 +1,102 @@
+# SQL Processing part for the Configuration Network File Format.
+# Programed by  : Will Budic
+# Source Origin : https://github.com/wbudic/PerlCNF.git
+# Open Source License -> https://choosealicense.com/licenses/isc/
+#
+package CNFtoJSON;
+
+use strict;use warnings;#use warnings::unused;
+use Exception::Class ('CNFParserException'); use Carp qw(cluck);
+use Syntax::Keyword::Try;
+use Time::HiRes qw(time);
+use DateTime;
+
+use constant VERSION => '1.0';
+
+sub new {
+    my ($class, $attrs,$self) = @_;
+    $self = {};
+    $self = \%$attrs if $attrs;
+    bless $self, $class;
+}
+###
+sub nodeToJSON {
+    my($self,$node,$tab_cnt)=@_; $tab_cnt=1 if !$tab_cnt;
+    if($self&&$node){
+       my ($buffer,$attributes,$closeBrk)=("","",0);
+       my $tab =  $tab_cnt == 1 ? '' : '   ' x $tab_cnt;
+       my $name = $node -> {'_'};
+       my $val  = $node -> {'#'}; $val = $node->{'*'} if !$val; $val = _translateNL($val);
+       my @arr  = sort (keys %$node);       
+          foreach (@arr){
+            my $attr = $_;            
+            if($attr !~ /@\$|[@+#_~]/){
+               my $aval = _translateNL($node->{$attr});               
+                  $attributes .= ",\n" if $attributes;
+                  $attributes .= "$tab\"$attr\" : \"$aval\"";
+            }            
+          }          
+       #
+            @arr  = exists $node-> {'@$'} ?  @{$node -> {'@$'}} : ();
+       #       
+       return \"$tab\"$name\" : \"$val\"" if(!@arr==0 && $val);       
+       $tab_cnt++;
+       if(@arr){
+          foreach (@arr){
+            if (!$buffer){          
+                $attributes.= ",\n" if $attributes;
+                $buffer     = "$attributes$tab\"$name\" : {\n";
+                $attributes = ""; $closeBrk = 1;
+            }else{ 
+                $buffer .= ",\n"
+            }
+            my $sub = $_->name();
+            my $insert = nodeToJSON($self, $_, $tab_cnt);
+            if(length($$insert)>0){
+               $buffer .= $$insert;
+            }else{
+               $buffer .= $tab.('   ' x $tab_cnt)."\"$sub\" : {}"
+            }
+          }          
+       }
+       if($attributes){
+          $buffer     .= $node->isRoot() ? "$tab$attributes" :  "$tab\"$name\" : {\n$tab$attributes";
+          $attributes  = "";  $closeBrk=2;
+       }
+       #
+            @arr  = exists $node-> {'@@'}  ?  @{$node -> {'@@'}} : ();
+       #
+       if(@arr){          
+          foreach (@arr){
+            if (!$attributes){
+                 $attributes  = "$tab\"$name\" : [\n"
+            }else{ 
+             $buffer .= ",\n"
+            }
+            $buffer .= "\"$_\"\n"            
+          }
+           $buffer .= $attributes."\n$tab]"
+       }
+       if ($closeBrk){
+           $buffer .= "\n$tab}"
+       }
+       if($node->isRoot()){
+           $buffer =~ s/\n/\n  /gs;
+           $buffer = $tab."{\n  ".$buffer."\n"."$tab}";
+       }
+       return \$buffer
+
+    }else{
+        die "Where is the node, my friend?"
+    }
+}
+sub _translateNL {
+    my $val = shift;
+    if($val){
+       $val =~ s/\n/\\n/g;
+    }
+    return $val
+}
+
+
+1;
\ No newline at end of file
diff --git a/htdocs/cgi-bin/system/modules/HTMLIndexProcessorPlugin.pm b/htdocs/cgi-bin/system/modules/HTMLIndexProcessorPlugin.pm
new file mode 100644 (file)
index 0000000..f92cc76
--- /dev/null
@@ -0,0 +1,319 @@
+package HTMLIndexProcessorPlugin;
+
+use strict;
+use warnings;
+no warnings qw(experimental::signatures);
+use Syntax::Keyword::Try;
+use Exception::Class ('HTMLIndexProcessorPluginException');
+use feature qw(signatures);
+use Scalar::Util qw(looks_like_number);
+use Clone qw(clone);
+use CGI;
+use CGI::Session '-ip_match';
+
+use constant VERSION => '1.0';
+
+our $TAB = ' 'x4;
+
+sub new ($class, $plugin){
+    my $settings;
+    if($plugin){
+       $settings = clone $plugin; #clone otherwise will get hijacked with blessings.
+    }
+    return bless $settings, $class
+}
+
+###
+# Process config data to contain expected fields and data.
+###
+sub convert ($self, $parser, $property) {
+    my ($buffer,$title, $link, $body_attrs, $body_on_load, $give_me);
+    my $cgi          = CGI -> new();
+    my $cgi_action   = $cgi-> param('action');
+    my $cgi_doc      = $cgi-> param('doc');
+    my $tree         = $parser-> anon($property);
+    die "Tree property '$property' is not available!" if(!$tree or ref($tree) ne 'CNFNode');
+try{
+    #TODO 20231002 Move -> %WEBAPP_SETTINGS into utility.
+    my %THEME;
+    my %wsettings = $parser -> collection('%WEBAPP_SETTINGS');
+    if(%wsettings){
+       my $theme = $wsettings{THEME};
+       my @els = split(/, /, $theme);
+       foreach (@els) {
+         my ($key,$val) = split(/\s*=>\s*/, $_);
+         $THEME{$key} = $val;
+         last if $key eq 'css'
+       }
+       my $theme_file = $wsettings{LOG_PATH}.'current_theme';
+       $theme_file =~ /^\.\.\/\.\.\// if(-e $theme_file);
+       if(-e $theme_file){
+         open my $fh, '<', $theme_file;
+         my $theme = <$fh>;
+         close($fh);
+         if($theme =~ m/standard/i){
+            $THEME{css} = "wsrc/main.css"
+         }elsif($theme =~ m/moon/i){
+            $THEME{css} = "wsrc/main_moon.css"
+         }
+         elsif($theme =~ m/sun/i){
+            $THEME{css} = "wsrc/main_sun.css"
+         }
+         elsif($theme =~ m/earth/i){
+            $THEME{css} = "wsrc/main_earth.css"
+         }
+       }
+    }
+
+    if (exists $parser->{'HTTP_HEADER'}){
+        $buffer .= $parser-> {'HTTP_HEADER'};
+    }else{
+        if(exists $parser -> collections()->{'%HTTP_HEADER'}){
+            my %http_hdr = $parser -> collection('%HTTP_HEADER');
+            $buffer = $cgi->header(%http_hdr);
+        }
+    }
+    if ($cgi_action and $cgi_action eq 'load'){
+        $buffer .= $cgi->start_html(); my
+        $load = loadDocument($parser, $cgi_doc);
+        if($load){
+           $buffer .= $$load if $load;
+        }else{
+           $buffer .= "Document is empty: $cgi_doc\n"
+        }
+    }else{
+        $title  = $tree  -> {'Title'} if exists $tree->{'Title'};
+        $link   = $tree  -> {'HEADER'};
+        $body_attrs   = $tree -> {'Body'} if exists $tree -> {'Body'};
+        $body_on_load = $tree -> {'OnLoad'} if exists $tree -> {'OnLoad'};
+        $body_on_load = "onBodyLoadGeneric()" if !$body_on_load;
+        my (@hhshCSS,@hhshJS);
+        if($link){
+        if(ref($link) eq 'CNFNode'){
+                my $arr = $link->find('CSS/@@');
+                foreach (@$arr){
+                    if($THEME{css} && $_->val() =~ /main.css$/){
+                        push  @hhshCSS, {-type => 'text/css', -src => $THEME{css}};
+                    }else{
+                        push  @hhshCSS, {-type => 'text/css', -src => $_->val()};
+                    }
+                }
+                $arr = $link->find('JS/@@');
+                foreach (@$arr){
+                    push  @hhshJS, {-type => 'text/javascript', -src => $_->val()};
+                }
+                $arr = $link  -> find('STYLE');
+                if(ref($arr) eq 'ARRAY'){
+                    foreach (@$arr){
+                        $give_me .= "\n<style>\n".$_ -> val()."\n</style>\n"
+                    }}else{
+                        $give_me .= "\n<style>\n".$arr -> val()."\n</style>\n"
+                }
+                $arr = $link  -> find('SCRIPT');
+                if(ref($arr) eq 'ARRAY'){
+                    foreach (@$arr){
+                        my $attributes = _nodeHTMLAtrributes($_);
+                        $give_me .= "\n<script$attributes>\n".$_ -> val()."\n</script>\n"
+                    }}else{
+                        my $attributes = _nodeHTMLAtrributes($arr);
+                        $give_me .= "\n<script$attributes>\n".$arr -> val()."\n</script>\n";
+
+                }
+        }
+        delete $tree -> {'HEADER'};
+        }
+        $buffer .= $cgi->start_html(
+                            -title   => $title,
+                            -onload  => $body_on_load,
+                            # -BGCOLOR => $colBG,
+                            -style   => \@hhshCSS,
+                            -script  => \@hhshJS,
+                            -head=>$give_me,
+                            $body_attrs
+                        );
+        foreach my $node($tree->nodes()){
+        $buffer .= build($parser, $node)  if $node;
+        }
+        $buffer .= $cgi->end_html();
+    }
+    $parser->data()->{$property} = \$buffer;
+ }catch($e){
+         HTMLIndexProcessorPluginException->throw(error=>$e);
+ }
+}
+
+sub _nodeHTMLAtrributes {
+    my $node = shift;
+    my $attributes =" ";
+    my @attrs = $node -> attributes();
+    foreach my $a(@attrs){
+        $attributes .= @$a[0] . " = \"" .@$a[1]."\""
+    }
+    $attributes = "" if $attributes eq " ";
+    return $attributes
+}
+#
+sub loadDocument($parser, $doc) {
+    my $slurp = do {
+                    open my $fh, '<:encoding(UTF-8)', $doc or HTMLIndexProcessorPluginException->throw(error=>"Document not avaliable -> \"$doc\" ", show_trace=>1);
+                    local $/;
+                    <$fh>;
+    };
+    if($doc =~/\.md$/){
+        require MarkdownPlugin;
+        my @r = @{MarkdownPlugin->new(undef)->parse($slurp)};
+        return $r[0];
+    }
+    return \$slurp
+}
+
+###
+# Builds the html version out of a CNFNode.
+# CNFNode with specific tags here are converted also here,
+# those that are out of the scope for normal standard HTML tags.
+# i.e. HTML doesn't have row and cell tags. Neither has meta links syntax.
+###
+sub build {
+    my $parser = shift;
+    my $node = shift;
+    my $tabs = shift; $tabs = 0 if !$tabs;
+    my $bf;
+    my $name = lc $node->name();
+    if(isParagraphName($name)){
+        $bf .= "\t"x$tabs."<div".placeAttributes($node).">\n"."\t"x$tabs."<div>";
+            foreach my $n($node->nodes()){
+                if($n->{'_'} ne '#'){
+                    my $b = build($parser, $n, $tabs+1);
+                    $bf .= "$b\n" if $b;
+                }
+            }
+            if($node->{'#'}){
+                my $v = $node->val();
+                $v =~ s/\n\n+/\<\/br>\n/gs;
+                $bf .= "\t<div>\n\t<p>\n".$v."</p>\n\t</div>\n";
+            }
+        $bf .= "\t</div>\t</div>\n"
+    }elsif( $name eq 'row' || $name eq 'cell' ){
+        $bf .=  "\t"x$tabs."<div class=\"$name\"".placeAttributes($node).">\n";
+            foreach my $n($node->nodes()){
+                if($n->{'_'} ne '#'){
+                    my $b = build($parser,$n,$tabs+1);
+                    $bf .= "$b\n" if $b;
+                }
+            }
+        $bf .= $node->val()."\n" if $node->{'#'};
+        $bf .= "\t"x$tabs."</div>"
+    }elsif( $name eq 'img' ){
+        $bf .= "\t\t<img".placeAttributes($node)."/>\n";
+    }elsif($name eq 'list_images'){
+        my $paths = $node->{'@@'};
+        foreach my $ndp (@$paths){
+            my $path = $ndp -> val();
+            my @ext = split(',',"jpg,jpeg,png,gif");
+            my $exp = " ".$path."/*.". join (" ".$path."/*.", @ext);
+            my @images = glob($exp);
+            $bf .= "\t<div class='row'><div class='cell'><b>Directory: $path</b></div></div>";
+            foreach my $file(@images){
+                ($file=~/.*\/(.*)$/);
+                my $fn = $1;
+                my $enc = "img@".ShortLink::obtain($file);
+                $bf .= qq(\t<div class='row'><div class='cell'>);
+                $bf .= qq(\t<a href="$enc"><img src="$enc" with='120' height='120'><br>$fn</a>\n</div></div>\n);
+            }
+        }
+    }elsif($name eq '!'){
+      return "<!--".$node->val()."-->\n";
+
+    }elsif($node->{'*'}){ #Links are already captured, in future this might be needed as a relink from here for dynamic stuff?
+            my $lval = $node->{'*'};
+            if($name eq 'file_list_html'){ #Special case where html links are provided.
+                foreach(split(/\n/,$lval)){
+                     $bf .= qq( [ $_ ] |) if $_
+                }
+                $bf =~ s/\|$//g;
+            }else{ #Generic included link value.
+                #is there property data for it?
+                my $prop = $parser->data()->{$node->name()};
+                #if not has it been passed as an page constance?
+                $prop = $parser -> {$node->name()} if !$prop;
+                if ( !$prop ) {
+                    if   ( $parser->{STRICT} ) { die "Not found as property link -> " . $node->name()}
+                    else                       { warn "Not found as property link -> " . $node->name()}
+                }
+                if($prop){
+                    my $ref = ref($prop);
+                    if($ref eq "SCALAR"){
+                        $bf .= $$prop;
+                    }else{
+                        $bf .= $prop;
+                    }
+                }else{
+                    $bf .= $lval;
+                }
+            }
+    }
+    else{
+        my $spaced = 1;
+           $bf .= "\t"x$tabs."<".$node->name().placeAttributes($node).">";
+            foreach my $n($node->nodes()){
+                    my $b = build($parser, $n,$tabs+1);
+                        if ($b){
+                            if($b =~/\n/){
+                               $bf =~ s/\n$//gs;
+                               $bf .= "\n$b\n"
+                            }else{
+                               $spaced=0;
+                               $bf .= $b;
+                            }
+                       }
+            }
+
+        if ($node->{'#'}){
+            $bf .= $node->val();
+            $bf .= "</".$node->name().">";
+        }else{
+            $bf .= "\t"x$tabs if $spaced;
+            $bf .= "</".$node->name().">";
+            $bf .= "\n" if !$spaced;
+        }
+
+    }
+           $bf =~ s/\n\n/\n/gs;
+    return $bf;
+}
+#
+
+
+sub placeAttributes {
+    my $node = shift;
+    my $ret  = "";
+    my @attr = $node -> attributes();
+    foreach (@attr){
+        if(@$_[0] ne '#' && @$_[0] ne '_'){
+           if(@$_[1]){
+              $ret .= " ".@$_[0]."=\"".@$_[1]."\"";
+           }else{
+              $ret .= " ".@$_[0]." ";
+           }
+        }
+    }
+    return $ret;
+}
+
+sub isParagraphName {
+    my $name = shift;
+    return $name eq 'p' || $name eq 'paragraph' ? 1 : 0
+}
+
+1;
+
+=begin copyright
+Programed by  : Will Budic
+EContactHash  : 990MWWLWM8C2MI8K (https://github.com/wbudic/EContactHash.md)
+Source        : https://github.com/wbudic/PerlCNF.git
+Documentation : Specifications_For_CNF_ReadMe.md
+    This source file is copied and usually placed in a local directory, outside of its repository project.
+    So it could not be the actual or current version, can vary or has been modiefied for what ever purpose in another project.
+    Please leave source of origin in this file for future references.
+Open Source Code License -> https://github.com/wbudic/PerlCNF/blob/master/ISC_License.md
+=cut copyright
\ No newline at end of file
diff --git a/htdocs/cgi-bin/system/modules/HTMLProcessorPlugin.pm b/htdocs/cgi-bin/system/modules/HTMLProcessorPlugin.pm
new file mode 100644 (file)
index 0000000..b455f23
--- /dev/null
@@ -0,0 +1,205 @@
+###
+# HTML converter Plugin from PerlCNF to HTML from TREE instucted properties.
+# Processing of these is placed in the data parsers data.
+# Programed by  : Will Budic
+# Notice - This source file is copied and usually placed in a local directory, outside of its project.
+# So it could not be the actual or current version, can vary or has been modiefied for what ever purpose in another project.
+# Please leave source of origin in this file for future references.
+# Source of Origin : https://github.com/wbudic/PerlCNF.git
+# Documentation : Specifications_For_CNF_ReadMe.md
+# Open Source Code License -> https://choosealicense.com/licenses/isc/
+#
+package HTMLProcessorPlugin;
+
+use strict;
+use warnings;
+use Syntax::Keyword::Try;
+use Exception::Class ('HTMLProcessorPluginException');
+use feature qw(signatures);
+use Scalar::Util qw(looks_like_number);
+use Date::Manip;
+
+use constant VERSION => '1.0';
+
+sub new ($class, $fields={Language=>'English',DateFormat=>'US'}){      
+
+    if(ref($fields) eq 'REF'){
+       warn "Hash reference required as argument for fields!"
+    }
+    my $lang =   $fields->{'Language'};
+    my $frmt =   $fields->{'DateFormat'};
+    Date_Init("Language=$lang","DateFormat=$frmt");    
+   
+    return bless $fields, $class
+}
+
+###
+# Process config data to contain expected fields and data.
+###
+sub convert ($self, $parser, $property) {
+    my ($bfHDR,$style,$jscript,$title, $link, $body_attrs, $header)=("","","","","","","");
+    $self->{CNFParser} = $parser;
+     
+    my $tree = $parser->anon($property);
+    die "Tree property '$property' is not available!" if(!$tree or ref($tree) ne 'CNFNode');
+
+try{
+    $header = $parser-> {'HTTP_HEADER'} if exists $parser->{'HTTP_HEADER'};
+    $title  = $tree  -> {'Title'} if exists $tree->{'Title'};
+    $link   = $tree  -> {'HEADER'};
+    $body_attrs .= " ". $tree -> {'Body'} if exists $tree -> {'Body'};
+    if($link){
+       if(ref($link) eq 'CNFNode'){
+            my $arr = $link->find('CSS/@@');
+            foreach (@$arr){
+                my $v = $_->val();
+                $bfHDR .= qq(\t<link rel="stylesheet" type="text/css" href="$v" />\n);
+            }
+            $arr = $link->find('JS/@@');
+            foreach (@$arr){
+                my $v = $_->val();
+                $bfHDR .= qq(\t<script src="$v"></script>\n);
+            } 
+            my $ps = $link  -> find('STYLE');
+            $style = "\n<style>\n".  $ps -> val()."</style>" if($ps); 
+            $ps = $link  -> find('JAVASCRIPT');
+            $jscript = "\n<script>\n".  $ps -> val()."</script>" if($ps);
+       }
+       
+       delete $tree -> {'HEADER'};       
+    }
+
+    my $buffer = qq($header
+<!DOCTYPE html>
+<head>
+<title>$title</title>$bfHDR $style $jscript
+</head>
+);
+    
+    $buffer .= qq(<body$body_attrs>\n<div class="main"><div class="divTableBody">\n);
+        foreach 
+        my $node($tree->nodes()){  
+        my $bf   = build($parser, $node);     
+        $buffer .= "$bf\n" if $node;
+        }
+    $buffer .= "\n</div></div>\n</body>\n</html>\n";
+
+    $parser->data()->{$property} = \$buffer;
+
+}catch{
+        HTMLProcessorPluginException->throw(error=>$@ ,show_trace=>1);
+}
+}
+#
+
+###
+# Builds the html version out of a CNFNode.
+# CNFNode with specific tags here are converted also here, 
+# those that are out of the scope for normal standard HTML tags.
+# i.e. HTML doesn't have row and cell tags. Neither has meta links syntax.
+###
+sub build {
+    my $parser = shift;
+    my $node = shift;
+    my $tabs = shift; $tabs = 1 if !$tabs;
+    my $bf;
+    my $name = lc $node->name();
+    if(isParagraphName($name)){
+        $bf .= "\t"x$tabs."<div".placeAttributes($node).">\n"."\t"x$tabs."<div>";
+            foreach my $n($node->nodes()){
+                if($n->{'_'} ne '#'){
+                    my $b = build($parser, $n, $tabs+1);     
+                    $bf .= "$b\n" if $b;
+                }
+            }
+            if($node->{'#'}){
+                my $v = $node->val();
+                $v =~ s/\n\n+/\<\/br>\n/gs;
+                $bf .= "\t<div>\n\t<p>\n".$v."</p>\n\t</div>\n"; 
+            }
+        $bf .= "\t</div>\t</div>\n"
+    }elsif( $name eq 'row' || $name eq 'cell' ){
+        $bf .=  "\t"x$tabs."<div class=\"$name\"".placeAttributes($node).">\n";
+            foreach my $n($node->nodes()){
+                if($n->{'_'} ne '#'){
+                    my $b = build($parser,$n,$tabs+1);
+                    $bf .= "$b\n" if $b;
+                }
+            }
+        $bf .= $node->val()."\n" if $node->{'#'};   
+        $bf .= "\t"x$tabs."</div>"
+    }elsif( $name eq 'img' ){
+        $bf .= "\t\t<img".placeAttributes($node)."/>\n";
+    }elsif($name eq 'list_images'){
+        my $paths = $node->{'@@'};
+        foreach my $ndp (@$paths){            
+            my $path = $ndp -> val();
+            my @ext = split(',',"jpg,jpeg,png,gif");
+            my $exp = " ".$path."/*.". join (" ".$path."/*.", @ext);
+            my @images = glob($exp);
+            $bf .= "\t<div class='row'><div class='cell'><b>Directory: $path</b></div></div>";
+            foreach my $file(@images){
+                ($file=~/.*\/(.*)$/);
+                my $fn = $1;
+                my $enc = "img@".ShortLink::obtain($file);
+                $bf .= qq(\t<div class='row'><div class='cell'>);
+                $bf .= qq(\t<a href="$enc"><img src="$enc" with='120' height='120'><br>$fn</a>\n</div></div>\n);
+            }
+        }    
+    }elsif($node->{'*'}){ #Links are already captured, in future this might be needed as a relink from here for dynamic stuff?
+            my $lval = $node->{'*'};
+            if($name eq 'file_list_html'){ #Special case where html links are provided.                
+                foreach(split(/\n/,$lval)){
+                     $bf .= qq( [ $_ ] |) if $_
+                }
+                $bf =~ s/\|$//g;
+            }else{ #Generic included link value.
+                #is there property data for it?
+                my $prop = $parser->data()->{$node->name()};        
+                warn "Not found as property link -> ".$node->name() if !$prop;
+                if($prop){
+                    $bf .= $$prop;     
+                }else{
+                    $bf .= $lval;
+                }
+            }
+    }
+    else{
+        $bf .= "\t"x$tabs."<".$node->name().placeAttributes($node).">";
+            foreach my $n($node->nodes()){                 
+                    my $b = build($parser, $n,$tabs+1);
+                    $bf .= "$b\n" if $b;        
+            }
+        $bf .= $node->val() if $node->{'#'};
+        $bf .= "</".$node->name().">";
+
+    }
+    return $bf;
+}
+#
+
+
+sub placeAttributes {
+    my $node = shift;
+    my $ret  = "";
+    my @attr = $node -> attributes();
+    foreach (@attr){
+        if(@$_[0] ne '#' && @$_[0] ne '_'){
+           if(@$_[1]){
+              $ret .= " ".@$_[0]."=\"".@$_[1]."\"";
+           }else{ 
+              $ret .= " ".@$_[0]." ";
+           }
+        }
+    }
+    return $ret;
+}
+
+sub isParagraphName {
+    my $name = shift;
+    return $name eq 'p' || $name eq 'paragraph' ? 1 : 0
+}
+
+
+
+1;
\ No newline at end of file
diff --git a/htdocs/cgi-bin/system/modules/MarkdownPlugin.pm b/htdocs/cgi-bin/system/modules/MarkdownPlugin.pm
new file mode 100644 (file)
index 0000000..67da6fe
--- /dev/null
@@ -0,0 +1,809 @@
+###
+# This is an Ambitious Markup Script converter from  MD scripts to HTML. Every programers nightmare.
+# MD scripts can thus be placed in PerlCNF properties for further processing by this plugin.
+# Processing of these is placed in the data parsers data.
+#
+package MarkdownPlugin;
+
+use strict;
+use warnings;
+no warnings qw(experimental::signatures);
+use Syntax::Keyword::Try;
+use Exception::Class ('MarkdownPluginException');
+use feature qw(signatures);
+use Clone qw(clone);
+##no critic ControlStructures::ProhibitMutatingListFunctions
+
+use constant VERSION => '1.1';
+
+our $TAB = ' 'x4;
+our $PARSER;
+###
+# Constances for CSS CNF tag parts. See end of this file for package internal provided defaults CSS.
+###
+use constant {
+    C_B  => "class='B'",  #CNF TAG angle brackets identifiers.
+    C_PN => "class='pn'", #Prop. name.
+    C_PI => "class='pi'", #Prop. instruction.
+    C_PV => "class='pv'", #Prop. value.
+    C_PA => "class='pa'"  #Anon, similar to prop. name.
+};
+
+
+sub new ($class, $plugin){
+    my $settings;
+    if($plugin){
+       $settings = clone $plugin; #clone otherwise will get hijacked with blessings.
+    }
+    $settings->{'disk_load'} = 0 if not exists $settings->{'disk_load'};
+    return bless $settings, $class
+}
+
+###
+# Process config data to contain expected fields and data.
+###
+sub convert ($self, $parser, $property) {
+try{
+    my ($item, $script) =  $parser->anon($property);
+    $PARSER = $parser;
+    die "Property not found [$property]!" if !$item;
+
+    my $ref = ref($item); my $escaped = 0; $script = $item;
+    if($ref eq 'CNFNode'){
+       $script = $item->{script}
+    }elsif($ref eq 'InstructedDataItem'){
+       $script = $item->{val};
+       $escaped = $item->{ins} eq 'ESCAPED'
+    }elsif($script !~ /\n/ and -e $script ){
+        my $file = $parser->anon($property);
+        $script = do {
+        open my $fh, '<:encoding(UTF-8)', $script or MarkdownPluginException->throw("File not avaliable: $script");
+        local $/;
+        <$fh>;
+        };
+    }
+    if($escaped){
+        $script =~ s/\\</</gs;
+        $script =~ s/\\>/>/gs;
+        #$script =~ s/\n/<br>/gs;
+    }
+    my @doc = @{parse($self,$script)};
+    $parser->data()->{$property} =  $doc[0];
+    $parser->data()->{$property.'_headings'} = $doc[1];
+
+}catch($e){
+        MarkdownPluginException->throw(error=>$e ,show_trace=>1);
+}}
+
+###
+# Helper package to resolve the output of HTML lists in order of apperance in some MD script.
+# It is a very complex part of the parsing algorithm routine.
+# This mentioned, here look as the last place to correct any possible translation errors.
+# @CREATED 20230709
+# @TODO possible to be extended ot account for CSS specified bullet types then the HTML default.
+###
+package HTMLListItem {
+    sub new{
+        my $class = shift;
+        my ($type,$item,$spc) = @_;
+        my @array = ();
+        return bless{type=>$type,item=>$item,spc=>$spc,list=>\@array},$class;
+    }
+    sub parent($self) {
+        return  exists($self->{parent}) ? $self->{parent} : undef
+    }
+    sub add($self, $item){
+        push @{$self->{list}}, $item;
+        $item ->{parent} = $self;
+    }
+    sub hasItems($self){
+        return @{$self->{list}}>0
+    }
+    sub toString($self){
+        my $t = $self->{type};
+        my $isRootItem = $self -> {spc} == 0 ? 1 : 0;
+        my $hasItems   = $self->hasItems();
+        my $hasParent  = exists($self->{parent});
+        my $ret = "";
+        if ($hasItems) {
+            if($isRootItem){
+                $ret = "<$t>\n"
+            }
+            if($self->{item}){
+                $ret = "<li>".$self -> {item}."\n<$t>\n"
+            }
+        }else{
+            return  "<li>".$self -> {item}."</li>\n"
+        }
+        foreach my $item(@{$self->{list}}){
+            if($item->hasItems()){
+               $ret .= $item->toString();
+            }else{
+               my $it = $item->{type};
+               $it = 'li' if $it eq 'ol' || $it eq 'ul';
+               $ret .= "<$it>".$item->{item}."</$it>\n";
+            }
+        }
+        if($hasItems){
+             $ret .= "</$t>\n";
+             $ret .= "</li>\n" if !$isRootItem;
+        }
+        return $ret
+    }
+}
+
+sub setCodeTag($tag, $class){
+    if($tag){
+        $tag = lc $tag;
+        if($tag eq 'html' or $tag eq 'cnf' or $tag eq 'code' or $tag eq 'perl'){
+            $class = $tag if !$class;
+            $tag = 'div' if $tag ne 'code';
+        }elsif($tag eq 'perl'){
+            $class='perl' if !$class;
+            $tag  ='div';
+        }elsif($tag eq 'mermaid'){
+            $class = $tag;
+            $tag="pre";
+        }else{
+            $tag = 'pre' if($tag eq 'sh' or $tag eq 'bash');
+        }
+        $class = lc $class; #convention is that style class to be all lower case like tags.
+    }else{
+        $tag = $class = 'pre';
+    }
+    return [$class, $tag]
+}
+
+sub parse ($self, $script){
+try{
+    my ($buff, $para, $ol, $lnc);
+    my $list_end; my $ltype=0;  my $nix=0; my $nplen=0; my $list_item; my $list_root;
+    my @titels;my $code = 0; my ($tag, $class);  my $pml_val = 0;  my ($bqte, $bqte_nested,$bqte_tag);
+    $script =~ s/^\s*|\s*$//;
+    foreach my $ln(split(/\n/,$script)){
+           $ln =~ s/\t/$TAB/gs; $lnc++;
+        if($ln =~ /(.*) `{3}(\w*)\s*(.*)`{3}  (.*)/gx){
+            my $pret = ""; $pret = $1 if $1;
+            my $post = ""; $post = $4 if $4;
+            $tag = 'code'; $tag =$2 if $2;
+            my $inline = $3;
+            $inline = inlineCNF($inline,"");
+            my @code_tag = @{ setCodeTag($tag, "") };
+            $ln = qq($pret<$code_tag[1] class='$code_tag[0]'>$inline</$code_tag[1]>$post\n);
+            undef $tag;
+            if(!$pret && !$post){
+                $buff .= $ln; next;
+            }elsif($list_item){
+                my $new = HTMLListItem->new('dt', $ln, $list_item->{spc});
+                $list_item ->add($new);
+                next;
+            }
+        }
+        elsif($ln =~ /^\s*```(\w*)(.*)/){
+            my $bfCode; my $pretext = $2; $pretext ="" if !$2; $pretext .= "<br>" if $pretext;
+            if(!$tag){
+                my @code_tag = @{ setCodeTag($1, $1) };
+                $class = $code_tag[0];
+                $tag = $code_tag[1] if !$tag;
+            }
+            if($code>0){
+               if($para){
+                  $bfCode .= "$para\n"
+               }
+               $bfCode .= "</$tag>"; undef $para;
+               $code = 0; undef $tag;
+               if($list_item){
+                  $list_item -> {item} = $list_item -> {item} . $bfCode.'<br>';
+                  $list_item =  $list_item -> parent();
+                  next;
+               }
+            }else{
+               $bfCode .= "<$tag class='$class'>";
+               if($class eq 'perl'){
+                  $bfCode .= qq(<h1><span>Perl</span></h1>);
+                  $code = 2;
+                }else{
+                  if($class eq 'cnf' or $class eq 'html'){
+                     $bfCode .= "<h1><span class='cnf'>
+                     <a title='M.C. Hammer -- Can\'t  touch this!' href='/' style='text-decoration: none;'>".uc($class).
+                     q(</a></span></h1>).$pretext
+                  }
+                  $code = 1
+                }
+            }
+            if($list_item){
+                my $new = HTMLListItem->new('dt', "<br>$bfCode", $list_item ->{spc});
+                $list_item -> add($new);
+                $list_item =  $new;
+                $list_end=0;
+            }else{
+                $buff .= "$bfCode\n$pretext";
+            }
+            next
+        }
+        if(!$code && $ln =~ /^\s*(#+)\s*(.*)/){
+            my $h = 'h'.length($1);
+            my $title = $2;
+            $titels[@titels] = {$lnc,$title};
+            if($list_root){ # Has been previously gathered and hasn't been buffered yet.
+               $buff .= $list_root -> toString();
+               undef $list_root;
+               undef $list_item;
+            }
+            $buff .= qq(<$h>$title</$h><a name=").scalar(@titels)."\"></a>\n"
+        }
+        elsif(!$code &&  ($ln =~ /^(\s*)(\d+)\.\s(.*)/ || $ln =~ /^(\s*)([-+*])\s(.*)/)){
+            my $spc = length($1);
+            my $val = $3 ? ${style($3)} : "";
+            my $new = HTMLListItem->new(($2=~/[-+*]/?'ul':'ol'), $val, $spc);
+            if(!$list_root){
+                $list_end = 0;
+                $list_root = HTMLListItem->new($new->{type});
+                $list_root -> add($new);
+                $list_item = $new
+            }elsif($spc>$nplen){
+                $list_item -> add($new);
+                $list_item = $new;
+                $nplen = $spc;
+            }else{
+               my $isEq = $list_item->{spc} == $spc;
+               while($list_item->{spc} >= $spc && $list_item -> parent()){
+                     $list_item = $list_item -> parent();
+                     last if $isEq
+               }
+               $list_item = $list_root if  !$list_item;
+               $list_item -> add($new);
+               $list_item = $new;
+            }
+            $list_end = 0;
+        }elsif(!$code && $ln =~ /(^|\\G)[ ]{0,3}(>+) ?/){
+            my $nested = length($2);
+             $ln =~ s/^\s*\>+//;
+            ($ln =~ /^(\s+)   (\d+) \.\s (.*)/x || $ln =~ /^(\s*) ([-+*]) \s(.*)/x);
+            if($2 && $2 =~ /[-+*]/){
+                $bqte_tag = "ul";
+            }elsif($2){
+                $bqte_tag = "ol";
+            }else{
+                $bqte_tag = "p";
+            }
+            if(!$bqte_nested){
+                $bqte_nested = $nested;
+                $bqte .="<blockquote><$bqte_tag>\n"
+            }elsif($bqte_nested<$nested){
+                $bqte .="</$bqte_tag><blockquote><$bqte_tag>";
+                $bqte_nested = $nested;
+            }elsif($bqte_nested>$nested){
+                $bqte .="</$bqte_tag></blockquote><$bqte_tag>";
+                $bqte_nested--;
+            }
+            if($ln !~ /(.+)/gm){
+               $bqte .= "\n</$bqte_tag><p>\n"
+            }else{
+                if($bqte_tag eq 'p'){
+                   $ln =~ s/^\s*//g;
+                   $bqte .= ${style($ln)}."<br>";
+                }else{
+                   $ln =~ s/^\s*[-+*]\s*|^\s*\d+\.\s*//g;
+                   $bqte .= "<li>".${style($ln)}."</li>\n";
+                }
+            }
+        }
+        elsif(!$code && $ln =~ /^\s*\*\*\*/){
+            if($para){
+                $para .= qq(<hr>\n)
+            }else{
+                $buff .= qq(<hr>\n)
+            }
+        }
+        elsif($ln =~ /^(\s*)(.*)/ && length($2)>0){
+            my $spc = length($1);
+            my $v = $2;
+            if($code){
+                 my $spc=$1; $list_end =0;
+                if($tag eq 'pre' && $code == 1){
+                    $v =~ s/</&#60;/g;
+                    $v =~ s/>/&#62;/g;
+                    $para .= "$v\n";
+                }elsif($code == 2){
+                    if($ln =~/^\s*\<+.*>+$/){
+                       $para .= inlineCNF($v,$spc)."<br>\n"
+                    }else{
+                       $spc =~ s/\s/&nbsp;/g;
+                       $para .= $spc.code2HTML($v)."<br>\n"
+                    }
+                }else{
+                    $v = inlineCNF($v,$spc);
+                    if(length($v) > length($ln)){
+                       $para .= qq($v<br>);
+                       next
+                    }
+
+                    $v =~ m/  ^(<{2,3}) ([\$@%]*\w*)$
+                            | ^(>{2,3})$
+                            | (<<) ([\$@%]*\w*) <(\w+)>
+                     /gx;
+
+                    if($1&&$2){
+                        my $t = $1;
+                        my $i = $2;
+                        $t =~ s/</&#60;/g;
+                        $para .= "<span ".C_B.">$t</span><span ".C_PI.">$i</span><br>";
+                        $pml_val = 1;
+                        next;
+                    }elsif($3){
+                        my $t = $3;
+                        $t =~ s/>/&#62;/g;
+                        $para .= "<span C_B>$t</span><br>\n";
+                        $pml_val = 0;
+                        next;
+                    }elsif($4&&$5&&6){
+                        my $t = $4;
+                        my $v = $5;
+                        my $i = $6;
+                        $t =~ s/</&#60;/g;
+                        $para .= "<span ".C_B.">$t</span><span ".C_PV.">$v</span>".
+                                    "<span ".C_B.">&#60;</span><span ".C_PI.">$i</span><span ".C_B."&#62;</span><br>";
+                        $pml_val = 1;
+                        next;
+                    }
+
+                    $v =~ m/ ^(<<)  ([@%]<) ([\$@%]?\w+) ([<>])
+                            |^(<{2,3})
+                                ([\$@%\w]+)\s*
+                                      <*([^>]+)
+                              (>{2,3})$
+
+                           /gx;# and my @captured = @{^CAPTURE};
+
+                    if($5&&$6&&$7&&$8){
+                        my $t = $5;
+                        my $v = $6;
+                        my $i = $7;
+                        my $c = $8;
+                        $t =~ s/</&#60;/g;
+                        $c =~ s/>/&#62;/g;
+                        $pml_val = 1;
+                        $para .= "<span".C_B.">$t</span><span ".C_PV.">$v</span><span C_B>&#60;</span><span class='pi'>$i</span><span ".C_B.">$c</span><br>";
+
+                    }elsif($5&&$6){
+                        my $t = $5;
+                        my $i = $6;
+                        $t =~ s/</&#60;/g; $pml_val = 1;
+                        $para .= "<span ".C_B.">$t</span><span class='pi'>$i</span><br>";
+                    }elsif($1 && $2 && $3){
+                        $pml_val = 1;
+                        $para .= "<span ".C_B.">&#60;&#60;$2<\/span><span ".C_PV.">$3</span><span ".C_B.">&#62;</span><br>";
+                    }elsif($8){
+                        my $t = $8;
+                        $t =~ s/>/&#62;/g;  $pml_val = 0;
+                        $para .= "<span ".C_B.">$t</span><br>\n";
+                    }
+                    else{
+                        if($pml_val){
+                            $v =~ m/(.*)([=:])(.*)/gs;
+                            if($1&&$2&&$3){
+                                $para .= "<span ".C_PV.">$1</span><span C_B>$2</span><span ".C_PN.">$3</span> <br>\n";
+                            }else{
+                                $para .= " <span ".C_PN.">$v</span><br>\n";
+                            }
+                        }else{
+                            $para .= "$v<br>\n";
+                        }
+                    }
+                }
+            }else{
+                if($bqte){
+                    while($bqte_nested-->0){$bqte .="</$bqte_tag></blockquote>\n"}
+                    $para   .= $bqte; $bqte_nested=0;
+                    undef $bqte;
+                }
+                if($list_root && $spc>0){
+                    my $new = HTMLListItem -> new('dt', ${style($v)}, $spc);
+                    if($spc>$nplen){
+                        $list_item -> add($new);
+                        $list_item = $new;
+                        $nplen = $spc;
+                    }else{
+                        my $isEq = $list_item->{spc} == $spc;
+                        while($list_item->{spc} >= $spc && $list_item -> parent()){
+                            $list_item = $list_item -> parent();
+                            last if $isEq
+                        }
+                        $list_item = $list_root if  !$list_item;
+                        $list_item -> add($new);
+                    $list_item = $new;
+                    }
+                    $list_end = 0;
+                }else{
+                    $para .= ${style($v)}."\n"
+                }
+            }
+        }else{
+            if($list_root && ++$list_end>1){
+               $buff .= $list_root -> toString();
+               if($para){
+                    $buff .= qq(<p>$para</p>\n);
+                    $list_end=0;
+                    $para  =""
+               }
+               undef $list_root;
+               undef $list_item;
+            }
+            elsif($para){
+                if($bqte){
+                    while($bqte_nested-->0){$bqte .="</$bqte_tag></blockquote>\n"}
+                    $para   .= $bqte;
+                    undef $bqte;
+                }
+                if($list_item){
+                   $list_item->{item} = $list_item->{item} .  $para;
+                   $list_end=0;
+               }
+               elsif($code){
+                    $buff .= $para;
+               }else{
+                    $buff .= qq(<p>$para</p>\n);
+               }
+               $para=""
+            }
+        }
+    }
+    if($bqte){
+       while($bqte_nested-->0){$bqte .="\n</$bqte_tag></blockquote>\n"}
+       $buff .= $bqte;
+    }
+    if($list_root){
+       $buff .= $list_root-> toString();
+    }
+    $buff .= qq(<p>$para</p>\n) if $para;
+return [\$buff,\@titels]
+}catch($e){
+        MarkdownPluginException->throw(error=>$e ,show_trace=>1);
+}}
+
+sub code2HTML($val){
+    my ($v,$cmnt)=($val,"");
+
+    $v =~ s/(.*?)(\#.*)/<span class='cmnt'>$2<\/span>/g;
+    if($1 && $2 && $1!~ m/\s+/){
+        $v = $1; $cmnt = "<span class='cmnt'>$2<\/span>";
+    }else{
+        return $v if defined $2 and $2 ne $v;
+    }
+
+    my @strs = ($v =~ m/(['"].*?['"])/g);
+    foreach(0..$#strs){
+        my $r = $strs[$_]; $r =~ s/\[/\\[/;
+        $PARSER->log($r);
+        my $w = "\f$_\f";
+        $v =~ s/$r/$w/ge;
+    }
+
+    $v =~ s/([,;=\-\+]+)/<span class='opr'>$1<\/span>/gx;
+    $v =~ s/(my|our|local|do|use|lib|require|new|while|for|foreach|while|if|else|elsif|eval)/<span class='kw'>$1<\/span>/g;
+    $v =~ s/(\$\w+)/<span class='var'>$1<\/span>/g;
+    $v =~ s/([\(\)\{\}\[\]] | ->)/<span class='bra'>$1<\/span>/gx;
+
+    foreach(0..$#strs){
+        my $w = $strs[$_];
+        $w =~ s/(^['"])(.*)(['"]$)/<span class='Q'>$1<\/span><span class='str'>$2<\/span><span class='Q'>$3<\/span>/g;
+        my $r = "\f$_\f";
+        $v =~ s/$r/$w/ge;
+    }
+
+        return "$v$cmnt";
+}
+
+sub inlineCNF($v,$spc){
+
+ $v =~ m/(<{2,3})(.*?)(>{2,3})(.*)/g;
+ my $oo = $1;$oo =~s/\s+//;#<- fall through expression didin't match
+ my $body = $2;
+ my $cc = $3;
+ my $restIfAny = $4; $restIfAny="" if not $restIfAny;
+ my $len = length($spc); my $spc_o = $spc; $spc_o =~ s/\s/&nbsp;/g;
+ if($len>4&&$len<9){$len-=$len-2;$spc = '&nbsp;'x$len}else{$spc =~ s/\s/&nbsp;/g}
+ if(!$body){
+    $oo=$cc="";  $body=$v;$v=~/^(<+)/;$oo=$1 if$1;
+    if($v=~m/\[\#\[/){
+        my $r = "<span ".C_PV.">[#[</span>";
+           $v =~ s/\[\#\[/$r/g;
+        if($v =~ m/\]\#\]/){
+           $r = "<span ".C_PV.">]#]</span>";
+           $v =~ s/\]\#\]/$r/g;
+        }
+        return "$spc$v"
+    }
+    elsif($v=~m/\]\#\]/){
+        return "$spc<span ".C_PV.">]#]</span>"
+    }
+    elsif($v=~m/^\[(\w*)\[/ && $1){
+       return "$spc<span ".C_B.">[</span><span ".C_PI.">$1</span><span ".C_B.">[</span>"
+    }
+    elsif($v=~m/\](\w*)\]/ && $1){
+       return "$spc<span ".C_B.">]</span><span ".C_PI.">$1</span><span ".C_B.">]</span>"
+    }
+    elsif($v=~m/^<{1}(\w*)<{1}/ && $1){
+       return "$spc<span ".C_B.">&#60;</span><span ".C_PV.">$1</span><span ".C_B.">&#60;</span>"
+    }elsif($v=~m/^>{1}(\w*)>{1}/ && $1){
+       return "$spc<span ".C_B.">&#62;</span><span ".C_PV.">$1</span><span ".C_B.">&#62;</span>"
+    }elsif($v=~m/^<\*<.*>\*>$/){
+        my $r = "<span ".C_B.">&#62;</span><span ".C_PV.">*</span><span ".C_B.">&#62;</span>";
+        $body=~s/>\*>$/$r/;
+           $r = "<span ".C_B.">&#60;</span><span ".C_PV.">*</span><span ".C_B.">&#60;</span>";
+        $body=~s/^<\*</$r/;
+        return $spc.$body
+    }
+    elsif($v eq '>>'){
+        return  "$spc<span ".C_B.">&#62;&#62;</span>\n"  }
+    else{
+        $v=~/(.*)(>+\s*)$/;
+        if(!$1 && $2){
+            $v = $2; $v =~ s/>/&#62;/g;
+            return "$spc<span ".C_B.">$v</span>"
+        }else{
+            $oo =~ s/</&#60;/g;
+            if($v=~m/>>>/){
+                $v =~ s/>/&#62;/g; return "<span ".C_B.">$v</span>"
+            }elsif($v=~m/<<<(.*)/){
+              return "$spc<span ".C_B.">$oo</span><span ".C_PI.">$1</span>"
+            }elsif($v=~m/^(<{2,3})(.*?)([><])(.*)/){
+                my $t = "$1$2$3";
+                my $var = $2;
+                my $im = $3;
+                my $r = $4;
+                my $end =$4;
+                if($end){
+                    my $changed = ($end =~ s/(>|<)$//g);
+                    if($PARSER -> isReservedWord($end)){
+                        $v  = "<span ".C_PI.">$end</span>";  $v .= "<span ".C_B.">".($1 eq '<'?"&#60":"&#62")."</span>" if $changed
+                    }else{
+                        if (!$var){$v = "<span ".C_PA.">$r</span>"}else{$v=""}
+                    }
+                    if($var =~ /[@%]/){
+                        if($r =~ /(.*)([><])(.*)/){
+                            $v  = "$spc<span ".C_B.">$t</span><span ".C_PA.">$1</span>";
+                            $v .= "<span ".C_B.">$2</span>";
+                            $v .= "<span ".C_PV.">$3</span>";
+                            return $v;
+                        }
+                    }else{
+                        $v = "$spc<span ".C_B.">$oo</span><span ".C_PN.">$var</span><span ".C_B.">$im</span>$v";
+                        if($r =~ /(\w*)\s(.*)/){
+                           return "$v<span ".C_PI.">$1</span> <span ".C_PV.">$2</span>$cc"
+                        }else{
+                           return $v
+                        }
+                    }
+                }else{
+                        $v = "<span ".C_B.">$3</span>" if $3;
+                }
+                return "$spc<span ".C_B.">$oo</span><span ".C_PN.">$2</span><span ".C_B.">$3</span>$v"
+            }else{
+              return $spc_o.propValCNF($v)
+            }
+        }
+    }
+}
+
+if(!$oo && !$cc){
+
+    $body =~ m/ ^([\[<\#\*\[<]+)  (.*?) ([\]>\#\*\]>]+)$  /gmx;
+    if($1&&$2&&$3){
+      $oo   = $1;
+      $body = $2;
+      $cc   = $3;
+      $oo   =~ s/</&#60;/g;
+      $oo   =~ s/>/&#62;/g;
+      $cc   =~ s/</&#60;/g;
+      $cc   =~ s/>/&#62;/g;
+      $body =~ s/</&#60;/g;
+      $body =~ s/>/&#62;/g;
+      return "$spc<span ".C_B.">$oo</span><span ".C_PV.">$body</span>><span ".C_B.">$cc</span>";
+    }
+
+}else{
+    $oo =~ s/</&#60;/g;
+    $cc =~ s/>/&#62;/g;
+}
+    $body =~ m/ ([@%<]+)  ([\$@%]?\w+)? ([<>]) (.*) |
+                ([^<>]+) ([><])? (.*)
+            /gmx;
+
+    if($5&&$6&&$7){
+        my ($o,$var,$val, $prop);
+        $var  = $5; $o=$6; $val=$7;
+        $val  =~ /(.*)(>$)/; if($1&&$2){
+            my $v = $1;
+            my $i = $2;
+            if($PARSER->isReservedWord($v)){
+               $v = "<span ".C_PI.">$v</span>"
+            }else{
+               $v =~ s/(\w+)(\$+)/<span class='pa'>$1<\/span><span class='ps'">$2<\/span>/g;
+               $v = "<span ".C_PA.">$i</span>" if !$2;
+            }
+            $val=$v; $cc = "<span ".C_B.">&#62;</span>";
+
+        }elsif($PARSER->isReservedWord($var)){
+                $var = "<span ".C_PI.">$var</span>";
+                $val =~ s/</&#60;/g;
+                $val =~ s/>/&#62;/g;
+        }else{
+                $var =~ s/(\w+)(\$+)/<span class='pa'>$1<\/span><span class='ps'">$2<\/span>/g;
+                $var = "<span ".C_PA.">$var</span>" if !$2;
+                $val =~ s/</&#60;/g;
+                $val =~ s/>/&#62;/g;
+        }
+        my $r = "<span ".C_B.">&#60;</span>";
+        $o =~ s/^</$r/ge;
+        $r = "<span ".C_B.">&#62;</span>";
+        $o =~ s/^>/$r/ge;
+
+        $prop = "$var</span>$o<span ".C_PV.">$val</span>";
+
+        $v = "<span ".C_B.">$oo</span>$prop</span><span ".C_B.">$cc</span>";
+    }
+    elsif($5){
+        my $t = $5;
+        if(!$7){
+           $t =~ /(\w*)(\\\w*|\s*)(.*)/;
+           my $i = $1;
+           if($PARSER->isReservedWord($i)){
+                    $i = "<span ".C_PI.">$i</span>"
+           }else{
+                    $i = "<span ".C_PA.">$i</span>"
+           }
+           my $prop = propValCNF($2.$3);
+           $v = "<span ".C_B.">$oo</span>$i</span>$prop<span ".C_B.">$cc</span>"
+        }else{
+            my $i = $7;
+            my $c = $8; $c = $9 if !$c;
+            $t =~ s/</&#60;/g;
+            $c =~ s/>/&#62;/g if $c;
+            $v = "<span C_B>$t</span><span ".C_PI.">$i</span>$c"
+        }
+    }
+    elsif($1 && $2 && $3){
+        my $mrk  = $1; $mrk  ="" if !$mrk;
+        my $ins  = $2;
+        my $prop = propValCNF($3);
+        $prop   .= propValCNF($4) if $4;
+        $v = "<span ".C_B.">$oo$mrk</span><span ".C_PI.">$ins</span>$prop<span ".C_B.">$cc</span>"
+    }elsif($1 && $3 && $4){
+        $body = $4;
+        $oo .= "$1$3";
+        $oo =~ s/</&#60;/g;
+        $body =~ /(.*)([><])(.*)/;
+        if($1 && $2 && $3){
+           $v = "<span ".C_B.">$oo</span><span ".C_PI.">$1</span><span ".C_B.">$2</span><span ".C_PV.">$3</span><span ".C_B.">$cc</span>"
+        }else{
+           $v = "<span ".C_B.">$oo</span><span ".C_PI.">$body</span><span ".C_B.">$cc</span>"
+        }
+    }elsif($2){$v = "<span ".C_B.">$v</span>"}
+    return $spc.$v.$restIfAny
+}
+
+
+sub propValCNF($v){
+    my @match = ($v =~ m/([^:]+)([=:]+)(.*)/gs);
+    if(@match){
+      return "&nbsp;<span ".C_PI.">$1</span><span ".C_B.">$2</span><span ".C_PI.">$3</span>" if $2 eq '::';
+      return "&nbsp;<span ".C_PN.">$1</span><span class='O'>$2</span><span ".C_PV.">$3</span>"
+    }
+    elsif($v =~ /[><]/){
+       return  "<span ".C_B.">$v</span>"
+    }else{
+       return "<code ".C_PV.">$v</code>"
+    }
+    return $v;
+}
+
+sub style ($script){
+    MarkdownPluginException->throw(error=>"Invalid argument passed as script!",show_trace=>1) if !$script;
+    #Links <https://duckduckgo.com>
+    $script =~    s/<(http[:\/\w.]*)>/<a href=\"$1\">$1<\/a>/g;
+    $script =~    s/(\*\*([^\*]*)\*\*)/\<em\>$2<\/em\>/gs;
+    if($script =~ m/[<\[]\*[<\[](.*)[\]>]\*[\]>]/){#It is a CNF link not part of standard Markup.
+       my $link = $1;
+       my $find = $PARSER->obtainLink($link);
+       $find = $link  if(!$find);
+       $script =~ s/[<\[]\*[<\[](.*)[\]>]\*[\]>]/$find/gs;
+    }
+    $script =~ s/(\*([^\*]*)\*)/\<strong\>$2<\/strong\>/gs;
+    $script =~ s/__(.*)__/\<del\>$1<\/del\>/gs;
+    $script =~ s/~~(.*)~~/\<strike\>$1<\/strike\>/gs;
+    my $ret = $script;
+    # Inline CNF code handle.
+    if($ret =~ m/`{3}(.*)`{3}/){
+        my $v = inlineCNF($1,"");
+        $ret =~ s/```(.*)```/\<span\>$v<\/span\>/;
+    }
+    #Images
+    $ret =~ s/!\[(.*)\]\((.*)\)/\<div class="div_img"><img class="md_img" src=\"$2\"\ alt=\"$1\"\/><\/div>/;
+    #Links [Duck Duck Go](https://duckduckgo.com)
+    $ret =~ s/\[(.*)\]\((.*)\)/\<a href=\"$2\"\>$1\<\/a\>/;
+    return \$ret;
+}
+
+###
+# Style sheet used  for HTML conversion. NOTICE - Style sheets overide sequentionaly in order of apperance.
+# Link with: <*<MarkdownPlug::CSS>*> in a TREE instructed property.
+###
+use constant CSS => q/
+
+div .cnf {
+    background: aliceblue;
+}
+.cnf h1 span  {
+    color:#05b361;
+    background: aliceblue;
+}
+.B {
+       color: rgb(247, 55, 55);
+       padding: 2px;
+}
+.Q {
+       color: #b217ea;
+       font-weight: bold;
+}
+.pa {
+       color: rgb(52, 52, 130);
+       font-weight: bold;
+}
+.pn {
+       color: rgb(62, 173, 34);
+}
+.ps {
+       color: rgb(128, 0, 0);
+}
+.pv {
+       color: rgb(136, 58, 200);
+}
+.pi {
+       color: rgb(81, 160, 177);
+       ;
+       font-weight: bold;
+}
+
+.kw {
+    color: maroon;
+    padding: 2px;
+}
+.bra {color:rgb(247, 55, 55);}
+.var {
+    color: blue;
+}
+.opr {
+    color: darkgreen;
+}
+.val {
+    color: gray;
+}
+.str {
+    color: orange;
+    font-style:italic;
+    font-weight: bold;
+}
+.inst {
+    color: green;
+    font-weight: bold;
+}
+.cmnt {
+    color: #025802;
+    font-style:italic;
+    font-weight: bold;
+}
+
+/;
+
+
+
+1;
+
+=begin copyright
+Programed by  : Will Budic
+EContactHash  : 990MWWLWM8C2MI8K (https://github.com/wbudic/EContactHash.md)
+
+Open Source Code License -> https://github.com/wbudic/PerlCNF/blob/master/ISC_License.md
+=cut copyright
\ No newline at end of file
diff --git a/htdocs/cgi-bin/system/modules/PerlKeywords.pm b/htdocs/cgi-bin/system/modules/PerlKeywords.pm
new file mode 100644 (file)
index 0000000..0a34562
--- /dev/null
@@ -0,0 +1,118 @@
+package PerlKeywords;
+use strict; use warnings;
+use Exporter;
+our @ISA = 'Exporter';
+our @EXPORT = 'span_to_html';
+our @EXPORT_OK = qw(%RESERVED_WORDS %KEYWORDS %FUNCTIONS @REG_EXP &matchForCSS &CAP);
+
+our %RESERVED_WORDS = map +($_, 1), qw{ CONST CONSTANT VARIABLE VAR 
+                                        FILE TABLE TREE INDEX 
+                                        VIEW SQL MIGRATE DO LIB
+                                        PLUGIN MACRO %LOG INCLUDE INSTRUCTOR };
+
+
+our  %KEYWORDS = map +($_, 1), qw{
+    bless caller continue dbmclose dbmopen die do dump else elsif eval exit 
+    for foreach goto if import last local my next no our package redo ref 
+    require return sub tie tied unless untie until use wantarray while 
+    given when default 
+    try catch finally 
+    has extends with before after around override augment    
+};
+
+
+ our %FUNCTIONS = map +($_, 1), qw{ 
+    abs accept alarm atan2 bind binmode chdir chmod chomp chop chown chr 
+    chroot close closedir connect cos crypt defined delete each endgrent 
+    endhostent endnetent endprotoent endpwent endservent eof exec exists 
+    exp fcntl fileno flock fork format formline getc getgrent getgrgid 
+    getgrnam gethostbyaddr gethostbyname gethostent getlogin getnetbyaddr 
+    getnetbyname getnetent getpeername getpgrp getppid getpriority 
+    getprotobyname getprotobynumber getprotoent getpwent getpwnam getpwuid 
+    getservbyname getservbyport getservent getsockname getsockopt glob 
+    gmtime grep hex index int ioctl join keys kill lc lcfirst length link 
+    listen localtime lock log lstat map mkdir msgctl msgget msgrcv msgsnd 
+    oct open opendir ord pack pipe pop pos print printf prototype push 
+    quotemeta rand read readdir readline readlink readpipe recv rename 
+    reset reverse rewinddir rindex rmdir scalar seek seekdir select semctl 
+    semget semop send setgrent sethostent setnetent setpgrp setpriority 
+    setprotoent setpwent setservent setsockopt shift shmctl shmget shmread 
+    shmwrite shutdown sin sleep socket socketpair sort splice split sprintf 
+    sqrt srand stat study substr symlink syscall sysopen sysread sysseek 
+    system syswrite tell telldir time times tr truncate uc ucfirst umask 
+    undef unlink unpack unshift utime values vec wait waitpid warn write 
+    say
+};
+
+
+
+our @REG_EXP = (
+      {
+        regex=> qr/(['"])(.*)(['"])/,
+        css=> 'string'
+      },
+      {
+        regex => qr/(\s*#.*)$/o,
+        css   => 'comments'
+      }
+);
+
+our @LAST_CAPTURED;
+sub CAP{
+    return \@LAST_CAPTURED;
+}
+
+###
+# Match regular expression to appropriate style sheet class name.
+# @deprecated This will not be employed as we are only interested from this package in from perl to HTML.
+###
+sub matchForCSS {
+    my $string = shift;
+    if($string){
+        foreach(@REG_EXP){
+            my $current   = $_;
+            if($string =~ $current -> {regex}){
+               @LAST_CAPTURED = @{^CAPTURE};
+               return  $current -> {css}
+            }
+        }
+    }
+    return;
+}
+###
+# Translate any code script int HTML colored version for output to the silly browser.
+###
+sub span_to_html {    my ($script,$css, $code_tag_contain) = @_; if($css){$css.=" "}else{$css=""} # $css if specified we need to give it some space in its short life.
+    my $out;
+    my $SPC  = "&nbsp;";
+    my $SPAN = qq(<span class="$css);
+    foreach my $line(split /\n/, $script){
+        while($line =~ /(\s+)|(\$\w+)|(['"])|(\w+)|(\W+)/gm){
+
+            my @tkns =  @{^CAPTURE}; 
+            if    ($1) {                        $out .= $SPC x length($1)
+            }elsif($2) {                        $out .= $SPAN.qq(V">$tkns[1]</span>)
+            }elsif($3) {                        $out .= $SPAN.qq(Q">$tkns[2]</span>)
+            }elsif($4) {
+              if    (exists $KEYWORDS{$4}){         $out .= $SPAN.qq(K">$tkns[3]</span>)
+              }elsif(exists $FUNCTIONS{$4}){        $out .= $SPAN.qq(F">$tkns[3]</span>)
+              }else{                                $out .= $SPAN.qq($tkns[3]</span>) 
+              }
+            }elsif($5){                         $out .= $SPAN.qq(O">$tkns[4]</span>)
+            }
+        }   
+        $out .= "<br>\n";
+    }
+    if($code_tag_contain){
+       if($code_tag_contain == 1) {
+            $out = "<code>\n".$out."\n</code>"
+       }else{
+            $out = "<$code_tag_contain>\n".$out."\n</$code_tag_contain>"
+       }
+    }
+return \$out;    
+}
+
+
+
+1;
\ No newline at end of file
diff --git a/htdocs/cgi-bin/system/modules/RSSFeedsPlugin.pm b/htdocs/cgi-bin/system/modules/RSSFeedsPlugin.pm
new file mode 100644 (file)
index 0000000..920d275
--- /dev/null
@@ -0,0 +1,376 @@
+package RSSFeedsPlugin;
+
+use strict;
+use warnings;
+no warnings qw(experimental::signatures);
+use feature qw(signatures);
+use Scalar::Util qw(looks_like_number);
+use Syntax::Keyword::Try;
+use Clone qw(clone);
+use Capture::Tiny 'capture_stdout';
+use FileHandle;
+use XML::RSS::Parser;
+use Date::Manip::Date;
+use LWP::Protocol::https; #<-- 20230829  This  module some times, will not be auto installed for some reason.
+use LWP::Simple;
+
+use Benchmark;
+
+use constant VERSION => '1.0';
+
+# require CNFNode;
+# require CNFDateTime;
+
+CNFParser::import();
+
+sub new ($class, $plugin){
+    my $settings;
+    if($plugin){
+       $settings = clone $plugin; #clone otherwise will get hijacked with blessings.
+    }
+    return bless $settings, $class
+}
+
+###
+# Process config data to contain expected fields.
+###
+sub process ($self, $parser, $property) {
+    my @data = @{$parser->data()->{$property}};
+    my $cgi  = $parser->const('CGI');
+    $self->{date} = now();
+    for my $idx (0 .. $#data){
+        my @col = @{$data[$idx]};
+        if($idx>0){
+            $col[0] = $idx+1;
+            $col[4] = $self-> {date} -> toTimestamp();
+        }else{
+            $col[4] = 'last_updated';
+        }
+        $data[$idx]=\@col;
+    }
+    if($cgi&&$cgi->param('action') eq 'list'){
+       my $page = '<div class="feed"><h2>List Of Feeds</h2><ol>';
+       for my $idx (1 .. $#data){
+           my @col = @{$data[$idx]};
+           $page .= qq|<li><span style="border: 1px solid black; padding: 5px; padding-bottom: 0px;">
+           <a onclick="return fetchFeed('$col[1]')" style="cursor: pointer;"> <b>$col[1]</b> </a></span>
+            &nbsp;&nbsp;[ $col[4] ]<dt style="padding:10px;">$col[3]</dt></li>\n|;
+       }
+       $page .= '</ol></div>';
+       $parser->data()->{PAGE} = \$page
+    }else{
+       $parser->addPostParseProcessor($self,'collectFeeds');
+    }
+    $parser->data()->{$property} = \@data
+}
+
+sub collectFeeds($self, $parser) {
+  my $property = $self->{property};
+  my %hdr;
+  my @data = @{$parser->data()->{$property}};
+  my $cgi  = $parser->const('CGI');
+  my $page;
+  my $feed = $cgi->param('feed') if $cgi;
+  $parser->log("Feed request:$feed");
+  for my $idx (0 .. $#data){
+      my @col = @{$data[$idx]};
+      if($idx==0){
+        for my $i(0..$#col){ # Get the matching table column index names as scripted.
+               $hdr{$col[$i]} = $i
+        }
+      }else{
+         my $name = $col[$hdr{Name}]; #<- Now use the column names as coded, if names in script are changed, you must change here.
+         next if($feed && $feed ne $name);
+         my $tree =  fetchFeed($self, $name, $col[$hdr{URL}], $col[$hdr{Description}]);
+         $parser->log("Fetched feed:".$name);
+         if($tree && ref($$tree) eq 'CNFNode'){
+            if(not isCNFTrue($self->{CNF_TREE_LOADED}) && isCNFTrue($self->{CNF_TREE_STORE})){
+               my $output_local = getOutputDir($self);
+               my $fname = $name; $fname =~ s/[\s|\W]/_/g; $fname = ">$output_local"."tree_feed_$fname.cnf";
+               my $FH = FileHandle->new($fname);
+               my $root = $$tree;
+               print $FH $root->toScript();
+               close $FH;
+               $parser->addTree($name, $tree);
+            }
+            if(isCNFTrue($self->{CONVERT_CNF_HTML})){
+               $page .= _treeToHTML($tree);
+               $page .=qq(<a class="ui-button ui-corner-all ui-widget" onclick="return fetchFeeds('#feeds_bottom')">RSS Feeds</a>&nbsp;[<a href="#feed_top">To Top Of Feed</a>]
+               <div id="feeds_bottom" style ="margin: 5px;padding:0;visibility:hidden"><br></div>
+               )
+            }
+         }else{
+            $parser-> warn("Feed '$name' bailed to return a CNFNode tree.")
+         }
+      }
+  }
+  $parser->data()->{PAGE} = \$page if $page;
+}
+### PerlCNF TREE to HTML Conversion Routine, XML based RSS of various Internet feeds convert to PerlCNF previously.
+sub _treeToHTML($tree){
+    my $root = $$tree;
+    my $feed = $root->node('Feed');
+    my $brew = $root->node('Brew');
+    my ($Title, $Published,$URL,$Description) = $feed -> array('Title','Published','URL','#');
+    my $bf = qq(
+        <div class="feed">
+        <div class="feeds_hdr">
+            <div class="feed_title"><h2>$Title</hd></div>
+            <div class-"feed_lbl"><div class="feed_hdr_lbl">Published:</div>$Published</span></div>
+            <div class-"feed_hdr"><div class="feed_hdr_lbl"><span style="text-align:right;width:inherit;">URL:&nbsp;</span></div>)._htmlURL($URL).qq(</div>
+            <div class-"feed_hdr"><p>$Description</p></div>
+        </div>
+        </div>
+    );
+    my $alt = 0;
+    foreach
+        my $item(@{$brew->items()}){
+        next if $item->name() ne 'Item';
+        my ($Title,$Link,$Date) = $item -> array('Title','Link','Date');
+        my $Description         = $item -> node('Description') -> val();
+           $Description =~ s/<a/<a target="feed"/gs if $Description;
+        $bf.= qq(
+            <div class="feed">
+            <div class="feeds_item_$alt">
+                <div class="feed_title"><div class="feed_lbl">Title:</div>$Title</div>
+                <div class="feed_link"><div class="feed_lbl">Link:</div>)._htmlURL($Link).qq(</div>
+                <div class="feed_Date"><div class="feed_lbl">Date:</div>$Date<div><hr></div></div>
+                <div class="feed_desc"><span>$Description<span></div>
+            </div>
+            </div>
+        );
+        $alt = $alt?0:1;
+    }
+    return $bf . '<hr class="feeds">'
+}
+
+sub _htmlURL {
+    my $link = shift;
+    return qq(<a class="feed_link" href="$link" target="feed">$link</a>)
+}
+
+sub getOutputDir($self){
+    my  $output_local = $self->{OUTPUT_DIR};
+    if ($output_local){
+        $output_local.= '/';
+        mkdir $output_local unless -d $output_local;
+    }
+    return $output_local
+}
+
+sub fetchFeed($self,$name,$url,$description){
+
+    my ($MD, $tree, $brew,$bench);
+    my $console     = isCNFTrue($self->{OUTPUT_TO_CONSOLE});
+    my $convert     = isCNFTrue($self->{CONVERT_TO_CNF_NODES}); #<--_ If true,
+    my $stored      = isCNFTrue($self->{CNF_TREE_STORE});       #<-\_ Will use a fast stashed local CNF tree instead of the XML::RSS::Parser.
+    my $markup      = isCNFTrue($self->{OUTPUT_TO_MD});
+    my $benchmark   = isCNFTrue($self->{BENCHMARK});
+    my $output_local= getOutputDir($self);
+    my $fname = $name; $fname =~ s/[\s|\W]/_/g;
+
+    $fname = $output_local."rss_$fname.rdf";
+
+    if(isCNFTrue($self->{RUN_FEEDS})){
+        if(-e $fname) {
+            my $now   = new Date::Manip::Date -> new_date(); $now->parse("today");
+            my $fdate = new Date::Manip::Date;
+            my $fsepoch = (stat($fname))[9]; $fdate->parse("epoch $fsepoch"); $fdate->parse("3 business days");
+            my $delta = $fdate->calc($now);
+            $self->{CNF_TREE_LOADED} = 0;
+            if($now->cmp($fdate)>0){
+                unlink $fname;
+            }else{
+                my $cnf_fname = $name; $cnf_fname =~ s/[\s|\W]/_/g;
+                $cnf_fname =  $output_local."tree_feed_$cnf_fname.cnf";
+                if($convert && $stored && -e $cnf_fname){
+                   $self->{CNF_TREE_LOADED} = 1 if $_ = CNFParser -> new($cnf_fname,{DO_ENABLED => 1}) -> getTree('CNF_FEED');
+                   return $_;
+                }
+            }
+        }
+        unless ( -e $fname ) {
+            try{
+                print "Fetching: $fname -> [$url] ...";
+                my  $res = getstore($url, $fname);
+                if ($res == 200){
+                    print "done!\n"
+                }else{
+                    print "Error<$res>!\n";
+                    `curl $url -o $fname`
+                }
+            }catch{
+                print "Error: $@.\n";
+                return;
+            }
+        }
+    }
+
+    my $parser = XML::RSS::Parser->new;
+    my $fh = FileHandle->new($fname);
+    my $t0 = Benchmark->new;
+    my $feed = $parser->parse_file($fh);
+    my $t1 = Benchmark->new;
+    my $td = timediff($t1, $t0);
+    $bench = "The XML parser for $fname took:\t".timestr($td)."\n" if $benchmark;
+
+    print "Parsing: $fname\n";
+
+    if(!$feed){
+        print "Failed to parse RSS feed:$name file:$fname\n";
+        return
+    }
+
+my  $buffer = capture_stdout {
+        my $Title = $feed->query('/channel/title')->text_content;
+        if($console){
+            print 'x'x60,"\n";
+            print $Title, " [ Items: ",$feed->item_count, " ]\n";
+            print 'x'x60,"\n\n";
+        }else{
+            if($markup){
+            $fname = ">$output_local"."rss_$name.md";
+            $MD = FileHandle->new($fname);
+            #binmode($MD, ":encoding(UTF-8)");
+            print $MD "# ", $Title, "\n";
+            print $MD "\n   $description\n\n";
+            print $MD "* Feed: [$name]($url)\n";
+            print $MD "* Items: ",$feed->item_count, "\n";
+            print $MD "* Date: ", $self->{date} -> toSchlong(), "\n\n";
+            }
+        }
+        if($convert){
+                    my $published = CNFDateTime->new()->toTimestamp();
+                    my $expires   = new Date::Manip::Date -> new_date(); $expires->parse("7 business days");
+                       $expires   =  $expires->printf(CNFDateTime::FORMAT());
+                    my $fnm = $name; $fnm =~ s/[\s|\W]/_/g;
+                    my $Title = $feed->query('/channel/title')->text_content;
+                    my $feed = CNFNode -> new({'_'=>'Feed',Title => $Title, Published=>$published, Expires=>$expires,
+                                                           File  => $output_local."tree_feed_$fnm.cnf", '#'=>$description,
+                                                           URL=>$url});
+                    $tree =    CNFNode -> new({'_'=>'CNF_FEED',Version=>'1.0', Release=>'1'});
+                    $brew =    CNFNode -> new({'_'=>'Brew'});
+                    $tree -> add($feed)->add($brew);
+        }
+        $t0 = Benchmark->new;
+        my $items_cnt =0;
+        foreach my $item
+                    (   $feed->query('//item') ) {
+            my $title = $item->query('title')->text_content;
+            my $date  = $item->query('pubDate');
+            my $desc  = $item->query('description')->text_content;
+            my $link  = $item->query('link')->text_content;
+            my $CNFItm; $items_cnt++;
+            if(!$date) {
+                $date  = $item->query('dc:date');
+            }
+            if(!$date){
+                print "Feed pub date item error with:$title";
+                next
+            }
+            $date = $date->text_content;
+            $date = CNFDateTime::_toCNFDate($date, $self->{TZ})->toTimestampShort();
+            if($console){
+                    print "Title : $title\n";
+                    print "Link  : $link\n";
+                    print "Date  : $date\n";
+            }else{
+                    if($markup){
+                    print $MD "\n## $title\n\n";
+                    print $MD "* Link : <$link>\n";
+                    print $MD "* Date : $date\n\n";
+                    }
+            }
+            if($convert){
+                $CNFItm =  CNFNode -> new({
+                                            '_'     => 'Item',
+                                            Title   => $title,
+                                            Link    => $link,
+                                            Date    => $date
+                                });
+                $brew->add($CNFItm);
+            }
+            if (length($desc)>0){
+                if($console){
+                            print '-'x20,"\n";
+                            print $desc;
+                            print "\n" if $desc !~ /\s$/
+                }else{
+                            print $MD "   $desc\n" if $markup;
+                }
+                if($convert){
+                $CNFItm->add(CNFNode -> new({'_'=>"Description",'#'=>\$desc}));
+                }
+            }
+            if($console){ print '-'x40,"\n";
+            }else{
+                print $MD "\n---\n" if $markup
+            }
+        }
+        $t1 = Benchmark->new;
+        $td = timediff($t1, $t0);
+        #TODO: XML query method is very slow, we will have to resort and test the CNFParser->find in comparance.
+        #      Use XML RSS only to fetch, from foreing servers the feeds, and translate to CNFNodes.
+        $bench .= "The XML QUERY(//Item)  for $fname items($items_cnt) took:\t".timestr($td)."\n" if $benchmark;
+
+        if($console){
+            print 'X'x20, " ", $feed->query('/channel/title')->text_content." Feed End ",'X'x20,"\n\n";
+        }else{
+             $MD->close() if $markup
+        }
+    };
+    print $buffer if $console;
+    print $bench if $benchmark;
+    return \$tree if $convert;
+    return \$buffer;
+}
+
+1; # <-- The score I get for using multipe functionality returns, I know. But if can swat 7 flies in one go, why not do it?
+
+=begin scrap
+
+# Remote PerlCNF Feed Format, opposed to RSS XML, would look like this:
+<<CNF_FEED<TREE>
+    Version  = 1.0
+    Release  = 1
+    <Feed<
+        Published: 2023-12-15
+        Expires: 2023-12-30
+        URL: https://lalaland.com/feeds.cgi
+    >Feed>
+    [brew[
+        [item[
+            Title:
+            Date:
+            Link:
+            [Description[
+            [#[
+
+            ]#]
+            ]Description]
+        ]item]
+        [item[
+            Title:
+            Date:
+            Link:
+            [Description[
+            [#[
+
+            ]#]
+            ]Description]
+        ]item]
+    ]brew]
+>>
+
+=cut scrap
+
+=begin copyright
+Programed by  : Will Budic
+EContactHash  : 990MWWLWM8C2MI8K (https://github.com/wbudic/EContactHash.md)
+Source        : https://github.com/wbudic/PerlCNF.git
+Documentation : Specifications_For_CNF_ReadMe.md
+    This source file is copied and usually placed in a local directory, outside of its repository project.
+    So it could not be the actual or current version, can vary or has been modiefied for what ever purpose in another project.
+    Please leave source of origin in this file for future references.
+Open Source Code License -> https://github.com/wbudic/PerlCNF/blob/master/ISC_License.md
+=cut copyright
\ No newline at end of file
diff --git a/htdocs/cgi-bin/system/modules/Settings.pm b/htdocs/cgi-bin/system/modules/Settings.pm
new file mode 100644 (file)
index 0000000..1050c06
--- /dev/null
@@ -0,0 +1,936 @@
+#!/usr/bin/perl
+# Web interaction, reusable tri state of configuration concerns, set of utilities.
+#
+# Programed by: Will Budic
+# Open Source License -> https://choosealicense.com/licenses/isc/
+#
+package Settings;
+use v5.30; #use diagnostics;
+use Exception::Class ('SettingsException','LifeLogException','SettingsLimitSizeException');
+use Syntax::Keyword::Try;
+use warnings; no warnings 'experimental';
+use strict;
+use CGI;
+use CGI::Session '-ip_match';
+use CGI::Carp qw(fatalsToBrowser set_message);
+use DateTime;
+use DateTime::Format::SQLite;
+use DateTime::Duration;
+use DBI;
+use Scalar::Util qw(looks_like_number);
+BEGIN {
+   sub handle_errors {
+      my $msg = shift;
+      print "<html><body><h2>LifeLog Server Error</h2>";
+      print "<pre>@[$ENV{PWD}].Error: $msg</pre></body></html>"; return
+
+  }
+  set_message(\&handle_errors);
+}
+
+# This is the default developer release key, replace on istallation. As it is not secure.
+use constant CIPHER_KEY             => '95d7a85ba891da';
+use constant CIPHER_PADDING         => 'fe0a2b6a83e81f13a2d76ab104763773310df6b0a01c7cf9807b4b0ce2a02';
+
+# Default VIEW for all pages, it lists and sorts on all logs, super fast server side.
+use constant VW_LOG                 => 'VW_LOG';
+
+# Optional instructional VIEW from config file replacing VW_LOG.
+# Filtering out by category ID certain specified entries.
+use constant VW_LOG_WITH_EXCLUDES   => 'VW_LOG_WITH_EXCLUDES';
+
+# Optional instructional VIEW from config directly overriding the
+# where clause for data being delivered for pages.
+# This view will always return all last 24 hour entered log entries.
+# This view AND's by extending on VW_LOG_WITH_EXCLUDES, if is also set, which is something to be aware.
+# Otherwise, similar just replaces the VW_LOG to deliver pages.
+#
+use constant VW_LOG_OVERRIDE_WHERE  => 'VW_LOG_OVR_WHERE';
+
+use constant META => '^CONFIG_META';
+
+
+# DEFAULT SETTINGS HERE! These settings kick in if not found in config file. i.e. wrong config file or has been altered, things got missing.
+our $RELEASE_VER   = '2.6';
+our $TIME_ZONE     = 'Australia/Sydney';
+our $LANGUAGE      = 'English';
+our $PRC_WIDTH     = '60';
+our $LOG_PATH      = '../../dbLifeLog/';
+our $SESSN_EXPR    = '+30m';
+our $DATE_UNI      = '0';
+our $AUTHORITY     = '';
+our $IMG_W_H       = '210x120';
+our $REC_LIMIT     = 25;
+our $AUTO_WRD_LMT  = 1000;
+our $AUTO_WRD_LEN  = 17;           #Autocompletion word length limit. Internal.
+our $AUTO_LOGOFF   = 0;
+our $AUDIO_ENABLED = 1;
+our $VIEW_ALL_LMT  = 1000;
+our $DISP_ALL      = 1;
+our $FRAME_SIZE    = 0;
+our $RTF_SIZE      = 0;
+our $THEME         = 'Standard';
+our $TRANSPARENCY  = 1;
+our $TRANSIMAGE    = 'wsrc/images/std-log-lbl-bck.png';
+our $TRACK_LOGINS  = 1;
+our $KEEP_EXCS     = 0;
+our $COMPRESS_ENC  = 0;                                #HTTP Compressed encoding.
+our $DBI_SOURCE    = "DBI:SQLite:";
+our $DBI_LVAR_SZ   = 1024;
+our $CURR_SYMBOL   = '&#36;';
+
+
+my ($cgi, $sss, $sid, $alias, $pass, $dbname, $pub);
+our $DSN;
+our $DBFILE;
+our $IS_PG_DB     = 0;
+#Annons here, variables that could be overriden in  code or in database, per need and will.
+our %anons = ();
+our %tz_map;
+
+### Page specific settings Here
+our $TH_CSS        = 'main.css';
+our $JS            = 'main.js';
+our $BGCOL         = '#c8fff8';
+
+
+#Set to 1 to get debug help. Switch off with 0.
+our $DEBUG         = 1;
+
+
+### Private Settings sofar (id -> name : def.value):
+#200 -> '^REL_RENUM' : this.$RELEASE_VER (Used in login_ctr.cgi)
+#201 -> '^EXCLUDES'  : 0 (Used in main.cgi)
+
+our $SQL_PUB = undef;
+our $TIME_ZONE_MAP ="";
+
+#The all purpose '$S_' class get/setter variable, we do better with less my new variable assignments.
+our $S_ ="";
+#
+sub anons {keys %anons}
+#Check call with defined(Settings::anon('my_anon'))
+sub anon {$S_=shift; $S_ = $anons{$S_} if $S_;$S_}
+sub anonsSet {my $a = shift;%anons=%{$a}}
+
+sub release        {$RELEASE_VER}
+sub logPath        {$LOG_PATH} # <-@2021-08-15 something was calling as setter, can't replicate. On reset of categories in config.cgi.
+sub logPathSet     {$S_ = shift;$LOG_PATH = $S_ if $S_;return $LOG_PATH}#<-has now setter method nothing it is actually calling.
+sub timezone       {$TIME_ZONE}
+sub transparent    {$TRANSPARENCY}
+sub transimage     {$TRANSIMAGE}
+sub language       {$LANGUAGE}
+sub sessionExprs   {$SESSN_EXPR}
+sub imgWidthHeight {$IMG_W_H}
+sub pagePrcWidth   {$PRC_WIDTH}
+sub frameSize      {$FRAME_SIZE}
+sub universalDate  {$DATE_UNI}
+sub recordLimit    {$REC_LIMIT}
+sub autoWordLimit  {$AUTO_WRD_LMT}
+sub autoWordLength {$AUTO_WRD_LEN}
+sub autoLogoff     {$AUTO_LOGOFF}
+sub audioEnabled   {$AUDIO_ENABLED}
+sub viewAllLimit   {$VIEW_ALL_LMT}
+sub displayAll     {$DISP_ALL}
+sub trackLogins    {$TRACK_LOGINS}
+sub windowRTFSize  {$RTF_SIZE}
+sub keepExcludes   {$KEEP_EXCS}
+sub currenySymbol  {$CURR_SYMBOL}
+sub bgcol          {$BGCOL}
+sub css            {$TH_CSS}
+sub js             {$JS}
+sub compressPage   {$COMPRESS_ENC}
+sub debug          {$S_ = shift; $DEBUG = $S_ if $S_; $DEBUG}
+sub dbSrc          {$S_= shift; if($S_) {$DBI_SOURCE=$S_; $IS_PG_DB = 1 if(index (uc $S_, 'DBI:PG') ==0)}
+                    $DBI_SOURCE}
+sub dbVLSZ         {$S_ = shift; if(!$S_){$S_ = $DBI_LVAR_SZ}else{$S_=128 if($S_<128);$DBI_LVAR_SZ=$S_}}
+sub dbFile         {$S_ = shift; $DBFILE = $S_ if $S_; $DBFILE}
+sub dbName         {$S_ = shift; $dbname = $S_ if $S_; $dbname}
+sub dsn            {$DSN}
+sub isProgressDB   {$IS_PG_DB} sub resetToDefaultDriver {$IS_PG_DB=0}
+sub sqlPubors      {$SQL_PUB}
+
+sub cgi     {$cgi}
+sub session {$sss}
+sub sid     {$sid}
+sub alias   {$alias}
+sub pass    {$pass}
+sub pub     {$pub}
+
+sub trim {my $r=shift; $r=~s/^\s+|\s+$//g;  $r}
+# The following has to be called from an CGI seesions container that provides parameters.
+sub fetchDBSettings {
+try {
+    $CGI::POST_MAX = 1024 * 1024 * 5;  # max 5GB file post size limit.
+    $cgi     = $cgi = CGI->new();
+    $sss     = shift; #shift will only and should, ONLY happen for test scripts.
+    $sss     = CGI::Session->new("driver:File", $cgi, {Directory=>$LOG_PATH, SameSite=>'Lax'}) if !$sss;
+    $sid     = $sss->id();
+    $alias   = $sss->param('alias');
+    $pass    = $sss->param('passw');
+    $pub     = $cgi->param('pub');$pub = $sss->param('pub') if not $pub; #maybe test script session set in $sss.
+    $dbname  = $sss->param('database'); $dbname = $alias if(!$dbname);
+
+    ##From here we have data source set, currently Progress DB SQL and SQLite SQL compatible.
+    dbSrc($sss->param('db_source'));
+
+    if($pub){#we override session to obtain pub(alias)/pass from file main config.
+        open(my $fh, '<', logPath().'main.cnf') or LifeLogException->throw("Can't open main.cnf: $!");
+        while (my $line = <$fh>) {
+                  chomp $line;
+                  my $v = parseAutonom('PUBLIC_LOGIN',$line);
+                  if($v){my @cre = split '/', $v;
+                           $alias = $cre[0];
+                           $pass = uc crypt $cre[1], hex Settings->CIPHER_KEY;
+                  }
+                  $v = parseAutonom('PUBLIC_CATS',$line);
+                  if($v){my @cats= split(',',$v);
+                        foreach(@cats){
+                            $SQL_PUB .= "ID_CAT=".trim($_)." OR ";
+                        }
+                        $SQL_PUB =~ s/\s+OR\s+$//;
+                   }elsif($line =~ /<<PLUGINS</){
+                        $S_ = substr($line, 10);
+                        while ($line = <$fh>) {
+                            chomp $line;
+                            last if($line =~ />$/);
+                            $S_ .= $line . "\n";
+                        }
+                        $anons{'PLUGINS'} = $S_;
+                        next;
+                    }else{
+                        $v = $v = parseAutonom(META,$line); #($line =~ /<<^CONFIG_META<'/p){
+                        if($v){
+                            $anons{META} = $v;
+                            last #we can stop reading the config here, rest of it is irrelevant.
+                        }
+                    }
+
+        }
+        close $fh;
+        if(!$SQL_PUB&&$pub ne 'test'){$alias=undef}
+    }
+    if(!$alias){
+        print $cgi->redirect("login_ctr.cgi?CGISESSID=$sid");
+        exit;
+    }
+    my $ret  = connectDB($dbname, $alias, $pass);
+    getConfiguration($ret);
+    setupTheme();
+    $sss->expire($SESSN_EXPR);
+    return $ret;
+}catch{
+    SettingsException->throw(error=>"DSN<$DSN>".$@, show_trace=>$DEBUG);
+    exit;
+}
+}
+
+my  @F = ('', '""', 'false', 'off', 'no', 0);# Placed the 0 last, as never will be checked for in toPropertyValue.
+my  @T  = (1, 'true', 'on', 'yes');
+my $reg_autonom = qr/(<<)(.+?)(<(.*)>*|<)(\n*.+\s*)(>{2,3})/mp;
+
+sub parseAutonom { #Parses autonom tag for its crest value, returns undef if tag not found or wrong for passed line.
+    my $tag  = shift;
+    my $line = shift;
+    return if $line =~ /^\s*[\/#]/; #standard start of single line of comment, skip.
+    if($line =~ /$reg_autonom/g){
+        my ($t,$val) = ($2,$4);
+        $val =~ s/""$//g; #empty is like not set
+        $val =~ s/^"|"$//g;chop $val if $val =~ s/>$//g;
+        if($t eq $tag && $val){
+           return toPropertyValue( $val );
+        }
+    }
+
+    return;
+}
+
+sub toPropertyValue {
+    my $prm = shift;
+    if($prm){
+       my $p = lc $prm;
+       foreach(@T){return 1 if $_ eq $p}
+       foreach(@F){return 0 if $_ eq $p}
+    }
+    return $prm;
+}
+
+
+sub today {
+    my $ret = setTimezone();
+    return $ret;
+}
+
+#Call after getConfig subroutine. Returns DateTime->now() set to timezone.
+sub setTimezone {
+    my $to  = shift; #optional for testing purposes.
+    my $ret = DateTime->now();
+    if(!$anons{'auto_set_timezone'}){
+       if($TIME_ZONE_MAP){
+            if(!%tz_map){
+                %tz_map=(); chomp($TIME_ZONE_MAP);
+                foreach (split('\n',$TIME_ZONE_MAP)){
+                    my @p = split('=', $_);
+                    $tz_map{trim($p[0])} = trim($p[1]);
+                }
+            }
+            my $try = $tz_map{$TIME_ZONE};
+               $try = $tz_map{$to} if(!$try && $to);
+            if($try){
+                $TIME_ZONE = $try; #translated to mapped lib. provided zone.
+                $ret -> set_time_zone($try);
+            }
+            else{
+                try{#maybe current setting is valid and the actual one?
+                    $ret -> set_time_zone($TIME_ZONE);
+                }catch{
+                 SettingsException->throw(error=>"Zone not mapped:$TIME_ZONE\n<b>Available zones:</b>\n$TIME_ZONE_MAP\n", show_trace=>$DEBUG);
+                }
+            }
+        }
+    }else{
+        $ret -> set_time_zone($TIME_ZONE);
+    }
+    return $ret;
+}
+
+sub createCONFIGStmt {
+    if($IS_PG_DB){return qq(
+        CREATE TABLE CONFIG(
+            ID INT NOT NULL UNIQUE GENERATED BY DEFAULT AS IDENTITY ( INCREMENT 1 START 1 MINVALUE 1 MAXVALUE 2147483647 CACHE 1 ),
+            NAME VARCHAR(28)  UNIQUE,
+            VALUE             VARCHAR(128),
+            DESCRIPTION       VARCHAR(128),
+            PRIMARY KEY(ID)
+        );
+        CREATE INDEX idx_config_name ON CONFIG (NAME);
+    )}
+return qq(
+    CREATE TABLE CONFIG(
+        ID INT  PRIMARY KEY NOT NULL,
+        NAME VCHAR(16)  UNIQUE,
+        VALUE VCHAR(128),
+        DESCRIPTION VCHAR(128)
+    );
+    CREATE INDEX idx_config_name ON CONFIG (NAME);
+)}
+sub createCATStmt {
+    if($IS_PG_DB){
+        return qq(
+        CREATE TABLE CAT(
+            ID INT             GENERATED BY DEFAULT AS IDENTITY,
+            NAME               VARCHAR(16),
+            DESCRIPTION        VARCHAR(225),
+            PRIMARY KEY(ID)
+        );
+        CREATE INDEX idx_cat_name ON CAT (NAME);
+    )}
+return qq(
+    CREATE TABLE CAT(
+        ID INT             PRIMARY KEY NOT NULL,
+        NAME               VARCHAR(16),
+        DESCRIPTION        VARCHAR(225)
+    );
+    CREATE INDEX idx_cat_name ON CAT (NAME);
+)}
+sub createLOGStmt {
+#ID_RTF in v.2.0 and lower is not an id, changed to byte from v.2.1.
+if($IS_PG_DB){
+        return qq(
+        CREATE TABLE LOG (
+            ID INT UNIQUE GENERATED ALWAYS AS IDENTITY,
+            ID_CAT INT        NOT NULL,
+            DATE TIMESTAMP    NOT NULL,
+            LOG VARCHAR ($DBI_LVAR_SZ) NOT NULL,
+            RTF    SMALLINT   DEFAULT 0,
+            AMOUNT MONEY,
+            AFLAG  INT        DEFAULT 0,
+            STICKY BOOL       DEFAULT FALSE,
+            PRIMARY KEY(ID)
+        );)}
+
+  return qq(
+    CREATE TABLE LOG (
+        ID_CAT INT        NOT NULL,
+        DATE DATETIME     NOT NULL,
+        LOG VARCHAR ($DBI_LVAR_SZ) NOT NULL,
+        RTF    BYTE       DEFAULT 0,
+        AMOUNT DOUBLE,
+        AFLAG  INT        DEFAULT 0,
+        STICKY BOOL       DEFAULT 0
+    );
+)}
+
+sub selLogIDCount {
+    if($IS_PG_DB){return 'select count(ID) from LOG;'}
+    return 'select count(rowid) from LOG;'
+}
+
+sub selStartOfYear {
+    if($IS_PG_DB){return "date>= date_trunc('year', now())"}
+    return "date>=date('now','start of year')"
+}
+
+sub createViewLOGStmt {
+    my($name,$where) = @_;
+    $name = VW_LOG  if not $name;
+    if($IS_PG_DB){
+    return qq(
+        CREATE VIEW public.$name AS
+        SELECT *, (select count(ID) from LOG as recount where a.id >= recount.id) as PID
+            FROM LOG as a $where ORDER BY DATE DESC;
+        );
+    }
+return qq(
+CREATE VIEW $name AS
+    SELECT rowid as ID,*, (select count(rowid) from LOG as recount where a.rowid >= recount.rowid) as PID
+        FROM LOG as a $where ORDER BY Date(DATE) DESC, Time(DATE) DESC;
+)}
+sub createAUTHStmt {
+    if($IS_PG_DB){
+    return qq(
+        CREATE TABLE AUTH(
+            ALIAS varchar(20)   PRIMARY KEY,
+            PASSW TEXT,
+            EMAIL               varchar(44),
+            ACTION INT
+        );
+        CREATE INDEX idx_auth_name_passw ON AUTH (ALIAS, PASSW);
+    )}
+return qq(
+    CREATE TABLE AUTH(
+        ALIAS varchar(20)   PRIMARY KEY,
+        PASSW TEXT,
+        EMAIL               varchar(44),
+        ACTION INT
+    ) WITHOUT ROWID;
+    CREATE INDEX idx_auth_name_passw ON AUTH (ALIAS, PASSW);
+)}
+sub createNOTEStmt {
+    if($IS_PG_DB){
+      # return qq(CREATE TABLE NOTES (LID INT PRIMARY KEY NOT NULL, DOC jsonb);)
+      return qq(CREATE TABLE NOTES (LID INT PRIMARY KEY NOT NULL, DOC bytea);)
+    }
+    return qq(CREATE TABLE NOTES (LID INT PRIMARY KEY NOT NULL, DOC BLOB);)
+}
+sub createLOGCATSREFStmt {
+if($IS_PG_DB){
+return qq(
+    CREATE TABLE LOGCATSREF (
+        LID INT NOT NULL,
+        CID INT NOT NULL,
+               primary key(LID)
+    );
+)}
+# CONSTRAINT fk_log  FOREIGN KEY(LID) REFERENCES LOG(ID) ON DELETE CASCADE,
+# CONSTRAINT fk_cats FOREIGN KEY(CID) REFERENCES CAT(ID) ON DELETE CASCADE
+return qq(
+    CREATE TABLE LOGCATSREF (
+        LID INT NOT NULL,
+        CID INT NOT NULL,
+    FOREIGN KEY (LID) REFERENCES LOG(ID),
+    FOREIGN KEY (CID) REFERENCES CAT(ID)
+    );
+)}
+#Selects the actual database set configuration for the application, these kick in overwritting those from the config file.
+sub getConfiguration { my ($db, $hsh) = @_;
+    my @r; my $ftzmap = 'tz.map';
+    try {
+        my $st = $db->prepare("SELECT ID, NAME, VALUE FROM CONFIG;");  $st->execute();
+        while ( @r = $st->fetchrow_array() ){
+                given ( $r[1] ) {
+                when ("RELEASE_VER") { $RELEASE_VER = $r[2] }
+                when ("TIME_ZONE")   { $TIME_ZONE   = $r[2] }
+                when ("PRC_WIDTH")   { $PRC_WIDTH   = $r[2] }
+                when ("SESSN_EXPR") {  $SESSN_EXPR = timeFormatSessionValue( $r[2] ) }
+                when ("DATE_UNI") { $DATE_UNI = $r[2] }
+                when ("LANGUAGE") { $LANGUAGE = $r[2] }
+                when ("LOG_PATH") {}    # Ommited and code static can't change for now.
+                when ("IMG_W_H")       { $IMG_W_H        = $r[2] }
+                when ("REC_LIMIT")     { $REC_LIMIT      = $r[2] }
+                when ("AUTO_WRD_LMT")  { $AUTO_WRD_LMT   = $r[2] }
+                when ("AUTO_LOGOFF")   { $AUTO_LOGOFF    = $r[2] }
+                when ("AUDIO_ENABLED") { $AUDIO_ENABLED  = $r[2] }
+                when ("VIEW_ALL_LMT")  { $VIEW_ALL_LMT   = $r[2] }
+                when ("DISP_ALL")      { $DISP_ALL       = $r[2] }
+                when ("FRAME_SIZE")    { $FRAME_SIZE     = $r[2] }
+                when ("RTF_SIZE")      { $RTF_SIZE       = $r[2] }
+                when ("THEME")         { $THEME          = $r[2] }
+                when ("TRANSPARENCY")  { $TRANSPARENCY   = $r[2] }
+                when ("TRANSIMAGE")    { $TRANSIMAGE     = $r[2] }
+                when ("DEBUG")         { $DEBUG          = $r[2] }
+                when ("KEEP_EXCS")     { $KEEP_EXCS      = $r[2] }
+                when ("TRACK_LOGINS")  { $TRACK_LOGINS   = $r[2] }
+                when ("COMPRESS_ENC")  { $COMPRESS_ENC   = $r[2] }
+                when ("CURR_SYMBOL")   { $CURR_SYMBOL    = $r[2] }
+                default                { $anons{ $r[1] } = $r[2] }
+                }
+        }
+        #Anons are murky grounds. -- @bud
+        if($hsh){
+            my %m = %{$hsh};
+            $TIME_ZONE_MAP = $m{'TIME_ZONE_MAP'}; #This can be a large mapping we file it to tz.map, rather then keep in db.
+            delete($m{'TIME_ZONE_MAP'});
+            if($TIME_ZONE_MAP && !(-e $ftzmap)) {
+                open(my $fh, '>', $ftzmap) or die "Can't write to '$ftzmap': $!";
+                print $fh $TIME_ZONE_MAP;
+                close $fh;
+            }#else{
+            #     SettingsException -> throw(error=>"Missing anon TIME_ZONE_MAP! $TIME_ZONE_MAP ",show_trace=>1);
+            # }
+            my $stIns = $db->prepare("INSERT INTO CONFIG (ID, NAME, VALUE, DESCRIPTION) VALUES(?,?,?,?)");
+            foreach my $key (keys %m){
+                if(index($key,'$')!=0){#per spec. anons are not prefixed with an '$' as signifier.
+                    my $val = $m{$key};
+                    my $existing = $anons{$key};
+                    #exists? Overwrite for $self config but not in DB! (dynamic code base set anon)
+                    $anons{$key} = $val;
+                    if(not defined $existing){
+                        #Make it now config global. Note another source latter calling this subroutine
+                        #can overwrite this, but not in the database. Where it is now set by the following.
+                        #Find free ID.
+                        my @res = selectRecords($db,"SELECT MAX(ID) FROM CONFIG;")->fetchrow_array();
+                        #ID's under 300 are reserved, for constants.
+                        my $id = $res[0]+1;
+                        while($id<300){ $id += ($id*1.61803398875); }#Golden ratio step it to best next available.
+                        $stIns->execute(int($id), $key, $val, "Anonymous application setting.");
+                    }
+                }
+            }
+
+        }
+        elsif #At times not passing in the hash of expected anons we read in the custom tz map file if it exists.
+        (-e $ftzmap){ open(my $fh, "<:perlio", $ftzmap) or die "Can't open '$ftzmap': $!";
+            read  $fh, $TIME_ZONE_MAP, -s $fh;
+            close $fh;
+        }
+        &setTimezone;
+    }
+    catch {
+        SettingsException->throw(error=>"DSN:$DSN \@Settings::getConfiguration.ERR ->[$@]", show_trace=>$DEBUG);
+    };return
+}
+
+sub timeFormatSessionValue {
+    my $v = shift;
+    my $ret = "+2m";
+    if(!$v){$v=$ret}
+    if($v !~ /^\+/){$v='+'.$v.'m'}# Must be positive added time
+    # Find first match in whatever passed.
+    my @a = $v =~ m/(\+\d+[shm])/gis;
+    if(scalar(@a)>0){$v=$a[0]}
+    # Test acceptable setting, which is any number from 2, having any s,m or h.
+    if($v =~ m/(\+*[2-9]\d*[smh])|(\+[1-9]+\d+[smh])/){
+        # Next is actually, the dry booger in the nose. Let's pick it out!
+        # Someone might try to set in seconds value to be under two minutes.
+        @a = $v =~ m/(\d[2-9]\d+)/gs;
+        if(scalar(@a)>0 && int($a[0])<120){return $ret}else{return $v}
+    }
+    elsif($v =~ m/\+\d+/){# is passed still without time unit? Minutetise!
+        $ret=$v
+    }
+    return $ret;
+}
+
+# @new since  v.2.4 (20210903), it is staggaring how many options we have to setup colors and style, CSS, HTML, CNF
+# CNF should be only used. So the code and css files doesn't have to change. For now CNF isn't used, but the following:
+my %theme = (css=>'wsrc/main.css',colBG=>'#c8fff8',colSHDW=>'#9baec8;');
+sub theme{$S_=shift; return $theme{$S_}}
+sub setupTheme {
+    given ($THEME){
+        when ("Sun")   { %theme = (css=>'wsrc/main_sun.css',   colBG=>'#FFD700', colSHDW=>'#FFD700') }
+        when ("Moon")  { %theme = (css=>'wsrc/main_moon.css',  colBG=>'#000000', colSHDW=>'#DCDCDC') }
+        when ("Earth") { %theme = (css=>'wsrc/main_earth.css', colBG=>'#228B22', colSHDW=>'#8FBC8F') }
+        default { # Standard;
+                         %theme = (css=>'wsrc/main.css',colBG=>'#c8fff8',colSHDW=>'#9baec8');
+        }
+    }
+}
+
+sub schema_tables{
+    my ($db) = @_;
+    my %tables = ();
+    if(Settings::isProgressDB()){
+        my @tbls = $db->tables(undef, 'public');
+        foreach (@tbls){
+            my $t = uc substr($_,7); #We check for tables in uc.
+            $tables{$t} = 1;
+        }
+    }
+    else{
+        my $pst = selectRecords($db,"SELECT name FROM sqlite_master WHERE type='table' or type='view';");
+        while(my @r = $pst->fetchrow_array()){
+            $tables{$r[0]} = 1;
+        }
+    }
+    return \%tables;
+}
+
+#From v.1.8 Changed
+sub renumerate {
+    my $db = shift;
+    my $CI = 'rowid'; $CI = 'ID' if $IS_PG_DB;
+    my %stbls=%{schema_tables($db)};
+    #Renumerate Log! Copy into temp. table.
+    my $sql = "CREATE TABLE LIFE_LOG_TEMP_TABLE AS SELECT * FROM LOG order by $CI;";
+    if($stbls{'LIFE_LOG_TEMP_TABLE'}){
+       $db->do('DROP TABLE LIFE_LOG_TEMP_TABLE;');
+    }
+    $db->do($sql);
+    # Delete any possible orphaned Notes records.
+    my $st = selectRecords($db, "SELECT LID, LOG.$CI from NOTES LEFT JOIN LOG ON NOTES.LID = LOG.$CI WHERE LOG.$CI is NULL;");
+    while(my @row=$st->fetchrow_array()) {
+        $db->do("DELETE FROM NOTES WHERE LID=".$row[0].";")
+    }
+    $st->finish();
+
+    if($IS_PG_DB){$db->do('DROP TABLE LOG CASCADE;')}else{$db->do('DROP TABLE LOG;')}
+
+    $db->do(&createLOGStmt);
+    $db->do('INSERT INTO LOG (ID_CAT, DATE, LOG, RTF ,AMOUNT, AFLAG, STICKY)
+                       SELECT ID_CAT, DATE, LOG, RTF, AMOUNT, AFLAG, STICKY FROM life_log_temp_table ORDER by DATE;');
+
+    #Update  notes table with date ordered log id for reference sake.
+    $st = selectRecords($db, "SELECT $CI, DATE FROM life_log_temp_table WHERE RTF > 0 ORDER BY DATE;");
+    while(my @row=$st->fetchrow_array()) {
+        my $ID_OLD   = $row[0];
+        my $sql_date = $row[1];  #$sql_date =~ s/T/ /;
+        # if(!$IS_PG_DB){
+        #   $sql_date = DateTime::Format::SQLite->parse_datetime($sql_date);
+        # }
+        $sql = "SELECT $CI DATE FROM LOG WHERE RTF > 0 AND DATE = '".$sql_date."';";
+        my @new  = selectRecords($db, $sql)->fetchrow_array();
+        if(scalar @new > 0 && $new[0] ne $ID_OLD){
+             try{#can fail here, for various reasons.
+                $sql="UPDATE NOTES SET LID =". $new[0]." WHERE LID=". $ID_OLD .";";
+                $db->do($sql);
+             }
+             catch{
+                 SettingsException->throw(error=>"\@Settings::renumerate Database error encountered. sql->$sql", show_trace=>$DEBUG);
+             };
+        }
+    }
+    $st->finish();
+
+
+    $db->do('DROP TABLE LIFE_LOG_TEMP_TABLE;');
+}
+
+sub selectRecords {
+    my ($db, $sql) = @_;
+    if(scalar(@_) < 2){
+         die  "Wrong number of arguments, expecting Settings::selectRecords(\$db, \$sql) got Settings::selectRecords('@_').\n";
+    }
+    try{
+        my $pst        = $db->prepare($sql);
+        return 0 if(!$pst);
+        $pst->execute();
+        return $pst;
+    }catch{
+                SettingsException->throw(error=>"Database error encountered!\n ERROR->$@\n SQL-> $sql DSN:".$DSN, show_trace=>$DEBUG);
+    };
+}
+
+sub getTableColumnNames {
+        my ($db, $table_name) = @_;
+        if(scalar(@_) < 2){
+                SettingsException->throw("ERROR Argument number is wrong->db is:$db\n", show_trace=>$DEBUG);
+        }
+
+        my $pst = selectRecords($db, "SELECT name FROM PRAGMA_table_info('$table_name');");
+        my @ret = ();
+        while(my @r = $pst->fetchrow_array()){
+            push @ret, $r[0];
+        }
+
+}
+
+sub printDebugHTML {
+    my $msg = shift; print qq(<!-- $msg -->) if $msg;
+}
+
+sub toLog {
+    my ($db,$log,$cat) = @_;
+    if(!$db){SettingsException->throw("Database handle not passed!")}
+    my $stamp = getCurrentSQLTimeStamp();
+        if(!$cat){
+            my @arr = selectRecords($db,"SELECT ID FROM CAT WHERE NAME LIKE 'System Log' or NAME LIKE 'System';")->fetchrow_array();
+            if(@arr){$cat = $arr[0];}else{$cat = 6;}
+        }
+       $log =~ s/'/''/g;
+       if(length($log)>$DBI_LVAR_SZ){SettingsLimitSizeException->throw("Log size limit ($DBI_LVAR_SZ) exceeded, log length is:".length($log))}
+       $db->do("INSERT INTO LOG (ID_CAT, DATE, LOG) VALUES($cat, '$stamp', '$log');");
+}
+
+sub countRecordsIn {
+    my ($db,$name) = @_;
+     if(scalar(@_) < 2){
+        SettingsException->throw("ERROR Argument number is wrong.name:$name\n", show_trace=>$DEBUG);
+    }
+    my $ret = selectRecords($db, "SELECT count(ID) FROM $name;");
+    if($ret){
+       $ret ->fetchrow_array();
+       $ret = 0 if not $ret;
+    }
+    return $ret;
+}
+
+sub getCurrentSQLTimeStamp {
+     my $dt;
+     if(anon('auto_set_timezone')){$dt = DateTime->from_epoch(epoch => time())}
+     else{                         $dt = DateTime->from_epoch(epoch => time(), time_zone=> $TIME_ZONE)}
+     # 20200225  Found that SQLite->format_datetime, changes internally to UTC timezone, which is wrong.
+     # Strange that this format_datetime will work from time to time, during day and some dates. (A Pitfall)
+    #return DateTime::Format::SQLite->format_datetime($dt);
+    return join ' ', $dt->ymd('-'), $dt->hms(':');
+}
+
+sub removeOldSessions {
+    opendir(DIR, $LOG_PATH);
+    my @files = grep(/cgisess_*/,readdir(DIR));
+    closedir(DIR);
+    my $now = time - (24 * 60 * 60);
+    foreach my $file (@files) {
+        my $mod = (stat("$LOG_PATH/$file"))[9];
+        if($mod<$now){
+            unlink "$LOG_PATH/$file";
+        }
+    }
+}
+
+sub obtainProperty {
+    my($db, $name) = @_;
+    SettingsException->throw("Invalid use of subroutine obtainProperty($db, $name)", show_trace=>$DEBUG) if(!$db || !$name);
+    my $dbs = selectRecords($db, "SELECT ID, VALUE FROM CONFIG WHERE NAME LIKE '$name';");
+    my @row = $dbs->fetchrow_array();
+    if(scalar @row > 0){
+       return $row[1];
+    }
+    else{
+       return 0;
+    }
+}
+our $cnf_id_range;
+our %cnf_ids_taken = ();
+sub configPropertyRange {
+   $cnf_id_range = shift;
+   die "CONFIG_META value->$cnf_id_range" if $cnf_id_range !~ /\d+/;
+}
+# The config property can't be set to an empty string "", set to 0 to disable is the mechanism.
+# So we have an shortcut when checking condition, zero is not set, false or empty. So to kick in then the app settings default.
+# Setting to zero, is similar having the property (which is an anon) disabled in the config file. That in the db must be reflected to zero.
+# You have to set/update with full parameters.
+#
+# Get by id   call -> Settings::configProperty($db, $id);
+# Get by name call -> Settings::configProperty($db, $name);
+# Get by name call -> Settings::configProperty($db, 0, $name);
+# Set it up   call -> Settings::configProperty($db, 0, $name, $value);
+sub configProperty {
+    my($db, $id, $name, $value) = @_;  my $sql;
+    if (defined($db)&&defined($id)&&!defined($value)){  #trickeryy here to obtain existing.
+        my $dbs = selectRecords($db, looks_like_number($id) ? "SELECT VALUE FROM CONFIG WHERE ID = $id;":
+                                                              "SELECT VALUE FROM CONFIG WHERE NAME like '$id'");
+        my @r = $dbs->fetchrow_array();
+        return $r[0];
+    }
+    else{
+        $id = '0' if !defined($id);
+    }
+    if(!defined($db)  || !defined($value)){
+        SettingsException->throw(
+            error => "ERROR Invalid number of arguments in call -> Settings::configProperty('$db',$id,'$name','$value')\n",  show_trace=>$DEBUG
+            );
+    };
+    if($id && !$name){#ew update by id with value arument, whis is passed as an valid argument.
+        $sql = "UPDATE CONFIG SET VALUE='".$value."' WHERE ID=".$id.";";
+        try{
+            $db->do($sql);
+        }
+        catch{
+            SettingsException->throw(
+                error => "ERROR with $sql -> Settings::configProperty('$db',$id,'$name','$value')\n",
+                show_trace=>$DEBUG
+                );
+        }
+    }
+    else{# if id 0 we will find by name.
+        my $dbs = selectRecords($db, "SELECT ID, NAME FROM CONFIG WHERE NAME LIKE '$name';");
+        if($dbs->fetchrow_array()){
+            $db->do("UPDATE CONFIG SET VALUE = '$value' WHERE NAME LIKE '$name';");
+        }
+        else{# For new config properties we must check, not to overide by accident dynamically system settings in the db.
+            if($cnf_id_range && $name ne 'RELEASE_VER'){ # META check! Do not overide config annon placed. i.e. same id used for different properties to create them.
+            if($id<$cnf_id_range){SettingsException->throw(
+                  error => "ERROR Invalid id value provided, it is not in reserve meta range-> Settings::configProperty('$db',$id,'$name','$value')\n",
+                  show_trace=>$DEBUG)}
+            if($_=$cnf_ids_taken{$id}){ die "ERROR Config property id: $id is already taken by: $name\n",}
+            }
+            $sql = "INSERT INTO CONFIG (ID, NAME, VALUE) VALUES ($id, '$name', '$value');";
+            try{
+                $db->do($sql);
+                $cnf_ids_taken{$id} = $name;
+            }
+            catch{
+                SettingsException->throw(
+                    error => "ERROR $@ with $sql -> Settings::configProperty('$db',$id,'$name','$value')\n",
+                    show_trace=>$DEBUG
+                    );
+            }
+        }
+    }
+}
+
+sub connectDBWithAutocommit {
+    connectDB(undef,undef,undef,1);
+}
+sub connectDB {
+    my ($d,$u,$p,$a) = @_;
+    $u = $alias if !$u;
+    $p = $alias if !$p;
+    $a = 1      if !$a;
+    my $db =$u;
+    if(!$d){$db = 'data_'.$u.'_log.db';$dbname = $d=$u}
+    else{   $db = 'data_'.$d.'_log.db';$dbname = $d if !$dbname}
+    $DBFILE = $LOG_PATH.$db;
+        if ($IS_PG_DB)  {
+            $DSN = $DBI_SOURCE .'dbname='.$d;
+        }else{
+            $DSN = $DBI_SOURCE .'dbname='.$DBFILE;
+        }
+    try{
+        return DBI->connect($DSN, $u, $p, {AutoCommit => $a, RaiseError => 1, PrintError => 0, show_trace=>1});
+    }catch{
+       LifeLogException->throw(error=>"<p>Error->$@</p><br><pre>DSN: $DSN</pre>",  show_trace=>1);
+    }
+}
+
+
+
+use Crypt::Blowfish;
+use Crypt::CBC;
+sub newCipher {
+    my $p = shift;
+       $p = $alias.$p.Settings->CIPHER_KEY;
+       $p =~ s/(.)/sprintf '%04x', ord $1/seg;
+       $p = substr $p.CIPHER_PADDING, 0, 58;
+       Crypt::CBC->new(-key  => $p, -cipher => 'Blowfish');
+}
+
+sub saveCurrentTheme {
+    my $theme = shift;
+    if($theme){
+        open (my $fh, '>', $LOG_PATH.'current_theme') or die $!;
+        print $fh $theme;
+        close($fh);
+    }return;
+}
+sub loadLastUsedTheme {
+    open my $fh, '<', $LOG_PATH.'current_theme' or return $THEME;
+    $THEME = <$fh>;
+    close($fh);
+    &setupTheme; return
+}
+sub saveReserveAnons {
+    my $meta = $anons{META}; #since v.2.3
+    my @dr = split(':', dbSrc());
+    LifeLogException->throw(error=>"Meta anon property ".META." not found!\n".
+                                   "You possibly have an old main.cnf file there.",  show_trace=>1) if not $meta;
+    try{
+        my $db = connectDBWithAutocommit(0);
+        open (my $fh, '>', $LOG_PATH.'config_meta_'.(lc($dr[1])).'_'.$dbname) or die $!;
+         print $fh $meta;
+         #It is reserve meta anon type, value (200) is not mutuable, internal.
+         my $dbs = selectRecords($db, "SELECT ID, NAME, VALUE FROM CONFIG WHERE ID >= 200;");
+        while(my @r=$dbs->fetchrow_array()){
+            print $fh "$r[0]|$r[1] = $r[2]\n" if $r[0] =~ /^\^/;
+        }
+        close($fh);return
+
+    }catch{
+       LifeLogException->throw(error=>"<p>Error->$@</p><br><pre>DSN: $DSN</pre>",  show_trace=>$DEBUG);
+    }return
+}
+sub loadReserveAnons(){
+    try{
+        my @dr = split(':', dbSrc());
+        my $db = connectDBWithAutocommit(0);
+        my %reservs = ();
+        my $stInsert = $db->prepare('INSERT INTO CONFIG VALUES(??);');
+        my $stUpdate = $db->prepare('UPDATE CONFIG (NAME, VALUE) WHERE ID =? VALUES(?, ?);');
+        my $dbs = selectRecords($db, "SELECT ID, NAME, VALUE FROM CONFIG WHERE ID >= 200;");
+        $db->do('BEGIN TRANSACTION;');
+                    while(my @r=$dbs->fetchrow_array()){
+                    $reservs{$r[1]} = $r[2] if !$reservs{$r[1]}
+                    }
+                    open (my $fh, '<', $LOG_PATH.'config_meta_'.(lc($dr[1])).'_'.$dbname);
+                    while (my $line = <$fh>) {
+                        chomp $line;
+                        my @p = $line =~ m[(\S+)\s*=\s*(\S+)]g;
+                        if(@p>1){
+                            my $existing_val = $reservs{$p[1]};
+                            if(!$existing_val){
+                                $stInsert->execute($p[1], $p[2]);
+                            }
+                            elsif($existing_val ne $p[2]){
+                                $stUpdate->execute($p[0], $p[1], $p[2]);
+                            }
+                        }
+                    }
+                    close($fh);
+        $db->commit();
+    }catch{
+       LifeLogException->throw(error=>"<p>Error->$@</p><br><pre>DSN: $DSN</pre>",  show_trace=>1);
+    }
+    return 1;
+}
+
+sub dumpVars {
+    # Following will not help, as in perl package variables are codes
+    # and the web container needs sudo permissions for memory access.
+    # my $class = shift;
+    # my $self = bless {}, $class;
+    # use DBG;
+    # dmp $self;
+    #
+    # We need to do it manually:
+    my $meta = $anons{META};
+    return qq/
+release        {$RELEASE_VER}
+logPath        {$LOG_PATH}
+logPathSet     {$LOG_PATH}
+timezone       {$TIME_ZONE}
+transparent    {$TRANSPARENCY}
+transimage     {$TRANSIMAGE}
+language       {$LANGUAGE}
+currency       {$CURR_SYMBOL}
+sessionExprs   {$SESSN_EXPR}
+imgWidthHeight {$IMG_W_H}
+pagePrcWidth   {$PRC_WIDTH}
+frameSize      {$FRAME_SIZE}
+universalDate  {$DATE_UNI}
+recordLimit    {$REC_LIMIT}
+autoWordLimit  {$AUTO_WRD_LMT}
+autoWordLength {$AUTO_WRD_LEN}
+autoLogoff     {$AUTO_LOGOFF}
+viewAllLimit   {$VIEW_ALL_LMT}
+displayAll     {$DISP_ALL}
+trackLogins    {$TRACK_LOGINS}
+windowRTFSize  {$RTF_SIZE}
+keepExcludes   {$KEEP_EXCS}
+bgcol          {$BGCOL}
+css            {$TH_CSS}
+js             {$JS}
+compressPage   {$COMPRESS_ENC}
+debug          {$DEBUG}
+dbSrc          {$DBI_SOURCE}
+dbVLSZ         {$DBI_LVAR_SZ}
+dbFile         {$DBFILE}
+dbName         {$dbname}
+dsn            {$DSN}
+isProgressDB   {$IS_PG_DB}
+sqlPubors      {$SQL_PUB}
+meta           {$meta}
+/
+}
+
+1;
\ No newline at end of file
diff --git a/htdocs/cgi-bin/testJQUERYCode.html b/htdocs/cgi-bin/testJQUERYCode.html
new file mode 100644 (file)
index 0000000..167add1
--- /dev/null
@@ -0,0 +1,47 @@
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US" xml:lang="en-US">
+
+<head>
+    <title>Personal Log</title>
+    <link rel="stylesheet" type="text/css" href="wsrc/main.css" />
+    <link rel="stylesheet" type="text/css" href="wsrc/jquery-ui.css" />
+    <link rel="stylesheet" type="text/css" href="wsrc/jquery-ui.theme.css" />
+
+    <script src="wsrc/jquery.js" type="text/javascript"></script>
+    <script src="wsrc/jquery-ui.js" type="text/javascript"></script>
+
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+
+    <script type="text/javascript">
+        $(document).ready(function() {
+            var ec = $("#ec"); //.selectmenu();
+            //  ec.selectmenu("menuWidget").addClass("overflow");
+            ec.change(function() {
+                //helpSelCategory(this);
+                //updateSelCategory(this);
+                var txt = $("#ec option:selected").text();
+                var el = $("#desc");
+                el.html("<h2>" + txt + "</h2>");
+            });
+        });
+    </script>
+
+</head>
+
+<body bgcolor="#c8fff8" onload="loadedBody('');">
+    <center>
+        <select class="ui-widget-content" id="ec" name="ec">
+            <option value="0">---</option>
+            <option selected value="1">Unspecified</option>
+            <option value="3">File System</option>
+            <option value="6"> Log</option>
+            <option value="9">Event</option>
+       </select>
+        <br><br>
+        <div id="desc" name="desc"></div>
+    </center>
+    <script type="text/javascript">
+        function loadedBody() {
+
+        }
+    </script>
+</body>
\ No newline at end of file
diff --git a/htdocs/cgi-bin/testPGDB.pl b/htdocs/cgi-bin/testPGDB.pl
new file mode 100644 (file)
index 0000000..aff7e2d
--- /dev/null
@@ -0,0 +1,90 @@
+use strict;
+use warnings;
+use Exception::Class ('LifeLogException');
+use Syntax::Keyword::Try;
+use CGI;
+use CGI::Session '-ip_match';
+use DBI;
+
+use DateTime;
+use DateTime::Format::SQLite;
+use DateTime::Duration;
+
+# my @data_sources = DBI->data_sources("Pg");
+# foreach (@data_sources){
+#             print $_ ,"\n";
+#         }
+
+# my $db = DBI->connect("DBI:Pg:host=localhost;dbname=admin", "admin", "admin", {AutoCommit => 1, RaiseError => 1, PrintError => 0})
+#                        or LifeLogException->throw(error=>"<p>Error->"& $DBI::errstri &"</p>$!",  show_trace=>1);
+
+#         my @tbls = $db->tables(undef, 'public');
+#         foreach (@tbls){
+#             print uc substr($_,7) ,"\n";
+#         }
+
+#  $db->disconnect();
+
+
+# $db = DBI->connect("dbi:Pg:dbname=postgres", "will", "will69", {AutoCommit => 1, RaiseError => 1, PrintError => 0});
+# $db ->do('drop database from_perl_createdDB');
+# $db ->do('create database from_perl_createdDB');
+# $db->disconnect();
+
+# @data_sources = DBI->data_sources("Pg");
+# foreach (@data_sources){
+#             print $_ ,"\n";
+#         }
+my ($alias,$pass)=("admin3", "admin3");
+
+my $SQL1=<<SQL;
+
+CREATE ROLE $alias WITH
+       LOGIN
+       SUPERUSER
+       CREATEDB
+       CREATEROLE
+       INHERIT
+       NOREPLICATION
+       CONNECTION LIMIT -1
+       PASSWORD '$pass';
+
+GRANT postgres TO $alias;
+SQL
+my $SQL2=<<SQL;
+CREATE DATABASE $alias
+    WITH 
+    OWNER = $alias
+    ENCODING = 'UTF8'
+    LC_COLLATE = 'en_AU.UTF-8'
+    LC_CTYPE = 'en_AU.UTF-8'
+    TABLESPACE = pg_default
+    CONNECTION LIMIT = -1;
+SQL
+
+#print $SQL,"\n";
+
+my $db = DBI->connect("dbi:Pg:dbname=postgres");#", "will", "will69", {AutoCommit => 1, RaiseError => 1, PrintError => 0});
+$db ->do($SQL1);
+$db ->do($SQL2);
+
+my @data_sources = DBI->data_sources("Pg");
+foreach (@data_sources){
+            print $_ ,"\n";
+}
+
+    foreach my $ln (@data_sources){
+            my $i = rindex $ln, '=';
+            my $n = substr $ln, $i+1;
+            print $n,"\n";
+    }
+
+
+$db->disconnect();
+
+
+$db = DBI->connect("DBI:Pg:host=localhost;dbname=admin3", "admin3", "admin3", {AutoCommit => 1, RaiseError => 1, PrintError => 0});
+    my @tbls = $db->tables(undef, 'public');
+    foreach (@tbls){
+        print uc substr($_,7) ,"\n";
+    }
\ No newline at end of file
diff --git a/htdocs/cgi-bin/time_zones.cgi b/htdocs/cgi-bin/time_zones.cgi
new file mode 100755 (executable)
index 0000000..11ee1f9
--- /dev/null
@@ -0,0 +1,105 @@
+#!/usr/bin/perl
+#
+# Programed in vim by: Will Budic
+# Open Source License -> https://choosealicense.com/licenses/isc/
+#
+
+use Try::Tiny;
+use strict;
+use CGI;
+use CGI::Session '-ip_match';
+use Text::CSV;
+
+our $LOG_PATH    = '../../dbLifeLog/';
+my @zones;
+my $zone;
+open my $fh, '<', '../../dbLifeLog/zone.csv' or die "Cannot open: $!";
+while (my $line = <$fh>) {
+  $line =~ s/\s*\z//;
+  my @a = split /,/, $line;
+  my $z = $a[2];
+  push @zones, $z;
+}
+close $fh;
+
+
+my $cgi = CGI->new;
+my $session = new CGI::Session( "driver:File", $cgi, { Directory => $LOG_PATH } );
+my $TH_CSS =  $session->param("theme");
+my $BGCOL  =  $session->param("bgcolor");
+
+
+
+print $cgi->header(-expires=>"+6s", -charset=>"UTF-8");    
+print $cgi->start_html(-title => "Personal Log", -BGCOLOR=>"$BGCOL",
+                                  -script=>{-type => 'text/javascript', -src => 'wsrc/main.js'},
+                              -style =>{-type => 'text/css', -src => "wsrc/$TH_CSS"},
+               );
+
+
+#TODO
+my %regions = {};
+my @cities;    
+foreach my $zone (sort @zones){
+    $zone =~ s/\"//g;
+    my @p = split /\//, $zone;
+    #America/Argentina/Rio_Gallegos
+    my $region  = $p[0];
+    my $country = $p[1];
+    my $city    = $p[2];
+    if(!$city){
+        $city = $country;
+        $country = $region;
+    }
+
+    if(exists($regions{$region})){
+        @cities =@{ $regions{$region} };
+    }else{
+        @cities = ();
+        $regions{$region} = \@cities;
+    }
+    push @cities, "$country/$city";
+}
+sub trim {my $r=shift; $r=~s/^\s+|\s+$//g; return $r}
+
+print "<center>";
+print "<h2 class='rz' style='text-align:center;'>World Time Zone Strings</h2><br>\n";
+my $ftzmap = $ENV{'PWD'}.'tz.map';
+if(-e $ftzmap){
+    my $TIME_ZONE_MAP = "";
+    open($fh, "<:perlio", $ftzmap) or LifeLogException->throw( "Can't open $ftzmap: $!");
+    read  $fh, $TIME_ZONE_MAP, -s $fh;
+    close $fh;
+    print "<div class='rz' style='text-align:left;border-bottom: 0px cornflowerblue;'><b>Custom Mapped in $ftzmap</b></div>\n";
+    print "<div class='rz' style='text-align:left;'><ul>\n";
+    foreach (split('\n',$TIME_ZONE_MAP)){
+        my @p = split('=', $_);
+        if($p[0]){
+            my $mapped = trim($p[0]);
+            print "<li><a href=\"config.cgi?tz=$mapped\">$mapped</a></li>";
+        }
+    }
+    print "</ul></div>\n";
+    print "</div><br>\n";
+}
+foreach my $key (sort keys %regions){   if(!$key){next}
+    my @country =  @{$regions{$key}}; 
+    if( @country>0 ){
+        print "<div class='rz' style='text-align:left;border-bottom: 0px cornflowerblue;'><b>$key</b></div>\n";
+        print "<div class='rz' style='text-align:left;'><ul>\n";
+        foreach my $entry (sort @country){
+            if(!$entry){next}
+            foreach my $city ($entry){
+                if($city){
+                print "<li><a href=\"config.cgi?tz=$city\">$city</a></li>";
+                }
+            }        
+        }
+           print "</ul></div>\n";
+        print "</div><br>\n";
+
+    }
+}
+print "</center>";
+print $cgi->end_html;
\ No newline at end of file
diff --git a/htdocs/cgi-bin/tz.map b/htdocs/cgi-bin/tz.map
new file mode 100644 (file)
index 0000000..42b8509
--- /dev/null
@@ -0,0 +1,4 @@
+Australia/Marsfield=Australia/Sydney
+Australia/Bondi=Australia/Sydney
+America/Austin=America/Chicago
+America/Texas=America/Chicago
diff --git a/htdocs/cgi-bin/wsrc/Miki-Matsubara-WASH-WASH.mp3 b/htdocs/cgi-bin/wsrc/Miki-Matsubara-WASH-WASH.mp3
new file mode 100644 (file)
index 0000000..9ce2064
Binary files /dev/null and b/htdocs/cgi-bin/wsrc/Miki-Matsubara-WASH-WASH.mp3 differ
diff --git a/htdocs/cgi-bin/wsrc/Store_Door_Chime-Mike_Koenig-570742973.mp3 b/htdocs/cgi-bin/wsrc/Store_Door_Chime-Mike_Koenig-570742973.mp3
new file mode 100644 (file)
index 0000000..fedb4d9
Binary files /dev/null and b/htdocs/cgi-bin/wsrc/Store_Door_Chime-Mike_Koenig-570742973.mp3 differ
diff --git a/htdocs/cgi-bin/wsrc/bckanim.js b/htdocs/cgi-bin/wsrc/bckanim.js
new file mode 100644 (file)
index 0000000..aba4d6d
--- /dev/null
@@ -0,0 +1,72 @@
+
+
+var background = {}
+
+function startBackgroundAnim(){
+
+        
+    background.initializr = function (){
+      
+      var $this = this;  
+     
+      //option
+      $this.id = "bubbles";
+      $this.style = {bubbles_color:"#191970",stroke_width:0, stroke_color :"red"};
+      $this.bubbles_number = 128;
+      $this.speed = [2500,18000]; //milliseconds
+      $this.max_bubbles_height = $this.height;
+      $this.shape = false; // 1 : circle | 2 : triangle | 3 : rect | false :random
+      
+      if($("#"+$this.id).lenght > 0){
+        $("#"+$this.id).remove();
+      }
+      $this.object = $("<div style='z-inde:-1;margin:0;padding:0; overflow:hidden;position:absolute;bottom:0' id='"+$this.id+"'> </div>'").appendTo("body");
+      
+      $this.ww = $(window).width();
+      $this.wh = $(window).height()+100;
+      $this.width = $this.object.width($this.ww);
+      $this.height = $this.object.height($this.wh);
+      
+      
+      $("body").prepend("<style>.shape_background {transform-origin:center; width:80px; height:80px; background: "+$this.style.bubbles_color+"; position: absolute}</style>");
+      
+      
+      for (i = 0; i < $this.bubbles_number; i++) {
+          $this.generate_bubbles()
+      }
+      
+    }
+    
+  
+     background.generate_bubbles = function() {
+       var $this = this;
+       var base = jQuery("<div class='shape_background'></div>");
+       var shape_type = $this.shape ? $this.shape : Math.floor($this.rn(1,3));
+       var shape;
+       if(shape_type == 1) {
+          shape = base.css({borderRadius: "80%"})
+       }else if (shape_type == 2){
+          shape = base.css({width:0, height:0, "border-style":"solid","border-width":"0 40px 69.3px 40px","border-color":"transparent transparent "+$this.style.bubbles_color+" transparent", background:"transparent"}); 
+       }else{
+          shape = base; 
+       }    
+       var rn_size = $this.rn(.8,1.2);
+       shape.css({"transform":"scale("+rn_size+") rotate("+$this.rn(-360,360)+"deg)", top:$this.wh+100, left:$this.rn(-60, $this.ww+60)});        
+       shape.appendTo($this.object);
+       shape.transit({top: $this.rn($this.wh/2,$this.wh/2-60), "transform":"scale("+rn_size+") rotate("+$this.rn(-360,360)+"deg)", opacity: 0},$this.rn($this.speed[0],$this.speed[1]), function(){
+         $(this).remove();
+         $this.generate_bubbles();         
+       })
+         
+      }
+  
+  
+  background.rn = function(from, to, arr) {
+    if(arr){
+            return Math.random() * (to - from + 1) + from;
+    }else{
+      return Math.floor(Math.random() * (to - from + 1) + from);
+    }
+      }
+  background.initializr();
+  }
\ No newline at end of file
diff --git a/htdocs/cgi-bin/wsrc/dutchie-close.mp3 b/htdocs/cgi-bin/wsrc/dutchie-close.mp3
new file mode 100644 (file)
index 0000000..bed9916
Binary files /dev/null and b/htdocs/cgi-bin/wsrc/dutchie-close.mp3 differ
diff --git a/htdocs/cgi-bin/wsrc/dutchie.mp3 b/htdocs/cgi-bin/wsrc/dutchie.mp3
new file mode 100644 (file)
index 0000000..6855d0d
Binary files /dev/null and b/htdocs/cgi-bin/wsrc/dutchie.mp3 differ
diff --git a/htdocs/cgi-bin/wsrc/effects.css b/htdocs/cgi-bin/wsrc/effects.css
new file mode 100644 (file)
index 0000000..6a6926b
--- /dev/null
@@ -0,0 +1,56 @@
+#index_head {
+    letter-spacing: .1em;
+    text-shadow: 3px 5px 2px #474747, 2px 2px 2px rgba(206, 89, 55, 2);
+    color: #e0dfdc;
+    background: transparent;
+}
+#lifelog_head {
+    letter-spacing: .1em;
+    text-shadow: 3px 5px 2px #e0dfdc, 2px 2px 2px rgba(206, 89, 55, 2);
+    font-weight: bolder;
+    color:   #000000;
+    background: transparent;
+}
+
+#menu {
+    position: fixed;
+    float: left;
+    margin: 0;
+    border: 2px solid #94cde7;
+    padding: 5px;
+    text-align: center;
+    background: #ccffff;
+    margin-left: 91%;
+}
+
+#menu_page {
+    position: fixed;
+    float: left;
+    margin: 0;
+    margin-top:5px;
+    border: 2px solid #94cde7;
+    padding: 5px;
+    font-size:small;
+    background:  #ccffff2e;
+    color: black;
+    margin-left: 90.5vw;
+    filter: drop-shadow(    10px 8px 5px #3e6f70);
+}
+
+#menu_page a:link {
+    color: #1c3535
+   }
+   a:link {
+    color: #1c3535
+   }
+#menu_page a:visited {
+    color: #6b51a9;
+   }
+#menu_page a:hover {
+    color: #04eefa;
+    font-style:bold;
+    }
+
+.menu_head {
+    border: 2px solid #00000017;
+}
\ No newline at end of file
diff --git a/htdocs/cgi-bin/wsrc/feeds.css b/htdocs/cgi-bin/wsrc/feeds.css
new file mode 100644 (file)
index 0000000..7919645
--- /dev/null
@@ -0,0 +1,124 @@
+.feeds_hdr {
+    text-align: left;
+    vertical-align: auto;
+}
+
+.feed {
+    text-align:left;
+    border: 1px solid black;
+    margin-bottom: 5px;
+    padding: 8px;
+    background-color: transparent;
+    color: black;
+}
+
+
+.feed:hover{
+    background-color: transparent;
+    color: black;
+}
+
+.feed div {
+    text-align:left;
+    border:0;
+}
+.feed li {
+    margin-top: 5px;;
+}
+
+.feed_lbl  {
+    font-weight: bolder;
+    font-style: normal;
+    width: 48px;
+    display: inline-flex;
+
+}
+.feed_hdr_lbl {
+    font-weight: bolder;
+    font-style: oblique;
+    width: 88px;
+    display: inline-flex;
+
+}
+.feeds hr{
+    color: black;
+    height: 1px;
+}
+
+
+
+.feed_hdr_r1 {
+    background-color: #e6ffff;
+    border: 1px solid black;
+    border-right: 1px solid black;
+    vertical-align: top;
+}
+
+.feed_hdr_r2 {
+    background-color: #ccffff;
+    border: 1px solid black;
+    border-right: 1px solid black;
+    vertical-align: top;
+}
+
+
+.feed_hdr_r3 {
+    background-color: #ccfff0;
+    border: 1px solid black;
+    border-right: 1px solid black;
+    vertical-align: top;
+}
+
+.feed_desc img{
+    width: 20%;
+}
+.feed_desc span{
+display: flow-root;
+}
+
+
+/*!
+ *  Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome
+ *  License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
+ */
+ @font-face {
+    font-family: flownews-FontAwesome;
+    src: url(fonts/fontawesome-webfont.eot?v=4.7.0);
+    src: url(fonts/fontawesome-webfont.eot?#iefix&v=4.7.0) format('embedded-opentype'),url(fonts/fontawesome-webfont.woff2?v=4.7.0) format('woff2'),url(fonts/fontawesome-webfont.woff?v=4.7.0) format('woff'),url(fonts/fontawesome-webfont.ttf?v=4.7.0) format('truetype'),url(fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular) format('svg');
+    font-weight: 400;
+    font-style: normal
+}
+
+.flownewsicon {
+    display: inline-block;
+    font: normal normal normal 14px/1 flownews-FontAwesome;
+    font-size: inherit;
+    text-rendering: auto;
+    -webkit-font-smoothing: antialiased;
+    -moz-osx-font-smoothing: grayscale
+}
+
+.fa-angle-double-left:before {
+    content: "\f100"
+}
+
+.fa-angle-double-right:before {
+    content: "\f101"
+}
+
+
+.article-read-more i:before {
+    margin-left: 10px;
+    margin-right: 0;
+    width: 30px;
+    content: "...more\f101";
+}
+
+.article-read-more a {
+    margin-left: 10px;
+    margin-right: 0;
+}
+
+
+
+
diff --git a/htdocs/cgi-bin/wsrc/feeds.js b/htdocs/cgi-bin/wsrc/feeds.js
new file mode 100644 (file)
index 0000000..adc795a
--- /dev/null
@@ -0,0 +1,46 @@
+var ID = "#feeds";
+function fetchFeeds(id){
+    ID =   id?id:"#feeds";
+    var pnl =$(ID);
+    pnl.html(
+    '<div><span style="border:1px solid Crimson;padding:5px;"><font color="Crimson">&nbsp;&nbsp;<b>P l e a s e &nbsp;&nbsp;    W a i t  &nbsp;&nbsp;!&nbsp;&nbsp;</b></font></span><br><img src="images/Wedges-9.1s-64px.png"></div>'
+    );
+    pnl.show();
+    pnl.css('visibility','visible');
+    $(document).scrollTop( $("#rss_anchor").offset().top );
+    $.post('CNFServices.cgi', {service:'feeds',action:'list'}, displayFeeds).fail(
+        function(response) {
+            pnl.html(response.responseText);
+            pnl.fadeOut(10000);
+        }
+    );
+}
+function fetchFeed(feed) {
+    ID = '#feeds';
+    var pnl = $(ID);
+    pnl.html(
+    '<div><span style="border:1px solid Crimson;padding:5px;"><font color="Crimson">&nbsp;&nbsp;<b>&nbsp;&nbsp;Please &nbsp Wait ->  '+feed+' loading...&nbsp;&nbsp;</b></font></span><br><img src="images/Wedges-9.1s-64px.png"></div>'
+    );
+    pnl.show();
+    pnl.css('visibility','visible');
+    $.post('CNFServices.cgi', {service:'feeds', action:'read', feed:feed}, displayFeeds).fail(
+        function(response) {
+            pnl.html(response.responseText);
+            pnl.fadeOut(20000);
+        }
+    );
+}
+function displayFeeds(content){
+    var pnl = $(ID);
+    pnl.html(content);
+    $("#index-content").css("height",'100%');
+    pnl.show();
+    $(document).scrollTop( $("#rss_anchor").offset().top );
+}
+
+function demoLogin() {
+    var form = $('#frm_login');
+    $('#frm_login input[name=alias]').val("admin");
+    $('#frm_login input[name=passw]').val("admin");
+    form.submit();
+}
diff --git a/htdocs/cgi-bin/wsrc/feeds_viral_now.css b/htdocs/cgi-bin/wsrc/feeds_viral_now.css
new file mode 100644 (file)
index 0000000..9c064f4
--- /dev/null
@@ -0,0 +1,13371 @@
+/*!
+ * Bootstrap v3.3.5 (http://getbootstrap.com)
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ */
+/*!
+ * Generated using the Bootstrap Customizer (http://getbootstrap.com/customize/?id=f6e691ee98704224b321ad5dcb5dac35)
+ * Config saved to config.json and https://gist.github.com/f6e691ee98704224b321ad5dcb5dac35
+ */
+/*!
+ * Bootstrap v3.3.6 (http://getbootstrap.com)
+ * Copyright 2011-2015 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ */
+/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */
+body,figure {
+    margin: 0
+}
+
+.flownews-element-posts a,pre {
+    word-wrap: break-word
+}
+
+
+
+img {
+    border: 0;
+    vertical-align: middle
+}
+
+
+
+.lead {
+    margin-bottom: 20px;
+    font-size: 16px;
+    font-weight: 300;
+    line-height: 1.4
+}
+
+dt,kbd kbd,label {
+    font-weight: 700
+}
+
+address,blockquote .small,blockquote footer,blockquote small,dd,dt,pre {
+    line-height: 1.42857143
+}
+
+@media (min-width: 768px) {
+    .lead {
+        font-size:21px
+    }
+}
+
+.small,small {
+    font-size: 85%
+}
+
+.mark,mark {
+    background-color: #fcf8e3;
+    padding: .2em
+}
+
+.list-inline,.list-unstyled {
+    padding-left: 0;
+    list-style: none
+}
+
+.text-left {
+    text-align: left
+}
+
+.text-right {
+    text-align: right
+}
+
+.text-center {
+    text-align: center
+}
+
+.text-justify {
+    text-align: justify
+}
+
+.text-nowrap {
+    white-space: nowrap
+}
+
+.text-lowercase {
+    text-transform: lowercase
+}
+
+.text-uppercase {
+    text-transform: uppercase
+}
+
+.text-capitalize {
+    text-transform: capitalize
+}
+
+.text-muted {
+    color: #777
+}
+
+.text-primary {
+    color: #337ab7
+}
+
+a.text-primary:focus,a.text-primary:hover {
+    color: #286090
+}
+
+.text-success {
+    color: #3c763d
+}
+
+a.text-success:focus,a.text-success:hover {
+    color: #2b542c
+}
+
+.text-info {
+    color: #31708f
+}
+
+a.text-info:focus,a.text-info:hover {
+    color: #245269
+}
+
+.text-warning {
+    color: #8a6d3b
+}
+
+a.text-warning:focus,a.text-warning:hover {
+    color: #66512c
+}
+
+.text-danger {
+    color: #a94442
+}
+
+a.text-danger:focus,a.text-danger:hover {
+    color: #843534
+}
+
+.bg-primary {
+    color: #fff;
+    background-color: #337ab7
+}
+
+a.bg-primary:focus,a.bg-primary:hover {
+    background-color: #286090
+}
+
+.bg-success {
+    background-color: #dff0d8
+}
+
+a.bg-success:focus,a.bg-success:hover {
+    background-color: #c1e2b3
+}
+
+.bg-info {
+    background-color: #d9edf7
+}
+
+a.bg-info:focus,a.bg-info:hover {
+    background-color: #afd9ee
+}
+
+.bg-warning {
+    background-color: #fcf8e3
+}
+
+a.bg-warning:focus,a.bg-warning:hover {
+    background-color: #f7ecb5
+}
+
+.bg-danger {
+    background-color: #f2dede
+}
+
+a.bg-danger:focus,a.bg-danger:hover {
+    background-color: #e4b9b9
+}
+
+pre code,table {
+    background-color: transparent
+}
+
+.page-header {
+    padding-bottom: 9px;
+    margin: 40px 0 20px;
+    border-bottom: 1px solid #eee
+}
+
+dl,ol,ul {
+    margin-top: 0
+}
+
+blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child,ol ol,ol ul,ul ol,ul ul {
+    margin-bottom: 0
+}
+
+address,dl {
+    margin-bottom: 20px
+}
+
+ol,ul {
+    margin-bottom: 10px
+}
+
+.list-inline {
+    margin-left: -5px
+}
+
+.list-inline>li {
+    display: inline-block;
+    padding-left: 5px;
+    padding-right: 5px
+}
+
+legend,pre {
+    display: block
+}
+
+dd {
+    margin-left: 0
+}
+
+@media (min-width: 768px) {
+    .dl-horizontal dt {
+        float:left;
+        width: 160px;
+        clear: left;
+        text-align: right;
+        overflow: hidden;
+        text-overflow: ellipsis;
+        white-space: nowrap
+    }
+
+    .dl-horizontal dd {
+        margin-left: 180px
+    }
+
+    .container {
+        width: 750px
+    }
+}
+
+.clear,.clearfix,.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.flownews-clear,.form-horizontal .form-group:after,.row:after {
+    clear: both
+}
+
+abbr[data-original-title],abbr[title] {
+    cursor: help;
+    border-bottom: 1px dotted #777
+}
+
+.initialism {
+    font-size: 90%;
+    text-transform: uppercase
+}
+
+blockquote {
+    padding: 10px 20px;
+    margin: 0 0 20px;
+    font-size: 17.5px;
+    border-left: 5px solid #eee
+}
+
+blockquote .small,blockquote footer,blockquote small {
+    display: block;
+    font-size: 80%;
+    color: #777
+}
+
+blockquote .small:before,blockquote footer:before,blockquote small:before {
+    content: '\2014 \00A0'
+}
+
+#preloader:after,.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before {
+    content: ''
+}
+
+.blockquote-reverse,blockquote.pull-right {
+    padding-right: 15px;
+    padding-left: 0;
+    border-right: 5px solid #eee;
+    border-left: 0;
+    text-align: right
+}
+
+code,kbd {
+    padding: 2px 4px;
+    font-size: 90%
+}
+
+caption,th {
+    text-align: left
+}
+
+.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after {
+    content: '\00A0 \2014'
+}
+
+address {
+    font-style: normal
+}
+
+code,kbd,pre,samp {
+    font-family: Menlo,Monaco,Consolas,"Courier New",monospace
+}
+
+code {
+    border-radius: 4px
+}
+
+kbd {
+    color: #fff;
+    border-radius: 3px;
+    -webkit-box-shadow: inset 0 -1px 0 rgba(0,0,0,.25);
+    box-shadow: inset 0 -1px 0 rgba(0,0,0,.25)
+}
+
+kbd kbd {
+    padding: 0;
+    font-size: 100%;
+    -webkit-box-shadow: none;
+    box-shadow: none
+}
+
+pre {
+    padding: 9.5px;
+    margin: 0 0 10px;
+    font-size: 13px;
+    word-break: break-all
+}
+
+.container,.container-fluid {
+    margin-right: auto;
+    margin-left: auto
+}
+
+pre code {
+    padding: 0;
+    font-size: inherit;
+    color: inherit;
+    white-space: pre-wrap;
+    border-radius: 0
+}
+
+.container,.container-fluid {
+    padding-left: 15px;
+    padding-right: 15px
+}
+
+.pre-scrollable {
+    max-height: 340px;
+    overflow-y: scroll
+}
+
+@media (min-width: 992px) {
+    .container {
+        width:970px
+    }
+}
+
+@media (min-width: 1200px) {
+    .container {
+        width:1170px
+    }
+}
+
+.row {
+    margin-left: -15px;
+    margin-right: -15px
+}
+
+.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9 {
+    position: relative;
+    min-height: 1px;
+    padding-left: 15px;
+    padding-right: 15px
+}
+
+.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9 {
+    float: left
+}
+
+.col-xs-12 {
+    width: 100%
+}
+
+.col-xs-11 {
+    width: 91.66666667%
+}
+
+.col-xs-10 {
+    width: 83.33333333%
+}
+
+.col-xs-9 {
+    width: 75%
+}
+
+.col-xs-8 {
+    width: 66.66666667%
+}
+
+.col-xs-7 {
+    width: 58.33333333%
+}
+
+.col-xs-6 {
+    width: 50%
+}
+
+.col-xs-5 {
+    width: 41.66666667%
+}
+
+.col-xs-4 {
+    width: 33.33333333%
+}
+
+.col-xs-3 {
+    width: 25%
+}
+
+.col-xs-2 {
+    width: 16.66666667%
+}
+
+.col-xs-1 {
+    width: 8.33333333%
+}
+
+.col-xs-pull-12 {
+    right: 100%
+}
+
+.col-xs-pull-11 {
+    right: 91.66666667%
+}
+
+.col-xs-pull-10 {
+    right: 83.33333333%
+}
+
+.col-xs-pull-9 {
+    right: 75%
+}
+
+.col-xs-pull-8 {
+    right: 66.66666667%
+}
+
+.col-xs-pull-7 {
+    right: 58.33333333%
+}
+
+.col-xs-pull-6 {
+    right: 50%
+}
+
+.col-xs-pull-5 {
+    right: 41.66666667%
+}
+
+.col-xs-pull-4 {
+    right: 33.33333333%
+}
+
+.col-xs-pull-3 {
+    right: 25%
+}
+
+.col-xs-pull-2 {
+    right: 16.66666667%
+}
+
+.col-xs-pull-1 {
+    right: 8.33333333%
+}
+
+.col-xs-pull-0 {
+    right: auto
+}
+
+.col-xs-push-12 {
+    left: 100%
+}
+
+.col-xs-push-11 {
+    left: 91.66666667%
+}
+
+.col-xs-push-10 {
+    left: 83.33333333%
+}
+
+.col-xs-push-9 {
+    left: 75%
+}
+
+.col-xs-push-8 {
+    left: 66.66666667%
+}
+
+.col-xs-push-7 {
+    left: 58.33333333%
+}
+
+.col-xs-push-6 {
+    left: 50%
+}
+
+.col-xs-push-5 {
+    left: 41.66666667%
+}
+
+.col-xs-push-4 {
+    left: 33.33333333%
+}
+
+.col-xs-push-3 {
+    left: 25%
+}
+
+.col-xs-push-2 {
+    left: 16.66666667%
+}
+
+.col-xs-push-1 {
+    left: 8.33333333%
+}
+
+.col-xs-push-0 {
+    left: auto
+}
+
+.col-xs-offset-12 {
+    margin-left: 100%
+}
+
+.col-xs-offset-11 {
+    margin-left: 91.66666667%
+}
+
+.col-xs-offset-10 {
+    margin-left: 83.33333333%
+}
+
+.col-xs-offset-9 {
+    margin-left: 75%
+}
+
+.col-xs-offset-8 {
+    margin-left: 66.66666667%
+}
+
+.col-xs-offset-7 {
+    margin-left: 58.33333333%
+}
+
+.col-xs-offset-6 {
+    margin-left: 50%
+}
+
+.col-xs-offset-5 {
+    margin-left: 41.66666667%
+}
+
+.col-xs-offset-4 {
+    margin-left: 33.33333333%
+}
+
+.col-xs-offset-3 {
+    margin-left: 25%
+}
+
+.col-xs-offset-2 {
+    margin-left: 16.66666667%
+}
+
+.col-xs-offset-1 {
+    margin-left: 8.33333333%
+}
+
+.col-xs-offset-0 {
+    margin-left: 0
+}
+
+@media (min-width: 768px) {
+    .col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9 {
+        float:left
+    }
+
+    .col-sm-12 {
+        width: 100%
+    }
+
+    .col-sm-11 {
+        width: 91.66666667%
+    }
+
+    .col-sm-10 {
+        width: 83.33333333%
+    }
+
+    .col-sm-9 {
+        width: 75%
+    }
+
+    .col-sm-8 {
+        width: 66.66666667%
+    }
+
+    .col-sm-7 {
+        width: 58.33333333%
+    }
+
+    .col-sm-6 {
+        width: 50%
+    }
+
+    .col-sm-5 {
+        width: 41.66666667%
+    }
+
+    .col-sm-4 {
+        width: 33.33333333%
+    }
+
+    .col-sm-3 {
+        width: 25%
+    }
+
+    .col-sm-2 {
+        width: 16.66666667%
+    }
+
+    .col-sm-1 {
+        width: 8.33333333%
+    }
+
+    .col-sm-pull-12 {
+        right: 100%
+    }
+
+    .col-sm-pull-11 {
+        right: 91.66666667%
+    }
+
+    .col-sm-pull-10 {
+        right: 83.33333333%
+    }
+
+    .col-sm-pull-9 {
+        right: 75%
+    }
+
+    .col-sm-pull-8 {
+        right: 66.66666667%
+    }
+
+    .col-sm-pull-7 {
+        right: 58.33333333%
+    }
+
+    .col-sm-pull-6 {
+        right: 50%
+    }
+
+    .col-sm-pull-5 {
+        right: 41.66666667%
+    }
+
+    .col-sm-pull-4 {
+        right: 33.33333333%
+    }
+
+    .col-sm-pull-3 {
+        right: 25%
+    }
+
+    .col-sm-pull-2 {
+        right: 16.66666667%
+    }
+
+    .col-sm-pull-1 {
+        right: 8.33333333%
+    }
+
+    .col-sm-pull-0 {
+        right: auto
+    }
+
+    .col-sm-push-12 {
+        left: 100%
+    }
+
+    .col-sm-push-11 {
+        left: 91.66666667%
+    }
+
+    .col-sm-push-10 {
+        left: 83.33333333%
+    }
+
+    .col-sm-push-9 {
+        left: 75%
+    }
+
+    .col-sm-push-8 {
+        left: 66.66666667%
+    }
+
+    .col-sm-push-7 {
+        left: 58.33333333%
+    }
+
+    .col-sm-push-6 {
+        left: 50%
+    }
+
+    .col-sm-push-5 {
+        left: 41.66666667%
+    }
+
+    .col-sm-push-4 {
+        left: 33.33333333%
+    }
+
+    .col-sm-push-3 {
+        left: 25%
+    }
+
+    .col-sm-push-2 {
+        left: 16.66666667%
+    }
+
+    .col-sm-push-1 {
+        left: 8.33333333%
+    }
+
+    .col-sm-push-0 {
+        left: auto
+    }
+
+    .col-sm-offset-12 {
+        margin-left: 100%
+    }
+
+    .col-sm-offset-11 {
+        margin-left: 91.66666667%
+    }
+
+    .col-sm-offset-10 {
+        margin-left: 83.33333333%
+    }
+
+    .col-sm-offset-9 {
+        margin-left: 75%
+    }
+
+    .col-sm-offset-8 {
+        margin-left: 66.66666667%
+    }
+
+    .col-sm-offset-7 {
+        margin-left: 58.33333333%
+    }
+
+    .col-sm-offset-6 {
+        margin-left: 50%
+    }
+
+    .col-sm-offset-5 {
+        margin-left: 41.66666667%
+    }
+
+    .col-sm-offset-4 {
+        margin-left: 33.33333333%
+    }
+
+    .col-sm-offset-3 {
+        margin-left: 25%
+    }
+
+    .col-sm-offset-2 {
+        margin-left: 16.66666667%
+    }
+
+    .col-sm-offset-1 {
+        margin-left: 8.33333333%
+    }
+
+    .col-sm-offset-0 {
+        margin-left: 0
+    }
+}
+
+@media (min-width: 992px) {
+    .col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9 {
+        float:left
+    }
+
+    .col-md-12 {
+        width: 100%
+    }
+
+    .col-md-11 {
+        width: 91.66666667%
+    }
+
+    .col-md-10 {
+        width: 83.33333333%
+    }
+
+    .col-md-9 {
+        width: 75%
+    }
+
+    .col-md-8 {
+        width: 66.66666667%
+    }
+
+    .col-md-7 {
+        width: 58.33333333%
+    }
+
+    .col-md-6 {
+        width: 50%
+    }
+
+    .col-md-5 {
+        width: 41.66666667%
+    }
+
+    .col-md-4 {
+        width: 33.33333333%
+    }
+
+    .col-md-3 {
+        width: 25%
+    }
+
+    .col-md-2 {
+        width: 16.66666667%
+    }
+
+    .col-md-1 {
+        width: 8.33333333%
+    }
+
+    .col-md-pull-12 {
+        right: 100%
+    }
+
+    .col-md-pull-11 {
+        right: 91.66666667%
+    }
+
+    .col-md-pull-10 {
+        right: 83.33333333%
+    }
+
+    .col-md-pull-9 {
+        right: 75%
+    }
+
+    .col-md-pull-8 {
+        right: 66.66666667%
+    }
+
+    .col-md-pull-7 {
+        right: 58.33333333%
+    }
+
+    .col-md-pull-6 {
+        right: 50%
+    }
+
+    .col-md-pull-5 {
+        right: 41.66666667%
+    }
+
+    .col-md-pull-4 {
+        right: 33.33333333%
+    }
+
+    .col-md-pull-3 {
+        right: 25%
+    }
+
+    .col-md-pull-2 {
+        right: 16.66666667%
+    }
+
+    .col-md-pull-1 {
+        right: 8.33333333%
+    }
+
+    .col-md-pull-0 {
+        right: auto
+    }
+
+    .col-md-push-12 {
+        left: 100%
+    }
+
+    .col-md-push-11 {
+        left: 91.66666667%
+    }
+
+    .col-md-push-10 {
+        left: 83.33333333%
+    }
+
+    .col-md-push-9 {
+        left: 75%
+    }
+
+    .col-md-push-8 {
+        left: 66.66666667%
+    }
+
+    .col-md-push-7 {
+        left: 58.33333333%
+    }
+
+    .col-md-push-6 {
+        left: 50%
+    }
+
+    .col-md-push-5 {
+        left: 41.66666667%
+    }
+
+    .col-md-push-4 {
+        left: 33.33333333%
+    }
+
+    .col-md-push-3 {
+        left: 25%
+    }
+
+    .col-md-push-2 {
+        left: 16.66666667%
+    }
+
+    .col-md-push-1 {
+        left: 8.33333333%
+    }
+
+    .col-md-push-0 {
+        left: auto
+    }
+
+    .col-md-offset-12 {
+        margin-left: 100%
+    }
+
+    .col-md-offset-11 {
+        margin-left: 91.66666667%
+    }
+
+    .col-md-offset-10 {
+        margin-left: 83.33333333%
+    }
+
+    .col-md-offset-9 {
+        margin-left: 75%
+    }
+
+    .col-md-offset-8 {
+        margin-left: 66.66666667%
+    }
+
+    .col-md-offset-7 {
+        margin-left: 58.33333333%
+    }
+
+    .col-md-offset-6 {
+        margin-left: 50%
+    }
+
+    .col-md-offset-5 {
+        margin-left: 41.66666667%
+    }
+
+    .col-md-offset-4 {
+        margin-left: 33.33333333%
+    }
+
+    .col-md-offset-3 {
+        margin-left: 25%
+    }
+
+    .col-md-offset-2 {
+        margin-left: 16.66666667%
+    }
+
+    .col-md-offset-1 {
+        margin-left: 8.33333333%
+    }
+
+    .col-md-offset-0 {
+        margin-left: 0
+    }
+}
+
+@media (min-width: 1200px) {
+    .col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9 {
+        float:left
+    }
+
+    .col-lg-12 {
+        width: 100%
+    }
+
+    .col-lg-11 {
+        width: 91.66666667%
+    }
+
+    .col-lg-10 {
+        width: 83.33333333%
+    }
+
+    .col-lg-9 {
+        width: 75%
+    }
+
+    .col-lg-8 {
+        width: 66.66666667%
+    }
+
+    .col-lg-7 {
+        width: 58.33333333%
+    }
+
+    .col-lg-6 {
+        width: 50%
+    }
+
+    .col-lg-5 {
+        width: 41.66666667%
+    }
+
+    .col-lg-4 {
+        width: 33.33333333%
+    }
+
+    .col-lg-3 {
+        width: 25%
+    }
+
+    .col-lg-2 {
+        width: 16.66666667%
+    }
+
+    .col-lg-1 {
+        width: 8.33333333%
+    }
+
+    .col-lg-pull-12 {
+        right: 100%
+    }
+
+    .col-lg-pull-11 {
+        right: 91.66666667%
+    }
+
+    .col-lg-pull-10 {
+        right: 83.33333333%
+    }
+
+    .col-lg-pull-9 {
+        right: 75%
+    }
+
+    .col-lg-pull-8 {
+        right: 66.66666667%
+    }
+
+    .col-lg-pull-7 {
+        right: 58.33333333%
+    }
+
+    .col-lg-pull-6 {
+        right: 50%
+    }
+
+    .col-lg-pull-5 {
+        right: 41.66666667%
+    }
+
+    .col-lg-pull-4 {
+        right: 33.33333333%
+    }
+
+    .col-lg-pull-3 {
+        right: 25%
+    }
+
+    .col-lg-pull-2 {
+        right: 16.66666667%
+    }
+
+    .col-lg-pull-1 {
+        right: 8.33333333%
+    }
+
+    .col-lg-pull-0 {
+        right: auto
+    }
+
+    .col-lg-push-12 {
+        left: 100%
+    }
+
+    .col-lg-push-11 {
+        left: 91.66666667%
+    }
+
+    .col-lg-push-10 {
+        left: 83.33333333%
+    }
+
+    .col-lg-push-9 {
+        left: 75%
+    }
+
+    .col-lg-push-8 {
+        left: 66.66666667%
+    }
+
+    .col-lg-push-7 {
+        left: 58.33333333%
+    }
+
+    .col-lg-push-6 {
+        left: 50%
+    }
+
+    .col-lg-push-5 {
+        left: 41.66666667%
+    }
+
+    .col-lg-push-4 {
+        left: 33.33333333%
+    }
+
+    .col-lg-push-3 {
+        left: 25%
+    }
+
+    .col-lg-push-2 {
+        left: 16.66666667%
+    }
+
+    .col-lg-push-1 {
+        left: 8.33333333%
+    }
+
+    .col-lg-push-0 {
+        left: auto
+    }
+
+    .col-lg-offset-12 {
+        margin-left: 100%
+    }
+
+    .col-lg-offset-11 {
+        margin-left: 91.66666667%
+    }
+
+    .col-lg-offset-10 {
+        margin-left: 83.33333333%
+    }
+
+    .col-lg-offset-9 {
+        margin-left: 75%
+    }
+
+    .col-lg-offset-8 {
+        margin-left: 66.66666667%
+    }
+
+    .col-lg-offset-7 {
+        margin-left: 58.33333333%
+    }
+
+    .col-lg-offset-6 {
+        margin-left: 50%
+    }
+
+    .col-lg-offset-5 {
+        margin-left: 41.66666667%
+    }
+
+    .col-lg-offset-4 {
+        margin-left: 33.33333333%
+    }
+
+    .col-lg-offset-3 {
+        margin-left: 25%
+    }
+
+    .col-lg-offset-2 {
+        margin-left: 16.66666667%
+    }
+
+    .col-lg-offset-1 {
+        margin-left: 8.33333333%
+    }
+
+    .col-lg-offset-0 {
+        margin-left: 0
+    }
+}
+
+caption {
+    padding-top: 8px;
+    padding-bottom: 8px;
+    color: #777
+}
+
+.table {
+    width: 100%;
+    margin-bottom: 20px
+}
+
+.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th {
+    padding: 8px;
+    line-height: 1.42857143;
+    vertical-align: top;
+    border-top: 1px solid #ddd
+}
+
+.table>thead>tr>th {
+    vertical-align: bottom;
+    border-bottom: 2px solid #ddd
+}
+
+.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th {
+    border-top: 0
+}
+
+.table>tbody+tbody {
+    border-top: 2px solid #ddd
+}
+
+.table .table {
+    background-color: #fff
+}
+
+.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th {
+    padding: 5px
+}
+
+.table-bordered,.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th {
+    border: 1px solid #ddd
+}
+
+.table-bordered>thead>tr>td,.table-bordered>thead>tr>th {
+    border-bottom-width: 2px
+}
+
+.table-striped>tbody>tr:nth-of-type(odd) {
+    background-color: #f9f9f9
+}
+
+.table-hover>tbody>tr:hover,.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active {
+    background-color: #f5f5f5
+}
+
+table col[class*=col-] {
+    position: static;
+    float: none;
+    display: table-column
+}
+
+table td[class*=col-],table th[class*=col-] {
+    position: static;
+    float: none;
+    display: table-cell
+}
+
+.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover {
+    background-color: #e8e8e8
+}
+
+.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success {
+    background-color: #dff0d8
+}
+
+.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover {
+    background-color: #d0e9c6
+}
+
+.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info {
+    background-color: #d9edf7
+}
+
+.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover {
+    background-color: #c4e3f3
+}
+
+.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning {
+    background-color: #fcf8e3
+}
+
+.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover {
+    background-color: #faf2cc
+}
+
+.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger {
+    background-color: #f2dede
+}
+
+.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover {
+    background-color: #ebcccc
+}
+
+.table-responsive {
+    overflow-x: auto;
+    min-height: .01%
+}
+
+@media screen and (max-width: 767px) {
+    .table-responsive {
+        width:100%;
+        margin-bottom: 15px;
+        overflow-y: hidden;
+        -ms-overflow-style: -ms-autohiding-scrollbar;
+        border: 1px solid #ddd
+    }
+
+    .table-responsive>.table {
+        margin-bottom: 0
+    }
+
+    .table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th {
+        white-space: nowrap
+    }
+
+    .table-responsive>.table-bordered {
+        border: 0
+    }
+
+    .table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child {
+        border-left: 0
+    }
+
+    .table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child {
+        border-right: 0
+    }
+
+    .table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th {
+        border-bottom: 0
+    }
+}
+
+fieldset,legend {
+    padding: 0;
+    border: 0
+}
+
+fieldset {
+    margin: 0;
+    min-width: 0
+}
+
+legend {
+    width: 100%;
+    margin-bottom: 20px;
+    font-size: 21px;
+    line-height: inherit;
+    color: #333;
+    border-bottom: 1px solid #e5e5e5
+}
+
+label {
+    display: inline-block;
+    margin-bottom: 5px
+}
+
+input[type=search] {
+    -webkit-box-sizing: border-box;
+    -moz-box-sizing: border-box;
+    box-sizing: border-box
+}
+
+input[type=checkbox],input[type=radio] {
+    margin: 4px 0 0;
+    margin-top: 1px\9;
+    line-height: normal
+}
+
+.form-control,output {
+    font-size: 14px;
+    line-height: 1.42857143;
+    color: #555;
+    display: block
+}
+
+input[type=file] {
+    display: block
+}
+
+input[type=range] {
+    display: block;
+    width: 100%
+}
+
+select[multiple],select[size] {
+    height: auto
+}
+
+input[type=file]:focus,input[type=checkbox]:focus,input[type=radio]:focus {
+    outline: dotted thin;
+    outline: -webkit-focus-ring-color auto 5px;
+    outline-offset: -2px
+}
+
+output {
+    padding-top: 7px
+}
+
+.form-control {
+    width: 100%;
+    height: 34px;
+    padding: 6px 12px;
+    background-color: #fff;
+    border: 1px solid #ccc;
+    border-radius: 4px;
+    -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075);
+    box-shadow: inset 0 1px 1px rgba(0,0,0,.075);
+    -webkit-transition: border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;
+    -o-transition: border-color ease-in-out .15s,box-shadow ease-in-out .15s;
+    transition: border-color ease-in-out .15s,box-shadow ease-in-out .15s
+}
+
+.form-control:focus {
+    border-color: #66afe9;
+    outline: 0;
+    -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);
+    box-shadow: inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)
+}
+
+.form-control::-moz-placeholder {
+    color: #999;
+    opacity: 1
+}
+
+.form-control:-ms-input-placeholder {
+    color: #999
+}
+
+.form-control::-webkit-input-placeholder {
+    color: #999
+}
+
+.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .form-control-feedback,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label {
+    color: #3c763d
+}
+
+.form-control::-ms-expand {
+    border: 0;
+    background-color: transparent
+}
+
+.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control {
+    background-color: #eee;
+    opacity: 1
+}
+
+.form-control[disabled],fieldset[disabled] .form-control {
+    cursor: not-allowed
+}
+
+textarea.form-control {
+    height: auto
+}
+
+@media screen and (-webkit-min-device-pixel-ratio: 0) {
+    input[type=date].form-control,input[type=time].form-control,input[type=datetime-local].form-control,input[type=month].form-control {
+        line-height:34px
+    }
+
+    .input-group-sm input[type=date],.input-group-sm input[type=time],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm {
+        line-height: 30px
+    }
+
+    .input-group-lg input[type=date],.input-group-lg input[type=time],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg {
+        line-height: 46px
+    }
+}
+
+.form-group {
+    margin-bottom: 15px
+}
+
+.checkbox,.radio {
+    position: relative;
+    display: block;
+    margin-top: 10px;
+    margin-bottom: 10px
+}
+
+.checkbox label,.radio label {
+    min-height: 20px;
+    padding-left: 20px;
+    margin-bottom: 0;
+    font-weight: 400;
+    cursor: pointer
+}
+
+.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio] {
+    position: absolute;
+    margin-left: -20px;
+    margin-top: 4px\9
+}
+
+.checkbox+.checkbox,.radio+.radio {
+    margin-top: -5px
+}
+
+.checkbox-inline,.radio-inline {
+    position: relative;
+    display: inline-block;
+    padding-left: 20px;
+    margin-bottom: 0;
+    vertical-align: middle;
+    font-weight: 400;
+    cursor: pointer
+}
+
+.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline {
+    margin-top: 0;
+    margin-left: 10px
+}
+
+.checkbox-inline.disabled,.checkbox.disabled label,.radio-inline.disabled,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio label,fieldset[disabled] .radio-inline,fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled] {
+    cursor: not-allowed
+}
+
+.form-control-static {
+    padding-top: 7px;
+    padding-bottom: 7px;
+    margin-bottom: 0;
+    min-height: 34px
+}
+
+.form-control-static.input-lg,.form-control-static.input-sm {
+    padding-left: 0;
+    padding-right: 0
+}
+
+.form-group-sm .form-control,.input-sm {
+    padding: 5px 10px;
+    border-radius: 3px;
+    font-size: 12px
+}
+
+.input-sm {
+    height: 30px;
+    line-height: 1.5
+}
+
+select.input-sm {
+    height: 30px;
+    line-height: 30px
+}
+
+select[multiple].input-sm,textarea.input-sm {
+    height: auto
+}
+
+.form-group-sm .form-control {
+    height: 30px;
+    line-height: 1.5
+}
+
+.form-group-lg .form-control,.input-lg {
+    border-radius: 6px;
+    padding: 10px 16px;
+    font-size: 18px
+}
+
+.form-group-sm select.form-control {
+    height: 30px;
+    line-height: 30px
+}
+
+.form-group-sm select[multiple].form-control,.form-group-sm textarea.form-control {
+    height: auto
+}
+
+.form-group-sm .form-control-static {
+    height: 30px;
+    min-height: 32px;
+    padding: 6px 10px;
+    font-size: 12px;
+    line-height: 1.5
+}
+
+.input-lg {
+    height: 46px;
+    line-height: 1.3333333
+}
+
+select.input-lg {
+    height: 46px;
+    line-height: 46px
+}
+
+select[multiple].input-lg,textarea.input-lg {
+    height: auto
+}
+
+.form-group-lg .form-control {
+    height: 46px;
+    line-height: 1.3333333
+}
+
+.form-group-lg select.form-control {
+    height: 46px;
+    line-height: 46px
+}
+
+.form-group-lg select[multiple].form-control,.form-group-lg textarea.form-control {
+    height: auto
+}
+
+.form-group-lg .form-control-static {
+    height: 46px;
+    min-height: 38px;
+    padding: 11px 16px;
+    font-size: 18px;
+    line-height: 1.3333333
+}
+
+.has-feedback {
+    position: relative
+}
+
+.has-feedback .form-control {
+    padding-right: 42.5px
+}
+
+.form-control-feedback {
+    position: absolute;
+    top: 0;
+    right: 0;
+    z-index: 2;
+    display: block;
+    width: 34px;
+    height: 34px;
+    line-height: 34px;
+    text-align: center;
+    pointer-events: none
+}
+
+.form-group-lg .form-control+.form-control-feedback,.input-group-lg+.form-control-feedback,.input-lg+.form-control-feedback {
+    width: 46px;
+    height: 46px;
+    line-height: 46px
+}
+
+.form-group-sm .form-control+.form-control-feedback,.input-group-sm+.form-control-feedback,.input-sm+.form-control-feedback {
+    width: 30px;
+    height: 30px;
+    line-height: 30px
+}
+
+.has-success .form-control {
+    border-color: #3c763d;
+    -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075);
+    box-shadow: inset 0 1px 1px rgba(0,0,0,.075)
+}
+
+.has-success .form-control:focus {
+    border-color: #2b542c;
+    -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;
+    box-shadow: inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168
+}
+
+.has-success .input-group-addon {
+    color: #3c763d;
+    border-color: #3c763d;
+    background-color: #dff0d8
+}
+
+.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .form-control-feedback,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label {
+    color: #8a6d3b
+}
+
+.has-warning .form-control {
+    border-color: #8a6d3b;
+    -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075);
+    box-shadow: inset 0 1px 1px rgba(0,0,0,.075)
+}
+
+.has-warning .form-control:focus {
+    border-color: #66512c;
+    -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;
+    box-shadow: inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b
+}
+
+.has-warning .input-group-addon {
+    color: #8a6d3b;
+    border-color: #8a6d3b;
+    background-color: #fcf8e3
+}
+
+.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .form-control-feedback,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label {
+    color: #a94442
+}
+
+.has-error .form-control {
+    border-color: #a94442;
+    -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075);
+    box-shadow: inset 0 1px 1px rgba(0,0,0,.075)
+}
+
+.has-error .form-control:focus {
+    border-color: #843534;
+    -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;
+    box-shadow: inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483
+}
+
+.has-error .input-group-addon {
+    color: #a94442;
+    border-color: #a94442;
+    background-color: #f2dede
+}
+
+.has-feedback label~.form-control-feedback {
+    top: 25px
+}
+
+.has-feedback label.sr-only~.form-control-feedback {
+    top: 0
+}
+
+.help-block {
+    display: block;
+    margin-top: 5px;
+    margin-bottom: 10px;
+    color: #737373
+}
+
+@media (min-width: 768px) {
+    .form-inline .form-control-static,.form-inline .form-group {
+        display:inline-block
+    }
+
+    .form-inline .control-label,.form-inline .form-group {
+        margin-bottom: 0;
+        vertical-align: middle
+    }
+
+    .form-inline .form-control {
+        display: inline-block;
+        width: auto;
+        vertical-align: middle
+    }
+
+    .form-inline .input-group {
+        display: inline-table;
+        vertical-align: middle
+    }
+
+    .form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn {
+        width: auto
+    }
+
+    .form-inline .input-group>.form-control {
+        width: 100%
+    }
+
+    .form-inline .checkbox,.form-inline .radio {
+        display: inline-block;
+        margin-top: 0;
+        margin-bottom: 0;
+        vertical-align: middle
+    }
+
+    .form-inline .checkbox label,.form-inline .radio label {
+        padding-left: 0
+    }
+
+    .form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio] {
+        position: relative;
+        margin-left: 0
+    }
+
+    .form-inline .has-feedback .form-control-feedback {
+        top: 0
+    }
+
+    .form-horizontal .control-label {
+        text-align: right;
+        margin-bottom: 0;
+        padding-top: 7px
+    }
+}
+
+.btn-block,input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block {
+    width: 100%
+}
+
+.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline {
+    margin-top: 0;
+    margin-bottom: 0;
+    padding-top: 7px
+}
+
+.form-horizontal .checkbox,.form-horizontal .radio {
+    min-height: 27px
+}
+
+.form-horizontal .form-group {
+    margin-left: -15px;
+    margin-right: -15px
+}
+
+#preloader-container .spinner-dots,.aligncenter,.alignright,.btn,.fa-fw,.fa-li,.fa-stack-1x,.fa-stack-2x {
+    text-align: center
+}
+
+.form-horizontal .has-feedback .form-control-feedback {
+    right: 15px
+}
+
+@media (min-width: 768px) {
+    .form-horizontal .form-group-lg .control-label {
+        padding-top:11px;
+        font-size: 18px
+    }
+
+    .form-horizontal .form-group-sm .control-label {
+        padding-top: 6px;
+        font-size: 12px
+    }
+}
+
+.btn {
+    display: inline-block;
+    margin-bottom: 0;
+    font-weight: 400;
+    vertical-align: middle;
+    -ms-touch-action: manipulation;
+    touch-action: manipulation;
+    cursor: pointer;
+    border: 1px solid transparent;
+    white-space: nowrap;
+    padding: 6px 12px;
+    font-size: 14px;
+    line-height: 1.42857143;
+    border-radius: 4px;
+    -webkit-user-select: none;
+    -moz-user-select: none;
+    -ms-user-select: none;
+    user-select: none
+}
+
+.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus {
+    outline: dotted thin;
+    outline: -webkit-focus-ring-color auto 5px;
+    outline-offset: -2px
+}
+
+.btn.focus,.btn:focus,.btn:hover {
+    color: #333;
+    text-decoration: none
+}
+
+.btn.active,.btn:active {
+    outline: 0;
+    background-image: none;
+    -webkit-box-shadow: inset 0 3px 5px rgba(0,0,0,.125);
+    box-shadow: inset 0 3px 5px rgba(0,0,0,.125)
+}
+
+.btn.disabled,.btn[disabled],fieldset[disabled] .btn {
+    cursor: not-allowed;
+    opacity: .65;
+    filter: alpha(opacity=65);
+    -webkit-box-shadow: none;
+    box-shadow: none
+}
+
+a.btn.disabled,fieldset[disabled] a.btn {
+    pointer-events: none
+}
+
+.btn-default {
+    color: #333;
+    background-color: #fff;
+    border-color: #ccc
+}
+
+.btn-default.focus,.btn-default:focus {
+    color: #333;
+    background-color: #e6e6e6;
+    border-color: #8c8c8c
+}
+
+.btn-default.active,.btn-default:active,.btn-default:hover,.open>.dropdown-toggle.btn-default {
+    color: #333;
+    background-color: #e6e6e6;
+    border-color: #adadad
+}
+
+.btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.dropdown-toggle.btn-default.focus,.open>.dropdown-toggle.btn-default:focus,.open>.dropdown-toggle.btn-default:hover {
+    color: #333;
+    background-color: #d4d4d4;
+    border-color: #8c8c8c
+}
+
+.btn-default.disabled.focus,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled].focus,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover {
+    background-color: #fff;
+    border-color: #ccc
+}
+
+.btn-default .badge {
+    color: #fff;
+    background-color: #333
+}
+
+.btn-primary {
+    color: #fff;
+    background-color: #337ab7;
+    border-color: #2e6da4
+}
+
+.btn-primary.focus,.btn-primary:focus {
+    color: #fff;
+    background-color: #286090;
+    border-color: #122b40
+}
+
+.btn-primary.active,.btn-primary:active,.btn-primary:hover,.open>.dropdown-toggle.btn-primary {
+    color: #fff;
+    background-color: #286090;
+    border-color: #204d74
+}
+
+.btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.dropdown-toggle.btn-primary.focus,.open>.dropdown-toggle.btn-primary:focus,.open>.dropdown-toggle.btn-primary:hover {
+    color: #fff;
+    background-color: #204d74;
+    border-color: #122b40
+}
+
+.btn-primary.disabled.focus,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled].focus,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover {
+    background-color: #337ab7;
+    border-color: #2e6da4
+}
+
+.btn-primary .badge {
+    color: #337ab7;
+    background-color: #fff
+}
+
+.btn-success {
+    color: #fff;
+    background-color: #5cb85c;
+    border-color: #4cae4c
+}
+
+.btn-success.focus,.btn-success:focus {
+    color: #fff;
+    background-color: #449d44;
+    border-color: #255625
+}
+
+.btn-success.active,.btn-success:active,.btn-success:hover,.open>.dropdown-toggle.btn-success {
+    color: #fff;
+    background-color: #449d44;
+    border-color: #398439
+}
+
+.btn-success.active.focus,.btn-success.active:focus,.btn-success.active:hover,.btn-success:active.focus,.btn-success:active:focus,.btn-success:active:hover,.open>.dropdown-toggle.btn-success.focus,.open>.dropdown-toggle.btn-success:focus,.open>.dropdown-toggle.btn-success:hover {
+    color: #fff;
+    background-color: #398439;
+    border-color: #255625
+}
+
+.btn-success.disabled.focus,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled].focus,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover {
+    background-color: #5cb85c;
+    border-color: #4cae4c
+}
+
+.btn-success .badge {
+    color: #5cb85c;
+    background-color: #fff
+}
+
+.btn-info {
+    color: #fff;
+    background-color: #5bc0de;
+    border-color: #46b8da
+}
+
+.btn-info.focus,.btn-info:focus {
+    color: #fff;
+    background-color: #31b0d5;
+    border-color: #1b6d85
+}
+
+.btn-info.active,.btn-info:active,.btn-info:hover,.open>.dropdown-toggle.btn-info {
+    color: #fff;
+    background-color: #31b0d5;
+    border-color: #269abc
+}
+
+.btn-info.active.focus,.btn-info.active:focus,.btn-info.active:hover,.btn-info:active.focus,.btn-info:active:focus,.btn-info:active:hover,.open>.dropdown-toggle.btn-info.focus,.open>.dropdown-toggle.btn-info:focus,.open>.dropdown-toggle.btn-info:hover {
+    color: #fff;
+    background-color: #269abc;
+    border-color: #1b6d85
+}
+
+.btn-info.disabled.focus,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled].focus,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover {
+    background-color: #5bc0de;
+    border-color: #46b8da
+}
+
+.btn-info .badge {
+    color: #5bc0de;
+    background-color: #fff
+}
+
+.btn-warning {
+    color: #fff;
+    background-color: #f0ad4e;
+    border-color: #eea236
+}
+
+.btn-warning.focus,.btn-warning:focus {
+    color: #fff;
+    background-color: #ec971f;
+    border-color: #985f0d
+}
+
+.btn-warning.active,.btn-warning:active,.btn-warning:hover,.open>.dropdown-toggle.btn-warning {
+    color: #fff;
+    background-color: #ec971f;
+    border-color: #d58512
+}
+
+.btn-warning.active.focus,.btn-warning.active:focus,.btn-warning.active:hover,.btn-warning:active.focus,.btn-warning:active:focus,.btn-warning:active:hover,.open>.dropdown-toggle.btn-warning.focus,.open>.dropdown-toggle.btn-warning:focus,.open>.dropdown-toggle.btn-warning:hover {
+    color: #fff;
+    background-color: #d58512;
+    border-color: #985f0d
+}
+
+.btn-warning.disabled.focus,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled].focus,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover {
+    background-color: #f0ad4e;
+    border-color: #eea236
+}
+
+.btn-warning .badge {
+    color: #f0ad4e;
+    background-color: #fff
+}
+
+.btn-danger {
+    color: #fff;
+    background-color: #d9534f;
+    border-color: #d43f3a
+}
+
+.btn-danger.focus,.btn-danger:focus {
+    color: #fff;
+    background-color: #c9302c;
+    border-color: #761c19
+}
+
+.btn-danger.active,.btn-danger:active,.btn-danger:hover,.open>.dropdown-toggle.btn-danger {
+    color: #fff;
+    background-color: #c9302c;
+    border-color: #ac2925
+}
+
+.btn-danger.active.focus,.btn-danger.active:focus,.btn-danger.active:hover,.btn-danger:active.focus,.btn-danger:active:focus,.btn-danger:active:hover,.open>.dropdown-toggle.btn-danger.focus,.open>.dropdown-toggle.btn-danger:focus,.open>.dropdown-toggle.btn-danger:hover {
+    color: #fff;
+    background-color: #ac2925;
+    border-color: #761c19
+}
+
+.btn-danger.disabled.focus,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled].focus,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover {
+    background-color: #d9534f;
+    border-color: #d43f3a
+}
+
+.btn-danger .badge {
+    color: #d9534f;
+    background-color: #fff
+}
+
+.btn-link {
+    color: #337ab7;
+    font-weight: 400;
+    border-radius: 0
+}
+
+.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link {
+    background-color: transparent;
+    -webkit-box-shadow: none;
+    box-shadow: none
+}
+
+.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover {
+    border-color: transparent
+}
+
+.btn-link:focus,.btn-link:hover {
+    color: #23527c;
+    text-decoration: underline;
+    background-color: transparent
+}
+
+.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover {
+    color: #777;
+    text-decoration: none
+}
+
+.btn-lg {
+    padding: 10px 16px;
+    font-size: 18px;
+    line-height: 1.3333333;
+    border-radius: 6px
+}
+
+.btn-sm,.btn-xs {
+    font-size: 12px;
+    line-height: 1.5;
+    border-radius: 3px
+}
+
+.btn-sm {
+    padding: 5px 10px
+}
+
+.btn-xs {
+    padding: 1px 5px
+}
+
+.btn-block {
+    display: block
+}
+
+.btn-block+.btn-block {
+    margin-top: 5px
+}
+
+.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.row:after,.row:before {
+    content: " ";
+    display: table
+}
+
+.center-block {
+    display: block;
+    margin-left: auto;
+    margin-right: auto
+}
+
+.fa.fa-pull-left,.fa.pull-left {
+    margin-right: .3em
+}
+
+.pull-right {
+    float: right!important
+}
+
+.pull-left {
+    float: left!important
+}
+
+.hide {
+    display: none!important
+}
+
+.show {
+    display: block!important
+}
+
+.hidden,.visible-lg,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block {
+    display: none!important
+}
+
+.invisible {
+    visibility: hidden
+}
+
+.text-hide {
+    font: 0/0 a;
+    color: transparent;
+    text-shadow: none;
+    background-color: transparent;
+    border: 0
+}
+
+.affix {
+    position: fixed
+}
+
+@-ms-viewport {
+    width: device-width
+}
+
+@media (max-width: 767px) {
+    .visible-xs {
+        display:block!important
+    }
+
+    table.visible-xs {
+        display: table!important
+    }
+
+    tr.visible-xs {
+        display: table-row!important
+    }
+
+    td.visible-xs,th.visible-xs {
+        display: table-cell!important
+    }
+
+    .visible-xs-block {
+        display: block!important
+    }
+
+    .visible-xs-inline {
+        display: inline!important
+    }
+
+    .visible-xs-inline-block {
+        display: inline-block!important
+    }
+}
+
+@media (min-width: 768px) and (max-width:991px) {
+    .visible-sm {
+        display:block!important
+    }
+
+    table.visible-sm {
+        display: table!important
+    }
+
+    tr.visible-sm {
+        display: table-row!important
+    }
+
+    td.visible-sm,th.visible-sm {
+        display: table-cell!important
+    }
+
+    .visible-sm-block {
+        display: block!important
+    }
+
+    .visible-sm-inline {
+        display: inline!important
+    }
+
+    .visible-sm-inline-block {
+        display: inline-block!important
+    }
+}
+
+@media (min-width: 992px) and (max-width:1199px) {
+    .visible-md {
+        display:block!important
+    }
+
+    table.visible-md {
+        display: table!important
+    }
+
+    tr.visible-md {
+        display: table-row!important
+    }
+
+    td.visible-md,th.visible-md {
+        display: table-cell!important
+    }
+
+    .visible-md-block {
+        display: block!important
+    }
+
+    .visible-md-inline {
+        display: inline!important
+    }
+
+    .visible-md-inline-block {
+        display: inline-block!important
+    }
+}
+
+@media (min-width: 1200px) {
+    .visible-lg {
+        display:block!important
+    }
+
+    table.visible-lg {
+        display: table!important
+    }
+
+    tr.visible-lg {
+        display: table-row!important
+    }
+
+    td.visible-lg,th.visible-lg {
+        display: table-cell!important
+    }
+
+    .visible-lg-block {
+        display: block!important
+    }
+
+    .visible-lg-inline {
+        display: inline!important
+    }
+
+    .visible-lg-inline-block {
+        display: inline-block!important
+    }
+
+    .hidden-lg {
+        display: none!important
+    }
+}
+
+@media (max-width: 767px) {
+    .hidden-xs {
+        display:none!important
+    }
+}
+
+@media (min-width: 768px) and (max-width:991px) {
+    .hidden-sm {
+        display:none!important
+    }
+}
+
+@media (min-width: 992px) and (max-width:1199px) {
+    .hidden-md {
+        display:none!important
+    }
+}
+
+.visible-print {
+    display: none!important
+}
+
+@media print {
+    .visible-print {
+        display: block!important
+    }
+
+    table.visible-print {
+        display: table!important
+    }
+
+    tr.visible-print {
+        display: table-row!important
+    }
+
+    td.visible-print,th.visible-print {
+        display: table-cell!important
+    }
+}
+
+.visible-print-block {
+    display: none!important
+}
+
+@media print {
+    .visible-print-block {
+        display: block!important
+    }
+}
+
+.visible-print-inline {
+    display: none!important
+}
+
+@media print {
+    .visible-print-inline {
+        display: inline!important
+    }
+}
+
+.visible-print-inline-block {
+    display: none!important
+}
+
+@media print {
+    .visible-print-inline-block {
+        display: inline-block!important
+    }
+
+    .hidden-print {
+        display: none!important
+    }
+}
+
+.element-no-padding [class*=col-] {
+    padding-left: 0!important;
+    padding-right: 0!important
+}
+
+/*!
+ *  Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome
+ *  License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
+ */
+@font-face {
+    font-family: flownews-FontAwesome;
+    src: url(fonts/fontawesome-webfont.eot?v=4.7.0);
+    src: url(fonts/fontawesome-webfont.eot?#iefix&v=4.7.0) format('embedded-opentype'),url(fonts/fontawesome-webfont.woff2?v=4.7.0) format('woff2'),url(fonts/fontawesome-webfont.woff?v=4.7.0) format('woff'),url(fonts/fontawesome-webfont.ttf?v=4.7.0) format('truetype'),url(fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular) format('svg');
+    font-weight: 400;
+    font-style: normal
+}
+
+.flownewsicon {
+    display: inline-block;
+    font: normal normal normal 14px/1 flownews-FontAwesome;
+    font-size: inherit;
+    text-rendering: auto;
+    -webkit-font-smoothing: antialiased;
+    -moz-osx-font-smoothing: grayscale
+}
+
+.flownews-menu>li.menu-item-has-children>a:after,.submenu>li.menu-item-has-children>a:after,.widget ul>li.menu-item-has-children>a:after {
+    font-family: flownews-FontAwesome!important;
+    speak: none;
+    font-variant: normal;
+    -webkit-font-smoothing: antialiased;
+    -moz-osx-font-smoothing: grayscale
+}
+
+.fa-lg {
+    font-size: 1.33333333em;
+    line-height: .75em;
+    vertical-align: -15%
+}
+
+.fa-2x {
+    font-size: 2em
+}
+
+.fa-3x {
+    font-size: 3em
+}
+
+.fa-4x {
+    font-size: 4em
+}
+
+.fa-5x {
+    font-size: 5em
+}
+
+.fa-fw {
+    width: 1.28571429em
+}
+
+.fa-ul {
+    padding-left: 0;
+    margin-left: 2.14285714em;
+    list-style-type: none
+}
+
+.fa.fa-pull-right,.fa.pull-right {
+    margin-left: .3em
+}
+
+.fa-ul>li {
+    position: relative
+}
+
+.fa-li {
+    position: absolute;
+    left: -2.14285714em;
+    width: 2.14285714em;
+    top: .14285714em
+}
+
+.fa-li.fa-lg {
+    left: -1.85714286em
+}
+
+.fa-border {
+    padding: .2em .25em .15em;
+    border: .08em solid #eee;
+    border-radius: .1em
+}
+
+.fa-pull-left {
+    float: left
+}
+
+.fa-pull-right {
+    float: right
+}
+
+.fa-spin {
+    -webkit-animation: fa-spin 2s infinite linear;
+    animation: fa-spin 2s infinite linear
+}
+
+.fa-pulse {
+    -webkit-animation: fa-spin 1s infinite steps(8);
+    animation: fa-spin 1s infinite steps(8)
+}
+
+@-webkit-keyframes fa-spin {
+    0% {
+        -webkit-transform: rotate(0);
+        transform: rotate(0)
+    }
+
+    100% {
+        -webkit-transform: rotate(359deg);
+        transform: rotate(359deg)
+    }
+}
+
+@keyframes fa-spin {
+    0% {
+        -webkit-transform: rotate(0);
+        transform: rotate(0)
+    }
+
+    100% {
+        -webkit-transform: rotate(359deg);
+        transform: rotate(359deg)
+    }
+}
+
+.fa-rotate-90 {
+    -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";
+    -webkit-transform: rotate(90deg);
+    -ms-transform: rotate(90deg);
+    transform: rotate(90deg)
+}
+
+.fa-rotate-180 {
+    -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";
+    -webkit-transform: rotate(180deg);
+    -ms-transform: rotate(180deg);
+    transform: rotate(180deg)
+}
+
+.fa-rotate-270 {
+    -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";
+    -webkit-transform: rotate(270deg);
+    -ms-transform: rotate(270deg);
+    transform: rotate(270deg)
+}
+
+.fa-flip-horizontal {
+    -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";
+    -webkit-transform: scale(-1,1);
+    -ms-transform: scale(-1,1);
+    transform: scale(-1,1)
+}
+
+.fa-flip-vertical {
+    -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";
+    -webkit-transform: scale(1,-1);
+    -ms-transform: scale(1,-1);
+    transform: scale(1,-1)
+}
+
+:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-rotate-90 {
+    filter: none
+}
+
+.fa-stack {
+    position: relative;
+    display: inline-block;
+    width: 2em;
+    height: 2em;
+    line-height: 2em;
+    vertical-align: middle
+}
+
+.fa-stack-1x,.fa-stack-2x {
+    position: absolute;
+    left: 0;
+    width: 100%
+}
+
+.fa-stack-1x {
+    line-height: inherit
+}
+
+.fa-stack-2x {
+    font-size: 2em
+}
+
+.fa-inverse {
+    color: #fff
+}
+
+.fa-glass:before {
+    content: "\f000"
+}
+
+.fa-music:before {
+    content: "\f001"
+}
+
+.fa-search:before {
+    content: "\f002"
+}
+
+.fa-envelope-o:before {
+    content: "\f003"
+}
+
+.fa-heart:before {
+    content: "\f004"
+}
+
+.fa-star:before {
+    content: "\f005"
+}
+
+.fa-star-o:before {
+    content: "\f006"
+}
+
+.fa-user:before {
+    content: "\f007"
+}
+
+.fa-film:before {
+    content: "\f008"
+}
+
+.fa-th-large:before {
+    content: "\f009"
+}
+
+.fa-th:before {
+    content: "\f00a"
+}
+
+.fa-th-list:before {
+    content: "\f00b"
+}
+
+.fa-check:before {
+    content: "\f00c"
+}
+
+.fa-close:before,.fa-remove:before,.fa-times:before {
+    content: "\f00d"
+}
+
+.fa-search-plus:before {
+    content: "\f00e"
+}
+
+.fa-search-minus:before {
+    content: "\f010"
+}
+
+.fa-power-off:before {
+    content: "\f011"
+}
+
+.fa-signal:before {
+    content: "\f012"
+}
+
+.fa-cog:before,.fa-gear:before {
+    content: "\f013"
+}
+
+.fa-trash-o:before {
+    content: "\f014"
+}
+
+.fa-home:before {
+    content: "\f015"
+}
+
+.fa-file-o:before {
+    content: "\f016"
+}
+
+.fa-clock-o:before {
+    content: "\f017"
+}
+
+.fa-road:before {
+    content: "\f018"
+}
+
+.fa-download:before {
+    content: "\f019"
+}
+
+.fa-arrow-circle-o-down:before {
+    content: "\f01a"
+}
+
+.fa-arrow-circle-o-up:before {
+    content: "\f01b"
+}
+
+.fa-inbox:before {
+    content: "\f01c"
+}
+
+.fa-play-circle-o:before {
+    content: "\f01d"
+}
+
+.fa-repeat:before,.fa-rotate-right:before {
+    content: "\f01e"
+}
+
+.fa-refresh:before {
+    content: "\f021"
+}
+
+.fa-list-alt:before {
+    content: "\f022"
+}
+
+.fa-lock:before {
+    content: "\f023"
+}
+
+.fa-flag:before {
+    content: "\f024"
+}
+
+.fa-headphones:before {
+    content: "\f025"
+}
+
+.fa-volume-off:before {
+    content: "\f026"
+}
+
+.fa-volume-down:before {
+    content: "\f027"
+}
+
+.fa-volume-up:before {
+    content: "\f028"
+}
+
+.fa-qrcode:before {
+    content: "\f029"
+}
+
+.fa-barcode:before {
+    content: "\f02a"
+}
+
+.fa-tag:before {
+    content: "\f02b"
+}
+
+.fa-tags:before {
+    content: "\f02c"
+}
+
+.fa-book:before {
+    content: "\f02d"
+}
+
+.fa-bookmark:before {
+    content: "\f02e"
+}
+
+.fa-print:before {
+    content: "\f02f"
+}
+
+.fa-camera:before {
+    content: "\f030"
+}
+
+.fa-font:before {
+    content: "\f031"
+}
+
+.fa-bold:before {
+    content: "\f032"
+}
+
+.fa-italic:before {
+    content: "\f033"
+}
+
+.fa-text-height:before {
+    content: "\f034"
+}
+
+.fa-text-width:before {
+    content: "\f035"
+}
+
+.fa-align-left:before {
+    content: "\f036"
+}
+
+.fa-align-center:before {
+    content: "\f037"
+}
+
+.fa-align-right:before {
+    content: "\f038"
+}
+
+.fa-align-justify:before {
+    content: "\f039"
+}
+
+.fa-list:before {
+    content: "\f03a"
+}
+
+.fa-dedent:before,.fa-outdent:before {
+    content: "\f03b"
+}
+
+.fa-indent:before {
+    content: "\f03c"
+}
+
+.fa-video-camera:before {
+    content: "\f03d"
+}
+
+.fa-image:before,.fa-photo:before,.fa-picture-o:before {
+    content: "\f03e"
+}
+
+.fa-pencil:before {
+    content: "\f040"
+}
+
+.fa-map-marker:before {
+    content: "\f041"
+}
+
+.fa-adjust:before {
+    content: "\f042"
+}
+
+.fa-tint:before {
+    content: "\f043"
+}
+
+.fa-edit:before,.fa-pencil-square-o:before {
+    content: "\f044"
+}
+
+.fa-share-square-o:before {
+    content: "\f045"
+}
+
+.fa-check-square-o:before {
+    content: "\f046"
+}
+
+.fa-arrows:before {
+    content: "\f047"
+}
+
+.fa-step-backward:before {
+    content: "\f048"
+}
+
+.fa-fast-backward:before {
+    content: "\f049"
+}
+
+.fa-backward:before {
+    content: "\f04a"
+}
+
+.fa-play:before {
+    content: "\f04b"
+}
+
+.fa-pause:before {
+    content: "\f04c"
+}
+
+.fa-stop:before {
+    content: "\f04d"
+}
+
+.fa-forward:before {
+    content: "\f04e"
+}
+
+.fa-fast-forward:before {
+    content: "\f050"
+}
+
+.fa-step-forward:before {
+    content: "\f051"
+}
+
+.fa-eject:before {
+    content: "\f052"
+}
+
+.fa-chevron-left:before {
+    content: "\f053"
+}
+
+.fa-chevron-right:before {
+    content: "\f054"
+}
+
+.fa-plus-circle:before {
+    content: "\f055"
+}
+
+.fa-minus-circle:before {
+    content: "\f056"
+}
+
+.fa-times-circle:before {
+    content: "\f057"
+}
+
+.fa-check-circle:before {
+    content: "\f058"
+}
+
+.fa-question-circle:before {
+    content: "\f059"
+}
+
+.fa-info-circle:before {
+    content: "\f05a"
+}
+
+.fa-crosshairs:before {
+    content: "\f05b"
+}
+
+.fa-times-circle-o:before {
+    content: "\f05c"
+}
+
+.fa-check-circle-o:before {
+    content: "\f05d"
+}
+
+.fa-ban:before {
+    content: "\f05e"
+}
+
+.fa-arrow-left:before {
+    content: "\f060"
+}
+
+.fa-arrow-right:before {
+    content: "\f061"
+}
+
+.fa-arrow-up:before {
+    content: "\f062"
+}
+
+.fa-arrow-down:before {
+    content: "\f063"
+}
+
+.fa-mail-forward:before,.fa-share:before {
+    content: "\f064"
+}
+
+.fa-expand:before {
+    content: "\f065"
+}
+
+.fa-compress:before {
+    content: "\f066"
+}
+
+.fa-plus:before {
+    content: "\f067"
+}
+
+.fa-minus:before {
+    content: "\f068"
+}
+
+.fa-asterisk:before {
+    content: "\f069"
+}
+
+.fa-exclamation-circle:before {
+    content: "\f06a"
+}
+
+.fa-gift:before {
+    content: "\f06b"
+}
+
+.fa-leaf:before {
+    content: "\f06c"
+}
+
+.fa-fire:before {
+    content: "\f06d"
+}
+
+.fa-eye:before {
+    content: "\f06e"
+}
+
+.fa-eye-slash:before {
+    content: "\f070"
+}
+
+.fa-exclamation-triangle:before,.fa-warning:before {
+    content: "\f071"
+}
+
+.fa-plane:before {
+    content: "\f072"
+}
+
+.fa-calendar:before {
+    content: "\f073"
+}
+
+.fa-random:before {
+    content: "\f074"
+}
+
+.fa-comment:before {
+    content: "\f075"
+}
+
+.fa-magnet:before {
+    content: "\f076"
+}
+
+.fa-chevron-up:before {
+    content: "\f077"
+}
+
+.fa-chevron-down:before {
+    content: "\f078"
+}
+
+.fa-retweet:before {
+    content: "\f079"
+}
+
+.fa-shopping-cart:before {
+    content: "\f07a"
+}
+
+.fa-folder:before {
+    content: "\f07b"
+}
+
+.fa-folder-open:before {
+    content: "\f07c"
+}
+
+.fa-arrows-v:before {
+    content: "\f07d"
+}
+
+.fa-arrows-h:before {
+    content: "\f07e"
+}
+
+.fa-bar-chart-o:before,.fa-bar-chart:before {
+    content: "\f080"
+}
+
+.fa-twitter-square:before {
+    content: "\f081"
+}
+
+.fa-facebook-square:before {
+    content: "\f082"
+}
+
+.fa-camera-retro:before {
+    content: "\f083"
+}
+
+.fa-key:before {
+    content: "\f084"
+}
+
+.fa-cogs:before,.fa-gears:before {
+    content: "\f085"
+}
+
+.fa-comments:before {
+    content: "\f086"
+}
+
+.fa-thumbs-o-up:before {
+    content: "\f087"
+}
+
+.fa-thumbs-o-down:before {
+    content: "\f088"
+}
+
+.fa-star-half:before {
+    content: "\f089"
+}
+
+.fa-heart-o:before {
+    content: "\f08a"
+}
+
+.fa-sign-out:before {
+    content: "\f08b"
+}
+
+.fa-linkedin-square:before {
+    content: "\f08c"
+}
+
+.fa-thumb-tack:before {
+    content: "\f08d"
+}
+
+.fa-external-link:before {
+    content: "\f08e"
+}
+
+.fa-sign-in:before {
+    content: "\f090"
+}
+
+.fa-trophy:before {
+    content: "\f091"
+}
+
+.fa-github-square:before {
+    content: "\f092"
+}
+
+.fa-upload:before {
+    content: "\f093"
+}
+
+.fa-lemon-o:before {
+    content: "\f094"
+}
+
+.fa-phone:before {
+    content: "\f095"
+}
+
+.fa-square-o:before {
+    content: "\f096"
+}
+
+.fa-bookmark-o:before {
+    content: "\f097"
+}
+
+.fa-phone-square:before {
+    content: "\f098"
+}
+
+.fa-twitter:before {
+    content: "\f099"
+}
+
+.fa-facebook-f:before,.fa-facebook:before {
+    content: "\f09a"
+}
+
+.fa-github:before {
+    content: "\f09b"
+}
+
+.fa-unlock:before {
+    content: "\f09c"
+}
+
+.fa-credit-card:before {
+    content: "\f09d"
+}
+
+.fa-feed:before,.fa-rss:before {
+    content: "\f09e"
+}
+
+.fa-hdd-o:before {
+    content: "\f0a0"
+}
+
+.fa-bullhorn:before {
+    content: "\f0a1"
+}
+
+.fa-bell:before {
+    content: "\f0f3"
+}
+
+.fa-certificate:before {
+    content: "\f0a3"
+}
+
+.fa-hand-o-right:before {
+    content: "\f0a4"
+}
+
+.fa-hand-o-left:before {
+    content: "\f0a5"
+}
+
+.fa-hand-o-up:before {
+    content: "\f0a6"
+}
+
+.fa-hand-o-down:before {
+    content: "\f0a7"
+}
+
+.fa-arrow-circle-left:before {
+    content: "\f0a8"
+}
+
+.fa-arrow-circle-right:before {
+    content: "\f0a9"
+}
+
+.fa-arrow-circle-up:before {
+    content: "\f0aa"
+}
+
+.fa-arrow-circle-down:before {
+    content: "\f0ab"
+}
+
+.fa-globe:before {
+    content: "\f0ac"
+}
+
+.fa-wrench:before {
+    content: "\f0ad"
+}
+
+.fa-tasks:before {
+    content: "\f0ae"
+}
+
+.fa-filter:before {
+    content: "\f0b0"
+}
+
+.fa-briefcase:before {
+    content: "\f0b1"
+}
+
+.fa-arrows-alt:before {
+    content: "\f0b2"
+}
+
+.fa-group:before,.fa-users:before {
+    content: "\f0c0"
+}
+
+.fa-chain:before,.fa-link:before {
+    content: "\f0c1"
+}
+
+.fa-cloud:before {
+    content: "\f0c2"
+}
+
+.fa-flask:before {
+    content: "\f0c3"
+}
+
+.fa-cut:before,.fa-scissors:before {
+    content: "\f0c4"
+}
+
+.fa-copy:before,.fa-files-o:before {
+    content: "\f0c5"
+}
+
+.fa-paperclip:before {
+    content: "\f0c6"
+}
+
+.fa-floppy-o:before,.fa-save:before {
+    content: "\f0c7"
+}
+
+.fa-square:before {
+    content: "\f0c8"
+}
+
+.fa-bars:before,.fa-navicon:before,.fa-reorder:before {
+    content: "\f0c9"
+}
+
+.fa-list-ul:before {
+    content: "\f0ca"
+}
+
+.fa-list-ol:before {
+    content: "\f0cb"
+}
+
+.fa-strikethrough:before {
+    content: "\f0cc"
+}
+
+.fa-underline:before {
+    content: "\f0cd"
+}
+
+.fa-table:before {
+    content: "\f0ce"
+}
+
+.fa-magic:before {
+    content: "\f0d0"
+}
+
+.fa-truck:before {
+    content: "\f0d1"
+}
+
+.fa-pinterest:before {
+    content: "\f0d2"
+}
+
+.fa-pinterest-square:before {
+    content: "\f0d3"
+}
+
+.fa-google-plus-square:before {
+    content: "\f0d4"
+}
+
+.fa-google-plus:before {
+    content: "\f0d5"
+}
+
+.fa-money:before {
+    content: "\f0d6"
+}
+
+.fa-caret-down:before {
+    content: "\f0d7"
+}
+
+.fa-caret-up:before {
+    content: "\f0d8"
+}
+
+.fa-caret-left:before {
+    content: "\f0d9"
+}
+
+.fa-caret-right:before {
+    content: "\f0da"
+}
+
+.fa-columns:before {
+    content: "\f0db"
+}
+
+.fa-sort:before,.fa-unsorted:before {
+    content: "\f0dc"
+}
+
+.fa-sort-desc:before,.fa-sort-down:before {
+    content: "\f0dd"
+}
+
+.fa-sort-asc:before,.fa-sort-up:before {
+    content: "\f0de"
+}
+
+.fa-envelope:before {
+    content: "\f0e0"
+}
+
+.fa-linkedin:before {
+    content: "\f0e1"
+}
+
+.fa-rotate-left:before,.fa-undo:before {
+    content: "\f0e2"
+}
+
+.fa-gavel:before,.fa-legal:before {
+    content: "\f0e3"
+}
+
+.fa-dashboard:before,.fa-tachometer:before {
+    content: "\f0e4"
+}
+
+.fa-comment-o:before {
+    content: "\f0e5"
+}
+
+.fa-comments-o:before {
+    content: "\f0e6"
+}
+
+.fa-bolt:before,.fa-flash:before {
+    content: "\f0e7"
+}
+
+.fa-sitemap:before {
+    content: "\f0e8"
+}
+
+.fa-umbrella:before {
+    content: "\f0e9"
+}
+
+.fa-clipboard:before,.fa-paste:before {
+    content: "\f0ea"
+}
+
+.fa-lightbulb-o:before {
+    content: "\f0eb"
+}
+
+.fa-exchange:before {
+    content: "\f0ec"
+}
+
+.fa-cloud-download:before {
+    content: "\f0ed"
+}
+
+.fa-cloud-upload:before {
+    content: "\f0ee"
+}
+
+.fa-user-md:before {
+    content: "\f0f0"
+}
+
+.fa-stethoscope:before {
+    content: "\f0f1"
+}
+
+.fa-suitcase:before {
+    content: "\f0f2"
+}
+
+.fa-bell-o:before {
+    content: "\f0a2"
+}
+
+.fa-coffee:before {
+    content: "\f0f4"
+}
+
+.fa-cutlery:before {
+    content: "\f0f5"
+}
+
+.fa-file-text-o:before {
+    content: "\f0f6"
+}
+
+.fa-building-o:before {
+    content: "\f0f7"
+}
+
+.fa-hospital-o:before {
+    content: "\f0f8"
+}
+
+.fa-ambulance:before {
+    content: "\f0f9"
+}
+
+.fa-medkit:before {
+    content: "\f0fa"
+}
+
+.fa-fighter-jet:before {
+    content: "\f0fb"
+}
+
+.fa-beer:before {
+    content: "\f0fc"
+}
+
+.fa-h-square:before {
+    content: "\f0fd"
+}
+
+.fa-plus-square:before {
+    content: "\f0fe"
+}
+
+.fa-angle-double-left:before {
+    content: "\f100"
+}
+
+.fa-angle-double-right:before {
+    content: "\f101"
+}
+
+.fa-angle-double-up:before {
+    content: "\f102"
+}
+
+.fa-angle-double-down:before {
+    content: "\f103"
+}
+
+.fa-angle-left:before {
+    content: "\f104"
+}
+
+.fa-angle-right:before {
+    content: "\f105"
+}
+
+.fa-angle-up:before {
+    content: "\f106"
+}
+
+.fa-angle-down:before {
+    content: "\f107"
+}
+
+.fa-desktop:before {
+    content: "\f108"
+}
+
+.fa-laptop:before {
+    content: "\f109"
+}
+
+.fa-tablet:before {
+    content: "\f10a"
+}
+
+.fa-mobile-phone:before,.fa-mobile:before {
+    content: "\f10b"
+}
+
+.fa-circle-o:before {
+    content: "\f10c"
+}
+
+.fa-quote-left:before {
+    content: "\f10d"
+}
+
+.fa-quote-right:before {
+    content: "\f10e"
+}
+
+.fa-spinner:before {
+    content: "\f110"
+}
+
+.fa-circle:before {
+    content: "\f111"
+}
+
+.fa-mail-reply:before,.fa-reply:before {
+    content: "\f112"
+}
+
+.fa-github-alt:before {
+    content: "\f113"
+}
+
+.fa-folder-o:before {
+    content: "\f114"
+}
+
+.fa-folder-open-o:before {
+    content: "\f115"
+}
+
+.fa-smile-o:before {
+    content: "\f118"
+}
+
+.fa-frown-o:before {
+    content: "\f119"
+}
+
+.fa-meh-o:before {
+    content: "\f11a"
+}
+
+.fa-gamepad:before {
+    content: "\f11b"
+}
+
+.fa-keyboard-o:before {
+    content: "\f11c"
+}
+
+.fa-flag-o:before {
+    content: "\f11d"
+}
+
+.fa-flag-checkered:before {
+    content: "\f11e"
+}
+
+.fa-terminal:before {
+    content: "\f120"
+}
+
+.fa-code:before {
+    content: "\f121"
+}
+
+.fa-mail-reply-all:before,.fa-reply-all:before {
+    content: "\f122"
+}
+
+.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before {
+    content: "\f123"
+}
+
+.fa-location-arrow:before {
+    content: "\f124"
+}
+
+.fa-crop:before {
+    content: "\f125"
+}
+
+.fa-code-fork:before {
+    content: "\f126"
+}
+
+.fa-chain-broken:before,.fa-unlink:before {
+    content: "\f127"
+}
+
+.fa-question:before {
+    content: "\f128"
+}
+
+.fa-info:before {
+    content: "\f129"
+}
+
+.fa-exclamation:before {
+    content: "\f12a"
+}
+
+.fa-superscript:before {
+    content: "\f12b"
+}
+
+.fa-subscript:before {
+    content: "\f12c"
+}
+
+.fa-eraser:before {
+    content: "\f12d"
+}
+
+.fa-puzzle-piece:before {
+    content: "\f12e"
+}
+
+.fa-microphone:before {
+    content: "\f130"
+}
+
+.fa-microphone-slash:before {
+    content: "\f131"
+}
+
+.fa-shield:before {
+    content: "\f132"
+}
+
+.fa-calendar-o:before {
+    content: "\f133"
+}
+
+.fa-fire-extinguisher:before {
+    content: "\f134"
+}
+
+.fa-rocket:before {
+    content: "\f135"
+}
+
+.fa-maxcdn:before {
+    content: "\f136"
+}
+
+.fa-chevron-circle-left:before {
+    content: "\f137"
+}
+
+.fa-chevron-circle-right:before {
+    content: "\f138"
+}
+
+.fa-chevron-circle-up:before {
+    content: "\f139"
+}
+
+.fa-chevron-circle-down:before {
+    content: "\f13a"
+}
+
+.fa-html5:before {
+    content: "\f13b"
+}
+
+.fa-css3:before {
+    content: "\f13c"
+}
+
+.fa-anchor:before {
+    content: "\f13d"
+}
+
+.fa-unlock-alt:before {
+    content: "\f13e"
+}
+
+.fa-bullseye:before {
+    content: "\f140"
+}
+
+.fa-ellipsis-h:before {
+    content: "\f141"
+}
+
+.fa-ellipsis-v:before {
+    content: "\f142"
+}
+
+.fa-rss-square:before {
+    content: "\f143"
+}
+
+.fa-play-circle:before {
+    content: "\f144"
+}
+
+.fa-ticket:before {
+    content: "\f145"
+}
+
+.fa-minus-square:before {
+    content: "\f146"
+}
+
+.fa-minus-square-o:before {
+    content: "\f147"
+}
+
+.fa-level-up:before {
+    content: "\f148"
+}
+
+.fa-level-down:before {
+    content: "\f149"
+}
+
+.fa-check-square:before {
+    content: "\f14a"
+}
+
+.fa-pencil-square:before {
+    content: "\f14b"
+}
+
+.fa-external-link-square:before {
+    content: "\f14c"
+}
+
+.fa-share-square:before {
+    content: "\f14d"
+}
+
+.fa-compass:before {
+    content: "\f14e"
+}
+
+.fa-caret-square-o-down:before,.fa-toggle-down:before {
+    content: "\f150"
+}
+
+.fa-caret-square-o-up:before,.fa-toggle-up:before {
+    content: "\f151"
+}
+
+.fa-caret-square-o-right:before,.fa-toggle-right:before {
+    content: "\f152"
+}
+
+.fa-eur:before,.fa-euro:before {
+    content: "\f153"
+}
+
+.fa-gbp:before {
+    content: "\f154"
+}
+
+.fa-dollar:before,.fa-usd:before {
+    content: "\f155"
+}
+
+.fa-inr:before,.fa-rupee:before {
+    content: "\f156"
+}
+
+.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen:before {
+    content: "\f157"
+}
+
+.fa-rouble:before,.fa-rub:before,.fa-ruble:before {
+    content: "\f158"
+}
+
+.fa-krw:before,.fa-won:before {
+    content: "\f159"
+}
+
+.fa-bitcoin:before,.fa-btc:before {
+    content: "\f15a"
+}
+
+.fa-file:before {
+    content: "\f15b"
+}
+
+.fa-file-text:before {
+    content: "\f15c"
+}
+
+.fa-sort-alpha-asc:before {
+    content: "\f15d"
+}
+
+.fa-sort-alpha-desc:before {
+    content: "\f15e"
+}
+
+.fa-sort-amount-asc:before {
+    content: "\f160"
+}
+
+.fa-sort-amount-desc:before {
+    content: "\f161"
+}
+
+.fa-sort-numeric-asc:before {
+    content: "\f162"
+}
+
+.fa-sort-numeric-desc:before {
+    content: "\f163"
+}
+
+.fa-thumbs-up:before {
+    content: "\f164"
+}
+
+.fa-thumbs-down:before {
+    content: "\f165"
+}
+
+.fa-youtube-square:before {
+    content: "\f166"
+}
+
+.fa-youtube:before {
+    content: "\f167"
+}
+
+.fa-xing:before {
+    content: "\f168"
+}
+
+.fa-xing-square:before {
+    content: "\f169"
+}
+
+.fa-youtube-play:before {
+    content: "\f16a"
+}
+
+.fa-dropbox:before {
+    content: "\f16b"
+}
+
+.fa-stack-overflow:before {
+    content: "\f16c"
+}
+
+.fa-instagram:before {
+    content: "\f16d"
+}
+
+.fa-flickr:before {
+    content: "\f16e"
+}
+
+.fa-adn:before {
+    content: "\f170"
+}
+
+.fa-bitbucket:before {
+    content: "\f171"
+}
+
+.fa-bitbucket-square:before {
+    content: "\f172"
+}
+
+.fa-tumblr:before {
+    content: "\f173"
+}
+
+.fa-tumblr-square:before {
+    content: "\f174"
+}
+
+.fa-long-arrow-down:before {
+    content: "\f175"
+}
+
+.fa-long-arrow-up:before {
+    content: "\f176"
+}
+
+.fa-long-arrow-left:before {
+    content: "\f177"
+}
+
+.fa-long-arrow-right:before {
+    content: "\f178"
+}
+
+.fa-apple:before {
+    content: "\f179"
+}
+
+.fa-windows:before {
+    content: "\f17a"
+}
+
+.fa-android:before {
+    content: "\f17b"
+}
+
+.fa-linux:before {
+    content: "\f17c"
+}
+
+.fa-dribbble:before {
+    content: "\f17d"
+}
+
+.fa-skype:before {
+    content: "\f17e"
+}
+
+.fa-foursquare:before {
+    content: "\f180"
+}
+
+.fa-trello:before {
+    content: "\f181"
+}
+
+.fa-female:before {
+    content: "\f182"
+}
+
+.fa-male:before {
+    content: "\f183"
+}
+
+.fa-gittip:before,.fa-gratipay:before {
+    content: "\f184"
+}
+
+.fa-sun-o:before {
+    content: "\f185"
+}
+
+.fa-moon-o:before {
+    content: "\f186"
+}
+
+.fa-archive:before {
+    content: "\f187"
+}
+
+.fa-bug:before {
+    content: "\f188"
+}
+
+.fa-vk:before {
+    content: "\f189"
+}
+
+.fa-weibo:before {
+    content: "\f18a"
+}
+
+.fa-renren:before {
+    content: "\f18b"
+}
+
+.fa-pagelines:before {
+    content: "\f18c"
+}
+
+.fa-stack-exchange:before {
+    content: "\f18d"
+}
+
+.fa-arrow-circle-o-right:before {
+    content: "\f18e"
+}
+
+.fa-arrow-circle-o-left:before {
+    content: "\f190"
+}
+
+.fa-caret-square-o-left:before,.fa-toggle-left:before {
+    content: "\f191"
+}
+
+.fa-dot-circle-o:before {
+    content: "\f192"
+}
+
+.fa-wheelchair:before {
+    content: "\f193"
+}
+
+.fa-vimeo-square:before {
+    content: "\f194"
+}
+
+.fa-try:before,.fa-turkish-lira:before {
+    content: "\f195"
+}
+
+.fa-plus-square-o:before {
+    content: "\f196"
+}
+
+.fa-space-shuttle:before {
+    content: "\f197"
+}
+
+.fa-slack:before {
+    content: "\f198"
+}
+
+.fa-envelope-square:before {
+    content: "\f199"
+}
+
+.fa-wordpress:before {
+    content: "\f19a"
+}
+
+.fa-openid:before {
+    content: "\f19b"
+}
+
+.fa-bank:before,.fa-institution:before,.fa-university:before {
+    content: "\f19c"
+}
+
+.fa-graduation-cap:before,.fa-mortar-board:before {
+    content: "\f19d"
+}
+
+.fa-yahoo:before {
+    content: "\f19e"
+}
+
+.fa-google:before {
+    content: "\f1a0"
+}
+
+.fa-reddit:before {
+    content: "\f1a1"
+}
+
+.fa-reddit-square:before {
+    content: "\f1a2"
+}
+
+.fa-stumbleupon-circle:before {
+    content: "\f1a3"
+}
+
+.fa-stumbleupon:before {
+    content: "\f1a4"
+}
+
+.fa-delicious:before {
+    content: "\f1a5"
+}
+
+.fa-digg:before {
+    content: "\f1a6"
+}
+
+.fa-pied-piper-pp:before {
+    content: "\f1a7"
+}
+
+.fa-pied-piper-alt:before {
+    content: "\f1a8"
+}
+
+.fa-drupal:before {
+    content: "\f1a9"
+}
+
+.fa-joomla:before {
+    content: "\f1aa"
+}
+
+.fa-language:before {
+    content: "\f1ab"
+}
+
+.fa-fax:before {
+    content: "\f1ac"
+}
+
+.fa-building:before {
+    content: "\f1ad"
+}
+
+.fa-child:before {
+    content: "\f1ae"
+}
+
+.fa-paw:before {
+    content: "\f1b0"
+}
+
+.fa-spoon:before {
+    content: "\f1b1"
+}
+
+.fa-cube:before {
+    content: "\f1b2"
+}
+
+.fa-cubes:before {
+    content: "\f1b3"
+}
+
+.fa-behance:before {
+    content: "\f1b4"
+}
+
+.fa-behance-square:before {
+    content: "\f1b5"
+}
+
+.fa-steam:before {
+    content: "\f1b6"
+}
+
+.fa-steam-square:before {
+    content: "\f1b7"
+}
+
+.fa-recycle:before {
+    content: "\f1b8"
+}
+
+.fa-automobile:before,.fa-car:before {
+    content: "\f1b9"
+}
+
+.fa-cab:before,.fa-taxi:before {
+    content: "\f1ba"
+}
+
+.fa-tree:before {
+    content: "\f1bb"
+}
+
+.fa-spotify:before {
+    content: "\f1bc"
+}
+
+.fa-deviantart:before {
+    content: "\f1bd"
+}
+
+.fa-soundcloud:before {
+    content: "\f1be"
+}
+
+.fa-database:before {
+    content: "\f1c0"
+}
+
+.fa-file-pdf-o:before {
+    content: "\f1c1"
+}
+
+.fa-file-word-o:before {
+    content: "\f1c2"
+}
+
+.fa-file-excel-o:before {
+    content: "\f1c3"
+}
+
+.fa-file-powerpoint-o:before {
+    content: "\f1c4"
+}
+
+.fa-file-image-o:before,.fa-file-photo-o:before,.fa-file-picture-o:before {
+    content: "\f1c5"
+}
+
+.fa-file-archive-o:before,.fa-file-zip-o:before {
+    content: "\f1c6"
+}
+
+.fa-file-audio-o:before,.fa-file-sound-o:before {
+    content: "\f1c7"
+}
+
+.fa-file-movie-o:before,.fa-file-video-o:before {
+    content: "\f1c8"
+}
+
+.fa-file-code-o:before {
+    content: "\f1c9"
+}
+
+.fa-vine:before {
+    content: "\f1ca"
+}
+
+.fa-codepen:before {
+    content: "\f1cb"
+}
+
+.fa-jsfiddle:before {
+    content: "\f1cc"
+}
+
+.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-ring:before,.fa-life-saver:before,.fa-support:before {
+    content: "\f1cd"
+}
+
+.fa-circle-o-notch:before {
+    content: "\f1ce"
+}
+
+.fa-ra:before,.fa-rebel:before,.fa-resistance:before {
+    content: "\f1d0"
+}
+
+.fa-empire:before,.fa-ge:before {
+    content: "\f1d1"
+}
+
+.fa-git-square:before {
+    content: "\f1d2"
+}
+
+.fa-git:before {
+    content: "\f1d3"
+}
+
+.fa-hacker-news:before,.fa-y-combinator-square:before,.fa-yc-square:before {
+    content: "\f1d4"
+}
+
+.fa-tencent-weibo:before {
+    content: "\f1d5"
+}
+
+.fa-qq:before {
+    content: "\f1d6"
+}
+
+.fa-wechat:before,.fa-weixin:before {
+    content: "\f1d7"
+}
+
+.fa-paper-plane:before,.fa-send:before {
+    content: "\f1d8"
+}
+
+.fa-paper-plane-o:before,.fa-send-o:before {
+    content: "\f1d9"
+}
+
+.fa-history:before {
+    content: "\f1da"
+}
+
+.fa-circle-thin:before {
+    content: "\f1db"
+}
+
+.fa-header:before {
+    content: "\f1dc"
+}
+
+.fa-paragraph:before {
+    content: "\f1dd"
+}
+
+.fa-sliders:before {
+    content: "\f1de"
+}
+
+.fa-share-alt:before {
+    content: "\f1e0"
+}
+
+.fa-share-alt-square:before {
+    content: "\f1e1"
+}
+
+.fa-bomb:before {
+    content: "\f1e2"
+}
+
+.fa-futbol-o:before,.fa-soccer-ball-o:before {
+    content: "\f1e3"
+}
+
+.fa-tty:before {
+    content: "\f1e4"
+}
+
+.fa-binoculars:before {
+    content: "\f1e5"
+}
+
+.fa-plug:before {
+    content: "\f1e6"
+}
+
+.fa-slideshare:before {
+    content: "\f1e7"
+}
+
+.fa-twitch:before {
+    content: "\f1e8"
+}
+
+.fa-yelp:before {
+    content: "\f1e9"
+}
+
+.fa-newspaper-o:before {
+    content: "\f1ea"
+}
+
+.fa-wifi:before {
+    content: "\f1eb"
+}
+
+.fa-calculator:before {
+    content: "\f1ec"
+}
+
+.fa-paypal:before {
+    content: "\f1ed"
+}
+
+.fa-google-wallet:before {
+    content: "\f1ee"
+}
+
+.fa-cc-visa:before {
+    content: "\f1f0"
+}
+
+.fa-cc-mastercard:before {
+    content: "\f1f1"
+}
+
+.fa-cc-discover:before {
+    content: "\f1f2"
+}
+
+.fa-cc-amex:before {
+    content: "\f1f3"
+}
+
+.fa-cc-paypal:before {
+    content: "\f1f4"
+}
+
+.fa-cc-stripe:before {
+    content: "\f1f5"
+}
+
+.fa-bell-slash:before {
+    content: "\f1f6"
+}
+
+.fa-bell-slash-o:before {
+    content: "\f1f7"
+}
+
+.fa-trash:before {
+    content: "\f1f8"
+}
+
+.fa-copyright:before {
+    content: "\f1f9"
+}
+
+.fa-at:before {
+    content: "\f1fa"
+}
+
+.fa-eyedropper:before {
+    content: "\f1fb"
+}
+
+.fa-paint-brush:before {
+    content: "\f1fc"
+}
+
+.fa-birthday-cake:before {
+    content: "\f1fd"
+}
+
+.fa-area-chart:before {
+    content: "\f1fe"
+}
+
+.fa-pie-chart:before {
+    content: "\f200"
+}
+
+.fa-line-chart:before {
+    content: "\f201"
+}
+
+.fa-lastfm:before {
+    content: "\f202"
+}
+
+.fa-lastfm-square:before {
+    content: "\f203"
+}
+
+.fa-toggle-off:before {
+    content: "\f204"
+}
+
+.fa-toggle-on:before {
+    content: "\f205"
+}
+
+.fa-bicycle:before {
+    content: "\f206"
+}
+
+.fa-bus:before {
+    content: "\f207"
+}
+
+.fa-ioxhost:before {
+    content: "\f208"
+}
+
+.fa-angellist:before {
+    content: "\f209"
+}
+
+.fa-cc:before {
+    content: "\f20a"
+}
+
+.fa-ils:before,.fa-shekel:before,.fa-sheqel:before {
+    content: "\f20b"
+}
+
+.fa-meanpath:before {
+    content: "\f20c"
+}
+
+.fa-buysellads:before {
+    content: "\f20d"
+}
+
+.fa-connectdevelop:before {
+    content: "\f20e"
+}
+
+.fa-dashcube:before {
+    content: "\f210"
+}
+
+.fa-forumbee:before {
+    content: "\f211"
+}
+
+.fa-leanpub:before {
+    content: "\f212"
+}
+
+.fa-sellsy:before {
+    content: "\f213"
+}
+
+.fa-shirtsinbulk:before {
+    content: "\f214"
+}
+
+.fa-simplybuilt:before {
+    content: "\f215"
+}
+
+.fa-skyatlas:before {
+    content: "\f216"
+}
+
+.fa-cart-plus:before {
+    content: "\f217"
+}
+
+.fa-cart-arrow-down:before {
+    content: "\f218"
+}
+
+.fa-diamond:before {
+    content: "\f219"
+}
+
+.fa-ship:before {
+    content: "\f21a"
+}
+
+.fa-user-secret:before {
+    content: "\f21b"
+}
+
+.fa-motorcycle:before {
+    content: "\f21c"
+}
+
+.fa-street-view:before {
+    content: "\f21d"
+}
+
+.fa-heartbeat:before {
+    content: "\f21e"
+}
+
+.fa-venus:before {
+    content: "\f221"
+}
+
+.fa-mars:before {
+    content: "\f222"
+}
+
+.fa-mercury:before {
+    content: "\f223"
+}
+
+.fa-intersex:before,.fa-transgender:before {
+    content: "\f224"
+}
+
+.fa-transgender-alt:before {
+    content: "\f225"
+}
+
+.fa-venus-double:before {
+    content: "\f226"
+}
+
+.fa-mars-double:before {
+    content: "\f227"
+}
+
+.fa-venus-mars:before {
+    content: "\f228"
+}
+
+.fa-mars-stroke:before {
+    content: "\f229"
+}
+
+.fa-mars-stroke-v:before {
+    content: "\f22a"
+}
+
+.fa-mars-stroke-h:before {
+    content: "\f22b"
+}
+
+.fa-neuter:before {
+    content: "\f22c"
+}
+
+.fa-genderless:before {
+    content: "\f22d"
+}
+
+.fa-facebook-official:before {
+    content: "\f230"
+}
+
+.fa-pinterest-p:before {
+    content: "\f231"
+}
+
+.fa-whatsapp:before {
+    content: "\f232"
+}
+
+.fa-server:before {
+    content: "\f233"
+}
+
+.fa-user-plus:before {
+    content: "\f234"
+}
+
+.fa-user-times:before {
+    content: "\f235"
+}
+
+.fa-bed:before,.fa-hotel:before {
+    content: "\f236"
+}
+
+.fa-viacoin:before {
+    content: "\f237"
+}
+
+.fa-train:before {
+    content: "\f238"
+}
+
+.fa-subway:before {
+    content: "\f239"
+}
+
+.fa-medium:before {
+    content: "\f23a"
+}
+
+.fa-y-combinator:before,.fa-yc:before {
+    content: "\f23b"
+}
+
+.fa-optin-monster:before {
+    content: "\f23c"
+}
+
+.fa-opencart:before {
+    content: "\f23d"
+}
+
+.fa-expeditedssl:before {
+    content: "\f23e"
+}
+
+.fa-battery-4:before,.fa-battery-full:before,.fa-battery:before {
+    content: "\f240"
+}
+
+.fa-battery-3:before,.fa-battery-three-quarters:before {
+    content: "\f241"
+}
+
+.fa-battery-2:before,.fa-battery-half:before {
+    content: "\f242"
+}
+
+.fa-battery-1:before,.fa-battery-quarter:before {
+    content: "\f243"
+}
+
+.fa-battery-0:before,.fa-battery-empty:before {
+    content: "\f244"
+}
+
+.fa-mouse-pointer:before {
+    content: "\f245"
+}
+
+.fa-i-cursor:before {
+    content: "\f246"
+}
+
+.fa-object-group:before {
+    content: "\f247"
+}
+
+.fa-object-ungroup:before {
+    content: "\f248"
+}
+
+.fa-sticky-note:before {
+    content: "\f249"
+}
+
+.fa-sticky-note-o:before {
+    content: "\f24a"
+}
+
+.fa-cc-jcb:before {
+    content: "\f24b"
+}
+
+.fa-cc-diners-club:before {
+    content: "\f24c"
+}
+
+.fa-clone:before {
+    content: "\f24d"
+}
+
+.fa-balance-scale:before {
+    content: "\f24e"
+}
+
+.fa-hourglass-o:before {
+    content: "\f250"
+}
+
+.fa-hourglass-1:before,.fa-hourglass-start:before {
+    content: "\f251"
+}
+
+.fa-hourglass-2:before,.fa-hourglass-half:before {
+    content: "\f252"
+}
+
+.fa-hourglass-3:before,.fa-hourglass-end:before {
+    content: "\f253"
+}
+
+.fa-hourglass:before {
+    content: "\f254"
+}
+
+.fa-hand-grab-o:before,.fa-hand-rock-o:before {
+    content: "\f255"
+}
+
+.fa-hand-paper-o:before,.fa-hand-stop-o:before {
+    content: "\f256"
+}
+
+.fa-hand-scissors-o:before {
+    content: "\f257"
+}
+
+.fa-hand-lizard-o:before {
+    content: "\f258"
+}
+
+.fa-hand-spock-o:before {
+    content: "\f259"
+}
+
+.fa-hand-pointer-o:before {
+    content: "\f25a"
+}
+
+.fa-hand-peace-o:before {
+    content: "\f25b"
+}
+
+.fa-trademark:before {
+    content: "\f25c"
+}
+
+.fa-registered:before {
+    content: "\f25d"
+}
+
+.fa-creative-commons:before {
+    content: "\f25e"
+}
+
+.fa-gg:before {
+    content: "\f260"
+}
+
+.fa-gg-circle:before {
+    content: "\f261"
+}
+
+.fa-tripadvisor:before {
+    content: "\f262"
+}
+
+.fa-odnoklassniki:before {
+    content: "\f263"
+}
+
+.fa-odnoklassniki-square:before {
+    content: "\f264"
+}
+
+.fa-get-pocket:before {
+    content: "\f265"
+}
+
+.fa-wikipedia-w:before {
+    content: "\f266"
+}
+
+.fa-safari:before {
+    content: "\f267"
+}
+
+.fa-chrome:before {
+    content: "\f268"
+}
+
+.fa-firefox:before {
+    content: "\f269"
+}
+
+.fa-opera:before {
+    content: "\f26a"
+}
+
+.fa-internet-explorer:before {
+    content: "\f26b"
+}
+
+.fa-television:before,.fa-tv:before {
+    content: "\f26c"
+}
+
+.fa-contao:before {
+    content: "\f26d"
+}
+
+.fa-500px:before {
+    content: "\f26e"
+}
+
+.fa-amazon:before {
+    content: "\f270"
+}
+
+.fa-calendar-plus-o:before {
+    content: "\f271"
+}
+
+.fa-calendar-minus-o:before {
+    content: "\f272"
+}
+
+.fa-calendar-times-o:before {
+    content: "\f273"
+}
+
+.fa-calendar-check-o:before {
+    content: "\f274"
+}
+
+.fa-industry:before {
+    content: "\f275"
+}
+
+.fa-map-pin:before {
+    content: "\f276"
+}
+
+.fa-map-signs:before {
+    content: "\f277"
+}
+
+.fa-map-o:before {
+    content: "\f278"
+}
+
+.fa-map:before {
+    content: "\f279"
+}
+
+.fa-commenting:before {
+    content: "\f27a"
+}
+
+.fa-commenting-o:before {
+    content: "\f27b"
+}
+
+.fa-houzz:before {
+    content: "\f27c"
+}
+
+.fa-vimeo:before {
+    content: "\f27d"
+}
+
+.fa-black-tie:before {
+    content: "\f27e"
+}
+
+.fa-fonticons:before {
+    content: "\f280"
+}
+
+.fa-reddit-alien:before {
+    content: "\f281"
+}
+
+.fa-edge:before {
+    content: "\f282"
+}
+
+.fa-credit-card-alt:before {
+    content: "\f283"
+}
+
+.fa-codiepie:before {
+    content: "\f284"
+}
+
+.fa-modx:before {
+    content: "\f285"
+}
+
+.fa-fort-awesome:before {
+    content: "\f286"
+}
+
+.fa-usb:before {
+    content: "\f287"
+}
+
+.fa-product-hunt:before {
+    content: "\f288"
+}
+
+.fa-mixcloud:before {
+    content: "\f289"
+}
+
+.fa-scribd:before {
+    content: "\f28a"
+}
+
+.fa-pause-circle:before {
+    content: "\f28b"
+}
+
+.fa-pause-circle-o:before {
+    content: "\f28c"
+}
+
+.fa-stop-circle:before {
+    content: "\f28d"
+}
+
+.fa-stop-circle-o:before {
+    content: "\f28e"
+}
+
+.fa-shopping-bag:before {
+    content: "\f290"
+}
+
+.fa-shopping-basket:before {
+    content: "\f291"
+}
+
+.fa-hashtag:before {
+    content: "\f292"
+}
+
+.fa-bluetooth:before {
+    content: "\f293"
+}
+
+.fa-bluetooth-b:before {
+    content: "\f294"
+}
+
+.fa-percent:before {
+    content: "\f295"
+}
+
+.fa-gitlab:before {
+    content: "\f296"
+}
+
+.fa-wpbeginner:before {
+    content: "\f297"
+}
+
+.fa-wpforms:before {
+    content: "\f298"
+}
+
+.fa-envira:before {
+    content: "\f299"
+}
+
+.fa-universal-access:before {
+    content: "\f29a"
+}
+
+.fa-wheelchair-alt:before {
+    content: "\f29b"
+}
+
+.fa-question-circle-o:before {
+    content: "\f29c"
+}
+
+.fa-blind:before {
+    content: "\f29d"
+}
+
+.fa-audio-description:before {
+    content: "\f29e"
+}
+
+.fa-volume-control-phone:before {
+    content: "\f2a0"
+}
+
+.fa-braille:before {
+    content: "\f2a1"
+}
+
+.fa-assistive-listening-systems:before {
+    content: "\f2a2"
+}
+
+.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before {
+    content: "\f2a3"
+}
+
+.fa-deaf:before,.fa-deafness:before,.fa-hard-of-hearing:before {
+    content: "\f2a4"
+}
+
+.fa-glide:before {
+    content: "\f2a5"
+}
+
+.fa-glide-g:before {
+    content: "\f2a6"
+}
+
+.fa-sign-language:before,.fa-signing:before {
+    content: "\f2a7"
+}
+
+.fa-low-vision:before {
+    content: "\f2a8"
+}
+
+.fa-viadeo:before {
+    content: "\f2a9"
+}
+
+.fa-viadeo-square:before {
+    content: "\f2aa"
+}
+
+.fa-snapchat:before {
+    content: "\f2ab"
+}
+
+.fa-snapchat-ghost:before {
+    content: "\f2ac"
+}
+
+.fa-snapchat-square:before {
+    content: "\f2ad"
+}
+
+.fa-pied-piper:before {
+    content: "\f2ae"
+}
+
+.fa-first-order:before {
+    content: "\f2b0"
+}
+
+.fa-yoast:before {
+    content: "\f2b1"
+}
+
+.fa-themeisle:before {
+    content: "\f2b2"
+}
+
+.fa-google-plus-circle:before,.fa-google-plus-official:before {
+    content: "\f2b3"
+}
+
+.fa-fa:before,.fa-font-awesome:before {
+    content: "\f2b4"
+}
+
+.fa-handshake-o:before {
+    content: "\f2b5"
+}
+
+.fa-envelope-open:before {
+    content: "\f2b6"
+}
+
+.fa-envelope-open-o:before {
+    content: "\f2b7"
+}
+
+.fa-linode:before {
+    content: "\f2b8"
+}
+
+.fa-address-book:before {
+    content: "\f2b9"
+}
+
+.fa-address-book-o:before {
+    content: "\f2ba"
+}
+
+.fa-address-card:before,.fa-vcard:before {
+    content: "\f2bb"
+}
+
+.fa-address-card-o:before,.fa-vcard-o:before {
+    content: "\f2bc"
+}
+
+.fa-user-circle:before {
+    content: "\f2bd"
+}
+
+.fa-user-circle-o:before {
+    content: "\f2be"
+}
+
+.fa-user-o:before {
+    content: "\f2c0"
+}
+
+.fa-id-badge:before {
+    content: "\f2c1"
+}
+
+.fa-drivers-license:before,.fa-id-card:before {
+    content: "\f2c2"
+}
+
+.fa-drivers-license-o:before,.fa-id-card-o:before {
+    content: "\f2c3"
+}
+
+.fa-quora:before {
+    content: "\f2c4"
+}
+
+.fa-free-code-camp:before {
+    content: "\f2c5"
+}
+
+.fa-telegram:before {
+    content: "\f2c6"
+}
+
+.fa-thermometer-4:before,.fa-thermometer-full:before,.fa-thermometer:before {
+    content: "\f2c7"
+}
+
+.fa-thermometer-3:before,.fa-thermometer-three-quarters:before {
+    content: "\f2c8"
+}
+
+.fa-thermometer-2:before,.fa-thermometer-half:before {
+    content: "\f2c9"
+}
+
+.fa-thermometer-1:before,.fa-thermometer-quarter:before {
+    content: "\f2ca"
+}
+
+.fa-thermometer-0:before,.fa-thermometer-empty:before {
+    content: "\f2cb"
+}
+
+.fa-shower:before {
+    content: "\f2cc"
+}
+
+.fa-bath:before,.fa-bathtub:before,.fa-s15:before {
+    content: "\f2cd"
+}
+
+.fa-podcast:before {
+    content: "\f2ce"
+}
+
+.fa-window-maximize:before {
+    content: "\f2d0"
+}
+
+.fa-window-minimize:before {
+    content: "\f2d1"
+}
+
+.fa-window-restore:before {
+    content: "\f2d2"
+}
+
+.fa-times-rectangle:before,.fa-window-close:before {
+    content: "\f2d3"
+}
+
+.fa-times-rectangle-o:before,.fa-window-close-o:before {
+    content: "\f2d4"
+}
+
+.fa-bandcamp:before {
+    content: "\f2d5"
+}
+
+.fa-grav:before {
+    content: "\f2d6"
+}
+
+.fa-etsy:before {
+    content: "\f2d7"
+}
+
+.fa-imdb:before {
+    content: "\f2d8"
+}
+
+.fa-ravelry:before {
+    content: "\f2d9"
+}
+
+.fa-eercast:before {
+    content: "\f2da"
+}
+
+.fa-microchip:before {
+    content: "\f2db"
+}
+
+.fa-snowflake-o:before {
+    content: "\f2dc"
+}
+
+.fa-superpowers:before {
+    content: "\f2dd"
+}
+
+.fa-wpexplorer:before {
+    content: "\f2de"
+}
+
+.fa-meetup:before {
+    content: "\f2e0"
+}
+
+.sr-only {
+    position: absolute;
+    width: 1px;
+    height: 1px;
+    padding: 0;
+    margin: -1px;
+    overflow: hidden;
+    clip: rect(0,0,0,0);
+    border: 0
+}
+
+.sr-only-focusable:active,.sr-only-focusable:focus {
+    position: static;
+    width: auto;
+    height: auto;
+    margin: 0;
+    overflow: visible;
+    clip: auto
+}
+
+.flownews-wrap-container {
+    background: #FFF
+}
+
+.flownews-header-top,.flownews-header-top .flownews-wrap-container {
+    background: #000;
+    overflow: hidden
+}
+
+.flownews-header-bottom,.flownews-header-bottom .flownews-wrap-container {
+    background: #282828;
+    border-bottom: 2px solid #e7685d
+}
+
+body {
+    background-repeat: no-repeat;
+    line-height: 1
+}
+
+p {
+    color: #747474;
+    letter-spacing: .5px;
+    line-height: 24px;
+    font-weight: 300;
+    margin: 0
+}
+
+h1,h2,h3,h4,h5,h6 {
+    font-weight: 700;
+    color: #333;
+    letter-spacing: 1px;
+    margin: 0
+}
+
+.comment-description h1,.comment-description h2,.comment-description h3,.comment-description h4,.comment-description h5,.comment-description h6,.post-text .text>h3,.post-text .text>h4,.post-text .text>h5,.post-text .text>h6,.post-text>h3,.post-text>h4,.post-text>h5,.post-text>h6 {
+    margin: 10px 0
+}
+
+.comment-description dt,.post-text dt {
+    margin-bottom: 5px
+}
+
+.comment-description dd,.post-text dd {
+    margin-bottom: 20px
+}
+
+.flownews-page .flownews-content .post-text .text>ol ol,.flownews-page .flownews-content .post-text .text>ul ul,.flownews-post .flownews-content .comment-description ol ol,.flownews-post .flownews-content .comment-description ul ul,.flownews-post .flownews-content .post-text>ol ol,.flownews-post .flownews-content .post-text>ul ul {
+    margin-bottom: 0
+}
+
+.alignleft,.alignnone,.alignright,.comment-description p,.post-text .text>p,.post-text>p {
+    margin-bottom: 20px
+}
+
+kbd {
+    background-color: #333
+}
+
+code {
+    color: #c7254e;
+    background-color: #f9f2f4
+}
+
+h1 a,h2 a,h3 a,h4 a,h5 a,h6 a {
+    font-weight: 700;
+    color: #333;
+    letter-spacing: 1px
+}
+
+a {
+    color: #c9564c
+}
+
+pre {
+    border-radius: 0;
+    color: #333;
+    background-color: #f5f5f5;
+    border: 1px solid #ccc
+}
+
+#preloader,#preloader:after {
+    width: 50px;
+    height: 50px;
+    border-radius: 50px
+}
+
+::-webkit-scrollbar {
+    width: 5px
+}
+
+::-webkit-scrollbar-track {
+    background-color: #eaeaea;
+    border-left: 1px solid #ccc
+}
+
+::-webkit-scrollbar-thumb {
+    background-color: #ccc
+}
+
+::-webkit-scrollbar-thumb:hover {
+    background-color: #aaa
+}
+
+img {
+    height: auto
+}
+
+a:focus,a:hover {
+    text-decoration: none;
+    color: #e7685d
+}
+
+a:focus,input:focus {
+    outline: 0
+}
+
+a,a:hover {
+    transition: all .3s ease 0s
+}
+
+.aligncenter,.alignleft,.bypostauthor .alignright,.gallery-caption,.screen-reader-text,.wp-caption,.wp-caption-text {
+    line-height: 1;
+    max-width: 100%
+}
+
+.alignleft {
+    float: left;
+    margin-right: 20px
+}
+
+.alignright {
+    float: right;
+    margin-left: 20px;
+    color: #282828;
+    display: block;
+    font-size: 12px;
+    margin-top: 8px
+}
+
+.aligncenter {
+    margin: 0 auto 20px
+}
+
+.wp-caption-text {
+    margin-top: 10px
+}
+
+td,th {
+    padding: 10px
+}
+
+tr td:first-child,tr th:first-child {
+    padding-left: 0
+}
+
+@media screen and (max-width: 800px) {
+    .aligncenter,.alignleft,.alignright {
+        max-width:100%;
+        float: none;
+        display: block;
+        text-align: center;
+        margin: 25px auto
+    }
+}
+
+#preloader-container {
+    background: #fff;
+    position: fixed;
+    width: 100%;
+    height: 100%;
+    top: 0;
+    z-index: 999999999999999999
+}
+
+#preloader-wrap {
+    width: 60px;
+    height: 60px;
+    position: absolute;
+    top: 50%;
+    left: 50%;
+    margin-left: -30px;
+    margin-top: -30px
+}
+
+#preloader {
+    position: relative;
+    background: 0 0;
+    animation: preloader_5 1.5s infinite linear
+}
+
+#preloader:after {
+    position: absolute;
+    border-top: 10px solid transparent;
+    border-bottom: 10px solid transparent;
+    border-left: 10px solid transparent;
+    border-right: 10px solid transparent;
+    top: 0;
+    left: 0;
+    animation: preloader_5_after 1.5s infinite linear
+}
+
+.cssload-thecube .cssload-cube:before,.header-mobile .menu-responsive-container li.menu-item-has-children a:after {
+    content: ""
+}
+
+@keyframes preloader_5 {
+    0% {
+        transform: rotate(0)
+    }
+
+    50% {
+        transform: rotate(180deg);
+        background: 0 0
+    }
+
+    100% {
+        transform: rotate(360deg)
+    }
+}
+
+.cssload-thecube {
+    width: 60px;
+    height: 60px;
+    margin: 0 auto;
+    position: relative;
+    transform: rotateZ(45deg);
+    -o-transform: rotateZ(45deg);
+    -ms-transform: rotateZ(45deg);
+    -webkit-transform: rotateZ(45deg);
+    -moz-transform: rotateZ(45deg)
+}
+
+.cssload-thecube .cssload-cube {
+    transform: rotateZ(45deg);
+    -ms-transform: rotateZ(45deg);
+    -webkit-transform: rotateZ(45deg);
+    -moz-transform: rotateZ(45deg);
+    float: left;
+    width: 50%;
+    height: 50%;
+    position: relative;
+    transform: scale(1.1);
+    -o-transform: scale(1.1);
+    -ms-transform: scale(1.1);
+    -webkit-transform: scale(1.1);
+    -moz-transform: scale(1.1)
+}
+
+.cssload-thecube .cssload-cube:before {
+    position: absolute;
+    top: 0;
+    left: 0;
+    width: 100%;
+    height: 100%;
+    background-color: #e7695d;
+    animation: cssload-fold-thecube 4.2s infinite linear both;
+    -o-animation: cssload-fold-thecube 4.2s infinite linear both;
+    -ms-animation: cssload-fold-thecube 4.2s infinite linear both;
+    -webkit-animation: cssload-fold-thecube 4.2s infinite linear both;
+    -moz-animation: cssload-fold-thecube 4.2s infinite linear both;
+    transform-origin: 100% 100%;
+    -o-transform-origin: 100% 100%;
+    -ms-transform-origin: 100% 100%;
+    -webkit-transform-origin: 100% 100%;
+    -moz-transform-origin: 100% 100%
+}
+
+.cssload-thecube .cssload-c2 {
+    transform: scale(1.1) rotateZ(90deg);
+    -o-transform: scale(1.1) rotateZ(90deg);
+    -ms-transform: scale(1.1) rotateZ(90deg);
+    -webkit-transform: scale(1.1) rotateZ(90deg);
+    -moz-transform: scale(1.1) rotateZ(90deg)
+}
+
+.cssload-thecube .cssload-c3 {
+    transform: scale(1.1) rotateZ(180deg);
+    -o-transform: scale(1.1) rotateZ(180deg);
+    -ms-transform: scale(1.1) rotateZ(180deg);
+    -webkit-transform: scale(1.1) rotateZ(180deg);
+    -moz-transform: scale(1.1) rotateZ(180deg)
+}
+
+.cssload-thecube .cssload-c4 {
+    transform: scale(1.1) rotateZ(270deg);
+    -o-transform: scale(1.1) rotateZ(270deg);
+    -ms-transform: scale(1.1) rotateZ(270deg);
+    -webkit-transform: scale(1.1) rotateZ(270deg);
+    -moz-transform: scale(1.1) rotateZ(270deg)
+}
+
+.cssload-thecube .cssload-c2:before {
+    animation-delay: .53s;
+    -o-animation-delay: .53s;
+    -ms-animation-delay: .53s;
+    -webkit-animation-delay: .53s;
+    -moz-animation-delay: .53s
+}
+
+.cssload-thecube .cssload-c3:before {
+    animation-delay: 1.05s;
+    -o-animation-delay: 1.05s;
+    -ms-animation-delay: 1.05s;
+    -webkit-animation-delay: 1.05s;
+    -moz-animation-delay: 1.05s
+}
+
+.cssload-thecube .cssload-c4:before {
+    animation-delay: 1.58s;
+    -o-animation-delay: 1.58s;
+    -ms-animation-delay: 1.58s;
+    -webkit-animation-delay: 1.58s;
+    -moz-animation-delay: 1.58s
+}
+
+@keyframes cssload-fold-thecube {
+    0%,10% {
+        transform: perspective(136px) rotateX(-180deg);
+        opacity: 0
+    }
+
+    25%,75% {
+        transform: perspective(136px) rotateX(0);
+        opacity: 1
+    }
+
+    100%,90% {
+        transform: perspective(136px) rotateY(180deg);
+        opacity: 0
+    }
+}
+
+@-o-keyframes cssload-fold-thecube {
+    0%,10% {
+        -o-transform: perspective(136px) rotateX(-180deg);
+        opacity: 0
+    }
+
+    25%,75% {
+        -o-transform: perspective(136px) rotateX(0);
+        opacity: 1
+    }
+
+    100%,90% {
+        -o-transform: perspective(136px) rotateY(180deg);
+        opacity: 0
+    }
+}
+
+@-ms-keyframes cssload-fold-thecube {
+    0%,10% {
+        -ms-transform: perspective(136px) rotateX(-180deg);
+        opacity: 0
+    }
+
+    25%,75% {
+        -ms-transform: perspective(136px) rotateX(0);
+        opacity: 1
+    }
+
+    100%,90% {
+        -ms-transform: perspective(136px) rotateY(180deg);
+        opacity: 0
+    }
+}
+
+@-webkit-keyframes cssload-fold-thecube {
+    0%,10% {
+        -webkit-transform: perspective(136px) rotateX(-180deg);
+        opacity: 0
+    }
+
+    25%,75% {
+        -webkit-transform: perspective(136px) rotateX(0);
+        opacity: 1
+    }
+
+    100%,90% {
+        -webkit-transform: perspective(136px) rotateY(180deg);
+        opacity: 0
+    }
+}
+
+@-moz-keyframes cssload-fold-thecube {
+    0%,10% {
+        -moz-transform: perspective(136px) rotateX(-180deg);
+        opacity: 0
+    }
+
+    25%,75% {
+        -moz-transform: perspective(136px) rotateX(0);
+        opacity: 1
+    }
+
+    100%,90% {
+        -moz-transform: perspective(136px) rotateY(180deg);
+        opacity: 0
+    }
+}
+
+#preloader-container .spinner-pulse {
+    width: 40px;
+    height: 40px;
+    position: absolute;
+    left: 50%;
+    top: 50%;
+    margin-left: -20px;
+    margin-top: -20px;
+    border-radius: 100%;
+    -webkit-animation: scaleout 1s infinite ease-in-out;
+    animation: scaleout 1s infinite ease-in-out
+}
+
+@-webkit-keyframes scaleout {
+    0% {
+        -webkit-transform: scale(0)
+    }
+
+    100% {
+        -webkit-transform: scale(1);
+        opacity: 0
+    }
+}
+
+@keyframes scaleout {
+    0% {
+        transform: scale(0);
+        -webkit-transform: scale(0)
+    }
+
+    100% {
+        transform: scale(1);
+        -webkit-transform: scale(1);
+        opacity: 0
+    }
+}
+
+#preloader-container .spinner-plane {
+    width: 30px;
+    height: 30px;
+    margin: -15px auto 100px -15px;
+    -webkit-animation: rotateplane 1.2s infinite ease-in-out;
+    animation: rotateplane 1.2s infinite ease-in-out;
+    position: absolute;
+    z-index: 999999999999999999999999999999999999999;
+    left: 50%;
+    top: 50%;
+    background: 0 0
+}
+
+@-webkit-keyframes rotateplane {
+    0% {
+        -webkit-transform: perspective(120px)
+    }
+
+    50% {
+        -webkit-transform: perspective(120px) rotateY(180deg)
+    }
+
+    100% {
+        -webkit-transform: perspective(120px) rotateY(180deg) rotateX(180deg)
+    }
+}
+
+@keyframes rotateplane {
+    0% {
+        transform: perspective(120px) rotateX(0) rotateY(0);
+        -webkit-transform: perspective(120px) rotateX(0) rotateY(0)
+    }
+
+    50% {
+        transform: perspective(120px) rotateX(-180.1deg) rotateY(0);
+        -webkit-transform: perspective(120px) rotateX(-180.1deg) rotateY(0)
+    }
+
+    100% {
+        transform: perspective(120px) rotateX(-180deg) rotateY(-179.9deg);
+        -webkit-transform: perspective(120px) rotateX(-180deg) rotateY(-179.9deg)
+    }
+}
+
+#preloader-container .spinner-three-bounce {
+    position: absolute;
+    left: 50%;
+    top: 50%;
+    margin-left: -35px;
+    margin-top: -9px;
+    width: 70px;
+    text-align: center
+}
+
+#preloader-container .spinner-three-bounce>div {
+    width: 18px;
+    height: 18px;
+    border-radius: 100%;
+    display: inline-block;
+    -webkit-animation: bouncedelay 1.4s infinite ease-in-out;
+    animation: bouncedelay 1.4s infinite ease-in-out;
+    -webkit-animation-fill-mode: both;
+    animation-fill-mode: both
+}
+
+#preloader-container .spinner-three-bounce .bounce1 {
+    -webkit-animation-delay: -.32s;
+    animation-delay: -.32s
+}
+
+#preloader-container .spinner-three-bounce .bounce2 {
+    -webkit-animation-delay: -.16s;
+    animation-delay: -.16s
+}
+
+@-webkit-keyframes bouncedelay {
+    0%,100%,80% {
+        -webkit-transform: scale(0)
+    }
+
+    40% {
+        -webkit-transform: scale(1)
+    }
+}
+
+@keyframes bouncedelay {
+    0%,100%,80% {
+        transform: scale(0);
+        -webkit-transform: scale(0)
+    }
+
+    40% {
+        transform: scale(1);
+        -webkit-transform: scale(1)
+    }
+}
+
+#preloader-container .spinner-dots {
+    width: 40px;
+    height: 40px;
+    position: absolute;
+    left: 50%;
+    top: 50%;
+    margin-left: -20px;
+    margin-top: -20px;
+    -webkit-animation: rotate 2s infinite linear;
+    animation: rotate 2s infinite linear
+}
+
+#preloader-container .spinner-dots .dot1,#preloader-container .spinner-dots .dot2 {
+    width: 60%;
+    height: 60%;
+    display: inline-block;
+    position: absolute;
+    top: 0;
+    border-radius: 100%;
+    -webkit-animation: bounce 2s infinite ease-in-out;
+    animation: bounce 2s infinite ease-in-out
+}
+
+#preloader-container .spinner-dots .dot2 {
+    top: auto;
+    bottom: 0;
+    -webkit-animation-delay: -1s;
+    animation-delay: -1s
+}
+
+@-webkit-keyframes rotate {
+    100% {
+        -webkit-transform: rotate(360deg)
+    }
+}
+
+@keyframes rotate {
+    100% {
+        transform: rotate(360deg);
+        -webkit-transform: rotate(360deg)
+    }
+}
+
+@-webkit-keyframes bounce {
+    0%,100% {
+        -webkit-transform: scale(0)
+    }
+
+    50% {
+        -webkit-transform: scale(1)
+    }
+}
+
+@keyframes bounce {
+    0%,100% {
+        transform: scale(0);
+        -webkit-transform: scale(0)
+    }
+
+    50% {
+        transform: scale(1);
+        -webkit-transform: scale(1)
+    }
+}
+
+#flownews-outer-wrap {
+    overflow: hidden
+}
+
+.flownews-wrap-container {
+    width: 1180px;
+    margin: 0 auto
+}
+
+.flownews-boxed #flownews-outer-wrap {
+    width: 1180px;
+    margin: 50px auto
+}
+
+.flownews-boxed .header-desktop .flownews-wrap-container {
+    width: 100%;
+    background: 0 0
+}
+
+.flownews-header-middle {
+    padding: 25px 0
+}
+
+.flownews-container {
+    padding: 50px
+}
+
+.flownews-container .col-xs-9 {
+    max-width: calc(75% - 50px);
+    max-width: -web-kit(75% - 50px);
+    width: 75%
+}
+
+.flownews-container.flownews-sidebar-left .col-xs-9 {
+    margin-left: 50px
+}
+
+.flownews-container.flownews-sidebar-right .col-xs-9 {
+    margin-right: 50px
+}
+
+.flownews-header-wrap .flownews-header-middle .flownews-banner-top-left {
+    text-align: left
+}
+
+.flownews-header-middle .flownews-banner-top,.flownews-header-wrap .flownews-header-middle .flownews-logo.flownews-logo-right {
+    text-align: right
+}
+
+.flownews-boxed .flownews-header-middle {
+    padding: 25px 50px
+}
+
+.flownews-boxed .flownews-footer-bottom {
+    padding: 0
+}
+
+.flownews-boxed .flownews-header-top .flownews-wrap-container .flownews-ticker.col-sm-6 {
+    padding-left: 0
+}
+
+.flownews-boxed .flownews-header-top .flownews-wrap-container {
+    padding: 0 50px
+}
+
+@media screen and (min-width: 1201px) {
+    .flownews-boxed .flownews-footer-bottom .flownews-wrap-container {
+        padding:0 50px
+    }
+}
+
+.flownews-header-middle .flownews-logo.col-sm-3 {
+    height: 100px;
+    line-height: 100px;
+    padding-left: 0
+}
+
+.flownews-header-middle .flownews-logo.col-sm-3 img {
+    max-height: 68px
+}
+
+.flownews-logo-center,nav ul {
+    text-align: center
+}
+
+.flownews-header-middle .flownews-banner-top .container_advertisement {
+    display: inline-block
+}
+
+.flownews-top-menu {
+    margin: 0;
+    padding: 0;
+    height: 32px;
+    line-height: 30px;
+    overflow: hidden
+}
+
+.flownews-top-menu li {
+    display: inline-block
+}
+
+.flownews-top-menu li a {
+    color: #fff;
+    font-size: 12px;
+    font-weight: 700;
+    letter-spacing: 1.5px;
+    padding: 0 0 0 25px;
+    text-transform: uppercase
+}
+
+.flownews-top-menu li:first-child a {
+    padding-left: 0
+}
+
+.flownews-top-menu li ul,.header-mobile {
+    display: none
+}
+
+.header-mobile .flownews-logo {
+    padding: 25px;
+    background: #282828
+}
+
+.header-mobile .flownews-logo img {
+    max-height: 50px
+}
+
+.header-mobile .news-ticker-item .news-ticker-item-title a {
+    color: #fff;
+    display: inline-block;
+    font-size: 12px;
+    font-weight: 400;
+    letter-spacing: 1.5px;
+    margin-left: 0;
+    text-transform: uppercase;
+    transition: color .3s ease 0s;
+    overflow: hidden;
+    text-overflow: ellipsis;
+    white-space: nowrap;
+    width: 100%;
+    line-height: 32px
+}
+
+.menu-responsive li a,.menu-responsive li a:hover,nav li ul.submenu li a,nav li ul.submenu li a:hover,nav ul li a,nav ul li a:hover,nav ul>li a {
+    transition: all .3s ease 0s
+}
+
+.header-mobile .flownews-top-news-ticker .news-ticker-item .news-ticker-item-title {
+    width: 95%
+}
+
+.header-mobile .flownews-top-news-ticker .news-ticker-item .news-ticker-item-category {
+    display: none
+}
+
+.header-mobile .flownews-ticker {
+    background: #282828;
+    border-top: 1px solid #333;
+    display: inline-block;
+    padding: 10px 25px;
+    width: 100%
+}
+
+.header-mobile .flownews-top-news-ticker.owl-carousel .owl-stage-outer {
+    float: none;
+    width: 100%
+}
+
+@media screen and (max-width: 1180px) {
+    .flownews-boxed #flownews-outer-wrap,.flownews-one-page-wrap-container,.flownews-wrap-container {
+        width:100%
+    }
+
+    .flownews-boxed #flownews-outer-wrap {
+        margin: 0
+    }
+}
+
+.flownews-header-sticky {
+    display: none;
+    position: fixed;
+    top: 0;
+    width: 100%;
+    background: #282828;
+    z-index: 99999999;
+    left: 0;
+    border-bottom: 2px solid #e7685d
+}
+
+nav ul li,nav>ul {
+    display: inline-block
+}
+
+.flownews-header-sticky .flownews-wrap-container {
+    background: #282828
+}
+
+nav ul li a:hover,nav ul li.current_page_item {
+    background: #e7685d
+}
+
+.flownews-header-sticky nav>ul {
+    border-left: 0;
+    float: right;
+    margin: 0;
+    border-right: 0!important
+}
+
+.flownews-header-sticky .flownews-logo.col-sm-2 {
+    padding-left: 0;
+    padding-top: 0;
+    line-height: 50px
+}
+
+.flownews-header-sticky .flownews-header-bottom .flownews-menu {
+    height: auto
+}
+
+.flownews-header-sticky nav ul>li a {
+    padding: 20px 25px
+}
+
+nav,nav ul {
+    padding: 0
+}
+
+.flownews-logo.flownews-logo-right img {
+    max-height: 30px
+}
+
+.flownews-header-sticky .flownews-header-bottom {
+    position: relative
+}
+
+.flownews-header-sticky .flownews-logo,.flownews-header-sticky .flownews-menu {
+    position: static
+}
+
+nav ul {
+    margin: 0
+}
+
+.flownews-header-bottom.flownews-wrap-container {
+    border: 0!important
+}
+
+nav>ul {
+    margin: 0 50px;
+    text-align: left;
+    border-left: 1px solid #333
+}
+
+.flownews-header-bottom .flownews-menu {
+    height: 44px;
+    padding: 0
+}
+
+nav ul li {
+    float: left
+}
+
+nav ul li a,nav ul li a:hover {
+    color: #fff
+}
+
+nav ul>li a {
+    font-weight: 700;
+    padding: 15px 25px;
+    text-transform: uppercase;
+    display: block
+}
+
+nav li a {
+    letter-spacing: 2px
+}
+
+nav li {
+    position: relative
+}
+
+nav i {
+    font-size: 11px
+}
+
+.flownews-fullwidth nav>ul {
+    margin-left: 0
+}
+
+.flownews-fullwidth .flownews-search-menu-button {
+    margin-right: 0
+}
+
+.submenu,ul.submenu {
+    display: none;
+    border: 1px solid #f4f4f4;
+    border-top: 2px solid #e7685d
+}
+
+ul.submenu .submenu {
+    margin-left: -1px;
+    margin-top: -1px;
+    border-top: 1px solid #f4f4f4
+}
+
+ul.submenu li:first-child .submenu {
+    border-top: 1px solid #e7685d
+}
+
+nav li:hover>.submenu,nav li:hover>ul.submenu {
+    display: block;
+    position: absolute;
+    text-align: left;
+    z-index: 99999999
+}
+
+nav li ul.submenu li a {
+    font-size: 12px;
+    color: #333;
+    font-weight: 700
+}
+
+nav li ul.submenu li a:hover {
+    color: #fff
+}
+
+nav li ul.submenu li {
+    background: #fff;
+    border-bottom: 1px solid #f4f4f4
+}
+
+nav li ul.submenu li:last-child {
+    border-bottom: 0
+}
+
+nav li:hover ul.submenu li {
+    width: 230px;
+    display: block;
+    margin: 0
+}
+
+nav li:hover ul.submenu li a {
+    padding: 15px 10px;
+    display: block;
+    text-transform: uppercase
+}
+
+nav li:hover>ul.submenu>li:hover>ul.submenu {
+    display: block;
+    left: 231px;
+    top: 0
+}
+
+.menu-responsive {
+    display: none;
+    position: fixed;
+    top: 0;
+    width: 100%;
+    height: 100%;
+    z-index: 90;
+    overflow: auto;
+    left: 0
+}
+
+.close-menu-responsive,.open-menu-responsive {
+    position: fixed;
+    right: 25px;
+    top: 25px;
+    z-index: 9999999;
+    font-size: 24px;
+    color: #fff;
+    cursor: pointer;
+    background: #e7685d;
+    height: 35px;
+    line-height: 35px;
+    text-align: center;
+    width: 35px
+}
+
+.close-menu-responsive {
+    display: none
+}
+
+.menu-responsive ul {
+    margin: 0;
+    padding: 0;
+    text-align: center
+}
+
+.menu-responsive>ul {
+    padding-top: 100px;
+    border-bottom: 2px solid #e7685d
+}
+
+.menu-responsive ul>li a {
+    padding: 12px 25px;
+    display: block
+}
+
+.menu-responsive li a {
+    letter-spacing: 1.5px;
+    color: #333;
+    text-align: left
+}
+
+.menu-responsive li a:hover {
+    color: #e7685d
+}
+
+.header-mobile .menu-responsive-container .submenu {
+    border: 1px solid #f4f4f4;
+    border-bottom: 0
+}
+
+.menu-responsive li:hover ul.submenu li li a {
+    margin-left: 50px
+}
+
+.header-mobile .menu-responsive-container .submenu li .submenu li {
+    padding-left: 0
+}
+
+.header-mobile .menu-responsive-container .submenu li:last-child {
+    border-bottom: 0
+}
+
+.menu-responsive li {
+    background: #f4f4f4;
+    border-bottom: 1px solid #fff;
+    position: relative
+}
+
+.menu-responsive li:last-child {
+    border-bottom: 0
+}
+
+.header-mobile .menu-responsive-container .submenu .submenu {
+    padding-left: 0;
+    border-left: 0;
+    border-right: 0
+}
+
+.header-mobile .menu-responsive-container .flownewsicon.fa-angle-down,.header-mobile .menu-responsive-container .flownewsicon.fa-angle-up {
+    float: right;
+    width: 40px;
+    height: 20px;
+    position: absolute;
+    z-index: 9999;
+    right: 10px;
+    top: 10px;
+    text-align: right
+}
+
+.header-mobile .menu-responsive-container .flownewsicon.fa-angle-up {
+    display: none
+}
+
+.menu-responsive i {
+    font-size: 11px
+}
+
+.menu-responsive li ul.submenu li a {
+    margin-left: 25px
+}
+
+.flownews-menu>li.menu-item-has-children>a:after,.submenu>li.menu-item-has-children>a:after {
+    font-style: normal;
+    font-weight: 400;
+    text-transform: none;
+    line-height: 1
+}
+
+.flownews-menu>li.menu-item-has-children>a:after {
+    content: "\f107";
+    float: right;
+    font-size: 14px;
+    margin-left: 10px
+}
+
+.submenu>li.menu-item-has-children>a:after {
+    content: "\f105";
+    font-size: 12px;
+    margin-left: 10px
+}
+
+.flownews-menu .menu-item-object-category {
+    position: static
+}
+
+.flownews-menu .menu-item-object-category .flownews-mega-menu {
+    width: 1180px;
+    left: 0;
+    background: #FFF;
+    border-bottom: 1px solid #e7685d
+}
+
+.flownews-mega-menu .article-image a {
+    padding: 0
+}
+
+.flownews-mega-menu .flownews-element-posts article {
+    padding: 0 12.5px
+}
+
+.flownews-mega-menu .flownews-menu-element-posts-container {
+    margin-left: -12.5px;
+    padding: 25px;
+    width: calc(100% + 25px)
+}
+
+.flownews-mega-menu .flownews-menu-element-posts-container .article-title a:hover {
+    color: #e7685d;
+    background: 0 0;
+    transition: all .3s ease 0s
+}
+
+.flownews-mega-menu .flownews-menu-category-all-category-posts a {
+    padding: 0
+}
+
+.flownews-mega-menu .flownews-menu-category-all-category-posts i {
+    margin: 0;
+    padding: 8px 6px 6px 8px;
+    font-size: 12px;
+    line-height: 1;
+    background: #e7685d;
+    color: #fff
+}
+
+.flownews-menu-category-all-category-posts {
+    border-top: 1px solid #f4f4f4
+}
+
+.flownews-menu-category-all-category-posts .flownews-link-menu-category {
+    text-align: right;
+    float: right;
+    display: block;
+    padding: 15px 25px
+}
+
+.flownews-menu-category-all-category-posts .flownews-link-menu-category a {
+    display: inline-block;
+    color: #333;
+    transition: all .3s ease 0s
+}
+
+.flownews-mega-menu .flownews-element-posts.owl-carousel.owl-theme article .article-title a:hover,.flownews-menu-category-all-category-posts .flownews-link-menu-category:hover a:first-child {
+    color: #e7685d;
+    background: 0 0;
+    transition: all .3s ease 0s
+}
+
+.flownews-menu-category-all-category-posts .flownews-link-menu-category a:first-child {
+    font-size: 12px;
+    margin-right: -4px;
+    padding: 8px 12px 6px
+}
+
+.flownews-mega-menu .flownews-menu-category.owl-carousel {
+    padding: 25px
+}
+
+.flownews-mega-menu .flownews-menu-category.owl-carousel.owl-theme .owl-controls .owl-nav {
+    margin-top: 25px;
+    text-align: left
+}
+
+.flownews-mega-menu .flownews-menu-category.owl-carousel.owl-theme .owl-controls .owl-nav [class*=owl-] {
+    border: 1px solid #f4f4f4;
+    font-size: 14px;
+    padding: 7px 11px
+}
+
+.flownews-mega-menu .flownews-menu-category.owl-carousel.owl-theme .owl-controls .owl-nav i {
+    margin: 0
+}
+
+.flownews-mega-menu .flownews-menu-category.owl-carousel.owl-theme .owl-controls .owl-nav .owl-prev {
+    margin-right: 4px;
+    transition: all .3s ease 0s
+}
+
+.flownews-mega-menu .flownews-menu-category.owl-carousel.owl-theme .owl-controls .owl-nav .owl-next {
+    transition: all .3s ease 0s
+}
+
+.flownews-mega-menu .flownews-element-posts.owl-carousel.owl-theme article {
+    padding: 0
+}
+
+.flownews-mega-menu .flownews-menu-category.owl-carousel.owl-theme .owl-controls .owl-nav .owl-next:hover,.flownews-mega-menu .flownews-menu-category.owl-carousel.owl-theme .owl-controls .owl-nav .owl-prev:hover {
+    background: #e7685d;
+    border: 1px solid #e7685d;
+    color: #fff;
+    transition: all .3s ease 0s
+}
+
+.flownews-menu .menu-item-object-category .flownews-menu-category {
+    margin: 0;
+    position: relative;
+    width: 100%
+}
+
+.flownews-menu .flownews-menu-category.flownews-element-posts.flownews-posts-layout2 .item-posts.first-element-posts.col-xs-3 {
+    width: 25%
+}
+
+.flownews-menu-category.flownews-element-posts .article-data {
+    margin-right: 10px
+}
+
+.flownews-menu-category.flownews-element-posts .article-comments {
+    margin-left: 10px
+}
+
+.flownews-menu .flownews-element-posts .article-title a {
+    color: #333;
+    font-size: 18px;
+    padding: 0
+}
+
+.flownews-search {
+    letter-spacing: 2px;
+    padding: 0;
+    text-align: center
+}
+
+input[type=search] {
+    -webkit-appearance: none;
+    border: 0;
+    font-size: 14px;
+    font-weight: 100;
+    letter-spacing: .5px
+}
+
+.flownews-search button {
+    background: #e7685d;
+    border: 0;
+    float: right;
+    padding: 0;
+    transition: all .3s ease 0s
+}
+
+.flownews-search button:hover {
+    background: #c9564c;
+    transition: all .3s ease 0s
+}
+
+.flownews-search .form-group-search input {
+    background: 0 0;
+    float: left;
+    height: 35px;
+    margin-left: 12px
+}
+
+.flownewsicon.fa-close,.flownewsicon.fa-search:focus,.flownewsicon.fa-search:hover {
+    background: #e7685d;
+    transition: all .3s ease 0s
+}
+
+.flownewsicon.fa-close,.flownewsicon.fa-search {
+    color: #fff;
+    font-size: 14px;
+    padding: 15px 16px;
+    cursor: pointer;
+    transition: all .3s ease 0s
+}
+
+.flownewsicon.fa-close {
+    padding: 15px 17px
+}
+
+.flownews-search-menu-button {
+    border-right: 1px solid #333;
+    margin-right: 50px;
+    text-align: right
+}
+
+.flownews-search form {
+    border: 1px solid #f4f4f4;
+    background: #fff;
+    margin-right: 50px;
+    margin-top: 2px;
+    position: absolute;
+    right: 0;
+    width: 300px;
+    padding: 20px;
+    top: 45px;
+    display: none;
+    z-index: 9999999999
+}
+
+.form-group-search {
+    background: #f4f4f4;
+    height: 35px
+}
+
+.search-btn .flownewsicon.fa-search {
+    padding: 9.5px 9px 11px 11px
+}
+
+.flownews-header-bottom .flownews-search-container {
+    padding: 0
+}
+
+.flownewsicon.search-close-form {
+    display: none
+}
+
+.post-text {
+    line-height: 24px
+}
+
+.post-text h2 {
+    margin: 40px 0 20px
+}
+
+.flownews-title-page-container {
+    border-bottom: 1px solid #f4f4f4;
+    border-right: 1px solid #e7685d;
+    border-top: 1px solid #f4f4f4;
+    height: 35px;
+    margin: 0 0 25px;
+    position: relative;
+    text-align: left
+}
+
+.flownews-title-page {
+    background: #e7685d;
+    color: #fff;
+    display: inline-block;
+    font-size: 14px;
+    font-weight: 600;
+    height: calc(100% + 2px);
+    height: -webkit-calc(100% + 2px);
+    left: 0;
+    letter-spacing: 1.5px;
+    padding: 10px;
+    position: absolute;
+    text-transform: uppercase;
+    top: -1px;
+    max-width: 95%;
+    overflow: hidden;
+    text-overflow: ellipsis;
+    white-space: nowrap;
+    transition: color .3s ease 0s
+}
+
+.flownews-category-description {
+    background: #f4f4f4;
+    margin-bottom: 50px;
+    padding: 17px 25px
+}
+
+.author-post-container .author-post {
+    background: #f4f4f4;
+    margin-bottom: 50px;
+    padding: 15px
+}
+
+.author-post-container .author-image .avatar {
+    float: left;
+    margin-right: 15px;
+    width: 20%
+}
+
+.author-post-container .author-name a {
+    color: #333;
+    display: block;
+    font-size: 18px;
+    font-weight: 700;
+    letter-spacing: .5px;
+    margin-bottom: 5px;
+    text-transform: uppercase
+}
+
+.author-post-container .author-info {
+    padding: 10px 0 0
+}
+
+.author-post-container .author-description {
+    color: #747474;
+    font-weight: 300;
+    letter-spacing: .5px;
+    line-height: 22px;
+    margin: 0 0 15px;
+    display: block
+}
+
+.author-post-container .author-social i {
+    color: #333;
+    margin-right: 15px
+}
+
+.text.attachment-container {
+    margin-top: 25px
+}
+
+.text.attachment-container span {
+    display: block;
+    margin-bottom: 10px
+}
+
+.not-found h2 {
+    font-weight: 400;
+    margin-bottom: 25px
+}
+
+.not-found p {
+    font-size: 16px
+}
+
+.not-found .search-form {
+    margin-top: 15px;
+    width: 100%
+}
+
+.not-found .search-form label {
+    width: 49%
+}
+
+.not-found .screen-reader-text {
+    float: left;
+    padding-right: 15px;
+    width: 24%;
+    line-height: 33px;
+    font-weight: 400
+}
+
+.not-found input {
+    border: 1px solid #f4f4f4;
+    font-weight: 100;
+    height: 35px;
+    padding: 5px 7px;
+    text-align: left;
+    width: 76%
+}
+
+.not-found input.search-submit {
+    background: #e7685d;
+    color: #fff;
+    font-weight: 700;
+    height: 35px;
+    text-align: center;
+    transition: all .3s ease 0s;
+    width: 10%
+}
+
+.not-found input.search-submit:hover {
+    background: #c9564c!important;
+    transition: all .3s ease 0s
+}
+
+.search-not-found form {
+    margin-top: 20px
+}
+
+.search-not-found input {
+    border: inherit
+}
+
+@media screen and (min-width: 500px) and (max-width:700px) {
+    .flownews-posts-content-wrap.flownews-post-layout1 .article-info-top h2,.flownews-posts-image-wrap .flownews-wrap-container .article-info-top h2 {
+        margin-bottom:15px
+    }
+
+    .flownews-wrap-container .flownews-post-title-page .article-info-top h2 {
+        line-height: 40px
+    }
+}
+
+@media screen and (max-width: 499px) {
+    .flownews-post-title-page .article-info-bottom,.flownews-posts-content-wrap.flownews-post-layout1 .article-info-bottom,.flownews-posts-image-wrap .flownews-wrap-container .article-info-bottom {
+        display:none
+    }
+
+    .flownews-wrap-container .flownews-post-title-page .article-info-top h2 {
+        line-height: 40px
+    }
+}
+
+.flownews-posts-content-wrap:after {
+    clear: both;
+    content: "";
+    display: block
+}
+
+.flownews-posts-content-wrap {
+    background-position: center
+}
+
+.flownews-posts-content-wrap article {
+    line-height: 1;
+    height: 500px;
+    overflow: hidden;
+    position: relative
+}
+
+.flownews-posts-content-wrap article h2 {
+    line-height: 1
+}
+
+.flownews-posts-content-wrap .article-info {
+    position: absolute;
+    z-index: 2;
+    margin-left: 0;
+    transition: all .4s ease 0s;
+    right: 30px;
+    max-width: calc(100% - 45px);
+    max-width: -webkit-calc(100% - 45px);
+    width: 100%
+}
+
+.flownews-posts-content-wrap .header-pattern {
+    background: rgba(0,0,0,.5);
+    position: absolute;
+    top: 0;
+    left: 0;
+    width: 100%;
+    height: 100%;
+    z-index: 1
+}
+
+.flownews-posts-content-wrap article img {
+    opacity: 1;
+    transition: all .4s ease 0s
+}
+
+.flownews-posts-content-wrap article:hover img {
+    opacity: .8;
+    transition: all .4s ease 0s
+}
+
+.flownews-posts-content-wrap .article-info-top {
+    margin-bottom: 15px
+}
+
+.flownews-posts-content-wrap .article-title {
+    margin: 0 25px 0 0;
+    line-height: 30px
+}
+
+.flownews-posts-content-wrap .article-title a,.flownews-posts-image-wrap .article-title a {
+    color: #fff;
+    font-weight: 700;
+    text-transform: uppercase;
+    font-size: 30px;
+    display: block
+}
+
+.flownews-posts-content-wrap .article-title a:hover,.flownews-posts-image-wrap .article-title a:hover {
+    color: #e7685d
+}
+
+.flownews-posts-content-wrap .article-category,.flownews-posts-image-wrap .article-category {
+    line-height: 30px;
+    float: left
+}
+
+.flownews-posts-content-wrap .article-category a,.flownews-posts-image-wrap .article-category a {
+    background: #e7685d;
+    color: #fff;
+    font-size: 10px;
+    font-weight: 700;
+    letter-spacing: 1px;
+    padding: 6px 10px;
+    text-transform: uppercase;
+    display: block;
+    line-height: 1;
+    margin-top: 4px
+}
+
+.flownews-posts-content-wrap .article-category a:hover,.flownews-posts-image-wrap .article-category a:hover {
+    background: #c9564c
+}
+
+.article-info.flownews-post-title-page .article-comments,.article-info.flownews-post-title-page .article-data,.article-info.flownews-post-title-page .article-features-category,.flownews-posts-image-wrap .article-comments,.flownews-posts-image-wrap .article-data,.flownews-posts-image-wrap .article-features-category {
+    display: inline-block;
+    margin: 0
+}
+
+.article-info.flownews-post-title-page .article-separator,.flownews-posts-image-wrap .article-separator {
+    display: inline-block;
+    margin: 0 20px
+}
+
+.flownews-posts-content-wrap .article-data {
+    margin-right: 20px
+}
+
+.article-info.flownews-post-title-page {
+    text-align: center;
+    margin-bottom: 50px
+}
+
+.article-info.flownews-post-title-page .article-info-top h2 {
+    margin-bottom: 15px;
+    font-size: 40px;
+    color: #333
+}
+
+.flownews-wrap-container .article-info-top h2 {
+    color: #fff;
+    margin-bottom: 15px;
+    margin-right: 0;
+    font-size: 40px;
+    line-height: 1.2
+}
+
+.flownews-element-top-content.flownews-top-content-layout1 .article-info-top h2,.flownews-element-top-content.flownews-top-content-layout2 .article-info-top h2 {
+    margin-right: 10px;
+    margin-bottom: 0
+}
+
+.flownews-posts-content-wrap .article-info-bottom,.flownews-posts-image-wrap .article-info-bottom {
+    color: #fff;
+    font-size: 13px;
+    letter-spacing: .4px
+}
+
+.article-info.flownews-post-title-page .article-info-bottom {
+    color: #646464;
+    font-size: 13px;
+    letter-spacing: .4px
+}
+
+.article-info.flownews-post-title-page .article-info-bottom i,.flownews-posts-content-wrap .article-info-bottom i,.flownews-posts-image-wrap .article-info-bottom i {
+    margin-right: 10px
+}
+
+.flownews-posts-content-wrap .article-info-bottom a,.flownews-posts-image-wrap .article-info-bottom a {
+    color: #FFF
+}
+
+.article-info.flownews-post-title-page .article-info-bottom a {
+    color: #333;
+    margin-right: 10px
+}
+
+.article-info.flownews-post-title-page .article-info-bottom a:hover,.flownews-posts-content-wrap .article-info-bottom a:hover,.flownews-posts-image-wrap .article-info-bottom a:hover {
+    color: #e7685d
+}
+
+.flownews-posts-content-wrap {
+    height: 500px;
+    overflow: hidden;
+    position: relative;
+    background-size: cover;
+    background-repeat: no-repeat;
+    margin-bottom: 0
+}
+
+.flownews-posts-content-wrap .article-info {
+    top: 50%;
+    left: 50%;
+    bottom: inherit;
+    -webkit-transform: translate(-51%,-51%);
+    -moz-transform: translate(-50%,-50%);
+    -ms-transform: translate(-50%,-50%);
+    -o-transform: translate(-50%,-50%);
+    transform: translate(-50%,-50%);
+    text-align: center;
+    text-transform: uppercase;
+    zoom:103%}
+
+.flownews-posts-content-wrap article:hover .article-info {
+    transition: all .4s ease 0s;
+    left: 50%
+}
+
+.flownews-posts-content-wrap .article-comments,.flownews-posts-content-wrap .article-data,.flownews-posts-content-wrap .article-features-category,.flownews-posts-content-wrap .article-separator,.flownews-posts-content-wrap .article-title {
+    float: none;
+    display: inline-block
+}
+
+.flownews-posts-content-wrap .article-comments {
+    margin-left: 20px;
+    margin-right: 20px
+}
+
+.flownews-posts-content-wrap .article-features-category {
+    margin-left: 20px
+}
+
+.flownews-post-layout2,.flownews-post-layout3 {
+    position: relative;
+    margin-bottom: 50px;
+    max-height: 500px;
+    overflow: hidden
+}
+
+.flownews-post-layout2 img,.flownews-post-layout3 img {
+    z-index: 1;
+    position: relative
+}
+
+.flownews-post-layout2 .flownews-wrap-container,.flownews-post-layout3 .flownews-wrap-container {
+    top: 50%;
+    left: 50%;
+    bottom: inherit;
+    -webkit-transform: translate(-50%,-50%);
+    -moz-transform: translate(-50%,-50%);
+    -ms-transform: translate(-50%,-50%);
+    -o-transform: translate(-50%,-50%);
+    transform: translate(-50%,-50%);
+    text-align: center;
+    text-transform: uppercase;
+    position: absolute;
+    z-index: 999;
+    width: 100%;
+    background: 0 0
+}
+
+.flownews-posts-image-wrap.flownews-post-layout2 .header-pattern,.flownews-posts-image-wrap.flownews-post-layout3 .header-pattern {
+    background: rgba(0,0,0,.5);
+    height: 100%;
+    left: 0;
+    position: absolute;
+    top: 0;
+    width: 100%;
+    z-index: 1
+}
+
+.tags-links {
+    letter-spacing: .5px
+}
+
+.tags-links>a {
+    color: #282828;
+    font-weight: 700;
+    margin-left: 3px;
+    transition: color .3s ease 0s
+}
+
+.tags-links>a:hover {
+    color: #e7685d;
+    transition: color .3s ease 0s
+}
+
+.flownews-post .social-post {
+    line-height: .5;
+    overflow: hidden
+}
+
+.flownews-post .social-post .container-social {
+    display: inline-block;
+    position: relative
+}
+
+.flownews-post .social-post .container-social:after,.flownews-post .social-post .container-social:before {
+    content: "";
+    position: absolute;
+    height: 5px;
+    border-bottom: 1px solid #F4F4F4;
+    top: 12px;
+    width: 600px
+}
+
+.flownews-post .social-post .container-social:before {
+    right: 100%;
+    margin-right: 35px
+}
+
+.flownews-post .social-post .container-social:after {
+    left: 100%;
+    margin-left: 35px
+}
+
+.flownews-post .social-post a {
+    border: 1px solid #f4f4f4;
+    color: #e7685d;
+    display: inline-block;
+    height: 35px;
+    line-height: 32px;
+    margin: 0 15px;
+    width: 35px;
+    transition: all .3s ease 0s
+}
+
+.flownews-post .social-post a i {
+    line-height: 32px
+}
+
+.flownews-post .social-post a:hover {
+    border: 1px solid #e7685d;
+    background: #e7685d;
+    color: #fff;
+    transition: all .3s ease 0s
+}
+
+.flownews-post .social-post a:first-child {
+    margin-left: 0
+}
+
+.flownews-post .social-post a:last-child {
+    margin-right: 0
+}
+
+.flownews-post .social-post {
+    margin: 50px 0;
+    text-align: center
+}
+
+.navigation-post {
+    margin-bottom: 50px;
+    height: 60px
+}
+
+.navigation-post .prev-post {
+    border: 1px solid #f4f4f4;
+    border-left: 0;
+    float: left;
+    height: 60px;
+    width: 50%;
+    position: relative
+}
+
+.navigation-post .next-post {
+    border: 1px solid #f4f4f4;
+    border-right: 0;
+    float: left;
+    height: 60px;
+    width: 50%;
+    position: relative;
+    text-align: right
+}
+
+.navigation-post .prev-post img {
+    height: calc(100% + 2px);
+    margin-top: -1px;
+    display: inline-block
+}
+
+.navigation-post .next-post img {
+    height: calc(100% + 2px);
+    margin-top: -1px;
+    display: inline-block;
+    float: right
+}
+
+.navigation-post .next,.navigation-post .prev {
+    display: inline-block;
+    height: 60px;
+    width: calc(100% - 60px)
+}
+
+.navigation-post .prev {
+    padding: 8px 0 8px 25px;
+    position: absolute
+}
+
+.navigation-post .next {
+    padding: 8px 25px 8px 0
+}
+
+.navigation-post .next-post-text,.navigation-post .prev-post-text {
+    color: #ccc;
+    display: block;
+    margin-bottom: 10px;
+    transition: all .3s ease 0s
+}
+
+.navigation-post .next-post-text:hover,.navigation-post .prev-post-text:hover {
+    color: #333;
+    transition: all .3s ease 0s
+}
+
+.navigation-post .prev-post-text i {
+    color: #333;
+    font-size: 16px;
+    margin-right: 10px
+}
+
+.navigation-post .next-post-text i {
+    color: #333;
+    font-size: 16px;
+    margin-left: 10px
+}
+
+.navigation-post .name-post {
+    color: #333;
+    font-weight: 700;
+    letter-spacing: 1px;
+    text-transform: uppercase;
+    transition: all .3s ease 0s;
+    white-space: nowrap;
+    width: 100%;
+    overflow: hidden;
+    text-overflow: ellipsis;
+    display: block
+}
+
+.navigation-post .next-post .name-post {
+    padding-left: 20px
+}
+
+.navigation-post .prev-post .name-post {
+    padding-right: 20px
+}
+
+.navigation-post .name-post:hover {
+    color: #e7685d;
+    transition: all .3s ease 0s
+}
+
+.related-item-container.flownews-element-posts.flownews-posts-layout2 .item-posts.first-element-posts {
+    border-top: 0;
+    padding-top: 0;
+    margin-top: 0;
+    margin-bottom: 25px
+}
+
+.related-item-container.flownews-element-posts .owl-controls i {
+    margin-right: 0
+}
+
+@media screen and (max-width: 1000px) {
+    .navigation-post .name-post {
+        overflow:hidden;
+        text-overflow: ellipsis;
+        white-space: nowrap;
+        width: 80%;
+        display: block
+    }
+
+    .navigation-post .next-post .name-post {
+        float: right
+    }
+
+    .flownews-footer-wrap .flownews-footer-bottom .flownews-wrap-container .col-xs-4 {
+        padding: 10px;
+        text-align: center
+    }
+
+    .flownews-footer-bottom .flownews-wrap-container .col-xs-4 .flownews-top-menu li:first-child a {
+        padding-left: 0
+    }
+
+    .flownews-header-wrap .flownews-top-menu {
+        display: none
+    }
+
+    .flownews-header-wrap .flownews-date.col-sm-3 {
+        border-right: 0 none;
+        float: right;
+        width: 30%
+    }
+
+    .flownews-header-wrap .flownews-header-top .flownews-ticker.col-sm-6 {
+        width: 70%
+    }
+
+    .flownews-header-middle {
+        padding: 25px
+    }
+
+    .flownews-header-wrap .flownews-header-middle .flownews-banner-top {
+        float: none;
+        width: 100%;
+        text-align: center
+    }
+
+    .flownews-header-wrap .flownews-header-middle .flownews-wrap-container .flownews-logo {
+        height: auto;
+        line-height: 0;
+        margin-top: 25px;
+        text-align: center;
+        width: 100%
+    }
+}
+
+@media screen and (max-width: 850px) {
+    .flownews-posts-content-wrap .item-header {
+        height:300px;
+        overflow: hidden
+    }
+
+    .flownews-posts-content-wrap .article-title a {
+        font-size: 16px
+    }
+
+    .flownews-posts-content-wrap .article-info-bottom {
+        font-size: 12px
+    }
+
+    .flownews_widget.fnwp_mega_posts .container_post .img-post.ad_one_third,.flownews_widget.fnwp_tab .img-post.ad_one_third {
+        height: auto;
+        margin: 0
+    }
+
+    .flownews_widget.fnwp_mega_posts .box_post .container_post .img-post.ad_one_third {
+        width: 100%;
+        max-width: 100%;
+        float: none
+    }
+
+    .flownews_widget.fnwp_mega_posts .box_post .container_post.ad_one_one .box-info.ad_two_third {
+        box-sizing: border-box;
+        padding-left: 0;
+        width: 100%;
+        max-width: 100%
+    }
+
+    .flownews_widget.fnwp_mega_posts .box_post,.widget.flownews_widget.fnwp_tab .box_post {
+        margin-bottom: 25px
+    }
+
+    .flownews_widget.fnwp_social.flownews_widget .box-icon-social.ad_one_third {
+        width: calc(50% - 6px)
+    }
+
+    .widget_fnwp_social.flownews_widget.fnwp_social .box-icon-social.ad_one_third:nth-child(4) {
+        margin-bottom: 6px
+    }
+
+    .fnwp-widget.flownews_widget.fnwp_tab h3.widget-title {
+        height: 98px
+    }
+
+    .fnwp-widget.flownews_widget.fnwp_tab .fnwp-title-widget {
+        padding: 0
+    }
+
+    .fnwp_tab .widget-title .fnwp-title-widget span {
+        display: block;
+        margin-bottom: 2px
+    }
+
+    .flownews-vc-element-posts-carousel .article-info-top .article-comments,.flownews-vc-element-posts-carousel .article-info-top .article-separator,.flownews_widget.fnwp_slider_posts .box-text .data {
+        display: none
+    }
+
+    .flownews_widget.fnwp_tab .container_post .img-post.ad_one_third {
+        float: none;
+        height: 100%;
+        width: 100%
+    }
+
+    .flownews_widget.fnwp_tab .box_post .container_post.ad_one_one .box-info.ad_two_third {
+        box-sizing: border-box;
+        padding-left: 0;
+        width: 100%
+    }
+
+    .flownews_widget.fnwp_slider_posts .box-text .box-padding {
+        padding: 10px
+    }
+
+    .flownews_widget.fnwp_slider_posts .box-text .category a {
+        margin-bottom: 10px
+    }
+
+    .flownews_widget.fnwp_slider_posts .box-text .box-padding h3 a {
+        font-size: 14px
+    }
+
+    .flownews-sidebar .widget.widget_search .search-form label,.flownews-sidebar .widget_search .search-form .search-submit,.wpb_wrapper .widget.widget_search .search-form label,.wpb_wrapper .widget_search .search-form .search-submit {
+        width: 100%
+    }
+
+    .flownews-footer-bottom .flownews-wrap-container .col-xs-4 {
+        padding: 15px;
+        text-align: center!important
+    }
+
+    .navigation-post .next-post,.navigation-post .prev-post {
+        width: 100%
+    }
+
+    .navigation-post .next-post {
+        margin-top: 10px
+    }
+
+    .navigation-post {
+        height: auto
+    }
+
+    .flownews-vc-element-posts-carousel.flownews-element-posts.flownews-posts-layout2 .item-posts.first-element-posts {
+        border-top: 0;
+        margin-top: 0;
+        padding-top: 0;
+        margin-bottom: 25px
+    }
+
+    .flownews-vc-element-posts-carousel .article-info-top .article-data {
+        margin-right: 0
+    }
+
+    #commentform.comment-form .form-submit {
+        width: 50%
+    }
+}
+
+@media screen and (min-width: 500px) and (max-width:700px) {
+    .fnwp_tab .widget-title .fnwp-title-widget span {
+        display:inline-block;
+        margin-bottom: 0;
+        margin-right: 2px
+    }
+
+    .fnwp-widget.flownews_widget.fnwp_tab h3.widget-title {
+        height: 31px
+    }
+
+    .flownews_widget.fnwp_mega_posts .mega-posts .box_post,.widget.fnwp-widget.flownews_widget.fnwp_tab .box_post {
+        display: inline-block;
+        margin: 0 0 25px 25px;
+        padding: 0;
+        width: calc(50% - 25px)
+    }
+
+    .widget.fnwp-widget.flownews_widget.fnwp_tab .fnwp-tab-container.fnwp-tag.box_tag .box_post {
+        display: inline-block;
+        margin: 0 0 0 25px;
+        padding: 0;
+        width: 100%
+    }
+
+    .widget.fnwp-widget.flownews_widget.fnwp_tab .fnwp-tab-container.box_tag {
+        margin-left: 0
+    }
+
+    .fnwp_mega_posts .mega-posts,.fnwp_tab .fnwp-tab-container {
+        font-size: 0;
+        margin-left: -25px
+    }
+
+    .fnwp-widget.flownews_widget.fnwp_mega_posts .box_post:last-child,.widget.fnwp-widget.flownews_widget.fnwp_tab .box_post:last-child {
+        border-bottom: 1px solid #f4f4f4
+    }
+
+    .widget.flownews_widget.fnwp_social .box_social .box-icon-social.ad_one_third {
+        height: 130px
+    }
+
+    .widget.flownews_widget.fnwp_social .flownews-widget-social-style1 .box-icon-social a {
+        font-size: 30px;
+        margin-left: -15px;
+        margin-top: -15px
+    }
+
+    .widget.flownews_widget.fnwp_social .box-icon-social a {
+        font-size: 30px
+    }
+
+    .flownews-header-wrap .flownews-top-menu {
+        display: block
+    }
+}
+
+@media screen and (min-width: 1024px) and (max-width:1200px) {
+    .flownews-header-middle {
+        padding:25px
+    }
+
+    .flownews-footer-bottom .flownews-wrap-container {
+        padding: 0 50px
+    }
+}
+
+@media screen and (max-width: 1024px) {
+    .no-js .flownews-top-news-ticker.owl-carousel {
+        margin-bottom:0
+    }
+
+    .flownews-top-news-ticker.owl-theme .owl-controls,.header-desktop {
+        display: none
+    }
+
+    .header-mobile {
+        display: block
+    }
+
+    .flownews-header-sticky {
+        display: none!important
+    }
+
+    .flownews-header-wrap-container.header-mobile {
+        background: #282828
+    }
+
+    .flownews-menu>li.menu-item-has-children>a::after {
+        color: #333
+    }
+
+    ul.submenu li:first-child .submenu {
+        border-top: 1px solid #f4f4f4
+    }
+
+    .flownews-header-wrap-container .flownews-header-top .flownews-wrap-container {
+        height: auto
+    }
+
+    .flownews-header-top .flownews-wrap-container .flownews-ticker.col-sm-6 {
+        display: block;
+        width: 98%;
+        border: 0
+    }
+
+    .flownews-wrap-container .flownews-date.col-sm-3,.flownews-wrap-container .flownews-top-menu.col-sm-3 {
+        border: 0;
+        height: auto;
+        padding: 10px;
+        width: 100%;
+        border-top: 1px solid #282828
+    }
+
+    .flownews-top-news-ticker .news-ticker-item .news-ticker-item-category {
+        width: 24%
+    }
+
+    .flownews-top-news-ticker .news-ticker-item .news-ticker-item-title {
+        width: 76%
+    }
+
+    .flownews-top-news-ticker .news-ticker-item-date,.flownews-top-news-ticker .owl-nav i {
+        display: none
+    }
+
+    .flownews-header-top .flownews-top-news-ticker.owl-carousel .owl-stage-outer {
+        width: 100%
+    }
+
+    .flownews-top-news-ticker .news-ticker-item-title a {
+        margin-left: 10px;
+        text-align: left
+    }
+
+    .flownews-header-middle {
+        padding: 25px
+    }
+
+    .flownews-header-wrap-container .flownews-header-middle .flownews-wrap-container .flownews-logo {
+        text-align: center
+    }
+}
+
+@media screen and (max-width: 700px) {
+    .flownews-container>.col-xs-3,.flownews-container>.col-xs-9 {
+        position:relative!important
+    }
+
+    .flownews-posts-content-wrap .item-header {
+        height: 200px;
+        overflow: hidden
+    }
+
+    .flownews-posts-content-wrap,.navigation-post {
+        height: auto
+    }
+
+    .flownews-posts-content-wrap .article-title a {
+        font-size: 13px
+    }
+
+    .flownews-posts-content-wrap .article-info-bottom {
+        font-size: 10px
+    }
+
+    .flownews-posts-content-wrap .article-info-bottom .article-comments,.flownews-posts-content-wrap .article-info-bottom div:nth-child(4) {
+        display: none
+    }
+
+    .flownews-container.flownews-sidebar-right .col-xs-9 {
+        margin-right: 0
+    }
+
+    .flownews-container .col-xs-9 {
+        max-width: 100%;
+        width: 100%
+    }
+
+    .flownews-wrap-container .article-info-top h2 {
+        font-size: 26px;
+        line-height: 30px;
+        margin-bottom: 0
+    }
+
+    .navigation-post .prev-post {
+        width: 100%;
+        margin-bottom: 10px
+    }
+
+    .navigation-post .next-post {
+        width: 100%
+    }
+
+    .flownews-container {
+        padding: 25px
+    }
+
+    .author-post-container .author-info,.comments .comment-form-comment {
+        padding: 0
+    }
+
+    .navigation-post .next,.navigation-post .prev {
+        overflow: hidden;
+        text-overflow: ellipsis;
+        white-space: nowrap;
+        width: 75%
+    }
+
+    .related-item-container .owl-item {
+        margin-bottom: 25px
+    }
+
+    .comments .comment-form .form-submit {
+        margin-bottom: 50px;
+        width: 100%
+    }
+
+    .flownews-sidebar.col-xs-3 {
+        width: 100%
+    }
+
+    #commentform.comment-form .form-submit {
+        width: 100%;
+        margin-left: -1px
+    }
+
+    #commentform .col-xs-4 {
+        width: 100%
+    }
+
+    .flownews-sidebar-right .flownews-sidebar {
+        margin-top: 50px
+    }
+
+    .flownews-sidebar-left .flownews-sidebar {
+        margin-bottom: 50px
+    }
+
+    .flownews_widget.fnwp_mega_posts .container_post.ad_one_one .img-post.ad_one_third,.flownews_widget.fnwp_tab .container_post.ad_one_one .img-post.ad_one_third {
+        height: auto;
+        width: 100%
+    }
+
+    .flownews_widget.fnwp_mega_posts .box_post .container_post.ad_one_one .box-info.ad_two_third {
+        width: 100%;
+        padding-left: 0
+    }
+
+    .flownews_widget.fnwp_mega_posts .container_post.ad_one_one .box-info.ad_two_third {
+        box-sizing: border-box;
+        margin-top: 15px;
+        width: 100%
+    }
+
+    .flownews_widget.fnwp_mega_posts .box_post .container_post.ad_one_one {
+        padding: 0 0 15px
+    }
+
+    .flownews_widget.fnwp_mega_posts .mega-posts .box_post {
+        padding: 0
+    }
+
+    .flownews_widget.fnwp_social.fnwp-widget.flownews_widget .box_social.flownews-widget-social-style1 {
+        margin-left: -3px;
+        padding: 0
+    }
+
+    .flownews_widget.fnwp_social .box_social .box-icon-social.ad_one_third {
+        width: calc(33.3333% - 6px)!important;
+        height: 90px
+    }
+
+    .flownews_widget.fnwp_social .box_social .box-icon-social.ad_one_third:nth-child(5),.flownews_widget.fnwp_social .box_social .box-icon-social.ad_one_third:nth-child(6) {
+        margin-bottom: 6px
+    }
+
+    .container_advertisement {
+        text-align: center
+    }
+
+    .flownews_widget.fnwp_tab .box_post .container_post.ad_one_one .box-info.ad_two_third {
+        width: 100%;
+        padding-left: 0
+    }
+
+    .flownews_widget.fnwp_tab .container_post.ad_one_one .box-info.ad_two_third {
+        box-sizing: border-box;
+        margin-top: 15px;
+        width: 100%
+    }
+
+    .flownews_widget.fnwp_tab .box_post .container_post.ad_one_one {
+        padding: 0 0 15px
+    }
+
+    .widget.fnwp-widget.flownews_widget.fnwp_tab .box_post {
+        padding: 0
+    }
+
+    .flownews-footer-top .flownews-wrap-container .footer-widget.col-xs-4 {
+        border-bottom: 1px solid #454545;
+        margin-bottom: 50px;
+        margin-left: 0;
+        margin-right: 0;
+        max-width: 100%;
+        padding-bottom: 25px;
+        width: 100%
+    }
+
+    .flownews-header-wrap-container .flownews-footer-bottom .flownews-wrap-container .col-xs-4 {
+        border-bottom: 1px solid #282828;
+        border-left: 0 none;
+        border-right: 0 none;
+        line-height: 22px;
+        padding: 6px 25px;
+        text-align: center;
+        width: 100%
+    }
+
+    .flownews-footer-wrap .flownews-footer-top .flownews-wrap-container.element-no-padding {
+        padding: 25px
+    }
+
+    .flownews-container .flownews-element-posts.flownews-posts-layout2 .item-posts.first-element-posts.col-xs-6 {
+        width: calc(100% - 25px)
+    }
+
+    .flownews-container .flownews-element-posts.flownews-posts-layout2.flownews-blog-2-col .item-posts.first-element-posts:nth-child(2) {
+        border-top: 1px solid #f4f4f4;
+        margin-top: 25px;
+        padding-top: 25px
+    }
+}
+
+#commentform input {
+    width: 100%
+}
+
+.comment-form {
+    margin-left: -2.5px;
+    width: calc(100% + 5px)
+}
+
+#commentform .col-xs-4 {
+    padding: 0 2.5px 5px!important
+}
+
+.comment-form-comment {
+    padding: 0 2.5px
+}
+
+.comment-form-author.col-xs-4 input,.comment-form-email.col-xs-4 input,.comment-form-url.col-xs-4 input {
+    background: #f4f4f4;
+    border: none;
+    height: 40px;
+    padding: 12px
+}
+
+.comment-form-comment textarea {
+    width: 100%;
+    background: #f4f4f4;
+    border: none;
+    height: 175px;
+    padding: 12px
+}
+
+.comment-form .form-submit {
+    margin-top: 25px;
+    width: 25%;
+    margin-left: 2.5px
+}
+
+.comment-form .submit {
+    background: #e7685d;
+    border: none;
+    color: #fff;
+    font-weight: 700;
+    height: 40px;
+    text-transform: uppercase
+}
+
+.comment-form .submit:hover {
+    background: #c9564c
+}
+
+.comment-form-title,.comment-reply-title {
+    border-bottom: 1px solid #f4f4f4;
+    border-right: 1px solid #e7685d;
+    border-top: 1px solid #f4f4f4;
+    height: 35px;
+    margin: 0 0 25px;
+    position: relative;
+    text-align: left
+}
+
+.comment-form-title {
+    margin-top: 50px
+}
+
+.comment-form-title h3,.comment-reply-title .title-leave-a-comment {
+    background: #e7685d;
+    color: #fff;
+    display: inline-block;
+    font-size: 14px;
+    font-weight: 600;
+    height: calc(100% + 2px);
+    height: -webkit-calc(100% + 2px);
+    left: 0;
+    letter-spacing: 1.5px;
+    padding: 10px;
+    position: absolute;
+    text-transform: uppercase;
+    top: -1px;
+    transition: color .3s ease 0s;
+    margin: 0
+}
+
+.comments-list {
+    padding: 25px;
+    margin-top: 25px;
+    border: 1px solid #f4f4f4
+}
+
+.comments-list:first-child {
+    border: 0;
+    padding: 25px 0
+}
+
+.comments-list ul.children {
+    padding-left: 90px!important;
+    margin: inherit!important
+}
+
+.comments-list ul.children ul.children {
+    border: 0
+}
+
+.children .comments-list:before {
+    content: "";
+    position: absolute;
+    border-top: 1px solid #e7685d;
+    top: 55px;
+    width: 70px;
+    left: 0;
+    margin-right: 20px
+}
+
+.comments-list ul.children {
+    position: relative
+}
+
+.comment-image-author {
+    width: 70px;
+    float: left
+}
+
+.main-comment img {
+    border-radius: 10px
+}
+
+.comment-info {
+    width: calc(100% - 90px);
+    float: left;
+    margin-left: 20px
+}
+
+.comment-name {
+    display: block;
+    float: left;
+    font-size: 16px;
+    font-weight: 700;
+    letter-spacing: .5px;
+    margin-bottom: 2px;
+    text-align: left;
+    text-transform: uppercase
+}
+
+.comment-description p {
+    font-size: 14px;
+    margin-top: 10px
+}
+
+.comment-description p:nth-last-of-type(1) {
+    display: inline
+}
+
+.comment-date {
+    color: #e7685d;
+    letter-spacing: .5px;
+    float: right;
+    text-align: right;
+    font-style: italic;
+    font-size: 12px
+}
+
+.comment-description {
+    display: block;
+    font-size: 12px;
+    letter-spacing: 2px;
+    text-align: justify;
+    line-height: 1.5;
+    margin-bottom: 2px;
+    font-weight: 100
+}
+
+.comment-description i {
+    color: #e7685d;
+    font-size: 14px;
+    margin-left: 5px;
+    transition: color .3s ease 0s
+}
+
+.comment-description i:hover {
+    color: #c9564c;
+    transition: color .3s ease 0s
+}
+
+.reply-comment {
+    padding-top: 50px
+}
+
+.reply-line {
+    width: 10%;
+    float: left;
+    padding-right: 25px
+}
+
+.reply-line:after {
+    width: 100%;
+    content: "";
+    margin: 31px 25px 0 0;
+    float: left
+}
+
+.reply-comment .comment-info {
+    width: 80%
+}
+
+.comment-edit-link {
+    color: #e7685d;
+    transition: color .3s ease 0s
+}
+
+.comment-edit-link:hover {
+    color: #c9564c;
+    transition: color .3s ease 0s
+}
+
+#commentform .logged-in-as {
+    margin-bottom: 15px;
+    margin-left: 2.5px
+}
+
+#commentform .logged-in-as a {
+    color: #333;
+    letter-spacing: .5px;
+    font-weight: 400;
+    transition: color .3s ease 0s
+}
+
+#commentform .logged-in-as a:hover {
+    color: #e7685d;
+    transition: color .3s ease 0s
+}
+
+.comments-template .comment-respond {
+    margin-top: 50px
+}
+
+.news-ticker-item .news-ticker-item-category,.news-ticker-item .news-ticker-item-date,.news-ticker-item .news-ticker-item-title {
+    float: left;
+    text-align: left
+}
+
+.news-ticker-item .news-ticker-item-title {
+    width: 70%
+}
+
+.news-ticker-item .news-ticker-item-category a {
+    background: #e7685d;
+    color: #fff;
+    font-size: 10px;
+    font-weight: 700;
+    letter-spacing: 1px;
+    padding: 6px 10px;
+    text-transform: uppercase;
+    display: block;
+    line-height: 1;
+    margin: 5px 5px 0 0
+}
+
+.news-ticker-item .news-ticker-item-title a {
+    color: #fff;
+    font-size: 12px;
+    font-weight: 700;
+    letter-spacing: 1.5px;
+    text-transform: uppercase;
+    transition: color .3s ease 0s;
+    overflow: hidden;
+    text-overflow: ellipsis;
+    white-space: nowrap;
+    width: 95%;
+    text-align: left;
+    line-height: 32px;
+    display: block
+}
+
+.news-ticker-item .news-ticker-item-title a:hover {
+    color: #e7685d;
+    transition: color .3s ease 0s
+}
+
+.news-ticker-item .news-ticker-item-date {
+    color: #fff;
+    font-size: 10px;
+    font-weight: 700;
+    letter-spacing: 1.5px;
+    margin-left: 20px;
+    text-transform: uppercase
+}
+
+.flownews-top-news-ticker.owl-carousel .owl-stage-outer {
+    float: left;
+    width: 92%
+}
+
+.col-sm-4 .flownews-top-news-ticker.owl-carousel .owl-stage-outer {
+    width: 90%
+}
+
+.flownews-top-news-ticker.owl-theme .owl-controls .owl-nav [class*=owl-] {
+    color: #fff;
+    background: 0 0;
+    padding: 0 5px;
+    line-height: 1;
+    transition: color .3s ease 0s
+}
+
+.flownews-header-top .flownews-wrap-container {
+    height: 32px
+}
+
+.flownews-top-news-ticker.owl-theme .owl-controls {
+    margin-top: 0;
+    text-align: right
+}
+
+.flownews-header-top .col-sm-1,.flownews-header-top .col-sm-10,.flownews-header-top .col-sm-11,.flownews-header-top .col-sm-12,.flownews-header-top .col-sm-2,.flownews-header-top .col-sm-3,.flownews-header-top .col-sm-4,.flownews-header-top .col-sm-5,.flownews-header-top .col-sm-6,.flownews-header-top .col-sm-7,.flownews-header-top .col-sm-8,.flownews-header-top .col-sm-9 {
+    line-height: 32px;
+    border-right: 1px solid #333;
+    text-align: center
+}
+
+.flownews-header-top .flownews-ticker.col-sm-6 {
+    border-left: 1px solid #333
+}
+
+.flownews-date {
+    color: #fff;
+    font-size: 12px;
+    letter-spacing: 1.2px;
+    line-height: 19px
+}
+
+.flownews-social .flownews-header-top-social a {
+    color: #fff;
+    font-size: 12px;
+    line-height: 32px;
+    padding: 0 10px;
+    transition: color .3s ease 0s
+}
+
+.flownews-social .flownews-header-top-social a:hover {
+    color: #e7685d;
+    transition: color .3s ease 0s
+}
+
+.follow-container a,.follow-container a:hover {
+    transition: all .3s ease 0s
+}
+
+.flownews-social .flownews-header-top-social a:first-child {
+    padding-left: 0
+}
+
+.flownews-social .flownews-header-top-social a:last-child {
+    padding-right: 0
+}
+
+.fnwp-widget .ad_one_one {
+    width: 100%
+}
+
+.fnwp-widget .ad_one_half {
+    width: 50%
+}
+
+.fnwp-widget .ad_one_third {
+    width: 33.33%
+}
+
+.fnwp-widget .ad_two_third {
+    width: 66.66%
+}
+
+.fnwp-widget .ad_one_fourth {
+    width: 25%
+}
+
+.fnwp-widget .ad_three_fourth {
+    width: 75%
+}
+
+.fnwp-widget .ad_one_fifth {
+    width: 20%
+}
+
+.fnwp-widget .ad_two_fifth {
+    width: 40%
+}
+
+.fnwp-widget .ad_three_fifth {
+    width: 60%
+}
+
+.fnwp-widget .ad_four_fifth {
+    width: 80%
+}
+
+.fnwp-widget .ad_one_sixth {
+    width: 16.66%
+}
+
+.fnwp-widget .ad_five_sixth {
+    width: 83.33%
+}
+
+.fnwp-widget .ad_five_sixth,.fnwp-widget .ad_four_fifth,.fnwp-widget .ad_one_fifth,.fnwp-widget .ad_one_fourth,.fnwp-widget .ad_one_half,.fnwp-widget .ad_one_sixth,.fnwp-widget .ad_one_third,.fnwp-widget .ad_three_fifth,.fnwp-widget .ad_three_fourth,.fnwp-widget .ad_two_fifth,.fnwp-widget .ad_two_third {
+    position: relative;
+    float: left
+}
+
+.fnwp-widget .ad_last {
+    margin-right: 0!important;
+    clear: right
+}
+
+.adclear {
+    clear: both
+}
+
+.admp_one_half {
+    width: 48%
+}
+
+.admp_one_third {
+    width: 30.66%
+}
+
+.admp_two_third {
+    width: 65.33%
+}
+
+.admp_one_fourth {
+    width: 22%
+}
+
+.admp_three_fourth {
+    width: 74%
+}
+
+.admp_one_fifth {
+    width: 16.8%
+}
+
+.admp_two_fifth {
+    width: 37.6%
+}
+
+.admp_three_fifth {
+    width: 58.4%
+}
+
+.admp_four_fifth {
+    width: 67.2%
+}
+
+.admp_one_sixth {
+    width: 13.33%
+}
+
+.admp_five_sixth {
+    width: 82.67%
+}
+
+.admp_five_sixth,.admp_four_fifth,.admp_one_fifth,.admp_one_fourth,.admp_one_half,.admp_one_sixth,.admp_one_third,.admp_three_fifth,.admp_three_fourth,.admp_two_fifth,.admp_two_third {
+    position: relative;
+    margin-right: 3.7%;
+    float: left
+}
+
+.admp_last {
+    margin-right: 0!important;
+    clear: right
+}
+
+.flownews-blog-2-col [class*=flownews-placeholder-] article:nth-child(2n+1),.flownews-blog-3-col [class*=flownews-placeholder-] article:nth-child(3n+1),.flownews-blog-4-col [class*=flownews-placeholder-] article:nth-child(4n+1),.flownews-load-more-type2.flownews-vc-posts-2-col .flownews-vc-element-posts-article-container .flownews-load-more-container article:nth-child(2n+1),.flownews-load-more-type2.flownews-vc-posts-3-col .flownews-vc-element-posts-article-container .flownews-load-more-container article:nth-child(3n+1),.flownews-load-more-type3.flownews-vc-posts-2-col .flownews-vc-element-posts-article-container .flownews-load-more-container article:nth-child(2n+1),.flownews-load-more-type3.flownews-vc-posts-3-col .flownews-vc-element-posts-article-container .flownews-load-more-container article:nth-child(3n+1),.flownews-load-more-type4.flownews-vc-posts-2-col .flownews-vc-element-posts-article-container .flownews-load-more-container article:nth-child(2n+1),.flownews-load-more-type4.flownews-vc-posts-3-col .flownews-vc-element-posts-article-container .flownews-load-more-container article:nth-child(3n+1),.flownews-load-more-type5.flownews-vc-posts-2-col .flownews-vc-element-posts-article-container .flownews-load-more-container article:nth-child(2n+1),.flownews-load-more-type5.flownews-vc-posts-3-col .flownews-vc-element-posts-article-container .flownews-load-more-container article:nth-child(3n+1),.flownews-load-more-type6.flownews-vc-posts-2-col .flownews-vc-element-posts-article-container .flownews-load-more-container article:nth-child(2n+1),.flownews-load-more-type6.flownews-vc-posts-3-col .flownews-vc-element-posts-article-container .flownews-load-more-container article:nth-child(3n+1),.fnwp-clear {
+    clear: both
+}
+
+@media screen and (max-width: 767px) {
+    .fnwp-widget .ad_five_sixth,.fnwp-widget .ad_four_fifth,.fnwp-widget .ad_one_fifth,.fnwp-widget .ad_one_fourth,.fnwp-widget .ad_one_half,.fnwp-widget .ad_one_sixth,.fnwp-widget .ad_one_third,.fnwp-widget .ad_three_fifth,.fnwp-widget .ad_three_fourth,.fnwp-widget .ad_two_fifth,.fnwp-widget .ad_two_third {
+        max-width:100%!important;
+        float: none!important;
+        width: 100%!important
+    }
+}
+
+.flownews_widget.fnwp_advertisement .container_advertisement img,.widget select {
+    max-width: 100%
+}
+
+@media (min-device-width: 768px) and (max-device-width:800px) and (orientation:portrait) {
+    .fnwp-widget .ad_five_sixth,.fnwp-widget .ad_four_fifth,.fnwp-widget .ad_one_fifth,.fnwp-widget .ad_one_fourth,.fnwp-widget .ad_one_half,.fnwp-widget .ad_one_sixth,.fnwp-widget .ad_one_third,.fnwp-widget .ad_three_fifth,.fnwp-widget .ad_three_fourth,.fnwp-widget .ad_two_fifth,.fnwp-widget .ad_two_third {
+        margin-right:1%
+    }
+}
+
+.about-me .ab-image {
+    position: relative
+}
+
+.about-me .ab-title {
+    padding: 8px 24px;
+    position: absolute;
+    top: 25px;
+    left: 50%;
+    transform: translate(-50%,0);
+    text-transform: uppercase;
+    border-radius: 5px;
+    box-shadow: 2px 2px 2px 0 rgba(0,0,0,.4);
+    font-size: 12px;
+    line-height: 1
+}
+
+.about-me .ad-text {
+    padding: 25px 0 0;
+    border-radius: 0 0 10px 10px;
+    text-align: center
+}
+
+.about-me .ad-text p {
+    font-size: 14px;
+    padding-bottom: 10px
+}
+
+.about-me .ad-text .signing {
+    font-size: 36px
+}
+
+.latest-posts .posts-container {
+    text-transform: uppercase;
+    padding: 25px;
+    margin-top: 4px;
+    border-radius: 0 0 10px 10px
+}
+
+.latest-posts .posts-container .item {
+    margin-top: 25px
+}
+
+.latest-posts .posts-container .item:first-child {
+    margin-top: 0
+}
+
+.latest-posts .post-image {
+    margin-right: 25px;
+    float: left;
+    width: 30%
+}
+
+.latest-posts .info-post {
+    float: left;
+    width: calc(70% - 25px)
+}
+
+.info-post h5 {
+    margin: 0 0 10px
+}
+
+.latest-posts .info-post h5 a {
+    font-size: 14px;
+    letter-spacing: 1.5px;
+    line-height: 1.5
+}
+
+.latest-posts .info-post .date {
+    font-size: 12px;
+    letter-spacing: 1.5px
+}
+
+.follow-container {
+    text-transform: uppercase;
+    padding: 25px;
+    margin-top: 4px;
+    border-radius: 0 0 10px 10px;
+    text-align: center
+}
+
+.follow-container a {
+    border-radius: 50%;
+    display: inline-block;
+    font-size: 12px;
+    height: 42px;
+    line-height: 44px;
+    margin: 5px;
+    width: 42px
+}
+
+.tagcloud a,.tags-container a {
+    color: #333;
+    margin-right: 10px;
+    font-size: 12px;
+    font-weight: 700;
+    letter-spacing: 1px;
+    text-transform: uppercase;
+    transition: all .4s ease 0s
+}
+
+.tagcloud a:hover,.tags-container a:hover {
+    color: #e7685d;
+    transition: all .4s ease 0s
+}
+
+.advertising-container {
+    text-transform: uppercase;
+    padding: 25px;
+    border-radius: 10px;
+    text-align: center
+}
+
+.advertising-container.advertising-title,.newsletter-container {
+    margin-top: 4px;
+    border-radius: 0 0 10px 10px
+}
+
+.newsletter-container {
+    padding: 25px;
+    text-align: center
+}
+
+.newsletter h4 {
+    font-size: 14px;
+    letter-spacing: 2px
+}
+
+.newsletter form input,.newsletter p {
+    font-size: 12px;
+    letter-spacing: 1.5px
+}
+
+.newsletter form {
+    margin-top: 25px
+}
+
+.newsletter form input {
+    display: block;
+    width: 100%;
+    border: 0;
+    border-radius: 5px;
+    font-style: italic;
+    padding: 12px;
+    margin-bottom: 10px;
+    text-align: center
+}
+
+.newsletter form button {
+    border-radius: 5px;
+    display: block;
+    width: 100%;
+    border: 0;
+    text-transform: uppercase;
+    padding: 12px;
+    letter-spacing: 1.5px;
+    font-weight: 600
+}
+
+@media screen and (min-width: 1100px) {
+    .flownews-sidebar .widget-gallery .instagram-image,.wpb_wrapper .widget-gallery .instagram-image {
+        height:auto
+    }
+
+    .flownews-sidebar .instagram-image a img,.wpb_wrapper .instagram-image a img {
+        width: 50%;
+        height: 150px
+    }
+
+    .flownews-sidebar .instagram-image-loaded-1 a img,.wpb_wrapper .instagram-image-loaded-1 a img {
+        width: 100%
+    }
+}
+
+.widget_flownews_instagram_inline img {
+    float: left;
+    margin: 0;
+    padding: 0
+}
+
+.widget_flownews_instagram_inline .instagram_inline_image_loaded_1 a img {
+    width: 100%
+}
+
+.widget_flownews_instagram_inline .instagram_inline_image_loaded_2 a img {
+    width: 50%
+}
+
+.widget_flownews_instagram_inline .instagram_inline_image_loaded_3 a img {
+    width: 33.33333333333333
+}
+
+.widget_flownews_instagram_inline .instagram_inline_image_loaded_4 a img {
+    width: 25%
+}
+
+.widget_flownews_instagram_inline .instagram_inline_image_loaded_5 a img {
+    width: 20%
+}
+
+.widget_flownews_instagram_inline .instagram_inline_image_loaded_6 a img {
+    width: 16.66666666666667%
+}
+
+.widget_flownews_instagram_inline .instagram_inline_image_loaded_7 a img {
+    width: 14.28571428571429%
+}
+
+.widget_flownews_instagram_inline .instagram_inline_image_loaded_8 a img {
+    width: 12.5%
+}
+
+.widget ul {
+    margin: 0;
+    padding: 0
+}
+
+.widget li {
+    list-style: none;
+    padding: 10px 25px;
+    display: block;
+    margin-bottom: 1px
+}
+
+.flownews-sidebar .widget.widget_archive li,.flownews-sidebar .widget.widget_categories li,.flownews-sidebar .widget.widget_meta li,.flownews-sidebar .widget.widget_nav_menu li,.flownews-sidebar .widget.widget_pages li,.flownews-sidebar .widget.widget_recent_comments li,.flownews-sidebar .widget.widget_recent_entries li,.flownews-sidebar .widget.widget_rss li,.wpb_wrapper .widget.widget_meta li,.wpb_wrapper .widget.widget_nav_menu li,.wpb_wrapper .widget.widget_pages li,.wpb_wrapper .widget.widget_recent_comments li,.wpb_wrapper .widget.widget_recent_entries li,.wpb_wrapper .widget.widget_rss li {
+    border-bottom: 1px solid #f4f4f4;
+    box-sizing: border-box;
+    color: #333;
+    display: inline-block;
+    font-size: 14px;
+    letter-spacing: 1px;
+    padding: 15px 0;
+    transition: background .3s ease 0s;
+    width: 100%
+}
+
+.flownews-sidebar .widget.widget_archive li:first-child,.flownews-sidebar .widget.widget_categories li:first-child,.flownews-sidebar .widget.widget_meta li:first-child,.flownews-sidebar .widget.widget_nav_menu li:first-child,.flownews-sidebar .widget.widget_pages li:first-child,.flownews-sidebar .widget.widget_recent_comments li:first-child,.flownews-sidebar .widget.widget_recent_entries li:first-child,.flownews-sidebar .widget.widget_rss li:first-child,.wpb_wrapper .widget.widget_meta li:first-child,.wpb_wrapper .widget.widget_nav_menu li:first-child,.wpb_wrapper .widget.widget_pages li:first-child,.wpb_wrapper .widget.widget_recent_comments li:first-child,.wpb_wrapper .widget.widget_recent_entries li:first-child,.wpb_wrapper .widget.widget_rss li:first-child {
+    padding-top: 0
+}
+
+.flownews-sidebar .widget.widget_archive li:last-child,.flownews-sidebar .widget.widget_categories li:last-child,.flownews-sidebar .widget.widget_meta li:last-child,.flownews-sidebar .widget.widget_nav_menu li:last-child,.flownews-sidebar .widget.widget_pages li:last-child,.flownews-sidebar .widget.widget_recent_comments li:last-child,.flownews-sidebar .widget.widget_recent_entries li:last-child,.flownews-sidebar .widget.widget_rss li:last-child,.wpb_wrapper .widget.widget_meta li:last-child,.wpb_wrapper .widget.widget_nav_menu li:last-child,.wpb_wrapper .widget.widget_pages li:last-child,.wpb_wrapper .widget.widget_recent_comments li:last-child,.wpb_wrapper .widget.widget_recent_entries li:last-child,.wpb_wrapper .widget.widget_rss li:last-child {
+    border-bottom: 0;
+    padding-bottom: 0
+}
+
+.flownews-sidebar .widget.widget_archive li a:hover,.flownews-sidebar .widget.widget_categories li a:hover,.flownews-sidebar .widget.widget_meta li a:hover,.flownews-sidebar .widget.widget_nav_menu li a:hover,.flownews-sidebar .widget.widget_pages li a:hover,.flownews-sidebar .widget.widget_recent_comments li a:hover,.flownews-sidebar .widget.widget_recent_entries li a:hover,.flownews-sidebar .widget.widget_rss li a:hover,.wpb_wrapper .widget.widget_meta li a:hover,.wpb_wrapper .widget.widget_nav_menu li a:hover,.wpb_wrapper .widget.widget_pages li a:hover,.wpb_wrapper .widget.widget_recent_comments li a:hover,.wpb_wrapper .widget.widget_recent_entries li a:hover,.wpb_wrapper .widget.widget_rss li a:hover {
+    color: #e7685d;
+    transition: background .3s ease 0s
+}
+
+.flownews-sidebar .widget.widget_archive li a,.flownews-sidebar .widget.widget_categories li a,.flownews-sidebar .widget.widget_meta li a,.flownews-sidebar .widget.widget_nav_menu li a,.flownews-sidebar .widget.widget_pages li a,.flownews-sidebar .widget.widget_recent_comments li a,.flownews-sidebar .widget.widget_recent_entries li a,.flownews-sidebar .widget.widget_rss li a,.wpb_wrapper .widget.widget_meta li a,.wpb_wrapper .widget.widget_nav_menu li a,.wpb_wrapper .widget.widget_pages li a,.wpb_wrapper .widget.widget_recent_comments li a,.wpb_wrapper .widget.widget_recent_entries li a,.wpb_wrapper .widget.widget_rss li a {
+    transition: background .3s ease 0s
+}
+
+.flownews-sidebar .widget.widget_rss li a,.wpb_wrapper .widget.widget_rss li a {
+    color: #000
+}
+
+.flownews-sidebar .widget.widget_nav_menu li .sub-menu,.flownews-sidebar .widget.widget_pages li .children,.wpb_wrapper .widget.widget_nav_menu li .sub-menu,.wpb_wrapper .widget.widget_pages li .children {
+    margin-top: 20px;
+    margin-left: 15px
+}
+
+.flownews-sidebar .widget.widget_pages li .children ul.children,.wpb_wrapper .widget.widget_pages li .children ul.children {
+    margin-left: 30px
+}
+
+.flownews-sidebar .widget.widget_recent_entries li .post-date,.wpb_wrapper .widget.widget_recent_entries li .post-date {
+    font-size: 11px;
+    margin-left: 5px;
+    color: #b7b7b7
+}
+
+.widget li a,.widget_rss .rsswidget:hover {
+    color: #000
+}
+
+.widget li a:hover,.widget_rss .rsswidget {
+    color: #9c8156
+}
+
+.widget_rss .widget-title .rsswidget {
+    color: #fff
+}
+
+.widget.widget_recent_comments .comment-author-link {
+    color: #b7b7b7;
+    font-size: 11px
+}
+
+.widget label {
+    background: #FFF;
+    display: block
+}
+
+.flownews-sidebar .widget.widget_search label,.wpb_wrapper .widget.widget_search label {
+    width: 70%
+}
+
+.widget select {
+    background: #fff;
+    border: 1px solid #f4f4f4;
+    letter-spacing: 1px;
+    padding: 10px;
+    width: 100%
+}
+
+.post-password-form input,.widget_search input {
+    padding: 5px 7px;
+    text-align: left;
+    font-weight: 300
+}
+
+.widget_search input {
+    border-width: 1px;
+    border-style: solid;
+    border-color: #f4f4f4;
+    background: #f4f4f4;
+    width: 100%;
+    margin-bottom: 0;
+    height: 35px
+}
+
+.post-password-form input {
+    border: 1px solid #f4f4f4;
+    width: auto
+}
+
+#wp-calendar,#wp-calendar caption,#wp-calendar th {
+    text-align: center
+}
+
+.flownews-sidebar .search-form .search-submit,.wpb_wrapper .search-form .search-submit {
+    background: #e7685d;
+    color: #fff;
+    text-align: center;
+    width: 30%;
+    font-weight: 700;
+    transition: all .3s ease 0s;
+    font-size: 12px
+}
+
+.flownews-sidebar .search-form .search-submit:hover,.wpb_wrapper .search-form .search-submit:hover {
+    background: #c9564c;
+    transition: all .3s ease 0s
+}
+
+.not-found input[type=submit]:hover,.post-password-form input[type=submit]:hover,.widget_search input.search-submit:hover {
+    background: #9c8156;
+    color: #FFF
+}
+
+.flownews-sidebar .search-form .screen-reader-text,.wpb_wrapper .search-form .screen-reader-text {
+    display: none
+}
+
+.widget_search .search-form {
+    font-size: 0
+}
+
+.widget_search .search-form input {
+    font-size: 14px
+}
+
+.widget_search label {
+    display: inline-block;
+    float: left
+}
+
+#wp-calendar caption {
+    font-size: 14px;
+    font-weight: 400;
+    letter-spacing: 1.5px;
+    margin: 0 0 25px;
+    padding: 10px 0 0;
+    text-transform: uppercase
+}
+
+#wp-calendar td {
+    padding: 10px 0
+}
+
+#wp-calendar {
+    width: 100%
+}
+
+#wp-calendar .calendar_wrap tr {
+    margin-bottom: 5px;
+    padding-bottom: 5px
+}
+
+.flownews-sidebar .widget.widget_nav_menu li:first-child,.flownews-sidebar .widget.widget_nav_menu li:last-child {
+    padding: 0
+}
+
+#wp-calendar #prev a,#wp-calendar tr #today {
+    color: #e7685d
+}
+
+#wp-calendar #prev a:hover {
+    color: #000
+}
+
+.widget ul .sub-menu,label.screen-reader-text {
+    display: none
+}
+
+.widget ul>li.menu-item-has-children>a:after {
+    font-style: normal;
+    font-weight: 400;
+    text-transform: none;
+    line-height: 1;
+    font-size: 11px;
+    color: #333;
+    content: "\f107";
+    margin-left: 5px
+}
+
+.widget ul>li:hover>.sub-menu {
+    display: block
+}
+
+.textwidget select {
+    margin: 20px 0
+}
+
+.flownews-sidebar .widget,.wpb_wrapper .widget {
+    margin-bottom: 50px
+}
+
+.widget_nav_menu li>ul {
+    display: block;
+    border: 0;
+    margin-top: 0;
+    margin-bottom: 0;
+    margin-left: 10px
+}
+
+.widget_nav_menu ul.submenu li:first-child .submenu {
+    border: 0;
+    margin-left: 5px
+}
+
+.widget_nav_menu li ul li {
+    border-bottom: 1px
+}
+
+.widget_nav_menu li>ul li>ul,.widget_nav_menu li>ul>ul li,.widget_nav_menu li>ul>ul>ul li {
+    display: block;
+    border: 0;
+    margin-left: 5px
+}
+
+.widget_nav_menu ul.submenu .submenu {
+    margin-left: 5px;
+    margin-top: 10px
+}
+
+.flownews-sidebar .widget.widget_nav_menu li a {
+    padding: 10px 0;
+    display: block;
+    border-top: 0;
+    margin: 5px 0
+}
+
+.flownews-sidebar .widget.widget_nav_menu .menu li {
+    border-bottom: 0;
+    border-top: 1px solid
+}
+
+.flownews-sidebar .widget.widget_nav_menu .menu>li {
+    border: 0;
+    border-bottom: 1px solid;
+    border-top: 0
+}
+
+.flownews-sidebar .widget.widget_nav_menu li,.widget_nav_menu li {
+    padding: 0
+}
+
+.flownews_widget {
+    line-height: 1
+}
+
+.flownews_widget a {
+    text-decoration: none;
+    border-bottom: 0;
+    box-shadow: 0 0 0
+}
+
+.fnwp-widget h4 {
+    margin-top: 0
+}
+
+.fnwp-widget h3.widget-title,.fnwp-widget h4.widget-title,.widget h3 {
+    border-bottom: 1px solid #f4f4f4;
+    border-right: 1px solid #e7685d;
+    border-top: 1px solid #f4f4f4;
+    height: 35px;
+    margin: 0 0 25px;
+    position: relative;
+    text-align: left
+}
+
+.fnwp-title-widget {
+    background: #e7685d;
+    color: #fff;
+    display: inline-block;
+    font-size: 14px;
+    font-weight: 600;
+    height: calc(100% + 2px);
+    height: -webkit-calc(100% + 2px);
+    left: 0;
+    letter-spacing: 1.5px;
+    padding: 10px;
+    position: absolute;
+    text-transform: uppercase;
+    top: -1px;
+    transition: color .3s ease 0s
+}
+
+.fnwp-widget li {
+    background: inherit;
+    font-size: inherit;
+    font-weight: inherit;
+    margin-bottom: inherit;
+    padding: 0;
+    text-transform: inherit
+}
+
+@media only screen and (max-width : 500px) {
+    .flownews-sidebar .widget img {
+        width:100%
+    }
+}
+
+.flownews_widget.fnwp_advertisement h2 {
+    font-size: 26px
+}
+
+.flownews_widget.fnwp_advertisement .container_advertisement {
+    text-align: center
+}
+
+@media only screen and (min-width : 801px) and (max-width :1200px) {
+    .flownews_widget.fnwp_advertisement .active {
+        width:100%;
+        border: 1px solid #2b2b2b
+    }
+
+    .flownews_widget.fnwp_advertisement .title-info-post.ad_one_half {
+        padding: 25px
+    }
+
+    .flownews_widget.fnwp_advertisement .mini-post.small-post.ad_one_third {
+        border: 1px solid #2b2b2b;
+        margin: 25px 0 0;
+        padding: 15px 0 15px 15px;
+        width: 100%
+    }
+
+    .flownews_widget.fnwp_advertisement .mini-post.small-post.ad_one_third.fourth {
+        border-bottom: 1px solid #2b2b2b!important
+    }
+}
+
+@media only screen and (max-width : 800px) {
+    .flownews_widget.flownews_widget .fnwp_advertisement .flownews_widget-item.ad_one_third.ad_margin,.flownews_widget.fnwp_advertisement .flownews_widget-item.ad_one_one.ad_last.big-post {
+        float:none
+    }
+
+    .flownews_widget.fnwp_advertisement .title-info-post.ad_one_half {
+        box-sizing: border-box;
+        display: inline-block;
+        padding: 25px 0 50px
+    }
+
+    .flownews_widget.fnwp_advertisement .mini-post.small-post.ad_one_third .img-post {
+        display: inline-block;
+        width: 16%!important
+    }
+
+    .flownews_widget.fnwp_advertisement .mini-post.small-post .ad_three_fourth {
+        display: inline-block;
+        position: absolute;
+        width: 84%!important
+    }
+
+    .flownews_widget.fnwp_advertisement .mini-post.small-post.ad_one_third {
+        border: 1px solid #2b2b2b;
+        border-bottom: 0
+    }
+
+    .flownews_widget.fnwp_advertisement .mini-post.small-post.ad_one_third.fourth {
+        border-bottom: 1px solid #2b2b2b!important
+    }
+}
+
+.flownews_widget.fnwp_archivies .box_archivies .box_archivies_item {
+    width: 100%;
+    transition: all .3s ease 0s;
+    padding: 15px 0;
+    box-sizing: border-box;
+    border-bottom: 1px solid #f9f9f9;
+    text-align: right;
+    display: inline-block;
+    color: #333;
+    font-size: 12px;
+    font-weight: 800
+}
+
+.flownews_widget.fnwp_archivies .box_archivies li:first-child .box_archivies_item {
+    padding-top: 0
+}
+
+.flownews_widget.fnwp_archivies .box_archivies a:last-child {
+    border-bottom: none
+}
+
+.flownews_widget.fnwp_archivies a {
+    color: #333;
+    display: inline-block;
+    font-size: 12px;
+    font-weight: 800;
+    letter-spacing: 2px;
+    text-transform: uppercase;
+    transition: color .3s ease 0s;
+    float: left
+}
+
+.flownews_widget.fnwp_archivies .box_archivies_item:hover a {
+    color: #e7685d
+}
+
+.flownews_widget.fnwp_archivies .number-post {
+    color: #333;
+    font-size: 12px;
+    font-weight: 800;
+    letter-spacing: 2px;
+    text-transform: uppercase;
+    float: right;
+    transition: color .3s ease 0s
+}
+
+.flownews_widget.fnwp_archivies .box_archivies .box_archivies_item:hover {
+    color: #e7685d;
+    transition: color .3s ease 0s
+}
+
+.box_archivies li {
+    list-style: none
+}
+
+.flownews_widget.fnwp_categories .box_categories .cat-item {
+    width: 100%;
+    transition: all .3s ease 0s;
+    padding: 15px 0;
+    box-sizing: border-box;
+    border-bottom: 1px solid #f9f9f9;
+    text-align: right;
+    display: inline-block;
+    color: #333;
+    font-size: 12px;
+    font-weight: 800
+}
+
+.flownews_widget.fnwp_categories .box_categories .cat-item .children {
+    margin-left: 15px;
+    border-bottom: 0;
+    margin-top: 20px
+}
+
+.flownews_widget.fnwp_categories .box_categories .cat-item .children ul.children li {
+    margin-left: 15px;
+    border-bottom: 0;
+    padding-bottom: 0
+}
+
+.flownews_widget.fnwp_categories .box_categories .cat-item .children li:last-child {
+    border-bottom: 0;
+    padding-bottom: 0
+}
+
+.flownews_widget.fnwp_categories .box_categories li:first-child {
+    padding-top: 0
+}
+
+.flownews_widget.fnwp_archivies .box_categories a:last-child {
+    border-bottom: none
+}
+
+.flownews_widget.fnwp_categories a {
+    color: #333;
+    display: inline-block;
+    font-size: 12px;
+    font-weight: 800;
+    letter-spacing: 2px;
+    text-transform: uppercase;
+    transition: color .3s ease 0s;
+    float: left
+}
+
+.flownews_widget.fnwp_categories .box_categories>li.cat-item:hover,.flownews_widget.fnwp_categories .box_categories>li.cat-item:hover>a {
+    color: #e7685d;
+    transition: color .3s ease 0s
+}
+
+.flownews_widget.fnwp_categories .number-post {
+    color: #333;
+    font-size: 12px;
+    font-weight: 800;
+    letter-spacing: 2px;
+    text-transform: uppercase;
+    float: right;
+    transition: color .3s ease 0s
+}
+
+.box_categories li {
+    list-style: none
+}
+
+.box_categories li .children .cat-item a:hover,.box_categories li .children .cat-item:hover {
+    color: #e7685d;
+    transition: color .3s ease 0s
+}
+
+.fnwp_flickr a img {
+    margin: 6px
+}
+
+.flownews_widget.fnwp_flickr .box_flickr {
+    background: #fff;
+    display: inline-block;
+    box-sizing: border-box;
+    text-align: center
+}
+
+.flownews_widget.fnwp_mega_posts .box_post {
+    border-bottom: 1px solid #f4f4f4;
+    padding: 10px 0
+}
+
+.flownews_widget.fnwp_mega_posts .box_post:first-child {
+    padding-top: 0
+}
+
+.flownews_widget.fnwp_mega_posts .box_post:last-child {
+    padding-bottom: 0;
+    border-bottom: 0
+}
+
+.flownews_widget.fnwp_mega_posts .container_post.ad_one_one {
+    display: inline-block
+}
+
+.flownews_widget.fnwp_mega_posts .img-post.ad_one_third {
+    background-position: center center;
+    background-size: cover;
+    float: left;
+    width: 40%
+}
+
+.flownews_widget.fnwp_mega_posts .container_post.ad_one_one .box-info.ad_two_third {
+    box-sizing: border-box;
+    padding-left: 20px;
+    width: 60%
+}
+
+.flownews_widget.fnwp_mega_posts .container_post.ad_one_one .box-info h4 {
+    margin: 5px 0 0;
+    padding: 0;
+    overflow: hidden;
+    text-overflow: ellipsis;
+    white-space: nowrap;
+    width: 100%
+}
+
+.flownews_widget.fnwp_mega_posts .container_post.ad_one_one .box-info h4 a {
+    color: #333;
+    font-size: 14px;
+    letter-spacing: 1px;
+    text-transform: uppercase;
+    transition: color .3s ease 0s
+}
+
+.flownews_widget.fnwp_mega_posts .container_post.ad_one_one .box-info a:hover {
+    color: #b72a23;
+    transition: color .3s ease 0s
+}
+
+.flownews_widget.fnwp_mega_posts .container_post.ad_one_one .data {
+    color: #b7b7b7;
+    display: inline-block;
+    font-size: 11px;
+    font-weight: 300;
+    letter-spacing: .5px;
+    margin-top: 15px
+}
+
+.flownews_widget.fnwp_mega_posts .container_post.ad_one_one .data i {
+    color: #e7685d
+}
+
+.flownews_widget.fnwp_mega_posts .container_post.ad_one_one i {
+    margin-right: 6px
+}
+
+.flownews_widget.fnwp_mega_posts .container_post.ad_one_one .icon-calendar {
+    color: #e7685d;
+    float: left;
+    font-size: 14px;
+    margin: 0 10px 0 0;
+    padding: 0;
+    width: auto
+}
+
+.flownews_widget.fnwp_slider_posts .ad_one_one.ad_last {
+    position: relative
+}
+
+.flownews_widget.fnwp_slider_posts .category a {
+    background: #e7685d;
+    color: #fff;
+    display: inline-block;
+    float: left;
+    font-size: 10px;
+    font-weight: 700;
+    letter-spacing: 1px;
+    line-height: 1;
+    margin-right: 10px;
+    margin-top: 4px;
+    padding: 6px 10px;
+    text-transform: uppercase;
+    transition: background-color .3s ease 0s
+}
+
+.flownews_widget.fnwp_slider_posts .flownews_widget-item .category {
+    top: 0;
+    position: absolute
+}
+
+.flownews_widget.fnwp_slider_posts .category a:hover {
+    background: #c9564c;
+    color: #fff;
+    transition: color .3s ease 0s;
+    transition: background .3s ease 0s
+}
+
+.flownews_widget.fnwp_slider_posts .box-text {
+    position: absolute;
+    bottom: 0;
+    left: 0;
+    width: 100%;
+    z-index: 2
+}
+
+.flownews_widget.fnwp_slider_posts .box-padding {
+    padding: 20px
+}
+
+.flownews_widget.fnwp_slider_posts .box-text h3 {
+    border: 0;
+    height: auto;
+    margin: 0 0 10px
+}
+
+.flownews_widget.fnwp_slider_posts .box-text h3 a {
+    color: #fff;
+    display: block;
+    font-size: 18px;
+    font-weight: 700;
+    line-height: 20px;
+    text-transform: uppercase
+}
+
+.flownews_widget.fnwp_slider_posts .box-text .data i {
+    margin-right: 10px
+}
+
+.flownews_widget.fnwp_slider_posts .box-text h3 a:hover {
+    color: #e7685d;
+    transition: color .3s ease 0s
+}
+
+.flownews_widget.fnwp_slider_posts .flownews_widget-item.ad_one_one.ad_last.big-post .title-info-post .category a,.flownews_widget.fnwp_slider_posts .flownews_widget-item.ad_one_one.ad_last.big-post .title-info-post .category a:hover {
+    transition: background .3s ease 0s
+}
+
+.flownews_widget.fnwp_slider_posts .data {
+    color: #fff;
+    display: inline-block;
+    font-size: 12px;
+    font-weight: 400;
+    margin-top: 9px;
+    transition: color .3s ease 0s
+}
+
+.flownews_widget.fnwp_slider_posts .data:hover {
+    color: #e7685d;
+    transition: color .3s ease 0s
+}
+
+.flownews_widget.fnwp_slider_posts .icon-calendar {
+    color: #e7685d;
+    font-size: 14px;
+    margin: 0 10px 0 0;
+    padding: 0;
+    width: auto;
+    float: left
+}
+
+.flownews_widget.fnwp_slider_posts .flownews_widget-item.ad_one_one.ad_last.big-post i {
+    color: #fff;
+    float: left;
+    font-size: 18px;
+    margin: 0 10px 0 0;
+    transition: color .3s ease 0s
+}
+
+.fnwp_slider_posts .owl-controls {
+    opacity: 0;
+    transition: opacity .3s ease 0s;
+    margin-top: 0!important;
+    height: 0
+}
+
+.fnwp_slider_posts:hover .owl-controls {
+    opacity: 1;
+    transition: opacity .3s ease 0s
+}
+
+.fnwp_slider_posts .owl-prev {
+    position: absolute;
+    right: 44px;
+    top: 15px
+}
+
+.fnwp_slider_posts .owl-next {
+    position: absolute;
+    right: 15px;
+    top: 15px
+}
+
+.fnwp_slider_posts .owl-theme .owl-controls .owl-nav [class*=owl-] {
+    font-size: 14px;
+    padding: 6px 11px
+}
+
+.fnwp_slider_posts .owl-theme .owl-item .slider-pattern {
+    background: linear-gradient(to bottom,rgba(0,0,0,0) 0,rgba(0,0,0,.4) 100%) rgba(0,0,0,0);
+    height: 100%;
+    left: 0;
+    position: absolute;
+    top: 0;
+    width: 100%;
+    z-index: 1
+}
+
+[class*=flownews-placeholder-] {
+    margin-top: 50px
+}
+
+.flownews_widget.fnwp_social .box_social {
+    display: inline-block;
+    padding: 0;
+    box-sizing: border-box;
+    width: calc(100% + 6px)
+}
+
+.flownews_widget.fnwp_social .flownews-widget-social-style1 .box-icon-social.ad_one_third {
+    height: 80px;
+    margin: 0 6px 6px 0;
+    width: calc(33.33% - 6px);
+    background-position: center center;
+    background-size: cover
+}
+
+.flownews_widget.fnwp_social .box-icon-social.ad_one_third:nth-child(7),.flownews_widget.fnwp_social .box-icon-social.ad_one_third:nth-child(8),.flownews_widget.fnwp_social .box-icon-social.ad_one_third:nth-child(9) {
+    margin-bottom: 0
+}
+
+.flownews-sidebar .widget_fnwp_social .flownews-widget-social-style1 .box_social.ad_one_one,.wpb_wrapper .widget_fnwp_social .flownews-widget-social-style1 .box_social.ad_one_one {
+    width: calc(100% + 6px)
+}
+
+.flownews_widget.fnwp_social .box-icon-social.ad_one_third.facebook {
+    background: #3b5998
+}
+
+.flownews_widget.fnwp_social .box-icon-social.ad_one_third.twitter {
+    background: #3b89c3
+}
+
+.flownews_widget.fnwp_social .box-icon-social.ad_one_third.google-plus {
+    background: #d73d32
+}
+
+.flownews_widget.fnwp_social .box-icon-social.ad_one_third.pinterest {
+    background: #cb2027
+}
+
+.flownews_widget.fnwp_social .box-icon-social.ad_one_third.flickr {
+    background: #ff0084
+}
+
+.flownews_widget.fnwp_social .box-icon-social.ad_one_third.instagram {
+    background: #32506d
+}
+
+.flownews_widget.fnwp_social .box-icon-social.ad_one_third.linkedin {
+    background: #0077b5
+}
+
+.flownews_widget.fnwp_social .box-icon-social.ad_one_third.youtube {
+    background: #cc181e
+}
+
+.flownews_widget.fnwp_social .box-icon-social.ad_one_third.vimeo {
+    background: #00adee
+}
+
+.fnwp_social .box-icon-social {
+    position: relative;
+    overflow: hidden
+}
+
+.flownews_widget.fnwp_social .flownews-widget-social-style1 .box-icon-social a {
+    color: #fff;
+    font-size: 18px;
+    left: 50%;
+    margin-left: -9px;
+    margin-top: -9px;
+    position: absolute;
+    top: 50%;
+    z-index: 3;
+    transition: top .3s ease 0s
+}
+
+.flownews_widget.fnwp_social .flownews-widget-social-style1 .box-icon-social p {
+    bottom: -20px;
+    color: #fff;
+    display: inline-block;
+    font-size: 10px;
+    font-weight: 600;
+    line-height: 1;
+    margin: 0;
+    position: absolute;
+    text-align: center;
+    width: 100%;
+    transition: bottom .3s ease 0s
+}
+
+.flownews_widget.fnwp_social .flownews-widget-social-style1 .box-icon-social:hover a {
+    top: 40%;
+    transition: top .3s ease 0s
+}
+
+.flownews_widget.fnwp_social .flownews-widget-social-style1 .box-icon-social:hover p {
+    bottom: 25%;
+    transition: bottom .3s ease 0s
+}
+
+.flownews_widget.fnwp_social .box_social.flownews-widget-social-style2 {
+    box-sizing: border-box;
+    display: inline-block;
+    margin-left: -8px;
+    padding: 0;
+    width: calc(100% + 16px)
+}
+
+.flownews-widget-social-style2 .box-icon-social {
+    margin: 0 8px 8px;
+    overflow: hidden;
+    position: relative;
+    width: calc(16.6667% - 16px)
+}
+
+.flownews-widget-social-style2 .box-icon-social:nth-child(6) {
+    margin-right: 0
+}
+
+.flownews-widget-social-style2 a {
+    background: #e7685d;
+    color: #fff;
+    padding: 9px 0;
+    text-align: center;
+    font-size: 14px;
+    transition: background .3s ease 0s;
+    width: 100%
+}
+
+.flownews-widget-social-style2 a:hover {
+    color: #FFF;
+    background: #c9564c;
+    transition: background .3s ease 0s
+}
+
+@media only screen and (min-width : 700px) and (max-width :1200px) {
+    .flownews-widget-social-style2 a {
+        height:50px;
+        line-height: 31px
+    }
+
+    .flownews-widget-social-style2 .box-icon-social {
+        width: calc(33.3333% - 16px);
+        margin: 0 8px 15px
+    }
+}
+
+@media only screen and (min-width : 360px) and (max-width :500px) {
+    .flownews-widget-social-style2 a {
+        height:50px;
+        line-height: 33px
+    }
+}
+
+@media only screen and (min-width : 501px) and (max-width :700px) {
+    .flownews-widget-social-style2 a {
+        height:60px;
+        line-height: 45px;
+        font-size: 14px!important
+    }
+}
+
+.flownews_widget.fnwp_tab .fnwp-title-widget {
+    cursor: pointer
+}
+
+.flownews_widget.fnwp_tab .widget-title .fnwp-title-widget span:hover {
+    background: #c9564c;
+    transition: all .3s ease 0s
+}
+
+.flownews_widget.fnwp_tab .fnwp_tab_active {
+    background: #c9564c!important
+}
+
+.flownews_widget.fnwp-tab-container,.fnwp-tab-container {
+    display: none
+}
+
+.fnwp_tab .widget-title .fnwp-title-widget span {
+    background: #e7685d;
+    margin-right: 2px;
+    padding: 8px;
+    position: relative;
+    transition: all .3s ease 0s
+}
+
+.fnwp_tab .fnwp-title-widget {
+    background: 0 0;
+    padding: 10px 0
+}
+
+.flownews_widget.fnwp_tab .box_post {
+    border-bottom: 1px solid #f4f4f4;
+    padding: 10px 0
+}
+
+.flownews_widget.fnwp_tab .box_post:first-child {
+    padding-top: 0
+}
+
+.flownews_widget.fnwp_tab .box_post:last-child {
+    border-bottom: 0 none;
+    padding-bottom: 0
+}
+
+.flownews_widget.fnwp_tab .container_post.ad_one_one {
+    display: inline-block
+}
+
+.flownews_widget.fnwp_tab .img-post.ad_one_third {
+    height: 100%;
+    background-position: center center;
+    background-size: cover;
+    float: left;
+    width: 40%
+}
+
+.flownews_widget.fnwp_tab .container_post.ad_one_one .box-info.ad_two_third {
+    box-sizing: border-box;
+    padding-left: 20px;
+    width: 60%;
+    float: left
+}
+
+.flownews_widget.fnwp_tab .container_post.ad_one_one .box-info h4 {
+    margin: 5px 0 0;
+    padding: 0;
+    overflow: hidden;
+    text-overflow: ellipsis;
+    white-space: nowrap;
+    width: 100%
+}
+
+.flownews_widget.fnwp_tab .container_post.ad_one_one .box-info h4 a {
+    color: #333;
+    font-size: 14px;
+    letter-spacing: 1px;
+    text-transform: uppercase;
+    transition: color .3s ease 0s
+}
+
+.flownews_widget.fnwp_tab .container_post.ad_one_one .box-info a:hover {
+    color: #b72a23;
+    transition: color .3s ease 0s
+}
+
+.flownews_widget.fnwp_tab .container_post.ad_one_one .data {
+    color: #b7b7b7;
+    display: inline-block;
+    font-size: 12px;
+    font-weight: 300;
+    letter-spacing: .5px;
+    margin-top: 15px
+}
+
+.flownews_widget.fnwp_tab .container_post.ad_one_one .icon-calendar {
+    color: #e7685d;
+    float: left;
+    font-size: 14px;
+    margin: 0 10px 0 0;
+    padding: 0;
+    width: auto
+}
+
+.flownews_widget.fnwp_tab .content_tag {
+    border: 1px solid #f4f4f4;
+    color: #333;
+    display: inline-block;
+    font-size: 14px;
+    font-weight: 500;
+    margin: 0 10px 10px 0;
+    padding: 10px 25px;
+    transition: background .3s ease 0s
+}
+
+.flownews_widget.fnwp_tab .content_tag a {
+    color: #333;
+    font-size: 12px;
+    font-weight: 700;
+    letter-spacing: 1px;
+    text-transform: uppercase;
+    transition: all .3s ease 0s
+}
+
+.flownews_widget.fnwp_tab .content_tag:hover {
+    background: #e7685d;
+    border: 1px solid #e7685d;
+    color: #fff;
+    transition: all .3s ease 0s;
+    cursor: pointer
+}
+
+.flownews_widget.fnwp_tab .content_tag:hover a {
+    color: #fff;
+    transition: all .3s ease 0s
+}
+
+.fnwp_tag .fnwp-title-widget {
+    cursor: pointer
+}
+
+h4.widget-title .fnwp_tag_active,h4.widget-title span:hover {
+    color: #b72a23
+}
+
+.fnwp-tag-container {
+    display: none
+}
+
+.fnwp-active {
+    display: block
+}
+
+.fnwp_title_popular,.fnwp_title_recent,.fnwp_title_tag {
+    margin-right: 2px;
+    position: relative
+}
+
+.fnwp_tag .widget-title .fnwp-title-widget span {
+    background: #e7685d;
+    margin-right: 2px;
+    padding: 8px;
+    position: relative
+}
+
+.flownews_widget.fnwp_tag .box_post {
+    border-bottom: 1px solid #f4f4f4;
+    padding: 10px 0
+}
+
+.flownews_widget.fnwp_tag .box_post:first-child {
+    padding-top: 0
+}
+
+.flownews_widget.fnwp_tag .box_post:last-child {
+    border-bottom: 0 none;
+    padding-bottom: 0
+}
+
+.flownews_widget.fnwp_tag .container_post.ad_one_one {
+    display: inline-block
+}
+
+.flownews_widget.fnwp_tag .img-post.ad_one_third {
+    height: 100%;
+    background-position: center center;
+    background-size: cover;
+    float: left;
+    width: 40%
+}
+
+.flownews_widget.fnwp_tag .container_post.ad_one_one .box-info.ad_two_third {
+    box-sizing: border-box;
+    padding-left: 20px;
+    width: 60%;
+    float: left
+}
+
+.flownews_widget.fnwp_tag .container_post.ad_one_one .box-info h4 {
+    margin: 5px 0 0;
+    padding: 0;
+    overflow: hidden;
+    text-overflow: ellipsis;
+    white-space: nowrap;
+    width: 100%
+}
+
+.flownews_widget.fnwp_tag .container_post.ad_one_one .box-info h4 a {
+    color: #333;
+    font-size: 18px;
+    letter-spacing: 1px;
+    transition: color .3s ease 0s
+}
+
+.flownews_widget.fnwp_tag .container_post.ad_one_one .box-info a:hover {
+    color: #b72a23;
+    transition: color .3s ease 0s
+}
+
+.flownews_widget.fnwp_tag .container_post.ad_one_one .data {
+    color: #b7b7b7;
+    display: inline-block;
+    font-size: 12px;
+    font-weight: 300;
+    letter-spacing: .5px;
+    margin-top: 15px
+}
+
+.flownews_widget.fnwp_tag .container_post.ad_one_one .icon-calendar {
+    color: #e7685d;
+    float: left;
+    font-size: 14px;
+    margin: 0 10px 0 0;
+    padding: 0;
+    width: auto
+}
+
+.flownews_widget.fnwp_tag .content_tag {
+    border: 1px solid #f4f4f4;
+    color: #333;
+    display: inline-block;
+    font-size: 14px;
+    font-weight: 500;
+    margin: 0 10px 10px 0;
+    padding: 10px 25px;
+    transition: all .3s ease 0s
+}
+
+.flownews_widget.fnwp_tag .content_tag a {
+    color: #333;
+    font-size: 12px;
+    font-weight: 700;
+    letter-spacing: 1px;
+    text-transform: uppercase;
+    transition: all .3s ease 0s
+}
+
+.flownews_widget.fnwp_tag .content_tag:hover {
+    background: #e7685d;
+    color: #fff;
+    transition: all .3s ease 0s;
+    cursor: pointer
+}
+
+.flownews_widget.fnwp_tag .content_tag:hover a {
+    color: #fff;
+    transition: all .3s ease 0s
+}
+
+.flownews-sidebar .widget_flownews_instagram .instagram-image img,.wpb_wrapper .widget_flownews_instagram .instagram-image img {
+    height: 80px;
+    overflow: hidden;
+    width: 100%
+}
+
+.flownews-sidebar .widget_flownews_instagram .instagram-image a {
+    width: 33.3333%;
+    height: auto;
+    opacity: 1;
+    transition: all .3s ease 0s;
+    background: #000;
+    display: inline-block
+}
+
+.flownews-sidebar .widget_flownews_instagram .instagram-image a:hover {
+    opacity: .7;
+    transition: all .3s ease 0s
+}
+
+@media (max-width: 768px) {
+    .flownews_widget.fnwp_social .box-icon-social.ad_one_third {
+        width:calc(50% - 6px)!important;
+        box-sizing: border-box;
+        margin: 3px;
+        display: inline-block
+    }
+
+    .flownews_widget.fnwp_social .box_social {
+        padding: 3px;
+        font-size: 0
+    }
+
+    .flownews_widget.fnwp_mega_posts .img-post.ad_one_third,.flownews_widget.fnwp_tab .img-post.ad_one_third {
+        height: 120px
+    }
+
+    .flownews_widget.fnwp_mega_posts .container_post.ad_one_one .box-info h4 a,.flownews_widget.fnwp_tab .container_post.ad_one_one .box-info h4 a {
+        line-height: 1.2
+    }
+}
+
+.flownews-element-posts {
+    margin-bottom: 50px
+}
+
+.flownews-element-posts article {
+    position: relative;
+    line-height: 1
+}
+
+.flownews-element-posts article h2 {
+    line-height: 1
+}
+
+.flownews-element-posts .article-image {
+    position: relative;
+    min-height: 50px
+}
+
+.flownews-element-posts .article-title a {
+    text-transform: uppercase;
+    font-size: 28px;
+    display: block
+}
+
+.flownews-element-posts .article-title a:hover {
+    color: #e7685d
+}
+
+.flownews-element-posts .article-category {
+    position: absolute;
+    left: 0;
+    bottom: 0;
+    font-size: 0
+}
+
+.flownews-element-posts .article-category a {
+    background: #e7685d;
+    color: #fff;
+    font-size: 10px;
+    font-weight: 700;
+    letter-spacing: 1px;
+    padding: 6px 10px;
+    text-transform: uppercase;
+    line-height: 1.2;
+    margin-top: 4px;
+    display: inline-block;
+    margin-right: 2px
+}
+
+.flownews-element-posts .article-category a:hover {
+    background: #c9564c
+}
+
+.flownews-element-posts .article-comments,.flownews-element-posts .article-data,.flownews-element-posts .article-separator {
+    float: left
+}
+
+.flownews-element-posts .article-data {
+    color: #646464;
+    font-size: 12px;
+    letter-spacing: .5px;
+    margin-right: 20px
+}
+
+.flownews-element-posts .article-comments {
+    margin-left: 20px;
+    color: #646464;
+    font-size: 12px;
+    letter-spacing: .5px
+}
+
+.flownews-element-posts .article-comments a {
+    color: #646464
+}
+
+.flownews-element-posts .article-comments a:hover {
+    color: #c9564c
+}
+
+.flownews-element-posts i {
+    margin-right: 8px
+}
+
+.flownews-element-posts .article-category i {
+    margin-right: 0
+}
+
+.flownews-element-posts .article-info-bottom .article-excerpt a {
+    color: #e7685d
+}
+
+.flownews-element-posts .article-info-bottom .article-excerpt a:hover {
+    color: #333
+}
+
+.flownews-element-posts .article-read-more i {
+    margin-left: 10px;
+    margin-right: 0
+}
+
+.flownews-element-posts .article-info-top {
+    margin-top: 15px
+}
+
+.flownews-element-posts h3 a {
+    margin: 20px 0 10px
+}
+
+.flownews-element-posts-title-box {
+    border-bottom: 1px solid #f4f4f4;
+    border-right: 1px solid #e7685d;
+    border-top: 1px solid #f4f4f4;
+    height: 35px;
+    margin: 0 0 25px;
+    position: relative;
+    text-align: left
+}
+
+.flownews-element-posts-title-box h2 {
+    background: #e7685d;
+    color: #fff;
+    display: inline-block;
+    font-size: 14px;
+    font-weight: 600;
+    height: calc(100% + 2px);
+    height: -webkit-calc(100% + 2px);
+    left: 0;
+    letter-spacing: 1.5px;
+    padding: 10px;
+    position: absolute;
+    text-transform: uppercase;
+    top: -1px;
+    transition: color .3s ease 0s;
+    margin: 0
+}
+
+.flownews-element-posts #flownews-load-posts a,.flownews-pagination a {
+    color: #333;
+    display: inline-block;
+    padding: 10px 20px;
+    text-transform: uppercase
+}
+
+.flownews-element-posts #flownews-load-posts a,.flownews-pagination a,.flownews-pagination a:hover {
+    border: 1px solid #f4f4f4;
+    transition: all .3s ease 0s
+}
+
+.flownews-element-posts #flownews-load-posts {
+    margin-top: 50px;
+    text-align: center
+}
+
+.flownews-element-posts #flownews-load-posts a {
+    letter-spacing: 1px
+}
+
+.flownews-element-posts #flownews-load-posts a:hover {
+    background: #f4f4f4;
+    border: 1px solid #f4f4f4;
+    transition: all .3s ease 0s
+}
+
+.flownews-pagination {
+    margin-top: 50px
+}
+
+.flownews-pagination a:last-child {
+    float: right
+}
+
+.flownews-pagination a:hover {
+    background: #f4f4f4
+}
+
+.fnwp-numeric-pagination {
+    text-align: center
+}
+
+.fnwp-numeric-pagination .inactive {
+    font-size: 12px;
+    line-height: 1;
+    margin: 0 2px;
+    padding: 10px 13px
+}
+
+.fnwp-numeric-pagination .current,.fnwp-numeric-pagination i {
+    font-size: 12px;
+    line-height: 1;
+    padding: 10px 14px;
+    color: #333;
+    display: inline-block;
+    border: 1px solid #f4f4f4;
+    transition: all .3s ease 0s;
+    text-transform: uppercase
+}
+
+.fnwp-numeric-pagination .current {
+    margin: 0 2px;
+    background: #f4f4f4
+}
+
+.fnwp-numeric-pagination i {
+    margin-right: 0
+}
+
+.fnwp-numeric-pagination .fnwp-icon-left {
+    margin-right: 34px
+}
+
+.fnwp-numeric-pagination .fnwp-icon-right {
+    margin-left: 34px
+}
+
+.fnwp-numeric-pagination i:hover {
+    background: #f4f4f4;
+    border: 1px solid #f4f4f4;
+    transition: all .3s ease 0s
+}
+
+a.fnwp-pagination-numeric-arrow {
+    border: none!important;
+    padding: 0;
+    margin: 0
+}
+
+a.fnwp-pagination-numeric-arrow:hover {
+    background: 0 0!important
+}
+
+.fnwp-numeric-pagination .flownewsicon.fa-angle-double-left {
+    margin-right: 4px
+}
+
+.fnwp-numeric-pagination .flownewsicon.fa-angle-double-right {
+    margin-left: 4px
+}
+
+.flownews-pagination .fnwp-numeric-pagination a:last-child {
+    float: none!important
+}
+
+@media screen and (max-width: 700px) {
+    .flownews-container .flownews-pagination {
+        margin:25px
+    }
+
+    .flownews-pagination a {
+        margin-bottom: 10px
+    }
+}
+
+@media screen and (max-width: 400px) {
+    .flownews-element-posts .flownews-pagination-normal {
+        width:100%!important
+    }
+}
+
+.flownews-element-posts.flownews-posts-layout1.flownews-blog-2-col,.flownews-element-posts.flownews-posts-layout1.flownews-blog-3-col,.flownews-element-posts.flownews-posts-layout1.flownews-blog-4-col {
+    margin-left: -12.5px;
+    width: calc(100% + 25px)
+}
+
+.flownews-element-posts.flownews-posts-layout1 .flownews-element-posts-title-box {
+    margin: 0 0 25px 12.5px;
+    width: calc(100% - 25px)
+}
+
+.flownews-element-posts.flownews-posts-layout1 .item-posts.first-element-posts.col-xs-6 {
+    width: calc(50% - 25px)
+}
+
+.flownews-element-posts.flownews-posts-layout1 .item-posts.first-element-posts.col-xs-4 {
+    width: calc(33.3333% - 25px)
+}
+
+.flownews-element-posts.flownews-posts-layout1 .item-posts.first-element-posts.col-xs-3 {
+    width: calc(25% - 25px)
+}
+
+.flownews-element-posts.flownews-posts-layout1 .item-posts.first-element-posts {
+    padding-top: 25px;
+    margin-top: 25px
+}
+
+.flownews-element-posts.flownews-posts-layout1.flownews-blog-2-col .item-posts.first-element-posts,.flownews-element-posts.flownews-posts-layout1.flownews-blog-3-col .item-posts.first-element-posts,.flownews-element-posts.flownews-posts-layout1.flownews-blog-4-col .item-posts.first-element-posts {
+    margin: 0 12.5px
+}
+
+.flownews-element-posts.flownews-posts-layout1.flownews-blog-1-col .item-posts.first-element-posts:first-child {
+    padding-top: 0;
+    margin-top: 0
+}
+
+.flownews-element-posts.flownews-posts-layout1.flownews-blog-2-col .item-posts.first-element-posts:nth-child(1),.flownews-element-posts.flownews-posts-layout1.flownews-blog-2-col .item-posts.first-element-posts:nth-child(2),.flownews-element-posts.flownews-posts-layout1.flownews-blog-3-col .item-posts.first-element-posts:nth-child(1),.flownews-element-posts.flownews-posts-layout1.flownews-blog-3-col .item-posts.first-element-posts:nth-child(2),.flownews-element-posts.flownews-posts-layout1.flownews-blog-3-col .item-posts.first-element-posts:nth-child(3),.flownews-element-posts.flownews-posts-layout1.flownews-blog-4-col .item-posts.first-element-posts:nth-child(1),.flownews-element-posts.flownews-posts-layout1.flownews-blog-4-col .item-posts.first-element-posts:nth-child(2),.flownews-element-posts.flownews-posts-layout1.flownews-blog-4-col .item-posts.first-element-posts:nth-child(3),.flownews-element-posts.flownews-posts-layout1.flownews-blog-4-col .item-posts.first-element-posts:nth-child(4) {
+    padding-top: 0
+}
+
+.flownews-element-posts.flownews-posts-layout1 h3 a {
+    line-height: 1.2
+}
+
+.flownews-element-posts.flownews-posts-layout1.flownews-blog-3-col h3 a {
+    font-size: 22px
+}
+
+.flownews-element-posts.flownews-posts-layout1.flownews-blog-4-col h3 a {
+    font-size: 20px;
+    margin: 15px 0 0
+}
+
+.flownews-element-posts.flownews-posts-layout1 .article-comments,.flownews-element-posts.flownews-posts-layout1 .article-data,.flownews-element-posts.flownews-posts-layout1 .article-separator {
+    font-size: 11px
+}
+
+.flownews-element-posts.flownews-posts-layout1 .article-comments {
+    margin-left: 12px
+}
+
+.flownews-element-posts.flownews-posts-layout1 .article-data {
+    margin-right: 12px
+}
+
+.flownews-element-posts.flownews-posts-layout1 .article-category a.article-icon-link {
+    padding: 6px 8px
+}
+
+.flownews-element-posts.flownews-posts-layout1 .article-category a.article-icon-link i {
+    font-size: 9px;
+    line-height: 12px
+}
+
+.flownews-element-posts.flownews-posts-layout1 .article-category a {
+    display: block;
+    float: left
+}
+
+@media screen and (max-width: 700px) {
+    .flownews-element-posts.flownews-posts-layout1 .flownews-element-posts-title-box.title-box-1,.flownews-element-posts.flownews-posts-layout1 .item-posts.first-element-posts.col-xs-3,.flownews-element-posts.flownews-posts-layout1 .item-posts.first-element-posts.col-xs-4 {
+        width:100%
+    }
+
+    .flownews-content .flownews-element-posts.flownews-posts-layout1 .item-posts.first-element-posts.col-xs-3,.flownews-content .flownews-element-posts.flownews-posts-layout1 .item-posts.first-element-posts.col-xs-4 {
+        width: calc(100% - 25px)
+    }
+
+    .flownews-element-posts.flownews-posts-layout1.flownews-blog-4-col .item-posts.first-element-posts:nth-child(2),.flownews-element-posts.flownews-posts-layout1.flownews-blog-4-col .item-posts.first-element-posts:nth-child(3),.flownews-element-posts.flownews-posts-layout1.flownews-blog-4-col .item-posts.first-element-posts:nth-child(4) {
+        padding-top: 25px
+    }
+}
+
+@media screen and (max-width: 500px) {
+    .flownews-content .flownews-element-posts.flownews-posts-layout1.flownews-blog-2-col .item-posts.first-element-posts.col-xs-6 {
+        width:calc(100% - 25px)
+    }
+
+    .flownews-content .flownews-element-posts.flownews-posts-layout1.flownews-blog-2-col .item-posts.first-element-posts.col-xs-6:nth-child(2) {
+        padding-top: 25px
+    }
+}
+
+@media screen and (min-width: 701px) and (max-width:800px) {
+    .flownews-element-posts.flownews-posts-layout1.flownews-blog-2-col .article-comments,.flownews-element-posts.flownews-posts-layout1.flownews-blog-2-col .article-separator,.flownews-element-posts.flownews-posts-layout1.flownews-blog-3-col .article-comments,.flownews-element-posts.flownews-posts-layout1.flownews-blog-3-col .article-separator {
+        display:none
+    }
+}
+
+@media screen and (min-width: 951px) and (max-width:1040px) {
+    .flownews-element-posts.flownews-posts-layout1.flownews-blog-4-col .article-comments,.flownews-element-posts.flownews-posts-layout1.flownews-blog-4-col .article-separator {
+        display:none
+    }
+}
+
+@media screen and (min-width: 580px) and (max-width:950px) {
+    .flownews-element-posts.flownews-posts-layout1 .item-posts.first-element-posts.col-xs-3 {
+        width:calc(50% - 25px)
+    }
+
+    .flownews-element-posts.flownews-posts-layout1.flownews-blog-4-col .item-posts.first-element-posts:nth-child(3),.flownews-element-posts.flownews-posts-layout1.flownews-blog-4-col .item-posts.first-element-posts:nth-child(4) {
+        padding-top: 25px
+    }
+}
+
+.flownews-element-posts.flownews-posts-layout2.flownews-blog-2-col,.flownews-element-posts.flownews-posts-layout2.flownews-blog-3-col,.flownews-element-posts.flownews-posts-layout2.flownews-blog-4-col {
+    margin-left: -12.5px;
+    width: calc(100% + 25px)
+}
+
+.flownews-element-posts.flownews-posts-layout2 .flownews-element-posts-title-box {
+    margin: 0 0 25px 12.5px;
+    width: calc(100% - 25px)
+}
+
+.flownews-element-posts.flownews-posts-layout2 .item-posts.first-element-posts.col-xs-6 {
+    width: calc(50% - 25px)
+}
+
+.flownews-element-posts.flownews-posts-layout2 .item-posts.first-element-posts.col-xs-4 {
+    width: calc(33.3333% - 25px)
+}
+
+.flownews-element-posts.flownews-posts-layout2 .item-posts.first-element-posts.col-xs-3 {
+    width: calc(25% - 25px)
+}
+
+.flownews-element-posts.flownews-posts-layout2 .item-posts.first-element-posts {
+    border-top: 1px solid #f4f4f4;
+    padding-top: 25px;
+    margin-top: 25px
+}
+
+.flownews-element-posts.flownews-posts-layout2.flownews-blog-2-col .item-posts.first-element-posts,.flownews-element-posts.flownews-posts-layout2.flownews-blog-3-col .item-posts.first-element-posts,.flownews-element-posts.flownews-posts-layout2.flownews-blog-4-col .item-posts.first-element-posts {
+    margin: 25px 12.5px 0
+}
+
+.flownews-element-posts.flownews-posts-layout2.flownews-blog-1-col .item-posts.first-element-posts:first-child,.flownews-element-posts.flownews-posts-layout2.flownews-blog-2-col .item-posts.first-element-posts:nth-child(1),.flownews-element-posts.flownews-posts-layout2.flownews-blog-2-col .item-posts.first-element-posts:nth-child(2),.flownews-element-posts.flownews-posts-layout2.flownews-blog-3-col .item-posts.first-element-posts:nth-child(1),.flownews-element-posts.flownews-posts-layout2.flownews-blog-3-col .item-posts.first-element-posts:nth-child(2),.flownews-element-posts.flownews-posts-layout2.flownews-blog-3-col .item-posts.first-element-posts:nth-child(3),.flownews-element-posts.flownews-posts-layout2.flownews-blog-4-col .item-posts.first-element-posts:nth-child(1),.flownews-element-posts.flownews-posts-layout2.flownews-blog-4-col .item-posts.first-element-posts:nth-child(2),.flownews-element-posts.flownews-posts-layout2.flownews-blog-4-col .item-posts.first-element-posts:nth-child(3),.flownews-element-posts.flownews-posts-layout2.flownews-blog-4-col .item-posts.first-element-posts:nth-child(4) {
+    border-top: 0;
+    padding-top: 0;
+    margin-top: 0
+}
+
+.flownews-element-posts.flownews-posts-layout2 article h3 a {
+    margin-bottom: 0;
+    line-height: 1.2
+}
+
+.flownews-element-posts.flownews-posts-layout2.flownews-blog-3-col article h3 a {
+    font-size: 22px;
+    line-height: 1.2
+}
+
+.flownews-element-posts.flownews-posts-layout2.flownews-blog-4-col article h3 a {
+    font-size: 20px;
+    line-height: 1.2
+}
+
+.flownews-element-posts.flownews-posts-layout2 .article-category a {
+    font-size: 13px
+}
+
+.flownews-element-posts.flownews-posts-layout2 .flownews-pagination-normal {
+    margin-left: 12.5px;
+    width: calc(100% - 25px)
+}
+
+@media screen and (max-width: 700px) {
+    .flownews-element-posts.flownews-posts-layout2 .item-posts.first-element-posts:first-child {
+        border-top:0;
+        padding-top: 0;
+        margin-top: 0
+    }
+
+    .flownews-element-posts.flownews-posts-layout2 .flownews-element-posts-article-container article:nth-child(2),.flownews-element-posts.flownews-posts-layout2.flownews-blog-3-col .item-posts.first-element-posts:nth-child(2),.flownews-element-posts.flownews-posts-layout2.flownews-blog-3-col .item-posts.first-element-posts:nth-child(3),.flownews-element-posts.flownews-posts-layout2.flownews-blog-3-col .item-posts.first-element-posts:nth-child(4),.flownews-element-posts.flownews-posts-layout2.flownews-blog-4-col .item-posts.first-element-posts:nth-child(2),.flownews-element-posts.flownews-posts-layout2.flownews-blog-4-col .item-posts.first-element-posts:nth-child(3),.flownews-element-posts.flownews-posts-layout2.flownews-blog-4-col .item-posts.first-element-posts:nth-child(4) {
+        padding-top: 25px;
+        margin-top: 25px;
+        border-top: 1px solid #f4f4f4
+    }
+
+    .flownews-element-posts.flownews-posts-layout2,.flownews-element-posts.flownews-posts-layout2 .flownews-element-posts-title-box,.flownews-element-posts.flownews-posts-layout2 .item-posts.first-element-posts.col-xs-3,.flownews-element-posts.flownews-posts-layout2 .item-posts.first-element-posts.col-xs-4,.flownews-element-posts.flownews-posts-layout2 .item-posts.first-element-posts.col-xs-6 {
+        width: 100%
+    }
+
+    .flownews-element-posts.flownews-posts-layout2 .item-posts.first-element-posts.col-xs-3,.flownews-element-posts.flownews-posts-layout2 .item-posts.first-element-posts.col-xs-4 {
+        width: calc(100% - 25px)
+    }
+
+    .flownews-container .flownews-pagination {
+        margin-top: 50px
+    }
+
+    .flownews-container.flownews-sidebar-left .col-xs-9 {
+        margin-left: 0
+    }
+}
+
+@media screen and (min-width: 701px) and (max-width:850px) {
+    .flownews-element-posts.flownews-posts-layout2.flownews-blog-2-col .article-comments,.flownews-element-posts.flownews-posts-layout2.flownews-blog-2-col .article-separator {
+        display:none
+    }
+}
+
+@media screen and (min-width: 580px) and (max-width:950px) {
+    .flownews-element-posts.flownews-posts-layout2 .item-posts.first-element-posts.col-xs-3 {
+        width:calc(50% - 25px)
+    }
+
+    .flownews-element-posts.flownews-posts-layout2.flownews-blog-4-col .item-posts.first-element-posts:nth-child(2) {
+        padding-top: 0;
+        margin-top: 0;
+        border-top: 0
+    }
+
+    .flownews-element-posts.flownews-posts-layout2.flownews-blog-4-col .item-posts.first-element-posts:nth-child(3),.flownews-element-posts.flownews-posts-layout2.flownews-blog-4-col .item-posts.first-element-posts:nth-child(4) {
+        padding-top: 25px;
+        margin-top: 25px;
+        border-top: 1px solid #f4f4f4
+    }
+}
+
+.flownews-element-posts.flownews-posts-layout3.flownews-blog-2-col,.flownews-element-posts.flownews-posts-layout3.flownews-blog-3-col,.flownews-element-posts.flownews-posts-layout3.flownews-blog-4-col {
+    margin-left: -12.5px;
+    width: calc(100% + 25px)
+}
+
+.flownews-element-posts.flownews-posts-layout3 .flownews-element-posts-title-box {
+    margin: 0 0 25px 12.5px;
+    width: calc(100% - 25px)
+}
+
+.flownews-element-posts.flownews-posts-layout3 .item-posts.first-element-posts.col-xs-6 {
+    width: calc(50% - 25px)
+}
+
+.flownews-element-posts.flownews-posts-layout3 .item-posts.first-element-posts.col-xs-4 {
+    width: calc(33.3333% - 25px)
+}
+
+.flownews-element-posts.flownews-posts-layout3 .item-posts.first-element-posts.col-xs-3 {
+    width: calc(25% - 25px)
+}
+
+.flownews-element-posts.flownews-posts-layout3 .item-posts.first-element-posts {
+    border-top: 1px solid #f4f4f4;
+    padding-top: 25px;
+    margin-top: 25px
+}
+
+.flownews-element-posts.flownews-posts-layout3.flownews-blog-2-col .item-posts.first-element-posts,.flownews-element-posts.flownews-posts-layout3.flownews-blog-3-col .item-posts.first-element-posts,.flownews-element-posts.flownews-posts-layout3.flownews-blog-4-col .item-posts.first-element-posts {
+    margin: 25px 12.5px 0
+}
+
+.flownews-element-posts.flownews-posts-layout3.flownews-blog-1-col .item-posts.first-element-posts:first-child,.flownews-element-posts.flownews-posts-layout3.flownews-blog-2-col .item-posts.first-element-posts:nth-child(1),.flownews-element-posts.flownews-posts-layout3.flownews-blog-2-col .item-posts.first-element-posts:nth-child(2),.flownews-element-posts.flownews-posts-layout3.flownews-blog-3-col .item-posts.first-element-posts:nth-child(1),.flownews-element-posts.flownews-posts-layout3.flownews-blog-3-col .item-posts.first-element-posts:nth-child(2),.flownews-element-posts.flownews-posts-layout3.flownews-blog-3-col .item-posts.first-element-posts:nth-child(3),.flownews-element-posts.flownews-posts-layout3.flownews-blog-4-col .item-posts.first-element-posts:nth-child(1),.flownews-element-posts.flownews-posts-layout3.flownews-blog-4-col .item-posts.first-element-posts:nth-child(2),.flownews-element-posts.flownews-posts-layout3.flownews-blog-4-col .item-posts.first-element-posts:nth-child(3),.flownews-element-posts.flownews-posts-layout3.flownews-blog-4-col .item-posts.first-element-posts:nth-child(4) {
+    border-top: 0;
+    padding-top: 0;
+    margin-top: 0
+}
+
+.flownews-element-posts.flownews-posts-layout3 article h3 a {
+    line-height: 1.2
+}
+
+.flownews-element-posts.flownews-posts-layout3.flownews-blog-3-col article h3 a {
+    font-size: 22px;
+    line-height: 1.2
+}
+
+.flownews-element-posts.flownews-posts-layout3.flownews-blog-4-col article h3 a {
+    font-size: 20px;
+    line-height: 1.2
+}
+
+.flownews-element-posts.flownews-posts-layout3 .article-category a {
+    font-size: 13px
+}
+
+.flownews-element-posts.flownews-posts-layout3 .flownews-pagination-normal {
+    margin-left: 12.5px;
+    width: calc(100% - 25px)
+}
+
+@media screen and (max-width: 700px) {
+    .flownews-element-posts.flownews-posts-layout3.item-posts.first-element-posts:first-child {
+        border-top:0;
+        padding-top: 0;
+        margin-top: 0
+    }
+
+    .flownews-element-posts.flownews-posts-layout3 .flownews-element-posts-article-container article:nth-child(2),.flownews-element-posts.flownews-posts-layout3.flownews-blog-2-col .item-posts.first-element-posts:nth-child(2),.flownews-element-posts.flownews-posts-layout3.flownews-blog-3-col .item-posts.first-element-posts:nth-child(2),.flownews-element-posts.flownews-posts-layout3.flownews-blog-3-col .item-posts.first-element-posts:nth-child(3),.flownews-element-posts.flownews-posts-layout3.flownews-blog-4-col .item-posts.first-element-posts:nth-child(2),.flownews-element-posts.flownews-posts-layout3.flownews-blog-4-col .item-posts.first-element-posts:nth-child(3),.flownews-element-posts.flownews-posts-layout3.flownews-blog-4-col .item-posts.first-element-posts:nth-child(4) {
+        padding-top: 25px;
+        margin-top: 25px;
+        border-top: 1px solid #f4f4f4
+    }
+
+    .flownews-element-posts.flownews-posts-layout3,.flownews-element-posts.flownews-posts-layout3 .flownews-element-posts-title-box,.flownews-element-posts.flownews-posts-layout3 .item-posts.first-element-posts.col-xs-6 {
+        width: 100%
+    }
+
+    .flownews-element-posts.flownews-posts-layout3 .item-posts.first-element-posts.col-xs-3,.flownews-element-posts.flownews-posts-layout3 .item-posts.first-element-posts.col-xs-4,.flownews-element-posts.flownews-posts-layout3 .item-posts.first-element-posts.col-xs-6 {
+        width: calc(100% - 25px)
+    }
+}
+
+@media screen and (min-width: 701px) and (max-width:900px) {
+    .flownews-element-posts.flownews-posts-layout2.flownews-blog-3-col .article-comments,.flownews-element-posts.flownews-posts-layout2.flownews-blog-3-col .article-separator,.flownews-element-posts.flownews-posts-layout3.flownews-blog-2-col .article-comments,.flownews-element-posts.flownews-posts-layout3.flownews-blog-2-col .article-separator,.flownews-element-posts.flownews-posts-layout3.flownews-blog-3-col .article-comments,.flownews-element-posts.flownews-posts-layout3.flownews-blog-3-col .article-separator {
+        display:none
+    }
+}
+
+@media screen and (min-width: 951px) and (max-width:1150px) {
+    .flownews-element-posts.flownews-posts-layout2.flownews-blog-4-col .article-comments,.flownews-element-posts.flownews-posts-layout2.flownews-blog-4-col .article-separator,.flownews-element-posts.flownews-posts-layout3.flownews-blog-4-col .article-comments,.flownews-element-posts.flownews-posts-layout3.flownews-blog-4-col .article-separator {
+        display:none
+    }
+}
+
+@media screen and (min-width: 580px) and (max-width:950px) {
+    .flownews-element-posts.flownews-posts-layout3 .item-posts.first-element-posts.col-xs-3 {
+        width:calc(50% - 25px)
+    }
+
+    .flownews-element-posts.flownews-posts-layout3.flownews-blog-4-col .item-posts.first-element-posts:nth-child(2) {
+        padding-top: 0;
+        margin-top: 0;
+        border-top: 0
+    }
+
+    .flownews-element-posts.flownews-posts-layout3.flownews-blog-4-col .item-posts.first-element-posts:nth-child(3),.flownews-element-posts.flownews-posts-layout3.flownews-blog-4-col .item-posts.first-element-posts:nth-child(4) {
+        padding-top: 25px;
+        margin-top: 25px;
+        border-top: 1px solid #f4f4f4
+    }
+}
+
+.flownews-posts-layout4 .article-category {
+    display: block;
+    position: relative;
+    margin-top: 10px
+}
+
+.flownews-element-posts.flownews-posts-layout4.flownews-blog-2-col,.flownews-element-posts.flownews-posts-layout4.flownews-blog-3-col,.flownews-element-posts.flownews-posts-layout4.flownews-blog-4-col {
+    margin-left: -12.5px;
+    width: calc(100% + 25px)
+}
+
+.flownews-element-posts.flownews-posts-layout4 .flownews-element-posts-title-box {
+    margin: 0 0 25px 12.5px;
+    width: calc(100% - 25px)
+}
+
+.flownews-element-posts.flownews-posts-layout4 .item-posts.first-element-posts.col-xs-6 {
+    width: calc(50% - 25px)
+}
+
+.flownews-element-posts.flownews-posts-layout4 .item-posts.first-element-posts.col-xs-4 {
+    width: calc(33.3333% - 25px)
+}
+
+.flownews-element-posts.flownews-posts-layout4 .item-posts.first-element-posts.col-xs-3 {
+    width: calc(25% - 25px)
+}
+
+.flownews-element-posts.flownews-posts-layout4 .article-title a {
+    font-size: 18px;
+    line-height: 1.2
+}
+
+.flownews-element-posts.flownews-posts-layout4 .item-posts.first-element-posts {
+    border-top: 1px solid #f4f4f4;
+    padding-top: 25px;
+    margin-top: 25px
+}
+
+.flownews-element-posts.flownews-posts-layout4.flownews-blog-2-col .item-posts.first-element-posts,.flownews-element-posts.flownews-posts-layout4.flownews-blog-3-col .item-posts.first-element-posts,.flownews-element-posts.flownews-posts-layout4.flownews-blog-4-col .item-posts.first-element-posts {
+    margin: 0 12.5px
+}
+
+.flownews-element-posts.flownews-posts-layout4.flownews-blog-1-col .item-posts.first-element-posts:first-child,.flownews-element-posts.flownews-posts-layout4.flownews-blog-2-col .item-posts.first-element-posts:nth-child(1),.flownews-element-posts.flownews-posts-layout4.flownews-blog-2-col .item-posts.first-element-posts:nth-child(2),.flownews-element-posts.flownews-posts-layout4.flownews-blog-3-col .item-posts.first-element-posts:nth-child(1),.flownews-element-posts.flownews-posts-layout4.flownews-blog-3-col .item-posts.first-element-posts:nth-child(2),.flownews-element-posts.flownews-posts-layout4.flownews-blog-3-col .item-posts.first-element-posts:nth-child(3),.flownews-element-posts.flownews-posts-layout4.flownews-blog-4-col .item-posts.first-element-posts:nth-child(1),.flownews-element-posts.flownews-posts-layout4.flownews-blog-4-col .item-posts.first-element-posts:nth-child(2),.flownews-element-posts.flownews-posts-layout4.flownews-blog-4-col .item-posts.first-element-posts:nth-child(3),.flownews-element-posts.flownews-posts-layout4.flownews-blog-4-col .item-posts.first-element-posts:nth-child(4) {
+    border-top: 0;
+    padding-top: 0;
+    margin-top: 0
+}
+
+.flownews-posts-layout4 article {
+    padding-bottom: 25px
+}
+
+.flownews-posts-layout4 .article-info.col-xs-8 {
+    padding: 0 15px!important
+}
+
+.flownews-element-posts.flownews-posts-layout4.flownews-blog-3-col .article-image.col-xs-4,.flownews-element-posts.flownews-posts-layout4.flownews-blog-3-col .article-info.col-xs-8,.flownews-element-posts.flownews-posts-layout4.flownews-blog-4-col .article-image.col-xs-4,.flownews-element-posts.flownews-posts-layout4.flownews-blog-4-col .article-info.col-xs-8 {
+    width: 100%
+}
+
+.flownews-element-posts.flownews-posts-layout4.flownews-blog-3-col .article-info.col-xs-8,.flownews-element-posts.flownews-posts-layout4.flownews-blog-4-col .article-info.col-xs-8 {
+    padding: 15px 0!important
+}
+
+.flownews-posts-layout4 .article-info-top,.flownews-posts-layout4 h3 a {
+    margin-top: 0
+}
+
+.flownews-element-posts.flownews-posts-layout4 .flownews-pagination-normal {
+    margin-left: 12.5px;
+    width: calc(100% - 25px)
+}
+
+@media screen and (max-width: 800px) {
+    .flownews-element-posts.flownews-posts-layout4 .article-data {
+        display:inherit
+    }
+
+    .flownews-element-posts.flownews-posts-layout4.item-posts.first-element-posts:first-child {
+        border-top: 0;
+        padding-top: 0;
+        margin-top: 0
+    }
+
+    .flownews-element-posts.flownews-posts-layout4 article.item-posts.first-element-posts:nth-child(2) {
+        border-top: 1px solid #f4f4f4;
+        padding-top: 25px;
+        margin-top: 25px
+    }
+
+    .flownews-element-posts.flownews-posts-layout4,.flownews-element-posts.flownews-posts-layout4 .flownews-element-posts-title-box {
+        width: 100%
+    }
+
+    .flownews-element-posts.flownews-posts-layout4 .item-posts.first-element-posts.col-xs-6 {
+        width: calc(100% - 25px)
+    }
+
+    .flownews-element-posts.flownews-posts-layout4.flownews-blog-2-col .item-posts.first-element-posts:nth-child(2) {
+        border-top: 1px solid #f4f4f4;
+        padding-top: 25px
+    }
+}
+
+@media screen and (max-width: 700px) {
+    .flownews-element-posts.flownews-posts-layout4 .item-posts.first-element-posts.col-xs-4 {
+        width:calc(100% - 25px)
+    }
+
+    .flownews-element-posts.flownews-posts-layout4.flownews-blog-3-col .item-posts.first-element-posts:nth-child(2),.flownews-element-posts.flownews-posts-layout4.flownews-blog-3-col .item-posts.first-element-posts:nth-child(3),.flownews-element-posts.flownews-posts-layout4.flownews-blog-4-col .item-posts.first-element-posts:nth-child(3),.flownews-element-posts.flownews-posts-layout4.flownews-blog-4-col .item-posts.first-element-posts:nth-child(4) {
+        border-top: 1px solid #f4f4f4;
+        padding-top: 25px
+    }
+}
+
+@media screen and (min-width: 701px) and (max-width:950px) {
+    .flownews-element-posts.flownews-posts-layout4.flownews-blog-4-col .item-posts.first-element-posts:nth-child(3),.flownews-element-posts.flownews-posts-layout4.flownews-blog-4-col .item-posts.first-element-posts:nth-child(4) {
+        border-top:1px solid #f4f4f4;
+        padding-top: 25px
+    }
+}
+
+@media screen and (max-width: 640px) {
+    .flownews-element-posts.flownews-posts-layout4.flownews-blog-4-col .item-posts.first-element-posts.col-xs-3 {
+        width:calc(100% - 25px)
+    }
+
+    .flownews-container .flownews-element-posts.flownews-posts-layout4.flownews-blog-4-col .item-posts.first-element-posts:nth-child(2),.flownews-element-posts.flownews-posts-layout4.flownews-blog-3-col .item-posts.first-element-posts:nth-child(2),.flownews-element-posts.flownews-posts-layout4.flownews-blog-3-col .item-posts.first-element-posts:nth-child(3) {
+        border-top: 1px solid #f4f4f4;
+        padding-top: 25px
+    }
+
+    .flownews-element-posts.flownews-posts-layout4.flownews-blog-4-col .article-data {
+        display: block
+    }
+}
+
+@media screen and (min-width: 580px) and (max-width:950px) {
+    .flownews-element-posts.flownews-posts-layout4 .item-posts.first-element-posts.col-xs-3 {
+        width:calc(50% - 25px)
+    }
+
+    .flownews-element-posts.flownews-posts-layout4.flownews-blog-4-col .item-posts.first-element-posts:nth-child(2) {
+        padding-top: 0;
+        margin-top: 0;
+        border-top: 0
+    }
+
+    .flownews-element-posts.flownews-posts-layout3.flownews-blog-4-col .item-posts.first-element-posts:nth-child(3),.flownews-element-posts.flownews-posts-layout3.flownews-blog-4-col .item-posts.first-element-posts:nth-child(4) {
+        padding-top: 25px;
+        margin-top: 25px;
+        border-top: 1px solid #f4f4f4
+    }
+}
+
+@media screen and (max-width: 450px) {
+    .flownews-element-posts.flownews-posts-layout4 .article-data {
+        display:none
+    }
+
+    .flownews-element-posts.flownews-posts-layout4.flownews-blog-1-col .article-image.col-xs-4,.flownews-element-posts.flownews-posts-layout4.flownews-blog-2-col .article-image.col-xs-4 {
+        width: 100%
+    }
+
+    .flownews-element-posts.flownews-posts-layout4.flownews-blog-1-col .article-info.col-xs-8,.flownews-element-posts.flownews-posts-layout4.flownews-blog-2-col .article-info.col-xs-8 {
+        padding: 15px 0!important;
+        width: calc(100% - 25px)
+    }
+
+    .flownews-element-posts.flownews-posts-layout4.flownews-blog-2-col .article-image.col-xs-4 {
+        width: 100%
+    }
+}
+
+.flownews-element-posts.flownews-posts-layout5.flownews-blog-2-col,.flownews-element-posts.flownews-posts-layout5.flownews-blog-3-col,.flownews-element-posts.flownews-posts-layout5.flownews-blog-4-col {
+    margin-left: -12.5px;
+    width: calc(100% + 25px)
+}
+
+.flownews-element-posts.flownews-posts-layout5 .flownews-element-posts-title-box {
+    margin: 0 0 25px 12.5px;
+    width: calc(100% - 25px)
+}
+
+.flownews-element-posts.flownews-posts-layout5 .item-posts.first-element-posts.col-xs-6 {
+    width: calc(50% - 25px)
+}
+
+.flownews-element-posts.flownews-posts-layout5 .item-posts.first-element-posts.col-xs-4 {
+    width: calc(33.3333% - 25px)
+}
+
+.flownews-element-posts.flownews-posts-layout5 .item-posts.first-element-posts.col-xs-3 {
+    width: calc(25% - 25px)
+}
+
+.flownews-element-posts.flownews-posts-layout5 .article-title a {
+    font-size: 18px
+}
+
+.flownews-element-posts.flownews-posts-layout5 .item-posts.first-element-posts {
+    border-top: 1px solid #f4f4f4;
+    margin: 25px 12.5px 0;
+    padding-top: 25px
+}
+
+.flownews-element-posts.flownews-posts-layout5.flownews-blog-2-col .item-posts.first-element-posts,.flownews-element-posts.flownews-posts-layout5.flownews-blog-3-col .item-posts.first-element-posts,.flownews-element-posts.flownews-posts-layout5.flownews-blog-4-col .item-posts.first-element-posts {
+    margin-bottom: 25px!important
+}
+
+.flownews-element-posts.flownews-posts-layout5.flownews-blog-2-col .item-posts.first-element-posts.other-rows,.flownews-element-posts.flownews-posts-layout5.flownews-blog-3-col .item-posts.first-element-posts.other-rows,.flownews-element-posts.flownews-posts-layout5.flownews-blog-4-col .item-posts.first-element-posts.other-rows {
+    margin-bottom: 0!important;
+    margin-top: 10px
+}
+
+.flownews-element-posts.flownews-posts-layout5.flownews-blog-1-col .item-posts.first-element-posts {
+    margin-left: 0
+}
+
+.flownews-element-posts.flownews-posts-layout5 .flownews-pagination-normal {
+    margin-left: 12.5px;
+    width: calc(100% - 25px)
+}
+
+.flownews-element-posts.flownews-posts-layout5 article.item-posts.first-element-posts.first-row {
+    border-top: 0;
+    padding-top: 0;
+    margin-top: 0
+}
+
+.flownews-element-posts.flownews-posts-layout5.flownews-blog-1-col article.item-posts.first-element-posts.first-row {
+    margin: 0 0 50px
+}
+
+.flownews-element-posts.flownews-posts-layout5 article.item-posts.first-element-posts.first-row {
+    margin-bottom: 50px
+}
+
+.flownews-posts-layout5 .article-info.col-xs-8 {
+    padding: 0 15px!important
+}
+
+.flownews-posts-layout5.flownews-blog-1-col .first-row .article-title a {
+    font-size: 28px
+}
+
+.flownews-posts-layout5 .item-posts.first-element-posts .article-info.col-xs-8 .article-info-top,.flownews-posts-layout5 .item-posts.first-element-posts .article-info.col-xs-8 h3 a {
+    margin-top: 0
+}
+
+.flownews-posts-layout5 .item-posts.first-element-posts .article-info.col-xs-8 .article-category {
+    position: inherit;
+    margin-top: 10px
+}
+
+.flownews-element-posts.flownews-posts-layout5 .article-category a {
+    font-size: 13px
+}
+
+.flownews-posts-layout5 .item-posts.first-element-posts .article-info.col-xs-8 .article-category a {
+    font-size: 10px
+}
+
+.flownews-element-posts.flownews-posts-layout5.flownews-blog-4-col .article-image.col-xs-4,.flownews-element-posts.flownews-posts-layout5.flownews-blog-4-col .article-info.col-xs-8 {
+    width: 100%
+}
+
+.flownews-element-posts.flownews-posts-layout5.flownews-blog-4-col .article-info.col-xs-8 {
+    padding: 15px 0!important
+}
+
+@media screen and (max-width: 1000px) {
+    .flownews-element-posts.flownews-posts-layout5.flownews-blog-2-col .item-posts.first-element-posts.other-rows.col-xs-6 {
+        width:calc(100% - 25px)
+    }
+
+    .flownews-element-posts.flownews-posts-layout5.flownews-blog-2-col article.item-posts.first-element-posts:nth-child(5) {
+        border-top: 1px solid #f4f4f4;
+        padding-top: 25px;
+        margin-top: 25px
+    }
+}
+
+@media screen and (max-width: 700px) {
+    .flownews-element-posts.flownews-posts-layout5.flownews-blog-2-col,.flownews-element-posts.flownews-posts-layout5.flownews-blog-3-col,.flownews-element-posts.flownews-posts-layout5.flownews-blog-4-col {
+        margin-left:0;
+        width: 100%
+    }
+
+    .flownews-element-posts.flownews-posts-layout5.flownews-blog-1-col article.item-posts.first-element-posts.first-row {
+        width: 100%
+    }
+
+    .flownews-element-posts.flownews-posts-layout5 .item-posts.first-element-posts,.flownews-element-posts.flownews-posts-layout5.flownews-blog-1-col .item-posts.first-element-posts.other-rows.col-xs-12 {
+        width: 100%;
+        margin: 0 0 25px
+    }
+
+    .flownews-element-posts.flownews-posts-layout5.flownews-blog-1-col .article-image.col-xs-4 {
+        width: 100%
+    }
+
+    .flownews-element-posts.flownews-posts-layout5.flownews-blog-1-col .article-info.col-xs-8 {
+        padding: 15px 0 0!important;
+        width: 100%
+    }
+
+    .flownews-element-posts.flownews-posts-layout5.item-posts.first-element-posts:first-child {
+        border-top: 0;
+        padding-top: 0;
+        margin-top: 0
+    }
+
+    .flownews-element-posts.flownews-posts-layout5.flownews-blog-2-col article.item-posts.first-element-posts:nth-child(2) {
+        border-top: 0;
+        margin-top: 0;
+        padding-top: 0;
+        margin-bottom: 50px
+    }
+
+    .flownews-element-posts.flownews-posts-layout5 article.item-posts.first-element-posts:nth-child(2),.flownews-element-posts.flownews-posts-layout5.flownews-blog-2-col article.item-posts.first-element-posts:nth-child(5) {
+        padding-top: 25px;
+        margin-top: 25px;
+        border-top: 1px solid #f4f4f4
+    }
+
+    .flownews-element-posts.flownews-posts-layout5,.flownews-element-posts.flownews-posts-layout5 .flownews-element-posts-title-box,.flownews-element-posts.flownews-posts-layout5 .item-posts.first-element-posts.col-xs-6 {
+        width: 100%
+    }
+
+    .flownews-element-posts.flownews-posts-layout5.flownews-blog-2-col .item-posts.first-element-posts.col-xs-6,.flownews-element-posts.flownews-posts-layout5.flownews-blog-3-col .item-posts.first-element-posts.col-xs-4,.flownews-element-posts.flownews-posts-layout5.flownews-blog-4-col .item-posts.first-element-posts.col-xs-3 {
+        width: calc(100%)
+    }
+
+    .flownews-element-posts.flownews-posts-layout5.flownews-blog-4-col article.item-posts.first-element-posts:nth-child(2) {
+        border-top: 0;
+        padding-top: 0;
+        margin-top: 0
+    }
+
+    .flownews-element-posts.flownews-posts-layout5.flownews-blog-4-col .col-xs-3 {
+        position: relative!important;
+        top: inherit!important
+    }
+
+    .flownews-element-posts.flownews-posts-layout5.flownews-blog-4-col .item-posts.first-element-posts.other-rows.col-xs-3.masonry-brick {
+        margin-bottom: 50px
+    }
+}
+
+.flownews-element-top-content .header-pattern,.flownews-top-content-layout1 .header-pattern {
+    filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#00000000', endColorstr='#cc000000', GradientType=0 );
+    top: 0
+}
+
+@media screen and (max-width: 500px) {
+    .flownews-element-posts.flownews-posts-layout5 article.item-posts.first-element-posts.first-row {
+        margin-bottom:0
+    }
+
+    .flownews-element-posts.flownews-posts-layout5 article.item-posts.first-element-posts.other-rows {
+        border-top: 1px solid #f4f4f4;
+        padding-top: 25px;
+        margin-top: 25px
+    }
+
+    .flownews-element-posts.flownews-posts-layout5.flownews-blog-2-col .article-image.col-xs-4 {
+        width: 100%
+    }
+
+    .flownews-element-posts.flownews-posts-layout5.flownews-blog-2-col .article-info.col-xs-8 {
+        padding: 15px 0 0!important;
+        width: 100%
+    }
+}
+
+@media screen and (max-width: 900px) {
+    .flownews-element-posts.flownews-posts-layout5.flownews-blog-3-col .item-posts.first-element-posts.col-xs-4 {
+        width:calc(100% - 25px)
+    }
+
+    .flownews-element-posts.flownews-posts-layout5.flownews-blog-3-col article.item-posts.first-element-posts.first-row,.flownews-element-posts.flownews-posts-layout5.flownews-blog-3-col article.item-posts.first-element-posts.other-rows {
+        border-top: 1px solid #f4f4f4;
+        margin-top: 25px;
+        padding-top: 25px
+    }
+
+    .flownews-element-posts.flownews-posts-layout5.flownews-blog-3-col article.item-posts.first-element-posts.first-row:first-child {
+        border-top: 0;
+        padding-top: 0;
+        margin-top: 0
+    }
+}
+
+@media screen and (min-width: 1024px) and (max-width:1150px) {
+    .flownews-element-posts.flownews-posts-layout5.flownews-blog-4-col .article-comments,.flownews-element-posts.flownews-posts-layout5.flownews-blog-4-col .article-separator {
+        display:none
+    }
+}
+
+@media screen and (min-width: 701px) and (max-width:1023px) {
+    .flownews-element-posts.flownews-posts-layout5.flownews-blog-4-col .item-posts.first-element-posts.col-xs-3 {
+        width:calc(50% - 25px)
+    }
+}
+
+.flownews-element-top-content:after {
+    clear: both;
+    content: "";
+    display: block
+}
+
+.flownews-element-top-content {
+    margin-bottom: 50px
+}
+
+.flownews-element-top-content article {
+    position: relative;
+    line-height: 1;
+    background: #000
+}
+
+.flownews-element-top-content article h2 {
+    line-height: 1
+}
+
+.flownews-element-top-content .article-info {
+    position: absolute;
+    bottom: 30px;
+    left: 30px;
+    z-index: 2;
+    margin-left: 0;
+    transition: all .4s ease 0s;
+    right: 30px;
+    max-width: calc(100% - 45px);
+    max-width: -webkit-calc(100% - 45px);
+    width: 100%
+}
+
+.flownews-element-top-content article:hover .article-info {
+    left: 45px;
+    transition: all .4s ease 0s
+}
+
+.flownews-element-top-content .header-pattern {
+    background: -moz-linear-gradient(top,rgba(0,0,0,0) 0,rgba(0,0,0,.4) 100%);
+    background: -webkit-linear-gradient(top,rgba(0,0,0,0) 0,rgba(0,0,0,.4) 100%);
+    background: linear-gradient(to bottom,rgba(0,0,0,0) 0,rgba(0,0,0,.4) 100%);
+    position: absolute;
+    left: 0;
+    width: 100%;
+    height: 100%;
+    z-index: 1
+}
+
+.flownews-element-top-content article img {
+    opacity: 1;
+    transition: all .4s ease 0s
+}
+
+.flownews-element-top-content article:hover img {
+    opacity: .8;
+    transition: all .4s ease 0s
+}
+
+.flownews-element-top-content .article-info-top {
+    margin-bottom: 15px
+}
+
+.flownews-element-top-content .article-title {
+    float: left;
+    margin: 0 25px 0 0;
+    line-height: 30px
+}
+
+.flownews-element-top-content .article-title a {
+    color: #fff;
+    font-weight: 700;
+    text-transform: uppercase;
+    font-size: 30px;
+    display: block
+}
+
+.flownews-element-top-content .article-title a:hover {
+    color: #e7685d
+}
+
+.flownews-element-top-content .article-category {
+    line-height: 30px;
+    float: left
+}
+
+.flownews-element-top-content .article-category a {
+    background: #e7685d;
+    color: #fff;
+    font-size: 10px;
+    font-weight: 700;
+    letter-spacing: 1px;
+    padding: 6px 10px;
+    text-transform: uppercase;
+    display: block;
+    line-height: 1;
+    margin-top: 4px
+}
+
+.flownews-element-top-content .article-category a:hover {
+    background: #c9564c
+}
+
+.flownews-element-top-content .article-comments,.flownews-element-top-content .article-data,.flownews-element-top-content .article-separator {
+    float: left
+}
+
+.flownews-element-top-content .article-data {
+    margin-right: 20px
+}
+
+.flownews-element-top-content .article-comments {
+    margin-left: 20px
+}
+
+.flownews-element-top-content .article-info-bottom {
+    color: #fff;
+    font-size: 13px;
+    margin-right: 20px;
+    letter-spacing: .4px
+}
+
+.flownews-element-top-content .article-info-bottom i {
+    margin-right: 10px
+}
+
+.flownews-element-top-content .article-info-bottom a {
+    color: #FFF
+}
+
+.flownews-element-top-content .article-info-bottom a:hover {
+    color: #e7685d
+}
+
+.flownews-top-content-layout1 {
+    height: 400px;
+    overflow: hidden
+}
+
+.flownews-top-content-layout1 article {
+    height: 100%;
+    overflow: hidden;
+    background: #000
+}
+
+.flownews-top-content-layout1 article.col-xs-5 {
+    height: 248px;
+    max-width: calc(41.66666667% - 4px);
+    max-width: -webkit-calc(41.66666667% - 4px);
+    width: 41.66666667%;
+    margin-left: 4px;
+    margin-bottom: 4px
+}
+
+.flownews-top-content-layout1 article.col-xs-2 {
+    height: 150px;
+    max-width: calc(20.833333335% - 4px);
+    max-width: -webkit-calc(20.833333335% - 4px);
+    width: 20.833333335%;
+    margin-left: 4px
+}
+
+.flownews-top-content-layout1 .article-info {
+    position: absolute;
+    bottom: 30px;
+    left: 30px;
+    z-index: 2;
+    margin-left: 0;
+    transition: all .4s ease 0s;
+    right: 30px;
+    max-width: calc(100% - 45px);
+    max-width: -webkit-calc(100% - 45px);
+    width: 100%
+}
+
+.flownews-top-content-layout1 article:hover .article-info {
+    left: 45px;
+    transition: all .4s ease 0s
+}
+
+.flownews-top-content-layout1 .header-pattern {
+    background: -moz-linear-gradient(top,rgba(0,0,0,0) 0,rgba(0,0,0,.4) 100%);
+    background: -webkit-linear-gradient(top,rgba(0,0,0,0) 0,rgba(0,0,0,.4) 100%);
+    background: linear-gradient(to bottom,rgba(0,0,0,0) 0,rgba(0,0,0,.4) 100%);
+    position: absolute;
+    left: 0;
+    width: 100%;
+    height: 100%;
+    z-index: 1
+}
+
+.flownews-top-content-layout1 article img {
+    opacity: 1;
+    transition: all .4s ease 0s;
+    width: 100%
+}
+
+.flownews-top-content-layout1 article:hover img {
+    opacity: .8;
+    transition: all .4s ease 0s
+}
+
+.flownews-top-content-layout1 .article-info-top {
+    margin-bottom: 15px
+}
+
+.flownews-top-content-layout1 .article-title {
+    float: left;
+    margin: 0 25px 0 0;
+    line-height: 30px
+}
+
+.flownews-top-content-layout1 .article-title a {
+    color: #fff;
+    font-weight: 700;
+    text-transform: uppercase;
+    font-size: 30px;
+    display: block
+}
+
+.flownews-top-content-layout1 .article-title a:hover {
+    color: #e7685d
+}
+
+.flownews-top-content-layout1 .article-category {
+    line-height: 30px;
+    float: left
+}
+
+.flownews-top-content-layout1 .article-category a {
+    background: #e7685d;
+    color: #fff;
+    font-size: 10px;
+    font-weight: 700;
+    letter-spacing: 1px;
+    padding: 6px 10px;
+    text-transform: uppercase;
+    display: block;
+    line-height: 1;
+    margin-top: 5px
+}
+
+.flownews-top-content-layout1 .article-category a:hover {
+    background: #c9564c
+}
+
+.flownews-top-content-layout1 .article-comments,.flownews-top-content-layout1 .article-data,.flownews-top-content-layout1 .article-separator {
+    float: left
+}
+
+.flownews-top-content-layout1 .article-data {
+    margin-right: 20px
+}
+
+.flownews-top-content-layout1 .article-comments {
+    margin-left: 20px
+}
+
+.flownews-top-content-layout1 .article-info-bottom {
+    color: #fff;
+    font-size: 13px;
+    margin-right: 20px;
+    letter-spacing: .4px
+}
+
+.flownews-top-content-layout1 .article-info-bottom i {
+    margin-right: 10px
+}
+
+.flownews-top-content-layout1 .article-info-bottom a {
+    color: #FFF
+}
+
+.flownews-top-content-layout1 .article-info-bottom a:hover {
+    color: #e7685d
+}
+
+.flownews-top-content-layout1 .second-element-header .article-title {
+    line-height: 22px
+}
+
+.flownews-top-content-layout1 .second-element-header .article-title a {
+    font-size: 22px
+}
+
+.flownews-top-content-layout1 .second-element-header .article-category a {
+    margin-top: 3px;
+    padding: 4px 10px
+}
+
+.flownews-top-content-layout1 .others-element-header .article-title {
+    line-height: 16px
+}
+
+.flownews-top-content-layout1 .others-element-header .article-title a {
+    font-size: 16px
+}
+
+.flownews-top-content-layout1 .others-element-header .article-category a {
+    padding: 3px 10px;
+    margin-top: 7px;
+    font-size: 8px
+}
+
+@media screen and (max-width: 1200px) {
+    .flownews-top-content-layout1 {
+        height:350px
+    }
+
+    .flownews-top-content-layout1 article.col-xs-5 {
+        height: 220px
+    }
+
+    .flownews-top-content-layout1 article.col-xs-2 {
+        height: 130px
+    }
+}
+
+@media screen and (max-width: 1150px) {
+    .flownews-top-content-layout1 {
+        height:300px
+    }
+
+    .flownews-top-content-layout1 article.col-xs-5 {
+        height: 180px
+    }
+
+    .flownews-top-content-layout1 article.col-xs-2 {
+        height: 120px
+    }
+
+    .flownews-top-content-layout1 .others-element-header .article-info-bottom {
+        display: none
+    }
+}
+
+@media screen and (min-width: 1000px) and (max-width:1150px) {
+    .flownews-top-content-layout1 .others-element-header .article-info {
+        bottom:0
+    }
+}
+
+@media screen and (min-width: 810px) and (max-width:1000px) {
+    .flownews-top-content-layout1 .others-element-header .article-category a,.flownews-top-content-layout1 .others-element-header .article-info-bottom,.flownews-top-content-layout1 .second-element-header .article-comments,.flownews-top-content-layout1 .second-element-header .article-separator {
+        display:none
+    }
+
+    .flownews-top-content-layout1 {
+        height: 250px
+    }
+
+    .flownews-top-content-layout1 article.col-xs-5 {
+        height: 150px
+    }
+
+    .flownews-top-content-layout1 article.col-xs-2 {
+        height: 100px
+    }
+
+    .flownews-top-content-layout1 .article-info {
+        position: absolute;
+        bottom: 10px;
+        left: 10px;
+        z-index: 2;
+        margin-left: 0;
+        transition: all .4s ease 0s;
+        right: 50px
+    }
+
+    .flownews-top-content-layout1 article:hover .article-info {
+        left: 10px;
+        transition: all .4s ease 0s
+    }
+}
+
+@media screen and (min-width: 650px) and (max-width:810px) {
+    .flownews-top-content-layout1 {
+        height:200px
+    }
+
+    .flownews-top-content-layout1 article.col-xs-5 {
+        height: 130px
+    }
+
+    .flownews-top-content-layout1 article.col-xs-2 {
+        height: 70px
+    }
+
+    .flownews-top-content-layout1 .article-info {
+        position: absolute;
+        bottom: 10px;
+        left: 10px;
+        z-index: 2;
+        margin-left: 0;
+        right: 50px
+    }
+
+    .flownews-top-content-layout1 article:hover .article-info {
+        left: 10px
+    }
+
+    .flownews-top-content-layout1 .first-element-header .article-info-bottom,.flownews-top-content-layout1 .others-element-header .article-category a,.flownews-top-content-layout1 .others-element-header .article-info-bottom,.flownews-top-content-layout1 .second-element-header .article-category a,.flownews-top-content-layout1 .second-element-header .article-info-bottom {
+        display: none
+    }
+
+    .flownews-top-content-layout1 .second-element-header .article-title {
+        line-height: 14px
+    }
+
+    .flownews-top-content-layout1 .second-element-header .article-title a {
+        font-size: 14px
+    }
+
+    .flownews-top-content-layout1 .others-element-header .article-title {
+        line-height: 10px
+    }
+
+    .flownews-top-content-layout1 .others-element-header .article-title a {
+        font-size: 10px
+    }
+}
+
+@media screen and (max-width: 650px) {
+    .flownews-top-content-layout1 .first-element-header .article-info-bottom,.flownews-top-content-layout1 .others-element-header .article-category a,.flownews-top-content-layout1 .others-element-header .article-info-bottom,.flownews-top-content-layout1 .second-element-header .article-category a,.flownews-top-content-layout1 .second-element-header .article-info-bottom {
+        display:none
+    }
+}
+
+@media screen and (min-width: 530px) and (max-width:650px) {
+    .flownews-top-content-layout1 .others-element-header .article-title,.flownews-top-content-layout1 .second-element-header .article-title {
+        line-height:10px
+    }
+
+    .flownews-top-content-layout1 .others-element-header .article-title a,.flownews-top-content-layout1 .second-element-header .article-title a {
+        font-size: 10px
+    }
+
+    .flownews-top-content-layout1 .article-info {
+        position: absolute;
+        bottom: 10px;
+        left: 10px;
+        z-index: 2;
+        margin-left: 0;
+        right: 50px
+    }
+
+    .flownews-top-content-layout1 article:hover .article-info {
+        left: 10px
+    }
+
+    .flownews-top-content-layout1 {
+        height: auto
+    }
+
+    .flownews-top-content-layout1 .col-xs-7 {
+        width: 100%;
+        height: 250px;
+        margin-bottom: 4px
+    }
+
+    .flownews-top-content-layout1 article.col-xs-5 {
+        width: 34%;
+        max-width: 34%;
+        margin-left: 0;
+        height: 80px
+    }
+
+    .flownews-top-content-layout1 article.col-xs-2 {
+        max-width: calc(33% - 4px);
+        max-width: -webkit-calc(33% - 4px);
+        width: 33%;
+        margin-left: 4px;
+        height: 80px
+    }
+
+    .flownews-top-content-layout1 .first-element-header .article-info-bottom,.flownews-top-content-layout1 .others-element-header .article-category a,.flownews-top-content-layout1 .others-element-header .article-info-bottom,.flownews-top-content-layout1 .second-element-header .article-category a,.flownews-top-content-layout1 .second-element-header .article-info-bottom {
+        display: none
+    }
+}
+
+@media screen and (min-width: 400px) and (max-width:529px) {
+    .flownews-top-content-layout1 .article-info {
+        position:absolute;
+        bottom: 10px;
+        left: 10px;
+        z-index: 2;
+        margin-left: 0;
+        right: 50px
+    }
+
+    .flownews-top-content-layout1 article:hover .article-info {
+        left: 10px
+    }
+
+    .flownews-top-content-layout1 {
+        height: auto
+    }
+
+    .flownews-top-content-layout1 .col-xs-7 {
+        width: 100%;
+        height: 200px;
+        margin-bottom: 4px
+    }
+
+    .flownews-top-content-layout1 article.col-xs-5 {
+        width: 100%;
+        max-width: 100%;
+        height: 150px;
+        margin-bottom: 4px;
+        margin-left: 0;
+        margin-right: 0
+    }
+
+    .flownews-top-content-layout1 article.col-xs-2 {
+        max-width: calc(50% - 2px);
+        max-width: -webkit-calc(50% - 2px);
+        width: 50%;
+        height: 100px;
+        margin-right: 2px;
+        margin-left: 0
+    }
+
+    .flownews-top-content-layout1 article.col-xs-2:last-child {
+        margin-left: 2px;
+        margin-right: 0
+    }
+
+    .flownews-top-content-layout1 .others-element-header .article-category a,.flownews-top-content-layout1 .others-element-header .article-info-bottom {
+        display: none
+    }
+
+    .flownews-top-content-layout1 .second-element-header .article-title {
+        line-height: 22px
+    }
+
+    .flownews-top-content-layout1 .second-element-header .article-title a {
+        font-size: 22px
+    }
+
+    .flownews-top-content-layout1 .others-element-header .article-title {
+        line-height: 10px
+    }
+
+    .flownews-top-content-layout1 .others-element-header .article-title a {
+        font-size: 10px
+    }
+}
+
+@media screen and (max-width: 399px) {
+    .flownews-top-content-layout1 {
+        height:auto
+    }
+
+    .flownews-top-content-layout1 .col-xs-7,.flownews-top-content-layout1 article.col-xs-2,.flownews-top-content-layout1 article.col-xs-5 {
+        width: 100%;
+        max-width: 100%;
+        height: auto;
+        margin: 0 0 4px
+    }
+
+    .flownews-top-content-layout1 .article-title {
+        float: none
+    }
+
+    .flownews-top-content-layout1 .first-element-header .article-title a,.flownews-top-content-layout1 .second-element-header .article-title a {
+        font-size: 16px;
+        line-height: 16px
+    }
+
+    .flownews-top-content-layout1 .article-category a {
+        padding: 3px 10px;
+        margin-top: 7px;
+        font-size: 8px;
+        display: block
+    }
+
+    .flownews-top-content-layout1 .article-info-bottom {
+        display: none
+    }
+}
+
+.flownews-top-content-layout2 .first-element-header {
+    height: 400px;
+    overflow: hidden;
+    margin-bottom: 6px
+}
+
+.flownews-top-content-layout2 .others-element-header {
+    width: 33.33333333%;
+    max-width: calc(33.33333333% - 4px);
+    max-width: -webkit-calc(33.33333333% - 4px)
+}
+
+.flownews-top-content-layout2 article:nth-child(2) {
+    margin-right: 4px
+}
+
+.flownews-top-content-layout2 article:nth-child(3) {
+    margin-right: 2px;
+    margin-left: 2px
+}
+
+.flownews-top-content-layout2 article:last-child {
+    margin-left: 4px
+}
+
+.flownews-top-content-layout2 .first-element-header img {
+    position: relative;
+    top: 50%;
+    transform: translateY(-50%)
+}
+
+.flownews-top-content-layout2 .first-element-header .article-title a {
+    font-size: 42px;
+    line-height: 42px
+}
+
+.flownews-top-content-layout2 .first-element-header .article-category a {
+    margin-top: 8px;
+    padding: 10px 15px
+}
+
+.flownews-top-content-layout2 .others-element-header .article-title {
+    line-height: 22px
+}
+
+.flownews-top-content-layout2 .others-element-header .article-title a {
+    font-size: 22px
+}
+
+.flownews-top-content-layout2 .others-element-header .article-category a {
+    margin-top: 3px;
+    padding: 4px 10px
+}
+
+@media screen and (max-width: 1100px) {
+    .flownews-top-content-layout2 .others-element-header .article-separator {
+        display:none
+    }
+
+    .flownews-top-content-layout2 .others-element-header .article-comments,.flownews-top-content-layout2 .others-element-header .article-data {
+        float: none;
+        display: block;
+        margin: 0
+    }
+
+    .flownews-top-content-layout2 .others-element-header .article-comments {
+        margin-top: 3px
+    }
+}
+
+@media screen and (min-width: 550px) and (max-width:900px) {
+    .flownews-top-content-layout2 .first-element-header {
+        height:300px
+    }
+
+    .flownews-top-content-layout2 .others-element-header .article-title {
+        line-height: 15px
+    }
+
+    .flownews-top-content-layout2 .others-element-header .article-title a {
+        font-size: 15px
+    }
+
+    .flownews-top-content-layout2 .others-element-header .article-category a {
+        padding: 3px 10px;
+        margin-top: 8px
+    }
+
+    .flownews-top-content-layout2 .others-element-header .article-category a,.flownews-top-content-layout2 .others-element-header .article-info-bottom {
+        display: none
+    }
+}
+
+@media screen and (max-width: 549px) {
+    .flownews-top-content-layout2 {
+        height:auto
+    }
+
+    .flownews-top-content-layout2 .col-xs-12,.flownews-top-content-layout2 article.col-xs-4 {
+        width: 100%;
+        max-width: 100%;
+        height: auto;
+        margin: 0 0 4px
+    }
+
+    .flownews-top-content-layout2 .first-element-header img {
+        top: 0;
+        transform: translateY(0)
+    }
+
+    .flownews-top-content-layout2 .article-title {
+        float: none
+    }
+
+    .flownews-top-content-layout2 .first-element-header .article-title a,.flownews-top-content-layout2 .others-element-header .article-title a {
+        font-size: 16px;
+        line-height: 16px
+    }
+
+    .flownews-top-content-layout2 .article-category a,.flownews-top-content-layout2 .first-element-header .article-category a {
+        padding: 3px 10px;
+        margin-top: 7px;
+        font-size: 8px;
+        display: block
+    }
+
+    .flownews-top-content-layout2 .article-info-bottom {
+        display: none
+    }
+}
+
+.flownews-top-content-layout3 .first-element-header {
+    height: 500px;
+    overflow: hidden;
+    margin-bottom: 6px
+}
+
+.flownews-top-content-layout3 .others-element-header {
+    width: 33.33333333%;
+    max-width: calc(33.33333333% - 4px);
+    max-width: -webkit-calc(33.33333333% - 4px);
+    height: 100px;
+    overflow: hidden;
+    background: #ececec
+}
+
+.flownews-top-content-layout3 article:nth-child(2) {
+    margin-right: 4px
+}
+
+.flownews-top-content-layout3 article:nth-child(3) {
+    margin-right: 2px;
+    margin-left: 2px
+}
+
+.flownews-top-content-layout3 article:last-child {
+    margin-left: 4px
+}
+
+.flownews-top-content-layout3 .first-element-header img {
+    position: relative;
+    top: 50%;
+    transform: translateY(-50%)
+}
+
+.flownews-top-content-layout3 .first-element-header .article-title a {
+    font-size: 42px;
+    line-height: 42px;
+    margin-right: 10px
+}
+
+.flownews-top-content-layout3 .first-element-header .article-category a {
+    margin-top: 8px;
+    padding: 10px
+}
+
+.flownews-top-content-layout3 .others-element-header img {
+    width: 40%;
+    float: left;
+    position: relative;
+    top: 50%;
+    transform: translateY(-50%)
+}
+
+.flownews-top-content-layout3 article.others-element-header:hover img {
+    opacity: 1
+}
+
+.flownews-top-content-layout3 .others-element-header .article-info-type3 {
+    width: 60%;
+    float: left;
+    padding: 20px;
+    box-sizing: border-box;
+    height: 100%
+}
+
+.flownews-top-content-layout3 .others-element-header .article-info-type3 .article-info-top {
+    height: 100%;
+    overflow: hidden
+}
+
+.flownews-top-content-layout3 .others-element-header .article-title {
+    line-height: 18px;
+    width: 100%
+}
+
+.flownews-top-content-layout3 .others-element-header .article-title a {
+    font-size: 18px;
+    color: #333;
+    white-space: nowrap;
+    width: 95%;
+    overflow: hidden;
+    text-overflow: ellipsis
+}
+
+.flownews-top-content-layout3 .others-element-header .article-title a:hover {
+    color: #c9564c
+}
+
+.flownews-top-content-layout3 .others-element-header .article-category a {
+    padding: 3px 10px;
+    margin-top: 8px
+}
+
+@media screen and (min-width: 800px) and (max-width:900px) {
+    .flownews-top-content-layout3 .first-element-header {
+        height:300px
+    }
+
+    .flownews-top-content-layout3 .others-element-header {
+        height: 80px
+    }
+
+    .flownews-top-content-layout3 .others-element-header .article-title {
+        line-height: 14px
+    }
+
+    .flownews-top-content-layout3 .others-element-header .article-title a {
+        font-size: 14px
+    }
+}
+
+@media screen and (max-width: 900px) {
+    .flownews-top-content-layout3 .others-element-header .article-title {
+        margin-bottom:0
+    }
+}
+
+@media screen and (max-width: 799px) {
+    .flownews-top-content-layout3 .first-element-header {
+        height:auto
+    }
+
+    .flownews-top-content-layout3 .first-element-header img {
+        top: 0;
+        transform: translateY(0)
+    }
+
+    .flownews-top-content-layout3 article.col-xs-4 {
+        width: 100%;
+        max-width: 100%;
+        height: auto;
+        margin: 0 0 4px
+    }
+
+    .flownews-top-content-layout3 .others-element-header img {
+        float: none;
+        width: 100%;
+        top: 0;
+        transform: translateY(0)
+    }
+
+    .flownews-top-content-layout3 .others-element-header .article-info-type3 {
+        float: none;
+        width: 100%
+    }
+
+    .flownews-top-content-layout3 .others-element-header .article-title {
+        float: none;
+        margin: 0
+    }
+
+    .flownews-vc-element-header .article-info-top {
+        margin: 0
+    }
+
+    .flownews-top-content-layout3 .first-element-header .article-info-bottom {
+        display: none
+    }
+}
+
+.flownews-top-content-layout4.owl-carousel .owl-controls {
+    opacity: 0;
+    transition: opacity .3s ease 0s;
+    height: 0;
+    margin: 0
+}
+
+.flownews-top-content-layout4 .article-info-top h2 {
+    margin-bottom: 0
+}
+
+.flownews-top-content-layout4 .article-title a {
+    margin-right: 10px
+}
+
+.flownews-top-content-layout4.owl-carousel:hover .owl-controls {
+    opacity: 1;
+    transition: opacity .3s ease 0s
+}
+
+.flownews-top-content-layout4 .owl-controls i {
+    background: #fff;
+    font-size: 20px;
+    line-height: 20px;
+    margin-top: -10px;
+    padding: 10px;
+    position: absolute;
+    top: 50%;
+    width: 40px
+}
+
+.flownews-top-content-layout4 .owl-prev i {
+    left: 0
+}
+
+.flownews-top-content-layout4 .owl-next i {
+    right: 0
+}
+
+.flownews-top-content-layout4.owl-theme .owl-controls .owl-nav [class*=owl-] {
+    background: 0 0
+}
+
+.flownews-top-content-layout4 .owl-controls i,.flownews-top-content-layout4 .owl-controls i:hover {
+    transition: all .3s ease 0s
+}
+
+@media screen and (max-width: 600px) {
+    .flownews-top-content-layout4 .article-title {
+        float:none
+    }
+
+    .flownews-top-content-layout4 .first-element-header .article-title a {
+        font-size: 16px;
+        line-height: 16px
+    }
+
+    .flownews-top-content-layout4 .article-category a {
+        padding: 3px 10px;
+        margin-top: 7px;
+        font-size: 8px;
+        display: block
+    }
+
+    .flownews-top-content-layout4 .article-info-bottom {
+        display: none
+    }
+}
+
+@media screen and (max-width: 800px) {
+    .flownews-top-content-layout4 .first-element-header .article-info-bottom {
+        display:none
+    }
+}
+
+.flownews-top-content-layout5 {
+    height: 400px;
+    overflow: hidden
+}
+
+.flownews-top-content-layout5 article {
+    height: 100%;
+    overflow: hidden;
+    background: #000
+}
+
+.flownews-top-content-layout5 article.col-xs-5 {
+    height: 198px;
+    max-width: calc(41.66666667% - 4px);
+    max-width: -webkit-calc(41.66666667% - 4px);
+    width: 41.66666667%;
+    margin-left: 4px;
+    margin-bottom: 4px
+}
+
+.flownews-top-content-layout5 .second-element-header img {
+    width: 100%
+}
+
+.flownews-element-top-content.flownews-top-content-layout5 .article-category a {
+    margin-top: 5px;
+    padding: 6px 10px
+}
+
+.flownews-element-top-content.flownews-top-content-layout5 .article-info-top h2 {
+    margin-right: 10px;
+    margin-bottom: 5px
+}
+
+@media screen and (max-width: 1200px) {
+    .flownews-top-content-layout5 {
+        height:350px
+    }
+
+    .flownews-top-content-layout5 article.col-xs-5 {
+        height: 175px
+    }
+}
+
+@media screen and (max-width: 1100px) {
+    .flownews-element-top-content.flownews-top-content-layout5 .article-category a {
+        display:inherit
+    }
+
+    .flownews-element-top-content.flownews-top-content-layout5 .article-title {
+        float: none
+    }
+
+    .flownews-top-content-layout5 {
+        height: 300px
+    }
+
+    .flownews-top-content-layout5 article.col-xs-5 {
+        height: 150px
+    }
+
+    .flownews-top-content-layout5 .second-element-header .article-info-bottom {
+        display: none
+    }
+
+    .flownews-top-content-layout5 .second-element-header .article-title {
+        line-height: 20px
+    }
+
+    .flownews-top-content-layout5 .second-element-header .article-title a {
+        font-size: 20px
+    }
+}
+
+@media screen and (min-width: 650px) and (max-width:810px) {
+    .flownews-top-content-layout5 {
+        height:200px
+    }
+
+    .flownews-top-content-layout5 article.col-xs-5 {
+        height: 100px
+    }
+
+    .flownews-top-content-layout5 .article-info {
+        position: absolute;
+        bottom: 10px;
+        left: 10px;
+        z-index: 2;
+        margin-left: 0;
+        right: 50px
+    }
+
+    .flownews-top-content-layout5 article:hover .article-info {
+        left: 10px
+    }
+
+    .flownews-top-content-layout5 .second-element-header .article-category a,.flownews-top-content-layout5 .second-element-header .article-info-bottom {
+        display: none
+    }
+
+    .flownews-top-content-layout5 .second-element-header .article-title {
+        line-height: 14px
+    }
+
+    .flownews-top-content-layout5 .second-element-header .article-title a {
+        font-size: 14px
+    }
+}
+
+@media screen and (max-width: 805px) {
+    .flownews-top-content-layout5 .first-element-header .article-info-bottom {
+        display:none
+    }
+}
+
+@media screen and (min-width: 530px) and (max-width:650px) {
+    .flownews-top-content-layout5 .article-info-bottom,.flownews-top-content-layout5 .second-element-header .article-category a,.flownews-top-content-layout5 .second-element-header .article-info-bottom {
+        display:none
+    }
+
+    .flownews-top-content-layout5 .article-info {
+        position: absolute;
+        bottom: 10px;
+        left: 10px;
+        z-index: 2;
+        margin-left: 0;
+        right: 50px
+    }
+
+    .flownews-top-content-layout5 article:hover .article-info {
+        left: 10px
+    }
+
+    .flownews-top-content-layout5 {
+        height: auto
+    }
+
+    .flownews-top-content-layout5 .col-xs-7 {
+        width: 100%;
+        height: 250px;
+        margin-bottom: 4px
+    }
+
+    .flownews-top-content-layout5 article.col-xs-5 {
+        max-width: calc(50% - 2px);
+        max-width: -webkit-calc(50% - 2px);
+        width: 50%;
+        margin-right: 2px;
+        margin-left: 0;
+        height: 80px
+    }
+
+    .flownews-top-content-layout5 article.col-xs-5:last-child {
+        margin-left: 2px;
+        margin-right: 0
+    }
+
+    .flownews-top-content-layout5 .second-element-header .article-title {
+        line-height: 10px
+    }
+
+    .flownews-top-content-layout5 .second-element-header .article-title a {
+        font-size: 10px
+    }
+}
+
+@media screen and (min-width: 400px) and (max-width:529px) {
+    .flownews-top-content-layout5 .article-info {
+        position:absolute;
+        bottom: 10px;
+        left: 10px;
+        z-index: 2;
+        margin-left: 0;
+        right: 50px
+    }
+
+    .flownews-top-content-layout5 article:hover .article-info {
+        left: 10px
+    }
+
+    .flownews-top-content-layout5 {
+        height: auto
+    }
+
+    .flownews-top-content-layout5 .col-xs-7 {
+        width: 100%;
+        height: 200px;
+        margin-bottom: 4px
+    }
+
+    .flownews-top-content-layout5 article.col-xs-5 {
+        width: 100%;
+        max-width: 100%;
+        height: 150px;
+        margin-bottom: 4px;
+        margin-left: 0;
+        margin-right: 0
+    }
+
+    .flownews-top-content-layout5 .second-element-header .article-title {
+        line-height: 22px
+    }
+
+    .flownews-top-content-layout5 .second-element-header .article-title a {
+        font-size: 22px
+    }
+
+    .flownews-top-content-layout5 .article-info-bottom {
+        display: none
+    }
+}
+
+@media screen and (max-width: 399px) {
+    .flownews-top-content-layout5 {
+        height:auto
+    }
+
+    .flownews-top-content-layout5 .col-xs-7,.flownews-top-content-layout5 article.col-xs-2,.flownews-top-content-layout5 article.col-xs-5 {
+        width: 100%;
+        max-width: 100%;
+        height: auto;
+        margin: 0 0 4px
+    }
+
+    .flownews-top-content-layout5 .article-title {
+        float: none
+    }
+
+    .flownews-top-content-layout5 .first-element-header .article-title a,.flownews-top-content-layout5 .second-element-header .article-title a {
+        font-size: 16px;
+        line-height: 16px
+    }
+
+    .flownews-top-content-layout5 .article-category a {
+        padding: 3px 10px;
+        margin-top: 7px;
+        font-size: 8px;
+        display: block
+    }
+
+    .flownews-top-content-layout5 .article-info-bottom {
+        display: none
+    }
+}
+
+.flownews-top-content-layout6 .item-header {
+    height: 500px;
+    overflow: hidden
+}
+
+.flownews-element-top-content.flownews-top-content-layout6 .article-info {
+    top: 50%;
+    left: 50%;
+    bottom: inherit;
+    -webkit-transform: translate(-50%,-50%);
+    -moz-transform: translate(-50%,-50%);
+    -ms-transform: translate(-50%,-50%);
+    -o-transform: translate(-50%,-50%);
+    transform: translate(-50%,-50%);
+    text-align: center;
+    text-transform: uppercase
+}
+
+.flownews-element-top-content.flownews-top-content-layout6 article:hover .article-info {
+    left: 50%
+}
+
+.flownews-element-top-content.flownews-top-content-layout6 .article-comments,.flownews-element-top-content.flownews-top-content-layout6 .article-data,.flownews-element-top-content.flownews-top-content-layout6 .article-features-category,.flownews-element-top-content.flownews-top-content-layout6 .article-separator,.flownews-element-top-content.flownews-top-content-layout6 .article-title {
+    float: none;
+    display: inline-block
+}
+
+.flownews-element-top-content.flownews-top-content-layout6 .article-comments {
+    margin-right: 20px
+}
+
+.flownews-element-top-content.flownews-top-content-layout6 .article-features-category {
+    margin-left: 20px
+}
+
+@media screen and (max-width: 850px) {
+    .flownews-top-content-layout6 .item-header {
+        height:300px;
+        overflow: hidden
+    }
+
+    .flownews-element-top-content.flownews-top-content-layout6 .article-title a {
+        font-size: 16px
+    }
+
+    .flownews-element-top-content.flownews-top-content-layout6 .article-info-bottom {
+        font-size: 12px
+    }
+}
+
+@media screen and (max-width: 550px) {
+    .flownews-top-content-layout6 .item-header {
+        height:200px;
+        overflow: hidden
+    }
+
+    .flownews-element-top-content.flownews-top-content-layout6 .article-title a {
+        font-size: 13px
+    }
+
+    .flownews-element-top-content.flownews-top-content-layout6 .article-info-bottom {
+        font-size: 10px
+    }
+
+    .flownews-element-top-content.flownews-top-content-layout6 .article-info-bottom .article-comments,.flownews-element-top-content.flownews-top-content-layout6 .article-info-bottom div:nth-child(4) {
+        display: none
+    }
+}
+
+.flownews-footer-wrap .flownews-footer-top,.flownews-footer-wrap .flownews-wrap-container {
+    background: #282828
+}
+
+.flownews-footer-top .flownews_widget.fnwp_social .box_social,.flownews-footer-top .flownews_widget.fnwp_tab .box_tag,.flownews-footer-top .flownews_widget.fnwp_tag .box_tag {
+    background: 0 0
+}
+
+.flownews-footer-wrap .flownews-footer-top .flownews-wrap-container {
+    padding: 50px
+}
+
+.flownews-footer-wrap .flownews-footer-top .widget li {
+    padding: 0
+}
+
+.flownews-footer-top .col-xs-4:nth-child(1) {
+    margin-right: 34px;
+    max-width: calc(33.3333% - 34px);
+    max-width: -web-kit(33.3333% - 34px)
+}
+
+.flownews-footer-top .col-xs-4:nth-child(3) {
+    margin-left: 34px;
+    width: calc(33.3333% - 34px);
+    max-width: -web-kit(33.3333% - 34px)
+}
+
+.flownews-footer-top .col-xs-4:nth-child(2) {
+    margin: 0 16px;
+    width: calc(33.33333333% - 32px);
+    max-width: -web-kit(33.3333% - 34px)
+}
+
+.flownews-posts-content-embed-wrap-post-layout-1 iframe,.flownews-posts-content-embed-wrap-post-layout-2 iframe,.flownews-posts-content-embed-wrap-post-layout-3 iframe {
+    max-width: 100%
+}
+
+.flownews-footer-top h3.widget-title,.flownews-footer-top h3.widget-title a {
+    border-bottom: 0!important;
+    border-right: 0!important;
+    border-top: 0!important;
+    color: #fff;
+    font-size: 20px;
+    font-weight: 400;
+    height: auto;
+    letter-spacing: 1.5px;
+    margin: 0 0 25px;
+    position: relative;
+    text-align: left;
+    text-transform: uppercase
+}
+
+.flownews-footer-top .flownews_widget.fnwp_archivies .box_archivies .box_archivies_item,.flownews-footer-top .flownews_widget.fnwp_categories .box_categories .cat-item,.flownews-footer-top .widget.widget_nav_menu .menu-item,.flownews-footer-wrap .flownews-footer-top .widget li {
+    border-bottom: 1px solid #454545
+}
+
+.flownews-footer-top .widget.widget_nav_menu .menu-item,.flownews-footer-wrap .flownews-footer-top .widget li {
+    padding-bottom: 15px;
+    margin-bottom: 15px
+}
+
+.flownews-footer-top .flownews_widget.fnwp_archivies .box_archivies .box_archivies_item,.flownews-footer-top .flownews_widget.fnwp_archivies a,.flownews-footer-top .flownews_widget.fnwp_categories .box_categories .cat-item,.flownews-footer-top .flownews_widget.fnwp_categories a,.flownews-footer-top .widget.widget_nav_menu .menu-item a,.flownews-footer-wrap .flownews-footer-top .widget li a {
+    color: #fff;
+    font-size: 12px;
+    font-weight: 400;
+    letter-spacing: 1.5px;
+    text-transform: uppercase;
+    transition: color .3s ease 0s
+}
+
+.flownews-footer-top .flownews_widget.fnwp_archivies .box_archivies .box_archivies_item:hover,.flownews-footer-top .flownews_widget.fnwp_archivies a:hover,.flownews-footer-top .widget.widget_nav_menu .menu-item a:hover,.flownews-footer-wrap .flownews-footer-top .widget li a:hover {
+    color: #e7685d;
+    transition: color .3s ease 0s
+}
+
+.flownews-footer-top .sub-menu,.flownews-footer-wrap .flownews-footer-top .widget li ul.children {
+    margin-left: 25px;
+    margin-top: 25px
+}
+
+.flownews-footer-top #wp-calendar {
+    text-align: center;
+    width: 100%;
+    color: #fff
+}
+
+.flownews-footer-top #wp-calendar caption,.flownews-footer-top #wp-calendar th {
+    text-align: center
+}
+
+.flownews-footer-top .calendar_wrap tr {
+    margin-bottom: 5px;
+    padding-bottom: 5px
+}
+
+.flownews-footer-top caption {
+    border: 1px solid #454545;
+    color: #fff;
+    font-size: 16px;
+    font-weight: 700;
+    letter-spacing: 1.5px;
+    margin: 0 0 25px;
+    padding: 12px;
+    text-transform: uppercase
+}
+
+.flownews-footer-top .calendar_wrap td {
+    padding: 10px 0
+}
+
+.flownews-footer-top .flownews_widget.fnwp_mega_posts .box_post,.flownews-footer-top .flownews_widget.fnwp_tab .box_post {
+    border-bottom: 1px solid #454545;
+    padding: 10px 0
+}
+
+.flownews-footer-top .flownews_widget.fnwp_mega_posts .box_post:first-child,.flownews-footer-top .flownews_widget.fnwp_tab .box_post:first-child {
+    padding-top: 0
+}
+
+.flownews-footer-top .flownews_widget.fnwp_mega_posts .box_post:last-child,.flownews-footer-top .flownews_widget.fnwp_tab .box_post:last-child {
+    padding-bottom: 0;
+    border-bottom: 0
+}
+
+.flownews-footer-top .flownews_widget.fnwp_mega_posts .container_post.ad_one_one .box-info h4 a,.flownews-footer-top .flownews_widget.fnwp_tab .container_post.ad_one_one .box-info h4 a {
+    color: #fff;
+    font-weight: 400;
+    transition: color .3s ease 0s
+}
+
+.flownews-footer-top .flownews_widget.fnwp_mega_posts .container_post.ad_one_one .box-info h4 a:hover,.flownews-footer-top .flownews_widget.fnwp_tab .container_post.ad_one_one .box-info h4 a:hover {
+    color: #e7685d;
+    transition: color .3s ease 0s
+}
+
+.flownews-footer-top .widget_author .ab-image img {
+    float: left;
+    margin-right: 15px;
+    width: 40%
+}
+
+.flownews-footer-top .about-me .ad-text {
+    text-align: left;
+    padding: 0
+}
+
+.flownews-footer-top .about-me .ad-text p {
+    color: #b9b9b9;
+    font-size: 14px
+}
+
+.flownews_widget_contact .flownews-widget-contact-image img {
+    height: 40px;
+    margin-bottom: 16px
+}
+
+.flownews_widget_contact .flownews-widget-contact-text {
+    border-bottom: 1px solid #333;
+    margin-bottom: 21px;
+    padding-bottom: 21px
+}
+
+.flownews_widget_contact .flownews-widget-contact-address-title h4 {
+    color: #fff;
+    font-size: 22px;
+    margin-bottom: 16px
+}
+
+.flownews-widget-contact-address,.flownews-widget-contact-cell-number,.flownews-widget-contact-mail,.flownews-widget-contact-tel-number {
+    font-weight: 300;
+    letter-spacing: .5px;
+    margin-bottom: 10px
+}
+
+.flownews-footer-top .widget_search input,.flownews-widget-contact-cell-number i {
+    margin-bottom: 0
+}
+
+.flownews-widget-contact-address i,.flownews-widget-contact-cell-number i,.flownews-widget-contact-mail i,.flownews-widget-contact-tel-number i {
+    color: #fff;
+    margin-right: 10px
+}
+
+.flownews-footer-top .flownews_widget.fnwp_mega_posts .img-post.ad_one_third,.flownews-footer-top .flownews_widget.fnwp_tab .img-post.ad_one_third {
+    width: 30%
+}
+
+.flownews-footer-top .flownews_widget.fnwp_mega_posts .container_post.ad_one_one .box-info.ad_two_third,.flownews-footer-top .flownews_widget.fnwp_tab .container_post.ad_one_one .box-info.ad_two_third {
+    width: 70%
+}
+
+.flownews-footer-top .flownews_widget.fnwp_tab .content_tag,.flownews-footer-top .flownews_widget.fnwp_tag .content_tag {
+    border: 1px solid #454545;
+    transition: all .3s ease 0s
+}
+
+.flownews-footer-top .flownews_widget.fnwp_tab .content_tag a,.flownews-footer-top .flownews_widget.fnwp_tag .content_tag a {
+    color: #fff;
+    letter-spacing: 1.5px;
+    transition: all .3s ease 0s
+}
+
+.flownews-footer-top .flownews_widget.fnwp_tab .content_tag:hover a,.flownews-footer-top .flownews_widget.fnwp_tag .content_tag:hover a {
+    color: #fff;
+    transition: all .3s ease 0s
+}
+
+.flownews-footer-top .flownews_widget.fnwp_tab .content_tag:hover,.flownews-footer-top .flownews_widget.fnwp_tag .content_tag:hover {
+    border: 1px solid #e7685d;
+    transition: all .3s ease 0s
+}
+
+.flownews-footer-top .flownews_widget.fnwp_social .box-icon-social.flownews-widget-social-style1 a {
+    color: #fff;
+    font-size: 26px;
+    left: 50%;
+    margin-left: -13px;
+    margin-top: -13px;
+    position: absolute;
+    top: 50%;
+    z-index: 3;
+    transition: top .3s ease 0s
+}
+
+.flownews-footer-top .flownews_widget.fnwp_social .box-icon-social.ad_one_third {
+    height: 100px
+}
+
+.flownews-footer-top .flownews_widget.fnwp_social .box-icon-social:hover a {
+    top: 40%;
+    transition: top .3s ease 0s
+}
+
+.flownews-footer-top .widget.widget_meta li a {
+    color: #fff;
+    transition: color .3s ease 0s
+}
+
+.flownews-footer-top .widget.widget_meta li a:hover {
+    color: #e7685d;
+    transition: color .3s ease 0s
+}
+
+.flownews-footer-top .widget.widget_meta ul li {
+    border-bottom: 1px solid #454545;
+    box-sizing: border-box;
+    color: #333;
+    display: inline-block;
+    font-size: 14px;
+    letter-spacing: 1px;
+    padding: 15px 0;
+    transition: background .3s ease 0s;
+    width: 100%
+}
+
+.flownews-footer-top .widget.widget_meta ul li:first-child {
+    padding-top: 0
+}
+
+.flownews-footer-top .widget.widget_meta ul li:last-child {
+    padding-bottom: 0;
+    border-bottom: 0
+}
+
+.flownews-footer-top .fnwp_tab h3.widget-title {
+    border: 1px solid #454545;
+    font-size: 14px;
+    line-height: 1
+}
+
+.flownews-footer-top .fnwp_tab .fnwp_title_popular,.flownews-footer-top .fnwp_tab .fnwp_title_recent,.flownews-footer-top .fnwp_tab .fnwp_title_tag {
+    border-right: 1px solid #454545;
+    cursor: pointer;
+    display: inline-block;
+    line-height: 1;
+    margin-right: 0;
+    padding: 8px;
+    position: relative;
+    transition: all .3s ease 0s
+}
+
+.flownews-footer-top .fnwp_tab span:last-child {
+    border-right: 0;
+    margin-right: 0
+}
+
+.flownews-footer-top .fnwp_tab span:hover {
+    background: #e7685d;
+    transition: all .3s ease 0s
+}
+
+.flownews-footer-top .flownews_widget.fnwp_tab .fnwp_tab_active {
+    background: #e7685d!important;
+    color: #fff!important
+}
+
+.flownews-footer-top .widget.widget_recent_comments {
+    color: #fff;
+    letter-spacing: 1px
+}
+
+.flownews-footer-top .widget label {
+    background: #FFF;
+    display: block
+}
+
+.flownews-footer-top .widget.widget_search label {
+    width: 70%
+}
+
+.flownews-footer-top .widget select {
+    background: #fff;
+    border: 1px solid #f4f4f4;
+    letter-spacing: 1px;
+    max-width: 100%;
+    padding: 10px;
+    width: 100%
+}
+
+.flownews-footer-top .post-password-form input,.flownews-footer-top .widget_search input {
+    border: 0;
+    font-weight: 100;
+    height: 35px;
+    padding: 5px 7px;
+    text-align: left;
+    width: 100%
+}
+
+.flownews-footer-top .search-form .search-submit {
+    background: #e7685d;
+    color: #fff;
+    text-align: center;
+    width: 28%;
+    font-weight: 700;
+    transition: all .3s ease 0s
+}
+
+.flownews-footer-top .search-form .search-submit:hover {
+    background: #c9564c!important;
+    transition: all .3s ease 0s
+}
+
+.flownews-footer-top .search-form .screen-reader-text {
+    display: none
+}
+
+.flownews-footer-top .widget_search input.search-submit:hover {
+    background: #9c8156;
+    color: #FFF
+}
+
+.flownews-footer-top .widget_search label {
+    display: inline-block
+}
+
+.flownews-footer-top .widget_tag_cloud .tagcloud a {
+    color: #fff;
+    font-weight: 400
+}
+
+.flownews-footer-top .widget_text .textwidget {
+    color: #b9b9b9;
+    font-weight: 100;
+    letter-spacing: .5px;
+    line-height: 24px;
+    margin: 0
+}
+
+.flownews-footer-top .widget_flownews_instagram .instagram-image a {
+    width: 25%;
+    height: auto;
+    opacity: 1;
+    transition: all .3s ease 0s;
+    background: #000;
+    display: inline-block
+}
+
+.flownews-footer-top .widget_flownews_instagram .instagram-image a:hover {
+    opacity: .7;
+    transition: all .3s ease 0s
+}
+
+.flownews-footer-bottom,.flownews-footer-bottom .flownews-wrap-container {
+    background: #000
+}
+
+.flownews-footer-bottom .flownews-footer-social a {
+    font-size: 12px;
+    color: #b9b9b9;
+    line-height: 32px;
+    padding: 0 10px
+}
+
+.flownews-footer-bottom .flownews-footer-social a:first-child {
+    padding-left: 0
+}
+
+.flownews-footer-bottom .flownews-footer-social a:last-child {
+    padding-right: 0
+}
+
+.flownews-footer-bottom .col-xs-12,.flownews-footer-bottom .col-xs-4,.flownews-footer-bottom .col-xs-6 {
+    padding: 5px 0;
+    font-size: 12px;
+    letter-spacing: 1px;
+    line-height: 32px;
+    text-align: center
+}
+
+.flownews-footer-bottom .col-xs-4:nth-child(1) {
+    text-align: left
+}
+
+.flownews-footer-bottom .col-xs-4:nth-child(2) {
+    color: #b9b9b9;
+    font-size: 12px;
+    letter-spacing: 1px;
+    line-height: 32px;
+    text-align: center;
+    border-left: 1px solid #282828;
+    border-right: 1px solid #282828
+}
+
+.flownews-footer-bottom .col-xs-4:nth-child(3) {
+    color: #b9b9b9;
+    font-size: 12px;
+    letter-spacing: 1px;
+    line-height: 32px;
+    text-align: right
+}
+
+.flownews-footer-bottom .flownews-top-menu li a {
+    color: #b9b9b9;
+    font-size: 12px;
+    font-weight: 400;
+    letter-spacing: 1.5px;
+    padding: 0 0 0 15px;
+    text-transform: inherit
+}
+
+.flownews-footer-bottom a:hover {
+    color: #e7685d!important;
+    transition: all .3s ease 0s
+}
+
+.flownews-footer-bottom a {
+    transition: all .3s ease 0s
+}
+
+.backtotop {
+    bottom: 15px;
+    color: #d9d9d9;
+    font-size: 12px;
+    letter-spacing: 1px;
+    line-height: 30px;
+    position: fixed;
+    right: 15px;
+    cursor: pointer;
+    transition: all .3s ease 0s;
+    z-index: 999
+}
+
+.backtotop:hover {
+    color: #e7685d;
+    transition: all .3s ease 0s
+}
+
+.backtotop .flownewsicon.fa-angle-up {
+    background: #e7685d;
+    color: #fff;
+    font-size: 20px;
+    line-height: 1;
+    padding: 12px 15px;
+    transition: all .3s ease 0s
+}
+
+.backtotop .flownewsicon.fa-angle-up:hover {
+    background: #c9564c;
+    transition: all .3s ease 0s
+}
+
+.flownews-fullwidth .flownews-search form {
+    margin-right: 0
+}
+
+.flownews-one-page-wrap-container {
+    width: 1180px;
+    margin: 0 auto
+}
+
+@media screen and (max-width: 1180px) {
+    .flownews-one-page-wrap-container {
+        width:100%
+    }
+}
+
+.flownews_advertisement_content_banner {
+    margin: 50px auto;
+    text-align: center;
+    display: block
+}
+
+.flownews-content-no-padding .flownews-container {
+    padding: 50px 0
+}
+
+.flownews-banner-footer {
+    text-align: center
+}
+
+.content_top_banner {
+    margin-top: 0
+}
+
+.flownews-posts-content-embed-wrap {
+    position: relative;
+    padding-bottom: 56.25%;
+    padding-top: 25px;
+    height: 0
+}
+
+.flownews-posts-content-embed-wrap iframe {
+    position: absolute;
+    top: 0;
+    left: 0;
+    width: 100%;
+    height: 100%
+}
+
+.flownews-posts-content-embed-wrap-post-layout-1 {
+    font-size: 0;
+    line-height: 1
+}
+
+.flownews-boxed .flownews-posts-content-embed-wrap-post-layout-1 iframe {
+    height: 550px
+}
+
+@media (max-width: 1000px) {
+    .flownews-boxed .flownews-posts-content-embed-wrap-post-layout-1 iframe {
+        height:auto
+    }
+}
+
+.flownews-posts-content-embed-wrap-post-layout-2 {
+    width: 100%;
+    margin-bottom: 50px
+}
+
+.flownews-posts-content-embed-wrap-post-layout-3 {
+    width: 100%;
+    margin: 50px 0
+}
+
+.flownews-load-more-type6.flownews-vc-posts-2-col .flownews-vc-element-posts-article-container .flownews-load-more-container .item-posts.first-element-posts {
+    padding-top: 0;
+    margin-top: 25px;
+    border-top: 0
+}
+
+#flownews-user-modal.modal {
+    position: fixed;
+    top: 0;
+    right: 0;
+    bottom: 0;
+    left: 0;
+    z-index: 1050;
+    display: none;
+    overflow: hidden;
+    -webkit-overflow-scrolling: touch;
+    outline: 0
+}
+
+#flownews-user-modal.fade {
+    opacity: 0;
+    -webkit-transition: opacity .15s linear;
+    -o-transition: opacity .15s linear;
+    transition: opacity .15s linear
+}
+
+#flownews-user-modal.fade.in {
+    opacity: 1
+}
+
+#flownews-user-modal .modal-dialog {
+    position: relative;
+    width: auto;
+    margin: 30px 10px
+}
+
+#flownews-user-modal.modal.fade .modal-dialog {
+    -webkit-transition: -webkit-transform .3s ease-out;
+    -o-transition: -o-transform .3s ease-out;
+    transition: transform .3s ease-out;
+    -webkit-transform: translate(0,-25%);
+    -ms-transform: translate(0,-25%);
+    -o-transform: translate(0,-25%);
+    transform: translate(0,-25%)
+}
+
+#flownews-user-modal.modal.in .modal-dialog {
+    -webkit-transform: translate(0,0);
+    -ms-transform: translate(0,0);
+    -o-transform: translate(0,0);
+    transform: translate(0,0)
+}
+
+#flownews-user-modal .modal-content {
+    background: #fff;
+    border: 3px solid #e7685d;
+    outline: 0;
+    position: relative;
+    -webkit-box-shadow: 0 3px 9px rgba(0,0,0,.5);
+    box-shadow: 0 3px 9px rgba(0,0,0,.5)
+}
+
+#flownews-user-modal .modal-body {
+    position: relative;
+    padding: 10% 20%
+}
+
+#flownews-user-modal .modal-footer {
+    padding: 20px 40px;
+    text-align: center;
+    border-top: 1px solid #e5e5e5
+}
+
+#flownews-user-modal .modal-backdrop {
+    position: fixed;
+    top: 0;
+    right: 0;
+    bottom: 0;
+    left: 0;
+    z-index: 1040;
+    background-color: #000
+}
+
+#flownews-user-modal .modal-backdrop.fade {
+    filter: alpha(opacity=0);
+    opacity: 0
+}
+
+#flownews-user-modal .modal-backdrop.in {
+    filter: alpha(opacity=50);
+    opacity: .5
+}
+
+.flownews-login,.flownews-login-footer,.flownews-register,.flownews-register-footer,.flownews-reset-password {
+    display: none
+}
+
+div[data-active-tab="#flownews-reset-password"] .flownews-login-footer,div[data-active-tab="#flownews-reset-password"] .flownews-reset-password,div[data-active-tab="#flownews-login"] .flownews-login,div[data-active-tab="#flownews-login"] .flownews-register-footer,div[data-active-tab="#flownews-register"] .flownews-login-footer,div[data-active-tab="#flownews-register"] .flownews-register {
+    display: block
+}
+
+.flownews-loading {
+    display: none
+}
+
+#flownews-user-modal .alert {
+    padding: 15px;
+    margin-bottom: 20px;
+    border: 1px solid transparent;
+    border-radius: 4px
+}
+
+#flownews-user-modal .alert>p,#flownews-user-modal .alert>ul {
+    margin-bottom: 0
+}
+
+#flownews-user-modal .alert-danger {
+    color: #a94442;
+    background-color: #f2dede;
+    border-color: #ebccd1
+}
+
+#flownews-user-modal .alert-warning {
+    color: #8a6d3b;
+    background-color: #fcf8e3;
+    border-color: #faebcc
+}
+
+#flownews-user-modal .alert-success {
+    color: #3c763d;
+    background-color: #dff0d8;
+    border-color: #d6e9c6
+}
+
+#flownews-user-modal .alert-info {
+    color: #31708f;
+    background-color: #d9edf7;
+    border-color: #bce8f1
+}
+
+#flownews-user-modal .close {
+    float: right;
+    font-size: 21px;
+    font-weight: 700;
+    line-height: 1;
+    color: #000;
+    text-shadow: 0 1px 0 #fff;
+    filter: alpha(opacity=20);
+    opacity: .2
+}
+
+#flownews-user-modal h3 {
+    clear: none;
+    font-weight: 400;
+    line-height: 1.4;
+    margin-bottom: 20px;
+    text-align: center
+}
+
+.flonews-login-register .form-field {
+    margin: 20px 0;
+    position: relative
+}
+
+.flownews-register-footer {
+    color: #282828;
+    font-size: 14px
+}
+
+.flownews-register-footer>a {
+    color: #282828;
+    font-weight: 700
+}
+
+.form-control.input-lg.required {
+    border: 1px solid #f4f4f4;
+    border-radius: 0;
+    box-shadow: none;
+    margin-bottom: 20px;
+    margin-top: 5px
+}
+
+#flownews_login_form .alignright {
+    display: block;
+    font-size: 12px;
+    margin-top: 8px;
+    text-align: center
+}
+
+#flownews_login_form label {
+    color: #282828;
+    font-weight: 400;
+    letter-spacing: 1.5px
+}
+
+#flownews-user-modal .btn.btn-theme.btn-lg {
+    background: #f4f4f4;
+    border-radius: 0;
+    color: #282828;
+    font-size: 14px;
+    font-weight: 700;
+    height: 50px;
+    margin-top: 10px;
+    letter-spacing: 1.5px;
+    line-height: 1;
+    text-transform: uppercase;
+    width: 100%
+}
+
+.flownews-login>hr {
+    border-color: #f4f4f4;
+    margin-bottom: 15%
+}
+
+#flownews-user-modal button.close {
+    -webkit-appearance: none;
+    background: rgba(0,0,0,0);
+    border: 0;
+    cursor: pointer;
+    padding: 0;
+    position: absolute;
+    right: 10px;
+    top: 4px
+}
+
+.flonews-login-register.col-sm-2 .flonews-login-register-logged {
+    color: #fff;
+    font-size: 12px;
+    letter-spacing: 1.2px
+}
+
+.flonews-login-register.col-sm-2 .flonews-login-register-logged a {
+    margin-left: 5px;
+    color: #747474;
+    transition: all .3s ease 0s
+}
+
+.flonews-login-register.col-sm-2 .flonews-login-register-logged a:hover {
+    color: #e7685d;
+    transition: all .3s ease 0s
+}
+
+.flonews-login-register.col-sm-2 .flonews-login-register-logout a {
+    color: #fff;
+    font-size: 12px;
+    letter-spacing: 1.5px;
+    line-height: 19px;
+    transition: all .3s ease 0s
+}
+
+.flonews-login-register.col-sm-2 .flonews-login-register-logout a:hover {
+    color: #e7685d;
+    transition: all .3s ease 0s
+}
+
+@media (min-width: 768px) {
+    #flownews-user-modal .modal-dialog {
+        margin:6% auto 0;
+        width: 520px
+    }
+
+    #flownews-user-modal .modal-content {
+        -webkit-box-shadow: 0 5px 15px rgba(0,0,0,.5);
+        box-shadow: 0 5px 15px rgba(0,0,0,.5)
+    }
+}
+
+.flownews-format-type {
+    color: #fff;
+    font-size: 25px!important;
+    opacity: .8;
+    padding: 15px;
+    position: absolute;
+    right: 0;
+    top: 0
+}
+
+.flownews-header-type3 .others-element-header .flownews-format-type,.flownews-top-content-layout3 .others-element-header .flownews-format-type,.slider-posts-item .flownews-format-type {
+    left: 0;
+    right: inherit
+}
+
+.flownews-posts-layout4 .flownews-format-type,.flownews-posts-layout5 .other-rows .flownews-format-type,.flownews-posts-type1 .others-element-header .flownews-format-type,.flownews-posts-type5 .flownews-format-type,.flownews-posts-type6 .others-post .flownews-format-type,.fnwp-tab-container .flownews-format-type,.mega-posts .flownews-format-type {
+    padding: 8px
+}
+
+.flownews-page .flownews-content ol,.flownews-page .flownews-content ul,.flownews-post .flownews-content ol,.flownews-post .flownews-content ul,ul.flownews_arrow {
+    margin: 0 0 25px 5.5%;
+    padding: 0;
+    letter-spacing: .5px
+}
+
+.flownews-page .flownews-content li,.flownews-post .flownews-content li {
+    line-height: 25px
+}
+
+.flownews-post .flownews-content ol ol,.flownews-post .flownews-content ol ul,.flownews-post .flownews-content ul ol,.flownews-post .flownews-content ul ul {
+    margin-bottom: 0
+}
+
+.comment-description li {
+    letter-spacing: 1px;
+    font-weight: 400
+}
+
+ul.flownews_arrow li {
+    list-style: none;
+    line-height: 25px
+}
+
+ul.flownews_arrow li:before {
+    display: inline-block;
+    font: normal normal normal 14px/1 flownews-FontAwesome;
+    font-size: inherit;
+    text-rendering: auto;
+    -webkit-font-smoothing: antialiased;
+    -moz-osx-font-smoothing: grayscale;
+    content: "\f105";
+    margin-right: 10px
+}
+
+ul.flownews_line {
+    margin: 0 0 25px 5.5%;
+    padding: 0
+}
+
+ul.flownews_line li {
+    list-style: none;
+    line-height: 26px;
+    padding-left: 20px;
+    position: relative
+}
+
+ul.flownews_line li:before {
+    content: "";
+    margin-right: 10px;
+    width: 10px;
+    border-bottom: 1px solid #e7685d;
+    position: absolute;
+    top: 13px;
+    left: 0
+}
+
+.flownews-blockquotes {
+    padding: 30px;
+    margin: 20px 0;
+    border-left-width: 2px;
+    border-left-style: solid;
+    display: block
+}
+
+.flownews-blockquotes-left {
+    text-align: left
+}
+
+.flownews-blockquotes-right {
+    text-align: right
+}
+
+.flownews-blockquotes-center {
+    text-align: center
+}
+
+.flownews-dropcaps.flownews-dropcaps-left span {
+    font-size: 50px;
+    line-height: 50px;
+    margin: 0 13px 0 0;
+    padding: 20px
+}
+
+.flownews-dropcaps.flownews-dropcaps-right span {
+    font-size: 50px;
+    line-height: 50px;
+    margin: 0 0 0 13px;
+    padding: 20px
+}
+
+.flownews-dropcaps-left span {
+    float: left
+}
+
+.flownews-dropcaps-right span {
+    float: right
+}
+
+.flownews-dropcaps:after {
+    content: "";
+    clear: both;
+    display: block
+}
+
+.flownews-dropcaps.flownews-dropcaps-right {
+    text-align: right
+}
+
+.flownews-columns-row [class*=col-] {
+    padding-left: 15px!important;
+    padding-right: 15px!important
+}
+
+@media screen and (max-width: 1024px) {
+    .flownews-content-no-padding .flownews-container {
+        padding:25px
+    }
+}
+
+@media (max-width: 750px) {
+    .vc_column_container>.vc_column-inner {
+        padding-left:15px!important;
+        padding-right: 15px!important
+    }
+
+    .vc_row[class*=vc_custom_] {
+        padding-left: 10px!important;
+        padding-right: 10px!important;
+        margin-left: 0!important;
+        margin-right: 0!important
+    }
+}
+
+@media (max-width: 1000px) {
+    .children .comments-list:before {
+        width:0
+    }
+
+    .comments-list ul.children {
+        padding-left: 20px!important
+    }
+
+    .comment-date,.comment-name {
+        clear: both;
+        text-align: left;
+        float: none;
+        display: block
+    }
+
+    .comment-date {
+        margin: 5px 0
+    }
+
+    .comments-list ul.children ul.children .comments-list {
+        padding-bottom: 25px
+    }
+}
+
+.flownews-menu-center .flownews-menu,.page-links {
+    text-align: center
+}
+
+@media (max-width: 400px) {
+    .comment-description td {
+        display:block
+    }
+}
+
+@media (max-width: 450px) {
+    .comment-image-author {
+        display:block;
+        float: none
+    }
+
+    .comment-info {
+        display: block;
+        width: 100%;
+        margin-left: 0;
+        margin-top: 10px
+    }
+
+    .comments-list ul.children {
+        padding-left: 10px!important
+    }
+}
+
+.flownews-footer-top .widget label.screen-reader-text,.page-links .page-links-title,.page-links .screen-reader-text {
+    display: none
+}
+
+.comment-closed {
+    margin-top: 20px
+}
+
+.related-item-container.owl-carousel .owl-item img {
+    max-height: 300px;
+    margin: 0 auto;
+    width: auto
+}
+
+.related-item-container .article-image {
+    max-height: 300px
+}
+
+.flownews-footer-top #wp-calendar caption {
+    padding: 10px 0
+}
+
+.flownews-footer-top .widget {
+    margin-bottom: 25px
+}
+
+.flownews-footer-top .children li:last-child {
+    border: 0!important;
+    margin: 0
+}
+
+.flownews-footer-top .rssSummary {
+    line-height: 20px;
+    margin-top: 10px
+}
+
+.page-links {
+    margin-top: 50px
+}
+
+.page-links a span {
+    background: rgba(0,0,0,0);
+    color: #333
+}
+
+.page-links span,.page-links span:hover {
+    background: #f4f4f4;
+    transition: all .3s ease 0s
+}
+
+.page-links span {
+    border: 1px solid #f4f4f4;
+    font-size: 12px;
+    line-height: 1;
+    margin: 0 2px;
+    padding: 10px 14px
+}
+
+.wpcf7 label {
+    font-weight: inherit
+}
+
+.wpcf7-submit {
+    background: #e7685d;
+    border: none;
+    color: #fff;
+    font-weight: 700;
+    height: 40px;
+    text-transform: uppercase
+}
+
+#review.review-wrapper {
+    margin-top: 50px
+}
+
+#review.review-wrapper ul {
+    margin: 0
+}
+
+.mc4wp-form-fields input[type=submit] {
+    background: #e7685d;
+    border: 0;
+    color: #fff;
+    font-weight: 700;
+    padding: 5px;
+    transition: all .3s ease 0s;
+    width: 100%
+}
+
+.mc4wp-form-fields input[type=email] {
+    border: 1px solid #f4f4f4;
+    margin-bottom: 5px;
+    padding: 5px;
+    text-align: center;
+    width: 100%
+}
+
+.mc4wp-form-fields input[type=submit]:hover {
+    background: #c9564c;
+    transition: all .3s ease 0s
+}
+
+.flownews-post-sticky .article-info {
+    background: #f4f4f4;
+    padding: 25px
+}
+
+.flownews-post-sticky .flownews-element-posts .article-info-top {
+    margin-top: 0
+}
+
+.theiaStickySidebar .flownews-element-posts:last-child,.theiaStickySidebar .widget:last-child {
+    margin-bottom: 0
+}
+
+.post-password-form input,.post-password-form label {
+    margin-top: 20px
+}
+
+.gallery.gallery-size-thumbnail .gallery-item img {
+    border: 0!important
+}
+
+.gallery.gallery-size-thumbnail .gallery-item .gallery-caption {
+    line-height: 22px;
+    margin-bottom: 20px;
+    margin-top: 10px
+}
+
+.flownews-no-comment-data .article-info .article-comments,.flownews-no-comment-data .article-info .article-data,.flownews-no-comment-data .article-info .article-separator,.flownews-no-comment-data .fnwp-widget .data {
+    display: none!important
+}
+
+@media screen and (min-width: 1400px) {
+    .flownews-layout-1400 .flownews-wrap-container,.flownews-layout-1600 .flownews-wrap-container {
+        width:1400px
+    }
+}
+
+@media screen and (min-width: 1600px) {
+    .flownews-layout-1600 .flownews-wrap-container {
+        width:1600px
+    }
+}
+
+.menu-item>a i.flownewsicon {
+    padding: 0;
+    font-size: 13px
+}
+
+.menu-item>a i.flownewsicon:hover {
+    background: 0 0!important
+}
+
+.flownews-menu-lefet .flownews-menu {
+    text-align: left
+}
+
+.flownews-menu-right .flownews-menu {
+    text-align: right
+}
+
+.flownews-menu-style2 nav ul li a:hover {
+    color: #FFF;
+    background: 0 0;
+    border-bottom: 0
+}
+
+.flownews-menu-style2 ul.submenu li:first-child .submenu {
+    border-top: 1px solid transparent
+}
+
+.flownews-menu-style2 nav li ul.submenu li.current-menu-ancestor>a:hover,.flownews-menu-style2 nav li ul.submenu li.current-menu-item>a:hover,.flownews-menu-style2 nav ul.submenu li a:hover {
+    color: #e7685d
+}
+
+.flownews-menu-style2 nav li ul.submenu li.current-menu-ancestor>a,.flownews-menu-style2 nav li ul.submenu li.current-menu-item>a {
+    color: #333;
+    background: #FFF
+}
+
+.flownews-menu-style2 nav>ul>li.current-menu-ancestor:before,.flownews-menu-style2 nav>ul>li.current-menu-item:before,.flownews-menu-style2 nav>ul>li.current_page_item:before,.flownews-menu-style2 nav>ul>li:hover:before {
+    background-color: #e7685d;
+    width: 100%;
+    content: '';
+    height: 3px;
+    position: absolute;
+    bottom: 0;
+    left: 0;
+    right: 0;
+    margin: 0 auto;
+    -webkit-transform: translate3d(0,0,0);
+    transform: translate3d(0,0,0);
+    -webkit-transition: width .2s ease;
+    -moz-transition: width .2s ease;
+    -o-transition: width .2s ease;
+    transition: width .2s ease
+}
+
+.flownews-menu-style2 nav li ul.submenu li.current-menu-ancestor,.flownews-menu-style2 nav li ul.submenu li.current-menu-item,.flownews-menu-style2 nav ul li.current-menu-ancestor,.flownews-menu-style2 nav ul li.current-menu-item,.flownews-menu-style2 nav ul li.current_page_item,.flownews-menu-style3 nav li ul.submenu li.current-menu-ancestor,.flownews-menu-style3 nav li ul.submenu li.current-menu-item,.flownews-menu-style3 nav ul li.current-menu-ancestor,.flownews-menu-style3 nav ul li.current-menu-item,.flownews-menu-style3 nav ul li.current_page_item {
+    background: 0 0
+}
+
+.flownews-menu-style2 .flownews-header-bottom,.flownews-menu-style2 .flownews-header-bottom .flownews-wrap-container,.flownews-menu-style2 .flownews-header-sticky {
+    border: 0
+}
+
+.flownews-menu-style2 .flownews-menu .menu-item-object-category .flownews-mega-menu,.flownews-menu-style2 .submenu,.flownews-menu-style2 ul.submenu {
+    border: 0;
+    border-top: 0
+}
+
+.flownews-menu-style3 nav ul li a:hover {
+    color: #e7685d;
+    background: 0 0;
+    border-bottom: 0
+}
+
+.flownews-menu-style3 .flownews-element-posts .article-category a:hover {
+    color: #FFF
+}
+
+.flownews-menu-style3 nav li ul.submenu li.current-menu-ancestor>a,.flownews-menu-style3 nav li ul.submenu li.current-menu-ancestor>a:hover,.flownews-menu-style3 nav li ul.submenu li.current-menu-item>a,.flownews-menu-style3 nav li ul.submenu li.current-menu-item>a:hover,.flownews-menu-style3 nav li.current-menu-ancestor>a,.flownews-menu-style3 nav ul.submenu li a:hover {
+    color: #e7685d
+}
+
+.flownews-menu-style3 nav li ul.submenu li.current-menu-ancestor>a,.flownews-menu-style3 nav li ul.submenu li.current-menu-item>a {
+    background: #FFF
+}
+
+.flownews-top-news-ticker .ticker-wrapper.has-js {
+    margin: 0;
+    padding: 0;
+    width: 100%;
+    height: 32px;
+    display: block;
+    font-size: .75em
+}
+
+.flownews-top-news-ticker .ticker {
+    width: 90%;
+    display: block;
+    position: relative;
+    overflow: hidden;
+    background-color: #000
+}
+
+.flownews-top-news-ticker .ticker-title {
+    color: #900;
+    font-weight: 700;
+    background-color: #000;
+    text-transform: uppercase;
+    position: relative;
+    z-index: 10;
+    padding: 5px 10px 0 0
+}
+
+.flownews-top-news-ticker .ticker-content {
+    font-weight: 700;
+    line-height: 15px;
+    margin-left: -8px;
+    overflow: hidden;
+    padding-top: 9px;
+    position: absolute;
+    white-space: nowrap
+}
+
+.flownews-top-news-ticker .ticker-content:focus {
+    text-decoration: none
+}
+
+.flownews-top-news-ticker .ticker-content a {
+    text-decoration: none;
+    overflow: hidden;
+    color: #fff;
+    transition: all .3s ease 0s
+}
+
+.flownews-top-news-ticker .ticker-content a:hover {
+    color: #e7685d;
+    transition: all .3s ease 0s;
+    text-decoration: none
+}
+
+.flownews-top-news-ticker .ticker-swipe {
+    padding-top: 9px;
+    position: absolute;
+    top: 0;
+    background-color: #000;
+    display: block;
+    width: 500px;
+    height: 23px
+}
+
+.flownews-top-news-ticker .ticker-swipe span {
+    margin-left: 1px;
+    background-color: #FFF;
+    height: 12px;
+    width: 1px;
+    display: block
+}
+
+.flownews-top-news-ticker .ticker-controls {
+    padding: 0;
+    list-style-type: none;
+    float: left;
+    text-align: right
+}
+
+.flownews-top-news-ticker .ticker-controls li {
+    cursor: pointer;
+    display: inline-block;
+    margin-left: 10px;
+    padding: 0
+}
+
+.flownews-top-news-ticker .js-hidden,.flownews-top-news-ticker .ticker-controls li.jnt-play-pause,.flownews-top-news-ticker .ticker-controls li.jnt-play-pause.paused {
+    display: none
+}
+
+.flownews-top-news-ticker .ticker-controls li.jnt-prev:before {
+    font: normal normal normal 14px/1 flownews-FontAwesome;
+    content: "\f104";
+    color: #FFF
+}
+
+.flownews-top-news-ticker .ticker-controls li.jnt-prev.over:before {
+    color: #e7685d
+}
+
+.flownews-top-news-ticker .ticker-controls li.jnt-next:before {
+    font: normal normal normal 14px/1 flownews-FontAwesome;
+    content: "\f105";
+    color: #FFF
+}
+
+.flownews-top-news-ticker .ticker-controls li.jnt-next.over:before {
+    color: #e7685d
+}
+
+.flownews-top-news-ticker .no-js-news {
+    padding: 10px 0 0 45px;
+    color: #F8F0DB
+}
+
+.flownews-top-news-ticker .left .ticker-content,.flownews-top-news-ticker .left .ticker-controls,.flownews-top-news-ticker .left .ticker-title,.left .ticker {
+    float: left
+}
+
+.flownews-top-news-ticker .left .ticker-controls {
+    line-height: 16px;
+    margin: 8px 0 0;
+    width: 10%
+}
+
+.flownews-top-news-ticker .right .ticker-content,.flownews-top-news-ticker .right .ticker-controls,.flownews-top-news-ticker .right .ticker-title,.right .ticker {
+    float: right
+}
+
+.flownews-top-news-ticker .right .ticker-controls {
+    padding-right: 6px
+}
+
+.flownews-top-news-ticker .right .ticker-title {
+    padding: 0 0 0 20px
+}
+
+.flownews-top-news-ticker .ticker-title span {
+    background: #e7685d;
+    color: #fff;
+    display: block;
+    font-size: 10px;
+    font-weight: 700;
+    letter-spacing: 1px;
+    line-height: 1;
+    text-transform: uppercase;
+    padding: 6px 10px
+}
diff --git a/htdocs/cgi-bin/wsrc/fonts/fontawesome-webfont.woff2 b/htdocs/cgi-bin/wsrc/fonts/fontawesome-webfont.woff2
new file mode 100644 (file)
index 0000000..4d13fc6
Binary files /dev/null and b/htdocs/cgi-bin/wsrc/fonts/fontawesome-webfont.woff2 differ
diff --git a/htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-af.js b/htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-af.js
new file mode 100644 (file)
index 0000000..8dbec3e
--- /dev/null
@@ -0,0 +1,22 @@
+/* Afrikaans translation for the jQuery Timepicker Addon */\r
+/* Written by Deon Heyns */\r
+(function($) {\r
+       $.timepicker.regional['af'] = {\r
+               timeOnlyTitle: 'Kies Tyd',\r
+               timeText: 'Tyd ',\r
+               hourText: 'Ure ',\r
+               minuteText: 'Minute',\r
+               secondText: 'Sekondes',\r
+               millisecText: 'Millisekondes',\r
+               microsecText: 'Mikrosekondes',\r
+               timezoneText: 'Tydsone',\r
+               currentText: 'Huidige Tyd',\r
+               closeText: 'Klaar',\r
+               timeFormat: 'HH:mm',\r
+               timeSuffix: '',\r
+               amNames: ['AM', 'A'],\r
+               pmNames: ['PM', 'P'],\r
+               isRTL: false\r
+       };\r
+       $.timepicker.setDefaults($.timepicker.regional['af']);\r
+})(jQuery);\r
diff --git a/htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-am.js b/htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-am.js
new file mode 100644 (file)
index 0000000..676c8b9
--- /dev/null
@@ -0,0 +1,22 @@
+/* Armenian translation for the jQuery Timepicker Addon */
+/* Written by Artavazd Avetisyan artavazda@hotmail.com */
+(function($) {
+       $.timepicker.regional['am'] = {
+               timeOnlyTitle: 'Ընտրեք ժամանակը',
+               timeText: 'Ժամանակը',
+               hourText: 'Ժամ',
+               minuteText: 'Րոպե',
+               secondText: 'Վարկյան',
+               millisecText: 'Միլիվարկյան',
+               microsecText: 'Միկրովարկյան',
+               timezoneText: 'Ժամային գոտին',
+               currentText: 'Այժմ',
+               closeText: 'Փակել',
+               timeFormat: 'HH:mm',
+               timeSuffix: '',
+               amNames: ['AM', 'A'],
+               pmNames: ['PM', 'P'],
+               isRTL: false
+       };
+       $.timepicker.setDefaults($.timepicker.regional['am']);
+})(jQuery);
diff --git a/htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-bg.js b/htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-bg.js
new file mode 100644 (file)
index 0000000..58f076e
--- /dev/null
@@ -0,0 +1,22 @@
+/* Bulgarian translation for the jQuery Timepicker Addon */
+/* Written by Plamen Kovandjiev */
+(function($) {
+       $.timepicker.regional['bg'] = {
+               timeOnlyTitle: 'Изберете време',
+               timeText: 'Време',
+               hourText: 'Час',
+               minuteText: 'Минути',
+               secondText: 'Секунди',
+               millisecText: 'Милисекунди',
+               microsecText: 'Микросекунди',
+               timezoneText: 'Часови пояс',
+               currentText: 'Сега',
+               closeText: 'Затвори',
+               timeFormat: 'HH:mm',
+               timeSuffix: '',
+               amNames: ['AM', 'A'],
+               pmNames: ['PM', 'P'],
+               isRTL: false
+       };
+       $.timepicker.setDefaults($.timepicker.regional['bg']);
+})(jQuery);
\ No newline at end of file
diff --git a/htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-ca.js b/htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-ca.js
new file mode 100644 (file)
index 0000000..84fa00e
--- /dev/null
@@ -0,0 +1,22 @@
+/* Catalan translation for the jQuery Timepicker Addon */
+/* Written by Sergi Faber */
+(function($) {
+       $.timepicker.regional['ca'] = {
+               timeOnlyTitle: 'Escollir una hora',
+               timeText: 'Hora',
+               hourText: 'Hores',
+               minuteText: 'Minuts',
+               secondText: 'Segons',
+               millisecText: 'Milisegons',
+               microsecText: 'Microsegons',
+               timezoneText: 'Fus horari',
+               currentText: 'Ara',
+               closeText: 'Tancar',
+               timeFormat: 'HH:mm',
+               timeSuffix: '',
+               amNames: ['AM', 'A'],
+               pmNames: ['PM', 'P'],
+               isRTL: false
+       };
+       $.timepicker.setDefaults($.timepicker.regional['ca']);
+})(jQuery);
diff --git a/htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-cs.js b/htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-cs.js
new file mode 100644 (file)
index 0000000..26d6ec7
--- /dev/null
@@ -0,0 +1,22 @@
+/* Czech translation for the jQuery Timepicker Addon */
+/* Written by Ondřej Vodáček */
+(function($) {
+       $.timepicker.regional['cs'] = {
+               timeOnlyTitle: 'Vyberte čas',
+               timeText: 'Čas',
+               hourText: 'Hodiny',
+               minuteText: 'Minuty',
+               secondText: 'Vteřiny',
+               millisecText: 'Milisekundy',
+               microsecText: 'Mikrosekundy',
+               timezoneText: 'Časové pásmo',
+               currentText: 'Nyní',
+               closeText: 'Zavřít',
+               timeFormat: 'HH:mm',
+               timeSuffix: '',
+               amNames: ['dop.', 'AM', 'A'],
+               pmNames: ['odp.', 'PM', 'P'],
+               isRTL: false
+       };
+       $.timepicker.setDefaults($.timepicker.regional['cs']);
+})(jQuery);
diff --git a/htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-da.js b/htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-da.js
new file mode 100644 (file)
index 0000000..5d8072b
--- /dev/null
@@ -0,0 +1,22 @@
+/* Danish translation for the jQuery Timepicker Addon */
+/* Written by Lars H. Jensen (http://www.larshj.dk) */
+(function ($) {
+    $.timepicker.regional['da'] = {
+        timeOnlyTitle: 'Vælg tid',
+        timeText: 'Tid',
+        hourText: 'Time',
+        minuteText: 'Minut',
+        secondText: 'Sekund',
+        millisecText: 'Millisekund',
+        microsecText: 'Mikrosekund',
+        timezoneText: 'Tidszone',
+        currentText: 'Nu',
+        closeText: 'Luk',
+        timeFormat: 'HH:mm',
+        timeSuffix: '',
+        amNames: ['am', 'AM', 'A'],
+        pmNames: ['pm', 'PM', 'P'],
+        isRTL: false
+    };
+    $.timepicker.setDefaults($.timepicker.regional['da']);
+})(jQuery);
diff --git a/htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-de.js b/htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-de.js
new file mode 100644 (file)
index 0000000..90c33af
--- /dev/null
@@ -0,0 +1,22 @@
+/* German translation for the jQuery Timepicker Addon */
+/* Written by Marvin */
+(function($) {
+       $.timepicker.regional['de'] = {
+               timeOnlyTitle: 'Zeit wählen',
+               timeText: 'Zeit',
+               hourText: 'Stunde',
+               minuteText: 'Minute',
+               secondText: 'Sekunde',
+               millisecText: 'Millisekunde',
+               microsecText: 'Mikrosekunde',
+               timezoneText: 'Zeitzone',
+               currentText: 'Jetzt',
+               closeText: 'Fertig',
+               timeFormat: 'HH:mm',
+               timeSuffix: '',
+               amNames: ['vorm.', 'AM', 'A'],
+               pmNames: ['nachm.', 'PM', 'P'],
+               isRTL: false
+       };
+       $.timepicker.setDefaults($.timepicker.regional['de']);
+})(jQuery);
diff --git a/htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-el.js b/htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-el.js
new file mode 100644 (file)
index 0000000..72aec6d
--- /dev/null
@@ -0,0 +1,22 @@
+/* Hellenic translation for the jQuery Timepicker Addon */
+/* Written by Christos Pontikis */
+(function($) {
+       $.timepicker.regional['el'] = {
+               timeOnlyTitle: 'Επιλογή ώρας',
+               timeText: 'Ώρα',
+               hourText: 'Ώρες',
+               minuteText: 'Λεπτά',
+               secondText: 'Δευτερόλεπτα',
+               millisecText: 'Χιλιοστοδευτερόλεπτα',
+               microsecText: 'Μικροδευτερόλεπτα',
+               timezoneText: 'Ζώνη ώρας',
+               currentText: 'Τώρα',
+               closeText: 'Κλείσιμο',
+               timeFormat: 'HH:mm',
+               timeSuffix: '',
+               amNames: ['π.μ.', 'AM', 'A'],
+               pmNames: ['μ.μ.', 'PM', 'P'],
+               isRTL: false
+       };
+       $.timepicker.setDefaults($.timepicker.regional['el']);
+})(jQuery);
\ No newline at end of file
diff --git a/htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-es.js b/htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-es.js
new file mode 100644 (file)
index 0000000..b19ba11
--- /dev/null
@@ -0,0 +1,23 @@
+/* Spanish translation for the jQuery Timepicker Addon */
+/* Written by Ianaré Sévi */
+/* Modified by Carlos Martínez */
+(function($) {
+       $.timepicker.regional['es'] = {
+               timeOnlyTitle: 'Elegir una hora',
+               timeText: 'Hora',
+               hourText: 'Horas',
+               minuteText: 'Minutos',
+               secondText: 'Segundos',
+               millisecText: 'Milisegundos',
+               microsecText: 'Microsegundos',
+               timezoneText: 'Uso horario',
+               currentText: 'Hoy',
+               closeText: 'Cerrar',
+               timeFormat: 'HH:mm',
+               timeSuffix: '',
+               amNames: ['a.m.', 'AM', 'A'],
+               pmNames: ['p.m.', 'PM', 'P'],
+               isRTL: false
+       };
+       $.timepicker.setDefaults($.timepicker.regional['es']);
+})(jQuery);
diff --git a/htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-et.js b/htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-et.js
new file mode 100644 (file)
index 0000000..b2bb766
--- /dev/null
@@ -0,0 +1,22 @@
+/* Estonian translation for the jQuery Timepicker Addon */
+/* Written by Karl Sutt (karl@sutt.ee) */
+(function($) {
+       $.timepicker.regional['et'] = {
+               timeOnlyTitle: 'Vali aeg',
+               timeText: 'Aeg',
+               hourText: 'Tund',
+               minuteText: 'Minut',
+               secondText: 'Sekund',
+               millisecText: 'Millisekundis',
+               microsecText: 'Mikrosekundis',
+               timezoneText: 'Ajavöönd',
+               currentText: 'Praegu',
+               closeText: 'Valmis',
+               timeFormat: 'HH:mm',
+               timeSuffix: '',
+               amNames: ['AM', 'A'],
+               pmNames: ['PM', 'P'],
+               isRTL: false
+       };
+       $.timepicker.setDefaults($.timepicker.regional['et']);
+})(jQuery);
diff --git a/htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-eu.js b/htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-eu.js
new file mode 100644 (file)
index 0000000..7e0c0f3
--- /dev/null
@@ -0,0 +1,23 @@
+/* Basque trannslation for JQuery Timepicker Addon */
+/* Translated by Xabi Fer */
+/* Fixed by Asier Iturralde Sarasola - iametza interaktiboa */
+(function($) {
+       $.timepicker.regional['eu'] = {
+               timeOnlyTitle: 'Aukeratu ordua',
+               timeText: 'Ordua',
+               hourText: 'Orduak',
+               minuteText: 'Minutuak',
+               secondText: 'Segundoak',
+               millisecText: 'Milisegundoak',
+               microsecText: 'Mikrosegundoak',
+               timezoneText: 'Ordu-eremua',
+               currentText: 'Orain',
+               closeText: 'Itxi',
+               timeFormat: 'HH:mm',
+               timeSuffix: '',
+               amNames: ['a.m.', 'AM', 'A'],
+               pmNames: ['p.m.', 'PM', 'P'],
+               isRTL: false
+       };
+       $.timepicker.setDefaults($.timepicker.regional['eu']);
+})(jQuery);
\ No newline at end of file
diff --git a/htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-fa.js b/htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-fa.js
new file mode 100644 (file)
index 0000000..25e2403
--- /dev/null
@@ -0,0 +1,22 @@
+/* Persian translation for the jQuery Timepicker Addon */
+/* Written by Meysam Pour Ganji */
+(function($) {
+    $.timepicker.regional['fa'] = {
+        timeOnlyTitle: 'انتخاب زمان',
+        timeText: 'زمان',
+        hourText: 'ساعت',
+        minuteText: 'دقیقه',
+        secondText: 'ثانیه',
+        millisecText: 'میلی ثانیه',
+        microsecText: 'میکرو ثانیه',
+        timezoneText: 'منطقه زمانی',
+        currentText: 'الان',
+        closeText: 'انتخاب',
+        timeFormat: 'HH:mm',
+        timeSuffix: '',
+        amNames: ['قبل ظهر', 'AM', 'A'],
+        pmNames: ['بعد ظهر', 'PM', 'P'],
+        isRTL: true
+    };
+    $.timepicker.setDefaults($.timepicker.regional['fa']);
+})(jQuery);
diff --git a/htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-fi.js b/htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-fi.js
new file mode 100644 (file)
index 0000000..4493d4c
--- /dev/null
@@ -0,0 +1,22 @@
+/* Finnish translation for the jQuery Timepicker Addon */
+/* Written by Juga Paazmaya (http://github.com/paazmaya) */
+(function($) {
+       $.timepicker.regional['fi'] = {
+               timeOnlyTitle: 'Valitse aika',
+               timeText: 'Aika',
+               hourText: 'Tunti',
+               minuteText: 'Minuutti',
+               secondText: 'Sekunti',
+               millisecText: 'Millisekunnin',
+               microsecText: 'Mikrosekuntia',
+               timezoneText: 'Aikavyöhyke',
+               currentText: 'Nyt',
+               closeText: 'Sulje',
+               timeFormat: 'HH:mm',
+               timeSuffix: '',
+               amNames: ['ap.', 'AM', 'A'],
+               pmNames: ['ip.', 'PM', 'P'],
+               isRTL: false
+       };
+       $.timepicker.setDefaults($.timepicker.regional['fi']);
+})(jQuery);
diff --git a/htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-fr.js b/htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-fr.js
new file mode 100644 (file)
index 0000000..0002517
--- /dev/null
@@ -0,0 +1,22 @@
+/* French translation for the jQuery Timepicker Addon */
+/* Written by Thomas Lété */
+(function($) {
+       $.timepicker.regional['fr'] = {
+               timeOnlyTitle: 'Choisir une heure',
+               timeText: 'Heure',
+               hourText: 'Heures',
+               minuteText: 'Minutes',
+               secondText: 'Secondes',
+               millisecText: 'Millisecondes',
+               microsecText: 'Microsecondes',
+               timezoneText: 'Fuseau horaire',
+               currentText: 'Maintenant',
+               closeText: 'Terminé',
+               timeFormat: 'HH:mm',
+               timeSuffix: '',
+               amNames: ['AM', 'A'],
+               pmNames: ['PM', 'P'],
+               isRTL: false
+       };
+       $.timepicker.setDefaults($.timepicker.regional['fr']);
+})(jQuery);
diff --git a/htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-gl.js b/htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-gl.js
new file mode 100644 (file)
index 0000000..4b9501f
--- /dev/null
@@ -0,0 +1,22 @@
+/* Galician translation for the jQuery Timepicker Addon */
+/* Written by David Barral */
+(function($) {
+       $.timepicker.regional['gl'] = {
+               timeOnlyTitle: 'Elixir unha hora',
+               timeText: 'Hora',
+               hourText: 'Horas',
+               minuteText: 'Minutos',
+               secondText: 'Segundos',
+               millisecText: 'Milisegundos',
+               microsecText: 'Microssegundos',
+               timezoneText: 'Fuso horario',
+               currentText: 'Agora',
+               closeText: 'Pechar',
+               timeFormat: 'HH:mm',
+               timeSuffix: '',
+               amNames: ['a.m.', 'AM', 'A'],
+               pmNames: ['p.m.', 'PM', 'P'],
+               isRTL: false
+       };
+       $.timepicker.setDefaults($.timepicker.regional['gl']);
+})(jQuery);
diff --git a/htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-he.js b/htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-he.js
new file mode 100644 (file)
index 0000000..9b78cbd
--- /dev/null
@@ -0,0 +1,22 @@
+/* Hebrew translation for the jQuery Timepicker Addon */
+/* Written by Lior Lapid */
+(function($) {
+       $.timepicker.regional["he"] = {
+               timeOnlyTitle: "בחירת זמן",
+               timeText: "שעה",
+               hourText: "שעות",
+               minuteText: "דקות",
+               secondText: "שניות",
+               millisecText: "אלפית השנייה",
+               microsecText: "מיקרו",
+               timezoneText: "אזור זמן",
+               currentText: "עכשיו",
+               closeText:"סגור",
+               timeFormat: "HH:mm",
+               timeSuffix: '',
+               amNames: ['לפנה"צ', 'AM', 'A'],
+               pmNames: ['אחה"צ', 'PM', 'P'],
+               isRTL: true
+       };
+       $.timepicker.setDefaults($.timepicker.regional["he"]);
+})(jQuery);
diff --git a/htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-hr.js b/htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-hr.js
new file mode 100644 (file)
index 0000000..b60f89a
--- /dev/null
@@ -0,0 +1,22 @@
+/* Croatian translation for the jQuery Timepicker Addon */
+/* Written by Mladen */
+(function($) {
+       $.timepicker.regional['hr'] = {
+               timeOnlyTitle: 'Odaberi vrijeme',
+               timeText: 'Vrijeme',
+               hourText: 'Sati',
+               minuteText: 'Minute',
+               secondText: 'Sekunde',
+               millisecText: 'Milisekunde',
+               microsecText: 'Mikrosekunde',
+               timezoneText: 'Vremenska zona',
+               currentText: 'Sada',
+               closeText: 'Gotovo',
+               timeFormat: 'HH:mm',
+               timeSuffix: '',
+               amNames: ['a.m.', 'AM', 'A'],
+               pmNames: ['p.m.', 'PM', 'P'],
+               isRTL: false
+       };
+       $.timepicker.setDefaults($.timepicker.regional['hr']);
+})(jQuery);
\ No newline at end of file
diff --git a/htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-hu.js b/htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-hu.js
new file mode 100644 (file)
index 0000000..6bdb0f4
--- /dev/null
@@ -0,0 +1,22 @@
+/* Hungarian translation for the jQuery Timepicker Addon */
+/* Written by Vas Gábor */
+(function($) {
+       $.timepicker.regional['hu'] = {
+               timeOnlyTitle: 'Válasszon időpontot',
+               timeText: 'Idő',
+               hourText: 'Óra',
+               minuteText: 'Perc',
+               secondText: 'Másodperc',
+               millisecText: 'Milliszekundumos',
+               microsecText: 'Ezredmásodperc',
+               timezoneText: 'Időzóna',
+               currentText: 'Most',
+               closeText: 'Kész',
+               timeFormat: 'HH:mm',
+               timeSuffix: '',
+               amNames: ['de.', 'AM', 'A'],
+               pmNames: ['du.', 'PM', 'P'],
+               isRTL: false
+       };
+       $.timepicker.setDefaults($.timepicker.regional['hu']);
+})(jQuery);
diff --git a/htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-id.js b/htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-id.js
new file mode 100644 (file)
index 0000000..9f21f50
--- /dev/null
@@ -0,0 +1,22 @@
+/* Indonesian translation for the jQuery Timepicker Addon */
+/* Written by Nia */
+(function($) {
+       $.timepicker.regional['id'] = {
+               timeOnlyTitle: 'Pilih Waktu',
+               timeText: 'Waktu',
+               hourText: 'Pukul',
+               minuteText: 'Menit',
+               secondText: 'Detik',
+               millisecText: 'Milidetik',
+               microsecText: 'Mikrodetik',
+               timezoneText: 'Zona Waktu',
+               currentText: 'Sekarang',
+               closeText: 'OK',
+               timeFormat: 'HH:mm',
+               timeSuffix: '',
+               amNames: ['AM', 'A'],
+               pmNames: ['PM', 'P'],
+               isRTL: false
+       };
+       $.timepicker.setDefaults($.timepicker.regional['id']);
+})(jQuery);
diff --git a/htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-it.js b/htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-it.js
new file mode 100644 (file)
index 0000000..540f41a
--- /dev/null
@@ -0,0 +1,22 @@
+/* Italian translation for the jQuery Timepicker Addon */
+/* Written by Marco "logicoder" Del Tongo */
+(function($) {
+    $.timepicker.regional['it'] = {
+        timeOnlyTitle: 'Scegli orario',
+        timeText: 'Orario',
+        hourText: 'Ora',
+        minuteText: 'Minuti',
+        secondText: 'Secondi',
+        millisecText: 'Millisecondi',
+        microsecText: 'Microsecondi',
+        timezoneText: 'Fuso orario',
+        currentText: 'Adesso',
+        closeText: 'Chiudi',
+        timeFormat: 'HH:mm',
+        timeSuffix: '',
+        amNames: ['m.', 'AM', 'A'],
+        pmNames: ['p.', 'PM', 'P'],
+        isRTL: false
+    };
+    $.timepicker.setDefaults($.timepicker.regional['it']);
+})(jQuery);
diff --git a/htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-ja.js b/htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-ja.js
new file mode 100644 (file)
index 0000000..cd3f020
--- /dev/null
@@ -0,0 +1,22 @@
+/* Japanese translation for the jQuery Timepicker Addon */
+/* Written by Jun Omae */
+(function($) {
+       $.timepicker.regional['ja'] = {
+               timeOnlyTitle: '時間を選択',
+               timeText: '時間',
+               hourText: '時',
+               minuteText: '分',
+               secondText: '秒',
+               millisecText: 'ミリ秒',
+               microsecText: 'マイクロ秒',
+               timezoneText: 'タイムゾーン',
+               currentText: '現時刻',
+               closeText: '閉じる',
+               timeFormat: 'HH:mm',
+               timeSuffix: '',
+               amNames: ['午前', 'AM', 'A'],
+               pmNames: ['午後', 'PM', 'P'],
+               isRTL: false
+       };
+       $.timepicker.setDefaults($.timepicker.regional['ja']);
+})(jQuery);
diff --git a/htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-ko.js b/htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-ko.js
new file mode 100644 (file)
index 0000000..ca85b88
--- /dev/null
@@ -0,0 +1,22 @@
+/* Korean translation for the jQuery Timepicker Addon */
+/* Written by Genie */
+(function($) {
+       $.timepicker.regional['ko'] = {
+               timeOnlyTitle: '시간 선택',
+               timeText: '시간',
+               hourText: '시',
+               minuteText: '분',
+               secondText: '초',
+               millisecText: '밀리초',
+               microsecText: '마이크로',
+               timezoneText: '표준 시간대',
+               currentText: '현재 시각',
+               closeText: '닫기',
+               timeFormat: 'tt h:mm',
+               timeSuffix: '',
+               amNames: ['오전', 'AM', 'A'],
+               pmNames: ['오후', 'PM', 'P'],
+               isRTL: false
+       };
+       $.timepicker.setDefaults($.timepicker.regional['ko']);
+})(jQuery);
diff --git a/htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-lt.js b/htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-lt.js
new file mode 100644 (file)
index 0000000..97d2b8b
--- /dev/null
@@ -0,0 +1,22 @@
+/* Lithuanian translation for the jQuery Timepicker Addon */
+/* Written by Irmantas Šiupšinskas */
+(function($) {
+       $.timepicker.regional['lt'] = {
+               timeOnlyTitle: 'Pasirinkite laiką',
+               timeText: 'Laikas',
+               hourText: 'Valandos',
+               minuteText: 'Minutės',
+               secondText: 'Sekundės',
+               millisecText: 'Milisekundės',
+               microsecText: 'Mikrosekundės',
+               timezoneText: 'Laiko zona',
+               currentText: 'Dabar',
+               closeText: 'Uždaryti',
+               timeFormat: 'HH:mm',
+               timeSuffix: '',
+               amNames: ['priešpiet', 'AM', 'A'],
+               pmNames: ['popiet', 'PM', 'P'],
+               isRTL: false
+       };
+       $.timepicker.setDefaults($.timepicker.regional['lt']);
+})(jQuery);
diff --git a/htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-lv.js b/htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-lv.js
new file mode 100644 (file)
index 0000000..0cbd6e6
--- /dev/null
@@ -0,0 +1,22 @@
+/* Latvian translation for the jQuery Timepicker Addon */
+/* Written by Dmitry Bogatykh */
+(function($) {
+       $.timepicker.regional['lv'] = {
+               timeOnlyTitle: 'Ievadiet laiku',
+               timeText: 'Laiks',
+               hourText: 'Stundas',
+               minuteText: 'Minūtes',
+               secondText: 'Sekundes',
+               millisecText: 'Milisekundes',
+               microsecText: 'Mikrosekundes',
+               timezoneText: 'Laika josla',
+               currentText: 'Tagad',
+               closeText: 'Aizvērt',
+               timeFormat: 'HH:mm',
+               timeSuffix: '',
+               amNames: ['AM', 'AM', 'A'],
+               pmNames: ['PM', 'PM', 'P'],
+               isRTL: false
+       };
+       $.timepicker.setDefaults($.timepicker.regional['lv']);
+})(jQuery);
\ No newline at end of file
diff --git a/htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-mk.js b/htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-mk.js
new file mode 100644 (file)
index 0000000..9857e01
--- /dev/null
@@ -0,0 +1,22 @@
+/* Macedonian cyrilic translation for the jQuery Timepicker Addon */
+/* Written by Vlatko Ristovski */
+(function($) {
+       $.timepicker.regional['mk'] = {
+               timeOnlyTitle: 'Одберете време',
+               timeText: 'Време',
+               hourText: 'Час',
+               minuteText: 'Минути',
+               secondText: 'Секунди',
+               millisecText: 'Милисекунди',
+               microsecText: 'Микросекунди',
+               timezoneText: 'Временска зона',
+               currentText: 'Сега',
+               closeText: 'Затвори',
+               timeFormat: 'HH:mm',
+               timeSuffix: '',
+               amNames: ['AM', 'A'],
+               pmNames: ['PM', 'P'],
+               isRTL: false
+       };
+       $.timepicker.setDefaults($.timepicker.regional['mk']);
+})(jQuery);
\ No newline at end of file
diff --git a/htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-nl.js b/htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-nl.js
new file mode 100644 (file)
index 0000000..bc71fc1
--- /dev/null
@@ -0,0 +1,22 @@
+/* Dutch translation for the jQuery Timepicker Addon */
+/* Written by Martijn van der Lee */
+(function($) {
+       $.timepicker.regional['nl'] = {
+               timeOnlyTitle: 'Tijdstip',
+               timeText: 'Tijd',
+               hourText: 'Uur',
+               minuteText: 'Minuut',
+               secondText: 'Seconde',
+               millisecText: 'Milliseconde',
+               microsecText: 'Microseconde',
+               timezoneText: 'Tijdzone',
+               currentText: 'Vandaag',
+               closeText: 'Sluiten',
+               timeFormat: 'HH:mm',
+               timeSuffix: '',
+               amNames: ['AM', 'A'],
+               pmNames: ['PM', 'P'],
+               isRTL: false
+       };
+       $.timepicker.setDefaults($.timepicker.regional['nl']);
+})(jQuery);
diff --git a/htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-no.js b/htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-no.js
new file mode 100644 (file)
index 0000000..39f32fd
--- /dev/null
@@ -0,0 +1,22 @@
+/* Norwegian translation for the jQuery Timepicker Addon */
+/* Written by Morten Hauan (http://hauan.me) */
+(function($) {
+       $.timepicker.regional['no'] = {
+               timeOnlyTitle: 'Velg tid',
+               timeText: 'Tid',
+               hourText: 'Time',
+               minuteText: 'Minutt',
+               secondText: 'Sekund',
+               millisecText: 'Millisekund',
+               microsecText: 'mikrosekund',
+               timezoneText: 'Tidssone',
+               currentText: 'Nå',
+               closeText: 'Lukk',
+               timeFormat: 'HH:mm',
+               timeSuffix: '',
+               amNames: ['am', 'AM', 'A'],
+               pmNames: ['pm', 'PM', 'P'],
+               isRTL: false
+       };
+       $.timepicker.setDefaults($.timepicker.regional['no']);
+})(jQuery);
diff --git a/htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-pl.js b/htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-pl.js
new file mode 100644 (file)
index 0000000..0a67a79
--- /dev/null
@@ -0,0 +1,22 @@
+/* Polish translation for the jQuery Timepicker Addon */
+/* Written by Michał Pena */
+(function($) {
+       $.timepicker.regional['pl'] = {
+               timeOnlyTitle: 'Wybierz godzinę',
+               timeText: 'Czas',
+               hourText: 'Godzina',
+               minuteText: 'Minuta',
+               secondText: 'Sekunda',
+               millisecText: 'Milisekunda',
+               microsecText: 'Mikrosekunda',
+               timezoneText: 'Strefa czasowa',
+               currentText: 'Teraz',
+               closeText: 'Gotowe',
+               timeFormat: 'HH:mm',
+               timeSuffix: '',
+               amNames: ['AM', 'A'],
+               pmNames: ['PM', 'P'],
+               isRTL: false
+       };
+       $.timepicker.setDefaults($.timepicker.regional['pl']);
+})(jQuery);
diff --git a/htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-pt-BR.js b/htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-pt-BR.js
new file mode 100644 (file)
index 0000000..0ad06a3
--- /dev/null
@@ -0,0 +1,22 @@
+/* Brazilian Portuguese translation for the jQuery Timepicker Addon */
+/* Written by Diogo Damiani (diogodamiani@gmail.com) */
+(function ($) {
+       $.timepicker.regional['pt-BR'] = {
+               timeOnlyTitle: 'Escolha o horário',
+               timeText: 'Horário',
+               hourText: 'Hora',
+               minuteText: 'Minutos',
+               secondText: 'Segundos',
+               millisecText: 'Milissegundos',
+               microsecText: 'Microssegundos',
+               timezoneText: 'Fuso horário',
+               currentText: 'Agora',
+               closeText: 'Fechar',
+               timeFormat: 'HH:mm',
+               timeSuffix: '',
+               amNames: ['a.m.', 'AM', 'A'],
+               pmNames: ['p.m.', 'PM', 'P'],
+               isRTL: false
+       };
+       $.timepicker.setDefaults($.timepicker.regional['pt-BR']);
+})(jQuery);
diff --git a/htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-pt.js b/htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-pt.js
new file mode 100644 (file)
index 0000000..0aa792e
--- /dev/null
@@ -0,0 +1,22 @@
+/* Portuguese translation for the jQuery Timepicker Addon */
+/* Written by Luan Almeida */
+(function($) {
+       $.timepicker.regional['pt'] = {
+               timeOnlyTitle: 'Escolha uma hora',
+               timeText: 'Hora',
+               hourText: 'Horas',
+               minuteText: 'Minutos',
+               secondText: 'Segundos',
+               millisecText: 'Milissegundos',
+               microsecText: 'Microssegundos',
+               timezoneText: 'Fuso horário',
+               currentText: 'Agora',
+               closeText: 'Fechar',
+               timeFormat: 'HH:mm',
+               timeSuffix: '',
+               amNames: ['a.m.', 'AM', 'A'],
+               pmNames: ['p.m.', 'PM', 'P'],
+               isRTL: false
+       };
+       $.timepicker.setDefaults($.timepicker.regional['pt']);
+})(jQuery);
diff --git a/htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-ro.js b/htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-ro.js
new file mode 100644 (file)
index 0000000..4f5f386
--- /dev/null
@@ -0,0 +1,22 @@
+/* Romanian translation for the jQuery Timepicker Addon */
+/* Written by Romeo Adrian Cioaba */
+(function($) {
+       $.timepicker.regional['ro'] = {
+               timeOnlyTitle: 'Alegeţi o oră',
+               timeText: 'Timp',
+               hourText: 'Ore',
+               minuteText: 'Minute',
+               secondText: 'Secunde',
+               millisecText: 'Milisecunde',
+               microsecText: 'Microsecunde',
+               timezoneText: 'Fus orar',
+               currentText: 'Acum',
+               closeText: 'Închide',
+               timeFormat: 'HH:mm',
+               timeSuffix: '',
+               amNames: ['AM', 'A'],
+               pmNames: ['PM', 'P'],
+               isRTL: false
+       };
+       $.timepicker.setDefaults($.timepicker.regional['ro']);
+})(jQuery);
diff --git a/htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-ru.js b/htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-ru.js
new file mode 100644 (file)
index 0000000..b539a73
--- /dev/null
@@ -0,0 +1,22 @@
+/* Russian translation for the jQuery Timepicker Addon */
+/* Written by Trent Richardson */
+(function($) {
+       $.timepicker.regional['ru'] = {
+               timeOnlyTitle: 'Выберите время',
+               timeText: 'Время',
+               hourText: 'Часы',
+               minuteText: 'Минуты',
+               secondText: 'Секунды',
+               millisecText: 'Миллисекунды',
+               microsecText: 'Микросекунды',
+               timezoneText: 'Часовой пояс',
+               currentText: 'Сейчас',
+               closeText: 'Закрыть',
+               timeFormat: 'HH:mm',
+               timeSuffix: '',
+               amNames: ['AM', 'A'],
+               pmNames: ['PM', 'P'],
+               isRTL: false
+       };
+       $.timepicker.setDefaults($.timepicker.regional['ru']);
+})(jQuery);
diff --git a/htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-sk.js b/htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-sk.js
new file mode 100644 (file)
index 0000000..eee0d0b
--- /dev/null
@@ -0,0 +1,22 @@
+/* Slovak translation for the jQuery Timepicker Addon */
+/* Written by David Vallner */
+(function($) {
+       $.timepicker.regional['sk'] = {
+               timeOnlyTitle: 'Zvoľte čas',
+               timeText: 'Čas',
+               hourText: 'Hodiny',
+               minuteText: 'Minúty',
+               secondText: 'Sekundy',
+               millisecText: 'Milisekundy',
+               microsecText: 'Mikrosekundy',
+               timezoneText: 'Časové pásmo',
+               currentText: 'Teraz',
+               closeText: 'Zavrieť',
+               timeFormat: 'H:m',
+               timeSuffix: '',
+               amNames: ['dop.', 'AM', 'A'],
+               pmNames: ['pop.', 'PM', 'P'],
+               isRTL: false
+       };
+       $.timepicker.setDefaults($.timepicker.regional['sk']);
+})(jQuery);
diff --git a/htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-sl.js b/htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-sl.js
new file mode 100644 (file)
index 0000000..0906b10
--- /dev/null
@@ -0,0 +1,22 @@
+/* Slovenian translation for the jQuery Timepicker Addon */
+/* Written by Hadalin (https://github.com/hadalin) */
+(function($) {
+    $.timepicker.regional['sl'] = {
+        timeOnlyTitle: 'Izberite čas',
+        timeText: 'Čas',
+        hourText: 'Ura',
+        minuteText: 'Minute',
+        secondText: 'Sekunde',
+        millisecText: 'Milisekunde',
+        microsecText: 'Mikrosekunde',
+        timezoneText: 'Časovni pas',
+        currentText: 'Sedaj',
+        closeText: 'Zapri',
+        timeFormat: 'HH:mm',
+        timeSuffix: '',
+        amNames: ['dop.', 'AM', 'A'],
+        pmNames: ['pop.', 'PM', 'P'],
+        isRTL: false
+    };
+    $.timepicker.setDefaults($.timepicker.regional['sl']);
+})(jQuery);
diff --git a/htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-sq.js b/htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-sq.js
new file mode 100644 (file)
index 0000000..d93d88c
--- /dev/null
@@ -0,0 +1,22 @@
+/* Albanian translation for the jQuery Timepicker Addon */
+/* Written by Olti Buzi */
+(function($) {
+    $.timepicker.regional['sq'] = {
+        timeOnlyTitle: 'Zgjidh orarin',
+        timeText: 'Orari',
+        hourText: 'Ora',
+        minuteText: 'Minuta',
+        secondText: 'Sekonda',
+        millisecText: 'Minisekonda',
+        microsecText: 'Mikrosekonda',
+        timezoneText: 'Zona kohore',
+        currentText: 'Tani',
+        closeText: 'Mbyll',
+        timeFormat: 'HH:mm',
+        timeSuffix: '',
+        amNames: ['m.', 'AM', 'A'],
+        pmNames: ['p.', 'PM', 'P'],
+        isRTL: false
+    };
+    $.timepicker.setDefaults($.timepicker.regional['sq']);
+})(jQuery);
\ No newline at end of file
diff --git a/htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-sr-RS.js b/htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-sr-RS.js
new file mode 100644 (file)
index 0000000..79a9803
--- /dev/null
@@ -0,0 +1,22 @@
+/* Serbian cyrilic translation for the jQuery Timepicker Addon */
+/* Written by Vladimir Jelovac */
+(function($) {
+       $.timepicker.regional['sr-RS'] = {
+               timeOnlyTitle: 'Одаберите време',
+               timeText: 'Време',
+               hourText: 'Сати',
+               minuteText: 'Минути',
+               secondText: 'Секунде',
+               millisecText: 'Милисекунде',
+               microsecText: 'Микросекунде',
+               timezoneText: 'Временска зона',
+               currentText: 'Сада',
+               closeText: 'Затвори',
+               timeFormat: 'HH:mm',
+               timeSuffix: '',
+               amNames: ['AM', 'A'],
+               pmNames: ['PM', 'P'],
+               isRTL: false
+       };
+       $.timepicker.setDefaults($.timepicker.regional['sr-RS']);
+})(jQuery);
diff --git a/htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-sr-YU.js b/htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-sr-YU.js
new file mode 100644 (file)
index 0000000..260881a
--- /dev/null
@@ -0,0 +1,22 @@
+/* Serbian latin translation for the jQuery Timepicker Addon */
+/* Written by Vladimir Jelovac */
+(function($) {
+       $.timepicker.regional['sr-YU'] = {
+               timeOnlyTitle: 'Odaberite vreme',
+               timeText: 'Vreme',
+               hourText: 'Sati',
+               minuteText: 'Minuti',
+               secondText: 'Sekunde',
+               millisecText: 'Milisekunde',
+               microsecText: 'Mikrosekunde',
+               timezoneText: 'Vremenska zona',
+               currentText: 'Sada',
+               closeText: 'Zatvori',
+               timeFormat: 'HH:mm',
+               timeSuffix: '',
+               amNames: ['AM', 'A'],
+               pmNames: ['PM', 'P'],
+               isRTL: false
+       };
+       $.timepicker.setDefaults($.timepicker.regional['sr-YU']);
+})(jQuery);
diff --git a/htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-sv.js b/htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-sv.js
new file mode 100644 (file)
index 0000000..7bb0e7e
--- /dev/null
@@ -0,0 +1,22 @@
+/* Swedish translation for the jQuery Timepicker Addon */
+/* Written by Nevon */
+(function($) {
+       $.timepicker.regional['sv'] = {
+               timeOnlyTitle: 'Välj en tid',
+               timeText: 'Tid',
+               hourText: 'Timme',
+               minuteText: 'Minut',
+               secondText: 'Sekund',
+               millisecText: 'Millisekund',
+               microsecText: 'Mikrosekund',
+               timezoneText: 'Tidszon',
+               currentText: 'Nu',
+               closeText: 'Stäng',
+               timeFormat: 'HH:mm',
+               timeSuffix: '',
+               amNames: ['AM', 'A'],
+               pmNames: ['PM', 'P'],
+               isRTL: false
+       };
+       $.timepicker.setDefaults($.timepicker.regional['sv']);
+})(jQuery);
diff --git a/htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-th.js b/htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-th.js
new file mode 100644 (file)
index 0000000..4eb93a5
--- /dev/null
@@ -0,0 +1,19 @@
+/* Thai translation for the jQuery Timepicker Addon */
+/* Written by Yote Wachirapornpongsa */
+(function($) {
+       $.timepicker.regional['th'] = {
+               timeOnlyTitle: 'เลือกเวลา',
+               timeText: 'เวลา ',
+               hourText: 'ชั่วโมง ',
+               minuteText: 'นาที',
+               secondText: 'วินาที',
+               millisecText: 'มิลลิวินาที',
+               microsecText: 'ไมโคริวินาที',
+               timezoneText: 'เขตเวลา',
+               currentText: 'เวลาปัจจุบัน',
+               closeText: 'ปิด',
+               timeFormat: 'hh:mm tt',
+               timeSuffix: ''
+       };
+       $.timepicker.setDefaults($.timepicker.regional['th']);
+})(jQuery);
\ No newline at end of file
diff --git a/htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-tr.js b/htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-tr.js
new file mode 100644 (file)
index 0000000..f426e70
--- /dev/null
@@ -0,0 +1,22 @@
+/* Turkish translation for the jQuery Timepicker Addon */
+/* Written by Fehmi Can Saglam, Edited by Goktug Ozturk */
+(function($) {
+       $.timepicker.regional['tr'] = {
+               timeOnlyTitle: 'Zaman Seçiniz',
+               timeText: 'Zaman',
+               hourText: 'Saat',
+               minuteText: 'Dakika',
+               secondText: 'Saniye',
+               millisecText: 'Milisaniye',
+               microsecText: 'Mikrosaniye',
+               timezoneText: 'Zaman Dilimi',
+               currentText: 'Şu an',
+               closeText: 'Tamam',
+               timeFormat: 'HH:mm',
+               timeSuffix: '',
+               amNames: ['ÖÖ', 'Ö'],
+               pmNames: ['ÖS', 'S'],
+               isRTL: false
+       };
+       $.timepicker.setDefaults($.timepicker.regional['tr']);
+})(jQuery);
diff --git a/htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-uk.js b/htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-uk.js
new file mode 100644 (file)
index 0000000..285c8ba
--- /dev/null
@@ -0,0 +1,22 @@
+/* Ukrainian translation for the jQuery Timepicker Addon */
+/* Written by Sergey Noskov */
+(function($) {
+       $.timepicker.regional['uk'] = {
+               timeOnlyTitle: 'Виберіть час',
+               timeText: 'Час',
+               hourText: 'Години',
+               minuteText: 'Хвилини',
+               secondText: 'Секунди',
+               millisecText: 'Мілісекунди',
+               microsecText: 'Мікросекунди',
+               timezoneText: 'Часовий пояс',
+               currentText: 'Зараз',
+               closeText: 'Закрити',
+               timeFormat: 'HH:mm',
+               timeSuffix: '',
+               amNames: ['AM', 'A'],
+               pmNames: ['PM', 'P'],
+               isRTL: false
+       };
+       $.timepicker.setDefaults($.timepicker.regional['uk']);
+})(jQuery);
diff --git a/htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-vi.js b/htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-vi.js
new file mode 100644 (file)
index 0000000..59fddae
--- /dev/null
@@ -0,0 +1,22 @@
+/* Vietnamese translation for the jQuery Timepicker Addon */
+/* Written by Nguyen Dinh Trung */
+(function($) {
+       $.timepicker.regional['vi'] = {
+               timeOnlyTitle: 'Chọn giờ',
+               timeText: 'Thời gian',
+               hourText: 'Giờ',
+               minuteText: 'Phút',
+               secondText: 'Giây',
+               millisecText: 'Mili giây',
+               microsecText: 'Micrô giây',
+               timezoneText: 'Múi giờ',
+               currentText: 'Hiện thời',
+               closeText: 'Đóng',
+               timeFormat: 'HH:mm',
+               timeSuffix: '',
+               amNames: ['SA', 'S'],
+               pmNames: ['CH', 'C'],
+               isRTL: false
+       };
+       $.timepicker.setDefaults($.timepicker.regional['vi']);
+})(jQuery);
diff --git a/htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-zh-CN.js b/htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-zh-CN.js
new file mode 100644 (file)
index 0000000..a5ca804
--- /dev/null
@@ -0,0 +1,22 @@
+/* Simplified Chinese translation for the jQuery Timepicker Addon /
+/ Written by Will Lu */
+(function($) {
+       $.timepicker.regional['zh-CN'] = {
+               timeOnlyTitle: '选择时间',
+               timeText: '时间',
+               hourText: '小时',
+               minuteText: '分钟',
+               secondText: '秒钟',
+               millisecText: '毫秒',
+               microsecText: '微秒',
+               timezoneText: '时区',
+               currentText: '现在时间',
+               closeText: '关闭',
+               timeFormat: 'HH:mm',
+               timeSuffix: '',
+               amNames: ['AM', 'A'],
+               pmNames: ['PM', 'P'],
+               isRTL: false
+       };
+       $.timepicker.setDefaults($.timepicker.regional['zh-CN']);
+})(jQuery);
diff --git a/htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-zh-TW.js b/htdocs/cgi-bin/wsrc/i18n/jquery-ui-timepicker-zh-TW.js
new file mode 100644 (file)
index 0000000..762797b
--- /dev/null
@@ -0,0 +1,22 @@
+/* Chinese translation for the jQuery Timepicker Addon */
+/* Written by Alang.lin */
+(function($) {
+       $.timepicker.regional['zh-TW'] = {
+               timeOnlyTitle: '選擇時分秒',
+               timeText: '時間',
+               hourText: '時',
+               minuteText: '分',
+               secondText: '秒',
+               millisecText: '毫秒',
+               microsecText: '微秒',
+               timezoneText: '時區',
+               currentText: '現在時間',
+               closeText: '確定',
+               timeFormat: 'HH:mm',
+               timeSuffix: '',
+               amNames: ['上午', 'AM', 'A'],
+               pmNames: ['下午', 'PM', 'P'],
+               isRTL: false
+       };
+       $.timepicker.setDefaults($.timepicker.regional['zh-TW']);
+})(jQuery);
diff --git a/htdocs/cgi-bin/wsrc/images/Sun-Rotating.gif b/htdocs/cgi-bin/wsrc/images/Sun-Rotating.gif
new file mode 100644 (file)
index 0000000..202c7c8
Binary files /dev/null and b/htdocs/cgi-bin/wsrc/images/Sun-Rotating.gif differ
diff --git a/htdocs/cgi-bin/wsrc/images/page-bck-earth.png b/htdocs/cgi-bin/wsrc/images/page-bck-earth.png
new file mode 100644 (file)
index 0000000..62998c6
Binary files /dev/null and b/htdocs/cgi-bin/wsrc/images/page-bck-earth.png differ
diff --git a/htdocs/cgi-bin/wsrc/images/page-bck-moon.png b/htdocs/cgi-bin/wsrc/images/page-bck-moon.png
new file mode 100644 (file)
index 0000000..dd460ea
Binary files /dev/null and b/htdocs/cgi-bin/wsrc/images/page-bck-moon.png differ
diff --git a/htdocs/cgi-bin/wsrc/images/page-bck-std.png b/htdocs/cgi-bin/wsrc/images/page-bck-std.png
new file mode 100644 (file)
index 0000000..649c175
Binary files /dev/null and b/htdocs/cgi-bin/wsrc/images/page-bck-std.png differ
diff --git a/htdocs/cgi-bin/wsrc/images/page-bck-sun.png b/htdocs/cgi-bin/wsrc/images/page-bck-sun.png
new file mode 100644 (file)
index 0000000..cff8cae
Binary files /dev/null and b/htdocs/cgi-bin/wsrc/images/page-bck-sun.png differ
diff --git a/htdocs/cgi-bin/wsrc/images/pingy.svg b/htdocs/cgi-bin/wsrc/images/pingy.svg
new file mode 100644 (file)
index 0000000..fe34d91
--- /dev/null
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFAC33" d="M28.068 31.355c-2.229 0-8.468.785-10.068 1.832-1.601-1.047-7.84-1.832-10.069-1.832-2.564 0-1.161 1.039-1.161 2.322C6.77 34.96 5.367 36 7.931 36c2.229 0 8.468-.785 10.069-1.832C19.601 35.215 25.84 36 28.068 36c2.565 0 1.161-1.04 1.161-2.322 0-1.283 1.405-2.323-1.161-2.323z"/><path fill="#292F33" d="M31.73 15.866c-1.25-2.499-3.152-4.995-4.942-6.723C24.337 3.711 20.759 0 18 0s-6.337 3.71-8.788 9.143c-1.791 1.729-3.693 4.224-4.943 6.724-2.438 4.876-3.116 11.426-2.078 11.944.873.437 2.324-1.552 4.208-5.082C6.667 33.604 13.446 33.678 18 33.678c4.553 0 11.333-.073 11.601-10.947 1.884 3.528 3.335 5.517 4.207 5.08 1.038-.519.361-7.069-2.078-11.945z"/><path fill="#F5F8FA" d="M21.675 6.943c-.85.607-2.172 1.186-3.675 1.186s-2.825-.578-3.675-1.185c-3.302 2.137-5.615 7.06-5.615 12.798 0 7.695 4.159 13.936 9.29 13.936 5.132 0 9.291-6.24 9.291-13.936 0-5.738-2.313-10.662-5.616-12.799z"/><path fill="#FFAC33" d="M28.452 6h-5.808C18.797 6 18 5.22 18 4.257c0-.962-.364-1.742 3.483-1.742C27.291 2.516 29.613 6 28.452 6z"/><path fill="#F5F8FA" d="M16.839 3.483c0 .642-.52 1.162-1.161 1.162-.642 0-1.161-.521-1.161-1.162 0-.641.52-1.161 1.161-1.161s1.161.52 1.161 1.161z"/></svg>
\ No newline at end of file
diff --git a/htdocs/cgi-bin/wsrc/images/std--login-bck.png b/htdocs/cgi-bin/wsrc/images/std--login-bck.png
new file mode 100644 (file)
index 0000000..624b591
Binary files /dev/null and b/htdocs/cgi-bin/wsrc/images/std--login-bck.png differ
diff --git a/htdocs/cgi-bin/wsrc/images/std-log-lbl-bck.png b/htdocs/cgi-bin/wsrc/images/std-log-lbl-bck.png
new file mode 100644 (file)
index 0000000..2d5ebe3
Binary files /dev/null and b/htdocs/cgi-bin/wsrc/images/std-log-lbl-bck.png differ
diff --git a/htdocs/cgi-bin/wsrc/images/ui-bg_diagonals-thick_90_eeeeee_40x40.png b/htdocs/cgi-bin/wsrc/images/ui-bg_diagonals-thick_90_eeeeee_40x40.png
new file mode 100644 (file)
index 0000000..ba0f85c
Binary files /dev/null and b/htdocs/cgi-bin/wsrc/images/ui-bg_diagonals-thick_90_eeeeee_40x40.png differ
diff --git a/htdocs/cgi-bin/wsrc/images/ui-bg_glass_100_e4f1fb_1x400.png b/htdocs/cgi-bin/wsrc/images/ui-bg_glass_100_e4f1fb_1x400.png
new file mode 100644 (file)
index 0000000..1de00f8
Binary files /dev/null and b/htdocs/cgi-bin/wsrc/images/ui-bg_glass_100_e4f1fb_1x400.png differ
diff --git a/htdocs/cgi-bin/wsrc/images/ui-bg_glass_50_3baae3_1x400.png b/htdocs/cgi-bin/wsrc/images/ui-bg_glass_50_3baae3_1x400.png
new file mode 100644 (file)
index 0000000..de01b43
Binary files /dev/null and b/htdocs/cgi-bin/wsrc/images/ui-bg_glass_50_3baae3_1x400.png differ
diff --git a/htdocs/cgi-bin/wsrc/images/ui-bg_glass_80_d7ebf9_1x400.png b/htdocs/cgi-bin/wsrc/images/ui-bg_glass_80_d7ebf9_1x400.png
new file mode 100644 (file)
index 0000000..cf5d835
Binary files /dev/null and b/htdocs/cgi-bin/wsrc/images/ui-bg_glass_80_d7ebf9_1x400.png differ
diff --git a/htdocs/cgi-bin/wsrc/images/ui-bg_highlight-hard_100_f2f5f7_1x100.png b/htdocs/cgi-bin/wsrc/images/ui-bg_highlight-hard_100_f2f5f7_1x100.png
new file mode 100644 (file)
index 0000000..3deba69
Binary files /dev/null and b/htdocs/cgi-bin/wsrc/images/ui-bg_highlight-hard_100_f2f5f7_1x100.png differ
diff --git a/htdocs/cgi-bin/wsrc/images/ui-bg_highlight-hard_70_000000_1x100.png b/htdocs/cgi-bin/wsrc/images/ui-bg_highlight-hard_70_000000_1x100.png
new file mode 100644 (file)
index 0000000..cf47bf9
Binary files /dev/null and b/htdocs/cgi-bin/wsrc/images/ui-bg_highlight-hard_70_000000_1x100.png differ
diff --git a/htdocs/cgi-bin/wsrc/images/ui-bg_highlight-soft_100_deedf7_1x100 (copy).png b/htdocs/cgi-bin/wsrc/images/ui-bg_highlight-soft_100_deedf7_1x100 (copy).png
new file mode 100644 (file)
index 0000000..5a36337
Binary files /dev/null and b/htdocs/cgi-bin/wsrc/images/ui-bg_highlight-soft_100_deedf7_1x100 (copy).png differ
diff --git a/htdocs/cgi-bin/wsrc/images/ui-bg_highlight-soft_100_deedf7_1x100.png b/htdocs/cgi-bin/wsrc/images/ui-bg_highlight-soft_100_deedf7_1x100.png
new file mode 100644 (file)
index 0000000..925a568
Binary files /dev/null and b/htdocs/cgi-bin/wsrc/images/ui-bg_highlight-soft_100_deedf7_1x100.png differ
diff --git a/htdocs/cgi-bin/wsrc/images/ui-bg_highlight-soft_25_ffef8f_1x100.png b/htdocs/cgi-bin/wsrc/images/ui-bg_highlight-soft_25_ffef8f_1x100.png
new file mode 100644 (file)
index 0000000..6c48948
Binary files /dev/null and b/htdocs/cgi-bin/wsrc/images/ui-bg_highlight-soft_25_ffef8f_1x100.png differ
diff --git a/htdocs/cgi-bin/wsrc/images/ui-icons_2694e8_256x240.png b/htdocs/cgi-bin/wsrc/images/ui-icons_2694e8_256x240.png
new file mode 100644 (file)
index 0000000..a3f4509
Binary files /dev/null and b/htdocs/cgi-bin/wsrc/images/ui-icons_2694e8_256x240.png differ
diff --git a/htdocs/cgi-bin/wsrc/images/ui-icons_2e83ff_256x240.png b/htdocs/cgi-bin/wsrc/images/ui-icons_2e83ff_256x240.png
new file mode 100644 (file)
index 0000000..1f5f497
Binary files /dev/null and b/htdocs/cgi-bin/wsrc/images/ui-icons_2e83ff_256x240.png differ
diff --git a/htdocs/cgi-bin/wsrc/images/ui-icons_3d80b3_256x240.png b/htdocs/cgi-bin/wsrc/images/ui-icons_3d80b3_256x240.png
new file mode 100644 (file)
index 0000000..6ed9d63
Binary files /dev/null and b/htdocs/cgi-bin/wsrc/images/ui-icons_3d80b3_256x240.png differ
diff --git a/htdocs/cgi-bin/wsrc/images/ui-icons_72a7cf_256x240.png b/htdocs/cgi-bin/wsrc/images/ui-icons_72a7cf_256x240.png
new file mode 100644 (file)
index 0000000..b7c5812
Binary files /dev/null and b/htdocs/cgi-bin/wsrc/images/ui-icons_72a7cf_256x240.png differ
diff --git a/htdocs/cgi-bin/wsrc/images/ui-icons_ffffff_256x240.png b/htdocs/cgi-bin/wsrc/images/ui-icons_ffffff_256x240.png
new file mode 100644 (file)
index 0000000..fe41d2d
Binary files /dev/null and b/htdocs/cgi-bin/wsrc/images/ui-icons_ffffff_256x240.png differ
diff --git a/htdocs/cgi-bin/wsrc/jquery-ui-sliderAccess.js b/htdocs/cgi-bin/wsrc/jquery-ui-sliderAccess.js
new file mode 100644 (file)
index 0000000..b075c66
--- /dev/null
@@ -0,0 +1,91 @@
+/*
+ * jQuery UI Slider Access
+ * By: Trent Richardson [http://trentrichardson.com]
+ * Version 0.3
+ * Last Modified: 10/20/2012
+ * 
+ * Copyright 2011 Trent Richardson
+ * Dual licensed under the MIT and GPL licenses.
+ * http://trentrichardson.com/Impromptu/GPL-LICENSE.txt
+ * http://trentrichardson.com/Impromptu/MIT-LICENSE.txt
+ * 
+ */
+ (function($){
+
+       $.fn.extend({
+               sliderAccess: function(options){
+                       options = options || {};
+                       options.touchonly = options.touchonly !== undefined? options.touchonly : true; // by default only show it if touch device
+
+                       if(options.touchonly === true && !("ontouchend" in document)){
+                               return $(this);
+                       }
+                               
+                       return $(this).each(function(i,obj){
+                                               var $t = $(this),
+                                                       o = $.extend({},{ 
+                                                                                       where: 'after',
+                                                                                       step: $t.slider('option','step'), 
+                                                                                       upIcon: 'ui-icon-plus', 
+                                                                                       downIcon: 'ui-icon-minus',
+                                                                                       text: false,
+                                                                                       upText: '+',
+                                                                                       downText: '-',
+                                                                                       buttonset: true,
+                                                                                       buttonsetTag: 'span',
+                                                                                       isRTL: false
+                                                                               }, options),
+                                                       $buttons = $('<'+ o.buttonsetTag +' class="ui-slider-access">'+
+                                                                                       '<button data-icon="'+ o.downIcon +'" data-step="'+ (o.isRTL? o.step : o.step*-1) +'">'+ o.downText +'</button>'+
+                                                                                       '<button data-icon="'+ o.upIcon +'" data-step="'+ (o.isRTL? o.step*-1 : o.step) +'">'+ o.upText +'</button>'+
+                                                                               '</'+ o.buttonsetTag +'>');
+
+                                               $buttons.children('button').each(function(j, jobj){
+                                                       var $jt = $(this);
+                                                       $jt.button({ 
+                                                                                       text: o.text, 
+                                                                                       icons: { primary: $jt.data('icon') }
+                                                                               })
+                                                               .click(function(e){
+                                                                                       var step = $jt.data('step'),
+                                                                                               curr = $t.slider('value'),
+                                                                                               newval = curr += step*1,
+                                                                                               minval = $t.slider('option','min'),
+                                                                                               maxval = $t.slider('option','max'),
+                                                                                               slidee = $t.slider("option", "slide") || function(){},
+                                                                                               stope = $t.slider("option", "stop") || function(){};
+
+                                                                                       e.preventDefault();
+                                                                                       
+                                                                                       if(newval < minval || newval > maxval){
+                                                                                               return;
+                                                                                       }
+                                                                                       
+                                                                                       $t.slider('value', newval);
+
+                                                                                       slidee.call($t, null, { value: newval });
+                                                                                       stope.call($t, null, { value: newval });
+                                                                               });
+                                               });
+                                               
+                                               // before or after                                      
+                                               $t[o.where]($buttons);
+
+                                               if(o.buttonset){
+                                                       $buttons.removeClass('ui-corner-right').removeClass('ui-corner-left').buttonset();
+                                                       $buttons.eq(0).addClass('ui-corner-left');
+                                                       $buttons.eq(1).addClass('ui-corner-right');
+                                               }
+
+                                               // adjust the width so we don't break the original layout
+                                               var bOuterWidth = $buttons.css({
+                                                                       marginLeft: ((o.where === 'after' && !o.isRTL) || (o.where === 'before' && o.isRTL)? 10:0), 
+                                                                       marginRight: ((o.where === 'before' && !o.isRTL) || (o.where === 'after' && o.isRTL)? 10:0)
+                                                               }).outerWidth(true) + 5;
+                                               var tOuterWidth = $t.outerWidth(true);
+                                               $t.css('display','inline-block').width(tOuterWidth-bOuterWidth);
+                                       });             
+               }
+       });
+
+})(jQuery);
\ No newline at end of file
diff --git a/htdocs/cgi-bin/wsrc/jquery-ui-timepicker-addon.css b/htdocs/cgi-bin/wsrc/jquery-ui-timepicker-addon.css
new file mode 100644 (file)
index 0000000..586a7f0
--- /dev/null
@@ -0,0 +1,30 @@
+.ui-timepicker-div .ui-widget-header { margin-bottom: 8px; }
+.ui-timepicker-div dl { text-align: left; }
+.ui-timepicker-div dl dt { float: left; clear:left; padding: 0 0 0 5px; }
+.ui-timepicker-div dl dd { margin: 0 10px 10px 40%; }
+.ui-timepicker-div td { font-size: 90%; }
+.ui-tpicker-grid-label { background: none; border: none; margin: 0; padding: 0; }
+.ui-timepicker-div .ui_tpicker_unit_hide{ display: none; }
+
+.ui-timepicker-div .ui_tpicker_time .ui_tpicker_time_input { background: none; color: inherit; border: none; outline: none; border-bottom: solid 1px #555; width: 95%; }
+.ui-timepicker-div .ui_tpicker_time .ui_tpicker_time_input:focus { border-bottom-color: #aaa; }
+
+.ui-timepicker-rtl{ direction: rtl; }
+.ui-timepicker-rtl dl { text-align: right; padding: 0 5px 0 0; }
+.ui-timepicker-rtl dl dt{ float: right; clear: right; }
+.ui-timepicker-rtl dl dd { margin: 0 40% 10px 10px; }
+
+/* Shortened version style */
+.ui-timepicker-div.ui-timepicker-oneLine { padding-right: 2px; }
+.ui-timepicker-div.ui-timepicker-oneLine .ui_tpicker_time, 
+.ui-timepicker-div.ui-timepicker-oneLine dt { display: none; }
+.ui-timepicker-div.ui-timepicker-oneLine .ui_tpicker_time_label { display: block; padding-top: 2px; }
+.ui-timepicker-div.ui-timepicker-oneLine dl { text-align: right; }
+.ui-timepicker-div.ui-timepicker-oneLine dl dd, 
+.ui-timepicker-div.ui-timepicker-oneLine dl dd > div { display:inline-block; margin:0; }
+.ui-timepicker-div.ui-timepicker-oneLine dl dd.ui_tpicker_minute:before,
+.ui-timepicker-div.ui-timepicker-oneLine dl dd.ui_tpicker_second:before { content:':'; display:inline-block; }
+.ui-timepicker-div.ui-timepicker-oneLine dl dd.ui_tpicker_millisec:before,
+.ui-timepicker-div.ui-timepicker-oneLine dl dd.ui_tpicker_microsec:before { content:'.'; display:inline-block; }
+.ui-timepicker-div.ui-timepicker-oneLine .ui_tpicker_unit_hide,
+.ui-timepicker-div.ui-timepicker-oneLine .ui_tpicker_unit_hide:before{ display: none; }
\ No newline at end of file
diff --git a/htdocs/cgi-bin/wsrc/jquery-ui-timepicker-addon.js b/htdocs/cgi-bin/wsrc/jquery-ui-timepicker-addon.js
new file mode 100644 (file)
index 0000000..9bbb21f
--- /dev/null
@@ -0,0 +1,2297 @@
+/*
+ * jQuery Timepicker Addon
+ * By: Trent Richardson [http://trentrichardson.com]
+ *
+ * Copyright 2013 Trent Richardson
+ * You may use this project under MIT license.
+ * http://trentrichardson.com/Impromptu/MIT-LICENSE.txt
+ */
+
+(function (factory) {
+       if (typeof define === 'function' && define.amd) {
+               define(['jquery', 'jquery-ui'], factory);
+       } else {
+               factory(jQuery);
+       }
+}(function ($) {
+
+       /*
+       * Lets not redefine timepicker, Prevent "Uncaught RangeError: Maximum call stack size exceeded"
+       */
+       $.ui.timepicker = $.ui.timepicker || {};
+       if ($.ui.timepicker.version) {
+               return;
+       }
+
+       /*
+       * Extend jQueryUI, get it started with our version number
+       */
+       $.extend($.ui, {
+               timepicker: {
+                       version: "@@version"
+               }
+       });
+
+       /*
+       * Timepicker manager.
+       * Use the singleton instance of this class, $.timepicker, to interact with the time picker.
+       * Settings for (groups of) time pickers are maintained in an instance object,
+       * allowing multiple different settings on the same page.
+       */
+       var Timepicker = function () {
+               this.regional = []; // Available regional settings, indexed by language code
+               this.regional[''] = { // Default regional settings
+                       currentText: 'Now',
+                       closeText: 'Done',
+                       amNames: ['AM', 'A'],
+                       pmNames: ['PM', 'P'],
+                       timeFormat: 'HH:mm',
+                       timeSuffix: '',
+                       timeOnlyTitle: 'Choose Time',
+                       timeText: 'Time',
+                       hourText: 'Hour',
+                       minuteText: 'Minute',
+                       secondText: 'Second',
+                       millisecText: 'Millisecond',
+                       microsecText: 'Microsecond',
+                       timezoneText: 'Time Zone',
+                       isRTL: false
+               };
+               this._defaults = { // Global defaults for all the datetime picker instances
+                       showButtonPanel: true,
+                       timeOnly: false,
+                       timeOnlyShowDate: false,
+                       showHour: null,
+                       showMinute: null,
+                       showSecond: null,
+                       showMillisec: null,
+                       showMicrosec: null,
+                       showTimezone: null,
+                       showTime: true,
+                       stepHour: 1,
+                       stepMinute: 1,
+                       stepSecond: 1,
+                       stepMillisec: 1,
+                       stepMicrosec: 1,
+                       hour: 0,
+                       minute: 0,
+                       second: 0,
+                       millisec: 0,
+                       microsec: 0,
+                       timezone: null,
+                       hourMin: 0,
+                       minuteMin: 0,
+                       secondMin: 0,
+                       millisecMin: 0,
+                       microsecMin: 0,
+                       hourMax: 23,
+                       minuteMax: 59,
+                       secondMax: 59,
+                       millisecMax: 999,
+                       microsecMax: 999,
+                       minDateTime: null,
+                       maxDateTime: null,
+                       maxTime: null,
+                       minTime: null,
+                       onSelect: null,
+                       hourGrid: 0,
+                       minuteGrid: 0,
+                       secondGrid: 0,
+                       millisecGrid: 0,
+                       microsecGrid: 0,
+                       alwaysSetTime: true,
+                       separator: ' ',
+                       altFieldTimeOnly: true,
+                       altTimeFormat: null,
+                       altSeparator: null,
+                       altTimeSuffix: null,
+                       altRedirectFocus: true,
+                       pickerTimeFormat: null,
+                       pickerTimeSuffix: null,
+                       showTimepicker: true,
+                       timezoneList: null,
+                       addSliderAccess: false,
+                       sliderAccessArgs: null,
+                       controlType: 'slider',
+                       oneLine: false,
+                       defaultValue: null,
+                       parse: 'strict',
+                       afterInject: null
+               };
+               $.extend(this._defaults, this.regional['']);
+       };
+
+       $.extend(Timepicker.prototype, {
+               $input: null,
+               $altInput: null,
+               $timeObj: null,
+               inst: null,
+               hour_slider: null,
+               minute_slider: null,
+               second_slider: null,
+               millisec_slider: null,
+               microsec_slider: null,
+               timezone_select: null,
+               maxTime: null,
+               minTime: null,
+               hour: 0,
+               minute: 0,
+               second: 0,
+               millisec: 0,
+               microsec: 0,
+               timezone: null,
+               hourMinOriginal: null,
+               minuteMinOriginal: null,
+               secondMinOriginal: null,
+               millisecMinOriginal: null,
+               microsecMinOriginal: null,
+               hourMaxOriginal: null,
+               minuteMaxOriginal: null,
+               secondMaxOriginal: null,
+               millisecMaxOriginal: null,
+               microsecMaxOriginal: null,
+               ampm: '',
+               formattedDate: '',
+               formattedTime: '',
+               formattedDateTime: '',
+               timezoneList: null,
+               units: ['hour', 'minute', 'second', 'millisec', 'microsec'],
+               support: {},
+               control: null,
+
+               /*
+               * Override the default settings for all instances of the time picker.
+               * @param  {Object} settings  object - the new settings to use as defaults (anonymous object)
+               * @return {Object} the manager object
+               */
+               setDefaults: function (settings) {
+                       extendRemove(this._defaults, settings || {});
+                       return this;
+               },
+
+               /*
+               * Create a new Timepicker instance
+               */
+               _newInst: function ($input, opts) {
+                       var tp_inst = new Timepicker(),
+                               inlineSettings = {},
+                               fns = {},
+                               overrides, i;
+
+                       for (var attrName in this._defaults) {
+                               if (this._defaults.hasOwnProperty(attrName)) {
+                                       var attrValue = $input.attr('time:' + attrName);
+                                       if (attrValue) {
+                                               try {
+                                                       inlineSettings[attrName] = eval(attrValue);
+                                               } catch (err) {
+                                                       inlineSettings[attrName] = attrValue;
+                                               }
+                                       }
+                               }
+                       }
+
+                       overrides = {
+                               beforeShow: function (input, dp_inst) {
+                                       if ($.isFunction(tp_inst._defaults.evnts.beforeShow)) {
+                                               return tp_inst._defaults.evnts.beforeShow.call($input[0], input, dp_inst, tp_inst);
+                                       }
+                               },
+                               onChangeMonthYear: function (year, month, dp_inst) {
+                                       // Update the time as well : this prevents the time from disappearing from the $input field.
+                                       // tp_inst._updateDateTime(dp_inst);
+                                       if ($.isFunction(tp_inst._defaults.evnts.onChangeMonthYear)) {
+                                               tp_inst._defaults.evnts.onChangeMonthYear.call($input[0], year, month, dp_inst, tp_inst);
+                                       }
+                               },
+                               onClose: function (dateText, dp_inst) {
+                                       if (tp_inst.timeDefined === true && $input.val() !== '') {
+                                               tp_inst._updateDateTime(dp_inst);
+                                       }
+                                       if ($.isFunction(tp_inst._defaults.evnts.onClose)) {
+                                               tp_inst._defaults.evnts.onClose.call($input[0], dateText, dp_inst, tp_inst);
+                                       }
+                               }
+                       };
+                       for (i in overrides) {
+                               if (overrides.hasOwnProperty(i)) {
+                                       fns[i] = opts[i] || this._defaults[i] || null;
+                               }
+                       }
+
+                       tp_inst._defaults = $.extend({}, this._defaults, inlineSettings, opts, overrides, {
+                               evnts: fns,
+                               timepicker: tp_inst // add timepicker as a property of datepicker: $.datepicker._get(dp_inst, 'timepicker');
+                       });
+                       tp_inst.amNames = $.map(tp_inst._defaults.amNames, function (val) {
+                               return val.toUpperCase();
+                       });
+                       tp_inst.pmNames = $.map(tp_inst._defaults.pmNames, function (val) {
+                               return val.toUpperCase();
+                       });
+
+                       // detect which units are supported
+                       tp_inst.support = detectSupport(
+                                       tp_inst._defaults.timeFormat +
+                                       (tp_inst._defaults.pickerTimeFormat ? tp_inst._defaults.pickerTimeFormat : '') +
+                                       (tp_inst._defaults.altTimeFormat ? tp_inst._defaults.altTimeFormat : ''));
+
+                       // controlType is string - key to our this._controls
+                       if (typeof(tp_inst._defaults.controlType) === 'string') {
+                               if (tp_inst._defaults.controlType === 'slider' && typeof($.ui.slider) === 'undefined') {
+                                       tp_inst._defaults.controlType = 'select';
+                               }
+                               tp_inst.control = tp_inst._controls[tp_inst._defaults.controlType];
+                       }
+                       // controlType is an object and must implement create, options, value methods
+                       else {
+                               tp_inst.control = tp_inst._defaults.controlType;
+                       }
+
+                       // prep the timezone options
+                       var timezoneList = [-720, -660, -600, -570, -540, -480, -420, -360, -300, -270, -240, -210, -180, -120, -60,
+                                       0, 60, 120, 180, 210, 240, 270, 300, 330, 345, 360, 390, 420, 480, 525, 540, 570, 600, 630, 660, 690, 720, 765, 780, 840];
+                       if (tp_inst._defaults.timezoneList !== null) {
+                               timezoneList = tp_inst._defaults.timezoneList;
+                       }
+                       var tzl = timezoneList.length, tzi = 0, tzv = null;
+                       if (tzl > 0 && typeof timezoneList[0] !== 'object') {
+                               for (; tzi < tzl; tzi++) {
+                                       tzv = timezoneList[tzi];
+                                       timezoneList[tzi] = { value: tzv, label: $.timepicker.timezoneOffsetString(tzv, tp_inst.support.iso8601) };
+                               }
+                       }
+                       tp_inst._defaults.timezoneList = timezoneList;
+
+                       // set the default units
+                       tp_inst.timezone = tp_inst._defaults.timezone !== null ? $.timepicker.timezoneOffsetNumber(tp_inst._defaults.timezone) :
+                                                       ((new Date()).getTimezoneOffset() * -1);
+                       tp_inst.hour = tp_inst._defaults.hour < tp_inst._defaults.hourMin ? tp_inst._defaults.hourMin :
+                                                       tp_inst._defaults.hour > tp_inst._defaults.hourMax ? tp_inst._defaults.hourMax : tp_inst._defaults.hour;
+                       tp_inst.minute = tp_inst._defaults.minute < tp_inst._defaults.minuteMin ? tp_inst._defaults.minuteMin :
+                                                       tp_inst._defaults.minute > tp_inst._defaults.minuteMax ? tp_inst._defaults.minuteMax : tp_inst._defaults.minute;
+                       tp_inst.second = tp_inst._defaults.second < tp_inst._defaults.secondMin ? tp_inst._defaults.secondMin :
+                                                       tp_inst._defaults.second > tp_inst._defaults.secondMax ? tp_inst._defaults.secondMax : tp_inst._defaults.second;
+                       tp_inst.millisec = tp_inst._defaults.millisec < tp_inst._defaults.millisecMin ? tp_inst._defaults.millisecMin :
+                                                       tp_inst._defaults.millisec > tp_inst._defaults.millisecMax ? tp_inst._defaults.millisecMax : tp_inst._defaults.millisec;
+                       tp_inst.microsec = tp_inst._defaults.microsec < tp_inst._defaults.microsecMin ? tp_inst._defaults.microsecMin :
+                                                       tp_inst._defaults.microsec > tp_inst._defaults.microsecMax ? tp_inst._defaults.microsecMax : tp_inst._defaults.microsec;
+                       tp_inst.ampm = '';
+                       tp_inst.$input = $input;
+
+                       if (tp_inst._defaults.altField) {
+                               tp_inst.$altInput = $(tp_inst._defaults.altField);
+                               if (tp_inst._defaults.altRedirectFocus === true) {
+                                       tp_inst.$altInput.css({
+                                               cursor: 'pointer'
+                                       }).focus(function () {
+                                               $input.trigger("focus");
+                                       });
+                               }
+                       }
+
+                       if (tp_inst._defaults.minDate === 0 || tp_inst._defaults.minDateTime === 0) {
+                               tp_inst._defaults.minDate = new Date();
+                       }
+                       if (tp_inst._defaults.maxDate === 0 || tp_inst._defaults.maxDateTime === 0) {
+                               tp_inst._defaults.maxDate = new Date();
+                       }
+
+                       // datepicker needs minDate/maxDate, timepicker needs minDateTime/maxDateTime..
+                       if (tp_inst._defaults.minDate !== undefined && tp_inst._defaults.minDate instanceof Date) {
+                               tp_inst._defaults.minDateTime = new Date(tp_inst._defaults.minDate.getTime());
+                       }
+                       if (tp_inst._defaults.minDateTime !== undefined && tp_inst._defaults.minDateTime instanceof Date) {
+                               tp_inst._defaults.minDate = new Date(tp_inst._defaults.minDateTime.getTime());
+                       }
+                       if (tp_inst._defaults.maxDate !== undefined && tp_inst._defaults.maxDate instanceof Date) {
+                               tp_inst._defaults.maxDateTime = new Date(tp_inst._defaults.maxDate.getTime());
+                       }
+                       if (tp_inst._defaults.maxDateTime !== undefined && tp_inst._defaults.maxDateTime instanceof Date) {
+                               tp_inst._defaults.maxDate = new Date(tp_inst._defaults.maxDateTime.getTime());
+                       }
+                       tp_inst.$input.bind('focus', function () {
+                               tp_inst._onFocus();
+                       });
+
+                       return tp_inst;
+               },
+
+               /*
+               * add our sliders to the calendar
+               */
+               _addTimePicker: function (dp_inst) {
+                       var currDT = $.trim((this.$altInput && this._defaults.altFieldTimeOnly) ? this.$input.val() + ' ' + this.$altInput.val() : this.$input.val());
+
+                       this.timeDefined = this._parseTime(currDT);
+                       this._limitMinMaxDateTime(dp_inst, false);
+                       this._injectTimePicker();
+                       this._afterInject();
+               },
+
+               /*
+               * parse the time string from input value or _setTime
+               */
+               _parseTime: function (timeString, withDate) {
+                       if (!this.inst) {
+                               this.inst = $.datepicker._getInst(this.$input[0]);
+                       }
+
+                       if (withDate || !this._defaults.timeOnly) {
+                               var dp_dateFormat = $.datepicker._get(this.inst, 'dateFormat');
+                               try {
+                                       var parseRes = parseDateTimeInternal(dp_dateFormat, this._defaults.timeFormat, timeString, $.datepicker._getFormatConfig(this.inst), this._defaults);
+                                       if (!parseRes.timeObj) {
+                                               return false;
+                                       }
+                                       $.extend(this, parseRes.timeObj);
+                               } catch (err) {
+                                       $.timepicker.log("Error parsing the date/time string: " + err +
+                                                                       "\ndate/time string = " + timeString +
+                                                                       "\ntimeFormat = " + this._defaults.timeFormat +
+                                                                       "\ndateFormat = " + dp_dateFormat);
+                                       return false;
+                               }
+                               return true;
+                       } else {
+                               var timeObj = $.datepicker.parseTime(this._defaults.timeFormat, timeString, this._defaults);
+                               if (!timeObj) {
+                                       return false;
+                               }
+                               $.extend(this, timeObj);
+                               return true;
+                       }
+               },
+
+               /*
+               * Handle callback option after injecting timepicker
+               */
+               _afterInject: function() {
+                       var o = this.inst.settings;
+                       if ($.isFunction(o.afterInject)) {
+                               o.afterInject.call(this);
+                       }
+               },
+
+               /*
+               * generate and inject html for timepicker into ui datepicker
+               */
+               _injectTimePicker: function () {
+                       var $dp = this.inst.dpDiv,
+                               o = this.inst.settings,
+                               tp_inst = this,
+                               litem = '',
+                               uitem = '',
+                               show = null,
+                               max = {},
+                               gridSize = {},
+                               size = null,
+                               i = 0,
+                               l = 0;
+
+                       // Prevent displaying twice
+                       if ($dp.find("div.ui-timepicker-div").length === 0 && o.showTimepicker) {
+                               var noDisplay = ' ui_tpicker_unit_hide',
+                                       html = '<div class="ui-timepicker-div' + (o.isRTL ? ' ui-timepicker-rtl' : '') + (o.oneLine && o.controlType === 'select' ? ' ui-timepicker-oneLine' : '') + '"><dl>' + '<dt class="ui_tpicker_time_label' + ((o.showTime) ? '' : noDisplay) + '">' + o.timeText + '</dt>' +
+                                                               '<dd class="ui_tpicker_time '+ ((o.showTime) ? '' : noDisplay) + '"><input class="ui_tpicker_time_input" ' + (o.timeInput ? '' : 'disabled') + '/></dd>';
+
+                               // Create the markup
+                               for (i = 0, l = this.units.length; i < l; i++) {
+                                       litem = this.units[i];
+                                       uitem = litem.substr(0, 1).toUpperCase() + litem.substr(1);
+                                       show = o['show' + uitem] !== null ? o['show' + uitem] : this.support[litem];
+
+                                       // Added by Peter Medeiros:
+                                       // - Figure out what the hour/minute/second max should be based on the step values.
+                                       // - Example: if stepMinute is 15, then minMax is 45.
+                                       max[litem] = parseInt((o[litem + 'Max'] - ((o[litem + 'Max'] - o[litem + 'Min']) % o['step' + uitem])), 10);
+                                       gridSize[litem] = 0;
+
+                                       html += '<dt class="ui_tpicker_' + litem + '_label' + (show ? '' : noDisplay) + '">' + o[litem + 'Text'] + '</dt>' +
+                                                               '<dd class="ui_tpicker_' + litem + (show ? '' : noDisplay) + '"><div class="ui_tpicker_' + litem + '_slider' + (show ? '' : noDisplay) + '"></div>';
+
+                                       if (show && o[litem + 'Grid'] > 0) {
+                                               html += '<div style="padding-left: 1px"><table class="ui-tpicker-grid-label"><tr>';
+
+                                               if (litem === 'hour') {
+                                                       for (var h = o[litem + 'Min']; h <= max[litem]; h += parseInt(o[litem + 'Grid'], 10)) {
+                                                               gridSize[litem]++;
+                                                               var tmph = $.datepicker.formatTime(this.support.ampm ? 'hht' : 'HH', {hour: h}, o);
+                                                               html += '<td data-for="' + litem + '">' + tmph + '</td>';
+                                                       }
+                                               }
+                                               else {
+                                                       for (var m = o[litem + 'Min']; m <= max[litem]; m += parseInt(o[litem + 'Grid'], 10)) {
+                                                               gridSize[litem]++;
+                                                               html += '<td data-for="' + litem + '">' + ((m < 10) ? '0' : '') + m + '</td>';
+                                                       }
+                                               }
+
+                                               html += '</tr></table></div>';
+                                       }
+                                       html += '</dd>';
+                               }
+
+                               // Timezone
+                               var showTz = o.showTimezone !== null ? o.showTimezone : this.support.timezone;
+                               html += '<dt class="ui_tpicker_timezone_label' + (showTz ? '' : noDisplay) + '">' + o.timezoneText + '</dt>';
+                               html += '<dd class="ui_tpicker_timezone' + (showTz ? '' : noDisplay) + '"></dd>';
+
+                               // Create the elements from string
+                               html += '</dl></div>';
+                               var $tp = $(html);
+
+                               // if we only want time picker...
+                               if (o.timeOnly === true) {
+                                       $tp.prepend('<div class="ui-widget-header ui-helper-clearfix ui-corner-all">' + '<div class="ui-datepicker-title">' + o.timeOnlyTitle + '</div>' + '</div>');
+                                       $dp.find('.ui-datepicker-header, .ui-datepicker-calendar').hide();
+                               }
+
+                               // add sliders, adjust grids, add events
+                               for (i = 0, l = tp_inst.units.length; i < l; i++) {
+                                       litem = tp_inst.units[i];
+                                       uitem = litem.substr(0, 1).toUpperCase() + litem.substr(1);
+                                       show = o['show' + uitem] !== null ? o['show' + uitem] : this.support[litem];
+
+                                       // add the slider
+                                       tp_inst[litem + '_slider'] = tp_inst.control.create(tp_inst, $tp.find('.ui_tpicker_' + litem + '_slider'), litem, tp_inst[litem], o[litem + 'Min'], max[litem], o['step' + uitem]);
+
+                                       // adjust the grid and add click event
+                                       if (show && o[litem + 'Grid'] > 0) {
+                                               size = 100 * gridSize[litem] * o[litem + 'Grid'] / (max[litem] - o[litem + 'Min']);
+                                               $tp.find('.ui_tpicker_' + litem + ' table').css({
+                                                       width: size + "%",
+                                                       marginLeft: o.isRTL ? '0' : ((size / (-2 * gridSize[litem])) + "%"),
+                                                       marginRight: o.isRTL ? ((size / (-2 * gridSize[litem])) + "%") : '0',
+                                                       borderCollapse: 'collapse'
+                                               }).find("td").click(function (e) {
+                                                               var $t = $(this),
+                                                                       h = $t.html(),
+                                                                       n = parseInt(h.replace(/[^0-9]/g), 10),
+                                                                       ap = h.replace(/[^apm]/ig),
+                                                                       f = $t.data('for'); // loses scope, so we use data-for
+
+                                                               if (f === 'hour') {
+                                                                       if (ap.indexOf('p') !== -1 && n < 12) {
+                                                                               n += 12;
+                                                                       }
+                                                                       else {
+                                                                               if (ap.indexOf('a') !== -1 && n === 12) {
+                                                                                       n = 0;
+                                                                               }
+                                                                       }
+                                                               }
+
+                                                               tp_inst.control.value(tp_inst, tp_inst[f + '_slider'], litem, n);
+
+                                                               tp_inst._onTimeChange();
+                                                               tp_inst._onSelectHandler();
+                                                       }).css({
+                                                               cursor: 'pointer',
+                                                               width: (100 / gridSize[litem]) + '%',
+                                                               textAlign: 'center',
+                                                               overflow: 'hidden'
+                                                       });
+                                       } // end if grid > 0
+                               } // end for loop
+
+                               // Add timezone options
+                               this.timezone_select = $tp.find('.ui_tpicker_timezone').append('<select></select>').find("select");
+                               $.fn.append.apply(this.timezone_select,
+                               $.map(o.timezoneList, function (val, idx) {
+                                       return $("<option />").val(typeof val === "object" ? val.value : val).text(typeof val === "object" ? val.label : val);
+                               }));
+                               if (typeof(this.timezone) !== "undefined" && this.timezone !== null && this.timezone !== "") {
+                                       var local_timezone = (new Date(this.inst.selectedYear, this.inst.selectedMonth, this.inst.selectedDay, 12)).getTimezoneOffset() * -1;
+                                       if (local_timezone === this.timezone) {
+                                               selectLocalTimezone(tp_inst);
+                                       } else {
+                                               this.timezone_select.val(this.timezone);
+                                       }
+                               } else {
+                                       if (typeof(this.hour) !== "undefined" && this.hour !== null && this.hour !== "") {
+                                               this.timezone_select.val(o.timezone);
+                                       } else {
+                                               selectLocalTimezone(tp_inst);
+                                       }
+                               }
+                               this.timezone_select.change(function () {
+                                       tp_inst._onTimeChange();
+                                       tp_inst._onSelectHandler();
+                                       tp_inst._afterInject();
+                               });
+                               // End timezone options
+
+                               // inject timepicker into datepicker
+                               var $buttonPanel = $dp.find('.ui-datepicker-buttonpane');
+                               if ($buttonPanel.length) {
+                                       $buttonPanel.before($tp);
+                               } else {
+                                       $dp.append($tp);
+                               }
+
+                               this.$timeObj = $tp.find('.ui_tpicker_time_input');
+                               this.$timeObj.change(function () {
+                                       var timeFormat = tp_inst.inst.settings.timeFormat;
+                                       var parsedTime = $.datepicker.parseTime(timeFormat, this.value);
+                                       var update = new Date();
+                                       if (parsedTime) {
+                                               update.setHours(parsedTime.hour);
+                                               update.setMinutes(parsedTime.minute);
+                                               update.setSeconds(parsedTime.second);
+                                               $.datepicker._setTime(tp_inst.inst, update);
+                                       } else {
+                                               this.value = tp_inst.formattedTime;
+                                               this.blur();
+                                       }
+                               });
+
+                               if (this.inst !== null) {
+                                       var timeDefined = this.timeDefined;
+                                       this._onTimeChange();
+                                       this.timeDefined = timeDefined;
+                               }
+
+                               // slideAccess integration: http://trentrichardson.com/2011/11/11/jquery-ui-sliders-and-touch-accessibility/
+                               if (this._defaults.addSliderAccess) {
+                                       var sliderAccessArgs = this._defaults.sliderAccessArgs,
+                                               rtl = this._defaults.isRTL;
+                                       sliderAccessArgs.isRTL = rtl;
+
+                                       setTimeout(function () { // fix for inline mode
+                                               if ($tp.find('.ui-slider-access').length === 0) {
+                                                       $tp.find('.ui-slider:visible').sliderAccess(sliderAccessArgs);
+
+                                                       // fix any grids since sliders are shorter
+                                                       var sliderAccessWidth = $tp.find('.ui-slider-access:eq(0)').outerWidth(true);
+                                                       if (sliderAccessWidth) {
+                                                               $tp.find('table:visible').each(function () {
+                                                                       var $g = $(this),
+                                                                               oldWidth = $g.outerWidth(),
+                                                                               oldMarginLeft = $g.css(rtl ? 'marginRight' : 'marginLeft').toString().replace('%', ''),
+                                                                               newWidth = oldWidth - sliderAccessWidth,
+                                                                               newMarginLeft = ((oldMarginLeft * newWidth) / oldWidth) + '%',
+                                                                               css = { width: newWidth, marginRight: 0, marginLeft: 0 };
+                                                                       css[rtl ? 'marginRight' : 'marginLeft'] = newMarginLeft;
+                                                                       $g.css(css);
+                                                               });
+                                                       }
+                                               }
+                                       }, 10);
+                               }
+                               // end slideAccess integration
+
+                               tp_inst._limitMinMaxDateTime(this.inst, true);
+                       }
+               },
+
+               /*
+               * This function tries to limit the ability to go outside the
+               * min/max date range
+               */
+               _limitMinMaxDateTime: function (dp_inst, adjustSliders) {
+                       var o = this._defaults,
+                               dp_date = new Date(dp_inst.selectedYear, dp_inst.selectedMonth, dp_inst.selectedDay);
+
+                       if (!this._defaults.showTimepicker) {
+                               return;
+                       } // No time so nothing to check here
+
+                       if ($.datepicker._get(dp_inst, 'minDateTime') !== null && $.datepicker._get(dp_inst, 'minDateTime') !== undefined && dp_date) {
+                               var minDateTime = $.datepicker._get(dp_inst, 'minDateTime'),
+                                       minDateTimeDate = new Date(minDateTime.getFullYear(), minDateTime.getMonth(), minDateTime.getDate(), 0, 0, 0, 0);
+
+                               if (this.hourMinOriginal === null || this.minuteMinOriginal === null || this.secondMinOriginal === null || this.millisecMinOriginal === null || this.microsecMinOriginal === null) {
+                                       this.hourMinOriginal = o.hourMin;
+                                       this.minuteMinOriginal = o.minuteMin;
+                                       this.secondMinOriginal = o.secondMin;
+                                       this.millisecMinOriginal = o.millisecMin;
+                                       this.microsecMinOriginal = o.microsecMin;
+                               }
+
+                               if (dp_inst.settings.timeOnly || minDateTimeDate.getTime() === dp_date.getTime()) {
+                                       this._defaults.hourMin = minDateTime.getHours();
+                                       if (this.hour <= this._defaults.hourMin) {
+                                               this.hour = this._defaults.hourMin;
+                                               this._defaults.minuteMin = minDateTime.getMinutes();
+                                               if (this.minute <= this._defaults.minuteMin) {
+                                                       this.minute = this._defaults.minuteMin;
+                                                       this._defaults.secondMin = minDateTime.getSeconds();
+                                                       if (this.second <= this._defaults.secondMin) {
+                                                               this.second = this._defaults.secondMin;
+                                                               this._defaults.millisecMin = minDateTime.getMilliseconds();
+                                                               if (this.millisec <= this._defaults.millisecMin) {
+                                                                       this.millisec = this._defaults.millisecMin;
+                                                                       this._defaults.microsecMin = minDateTime.getMicroseconds();
+                                                               } else {
+                                                                       if (this.microsec < this._defaults.microsecMin) {
+                                                                               this.microsec = this._defaults.microsecMin;
+                                                                       }
+                                                                       this._defaults.microsecMin = this.microsecMinOriginal;
+                                                               }
+                                                       } else {
+                                                               this._defaults.millisecMin = this.millisecMinOriginal;
+                                                               this._defaults.microsecMin = this.microsecMinOriginal;
+                                                       }
+                                               } else {
+                                                       this._defaults.secondMin = this.secondMinOriginal;
+                                                       this._defaults.millisecMin = this.millisecMinOriginal;
+                                                       this._defaults.microsecMin = this.microsecMinOriginal;
+                                               }
+                                       } else {
+                                               this._defaults.minuteMin = this.minuteMinOriginal;
+                                               this._defaults.secondMin = this.secondMinOriginal;
+                                               this._defaults.millisecMin = this.millisecMinOriginal;
+                                               this._defaults.microsecMin = this.microsecMinOriginal;
+                                       }
+                               } else {
+                                       this._defaults.hourMin = this.hourMinOriginal;
+                                       this._defaults.minuteMin = this.minuteMinOriginal;
+                                       this._defaults.secondMin = this.secondMinOriginal;
+                                       this._defaults.millisecMin = this.millisecMinOriginal;
+                                       this._defaults.microsecMin = this.microsecMinOriginal;
+                               }
+                       }
+
+                       if ($.datepicker._get(dp_inst, 'maxDateTime') !== null && $.datepicker._get(dp_inst, 'maxDateTime') !== undefined && dp_date) {
+                               var maxDateTime = $.datepicker._get(dp_inst, 'maxDateTime'),
+                                       maxDateTimeDate = new Date(maxDateTime.getFullYear(), maxDateTime.getMonth(), maxDateTime.getDate(), 0, 0, 0, 0);
+
+                               if (this.hourMaxOriginal === null || this.minuteMaxOriginal === null || this.secondMaxOriginal === null || this.millisecMaxOriginal === null) {
+                                       this.hourMaxOriginal = o.hourMax;
+                                       this.minuteMaxOriginal = o.minuteMax;
+                                       this.secondMaxOriginal = o.secondMax;
+                                       this.millisecMaxOriginal = o.millisecMax;
+                                       this.microsecMaxOriginal = o.microsecMax;
+                               }
+
+                               if (dp_inst.settings.timeOnly || maxDateTimeDate.getTime() === dp_date.getTime()) {
+                                       this._defaults.hourMax = maxDateTime.getHours();
+                                       if (this.hour >= this._defaults.hourMax) {
+                                               this.hour = this._defaults.hourMax;
+                                               this._defaults.minuteMax = maxDateTime.getMinutes();
+                                               if (this.minute >= this._defaults.minuteMax) {
+                                                       this.minute = this._defaults.minuteMax;
+                                                       this._defaults.secondMax = maxDateTime.getSeconds();
+                                                       if (this.second >= this._defaults.secondMax) {
+                                                               this.second = this._defaults.secondMax;
+                                                               this._defaults.millisecMax = maxDateTime.getMilliseconds();
+                                                               if (this.millisec >= this._defaults.millisecMax) {
+                                                                       this.millisec = this._defaults.millisecMax;
+                                                                       this._defaults.microsecMax = maxDateTime.getMicroseconds();
+                                                               } else {
+                                                                       if (this.microsec > this._defaults.microsecMax) {
+                                                                               this.microsec = this._defaults.microsecMax;
+                                                                       }
+                                                                       this._defaults.microsecMax = this.microsecMaxOriginal;
+                                                               }
+                                                       } else {
+                                                               this._defaults.millisecMax = this.millisecMaxOriginal;
+                                                               this._defaults.microsecMax = this.microsecMaxOriginal;
+                                                       }
+                                               } else {
+                                                       this._defaults.secondMax = this.secondMaxOriginal;
+                                                       this._defaults.millisecMax = this.millisecMaxOriginal;
+                                                       this._defaults.microsecMax = this.microsecMaxOriginal;
+                                               }
+                                       } else {
+                                               this._defaults.minuteMax = this.minuteMaxOriginal;
+                                               this._defaults.secondMax = this.secondMaxOriginal;
+                                               this._defaults.millisecMax = this.millisecMaxOriginal;
+                                               this._defaults.microsecMax = this.microsecMaxOriginal;
+                                       }
+                               } else {
+                                       this._defaults.hourMax = this.hourMaxOriginal;
+                                       this._defaults.minuteMax = this.minuteMaxOriginal;
+                                       this._defaults.secondMax = this.secondMaxOriginal;
+                                       this._defaults.millisecMax = this.millisecMaxOriginal;
+                                       this._defaults.microsecMax = this.microsecMaxOriginal;
+                               }
+                       }
+
+                       if (dp_inst.settings.minTime!==null) {
+                               var tempMinTime=new Date("01/01/1970 " + dp_inst.settings.minTime);
+                               if (this.hour<tempMinTime.getHours()) {
+                                       this.hour=this._defaults.hourMin=tempMinTime.getHours();
+                                       this.minute=this._defaults.minuteMin=tempMinTime.getMinutes();
+                               } else if (this.hour===tempMinTime.getHours() && this.minute<tempMinTime.getMinutes()) {
+                                       this.minute=this._defaults.minuteMin=tempMinTime.getMinutes();
+                               } else {
+                                       if (this._defaults.hourMin<tempMinTime.getHours()) {
+                                               this._defaults.hourMin=tempMinTime.getHours();
+                                               this._defaults.minuteMin=tempMinTime.getMinutes();
+                                       } else if (this._defaults.hourMin===tempMinTime.getHours()===this.hour && this._defaults.minuteMin<tempMinTime.getMinutes()) {
+                                               this._defaults.minuteMin=tempMinTime.getMinutes();
+                                       } else {
+                                               this._defaults.minuteMin=0;
+                                       }
+                               }
+                       }
+
+                       if (dp_inst.settings.maxTime!==null) {
+                               var tempMaxTime=new Date("01/01/1970 " + dp_inst.settings.maxTime);
+                               if (this.hour>tempMaxTime.getHours()) {
+                                       this.hour=this._defaults.hourMax=tempMaxTime.getHours();
+                                       this.minute=this._defaults.minuteMax=tempMaxTime.getMinutes();
+                               } else if (this.hour===tempMaxTime.getHours() && this.minute>tempMaxTime.getMinutes()) {
+                                       this.minute=this._defaults.minuteMax=tempMaxTime.getMinutes();
+                               } else {
+                                       if (this._defaults.hourMax>tempMaxTime.getHours()) {
+                                               this._defaults.hourMax=tempMaxTime.getHours();
+                                               this._defaults.minuteMax=tempMaxTime.getMinutes();
+                                       } else if (this._defaults.hourMax===tempMaxTime.getHours()===this.hour && this._defaults.minuteMax>tempMaxTime.getMinutes()) {
+                                               this._defaults.minuteMax=tempMaxTime.getMinutes();
+                                       } else {
+                                               this._defaults.minuteMax=59;
+                                       }
+                               }
+                       }
+
+                       if (adjustSliders !== undefined && adjustSliders === true) {
+                               var hourMax = parseInt((this._defaults.hourMax - ((this._defaults.hourMax - this._defaults.hourMin) % this._defaults.stepHour)), 10),
+                                       minMax = parseInt((this._defaults.minuteMax - ((this._defaults.minuteMax - this._defaults.minuteMin) % this._defaults.stepMinute)), 10),
+                                       secMax = parseInt((this._defaults.secondMax - ((this._defaults.secondMax - this._defaults.secondMin) % this._defaults.stepSecond)), 10),
+                                       millisecMax = parseInt((this._defaults.millisecMax - ((this._defaults.millisecMax - this._defaults.millisecMin) % this._defaults.stepMillisec)), 10),
+                                       microsecMax = parseInt((this._defaults.microsecMax - ((this._defaults.microsecMax - this._defaults.microsecMin) % this._defaults.stepMicrosec)), 10);
+
+                               if (this.hour_slider) {
+                                       this.control.options(this, this.hour_slider, 'hour', { min: this._defaults.hourMin, max: hourMax, step: this._defaults.stepHour });
+                                       this.control.value(this, this.hour_slider, 'hour', this.hour - (this.hour % this._defaults.stepHour));
+                               }
+                               if (this.minute_slider) {
+                                       this.control.options(this, this.minute_slider, 'minute', { min: this._defaults.minuteMin, max: minMax, step: this._defaults.stepMinute });
+                                       this.control.value(this, this.minute_slider, 'minute', this.minute - (this.minute % this._defaults.stepMinute));
+                               }
+                               if (this.second_slider) {
+                                       this.control.options(this, this.second_slider, 'second', { min: this._defaults.secondMin, max: secMax, step: this._defaults.stepSecond });
+                                       this.control.value(this, this.second_slider, 'second', this.second - (this.second % this._defaults.stepSecond));
+                               }
+                               if (this.millisec_slider) {
+                                       this.control.options(this, this.millisec_slider, 'millisec', { min: this._defaults.millisecMin, max: millisecMax, step: this._defaults.stepMillisec });
+                                       this.control.value(this, this.millisec_slider, 'millisec', this.millisec - (this.millisec % this._defaults.stepMillisec));
+                               }
+                               if (this.microsec_slider) {
+                                       this.control.options(this, this.microsec_slider, 'microsec', { min: this._defaults.microsecMin, max: microsecMax, step: this._defaults.stepMicrosec });
+                                       this.control.value(this, this.microsec_slider, 'microsec', this.microsec - (this.microsec % this._defaults.stepMicrosec));
+                               }
+                       }
+
+               },
+
+               /*
+               * when a slider moves, set the internal time...
+               * on time change is also called when the time is updated in the text field
+               */
+               _onTimeChange: function () {
+                       if (!this._defaults.showTimepicker) {
+                                return;
+                       }
+                       var hour = (this.hour_slider) ? this.control.value(this, this.hour_slider, 'hour') : false,
+                               minute = (this.minute_slider) ? this.control.value(this, this.minute_slider, 'minute') : false,
+                               second = (this.second_slider) ? this.control.value(this, this.second_slider, 'second') : false,
+                               millisec = (this.millisec_slider) ? this.control.value(this, this.millisec_slider, 'millisec') : false,
+                               microsec = (this.microsec_slider) ? this.control.value(this, this.microsec_slider, 'microsec') : false,
+                               timezone = (this.timezone_select) ? this.timezone_select.val() : false,
+                               o = this._defaults,
+                               pickerTimeFormat = o.pickerTimeFormat || o.timeFormat,
+                               pickerTimeSuffix = o.pickerTimeSuffix || o.timeSuffix;
+
+                       if (typeof(hour) === 'object') {
+                               hour = false;
+                       }
+                       if (typeof(minute) === 'object') {
+                               minute = false;
+                       }
+                       if (typeof(second) === 'object') {
+                               second = false;
+                       }
+                       if (typeof(millisec) === 'object') {
+                               millisec = false;
+                       }
+                       if (typeof(microsec) === 'object') {
+                               microsec = false;
+                       }
+                       if (typeof(timezone) === 'object') {
+                               timezone = false;
+                       }
+
+                       if (hour !== false) {
+                               hour = parseInt(hour, 10);
+                       }
+                       if (minute !== false) {
+                               minute = parseInt(minute, 10);
+                       }
+                       if (second !== false) {
+                               second = parseInt(second, 10);
+                       }
+                       if (millisec !== false) {
+                               millisec = parseInt(millisec, 10);
+                       }
+                       if (microsec !== false) {
+                               microsec = parseInt(microsec, 10);
+                       }
+                       if (timezone !== false) {
+                               timezone = timezone.toString();
+                       }
+
+                       var ampm = o[hour < 12 ? 'amNames' : 'pmNames'][0];
+
+                       // If the update was done in the input field, the input field should not be updated.
+                       // If the update was done using the sliders, update the input field.
+                       var hasChanged = (
+                                               hour !== parseInt(this.hour,10) || // sliders should all be numeric
+                                               minute !== parseInt(this.minute,10) ||
+                                               second !== parseInt(this.second,10) ||
+                                               millisec !== parseInt(this.millisec,10) ||
+                                               microsec !== parseInt(this.microsec,10) ||
+                                               (this.ampm.length > 0 && (hour < 12) !== ($.inArray(this.ampm.toUpperCase(), this.amNames) !== -1)) ||
+                                               (this.timezone !== null && timezone !== this.timezone.toString()) // could be numeric or "EST" format, so use toString()
+                                       );
+
+                       if (hasChanged) {
+
+                               if (hour !== false) {
+                                       this.hour = hour;
+                               }
+                               if (minute !== false) {
+                                       this.minute = minute;
+                               }
+                               if (second !== false) {
+                                       this.second = second;
+                               }
+                               if (millisec !== false) {
+                                       this.millisec = millisec;
+                               }
+                               if (microsec !== false) {
+                                       this.microsec = microsec;
+                               }
+                               if (timezone !== false) {
+                                       this.timezone = timezone;
+                               }
+
+                               if (!this.inst) {
+                                       this.inst = $.datepicker._getInst(this.$input[0]);
+                               }
+
+                               this._limitMinMaxDateTime(this.inst, true);
+                       }
+                       if (this.support.ampm) {
+                               this.ampm = ampm;
+                       }
+
+                       // Updates the time within the timepicker
+                       this.formattedTime = $.datepicker.formatTime(o.timeFormat, this, o);
+                       if (this.$timeObj) {
+                               if (pickerTimeFormat === o.timeFormat) {
+                                       this.$timeObj.val(this.formattedTime + pickerTimeSuffix);
+                               }
+                               else {
+                                       this.$timeObj.val($.datepicker.formatTime(pickerTimeFormat, this, o) + pickerTimeSuffix);
+                               }
+                               if (this.$timeObj[0].setSelectionRange) {
+                                       var sPos = this.$timeObj[0].selectionStart;
+                                       var ePos = this.$timeObj[0].selectionEnd;
+                                       this.$timeObj[0].setSelectionRange(sPos, ePos);
+                               }
+                       }
+
+                       this.timeDefined = true;
+                       if (hasChanged) {
+                               this._updateDateTime();
+                               //this.$input.focus(); // may automatically open the picker on setDate
+                       }
+               },
+
+               /*
+               * call custom onSelect.
+               * bind to sliders slidestop, and grid click.
+               */
+               _onSelectHandler: function () {
+                       var onSelect = this._defaults.onSelect || this.inst.settings.onSelect;
+                       var inputEl = this.$input ? this.$input[0] : null;
+                       if (onSelect && inputEl) {
+                               onSelect.apply(inputEl, [this.formattedDateTime, this]);
+                       }
+               },
+
+               /*
+               * update our input with the new date time..
+               */
+               _updateDateTime: function (dp_inst) {
+                       dp_inst = this.inst || dp_inst;
+                       var dtTmp = (dp_inst.currentYear > 0?
+                                                       new Date(dp_inst.currentYear, dp_inst.currentMonth, dp_inst.currentDay) :
+                                                       new Date(dp_inst.selectedYear, dp_inst.selectedMonth, dp_inst.selectedDay)),
+                               dt = $.datepicker._daylightSavingAdjust(dtTmp),
+                               //dt = $.datepicker._daylightSavingAdjust(new Date(dp_inst.selectedYear, dp_inst.selectedMonth, dp_inst.selectedDay)),
+                               //dt = $.datepicker._daylightSavingAdjust(new Date(dp_inst.currentYear, dp_inst.currentMonth, dp_inst.currentDay)),
+                               dateFmt = $.datepicker._get(dp_inst, 'dateFormat'),
+                               formatCfg = $.datepicker._getFormatConfig(dp_inst),
+                               timeAvailable = dt !== null && this.timeDefined;
+                       this.formattedDate = $.datepicker.formatDate(dateFmt, (dt === null ? new Date() : dt), formatCfg);
+                       var formattedDateTime = this.formattedDate;
+
+                       // if a slider was changed but datepicker doesn't have a value yet, set it
+                       if (dp_inst.lastVal === "") {
+                dp_inst.currentYear = dp_inst.selectedYear;
+                dp_inst.currentMonth = dp_inst.selectedMonth;
+                dp_inst.currentDay = dp_inst.selectedDay;
+            }
+
+                       /*
+                       * remove following lines to force every changes in date picker to change the input value
+                       * Bug descriptions: when an input field has a default value, and click on the field to pop up the date picker.
+                       * If the user manually empty the value in the input field, the date picker will never change selected value.
+                       */
+                       //if (dp_inst.lastVal !== undefined && (dp_inst.lastVal.length > 0 && this.$input.val().length === 0)) {
+                       //      return;
+                       //}
+
+                       if (this._defaults.timeOnly === true && this._defaults.timeOnlyShowDate === false) {
+                               formattedDateTime = this.formattedTime;
+                       } else if ((this._defaults.timeOnly !== true && (this._defaults.alwaysSetTime || timeAvailable)) || (this._defaults.timeOnly === true && this._defaults.timeOnlyShowDate === true)) {
+                               formattedDateTime += this._defaults.separator + this.formattedTime + this._defaults.timeSuffix;
+                       }
+
+                       this.formattedDateTime = formattedDateTime;
+
+                       if (!this._defaults.showTimepicker) {
+                               this.$input.val(this.formattedDate);
+                       } else if (this.$altInput && this._defaults.timeOnly === false && this._defaults.altFieldTimeOnly === true) {
+                               this.$altInput.val(this.formattedTime);
+                               this.$input.val(this.formattedDate);
+                       } else if (this.$altInput) {
+                               this.$input.val(formattedDateTime);
+                               var altFormattedDateTime = '',
+                                       altSeparator = this._defaults.altSeparator !== null ? this._defaults.altSeparator : this._defaults.separator,
+                                       altTimeSuffix = this._defaults.altTimeSuffix !== null ? this._defaults.altTimeSuffix : this._defaults.timeSuffix;
+
+                               if (!this._defaults.timeOnly) {
+                                       if (this._defaults.altFormat) {
+                                               altFormattedDateTime = $.datepicker.formatDate(this._defaults.altFormat, (dt === null ? new Date() : dt), formatCfg);
+                                       }
+                                       else {
+                                               altFormattedDateTime = this.formattedDate;
+                                       }
+
+                                       if (altFormattedDateTime) {
+                                               altFormattedDateTime += altSeparator;
+                                       }
+                               }
+
+                               if (this._defaults.altTimeFormat !== null) {
+                                       altFormattedDateTime += $.datepicker.formatTime(this._defaults.altTimeFormat, this, this._defaults) + altTimeSuffix;
+                               }
+                               else {
+                                       altFormattedDateTime += this.formattedTime + altTimeSuffix;
+                               }
+                               this.$altInput.val(altFormattedDateTime);
+                       } else {
+                               this.$input.val(formattedDateTime);
+                       }
+
+                       this.$input.trigger("change");
+               },
+
+               _onFocus: function () {
+                       if (!this.$input.val() && this._defaults.defaultValue) {
+                               this.$input.val(this._defaults.defaultValue);
+                               var inst = $.datepicker._getInst(this.$input.get(0)),
+                                       tp_inst = $.datepicker._get(inst, 'timepicker');
+                               if (tp_inst) {
+                                       if (tp_inst._defaults.timeOnly && (inst.input.val() !== inst.lastVal)) {
+                                               try {
+                                                       $.datepicker._updateDatepicker(inst);
+                                               } catch (err) {
+                                                       $.timepicker.log(err);
+                                               }
+                                       }
+                               }
+                       }
+               },
+
+               /*
+               * Small abstraction to control types
+               * We can add more, just be sure to follow the pattern: create, options, value
+               */
+               _controls: {
+                       // slider methods
+                       slider: {
+                               create: function (tp_inst, obj, unit, val, min, max, step) {
+                                       var rtl = tp_inst._defaults.isRTL; // if rtl go -60->0 instead of 0->60
+                                       return obj.prop('slide', null).slider({
+                                               orientation: "horizontal",
+                                               value: rtl ? val * -1 : val,
+                                               min: rtl ? max * -1 : min,
+                                               max: rtl ? min * -1 : max,
+                                               step: step,
+                                               slide: function (event, ui) {
+                                                       tp_inst.control.value(tp_inst, $(this), unit, rtl ? ui.value * -1 : ui.value);
+                                                       tp_inst._onTimeChange();
+                                               },
+                                               stop: function (event, ui) {
+                                                       tp_inst._onSelectHandler();
+                                               }
+                                       });
+                               },
+                               options: function (tp_inst, obj, unit, opts, val) {
+                                       if (tp_inst._defaults.isRTL) {
+                                               if (typeof(opts) === 'string') {
+                                                       if (opts === 'min' || opts === 'max') {
+                                                               if (val !== undefined) {
+                                                                       return obj.slider(opts, val * -1);
+                                                               }
+                                                               return Math.abs(obj.slider(opts));
+                                                       }
+                                                       return obj.slider(opts);
+                                               }
+                                               var min = opts.min,
+                                                       max = opts.max;
+                                               opts.min = opts.max = null;
+                                               if (min !== undefined) {
+                                                       opts.max = min * -1;
+                                               }
+                                               if (max !== undefined) {
+                                                       opts.min = max * -1;
+                                               }
+                                               return obj.slider(opts);
+                                       }
+                                       if (typeof(opts) === 'string' && val !== undefined) {
+                                               return obj.slider(opts, val);
+                                       }
+                                       return obj.slider(opts);
+                               },
+                               value: function (tp_inst, obj, unit, val) {
+                                       if (tp_inst._defaults.isRTL) {
+                                               if (val !== undefined) {
+                                                       return obj.slider('value', val * -1);
+                                               }
+                                               return Math.abs(obj.slider('value'));
+                                       }
+                                       if (val !== undefined) {
+                                               return obj.slider('value', val);
+                                       }
+                                       return obj.slider('value');
+                               }
+                       },
+                       // select methods
+                       select: {
+                               create: function (tp_inst, obj, unit, val, min, max, step) {
+                                       var sel = '<select class="ui-timepicker-select ui-state-default ui-corner-all" data-unit="' + unit + '" data-min="' + min + '" data-max="' + max + '" data-step="' + step + '">',
+                                               format = tp_inst._defaults.pickerTimeFormat || tp_inst._defaults.timeFormat;
+
+                                       for (var i = min; i <= max; i += step) {
+                                               sel += '<option value="' + i + '"' + (i === val ? ' selected' : '') + '>';
+                                               if (unit === 'hour') {
+                                                       sel += $.datepicker.formatTime($.trim(format.replace(/[^ht ]/ig, '')), {hour: i}, tp_inst._defaults);
+                                               }
+                                               else if (unit === 'millisec' || unit === 'microsec' || i >= 10) { sel += i; }
+                                               else {sel += '0' + i.toString(); }
+                                               sel += '</option>';
+                                       }
+                                       sel += '</select>';
+
+                                       obj.children('select').remove();
+
+                                       $(sel).appendTo(obj).change(function (e) {
+                                               tp_inst._onTimeChange();
+                                               tp_inst._onSelectHandler();
+                                               tp_inst._afterInject();
+                                       });
+
+                                       return obj;
+                               },
+                               options: function (tp_inst, obj, unit, opts, val) {
+                                       var o = {},
+                                               $t = obj.children('select');
+                                       if (typeof(opts) === 'string') {
+                                               if (val === undefined) {
+                                                       return $t.data(opts);
+                                               }
+                                               o[opts] = val;
+                                       }
+                                       else { o = opts; }
+                                       return tp_inst.control.create(tp_inst, obj, $t.data('unit'), $t.val(), o.min>=0 ? o.min : $t.data('min'), o.max || $t.data('max'), o.step || $t.data('step'));
+                               },
+                               value: function (tp_inst, obj, unit, val) {
+                                       var $t = obj.children('select');
+                                       if (val !== undefined) {
+                                               return $t.val(val);
+                                       }
+                                       return $t.val();
+                               }
+                       }
+               } // end _controls
+
+       });
+
+       $.fn.extend({
+               /*
+               * shorthand just to use timepicker.
+               */
+               timepicker: function (o) {
+                       o = o || {};
+                       var tmp_args = Array.prototype.slice.call(arguments);
+
+                       if (typeof o === 'object') {
+                               tmp_args[0] = $.extend(o, {
+                                       timeOnly: true
+                               });
+                       }
+
+                       return $(this).each(function () {
+                               $.fn.datetimepicker.apply($(this), tmp_args);
+                       });
+               },
+
+               /*
+               * extend timepicker to datepicker
+               */
+               datetimepicker: function (o) {
+                       o = o || {};
+                       var tmp_args = arguments;
+
+                       if (typeof(o) === 'string') {
+                               if (o === 'getDate'  || (o === 'option' && tmp_args.length === 2 && typeof (tmp_args[1]) === 'string')) {
+                                       return $.fn.datepicker.apply($(this[0]), tmp_args);
+                               } else {
+                                       return this.each(function () {
+                                               var $t = $(this);
+                                               $t.datepicker.apply($t, tmp_args);
+                                       });
+                               }
+                       } else {
+                               return this.each(function () {
+                                       var $t = $(this);
+                                       $t.datepicker($.timepicker._newInst($t, o)._defaults);
+                               });
+                       }
+               }
+       });
+
+       /*
+       * Public Utility to parse date and time
+       */
+       $.datepicker.parseDateTime = function (dateFormat, timeFormat, dateTimeString, dateSettings, timeSettings) {
+               var parseRes = parseDateTimeInternal(dateFormat, timeFormat, dateTimeString, dateSettings, timeSettings);
+               if (parseRes.timeObj) {
+                       var t = parseRes.timeObj;
+                       parseRes.date.setHours(t.hour, t.minute, t.second, t.millisec);
+                       parseRes.date.setMicroseconds(t.microsec);
+               }
+
+               return parseRes.date;
+       };
+
+       /*
+       * Public utility to parse time
+       */
+       $.datepicker.parseTime = function (timeFormat, timeString, options) {
+               var o = extendRemove(extendRemove({}, $.timepicker._defaults), options || {}),
+                       iso8601 = (timeFormat.replace(/\'.*?\'/g, '').indexOf('Z') !== -1);
+
+               // Strict parse requires the timeString to match the timeFormat exactly
+               var strictParse = function (f, s, o) {
+
+                       // pattern for standard and localized AM/PM markers
+                       var getPatternAmpm = function (amNames, pmNames) {
+                               var markers = [];
+                               if (amNames) {
+                                       $.merge(markers, amNames);
+                               }
+                               if (pmNames) {
+                                       $.merge(markers, pmNames);
+                               }
+                               markers = $.map(markers, function (val) {
+                                       return val.replace(/[.*+?|()\[\]{}\\]/g, '\\$&');
+                               });
+                               return '(' + markers.join('|') + ')?';
+                       };
+
+                       // figure out position of time elements.. cause js cant do named captures
+                       var getFormatPositions = function (timeFormat) {
+                               var finds = timeFormat.toLowerCase().match(/(h{1,2}|m{1,2}|s{1,2}|l{1}|c{1}|t{1,2}|z|'.*?')/g),
+                                       orders = {
+                                               h: -1,
+                                               m: -1,
+                                               s: -1,
+                                               l: -1,
+                                               c: -1,
+                                               t: -1,
+                                               z: -1
+                                       };
+
+                               if (finds) {
+                                       for (var i = 0; i < finds.length; i++) {
+                                               if (orders[finds[i].toString().charAt(0)] === -1) {
+                                                       orders[finds[i].toString().charAt(0)] = i + 1;
+                                               }
+                                       }
+                               }
+                               return orders;
+                       };
+
+                       var regstr = '^' + f.toString()
+                                       .replace(/([hH]{1,2}|mm?|ss?|[tT]{1,2}|[zZ]|[lc]|'.*?')/g, function (match) {
+                                                       var ml = match.length;
+                                                       switch (match.charAt(0).toLowerCase()) {
+                                                       case 'h':
+                                                               return ml === 1 ? '(\\d?\\d)' : '(\\d{' + ml + '})';
+                                                       case 'm':
+                                                               return ml === 1 ? '(\\d?\\d)' : '(\\d{' + ml + '})';
+                                                       case 's':
+                                                               return ml === 1 ? '(\\d?\\d)' : '(\\d{' + ml + '})';
+                                                       case 'l':
+                                                               return '(\\d?\\d?\\d)';
+                                                       case 'c':
+                                                               return '(\\d?\\d?\\d)';
+                                                       case 'z':
+                                                               return '(z|[-+]\\d\\d:?\\d\\d|\\S+)?';
+                                                       case 't':
+                                                               return getPatternAmpm(o.amNames, o.pmNames);
+                                                       default:    // literal escaped in quotes
+                                                               return '(' + match.replace(/\'/g, "").replace(/(\.|\$|\^|\\|\/|\(|\)|\[|\]|\?|\+|\*)/g, function (m) { return "\\" + m; }) + ')?';
+                                                       }
+                                               })
+                                       .replace(/\s/g, '\\s?') +
+                                       o.timeSuffix + '$',
+                               order = getFormatPositions(f),
+                               ampm = '',
+                               treg;
+
+                       treg = s.match(new RegExp(regstr, 'i'));
+
+                       var resTime = {
+                               hour: 0,
+                               minute: 0,
+                               second: 0,
+                               millisec: 0,
+                               microsec: 0
+                       };
+
+                       if (treg) {
+                               if (order.t !== -1) {
+                                       if (treg[order.t] === undefined || treg[order.t].length === 0) {
+                                               ampm = '';
+                                               resTime.ampm = '';
+                                       } else {
+                                               ampm = $.inArray(treg[order.t].toUpperCase(), $.map(o.amNames, function (x,i) { return x.toUpperCase(); })) !== -1 ? 'AM' : 'PM';
+                                               resTime.ampm = o[ampm === 'AM' ? 'amNames' : 'pmNames'][0];
+                                       }
+                               }
+
+                               if (order.h !== -1) {
+                                       if (ampm === 'AM' && treg[order.h] === '12') {
+                                               resTime.hour = 0; // 12am = 0 hour
+                                       } else {
+                                               if (ampm === 'PM' && treg[order.h] !== '12') {
+                                                       resTime.hour = parseInt(treg[order.h], 10) + 12; // 12pm = 12 hour, any other pm = hour + 12
+                                               } else {
+                                                       resTime.hour = Number(treg[order.h]);
+                                               }
+                                       }
+                               }
+
+                               if (order.m !== -1) {
+                                       resTime.minute = Number(treg[order.m]);
+                               }
+                               if (order.s !== -1) {
+                                       resTime.second = Number(treg[order.s]);
+                               }
+                               if (order.l !== -1) {
+                                       resTime.millisec = Number(treg[order.l]);
+                               }
+                               if (order.c !== -1) {
+                                       resTime.microsec = Number(treg[order.c]);
+                               }
+                               if (order.z !== -1 && treg[order.z] !== undefined) {
+                                       resTime.timezone = $.timepicker.timezoneOffsetNumber(treg[order.z]);
+                               }
+
+
+                               return resTime;
+                       }
+                       return false;
+               };// end strictParse
+
+               // First try JS Date, if that fails, use strictParse
+               var looseParse = function (f, s, o) {
+                       try {
+                               var d = new Date('2012-01-01 ' + s);
+                               if (isNaN(d.getTime())) {
+                                       d = new Date('2012-01-01T' + s);
+                                       if (isNaN(d.getTime())) {
+                                               d = new Date('01/01/2012 ' + s);
+                                               if (isNaN(d.getTime())) {
+                                                       throw "Unable to parse time with native Date: " + s;
+                                               }
+                                       }
+                               }
+
+                               return {
+                                       hour: d.getHours(),
+                                       minute: d.getMinutes(),
+                                       second: d.getSeconds(),
+                                       millisec: d.getMilliseconds(),
+                                       microsec: d.getMicroseconds(),
+                                       timezone: d.getTimezoneOffset() * -1
+                               };
+                       }
+                       catch (err) {
+                               try {
+                                       return strictParse(f, s, o);
+                               }
+                               catch (err2) {
+                                       $.timepicker.log("Unable to parse \ntimeString: " + s + "\ntimeFormat: " + f);
+                               }
+                       }
+                       return false;
+               }; // end looseParse
+
+               if (typeof o.parse === "function") {
+                       return o.parse(timeFormat, timeString, o);
+               }
+               if (o.parse === 'loose') {
+                       return looseParse(timeFormat, timeString, o);
+               }
+               return strictParse(timeFormat, timeString, o);
+       };
+
+       /**
+        * Public utility to format the time
+        * @param {string} format format of the time
+        * @param {Object} time Object not a Date for timezones
+        * @param {Object} [options] essentially the regional[].. amNames, pmNames, ampm
+        * @returns {string} the formatted time
+        */
+       $.datepicker.formatTime = function (format, time, options) {
+               options = options || {};
+               options = $.extend({}, $.timepicker._defaults, options);
+               time = $.extend({
+                       hour: 0,
+                       minute: 0,
+                       second: 0,
+                       millisec: 0,
+                       microsec: 0,
+                       timezone: null
+               }, time);
+
+               var tmptime = format,
+                       ampmName = options.amNames[0],
+                       hour = parseInt(time.hour, 10);
+
+               if (hour > 11) {
+                       ampmName = options.pmNames[0];
+               }
+
+               tmptime = tmptime.replace(/(?:HH?|hh?|mm?|ss?|[tT]{1,2}|[zZ]|[lc]|'.*?')/g, function (match) {
+                       switch (match) {
+                       case 'HH':
+                               return ('0' + hour).slice(-2);
+                       case 'H':
+                               return hour;
+                       case 'hh':
+                               return ('0' + convert24to12(hour)).slice(-2);
+                       case 'h':
+                               return convert24to12(hour);
+                       case 'mm':
+                               return ('0' + time.minute).slice(-2);
+                       case 'm':
+                               return time.minute;
+                       case 'ss':
+                               return ('0' + time.second).slice(-2);
+                       case 's':
+                               return time.second;
+                       case 'l':
+                               return ('00' + time.millisec).slice(-3);
+                       case 'c':
+                               return ('00' + time.microsec).slice(-3);
+                       case 'z':
+                               return $.timepicker.timezoneOffsetString(time.timezone === null ? options.timezone : time.timezone, false);
+                       case 'Z':
+                               return $.timepicker.timezoneOffsetString(time.timezone === null ? options.timezone : time.timezone, true);
+                       case 'T':
+                               return ampmName.charAt(0).toUpperCase();
+                       case 'TT':
+                               return ampmName.toUpperCase();
+                       case 't':
+                               return ampmName.charAt(0).toLowerCase();
+                       case 'tt':
+                               return ampmName.toLowerCase();
+                       default:
+                               return match.replace(/'/g, "");
+                       }
+               });
+
+               return tmptime;
+       };
+
+       /*
+       * the bad hack :/ override datepicker so it doesn't close on select
+       // inspired: http://stackoverflow.com/questions/1252512/jquery-datepicker-prevent-closing-picker-when-clicking-a-date/1762378#1762378
+       */
+       $.datepicker._base_selectDate = $.datepicker._selectDate;
+       $.datepicker._selectDate = function (id, dateStr) {
+               var inst = this._getInst($(id)[0]),
+                       tp_inst = this._get(inst, 'timepicker'),
+                       was_inline;
+
+               if (tp_inst && inst.settings.showTimepicker) {
+                       tp_inst._limitMinMaxDateTime(inst, true);
+                       was_inline = inst.inline;
+                       inst.inline = inst.stay_open = true;
+                       //This way the onSelect handler called from calendarpicker get the full dateTime
+                       this._base_selectDate(id, dateStr);
+                       inst.inline = was_inline;
+                       inst.stay_open = false;
+                       this._notifyChange(inst);
+                       this._updateDatepicker(inst);
+               } else {
+                       this._base_selectDate(id, dateStr);
+               }
+       };
+
+       /*
+       * second bad hack :/ override datepicker so it triggers an event when changing the input field
+       * and does not redraw the datepicker on every selectDate event
+       */
+       $.datepicker._base_updateDatepicker = $.datepicker._updateDatepicker;
+       $.datepicker._updateDatepicker = function (inst) {
+
+               // don't popup the datepicker if there is another instance already opened
+               var input = inst.input[0];
+               if ($.datepicker._curInst && $.datepicker._curInst !== inst && $.datepicker._datepickerShowing && $.datepicker._lastInput !== input) {
+                       return;
+               }
+
+               if (typeof(inst.stay_open) !== 'boolean' || inst.stay_open === false) {
+
+                       this._base_updateDatepicker(inst);
+
+                       // Reload the time control when changing something in the input text field.
+                       var tp_inst = this._get(inst, 'timepicker');
+                       if (tp_inst) {
+                               tp_inst._addTimePicker(inst);
+                       }
+               }
+       };
+
+       /*
+       * third bad hack :/ override datepicker so it allows spaces and colon in the input field
+       */
+       $.datepicker._base_doKeyPress = $.datepicker._doKeyPress;
+       $.datepicker._doKeyPress = function (event) {
+               var inst = $.datepicker._getInst(event.target),
+                       tp_inst = $.datepicker._get(inst, 'timepicker');
+
+               if (tp_inst) {
+                       if ($.datepicker._get(inst, 'constrainInput')) {
+                               var ampm = tp_inst.support.ampm,
+                                       tz = tp_inst._defaults.showTimezone !== null ? tp_inst._defaults.showTimezone : tp_inst.support.timezone,
+                                       dateChars = $.datepicker._possibleChars($.datepicker._get(inst, 'dateFormat')),
+                                       datetimeChars = tp_inst._defaults.timeFormat.toString()
+                                                                                       .replace(/[hms]/g, '')
+                                                                                       .replace(/TT/g, ampm ? 'APM' : '')
+                                                                                       .replace(/Tt/g, ampm ? 'AaPpMm' : '')
+                                                                                       .replace(/tT/g, ampm ? 'AaPpMm' : '')
+                                                                                       .replace(/T/g, ampm ? 'AP' : '')
+                                                                                       .replace(/tt/g, ampm ? 'apm' : '')
+                                                                                       .replace(/t/g, ampm ? 'ap' : '') +
+                                                                                       " " + tp_inst._defaults.separator +
+                                                                                       tp_inst._defaults.timeSuffix +
+                                                                                       (tz ? tp_inst._defaults.timezoneList.join('') : '') +
+                                                                                       (tp_inst._defaults.amNames.join('')) + (tp_inst._defaults.pmNames.join('')) +
+                                                                                       dateChars,
+                                       chr = String.fromCharCode(event.charCode === undefined ? event.keyCode : event.charCode);
+                               return event.ctrlKey || (chr < ' ' || !dateChars || datetimeChars.indexOf(chr) > -1);
+                       }
+               }
+
+               return $.datepicker._base_doKeyPress(event);
+       };
+
+       /*
+       * Fourth bad hack :/ override _updateAlternate function used in inline mode to init altField
+       * Update any alternate field to synchronise with the main field.
+       */
+       $.datepicker._base_updateAlternate = $.datepicker._updateAlternate;
+       $.datepicker._updateAlternate = function (inst) {
+               var tp_inst = this._get(inst, 'timepicker');
+               if (tp_inst) {
+                       var altField = tp_inst._defaults.altField;
+                       if (altField) { // update alternate field too
+                               var altFormat = tp_inst._defaults.altFormat || tp_inst._defaults.dateFormat,
+                                       date = this._getDate(inst),
+                                       formatCfg = $.datepicker._getFormatConfig(inst),
+                                       altFormattedDateTime = '',
+                                       altSeparator = tp_inst._defaults.altSeparator ? tp_inst._defaults.altSeparator : tp_inst._defaults.separator,
+                                       altTimeSuffix = tp_inst._defaults.altTimeSuffix ? tp_inst._defaults.altTimeSuffix : tp_inst._defaults.timeSuffix,
+                                       altTimeFormat = tp_inst._defaults.altTimeFormat !== null ? tp_inst._defaults.altTimeFormat : tp_inst._defaults.timeFormat;
+
+                               altFormattedDateTime += $.datepicker.formatTime(altTimeFormat, tp_inst, tp_inst._defaults) + altTimeSuffix;
+                               if (!tp_inst._defaults.timeOnly && !tp_inst._defaults.altFieldTimeOnly && date !== null) {
+                                       if (tp_inst._defaults.altFormat) {
+                                               altFormattedDateTime = $.datepicker.formatDate(tp_inst._defaults.altFormat, date, formatCfg) + altSeparator + altFormattedDateTime;
+                                       }
+                                       else {
+                                               altFormattedDateTime = tp_inst.formattedDate + altSeparator + altFormattedDateTime;
+                                       }
+                               }
+                               $(altField).val( inst.input.val() ? altFormattedDateTime : "");
+                       }
+               }
+               else {
+                       $.datepicker._base_updateAlternate(inst);
+               }
+       };
+
+       /*
+       * Override key up event to sync manual input changes.
+       */
+       $.datepicker._base_doKeyUp = $.datepicker._doKeyUp;
+       $.datepicker._doKeyUp = function (event) {
+               var inst = $.datepicker._getInst(event.target),
+                       tp_inst = $.datepicker._get(inst, 'timepicker');
+
+               if (tp_inst) {
+                       if (tp_inst._defaults.timeOnly && (inst.input.val() !== inst.lastVal)) {
+                               try {
+                                       $.datepicker._updateDatepicker(inst);
+                               } catch (err) {
+                                       $.timepicker.log(err);
+                               }
+                       }
+               }
+
+               return $.datepicker._base_doKeyUp(event);
+       };
+
+       /*
+       * override "Today" button to also grab the time and set it to input field.
+       */
+       $.datepicker._base_gotoToday = $.datepicker._gotoToday;
+       $.datepicker._gotoToday = function (id) {
+               var inst = this._getInst($(id)[0]);
+               this._base_gotoToday(id);
+               var tp_inst = this._get(inst, 'timepicker');
+               if (!tp_inst) {
+                 return;
+               }
+
+               var tzoffset = $.timepicker.timezoneOffsetNumber(tp_inst.timezone);
+               var now = new Date();
+               now.setMinutes(now.getMinutes() + now.getTimezoneOffset() + parseInt(tzoffset, 10));
+               this._setTime(inst, now);
+               this._setDate(inst, now);
+               tp_inst._onSelectHandler();
+       };
+
+       /*
+       * Disable & enable the Time in the datetimepicker
+       */
+       $.datepicker._disableTimepickerDatepicker = function (target) {
+               var inst = this._getInst(target);
+               if (!inst) {
+                       return;
+               }
+
+               var tp_inst = this._get(inst, 'timepicker');
+               $(target).datepicker('getDate'); // Init selected[Year|Month|Day]
+               if (tp_inst) {
+                       inst.settings.showTimepicker = false;
+                       tp_inst._defaults.showTimepicker = false;
+                       tp_inst._updateDateTime(inst);
+               }
+       };
+
+       $.datepicker._enableTimepickerDatepicker = function (target) {
+               var inst = this._getInst(target);
+               if (!inst) {
+                       return;
+               }
+
+               var tp_inst = this._get(inst, 'timepicker');
+               $(target).datepicker('getDate'); // Init selected[Year|Month|Day]
+               if (tp_inst) {
+                       inst.settings.showTimepicker = true;
+                       tp_inst._defaults.showTimepicker = true;
+                       tp_inst._addTimePicker(inst); // Could be disabled on page load
+                       tp_inst._updateDateTime(inst);
+               }
+       };
+
+       /*
+       * Create our own set time function
+       */
+       $.datepicker._setTime = function (inst, date) {
+               var tp_inst = this._get(inst, 'timepicker');
+               if (tp_inst) {
+                       var defaults = tp_inst._defaults;
+
+                       // calling _setTime with no date sets time to defaults
+                       tp_inst.hour = date ? date.getHours() : defaults.hour;
+                       tp_inst.minute = date ? date.getMinutes() : defaults.minute;
+                       tp_inst.second = date ? date.getSeconds() : defaults.second;
+                       tp_inst.millisec = date ? date.getMilliseconds() : defaults.millisec;
+                       tp_inst.microsec = date ? date.getMicroseconds() : defaults.microsec;
+
+                       //check if within min/max times..
+                       tp_inst._limitMinMaxDateTime(inst, true);
+
+                       tp_inst._onTimeChange();
+                       tp_inst._updateDateTime(inst);
+               }
+       };
+
+       /*
+       * Create new public method to set only time, callable as $().datepicker('setTime', date)
+       */
+       $.datepicker._setTimeDatepicker = function (target, date, withDate) {
+               var inst = this._getInst(target);
+               if (!inst) {
+                       return;
+               }
+
+               var tp_inst = this._get(inst, 'timepicker');
+
+               if (tp_inst) {
+                       this._setDateFromField(inst);
+                       var tp_date;
+                       if (date) {
+                               if (typeof date === "string") {
+                                       tp_inst._parseTime(date, withDate);
+                                       tp_date = new Date();
+                                       tp_date.setHours(tp_inst.hour, tp_inst.minute, tp_inst.second, tp_inst.millisec);
+                                       tp_date.setMicroseconds(tp_inst.microsec);
+                               } else {
+                                       tp_date = new Date(date.getTime());
+                                       tp_date.setMicroseconds(date.getMicroseconds());
+                               }
+                               if (tp_date.toString() === 'Invalid Date') {
+                                       tp_date = undefined;
+                               }
+                               this._setTime(inst, tp_date);
+                       }
+               }
+
+       };
+
+       /*
+       * override setDate() to allow setting time too within Date object
+       */
+       $.datepicker._base_setDateDatepicker = $.datepicker._setDateDatepicker;
+       $.datepicker._setDateDatepicker = function (target, _date) {
+               var inst = this._getInst(target);
+               var date = _date;
+               if (!inst) {
+                       return;
+               }
+
+               if (typeof(_date) === 'string') {
+                       date = new Date(_date);
+                       if (!date.getTime()) {
+                               this._base_setDateDatepicker.apply(this, arguments);
+                               date = $(target).datepicker('getDate');
+                       }
+               }
+
+               var tp_inst = this._get(inst, 'timepicker');
+               var tp_date;
+               if (date instanceof Date) {
+                       tp_date = new Date(date.getTime());
+                       tp_date.setMicroseconds(date.getMicroseconds());
+               } else {
+                       tp_date = date;
+               }
+
+               // This is important if you are using the timezone option, javascript's Date
+               // object will only return the timezone offset for the current locale, so we
+               // adjust it accordingly.  If not using timezone option this won't matter..
+               // If a timezone is different in tp, keep the timezone as is
+               if (tp_inst && tp_date) {
+                       // look out for DST if tz wasn't specified
+                       if (!tp_inst.support.timezone && tp_inst._defaults.timezone === null) {
+                               tp_inst.timezone = tp_date.getTimezoneOffset() * -1;
+                       }
+                       date = $.timepicker.timezoneAdjust(date, $.timepicker.timezoneOffsetString(-date.getTimezoneOffset()), tp_inst.timezone);
+                       tp_date = $.timepicker.timezoneAdjust(tp_date, $.timepicker.timezoneOffsetString(-tp_date.getTimezoneOffset()), tp_inst.timezone);
+               }
+
+               this._updateDatepicker(inst);
+               this._base_setDateDatepicker.apply(this, arguments);
+               this._setTimeDatepicker(target, tp_date, true);
+       };
+
+       /*
+       * override getDate() to allow getting time too within Date object
+       */
+       $.datepicker._base_getDateDatepicker = $.datepicker._getDateDatepicker;
+       $.datepicker._getDateDatepicker = function (target, noDefault) {
+               var inst = this._getInst(target);
+               if (!inst) {
+                       return;
+               }
+
+               var tp_inst = this._get(inst, 'timepicker');
+
+               if (tp_inst) {
+                       // if it hasn't yet been defined, grab from field
+                       if (inst.lastVal === undefined) {
+                               this._setDateFromField(inst, noDefault);
+                       }
+
+                       var date = this._getDate(inst);
+
+                       var currDT = null;
+
+                       if (tp_inst.$altInput && tp_inst._defaults.altFieldTimeOnly) {
+                               currDT = tp_inst.$input.val() + ' ' + tp_inst.$altInput.val();
+                       }
+                       else if (tp_inst.$input.get(0).tagName !== 'INPUT' && tp_inst.$altInput) {
+                               /**
+                                * in case the datetimepicker has been applied to a non-input tag for inline UI,
+                                * and the user has not configured the plugin to display only time in altInput,
+                                * pick current date time from the altInput (and hope for the best, for now, until "ER1" is applied)
+                                *
+                                * @todo ER1. Since altInput can have a totally difference format, convert it to standard format by reading input format from "altFormat" and "altTimeFormat" option values
+                                */
+                               currDT = tp_inst.$altInput.val();
+                       }
+                       else {
+                               currDT = tp_inst.$input.val();
+                       }
+
+                       if (date && tp_inst._parseTime(currDT, !inst.settings.timeOnly)) {
+                               date.setHours(tp_inst.hour, tp_inst.minute, tp_inst.second, tp_inst.millisec);
+                               date.setMicroseconds(tp_inst.microsec);
+
+                               // This is important if you are using the timezone option, javascript's Date
+                               // object will only return the timezone offset for the current locale, so we
+                               // adjust it accordingly.  If not using timezone option this won't matter..
+                               if (tp_inst.timezone != null) {
+                                       // look out for DST if tz wasn't specified
+                                       if (!tp_inst.support.timezone && tp_inst._defaults.timezone === null) {
+                                               tp_inst.timezone = date.getTimezoneOffset() * -1;
+                                       }
+                                       date = $.timepicker.timezoneAdjust(date, tp_inst.timezone, $.timepicker.timezoneOffsetString(-date.getTimezoneOffset()));
+                               }
+                       }
+                       return date;
+               }
+               return this._base_getDateDatepicker(target, noDefault);
+       };
+
+       /*
+       * override parseDate() because UI 1.8.14 throws an error about "Extra characters"
+       * An option in datapicker to ignore extra format characters would be nicer.
+       */
+       $.datepicker._base_parseDate = $.datepicker.parseDate;
+       $.datepicker.parseDate = function (format, value, settings) {
+               var date;
+               try {
+                       date = this._base_parseDate(format, value, settings);
+               } catch (err) {
+                       // Hack!  The error message ends with a colon, a space, and
+                       // the "extra" characters.  We rely on that instead of
+                       // attempting to perfectly reproduce the parsing algorithm.
+                       if (err.indexOf(":") >= 0) {
+                               date = this._base_parseDate(format, value.substring(0, value.length - (err.length - err.indexOf(':') - 2)), settings);
+                               $.timepicker.log("Error parsing the date string: " + err + "\ndate string = " + value + "\ndate format = " + format);
+                       } else {
+                               throw err;
+                       }
+               }
+               return date;
+       };
+
+       /*
+       * override formatDate to set date with time to the input
+       */
+       $.datepicker._base_formatDate = $.datepicker._formatDate;
+       $.datepicker._formatDate = function (inst, day, month, year) {
+               var tp_inst = this._get(inst, 'timepicker');
+               if (tp_inst) {
+                       tp_inst._updateDateTime(inst);
+                       return tp_inst.$input.val();
+               }
+               return this._base_formatDate(inst);
+       };
+
+       /*
+       * override options setter to add time to maxDate(Time) and minDate(Time). MaxDate
+       */
+       $.datepicker._base_optionDatepicker = $.datepicker._optionDatepicker;
+       $.datepicker._optionDatepicker = function (target, name, value) {
+               var inst = this._getInst(target),
+                       name_clone;
+               if (!inst) {
+                       return null;
+               }
+
+               var tp_inst = this._get(inst, 'timepicker');
+               if (tp_inst) {
+                       var min = null,
+                               max = null,
+                               onselect = null,
+                               overrides = tp_inst._defaults.evnts,
+                               fns = {},
+                               prop,
+                               ret,
+                               oldVal,
+                               $target;
+                       if (typeof name === 'string') { // if min/max was set with the string
+                               if (name === 'minDate' || name === 'minDateTime') {
+                                       min = value;
+                               } else if (name === 'maxDate' || name === 'maxDateTime') {
+                                       max = value;
+                               } else if (name === 'onSelect') {
+                                       onselect = value;
+                               } else if (overrides.hasOwnProperty(name)) {
+                                       if (typeof (value) === 'undefined') {
+                                               return overrides[name];
+                                       }
+                                       fns[name] = value;
+                                       name_clone = {}; //empty results in exiting function after overrides updated
+                               }
+                       } else if (typeof name === 'object') { //if min/max was set with the JSON
+                               if (name.minDate) {
+                                       min = name.minDate;
+                               } else if (name.minDateTime) {
+                                       min = name.minDateTime;
+                               } else if (name.maxDate) {
+                                       max = name.maxDate;
+                               } else if (name.maxDateTime) {
+                                       max = name.maxDateTime;
+                               }
+                               for (prop in overrides) {
+                                       if (overrides.hasOwnProperty(prop) && name[prop]) {
+                                               fns[prop] = name[prop];
+                                       }
+                               }
+                       }
+                       for (prop in fns) {
+                               if (fns.hasOwnProperty(prop)) {
+                                       overrides[prop] = fns[prop];
+                                       if (!name_clone) { name_clone = $.extend({}, name); }
+                                       delete name_clone[prop];
+                               }
+                       }
+                       if (name_clone && isEmptyObject(name_clone)) { return; }
+                       if (min) { //if min was set
+                               if (min === 0) {
+                                       min = new Date();
+                               } else {
+                                       min = new Date(min);
+                               }
+                               tp_inst._defaults.minDate = min;
+                               tp_inst._defaults.minDateTime = min;
+                       } else if (max) { //if max was set
+                               if (max === 0) {
+                                       max = new Date();
+                               } else {
+                                       max = new Date(max);
+                               }
+                               tp_inst._defaults.maxDate = max;
+                               tp_inst._defaults.maxDateTime = max;
+                       } else if (onselect) {
+                               tp_inst._defaults.onSelect = onselect;
+                       }
+
+                       // Datepicker will override our date when we call _base_optionDatepicker when
+                       // calling minDate/maxDate, so we will first grab the value, call
+                       // _base_optionDatepicker, then set our value back.
+                       if(min || max){
+                               $target = $(target);
+                               oldVal = $target.datetimepicker('getDate');
+                               ret = this._base_optionDatepicker.call($.datepicker, target, name_clone || name, value);
+                               $target.datetimepicker('setDate', oldVal);
+                               return ret;
+                       }
+               }
+               if (value === undefined) {
+                       return this._base_optionDatepicker.call($.datepicker, target, name);
+               }
+               return this._base_optionDatepicker.call($.datepicker, target, name_clone || name, value);
+       };
+
+       /*
+       * jQuery isEmptyObject does not check hasOwnProperty - if someone has added to the object prototype,
+       * it will return false for all objects
+       */
+       var isEmptyObject = function (obj) {
+               var prop;
+               for (prop in obj) {
+                       if (obj.hasOwnProperty(prop)) {
+                               return false;
+                       }
+               }
+               return true;
+       };
+
+       /*
+       * jQuery extend now ignores nulls!
+       */
+       var extendRemove = function (target, props) {
+               $.extend(target, props);
+               for (var name in props) {
+                       if (props[name] === null || props[name] === undefined) {
+                               target[name] = props[name];
+                       }
+               }
+               return target;
+       };
+
+       /*
+       * Determine by the time format which units are supported
+       * Returns an object of booleans for each unit
+       */
+       var detectSupport = function (timeFormat) {
+               var tf = timeFormat.replace(/'.*?'/g, '').toLowerCase(), // removes literals
+                       isIn = function (f, t) { // does the format contain the token?
+                                       return f.indexOf(t) !== -1 ? true : false;
+                               };
+               return {
+                               hour: isIn(tf, 'h'),
+                               minute: isIn(tf, 'm'),
+                               second: isIn(tf, 's'),
+                               millisec: isIn(tf, 'l'),
+                               microsec: isIn(tf, 'c'),
+                               timezone: isIn(tf, 'z'),
+                               ampm: isIn(tf, 't') && isIn(timeFormat, 'h'),
+                               iso8601: isIn(timeFormat, 'Z')
+                       };
+       };
+
+       /*
+       * Converts 24 hour format into 12 hour
+       * Returns 12 hour without leading 0
+       */
+       var convert24to12 = function (hour) {
+               hour %= 12;
+
+               if (hour === 0) {
+                       hour = 12;
+               }
+
+               return String(hour);
+       };
+
+       var computeEffectiveSetting = function (settings, property) {
+               return settings && settings[property] ? settings[property] : $.timepicker._defaults[property];
+       };
+
+       /*
+       * Splits datetime string into date and time substrings.
+       * Throws exception when date can't be parsed
+       * Returns {dateString: dateString, timeString: timeString}
+       */
+       var splitDateTime = function (dateTimeString, timeSettings) {
+               // The idea is to get the number separator occurrences in datetime and the time format requested (since time has
+               // fewer unknowns, mostly numbers and am/pm). We will use the time pattern to split.
+               var separator = computeEffectiveSetting(timeSettings, 'separator'),
+                       format = computeEffectiveSetting(timeSettings, 'timeFormat'),
+                       timeParts = format.split(separator), // how many occurrences of separator may be in our format?
+                       timePartsLen = timeParts.length,
+                       allParts = dateTimeString.split(separator),
+                       allPartsLen = allParts.length;
+
+               if (allPartsLen > 1) {
+                       return {
+                               dateString: allParts.splice(0, allPartsLen - timePartsLen).join(separator),
+                               timeString: allParts.splice(0, timePartsLen).join(separator)
+                       };
+               }
+
+               return {
+                       dateString: dateTimeString,
+                       timeString: ''
+               };
+       };
+
+       /*
+       * Internal function to parse datetime interval
+       * Returns: {date: Date, timeObj: Object}, where
+       *   date - parsed date without time (type Date)
+       *   timeObj = {hour: , minute: , second: , millisec: , microsec: } - parsed time. Optional
+       */
+       var parseDateTimeInternal = function (dateFormat, timeFormat, dateTimeString, dateSettings, timeSettings) {
+               var date,
+                       parts,
+                       parsedTime;
+
+               parts = splitDateTime(dateTimeString, timeSettings);
+               date = $.datepicker._base_parseDate(dateFormat, parts.dateString, dateSettings);
+
+               if (parts.timeString === '') {
+                       return {
+                               date: date
+                       };
+               }
+
+               parsedTime = $.datepicker.parseTime(timeFormat, parts.timeString, timeSettings);
+
+               if (!parsedTime) {
+                       throw 'Wrong time format';
+               }
+
+               return {
+                       date: date,
+                       timeObj: parsedTime
+               };
+       };
+
+       /*
+       * Internal function to set timezone_select to the local timezone
+       */
+       var selectLocalTimezone = function (tp_inst, date) {
+               if (tp_inst && tp_inst.timezone_select) {
+                       var now = date || new Date();
+                       tp_inst.timezone_select.val(-now.getTimezoneOffset());
+               }
+       };
+
+       /*
+       * Create a Singleton Instance
+       */
+       $.timepicker = new Timepicker();
+
+       /**
+        * Get the timezone offset as string from a date object (eg '+0530' for UTC+5.5)
+        * @param {number} tzMinutes if not a number, less than -720 (-1200), or greater than 840 (+1400) this value is returned
+        * @param {boolean} iso8601 if true formats in accordance to iso8601 "+12:45"
+        * @return {string}
+        */
+       $.timepicker.timezoneOffsetString = function (tzMinutes, iso8601) {
+               if (isNaN(tzMinutes) || tzMinutes > 840 || tzMinutes < -720) {
+                       return tzMinutes;
+               }
+
+               var off = tzMinutes,
+                       minutes = off % 60,
+                       hours = (off - minutes) / 60,
+                       iso = iso8601 ? ':' : '',
+                       tz = (off >= 0 ? '+' : '-') + ('0' + Math.abs(hours)).slice(-2) + iso + ('0' + Math.abs(minutes)).slice(-2);
+
+               if (tz === '+00:00') {
+                       return 'Z';
+               }
+               return tz;
+       };
+
+       /**
+        * Get the number in minutes that represents a timezone string
+        * @param  {string} tzString formatted like "+0500", "-1245", "Z"
+        * @return {number} the offset minutes or the original string if it doesn't match expectations
+        */
+       $.timepicker.timezoneOffsetNumber = function (tzString) {
+               var normalized = tzString.toString().replace(':', ''); // excuse any iso8601, end up with "+1245"
+
+               if (normalized.toUpperCase() === 'Z') { // if iso8601 with Z, its 0 minute offset
+                       return 0;
+               }
+
+               if (!/^(\-|\+)\d{4}$/.test(normalized)) { // possibly a user defined tz, so just give it back
+                       return parseInt(tzString, 10);
+               }
+
+               return ((normalized.substr(0, 1) === '-' ? -1 : 1) * // plus or minus
+                                       ((parseInt(normalized.substr(1, 2), 10) * 60) + // hours (converted to minutes)
+                                       parseInt(normalized.substr(3, 2), 10))); // minutes
+       };
+
+       /**
+        * No way to set timezone in js Date, so we must adjust the minutes to compensate. (think setDate, getDate)
+        * @param  {Date} date
+        * @param  {string} fromTimezone formatted like "+0500", "-1245"
+        * @param  {string} toTimezone formatted like "+0500", "-1245"
+        * @return {Date}
+        */
+       $.timepicker.timezoneAdjust = function (date, fromTimezone, toTimezone) {
+               var fromTz = $.timepicker.timezoneOffsetNumber(fromTimezone);
+               var toTz = $.timepicker.timezoneOffsetNumber(toTimezone);
+               if (!isNaN(toTz)) {
+                       date.setMinutes(date.getMinutes() + (-fromTz) - (-toTz));
+               }
+               return date;
+       };
+
+       /**
+        * Calls `timepicker()` on the `startTime` and `endTime` elements, and configures them to
+        * enforce date range limits.
+        * n.b. The input value must be correctly formatted (reformatting is not supported)
+        * @param  {Element} startTime
+        * @param  {Element} endTime
+        * @param  {Object} options Options for the timepicker() call
+        * @return {jQuery}
+        */
+       $.timepicker.timeRange = function (startTime, endTime, options) {
+               return $.timepicker.handleRange('timepicker', startTime, endTime, options);
+       };
+
+       /**
+        * Calls `datetimepicker` on the `startTime` and `endTime` elements, and configures them to
+        * enforce date range limits.
+        * @param  {Element} startTime
+        * @param  {Element} endTime
+        * @param  {Object} options Options for the `timepicker()` call. Also supports `reformat`,
+        *   a boolean value that can be used to reformat the input values to the `dateFormat`.
+        * @param  {string} method Can be used to specify the type of picker to be added
+        * @return {jQuery}
+        */
+       $.timepicker.datetimeRange = function (startTime, endTime, options) {
+               $.timepicker.handleRange('datetimepicker', startTime, endTime, options);
+       };
+
+       /**
+        * Calls `datepicker` on the `startTime` and `endTime` elements, and configures them to
+        * enforce date range limits.
+        * @param  {Element} startTime
+        * @param  {Element} endTime
+        * @param  {Object} options Options for the `timepicker()` call. Also supports `reformat`,
+        *   a boolean value that can be used to reformat the input values to the `dateFormat`.
+        * @return {jQuery}
+        */
+       $.timepicker.dateRange = function (startTime, endTime, options) {
+               $.timepicker.handleRange('datepicker', startTime, endTime, options);
+       };
+
+       /**
+        * Calls `method` on the `startTime` and `endTime` elements, and configures them to
+        * enforce date range limits.
+        * @param  {string} method Can be used to specify the type of picker to be added
+        * @param  {Element} startTime
+        * @param  {Element} endTime
+        * @param  {Object} options Options for the `timepicker()` call. Also supports `reformat`,
+        *   a boolean value that can be used to reformat the input values to the `dateFormat`.
+        * @return {jQuery}
+        */
+       $.timepicker.handleRange = function (method, startTime, endTime, options) {
+               options = $.extend({}, {
+                       minInterval: 0, // min allowed interval in milliseconds
+                       maxInterval: 0, // max allowed interval in milliseconds
+                       start: {},      // options for start picker
+                       end: {}         // options for end picker
+               }, options);
+
+               // for the mean time this fixes an issue with calling getDate with timepicker()
+               var timeOnly = false;
+               if(method === 'timepicker'){
+                       timeOnly = true;
+                       method = 'datetimepicker';
+               }
+
+               function checkDates(changed, other) {
+                       var startdt = startTime[method]('getDate'),
+                               enddt = endTime[method]('getDate'),
+                               changeddt = changed[method]('getDate');
+
+                       if (startdt !== null) {
+                               var minDate = new Date(startdt.getTime()),
+                                       maxDate = new Date(startdt.getTime());
+
+                               minDate.setMilliseconds(minDate.getMilliseconds() + options.minInterval);
+                               maxDate.setMilliseconds(maxDate.getMilliseconds() + options.maxInterval);
+
+                               if (options.minInterval > 0 && minDate > enddt) { // minInterval check
+                                       endTime[method]('setDate', minDate);
+                               }
+                               else if (options.maxInterval > 0 && maxDate < enddt) { // max interval check
+                                       endTime[method]('setDate', maxDate);
+                               }
+                               else if (startdt > enddt) {
+                                       other[method]('setDate', changeddt);
+                               }
+                       }
+               }
+
+               function selected(changed, other, option) {
+                       if (!changed.val()) {
+                               return;
+                       }
+                       var date = changed[method].call(changed, 'getDate');
+                       if (date !== null && options.minInterval > 0) {
+                               if (option === 'minDate') {
+                                       date.setMilliseconds(date.getMilliseconds() + options.minInterval);
+                               }
+                               if (option === 'maxDate') {
+                                       date.setMilliseconds(date.getMilliseconds() - options.minInterval);
+                               }
+                       }
+
+                       if (date.getTime) {
+                               other[method].call(other, 'option', option, date);
+                       }
+               }
+
+               $.fn[method].call(startTime, $.extend({
+                       timeOnly: timeOnly,
+                       onClose: function (dateText, inst) {
+                               checkDates($(this), endTime);
+                       },
+                       onSelect: function (selectedDateTime) {
+                               selected($(this), endTime, 'minDate');
+                       }
+               }, options, options.start));
+               $.fn[method].call(endTime, $.extend({
+                       timeOnly: timeOnly,
+                       onClose: function (dateText, inst) {
+                               checkDates($(this), startTime);
+                       },
+                       onSelect: function (selectedDateTime) {
+                               selected($(this), startTime, 'maxDate');
+                       }
+               }, options, options.end));
+
+               checkDates(startTime, endTime);
+
+               selected(startTime, endTime, 'minDate');
+               selected(endTime, startTime, 'maxDate');
+
+               return $([startTime.get(0), endTime.get(0)]);
+       };
+
+       /**
+        * Log error or data to the console during error or debugging
+        * @param  {Object} err pass any type object to log to the console during error or debugging
+        * @return {void}
+        */
+       $.timepicker.log = function () {
+               // Older IE (9, maybe 10) throw error on accessing `window.console.log.apply`, so check first.
+               if (window.console && window.console.log && window.console.log.apply) {
+                       window.console.log.apply(window.console, Array.prototype.slice.call(arguments));
+               }
+       };
+
+       /*
+        * Add util object to allow access to private methods for testability.
+        */
+       $.timepicker._util = {
+               _extendRemove: extendRemove,
+               _isEmptyObject: isEmptyObject,
+               _convert24to12: convert24to12,
+               _detectSupport: detectSupport,
+               _selectLocalTimezone: selectLocalTimezone,
+               _computeEffectiveSetting: computeEffectiveSetting,
+               _splitDateTime: splitDateTime,
+               _parseDateTimeInternal: parseDateTimeInternal
+       };
+
+       /*
+       * Microsecond support
+       */
+       if (!Date.prototype.getMicroseconds) {
+               Date.prototype.microseconds = 0;
+               Date.prototype.getMicroseconds = function () { return this.microseconds; };
+               Date.prototype.setMicroseconds = function (m) {
+                       this.setMilliseconds(this.getMilliseconds() + Math.floor(m / 1000));
+                       this.microseconds = m % 1000;
+                       return this;
+               };
+       }
+
+       /*
+       * Keep up with the version
+       */
+       $.timepicker.version = "@@version";
+
+}));
diff --git a/htdocs/cgi-bin/wsrc/jquery-ui.css b/htdocs/cgi-bin/wsrc/jquery-ui.css
new file mode 100644 (file)
index 0000000..60ed03c
--- /dev/null
@@ -0,0 +1,2063 @@
+/*! jQuery UI - v1.12.1 - 2019-05-13
+* http://jqueryui.com
+* Includes: draggable.css, core.css, resizable.css, selectable.css, sortable.css, accordion.css, autocomplete.css, menu.css, button.css, controlgroup.css, checkboxradio.css, datepicker.css, dialog.css, progressbar.css, selectmenu.css, slider.css, spinner.css, tabs.css, tooltip.css, theme.css
+* To view and modify this theme, visit http://jqueryui.com/themeroller/?scope=&folderName=cupertino&cornerRadiusShadow=8px&offsetLeftShadow=-7px&offsetTopShadow=-7px&thicknessShadow=7px&opacityShadow=30&bgImgOpacityShadow=70&bgTextureShadow=highlight_hard&bgColorShadow=000000&opacityOverlay=80&bgImgOpacityOverlay=90&bgTextureOverlay=diagonals_thick&bgColorOverlay=eeeeee&iconColorError=ffffff&fcError=ffffff&borderColorError=cd0a0a&bgImgOpacityError=15&bgTextureError=flat&bgColorError=cd0a0a&iconColorHighlight=2e83ff&fcHighlight=363636&borderColorHighlight=f9dd34&bgImgOpacityHighlight=25&bgTextureHighlight=highlight_soft&bgColorHighlight=ffef8f&iconColorActive=ffffff&fcActive=ffffff&borderColorActive=2694e8&bgImgOpacityActive=50&bgTextureActive=glass&bgColorActive=3baae3&iconColorHover=2694e8&fcHover=0070a3&borderColorHover=74b2e2&bgImgOpacityHover=100&bgTextureHover=glass&bgColorHover=e4f1fb&iconColorDefault=3d80b3&fcDefault=2779aa&borderColorDefault=aed0ea&bgImgOpacityDefault=80&bgTextureDefault=glass&bgColorDefault=d7ebf9&iconColorContent=72a7cf&fcContent=362b36&borderColorContent=dddddd&bgImgOpacityContent=100&bgTextureContent=highlight_hard&bgColorContent=f2f5f7&iconColorHeader=72a7cf&fcHeader=222222&borderColorHeader=aed0ea&bgImgOpacityHeader=100&bgTextureHeader=highlight_soft&bgColorHeader=deedf7&cornerRadius=6px&fsDefault=1.1em&fwDefault=bold&ffDefault=Lucida%20Grande%2CLucida%20Sans%2CArial%2Csans-serif
+* Copyright jQuery Foundation and other contributors; Licensed MIT */
+
+.ui-draggable-handle {
+    -ms-touch-action: none;
+    touch-action: none;
+}
+
+
+/* Layout helpers
+----------------------------------*/
+
+.ui-helper-hidden {
+    display: none;
+}
+
+.ui-helper-hidden-accessible {
+    border: 0;
+    clip: rect(0 0 0 0);
+    height: 1px;
+    margin: -1px;
+    overflow: hidden;
+    padding: 0;
+    position: absolute;
+    width: 1px;
+}
+
+.ui-helper-reset {
+    margin: 0;
+    padding: 0;
+    border: 0;
+    outline: 0;
+    line-height: 1.3;
+    text-decoration: none;
+    font-size: 100%;
+    list-style: none;
+}
+
+.ui-helper-clearfix:before,
+.ui-helper-clearfix:after {
+    content: "";
+    display: table;
+    border-collapse: collapse;
+}
+
+.ui-helper-clearfix:after {
+    clear: both;
+}
+
+.ui-helper-zfix {
+    width: 100%;
+    height: 100%;
+    top: 0;
+    left: 0;
+    position: absolute;
+    opacity: 0;
+    filter: Alpha(Opacity=0);
+    /* support: IE8 */
+}
+
+.ui-front {
+    z-index: 100;
+}
+
+
+/* Interaction Cues
+----------------------------------*/
+
+.ui-state-disabled {
+    cursor: default !important;
+    pointer-events: none;
+}
+
+
+/* Icons
+----------------------------------*/
+
+.ui-icon {
+    display: inline-block;
+    vertical-align: middle;
+    margin-top: -.25em;
+    position: relative;
+    text-indent: -99999px;
+    overflow: hidden;
+    background-repeat: no-repeat;
+}
+
+.ui-widget-icon-block {
+    left: 50%;
+    margin-left: -8px;
+    display: block;
+}
+
+
+/* Misc visuals
+----------------------------------*/
+
+
+/* Overlays */
+
+.ui-widget-overlay {
+    position: fixed;
+    top: 0;
+    left: 0;
+    width: 100%;
+    height: 100%;
+}
+
+.ui-resizable {
+    position: relative;
+}
+
+.ui-resizable-handle {
+    position: absolute;
+    font-size: 0.1px;
+    display: block;
+    -ms-touch-action: none;
+    touch-action: none;
+}
+
+.ui-resizable-disabled .ui-resizable-handle,
+.ui-resizable-autohide .ui-resizable-handle {
+    display: none;
+}
+
+.ui-resizable-n {
+    cursor: n-resize;
+    height: 7px;
+    width: 100%;
+    top: -5px;
+    left: 0;
+}
+
+.ui-resizable-s {
+    cursor: s-resize;
+    height: 7px;
+    width: 100%;
+    bottom: -5px;
+    left: 0;
+}
+
+.ui-resizable-e {
+    cursor: e-resize;
+    width: 7px;
+    right: -5px;
+    top: 0;
+    height: 100%;
+}
+
+.ui-resizable-w {
+    cursor: w-resize;
+    width: 7px;
+    left: -5px;
+    top: 0;
+    height: 100%;
+}
+
+.ui-resizable-se {
+    cursor: se-resize;
+    width: 12px;
+    height: 12px;
+    right: 1px;
+    bottom: 1px;
+}
+
+.ui-resizable-sw {
+    cursor: sw-resize;
+    width: 9px;
+    height: 9px;
+    left: -5px;
+    bottom: -5px;
+}
+
+.ui-resizable-nw {
+    cursor: nw-resize;
+    width: 9px;
+    height: 9px;
+    left: -5px;
+    top: -5px;
+}
+
+.ui-resizable-ne {
+    cursor: ne-resize;
+    width: 9px;
+    height: 9px;
+    right: -5px;
+    top: -5px;
+}
+
+.ui-selectable {
+    -ms-touch-action: none;
+    touch-action: none;
+}
+
+.ui-selectable-helper {
+    position: absolute;
+    z-index: 100;
+    border: 1px dotted black;
+}
+
+.ui-sortable-handle {
+    -ms-touch-action: none;
+    touch-action: none;
+}
+
+.ui-accordion .ui-accordion-header {
+    display: block;
+    cursor: pointer;
+    position: relative;
+    margin: 2px 0 0 0;
+    padding: .5em .5em .5em .7em;
+    font-size: 100%;
+}
+
+.ui-accordion .ui-accordion-content {
+    padding: 1em 2.2em;
+    border-top: 0;
+    overflow: auto;
+}
+
+.ui-autocomplete {
+    position: absolute;
+    top: 0;
+    left: 0;
+    cursor: default;
+}
+
+.ui-menu {
+    list-style: none;
+    padding: 0;
+    margin: 0;
+    display: block;
+    outline: 0;
+}
+
+.ui-menu .ui-menu {
+    position: absolute;
+}
+
+.ui-menu .ui-menu-item {
+    margin: 0;
+    cursor: pointer;
+    /* support: IE10, see #8844 */
+    list-style-image: url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7");
+}
+
+.ui-menu .ui-menu-item-wrapper {
+    position: relative;
+    padding: 3px 1em 3px .4em;
+}
+
+.ui-menu .ui-menu-divider {
+    margin: 5px 0;
+    height: 0;
+    font-size: 0;
+    line-height: 0;
+    border-width: 1px 0 0 0;
+}
+
+.ui-menu .ui-state-focus,
+.ui-menu .ui-state-active {
+    margin: -1px;
+}
+
+
+/* icon support */
+
+.ui-menu-icons {
+    position: relative;
+}
+
+.ui-menu-icons .ui-menu-item-wrapper {
+    padding-left: 2em;
+}
+
+
+/* left-aligned */
+
+.ui-menu .ui-icon {
+    position: absolute;
+    top: 0;
+    bottom: 0;
+    left: .2em;
+    margin: auto 0;
+}
+
+
+/* right-aligned */
+
+.ui-menu .ui-menu-icon {
+    left: auto;
+    right: 0;
+}
+
+.ui-button {
+    padding: .4em 1em;
+    display: inline-block;
+    position: relative;
+    line-height: normal;
+    margin-right: .1em;
+    cursor: pointer;
+    vertical-align: middle;
+    text-align: center;
+    -webkit-user-select: none;
+    -moz-user-select: none;
+    -ms-user-select: none;
+    user-select: none;
+    /* Support: IE <= 11 */
+    overflow: visible;
+}
+
+.ui-button,
+.ui-button:link,
+.ui-button:visited,
+.ui-button:hover,
+.ui-button:active {
+    text-decoration: none;
+}
+
+
+/* to make room for the icon, a width needs to be set here */
+
+.ui-button-icon-only {
+    width: 2em;
+    box-sizing: border-box;
+    text-indent: -9999px;
+    white-space: nowrap;
+}
+
+
+/* no icon support for input elements */
+
+input.ui-button.ui-button-icon-only {
+    text-indent: 0;
+}
+
+
+/* button icon element(s) */
+
+.ui-button-icon-only .ui-icon {
+    position: absolute;
+    top: 50%;
+    left: 50%;
+    margin-top: -8px;
+    margin-left: -8px;
+}
+
+.ui-button.ui-icon-notext .ui-icon {
+    padding: 0;
+    width: 2.1em;
+    height: 2.1em;
+    text-indent: -9999px;
+    white-space: nowrap;
+}
+
+input.ui-button.ui-icon-notext .ui-icon {
+    width: auto;
+    height: auto;
+    text-indent: 0;
+    white-space: normal;
+    padding: .4em 1em;
+}
+
+
+/* workarounds */
+
+
+/* Support: Firefox 5 - 40 */
+
+input.ui-button::-moz-focus-inner,
+button.ui-button::-moz-focus-inner {
+    border: 0;
+    padding: 0;
+}
+
+.ui-controlgroup {
+    vertical-align: middle;
+    display: inline-block;
+}
+
+.ui-controlgroup>.ui-controlgroup-item {
+    float: left;
+    margin-left: 0;
+    margin-right: 0;
+}
+
+.ui-controlgroup>.ui-controlgroup-item:focus,
+.ui-controlgroup>.ui-controlgroup-item.ui-visual-focus {
+    z-index: 9999;
+}
+
+.ui-controlgroup-vertical>.ui-controlgroup-item {
+    display: block;
+    float: none;
+    width: 100%;
+    margin-top: 0;
+    margin-bottom: 0;
+    text-align: left;
+}
+
+.ui-controlgroup-vertical .ui-controlgroup-item {
+    box-sizing: border-box;
+}
+
+.ui-controlgroup .ui-controlgroup-label {
+    padding: .4em 1em;
+}
+
+.ui-controlgroup .ui-controlgroup-label span {
+    font-size: 80%;
+}
+
+.ui-controlgroup-horizontal .ui-controlgroup-label+.ui-controlgroup-item {
+    border-left: none;
+}
+
+.ui-controlgroup-vertical .ui-controlgroup-label+.ui-controlgroup-item {
+    border-top: none;
+}
+
+.ui-controlgroup-horizontal .ui-controlgroup-label.ui-widget-content {
+    border-right: none;
+}
+
+.ui-controlgroup-vertical .ui-controlgroup-label.ui-widget-content {
+    border-bottom: none;
+}
+
+
+/* Spinner specific style fixes */
+
+.ui-controlgroup-vertical .ui-spinner-input {
+    /* Support: IE8 only, Android < 4.4 only */
+    width: 75%;
+    width: calc( 100% - 2.4em);
+}
+
+.ui-controlgroup-vertical .ui-spinner .ui-spinner-up {
+    border-top-style: solid;
+}
+
+.ui-checkboxradio-label .ui-icon-background {
+    box-shadow: inset 1px 1px 1px #ccc;
+    border-radius: .12em;
+    border: none;
+}
+
+.ui-checkboxradio-radio-label .ui-icon-background {
+    width: 16px;
+    height: 16px;
+    border-radius: 1em;
+    overflow: visible;
+    border: none;
+}
+
+.ui-checkboxradio-radio-label.ui-checkboxradio-checked .ui-icon,
+.ui-checkboxradio-radio-label.ui-checkboxradio-checked:hover .ui-icon {
+    background-image: none;
+    width: 8px;
+    height: 8px;
+    border-width: 4px;
+    border-style: solid;
+}
+
+.ui-checkboxradio-disabled {
+    pointer-events: none;
+}
+
+.ui-datepicker {
+    width: 17em;
+    padding: .2em .2em 0;
+    display: none;
+}
+
+.ui-datepicker .ui-datepicker-header {
+    position: relative;
+    padding: .2em 0;
+}
+
+.ui-datepicker .ui-datepicker-prev,
+.ui-datepicker .ui-datepicker-next {
+    position: absolute;
+    top: 2px;
+    width: 1.8em;
+    height: 1.8em;
+}
+
+.ui-datepicker .ui-datepicker-prev-hover,
+.ui-datepicker .ui-datepicker-next-hover {
+    top: 1px;
+}
+
+.ui-datepicker .ui-datepicker-prev {
+    left: 2px;
+}
+
+.ui-datepicker .ui-datepicker-next {
+    right: 2px;
+}
+
+.ui-datepicker .ui-datepicker-prev-hover {
+    left: 1px;
+}
+
+.ui-datepicker .ui-datepicker-next-hover {
+    right: 1px;
+}
+
+.ui-datepicker .ui-datepicker-prev span,
+.ui-datepicker .ui-datepicker-next span {
+    display: block;
+    position: absolute;
+    left: 50%;
+    margin-left: -8px;
+    top: 50%;
+    margin-top: -8px;
+}
+
+.ui-datepicker .ui-datepicker-title {
+    margin: 0 2.3em;
+    line-height: 1.8em;
+    text-align: center;
+}
+
+.ui-datepicker .ui-datepicker-title select {
+    font-size: 1em;
+    margin: 1px 0;
+}
+
+.ui-datepicker select.ui-datepicker-month,
+.ui-datepicker select.ui-datepicker-year {
+    width: 45%;
+}
+
+.ui-datepicker table {
+    width: 100%;
+    font-size: .9em;
+    border-collapse: collapse;
+    margin: 0 0 .4em;
+}
+
+.ui-datepicker th {
+    padding: .7em .3em;
+    text-align: center;
+    font-weight: bold;
+    border: 0;
+}
+
+.ui-datepicker td {
+    border: 0;
+    padding: 1px;
+}
+
+.ui-datepicker td span,
+.ui-datepicker td a {
+    display: block;
+    padding: .2em;
+    text-align: right;
+    text-decoration: none;
+}
+
+.ui-datepicker .ui-datepicker-buttonpane {
+    background-image: none;
+    margin: .7em 0 0 0;
+    padding: 0 .2em;
+    border-left: 0;
+    border-right: 0;
+    border-bottom: 0;
+}
+
+.ui-datepicker .ui-datepicker-buttonpane button {
+    float: right;
+    margin: .5em .2em .4em;
+    cursor: pointer;
+    padding: .2em .6em .3em .6em;
+    width: auto;
+    overflow: visible;
+}
+
+.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current {
+    float: left;
+}
+
+
+/* with multiple calendars */
+
+.ui-datepicker.ui-datepicker-multi {
+    width: auto;
+}
+
+.ui-datepicker-multi .ui-datepicker-group {
+    float: left;
+}
+
+.ui-datepicker-multi .ui-datepicker-group table {
+    width: 95%;
+    margin: 0 auto .4em;
+}
+
+.ui-datepicker-multi-2 .ui-datepicker-group {
+    width: 50%;
+}
+
+.ui-datepicker-multi-3 .ui-datepicker-group {
+    width: 33.3%;
+}
+
+.ui-datepicker-multi-4 .ui-datepicker-group {
+    width: 25%;
+}
+
+.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,
+.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header {
+    border-left-width: 0;
+}
+
+.ui-datepicker-multi .ui-datepicker-buttonpane {
+    clear: left;
+}
+
+.ui-datepicker-row-break {
+    clear: both;
+    width: 100%;
+    font-size: 0;
+}
+
+
+/* RTL support */
+
+.ui-datepicker-rtl {
+    direction: rtl;
+}
+
+.ui-datepicker-rtl .ui-datepicker-prev {
+    right: 2px;
+    left: auto;
+}
+
+.ui-datepicker-rtl .ui-datepicker-next {
+    left: 2px;
+    right: auto;
+}
+
+.ui-datepicker-rtl .ui-datepicker-prev:hover {
+    right: 1px;
+    left: auto;
+}
+
+.ui-datepicker-rtl .ui-datepicker-next:hover {
+    left: 1px;
+    right: auto;
+}
+
+.ui-datepicker-rtl .ui-datepicker-buttonpane {
+    clear: right;
+}
+
+.ui-datepicker-rtl .ui-datepicker-buttonpane button {
+    float: left;
+}
+
+.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,
+.ui-datepicker-rtl .ui-datepicker-group {
+    float: right;
+}
+
+.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,
+.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header {
+    border-right-width: 0;
+    border-left-width: 1px;
+}
+
+
+/* Icons */
+
+.ui-datepicker .ui-icon {
+    display: block;
+    text-indent: -99999px;
+    overflow: hidden;
+    background-repeat: no-repeat;
+    left: .5em;
+    top: .3em;
+}
+
+.ui-dialog {
+    position: absolute;
+    top: 0;
+    left: 0;
+    padding: .2em;
+    outline: 0;
+}
+
+.ui-dialog .ui-dialog-titlebar {
+    padding: .4em 1em;
+    position: relative;
+}
+
+.ui-dialog .ui-dialog-title {
+    float: left;
+    margin: .1em 0;
+    white-space: nowrap;
+    width: 90%;
+    overflow: hidden;
+    text-overflow: ellipsis;
+}
+
+.ui-dialog .ui-dialog-titlebar-close {
+    position: absolute;
+    right: .3em;
+    top: 50%;
+    width: 20px;
+    margin: -10px 0 0 0;
+    padding: 1px;
+    height: 20px;
+}
+
+.ui-dialog .ui-dialog-content {
+    position: relative;
+    border: 0;
+    padding: .5em 1em;
+    background: none;
+    overflow: auto;
+}
+
+.ui-dialog .ui-dialog-buttonpane {
+    text-align: left;
+    border-width: 1px 0 0 0;
+    background-image: none;
+    margin-top: .5em;
+    padding: .3em 1em .5em .4em;
+}
+
+.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset {
+    float: right;
+}
+
+.ui-dialog .ui-dialog-buttonpane button {
+    margin: .5em .4em .5em 0;
+    cursor: pointer;
+}
+
+.ui-dialog .ui-resizable-n {
+    height: 2px;
+    top: 0;
+}
+
+.ui-dialog .ui-resizable-e {
+    width: 2px;
+    right: 0;
+}
+
+.ui-dialog .ui-resizable-s {
+    height: 2px;
+    bottom: 0;
+}
+
+.ui-dialog .ui-resizable-w {
+    width: 2px;
+    left: 0;
+}
+
+.ui-dialog .ui-resizable-se,
+.ui-dialog .ui-resizable-sw,
+.ui-dialog .ui-resizable-ne,
+.ui-dialog .ui-resizable-nw {
+    width: 7px;
+    height: 7px;
+}
+
+.ui-dialog .ui-resizable-se {
+    right: 0;
+    bottom: 0;
+}
+
+.ui-dialog .ui-resizable-sw {
+    left: 0;
+    bottom: 0;
+}
+
+.ui-dialog .ui-resizable-ne {
+    right: 0;
+    top: 0;
+}
+
+.ui-dialog .ui-resizable-nw {
+    left: 0;
+    top: 0;
+}
+
+.ui-draggable .ui-dialog-titlebar {
+    cursor: move;
+}
+
+.ui-progressbar {
+    height: 2em;
+    text-align: left;
+    overflow: hidden;
+}
+
+.ui-progressbar .ui-progressbar-value {
+    margin: -1px;
+    height: 100%;
+}
+
+.ui-progressbar .ui-progressbar-overlay {
+    background: url("data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw==");
+    height: 100%;
+    filter: alpha(opacity=25);
+    /* support: IE8 */
+    opacity: 0.25;
+}
+
+.ui-progressbar-indeterminate .ui-progressbar-value {
+    background-image: none;
+}
+
+.ui-selectmenu-menu {
+    padding: 0;
+    margin: 0;
+    position: absolute;
+    top: 0;
+    left: 0;
+    display: none;
+}
+
+.ui-selectmenu-menu .ui-menu {
+    overflow: auto;
+    overflow-x: hidden;
+    padding-bottom: 1px;
+}
+
+.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup {
+    font-size: 1em;
+    font-weight: bold;
+    line-height: 1.5;
+    padding: 2px 0.4em;
+    margin: 0.5em 0 0 0;
+    height: auto;
+    border: 0;
+}
+
+.ui-selectmenu-open {
+    display: block;
+}
+
+.ui-selectmenu-text {
+    display: block;
+    margin-right: 20px;
+    overflow: hidden;
+    text-overflow: ellipsis;
+}
+
+.ui-selectmenu-button.ui-button {
+    text-align: left;
+    white-space: nowrap;
+    width: 14em;
+}
+
+.ui-selectmenu-icon.ui-icon {
+    float: right;
+    margin-top: 0;
+}
+
+.ui-slider {
+    position: relative;
+    text-align: left;
+}
+
+.ui-slider .ui-slider-handle {
+    position: absolute;
+    z-index: 2;
+    width: 1.2em;
+    height: 1.2em;
+    cursor: default;
+    -ms-touch-action: none;
+    touch-action: none;
+}
+
+.ui-slider .ui-slider-range {
+    position: absolute;
+    z-index: 1;
+    font-size: .7em;
+    display: block;
+    border: 0;
+    background-position: 0 0;
+}
+
+
+/* support: IE8 - See #6727 */
+
+.ui-slider.ui-state-disabled .ui-slider-handle,
+.ui-slider.ui-state-disabled .ui-slider-range {
+    filter: inherit;
+}
+
+.ui-slider-horizontal {
+    height: .8em;
+}
+
+.ui-slider-horizontal .ui-slider-handle {
+    top: -.3em;
+    margin-left: -.6em;
+}
+
+.ui-slider-horizontal .ui-slider-range {
+    top: 0;
+    height: 100%;
+}
+
+.ui-slider-horizontal .ui-slider-range-min {
+    left: 0;
+}
+
+.ui-slider-horizontal .ui-slider-range-max {
+    right: 0;
+}
+
+.ui-slider-vertical {
+    width: .8em;
+    height: 100px;
+}
+
+.ui-slider-vertical .ui-slider-handle {
+    left: -.3em;
+    margin-left: 0;
+    margin-bottom: -.6em;
+}
+
+.ui-slider-vertical .ui-slider-range {
+    left: 0;
+    width: 100%;
+}
+
+.ui-slider-vertical .ui-slider-range-min {
+    bottom: 0;
+}
+
+.ui-slider-vertical .ui-slider-range-max {
+    top: 0;
+}
+
+.ui-spinner {
+    position: relative;
+    display: inline-block;
+    overflow: hidden;
+    padding: 0;
+    vertical-align: middle;
+}
+
+.ui-spinner-input {
+    border: none;
+    background: none;
+    color: inherit;
+    padding: .222em 0;
+    margin: .2em 0;
+    vertical-align: middle;
+    margin-left: .4em;
+    margin-right: 2em;
+}
+
+.ui-spinner-button {
+    width: 1.6em;
+    height: 50%;
+    font-size: .5em;
+    padding: 0;
+    margin: 0;
+    text-align: center;
+    position: absolute;
+    cursor: default;
+    display: block;
+    overflow: hidden;
+    right: 0;
+}
+
+
+/* more specificity required here to override default borders */
+
+.ui-spinner a.ui-spinner-button {
+    border-top-style: none;
+    border-bottom-style: none;
+    border-right-style: none;
+}
+
+.ui-spinner-up {
+    top: 0;
+}
+
+.ui-spinner-down {
+    bottom: 0;
+}
+
+.ui-tabs {
+    position: relative;
+    /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
+    padding: .2em;
+}
+
+.ui-tabs .ui-tabs-nav {
+    margin: 0;
+    padding: .2em .2em 0;
+}
+
+.ui-tabs .ui-tabs-nav li {
+    list-style: none;
+    float: left;
+    position: relative;
+    top: 0;
+    margin: 1px .2em 0 0;
+    border-bottom-width: 0;
+    padding: 0;
+    white-space: nowrap;
+}
+
+.ui-tabs .ui-tabs-nav .ui-tabs-anchor {
+    float: left;
+    padding: .5em 1em;
+    text-decoration: none;
+}
+
+.ui-tabs .ui-tabs-nav li.ui-tabs-active {
+    margin-bottom: -1px;
+    padding-bottom: 1px;
+}
+
+.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,
+.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,
+.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor {
+    cursor: text;
+}
+
+.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor {
+    cursor: pointer;
+}
+
+.ui-tabs .ui-tabs-panel {
+    display: block;
+    border-width: 0;
+    padding: 1em 1.4em;
+    background: none;
+}
+
+.ui-tooltip {
+    padding: 8px;
+    position: absolute;
+    z-index: 9999;
+    max-width: 300px;
+}
+
+body .ui-tooltip {
+    border-width: 2px;
+}
+
+
+/* Component containers
+----------------------------------*/
+
+.ui-widget {
+    font-family: Lucida Grande, Lucida Sans, Arial, sans-serif;
+    font-size: 1.1em;
+}
+
+.ui-widget .ui-widget {
+    font-size: 1em;
+}
+
+.ui-widget input,
+.ui-widget select,
+.ui-widget textarea,
+.ui-widget button {
+    font-family: Lucida Grande, Lucida Sans, Arial, sans-serif;
+    font-size: 1em;
+}
+
+.ui-widget.ui-widget-content {
+    border: 1px solid #aed0ea;
+}
+
+.ui-widget-content {
+    border: 1px solid #dddddd;
+    background: #f2f5f7 url("images/ui-bg_highlight-hard_100_f2f5f7_1x100.png") 50% top repeat-x;
+    color: #362b36;
+}
+
+.ui-widget-content a {
+    color: #362b36;
+}
+
+.ui-widget-header {
+    border: 1px solid #aed0ea;
+    background: #deedf7 url("images/ui-bg_highlight-soft_100_deedf7_1x100.png") 50% 50% repeat-x;
+    color: #222222;
+    font-weight: bold;
+}
+
+.ui-widget-header a {
+    color: #222222;
+}
+
+
+/* Interaction states
+----------------------------------*/
+
+.ui-state-default,
+.ui-widget-content .ui-state-default,
+.ui-widget-header .ui-state-default,
+.ui-button,
+
+/* We use html here because we need a greater specificity to make sure disabled
+works properly when clicked or hovered */
+
+html .ui-button.ui-state-disabled:hover,
+html .ui-button.ui-state-disabled:active {
+    border: 1px solid #aed0ea;
+    background: #d7ebf9 url("images/ui-bg_glass_80_d7ebf9_1x400.png") 50% 50% repeat-x;
+    font-weight: bold;
+    color: #2779aa;
+}
+
+.ui-state-default a,
+.ui-state-default a:link,
+.ui-state-default a:visited,
+a.ui-button,
+a:link.ui-button,
+a:visited.ui-button,
+.ui-button {
+    color: #2779aa;
+    text-decoration: none;
+}
+
+.ui-state-hover,
+.ui-widget-content .ui-state-hover,
+.ui-widget-header .ui-state-hover,
+.ui-state-focus,
+.ui-widget-content .ui-state-focus,
+.ui-widget-header .ui-state-focus,
+.ui-button:hover,
+.ui-button:focus {
+    border: 1px solid #74b2e2;
+    background: #e4f1fb url("images/ui-bg_glass_100_e4f1fb_1x400.png") 50% 50% repeat-x;
+    font-weight: bold;
+    color: #0070a3;
+}
+
+.ui-state-hover a,
+.ui-state-hover a:hover,
+.ui-state-hover a:link,
+.ui-state-hover a:visited,
+.ui-state-focus a,
+.ui-state-focus a:hover,
+.ui-state-focus a:link,
+.ui-state-focus a:visited,
+a.ui-button:hover,
+a.ui-button:focus {
+    color: #0070a3;
+    text-decoration: none;
+}
+
+.ui-visual-focus {
+    box-shadow: 0 0 3px 1px rgb(94, 158, 214);
+}
+
+.ui-state-active,
+.ui-widget-content .ui-state-active,
+.ui-widget-header .ui-state-active,
+a.ui-button:active,
+.ui-button:active,
+.ui-button.ui-state-active:hover {
+    border: 1px solid #2694e8;
+    background: #3baae3 url("images/ui-bg_glass_50_3baae3_1x400.png") 50% 50% repeat-x;
+    font-weight: bold;
+    color: #ffffff;
+}
+
+.ui-icon-background,
+.ui-state-active .ui-icon-background {
+    border: #2694e8;
+    background-color: #ffffff;
+}
+
+.ui-state-active a,
+.ui-state-active a:link,
+.ui-state-active a:visited {
+    color: #ffffff;
+    text-decoration: none;
+}
+
+
+/* Interaction Cues
+----------------------------------*/
+
+.ui-state-highlight,
+.ui-widget-content .ui-state-highlight,
+.ui-widget-header .ui-state-highlight {
+    border: 1px solid #f9dd34;
+    background: #ffef8f url("images/ui-bg_highlight-soft_25_ffef8f_1x100.png") 50% top repeat-x;
+    color: #363636;
+}
+
+.ui-state-checked {
+    border: 1px solid #f9dd34;
+    background: #ffef8f;
+}
+
+.ui-state-highlight a,
+.ui-widget-content .ui-state-highlight a,
+.ui-widget-header .ui-state-highlight a {
+    color: #363636;
+}
+
+.ui-state-error,
+.ui-widget-content .ui-state-error,
+.ui-widget-header .ui-state-error {
+    border: 1px solid #cd0a0a;
+    background: #cd0a0a;
+    color: #ffffff;
+}
+
+.ui-state-error a,
+.ui-widget-content .ui-state-error a,
+.ui-widget-header .ui-state-error a {
+    color: #ffffff;
+}
+
+.ui-state-error-text,
+.ui-widget-content .ui-state-error-text,
+.ui-widget-header .ui-state-error-text {
+    color: #ffffff;
+}
+
+.ui-priority-primary,
+.ui-widget-content .ui-priority-primary,
+.ui-widget-header .ui-priority-primary {
+    font-weight: bold;
+}
+
+.ui-priority-secondary,
+.ui-widget-content .ui-priority-secondary,
+.ui-widget-header .ui-priority-secondary {
+    opacity: .7;
+    filter: Alpha(Opacity=70);
+    /* support: IE8 */
+    font-weight: normal;
+}
+
+.ui-state-disabled,
+.ui-widget-content .ui-state-disabled,
+.ui-widget-header .ui-state-disabled {
+    opacity: .35;
+    filter: Alpha(Opacity=35);
+    /* support: IE8 */
+    background-image: none;
+}
+
+.ui-state-disabled .ui-icon {
+    filter: Alpha(Opacity=35);
+    /* support: IE8 - See #6059 */
+}
+
+
+/* Icons
+----------------------------------*/
+
+
+/* states and images */
+
+.ui-icon {
+    width: 16px;
+    height: 16px;
+}
+
+.ui-icon,
+.ui-widget-content .ui-icon {
+    background-image: url("images/ui-icons_72a7cf_256x240.png");
+}
+
+.ui-widget-header .ui-icon {
+    background-image: url("images/ui-icons_72a7cf_256x240.png");
+}
+
+.ui-state-hover .ui-icon,
+.ui-state-focus .ui-icon,
+.ui-button:hover .ui-icon,
+.ui-button:focus .ui-icon {
+    background-image: url("images/ui-icons_2694e8_256x240.png");
+}
+
+.ui-state-active .ui-icon,
+.ui-button:active .ui-icon {
+    background-image: url("images/ui-icons_ffffff_256x240.png");
+}
+
+.ui-state-highlight .ui-icon,
+.ui-button .ui-state-highlight.ui-icon {
+    background-image: url("images/ui-icons_2e83ff_256x240.png");
+}
+
+.ui-state-error .ui-icon,
+.ui-state-error-text .ui-icon {
+    background-image: url("images/ui-icons_ffffff_256x240.png");
+}
+
+.ui-button .ui-icon {
+    background-image: url("images/ui-icons_3d80b3_256x240.png");
+}
+
+
+/* positioning */
+
+.ui-icon-blank {
+    background-position: 16px 16px;
+}
+
+.ui-icon-caret-1-n {
+    background-position: 0 0;
+}
+
+.ui-icon-caret-1-ne {
+    background-position: -16px 0;
+}
+
+.ui-icon-caret-1-e {
+    background-position: -32px 0;
+}
+
+.ui-icon-caret-1-se {
+    background-position: -48px 0;
+}
+
+.ui-icon-caret-1-s {
+    background-position: -65px 0;
+}
+
+.ui-icon-caret-1-sw {
+    background-position: -80px 0;
+}
+
+.ui-icon-caret-1-w {
+    background-position: -96px 0;
+}
+
+.ui-icon-caret-1-nw {
+    background-position: -112px 0;
+}
+
+.ui-icon-caret-2-n-s {
+    background-position: -128px 0;
+}
+
+.ui-icon-caret-2-e-w {
+    background-position: -144px 0;
+}
+
+.ui-icon-triangle-1-n {
+    background-position: 0 -16px;
+}
+
+.ui-icon-triangle-1-ne {
+    background-position: -16px -16px;
+}
+
+.ui-icon-triangle-1-e {
+    background-position: -32px -16px;
+}
+
+.ui-icon-triangle-1-se {
+    background-position: -48px -16px;
+}
+
+.ui-icon-triangle-1-s {
+    background-position: -65px -16px;
+}
+
+.ui-icon-triangle-1-sw {
+    background-position: -80px -16px;
+}
+
+.ui-icon-triangle-1-w {
+    background-position: -96px -16px;
+}
+
+.ui-icon-triangle-1-nw {
+    background-position: -112px -16px;
+}
+
+.ui-icon-triangle-2-n-s {
+    background-position: -128px -16px;
+}
+
+.ui-icon-triangle-2-e-w {
+    background-position: -144px -16px;
+}
+
+.ui-icon-arrow-1-n {
+    background-position: 0 -32px;
+}
+
+.ui-icon-arrow-1-ne {
+    background-position: -16px -32px;
+}
+
+.ui-icon-arrow-1-e {
+    background-position: -32px -32px;
+}
+
+.ui-icon-arrow-1-se {
+    background-position: -48px -32px;
+}
+
+.ui-icon-arrow-1-s {
+    background-position: -65px -32px;
+}
+
+.ui-icon-arrow-1-sw {
+    background-position: -80px -32px;
+}
+
+.ui-icon-arrow-1-w {
+    background-position: -96px -32px;
+}
+
+.ui-icon-arrow-1-nw {
+    background-position: -112px -32px;
+}
+
+.ui-icon-arrow-2-n-s {
+    background-position: -128px -32px;
+}
+
+.ui-icon-arrow-2-ne-sw {
+    background-position: -144px -32px;
+}
+
+.ui-icon-arrow-2-e-w {
+    background-position: -160px -32px;
+}
+
+.ui-icon-arrow-2-se-nw {
+    background-position: -176px -32px;
+}
+
+.ui-icon-arrowstop-1-n {
+    background-position: -192px -32px;
+}
+
+.ui-icon-arrowstop-1-e {
+    background-position: -208px -32px;
+}
+
+.ui-icon-arrowstop-1-s {
+    background-position: -224px -32px;
+}
+
+.ui-icon-arrowstop-1-w {
+    background-position: -240px -32px;
+}
+
+.ui-icon-arrowthick-1-n {
+    background-position: 1px -48px;
+}
+
+.ui-icon-arrowthick-1-ne {
+    background-position: -16px -48px;
+}
+
+.ui-icon-arrowthick-1-e {
+    background-position: -32px -48px;
+}
+
+.ui-icon-arrowthick-1-se {
+    background-position: -48px -48px;
+}
+
+.ui-icon-arrowthick-1-s {
+    background-position: -64px -48px;
+}
+
+.ui-icon-arrowthick-1-sw {
+    background-position: -80px -48px;
+}
+
+.ui-icon-arrowthick-1-w {
+    background-position: -96px -48px;
+}
+
+.ui-icon-arrowthick-1-nw {
+    background-position: -112px -48px;
+}
+
+.ui-icon-arrowthick-2-n-s {
+    background-position: -128px -48px;
+}
+
+.ui-icon-arrowthick-2-ne-sw {
+    background-position: -144px -48px;
+}
+
+.ui-icon-arrowthick-2-e-w {
+    background-position: -160px -48px;
+}
+
+.ui-icon-arrowthick-2-se-nw {
+    background-position: -176px -48px;
+}
+
+.ui-icon-arrowthickstop-1-n {
+    background-position: -192px -48px;
+}
+
+.ui-icon-arrowthickstop-1-e {
+    background-position: -208px -48px;
+}
+
+.ui-icon-arrowthickstop-1-s {
+    background-position: -224px -48px;
+}
+
+.ui-icon-arrowthickstop-1-w {
+    background-position: -240px -48px;
+}
+
+.ui-icon-arrowreturnthick-1-w {
+    background-position: 0 -64px;
+}
+
+.ui-icon-arrowreturnthick-1-n {
+    background-position: -16px -64px;
+}
+
+.ui-icon-arrowreturnthick-1-e {
+    background-position: -32px -64px;
+}
+
+.ui-icon-arrowreturnthick-1-s {
+    background-position: -48px -64px;
+}
+
+.ui-icon-arrowreturn-1-w {
+    background-position: -64px -64px;
+}
+
+.ui-icon-arrowreturn-1-n {
+    background-position: -80px -64px;
+}
+
+.ui-icon-arrowreturn-1-e {
+    background-position: -96px -64px;
+}
+
+.ui-icon-arrowreturn-1-s {
+    background-position: -112px -64px;
+}
+
+.ui-icon-arrowrefresh-1-w {
+    background-position: -128px -64px;
+}
+
+.ui-icon-arrowrefresh-1-n {
+    background-position: -144px -64px;
+}
+
+.ui-icon-arrowrefresh-1-e {
+    background-position: -160px -64px;
+}
+
+.ui-icon-arrowrefresh-1-s {
+    background-position: -176px -64px;
+}
+
+.ui-icon-arrow-4 {
+    background-position: 0 -80px;
+}
+
+.ui-icon-arrow-4-diag {
+    background-position: -16px -80px;
+}
+
+.ui-icon-extlink {
+    background-position: -32px -80px;
+}
+
+.ui-icon-newwin {
+    background-position: -48px -80px;
+}
+
+.ui-icon-refresh {
+    background-position: -64px -80px;
+}
+
+.ui-icon-shuffle {
+    background-position: -80px -80px;
+}
+
+.ui-icon-transfer-e-w {
+    background-position: -96px -80px;
+}
+
+.ui-icon-transferthick-e-w {
+    background-position: -112px -80px;
+}
+
+.ui-icon-folder-collapsed {
+    background-position: 0 -96px;
+}
+
+.ui-icon-folder-open {
+    background-position: -16px -96px;
+}
+
+.ui-icon-document {
+    background-position: -32px -96px;
+}
+
+.ui-icon-document-b {
+    background-position: -48px -96px;
+}
+
+.ui-icon-note {
+    background-position: -64px -96px;
+}
+
+.ui-icon-mail-closed {
+    background-position: -80px -96px;
+}
+
+.ui-icon-mail-open {
+    background-position: -96px -96px;
+}
+
+.ui-icon-suitcase {
+    background-position: -112px -96px;
+}
+
+.ui-icon-comment {
+    background-position: -128px -96px;
+}
+
+.ui-icon-person {
+    background-position: -144px -96px;
+}
+
+.ui-icon-print {
+    background-position: -160px -96px;
+}
+
+.ui-icon-trash {
+    background-position: -176px -96px;
+}
+
+.ui-icon-locked {
+    background-position: -192px -96px;
+}
+
+.ui-icon-unlocked {
+    background-position: -208px -96px;
+}
+
+.ui-icon-bookmark {
+    background-position: -224px -96px;
+}
+
+.ui-icon-tag {
+    background-position: -240px -96px;
+}
+
+.ui-icon-home {
+    background-position: 0 -112px;
+}
+
+.ui-icon-flag {
+    background-position: -16px -112px;
+}
+
+.ui-icon-calendar {
+    background-position: -32px -112px;
+}
+
+.ui-icon-cart {
+    background-position: -48px -112px;
+}
+
+.ui-icon-pencil {
+    background-position: -64px -112px;
+}
+
+.ui-icon-clock {
+    background-position: -80px -112px;
+}
+
+.ui-icon-disk {
+    background-position: -96px -112px;
+}
+
+.ui-icon-calculator {
+    background-position: -112px -112px;
+}
+
+.ui-icon-zoomin {
+    background-position: -128px -112px;
+}
+
+.ui-icon-zoomout {
+    background-position: -144px -112px;
+}
+
+.ui-icon-search {
+    background-position: -160px -112px;
+}
+
+.ui-icon-wrench {
+    background-position: -176px -112px;
+}
+
+.ui-icon-gear {
+    background-position: -192px -112px;
+}
+
+.ui-icon-heart {
+    background-position: -208px -112px;
+}
+
+.ui-icon-star {
+    background-position: -224px -112px;
+}
+
+.ui-icon-link {
+    background-position: -240px -112px;
+}
+
+.ui-icon-cancel {
+    background-position: 0 -128px;
+}
+
+.ui-icon-plus {
+    background-position: -16px -128px;
+}
+
+.ui-icon-plusthick {
+    background-position: -32px -128px;
+}
+
+.ui-icon-minus {
+    background-position: -48px -128px;
+}
+
+.ui-icon-minusthick {
+    background-position: -64px -128px;
+}
+
+.ui-icon-close {
+    background-position: -80px -128px;
+}
+
+.ui-icon-closethick {
+    background-position: -96px -128px;
+}
+
+.ui-icon-key {
+    background-position: -112px -128px;
+}
+
+.ui-icon-lightbulb {
+    background-position: -128px -128px;
+}
+
+.ui-icon-scissors {
+    background-position: -144px -128px;
+}
+
+.ui-icon-clipboard {
+    background-position: -160px -128px;
+}
+
+.ui-icon-copy {
+    background-position: -176px -128px;
+}
+
+.ui-icon-contact {
+    background-position: -192px -128px;
+}
+
+.ui-icon-image {
+    background-position: -208px -128px;
+}
+
+.ui-icon-video {
+    background-position: -224px -128px;
+}
+
+.ui-icon-script {
+    background-position: -240px -128px;
+}
+
+.ui-icon-alert {
+    background-position: 0 -144px;
+}
+
+.ui-icon-info {
+    background-position: -16px -144px;
+}
+
+.ui-icon-notice {
+    background-position: -32px -144px;
+}
+
+.ui-icon-help {
+    background-position: -48px -144px;
+}
+
+.ui-icon-check {
+    background-position: -64px -144px;
+}
+
+.ui-icon-bullet {
+    background-position: -80px -144px;
+}
+
+.ui-icon-radio-on {
+    background-position: -96px -144px;
+}
+
+.ui-icon-radio-off {
+    background-position: -112px -144px;
+}
+
+.ui-icon-pin-w {
+    background-position: -128px -144px;
+}
+
+.ui-icon-pin-s {
+    background-position: -144px -144px;
+}
+
+.ui-icon-play {
+    background-position: 0 -160px;
+}
+
+.ui-icon-pause {
+    background-position: -16px -160px;
+}
+
+.ui-icon-seek-next {
+    background-position: -32px -160px;
+}
+
+.ui-icon-seek-prev {
+    background-position: -48px -160px;
+}
+
+.ui-icon-seek-end {
+    background-position: -64px -160px;
+}
+
+.ui-icon-seek-start {
+    background-position: -80px -160px;
+}
+
+
+/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
+
+.ui-icon-seek-first {
+    background-position: -80px -160px;
+}
+
+.ui-icon-stop {
+    background-position: -96px -160px;
+}
+
+.ui-icon-eject {
+    background-position: -112px -160px;
+}
+
+.ui-icon-volume-off {
+    background-position: -128px -160px;
+}
+
+.ui-icon-volume-on {
+    background-position: -144px -160px;
+}
+
+.ui-icon-power {
+    background-position: 0 -176px;
+}
+
+.ui-icon-signal-diag {
+    background-position: -16px -176px;
+}
+
+.ui-icon-signal {
+    background-position: -32px -176px;
+}
+
+.ui-icon-battery-0 {
+    background-position: -48px -176px;
+}
+
+.ui-icon-battery-1 {
+    background-position: -64px -176px;
+}
+
+.ui-icon-battery-2 {
+    background-position: -80px -176px;
+}
+
+.ui-icon-battery-3 {
+    background-position: -96px -176px;
+}
+
+.ui-icon-circle-plus {
+    background-position: 0 -192px;
+}
+
+.ui-icon-circle-minus {
+    background-position: -16px -192px;
+}
+
+.ui-icon-circle-close {
+    background-position: -32px -192px;
+}
+
+.ui-icon-circle-triangle-e {
+    background-position: -48px -192px;
+}
+
+.ui-icon-circle-triangle-s {
+    background-position: -64px -192px;
+}
+
+.ui-icon-circle-triangle-w {
+    background-position: -80px -192px;
+}
+
+.ui-icon-circle-triangle-n {
+    background-position: -96px -192px;
+}
+
+.ui-icon-circle-arrow-e {
+    background-position: -112px -192px;
+}
+
+.ui-icon-circle-arrow-s {
+    background-position: -128px -192px;
+}
+
+.ui-icon-circle-arrow-w {
+    background-position: -144px -192px;
+}
+
+.ui-icon-circle-arrow-n {
+    background-position: -160px -192px;
+}
+
+.ui-icon-circle-zoomin {
+    background-position: -176px -192px;
+}
+
+.ui-icon-circle-zoomout {
+    background-position: -192px -192px;
+}
+
+.ui-icon-circle-check {
+    background-position: -208px -192px;
+}
+
+.ui-icon-circlesmall-plus {
+    background-position: 0 -208px;
+}
+
+.ui-icon-circlesmall-minus {
+    background-position: -16px -208px;
+}
+
+.ui-icon-circlesmall-close {
+    background-position: -32px -208px;
+}
+
+.ui-icon-squaresmall-plus {
+    background-position: -48px -208px;
+}
+
+.ui-icon-squaresmall-minus {
+    background-position: -64px -208px;
+}
+
+.ui-icon-squaresmall-close {
+    background-position: -80px -208px;
+}
+
+.ui-icon-grip-dotted-vertical {
+    background-position: 0 -224px;
+}
+
+.ui-icon-grip-dotted-horizontal {
+    background-position: -16px -224px;
+}
+
+.ui-icon-grip-solid-vertical {
+    background-position: -32px -224px;
+}
+
+.ui-icon-grip-solid-horizontal {
+    background-position: -48px -224px;
+}
+
+.ui-icon-gripsmall-diagonal-se {
+    background-position: -64px -224px;
+}
+
+.ui-icon-grip-diagonal-se {
+    background-position: -80px -224px;
+}
+
+
+/* Misc visuals
+----------------------------------*/
+
+
+/* Corner radius */
+
+.ui-corner-all,
+.ui-corner-top,
+.ui-corner-left,
+.ui-corner-tl {
+    border-top-left-radius: 6px;
+}
+
+.ui-corner-all,
+.ui-corner-top,
+.ui-corner-right,
+.ui-corner-tr {
+    border-top-right-radius: 6px;
+}
+
+.ui-corner-all,
+.ui-corner-bottom,
+.ui-corner-left,
+.ui-corner-bl {
+    border-bottom-left-radius: 6px;
+}
+
+.ui-corner-all,
+.ui-corner-bottom,
+.ui-corner-right,
+.ui-corner-br {
+    border-bottom-right-radius: 6px;
+}
+
+
+/* Overlays */
+
+.ui-widget-overlay {
+    background: #eeeeee url("images/ui-bg_diagonals-thick_90_eeeeee_40x40.png") 50% 50% repeat;
+    opacity: .8;
+    filter: Alpha(Opacity=80);
+    /* support: IE8 */
+}
+
+.ui-widget-shadow {
+    -webkit-box-shadow: -7px -7px 7px #000000;
+    box-shadow: -7px -7px 7px #000000;
+}
\ No newline at end of file
diff --git a/htdocs/cgi-bin/wsrc/jquery-ui.js b/htdocs/cgi-bin/wsrc/jquery-ui.js
new file mode 100644 (file)
index 0000000..bc179a7
--- /dev/null
@@ -0,0 +1,18627 @@
+/*! jQuery UI - v1.12.1 - 2019-05-13
+* http://jqueryui.com
+* Includes: widget.js, position.js, data.js, disable-selection.js, focusable.js, form-reset-mixin.js, keycode.js, labels.js, scroll-parent.js, tabbable.js, unique-id.js, widgets/draggable.js, widgets/droppable.js, widgets/resizable.js, widgets/selectable.js, widgets/sortable.js, widgets/accordion.js, widgets/autocomplete.js, widgets/button.js, widgets/checkboxradio.js, widgets/controlgroup.js, widgets/datepicker.js, widgets/dialog.js, widgets/menu.js, widgets/mouse.js, widgets/progressbar.js, widgets/selectmenu.js, widgets/slider.js, widgets/spinner.js, widgets/tabs.js, widgets/tooltip.js, effect.js, effects/effect-blind.js, effects/effect-bounce.js, effects/effect-clip.js, effects/effect-drop.js, effects/effect-explode.js, effects/effect-fade.js, effects/effect-fold.js, effects/effect-highlight.js, effects/effect-puff.js, effects/effect-pulsate.js, effects/effect-scale.js, effects/effect-shake.js, effects/effect-size.js, effects/effect-slide.js, effects/effect-transfer.js
+* Copyright jQuery Foundation and other contributors; Licensed MIT */
+
+(function( factory ) {
+       if ( typeof define === "function" && define.amd ) {
+
+               // AMD. Register as an anonymous module.
+               define([ "jquery" ], factory );
+       } else {
+
+               // Browser globals
+               factory( jQuery );
+       }
+}(function( $ ) {
+
+$.ui = $.ui || {};
+
+var version = $.ui.version = "1.12.1";
+
+
+/*!
+ * jQuery UI Widget 1.12.1
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ */
+
+//>>label: Widget
+//>>group: Core
+//>>description: Provides a factory for creating stateful widgets with a common API.
+//>>docs: http://api.jqueryui.com/jQuery.widget/
+//>>demos: http://jqueryui.com/widget/
+
+
+
+var widgetUuid = 0;
+var widgetSlice = Array.prototype.slice;
+
+$.cleanData = ( function( orig ) {
+       return function( elems ) {
+               var events, elem, i;
+               for ( i = 0; ( elem = elems[ i ] ) != null; i++ ) {
+                       try {
+
+                               // Only trigger remove when necessary to save time
+                               events = $._data( elem, "events" );
+                               if ( events && events.remove ) {
+                                       $( elem ).triggerHandler( "remove" );
+                               }
+
+                       // Http://bugs.jquery.com/ticket/8235
+                       } catch ( e ) {}
+               }
+               orig( elems );
+       };
+} )( $.cleanData );
+
+$.widget = function( name, base, prototype ) {
+       var existingConstructor, constructor, basePrototype;
+
+       // ProxiedPrototype allows the provided prototype to remain unmodified
+       // so that it can be used as a mixin for multiple widgets (#8876)
+       var proxiedPrototype = {};
+
+       var namespace = name.split( "." )[ 0 ];
+       name = name.split( "." )[ 1 ];
+       var fullName = namespace + "-" + name;
+
+       if ( !prototype ) {
+               prototype = base;
+               base = $.Widget;
+       }
+
+       if ( $.isArray( prototype ) ) {
+               prototype = $.extend.apply( null, [ {} ].concat( prototype ) );
+       }
+
+       // Create selector for plugin
+       $.expr[ ":" ][ fullName.toLowerCase() ] = function( elem ) {
+               return !!$.data( elem, fullName );
+       };
+
+       $[ namespace ] = $[ namespace ] || {};
+       existingConstructor = $[ namespace ][ name ];
+       constructor = $[ namespace ][ name ] = function( options, element ) {
+
+               // Allow instantiation without "new" keyword
+               if ( !this._createWidget ) {
+                       return new constructor( options, element );
+               }
+
+               // Allow instantiation without initializing for simple inheritance
+               // must use "new" keyword (the code above always passes args)
+               if ( arguments.length ) {
+                       this._createWidget( options, element );
+               }
+       };
+
+       // Extend with the existing constructor to carry over any static properties
+       $.extend( constructor, existingConstructor, {
+               version: prototype.version,
+
+               // Copy the object used to create the prototype in case we need to
+               // redefine the widget later
+               _proto: $.extend( {}, prototype ),
+
+               // Track widgets that inherit from this widget in case this widget is
+               // redefined after a widget inherits from it
+               _childConstructors: []
+       } );
+
+       basePrototype = new base();
+
+       // We need to make the options hash a property directly on the new instance
+       // otherwise we'll modify the options hash on the prototype that we're
+       // inheriting from
+       basePrototype.options = $.widget.extend( {}, basePrototype.options );
+       $.each( prototype, function( prop, value ) {
+               if ( !$.isFunction( value ) ) {
+                       proxiedPrototype[ prop ] = value;
+                       return;
+               }
+               proxiedPrototype[ prop ] = ( function() {
+                       function _super() {
+                               return base.prototype[ prop ].apply( this, arguments );
+                       }
+
+                       function _superApply( args ) {
+                               return base.prototype[ prop ].apply( this, args );
+                       }
+
+                       return function() {
+                               var __super = this._super;
+                               var __superApply = this._superApply;
+                               var returnValue;
+
+                               this._super = _super;
+                               this._superApply = _superApply;
+
+                               returnValue = value.apply( this, arguments );
+
+                               this._super = __super;
+                               this._superApply = __superApply;
+
+                               return returnValue;
+                       };
+               } )();
+       } );
+       constructor.prototype = $.widget.extend( basePrototype, {
+
+               // TODO: remove support for widgetEventPrefix
+               // always use the name + a colon as the prefix, e.g., draggable:start
+               // don't prefix for widgets that aren't DOM-based
+               widgetEventPrefix: existingConstructor ? ( basePrototype.widgetEventPrefix || name ) : name
+       }, proxiedPrototype, {
+               constructor: constructor,
+               namespace: namespace,
+               widgetName: name,
+               widgetFullName: fullName
+       } );
+
+       // If this widget is being redefined then we need to find all widgets that
+       // are inheriting from it and redefine all of them so that they inherit from
+       // the new version of this widget. We're essentially trying to replace one
+       // level in the prototype chain.
+       if ( existingConstructor ) {
+               $.each( existingConstructor._childConstructors, function( i, child ) {
+                       var childPrototype = child.prototype;
+
+                       // Redefine the child widget using the same prototype that was
+                       // originally used, but inherit from the new version of the base
+                       $.widget( childPrototype.namespace + "." + childPrototype.widgetName, constructor,
+                               child._proto );
+               } );
+
+               // Remove the list of existing child constructors from the old constructor
+               // so the old child constructors can be garbage collected
+               delete existingConstructor._childConstructors;
+       } else {
+               base._childConstructors.push( constructor );
+       }
+
+       $.widget.bridge( name, constructor );
+
+       return constructor;
+};
+
+$.widget.extend = function( target ) {
+       var input = widgetSlice.call( arguments, 1 );
+       var inputIndex = 0;
+       var inputLength = input.length;
+       var key;
+       var value;
+
+       for ( ; inputIndex < inputLength; inputIndex++ ) {
+               for ( key in input[ inputIndex ] ) {
+                       value = input[ inputIndex ][ key ];
+                       if ( input[ inputIndex ].hasOwnProperty( key ) && value !== undefined ) {
+
+                               // Clone objects
+                               if ( $.isPlainObject( value ) ) {
+                                       target[ key ] = $.isPlainObject( target[ key ] ) ?
+                                               $.widget.extend( {}, target[ key ], value ) :
+
+                                               // Don't extend strings, arrays, etc. with objects
+                                               $.widget.extend( {}, value );
+
+                               // Copy everything else by reference
+                               } else {
+                                       target[ key ] = value;
+                               }
+                       }
+               }
+       }
+       return target;
+};
+
+$.widget.bridge = function( name, object ) {
+       var fullName = object.prototype.widgetFullName || name;
+       $.fn[ name ] = function( options ) {
+               var isMethodCall = typeof options === "string";
+               var args = widgetSlice.call( arguments, 1 );
+               var returnValue = this;
+
+               if ( isMethodCall ) {
+
+                       // If this is an empty collection, we need to have the instance method
+                       // return undefined instead of the jQuery instance
+                       if ( !this.length && options === "instance" ) {
+                               returnValue = undefined;
+                       } else {
+                               this.each( function() {
+                                       var methodValue;
+                                       var instance = $.data( this, fullName );
+
+                                       if ( options === "instance" ) {
+                                               returnValue = instance;
+                                               return false;
+                                       }
+
+                                       if ( !instance ) {
+                                               return $.error( "cannot call methods on " + name +
+                                                       " prior to initialization; " +
+                                                       "attempted to call method '" + options + "'" );
+                                       }
+
+                                       if ( !$.isFunction( instance[ options ] ) || options.charAt( 0 ) === "_" ) {
+                                               return $.error( "no such method '" + options + "' for " + name +
+                                                       " widget instance" );
+                                       }
+
+                                       methodValue = instance[ options ].apply( instance, args );
+
+                                       if ( methodValue !== instance && methodValue !== undefined ) {
+                                               returnValue = methodValue && methodValue.jquery ?
+                                                       returnValue.pushStack( methodValue.get() ) :
+                                                       methodValue;
+                                               return false;
+                                       }
+                               } );
+                       }
+               } else {
+
+                       // Allow multiple hashes to be passed on init
+                       if ( args.length ) {
+                               options = $.widget.extend.apply( null, [ options ].concat( args ) );
+                       }
+
+                       this.each( function() {
+                               var instance = $.data( this, fullName );
+                               if ( instance ) {
+                                       instance.option( options || {} );
+                                       if ( instance._init ) {
+                                               instance._init();
+                                       }
+                               } else {
+                                       $.data( this, fullName, new object( options, this ) );
+                               }
+                       } );
+               }
+
+               return returnValue;
+       };
+};
+
+$.Widget = function( /* options, element */ ) {};
+$.Widget._childConstructors = [];
+
+$.Widget.prototype = {
+       widgetName: "widget",
+       widgetEventPrefix: "",
+       defaultElement: "<div>",
+
+       options: {
+               classes: {},
+               disabled: false,
+
+               // Callbacks
+               create: null
+       },
+
+       _createWidget: function( options, element ) {
+               element = $( element || this.defaultElement || this )[ 0 ];
+               this.element = $( element );
+               this.uuid = widgetUuid++;
+               this.eventNamespace = "." + this.widgetName + this.uuid;
+
+               this.bindings = $();
+               this.hoverable = $();
+               this.focusable = $();
+               this.classesElementLookup = {};
+
+               if ( element !== this ) {
+                       $.data( element, this.widgetFullName, this );
+                       this._on( true, this.element, {
+                               remove: function( event ) {
+                                       if ( event.target === element ) {
+                                               this.destroy();
+                                       }
+                               }
+                       } );
+                       this.document = $( element.style ?
+
+                               // Element within the document
+                               element.ownerDocument :
+
+                               // Element is window or document
+                               element.document || element );
+                       this.window = $( this.document[ 0 ].defaultView || this.document[ 0 ].parentWindow );
+               }
+
+               this.options = $.widget.extend( {},
+                       this.options,
+                       this._getCreateOptions(),
+                       options );
+
+               this._create();
+
+               if ( this.options.disabled ) {
+                       this._setOptionDisabled( this.options.disabled );
+               }
+
+               this._trigger( "create", null, this._getCreateEventData() );
+               this._init();
+       },
+
+       _getCreateOptions: function() {
+               return {};
+       },
+
+       _getCreateEventData: $.noop,
+
+       _create: $.noop,
+
+       _init: $.noop,
+
+       destroy: function() {
+               var that = this;
+
+               this._destroy();
+               $.each( this.classesElementLookup, function( key, value ) {
+                       that._removeClass( value, key );
+               } );
+
+               // We can probably remove the unbind calls in 2.0
+               // all event bindings should go through this._on()
+               this.element
+                       .off( this.eventNamespace )
+                       .removeData( this.widgetFullName );
+               this.widget()
+                       .off( this.eventNamespace )
+                       .removeAttr( "aria-disabled" );
+
+               // Clean up events and states
+               this.bindings.off( this.eventNamespace );
+       },
+
+       _destroy: $.noop,
+
+       widget: function() {
+               return this.element;
+       },
+
+       option: function( key, value ) {
+               var options = key;
+               var parts;
+               var curOption;
+               var i;
+
+               if ( arguments.length === 0 ) {
+
+                       // Don't return a reference to the internal hash
+                       return $.widget.extend( {}, this.options );
+               }
+
+               if ( typeof key === "string" ) {
+
+                       // Handle nested keys, e.g., "foo.bar" => { foo: { bar: ___ } }
+                       options = {};
+                       parts = key.split( "." );
+                       key = parts.shift();
+                       if ( parts.length ) {
+                               curOption = options[ key ] = $.widget.extend( {}, this.options[ key ] );
+                               for ( i = 0; i < parts.length - 1; i++ ) {
+                                       curOption[ parts[ i ] ] = curOption[ parts[ i ] ] || {};
+                                       curOption = curOption[ parts[ i ] ];
+                               }
+                               key = parts.pop();
+                               if ( arguments.length === 1 ) {
+                                       return curOption[ key ] === undefined ? null : curOption[ key ];
+                               }
+                               curOption[ key ] = value;
+                       } else {
+                               if ( arguments.length === 1 ) {
+                                       return this.options[ key ] === undefined ? null : this.options[ key ];
+                               }
+                               options[ key ] = value;
+                       }
+               }
+
+               this._setOptions( options );
+
+               return this;
+       },
+
+       _setOptions: function( options ) {
+               var key;
+
+               for ( key in options ) {
+                       this._setOption( key, options[ key ] );
+               }
+
+               return this;
+       },
+
+       _setOption: function( key, value ) {
+               if ( key === "classes" ) {
+                       this._setOptionClasses( value );
+               }
+
+               this.options[ key ] = value;
+
+               if ( key === "disabled" ) {
+                       this._setOptionDisabled( value );
+               }
+
+               return this;
+       },
+
+       _setOptionClasses: function( value ) {
+               var classKey, elements, currentElements;
+
+               for ( classKey in value ) {
+                       currentElements = this.classesElementLookup[ classKey ];
+                       if ( value[ classKey ] === this.options.classes[ classKey ] ||
+                                       !currentElements ||
+                                       !currentElements.length ) {
+                               continue;
+                       }
+
+                       // We are doing this to create a new jQuery object because the _removeClass() call
+                       // on the next line is going to destroy the reference to the current elements being
+                       // tracked. We need to save a copy of this collection so that we can add the new classes
+                       // below.
+                       elements = $( currentElements.get() );
+                       this._removeClass( currentElements, classKey );
+
+                       // We don't use _addClass() here, because that uses this.options.classes
+                       // for generating the string of classes. We want to use the value passed in from
+                       // _setOption(), this is the new value of the classes option which was passed to
+                       // _setOption(). We pass this value directly to _classes().
+                       elements.addClass( this._classes( {
+                               element: elements,
+                               keys: classKey,
+                               classes: value,
+                               add: true
+                       } ) );
+               }
+       },
+
+       _setOptionDisabled: function( value ) {
+               this._toggleClass( this.widget(), this.widgetFullName + "-disabled", null, !!value );
+
+               // If the widget is becoming disabled, then nothing is interactive
+               if ( value ) {
+                       this._removeClass( this.hoverable, null, "ui-state-hover" );
+                       this._removeClass( this.focusable, null, "ui-state-focus" );
+               }
+       },
+
+       enable: function() {
+               return this._setOptions( { disabled: false } );
+       },
+
+       disable: function() {
+               return this._setOptions( { disabled: true } );
+       },
+
+       _classes: function( options ) {
+               var full = [];
+               var that = this;
+
+               options = $.extend( {
+                       element: this.element,
+                       classes: this.options.classes || {}
+               }, options );
+
+               function processClassString( classes, checkOption ) {
+                       var current, i;
+                       for ( i = 0; i < classes.length; i++ ) {
+                               current = that.classesElementLookup[ classes[ i ] ] || $();
+                               if ( options.add ) {
+                                       current = $( $.unique( current.get().concat( options.element.get() ) ) );
+                               } else {
+                                       current = $( current.not( options.element ).get() );
+                               }
+                               that.classesElementLookup[ classes[ i ] ] = current;
+                               full.push( classes[ i ] );
+                               if ( checkOption && options.classes[ classes[ i ] ] ) {
+                                       full.push( options.classes[ classes[ i ] ] );
+                               }
+                       }
+               }
+
+               this._on( options.element, {
+                       "remove": "_untrackClassesElement"
+               } );
+
+               if ( options.keys ) {
+                       processClassString( options.keys.match( /\S+/g ) || [], true );
+               }
+               if ( options.extra ) {
+                       processClassString( options.extra.match( /\S+/g ) || [] );
+               }
+
+               return full.join( " " );
+       },
+
+       _untrackClassesElement: function( event ) {
+               var that = this;
+               $.each( that.classesElementLookup, function( key, value ) {
+                       if ( $.inArray( event.target, value ) !== -1 ) {
+                               that.classesElementLookup[ key ] = $( value.not( event.target ).get() );
+                       }
+               } );
+       },
+
+       _removeClass: function( element, keys, extra ) {
+               return this._toggleClass( element, keys, extra, false );
+       },
+
+       _addClass: function( element, keys, extra ) {
+               return this._toggleClass( element, keys, extra, true );
+       },
+
+       _toggleClass: function( element, keys, extra, add ) {
+               add = ( typeof add === "boolean" ) ? add : extra;
+               var shift = ( typeof element === "string" || element === null ),
+                       options = {
+                               extra: shift ? keys : extra,
+                               keys: shift ? element : keys,
+                               element: shift ? this.element : element,
+                               add: add
+                       };
+               options.element.toggleClass( this._classes( options ), add );
+               return this;
+       },
+
+       _on: function( suppressDisabledCheck, element, handlers ) {
+               var delegateElement;
+               var instance = this;
+
+               // No suppressDisabledCheck flag, shuffle arguments
+               if ( typeof suppressDisabledCheck !== "boolean" ) {
+                       handlers = element;
+                       element = suppressDisabledCheck;
+                       suppressDisabledCheck = false;
+               }
+
+               // No element argument, shuffle and use this.element
+               if ( !handlers ) {
+                       handlers = element;
+                       element = this.element;
+                       delegateElement = this.widget();
+               } else {
+                       element = delegateElement = $( element );
+                       this.bindings = this.bindings.add( element );
+               }
+
+               $.each( handlers, function( event, handler ) {
+                       function handlerProxy() {
+
+                               // Allow widgets to customize the disabled handling
+                               // - disabled as an array instead of boolean
+                               // - disabled class as method for disabling individual parts
+                               if ( !suppressDisabledCheck &&
+                                               ( instance.options.disabled === true ||
+                                               $( this ).hasClass( "ui-state-disabled" ) ) ) {
+                                       return;
+                               }
+                               return ( typeof handler === "string" ? instance[ handler ] : handler )
+                                       .apply( instance, arguments );
+                       }
+
+                       // Copy the guid so direct unbinding works
+                       if ( typeof handler !== "string" ) {
+                               handlerProxy.guid = handler.guid =
+                                       handler.guid || handlerProxy.guid || $.guid++;
+                       }
+
+                       var match = event.match( /^([\w:-]*)\s*(.*)$/ );
+                       var eventName = match[ 1 ] + instance.eventNamespace;
+                       var selector = match[ 2 ];
+
+                       if ( selector ) {
+                               delegateElement.on( eventName, selector, handlerProxy );
+                       } else {
+                               element.on( eventName, handlerProxy );
+                       }
+               } );
+       },
+
+       _off: function( element, eventName ) {
+               eventName = ( eventName || "" ).split( " " ).join( this.eventNamespace + " " ) +
+                       this.eventNamespace;
+               element.off( eventName ).off( eventName );
+
+               // Clear the stack to avoid memory leaks (#10056)
+               this.bindings = $( this.bindings.not( element ).get() );
+               this.focusable = $( this.focusable.not( element ).get() );
+               this.hoverable = $( this.hoverable.not( element ).get() );
+       },
+
+       _delay: function( handler, delay ) {
+               function handlerProxy() {
+                       return ( typeof handler === "string" ? instance[ handler ] : handler )
+                               .apply( instance, arguments );
+               }
+               var instance = this;
+               return setTimeout( handlerProxy, delay || 0 );
+       },
+
+       _hoverable: function( element ) {
+               this.hoverable = this.hoverable.add( element );
+               this._on( element, {
+                       mouseenter: function( event ) {
+                               this._addClass( $( event.currentTarget ), null, "ui-state-hover" );
+                       },
+                       mouseleave: function( event ) {
+                               this._removeClass( $( event.currentTarget ), null, "ui-state-hover" );
+                       }
+               } );
+       },
+
+       _focusable: function( element ) {
+               this.focusable = this.focusable.add( element );
+               this._on( element, {
+                       focusin: function( event ) {
+                               this._addClass( $( event.currentTarget ), null, "ui-state-focus" );
+                       },
+                       focusout: function( event ) {
+                               this._removeClass( $( event.currentTarget ), null, "ui-state-focus" );
+                       }
+               } );
+       },
+
+       _trigger: function( type, event, data ) {
+               var prop, orig;
+               var callback = this.options[ type ];
+
+               data = data || {};
+               event = $.Event( event );
+               event.type = ( type === this.widgetEventPrefix ?
+                       type :
+                       this.widgetEventPrefix + type ).toLowerCase();
+
+               // The original event may come from any element
+               // so we need to reset the target on the new event
+               event.target = this.element[ 0 ];
+
+               // Copy original event properties over to the new event
+               orig = event.originalEvent;
+               if ( orig ) {
+                       for ( prop in orig ) {
+                               if ( !( prop in event ) ) {
+                                       event[ prop ] = orig[ prop ];
+                               }
+                       }
+               }
+
+               this.element.trigger( event, data );
+               return !( $.isFunction( callback ) &&
+                       callback.apply( this.element[ 0 ], [ event ].concat( data ) ) === false ||
+                       event.isDefaultPrevented() );
+       }
+};
+
+$.each( { show: "fadeIn", hide: "fadeOut" }, function( method, defaultEffect ) {
+       $.Widget.prototype[ "_" + method ] = function( element, options, callback ) {
+               if ( typeof options === "string" ) {
+                       options = { effect: options };
+               }
+
+               var hasOptions;
+               var effectName = !options ?
+                       method :
+                       options === true || typeof options === "number" ?
+                               defaultEffect :
+                               options.effect || defaultEffect;
+
+               options = options || {};
+               if ( typeof options === "number" ) {
+                       options = { duration: options };
+               }
+
+               hasOptions = !$.isEmptyObject( options );
+               options.complete = callback;
+
+               if ( options.delay ) {
+                       element.delay( options.delay );
+               }
+
+               if ( hasOptions && $.effects && $.effects.effect[ effectName ] ) {
+                       element[ method ]( options );
+               } else if ( effectName !== method && element[ effectName ] ) {
+                       element[ effectName ]( options.duration, options.easing, callback );
+               } else {
+                       element.queue( function( next ) {
+                               $( this )[ method ]();
+                               if ( callback ) {
+                                       callback.call( element[ 0 ] );
+                               }
+                               next();
+                       } );
+               }
+       };
+} );
+
+var widget = $.widget;
+
+
+/*!
+ * jQuery UI Position 1.12.1
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/position/
+ */
+
+//>>label: Position
+//>>group: Core
+//>>description: Positions elements relative to other elements.
+//>>docs: http://api.jqueryui.com/position/
+//>>demos: http://jqueryui.com/position/
+
+
+( function() {
+var cachedScrollbarWidth,
+       max = Math.max,
+       abs = Math.abs,
+       rhorizontal = /left|center|right/,
+       rvertical = /top|center|bottom/,
+       roffset = /[\+\-]\d+(\.[\d]+)?%?/,
+       rposition = /^\w+/,
+       rpercent = /%$/,
+       _position = $.fn.position;
+
+function getOffsets( offsets, width, height ) {
+       return [
+               parseFloat( offsets[ 0 ] ) * ( rpercent.test( offsets[ 0 ] ) ? width / 100 : 1 ),
+               parseFloat( offsets[ 1 ] ) * ( rpercent.test( offsets[ 1 ] ) ? height / 100 : 1 )
+       ];
+}
+
+function parseCss( element, property ) {
+       return parseInt( $.css( element, property ), 10 ) || 0;
+}
+
+function getDimensions( elem ) {
+       var raw = elem[ 0 ];
+       if ( raw.nodeType === 9 ) {
+               return {
+                       width: elem.width(),
+                       height: elem.height(),
+                       offset: { top: 0, left: 0 }
+               };
+       }
+       if ( $.isWindow( raw ) ) {
+               return {
+                       width: elem.width(),
+                       height: elem.height(),
+                       offset: { top: elem.scrollTop(), left: elem.scrollLeft() }
+               };
+       }
+       if ( raw.preventDefault ) {
+               return {
+                       width: 0,
+                       height: 0,
+                       offset: { top: raw.pageY, left: raw.pageX }
+               };
+       }
+       return {
+               width: elem.outerWidth(),
+               height: elem.outerHeight(),
+               offset: elem.offset()
+       };
+}
+
+$.position = {
+       scrollbarWidth: function() {
+               if ( cachedScrollbarWidth !== undefined ) {
+                       return cachedScrollbarWidth;
+               }
+               var w1, w2,
+                       div = $( "<div " +
+                               "style='display:block;position:absolute;width:50px;height:50px;overflow:hidden;'>" +
+                               "<div style='height:100px;width:auto;'></div></div>" ),
+                       innerDiv = div.children()[ 0 ];
+
+               $( "body" ).append( div );
+               w1 = innerDiv.offsetWidth;
+               div.css( "overflow", "scroll" );
+
+               w2 = innerDiv.offsetWidth;
+
+               if ( w1 === w2 ) {
+                       w2 = div[ 0 ].clientWidth;
+               }
+
+               div.remove();
+
+               return ( cachedScrollbarWidth = w1 - w2 );
+       },
+       getScrollInfo: function( within ) {
+               var overflowX = within.isWindow || within.isDocument ? "" :
+                               within.element.css( "overflow-x" ),
+                       overflowY = within.isWindow || within.isDocument ? "" :
+                               within.element.css( "overflow-y" ),
+                       hasOverflowX = overflowX === "scroll" ||
+                               ( overflowX === "auto" && within.width < within.element[ 0 ].scrollWidth ),
+                       hasOverflowY = overflowY === "scroll" ||
+                               ( overflowY === "auto" && within.height < within.element[ 0 ].scrollHeight );
+               return {
+                       width: hasOverflowY ? $.position.scrollbarWidth() : 0,
+                       height: hasOverflowX ? $.position.scrollbarWidth() : 0
+               };
+       },
+       getWithinInfo: function( element ) {
+               var withinElement = $( element || window ),
+                       isWindow = $.isWindow( withinElement[ 0 ] ),
+                       isDocument = !!withinElement[ 0 ] && withinElement[ 0 ].nodeType === 9,
+                       hasOffset = !isWindow && !isDocument;
+               return {
+                       element: withinElement,
+                       isWindow: isWindow,
+                       isDocument: isDocument,
+                       offset: hasOffset ? $( element ).offset() : { left: 0, top: 0 },
+                       scrollLeft: withinElement.scrollLeft(),
+                       scrollTop: withinElement.scrollTop(),
+                       width: withinElement.outerWidth(),
+                       height: withinElement.outerHeight()
+               };
+       }
+};
+
+$.fn.position = function( options ) {
+       if ( !options || !options.of ) {
+               return _position.apply( this, arguments );
+       }
+
+       // Make a copy, we don't want to modify arguments
+       options = $.extend( {}, options );
+
+       var atOffset, targetWidth, targetHeight, targetOffset, basePosition, dimensions,
+               target = $( options.of ),
+               within = $.position.getWithinInfo( options.within ),
+               scrollInfo = $.position.getScrollInfo( within ),
+               collision = ( options.collision || "flip" ).split( " " ),
+               offsets = {};
+
+       dimensions = getDimensions( target );
+       if ( target[ 0 ].preventDefault ) {
+
+               // Force left top to allow flipping
+               options.at = "left top";
+       }
+       targetWidth = dimensions.width;
+       targetHeight = dimensions.height;
+       targetOffset = dimensions.offset;
+
+       // Clone to reuse original targetOffset later
+       basePosition = $.extend( {}, targetOffset );
+
+       // Force my and at to have valid horizontal and vertical positions
+       // if a value is missing or invalid, it will be converted to center
+       $.each( [ "my", "at" ], function() {
+               var pos = ( options[ this ] || "" ).split( " " ),
+                       horizontalOffset,
+                       verticalOffset;
+
+               if ( pos.length === 1 ) {
+                       pos = rhorizontal.test( pos[ 0 ] ) ?
+                               pos.concat( [ "center" ] ) :
+                               rvertical.test( pos[ 0 ] ) ?
+                                       [ "center" ].concat( pos ) :
+                                       [ "center", "center" ];
+               }
+               pos[ 0 ] = rhorizontal.test( pos[ 0 ] ) ? pos[ 0 ] : "center";
+               pos[ 1 ] = rvertical.test( pos[ 1 ] ) ? pos[ 1 ] : "center";
+
+               // Calculate offsets
+               horizontalOffset = roffset.exec( pos[ 0 ] );
+               verticalOffset = roffset.exec( pos[ 1 ] );
+               offsets[ this ] = [
+                       horizontalOffset ? horizontalOffset[ 0 ] : 0,
+                       verticalOffset ? verticalOffset[ 0 ] : 0
+               ];
+
+               // Reduce to just the positions without the offsets
+               options[ this ] = [
+                       rposition.exec( pos[ 0 ] )[ 0 ],
+                       rposition.exec( pos[ 1 ] )[ 0 ]
+               ];
+       } );
+
+       // Normalize collision option
+       if ( collision.length === 1 ) {
+               collision[ 1 ] = collision[ 0 ];
+       }
+
+       if ( options.at[ 0 ] === "right" ) {
+               basePosition.left += targetWidth;
+       } else if ( options.at[ 0 ] === "center" ) {
+               basePosition.left += targetWidth / 2;
+       }
+
+       if ( options.at[ 1 ] === "bottom" ) {
+               basePosition.top += targetHeight;
+       } else if ( options.at[ 1 ] === "center" ) {
+               basePosition.top += targetHeight / 2;
+       }
+
+       atOffset = getOffsets( offsets.at, targetWidth, targetHeight );
+       basePosition.left += atOffset[ 0 ];
+       basePosition.top += atOffset[ 1 ];
+
+       return this.each( function() {
+               var collisionPosition, using,
+                       elem = $( this ),
+                       elemWidth = elem.outerWidth(),
+                       elemHeight = elem.outerHeight(),
+                       marginLeft = parseCss( this, "marginLeft" ),
+                       marginTop = parseCss( this, "marginTop" ),
+                       collisionWidth = elemWidth + marginLeft + parseCss( this, "marginRight" ) +
+                               scrollInfo.width,
+                       collisionHeight = elemHeight + marginTop + parseCss( this, "marginBottom" ) +
+                               scrollInfo.height,
+                       position = $.extend( {}, basePosition ),
+                       myOffset = getOffsets( offsets.my, elem.outerWidth(), elem.outerHeight() );
+
+               if ( options.my[ 0 ] === "right" ) {
+                       position.left -= elemWidth;
+               } else if ( options.my[ 0 ] === "center" ) {
+                       position.left -= elemWidth / 2;
+               }
+
+               if ( options.my[ 1 ] === "bottom" ) {
+                       position.top -= elemHeight;
+               } else if ( options.my[ 1 ] === "center" ) {
+                       position.top -= elemHeight / 2;
+               }
+
+               position.left += myOffset[ 0 ];
+               position.top += myOffset[ 1 ];
+
+               collisionPosition = {
+                       marginLeft: marginLeft,
+                       marginTop: marginTop
+               };
+
+               $.each( [ "left", "top" ], function( i, dir ) {
+                       if ( $.ui.position[ collision[ i ] ] ) {
+                               $.ui.position[ collision[ i ] ][ dir ]( position, {
+                                       targetWidth: targetWidth,
+                                       targetHeight: targetHeight,
+                                       elemWidth: elemWidth,
+                                       elemHeight: elemHeight,
+                                       collisionPosition: collisionPosition,
+                                       collisionWidth: collisionWidth,
+                                       collisionHeight: collisionHeight,
+                                       offset: [ atOffset[ 0 ] + myOffset[ 0 ], atOffset [ 1 ] + myOffset[ 1 ] ],
+                                       my: options.my,
+                                       at: options.at,
+                                       within: within,
+                                       elem: elem
+                               } );
+                       }
+               } );
+
+               if ( options.using ) {
+
+                       // Adds feedback as second argument to using callback, if present
+                       using = function( props ) {
+                               var left = targetOffset.left - position.left,
+                                       right = left + targetWidth - elemWidth,
+                                       top = targetOffset.top - position.top,
+                                       bottom = top + targetHeight - elemHeight,
+                                       feedback = {
+                                               target: {
+                                                       element: target,
+                                                       left: targetOffset.left,
+                                                       top: targetOffset.top,
+                                                       width: targetWidth,
+                                                       height: targetHeight
+                                               },
+                                               element: {
+                                                       element: elem,
+                                                       left: position.left,
+                                                       top: position.top,
+                                                       width: elemWidth,
+                                                       height: elemHeight
+                                               },
+                                               horizontal: right < 0 ? "left" : left > 0 ? "right" : "center",
+                                               vertical: bottom < 0 ? "top" : top > 0 ? "bottom" : "middle"
+                                       };
+                               if ( targetWidth < elemWidth && abs( left + right ) < targetWidth ) {
+                                       feedback.horizontal = "center";
+                               }
+                               if ( targetHeight < elemHeight && abs( top + bottom ) < targetHeight ) {
+                                       feedback.vertical = "middle";
+                               }
+                               if ( max( abs( left ), abs( right ) ) > max( abs( top ), abs( bottom ) ) ) {
+                                       feedback.important = "horizontal";
+                               } else {
+                                       feedback.important = "vertical";
+                               }
+                               options.using.call( this, props, feedback );
+                       };
+               }
+
+               elem.offset( $.extend( position, { using: using } ) );
+       } );
+};
+
+$.ui.position = {
+       fit: {
+               left: function( position, data ) {
+                       var within = data.within,
+                               withinOffset = within.isWindow ? within.scrollLeft : within.offset.left,
+                               outerWidth = within.width,
+                               collisionPosLeft = position.left - data.collisionPosition.marginLeft,
+                               overLeft = withinOffset - collisionPosLeft,
+                               overRight = collisionPosLeft + data.collisionWidth - outerWidth - withinOffset,
+                               newOverRight;
+
+                       // Element is wider than within
+                       if ( data.collisionWidth > outerWidth ) {
+
+                               // Element is initially over the left side of within
+                               if ( overLeft > 0 && overRight <= 0 ) {
+                                       newOverRight = position.left + overLeft + data.collisionWidth - outerWidth -
+                                               withinOffset;
+                                       position.left += overLeft - newOverRight;
+
+                               // Element is initially over right side of within
+                               } else if ( overRight > 0 && overLeft <= 0 ) {
+                                       position.left = withinOffset;
+
+                               // Element is initially over both left and right sides of within
+                               } else {
+                                       if ( overLeft > overRight ) {
+                                               position.left = withinOffset + outerWidth - data.collisionWidth;
+                                       } else {
+                                               position.left = withinOffset;
+                                       }
+                               }
+
+                       // Too far left -> align with left edge
+                       } else if ( overLeft > 0 ) {
+                               position.left += overLeft;
+
+                       // Too far right -> align with right edge
+                       } else if ( overRight > 0 ) {
+                               position.left -= overRight;
+
+                       // Adjust based on position and margin
+                       } else {
+                               position.left = max( position.left - collisionPosLeft, position.left );
+                       }
+               },
+               top: function( position, data ) {
+                       var within = data.within,
+                               withinOffset = within.isWindow ? within.scrollTop : within.offset.top,
+                               outerHeight = data.within.height,
+                               collisionPosTop = position.top - data.collisionPosition.marginTop,
+                               overTop = withinOffset - collisionPosTop,
+                               overBottom = collisionPosTop + data.collisionHeight - outerHeight - withinOffset,
+                               newOverBottom;
+
+                       // Element is taller than within
+                       if ( data.collisionHeight > outerHeight ) {
+
+                               // Element is initially over the top of within
+                               if ( overTop > 0 && overBottom <= 0 ) {
+                                       newOverBottom = position.top + overTop + data.collisionHeight - outerHeight -
+                                               withinOffset;
+                                       position.top += overTop - newOverBottom;
+
+                               // Element is initially over bottom of within
+                               } else if ( overBottom > 0 && overTop <= 0 ) {
+                                       position.top = withinOffset;
+
+                               // Element is initially over both top and bottom of within
+                               } else {
+                                       if ( overTop > overBottom ) {
+                                               position.top = withinOffset + outerHeight - data.collisionHeight;
+                                       } else {
+                                               position.top = withinOffset;
+                                       }
+                               }
+
+                       // Too far up -> align with top
+                       } else if ( overTop > 0 ) {
+                               position.top += overTop;
+
+                       // Too far down -> align with bottom edge
+                       } else if ( overBottom > 0 ) {
+                               position.top -= overBottom;
+
+                       // Adjust based on position and margin
+                       } else {
+                               position.top = max( position.top - collisionPosTop, position.top );
+                       }
+               }
+       },
+       flip: {
+               left: function( position, data ) {
+                       var within = data.within,
+                               withinOffset = within.offset.left + within.scrollLeft,
+                               outerWidth = within.width,
+                               offsetLeft = within.isWindow ? within.scrollLeft : within.offset.left,
+                               collisionPosLeft = position.left - data.collisionPosition.marginLeft,
+                               overLeft = collisionPosLeft - offsetLeft,
+                               overRight = collisionPosLeft + data.collisionWidth - outerWidth - offsetLeft,
+                               myOffset = data.my[ 0 ] === "left" ?
+                                       -data.elemWidth :
+                                       data.my[ 0 ] === "right" ?
+                                               data.elemWidth :
+                                               0,
+                               atOffset = data.at[ 0 ] === "left" ?
+                                       data.targetWidth :
+                                       data.at[ 0 ] === "right" ?
+                                               -data.targetWidth :
+                                               0,
+                               offset = -2 * data.offset[ 0 ],
+                               newOverRight,
+                               newOverLeft;
+
+                       if ( overLeft < 0 ) {
+                               newOverRight = position.left + myOffset + atOffset + offset + data.collisionWidth -
+                                       outerWidth - withinOffset;
+                               if ( newOverRight < 0 || newOverRight < abs( overLeft ) ) {
+                                       position.left += myOffset + atOffset + offset;
+                               }
+                       } else if ( overRight > 0 ) {
+                               newOverLeft = position.left - data.collisionPosition.marginLeft + myOffset +
+                                       atOffset + offset - offsetLeft;
+                               if ( newOverLeft > 0 || abs( newOverLeft ) < overRight ) {
+                                       position.left += myOffset + atOffset + offset;
+                               }
+                       }
+               },
+               top: function( position, data ) {
+                       var within = data.within,
+                               withinOffset = within.offset.top + within.scrollTop,
+                               outerHeight = within.height,
+                               offsetTop = within.isWindow ? within.scrollTop : within.offset.top,
+                               collisionPosTop = position.top - data.collisionPosition.marginTop,
+                               overTop = collisionPosTop - offsetTop,
+                               overBottom = collisionPosTop + data.collisionHeight - outerHeight - offsetTop,
+                               top = data.my[ 1 ] === "top",
+                               myOffset = top ?
+                                       -data.elemHeight :
+                                       data.my[ 1 ] === "bottom" ?
+                                               data.elemHeight :
+                                               0,
+                               atOffset = data.at[ 1 ] === "top" ?
+                                       data.targetHeight :
+                                       data.at[ 1 ] === "bottom" ?
+                                               -data.targetHeight :
+                                               0,
+                               offset = -2 * data.offset[ 1 ],
+                               newOverTop,
+                               newOverBottom;
+                       if ( overTop < 0 ) {
+                               newOverBottom = position.top + myOffset + atOffset + offset + data.collisionHeight -
+                                       outerHeight - withinOffset;
+                               if ( newOverBottom < 0 || newOverBottom < abs( overTop ) ) {
+                                       position.top += myOffset + atOffset + offset;
+                               }
+                       } else if ( overBottom > 0 ) {
+                               newOverTop = position.top - data.collisionPosition.marginTop + myOffset + atOffset +
+                                       offset - offsetTop;
+                               if ( newOverTop > 0 || abs( newOverTop ) < overBottom ) {
+                                       position.top += myOffset + atOffset + offset;
+                               }
+                       }
+               }
+       },
+       flipfit: {
+               left: function() {
+                       $.ui.position.flip.left.apply( this, arguments );
+                       $.ui.position.fit.left.apply( this, arguments );
+               },
+               top: function() {
+                       $.ui.position.flip.top.apply( this, arguments );
+                       $.ui.position.fit.top.apply( this, arguments );
+               }
+       }
+};
+
+} )();
+
+var position = $.ui.position;
+
+
+/*!
+ * jQuery UI :data 1.12.1
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ */
+
+//>>label: :data Selector
+//>>group: Core
+//>>description: Selects elements which have data stored under the specified key.
+//>>docs: http://api.jqueryui.com/data-selector/
+
+
+var data = $.extend( $.expr[ ":" ], {
+       data: $.expr.createPseudo ?
+               $.expr.createPseudo( function( dataName ) {
+                       return function( elem ) {
+                               return !!$.data( elem, dataName );
+                       };
+               } ) :
+
+               // Support: jQuery <1.8
+               function( elem, i, match ) {
+                       return !!$.data( elem, match[ 3 ] );
+               }
+} );
+
+/*!
+ * jQuery UI Disable Selection 1.12.1
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ */
+
+//>>label: disableSelection
+//>>group: Core
+//>>description: Disable selection of text content within the set of matched elements.
+//>>docs: http://api.jqueryui.com/disableSelection/
+
+// This file is deprecated
+
+
+var disableSelection = $.fn.extend( {
+       disableSelection: ( function() {
+               var eventType = "onselectstart" in document.createElement( "div" ) ?
+                       "selectstart" :
+                       "mousedown";
+
+               return function() {
+                       return this.on( eventType + ".ui-disableSelection", function( event ) {
+                               event.preventDefault();
+                       } );
+               };
+       } )(),
+
+       enableSelection: function() {
+               return this.off( ".ui-disableSelection" );
+       }
+} );
+
+
+/*!
+ * jQuery UI Focusable 1.12.1
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ */
+
+//>>label: :focusable Selector
+//>>group: Core
+//>>description: Selects elements which can be focused.
+//>>docs: http://api.jqueryui.com/focusable-selector/
+
+
+
+// Selectors
+$.ui.focusable = function( element, hasTabindex ) {
+       var map, mapName, img, focusableIfVisible, fieldset,
+               nodeName = element.nodeName.toLowerCase();
+
+       if ( "area" === nodeName ) {
+               map = element.parentNode;
+               mapName = map.name;
+               if ( !element.href || !mapName || map.nodeName.toLowerCase() !== "map" ) {
+                       return false;
+               }
+               img = $( "img[usemap='#" + mapName + "']" );
+               return img.length > 0 && img.is( ":visible" );
+       }
+
+       if ( /^(input|select|textarea|button|object)$/.test( nodeName ) ) {
+               focusableIfVisible = !element.disabled;
+
+               if ( focusableIfVisible ) {
+
+                       // Form controls within a disabled fieldset are disabled.
+                       // However, controls within the fieldset's legend do not get disabled.
+                       // Since controls generally aren't placed inside legends, we skip
+                       // this portion of the check.
+                       fieldset = $( element ).closest( "fieldset" )[ 0 ];
+                       if ( fieldset ) {
+                               focusableIfVisible = !fieldset.disabled;
+                       }
+               }
+       } else if ( "a" === nodeName ) {
+               focusableIfVisible = element.href || hasTabindex;
+       } else {
+               focusableIfVisible = hasTabindex;
+       }
+
+       return focusableIfVisible && $( element ).is( ":visible" ) && visible( $( element ) );
+};
+
+// Support: IE 8 only
+// IE 8 doesn't resolve inherit to visible/hidden for computed values
+function visible( element ) {
+       var visibility = element.css( "visibility" );
+       while ( visibility === "inherit" ) {
+               element = element.parent();
+               visibility = element.css( "visibility" );
+       }
+       return visibility !== "hidden";
+}
+
+$.extend( $.expr[ ":" ], {
+       focusable: function( element ) {
+               return $.ui.focusable( element, $.attr( element, "tabindex" ) != null );
+       }
+} );
+
+var focusable = $.ui.focusable;
+
+
+
+
+// Support: IE8 Only
+// IE8 does not support the form attribute and when it is supplied. It overwrites the form prop
+// with a string, so we need to find the proper form.
+var form = $.fn.form = function() {
+       return typeof this[ 0 ].form === "string" ? this.closest( "form" ) : $( this[ 0 ].form );
+};
+
+
+/*!
+ * jQuery UI Form Reset Mixin 1.12.1
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ */
+
+//>>label: Form Reset Mixin
+//>>group: Core
+//>>description: Refresh input widgets when their form is reset
+//>>docs: http://api.jqueryui.com/form-reset-mixin/
+
+
+
+var formResetMixin = $.ui.formResetMixin = {
+       _formResetHandler: function() {
+               var form = $( this );
+
+               // Wait for the form reset to actually happen before refreshing
+               setTimeout( function() {
+                       var instances = form.data( "ui-form-reset-instances" );
+                       $.each( instances, function() {
+                               this.refresh();
+                       } );
+               } );
+       },
+
+       _bindFormResetHandler: function() {
+               this.form = this.element.form();
+               if ( !this.form.length ) {
+                       return;
+               }
+
+               var instances = this.form.data( "ui-form-reset-instances" ) || [];
+               if ( !instances.length ) {
+
+                       // We don't use _on() here because we use a single event handler per form
+                       this.form.on( "reset.ui-form-reset", this._formResetHandler );
+               }
+               instances.push( this );
+               this.form.data( "ui-form-reset-instances", instances );
+       },
+
+       _unbindFormResetHandler: function() {
+               if ( !this.form.length ) {
+                       return;
+               }
+
+               var instances = this.form.data( "ui-form-reset-instances" );
+               instances.splice( $.inArray( this, instances ), 1 );
+               if ( instances.length ) {
+                       this.form.data( "ui-form-reset-instances", instances );
+               } else {
+                       this.form
+                               .removeData( "ui-form-reset-instances" )
+                               .off( "reset.ui-form-reset" );
+               }
+       }
+};
+
+
+/*!
+ * jQuery UI Keycode 1.12.1
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ */
+
+//>>label: Keycode
+//>>group: Core
+//>>description: Provide keycodes as keynames
+//>>docs: http://api.jqueryui.com/jQuery.ui.keyCode/
+
+
+var keycode = $.ui.keyCode = {
+       BACKSPACE: 8,
+       COMMA: 188,
+       DELETE: 46,
+       DOWN: 40,
+       END: 35,
+       ENTER: 13,
+       ESCAPE: 27,
+       HOME: 36,
+       LEFT: 37,
+       PAGE_DOWN: 34,
+       PAGE_UP: 33,
+       PERIOD: 190,
+       RIGHT: 39,
+       SPACE: 32,
+       TAB: 9,
+       UP: 38
+};
+
+
+
+
+// Internal use only
+var escapeSelector = $.ui.escapeSelector = ( function() {
+       var selectorEscape = /([!"#$%&'()*+,./:;<=>?@[\]^`{|}~])/g;
+       return function( selector ) {
+               return selector.replace( selectorEscape, "\\$1" );
+       };
+} )();
+
+
+/*!
+ * jQuery UI Labels 1.12.1
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ */
+
+//>>label: labels
+//>>group: Core
+//>>description: Find all the labels associated with a given input
+//>>docs: http://api.jqueryui.com/labels/
+
+
+
+var labels = $.fn.labels = function() {
+       var ancestor, selector, id, labels, ancestors;
+
+       // Check control.labels first
+       if ( this[ 0 ].labels && this[ 0 ].labels.length ) {
+               return this.pushStack( this[ 0 ].labels );
+       }
+
+       // Support: IE <= 11, FF <= 37, Android <= 2.3 only
+       // Above browsers do not support control.labels. Everything below is to support them
+       // as well as document fragments. control.labels does not work on document fragments
+       labels = this.eq( 0 ).parents( "label" );
+
+       // Look for the label based on the id
+       id = this.attr( "id" );
+       if ( id ) {
+
+               // We don't search against the document in case the element
+               // is disconnected from the DOM
+               ancestor = this.eq( 0 ).parents().last();
+
+               // Get a full set of top level ancestors
+               ancestors = ancestor.add( ancestor.length ? ancestor.siblings() : this.siblings() );
+
+               // Create a selector for the label based on the id
+               selector = "label[for='" + $.ui.escapeSelector( id ) + "']";
+
+               labels = labels.add( ancestors.find( selector ).addBack( selector ) );
+
+       }
+
+       // Return whatever we have found for labels
+       return this.pushStack( labels );
+};
+
+
+/*!
+ * jQuery UI Scroll Parent 1.12.1
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ */
+
+//>>label: scrollParent
+//>>group: Core
+//>>description: Get the closest ancestor element that is scrollable.
+//>>docs: http://api.jqueryui.com/scrollParent/
+
+
+
+var scrollParent = $.fn.scrollParent = function( includeHidden ) {
+       var position = this.css( "position" ),
+               excludeStaticParent = position === "absolute",
+               overflowRegex = includeHidden ? /(auto|scroll|hidden)/ : /(auto|scroll)/,
+               scrollParent = this.parents().filter( function() {
+                       var parent = $( this );
+                       if ( excludeStaticParent && parent.css( "position" ) === "static" ) {
+                               return false;
+                       }
+                       return overflowRegex.test( parent.css( "overflow" ) + parent.css( "overflow-y" ) +
+                               parent.css( "overflow-x" ) );
+               } ).eq( 0 );
+
+       return position === "fixed" || !scrollParent.length ?
+               $( this[ 0 ].ownerDocument || document ) :
+               scrollParent;
+};
+
+
+/*!
+ * jQuery UI Tabbable 1.12.1
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ */
+
+//>>label: :tabbable Selector
+//>>group: Core
+//>>description: Selects elements which can be tabbed to.
+//>>docs: http://api.jqueryui.com/tabbable-selector/
+
+
+
+var tabbable = $.extend( $.expr[ ":" ], {
+       tabbable: function( element ) {
+               var tabIndex = $.attr( element, "tabindex" ),
+                       hasTabindex = tabIndex != null;
+               return ( !hasTabindex || tabIndex >= 0 ) && $.ui.focusable( element, hasTabindex );
+       }
+} );
+
+
+/*!
+ * jQuery UI Unique ID 1.12.1
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ */
+
+//>>label: uniqueId
+//>>group: Core
+//>>description: Functions to generate and remove uniqueId's
+//>>docs: http://api.jqueryui.com/uniqueId/
+
+
+
+var uniqueId = $.fn.extend( {
+       uniqueId: ( function() {
+               var uuid = 0;
+
+               return function() {
+                       return this.each( function() {
+                               if ( !this.id ) {
+                                       this.id = "ui-id-" + ( ++uuid );
+                               }
+                       } );
+               };
+       } )(),
+
+       removeUniqueId: function() {
+               return this.each( function() {
+                       if ( /^ui-id-\d+$/.test( this.id ) ) {
+                               $( this ).removeAttr( "id" );
+                       }
+               } );
+       }
+} );
+
+
+
+
+// This file is deprecated
+var ie = $.ui.ie = !!/msie [\w.]+/.exec( navigator.userAgent.toLowerCase() );
+
+/*!
+ * jQuery UI Mouse 1.12.1
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ */
+
+//>>label: Mouse
+//>>group: Widgets
+//>>description: Abstracts mouse-based interactions to assist in creating certain widgets.
+//>>docs: http://api.jqueryui.com/mouse/
+
+
+
+var mouseHandled = false;
+$( document ).on( "mouseup", function() {
+       mouseHandled = false;
+} );
+
+var widgetsMouse = $.widget( "ui.mouse", {
+       version: "1.12.1",
+       options: {
+               cancel: "input, textarea, button, select, option",
+               distance: 1,
+               delay: 0
+       },
+       _mouseInit: function() {
+               var that = this;
+
+               this.element
+                       .on( "mousedown." + this.widgetName, function( event ) {
+                               return that._mouseDown( event );
+                       } )
+                       .on( "click." + this.widgetName, function( event ) {
+                               if ( true === $.data( event.target, that.widgetName + ".preventClickEvent" ) ) {
+                                       $.removeData( event.target, that.widgetName + ".preventClickEvent" );
+                                       event.stopImmediatePropagation();
+                                       return false;
+                               }
+                       } );
+
+               this.started = false;
+       },
+
+       // TODO: make sure destroying one instance of mouse doesn't mess with
+       // other instances of mouse
+       _mouseDestroy: function() {
+               this.element.off( "." + this.widgetName );
+               if ( this._mouseMoveDelegate ) {
+                       this.document
+                               .off( "mousemove." + this.widgetName, this._mouseMoveDelegate )
+                               .off( "mouseup." + this.widgetName, this._mouseUpDelegate );
+               }
+       },
+
+       _mouseDown: function( event ) {
+
+               // don't let more than one widget handle mouseStart
+               if ( mouseHandled ) {
+                       return;
+               }
+
+               this._mouseMoved = false;
+
+               // We may have missed mouseup (out of window)
+               ( this._mouseStarted && this._mouseUp( event ) );
+
+               this._mouseDownEvent = event;
+
+               var that = this,
+                       btnIsLeft = ( event.which === 1 ),
+
+                       // event.target.nodeName works around a bug in IE 8 with
+                       // disabled inputs (#7620)
+                       elIsCancel = ( typeof this.options.cancel === "string" && event.target.nodeName ?
+                               $( event.target ).closest( this.options.cancel ).length : false );
+               if ( !btnIsLeft || elIsCancel || !this._mouseCapture( event ) ) {
+                       return true;
+               }
+
+               this.mouseDelayMet = !this.options.delay;
+               if ( !this.mouseDelayMet ) {
+                       this._mouseDelayTimer = setTimeout( function() {
+                               that.mouseDelayMet = true;
+                       }, this.options.delay );
+               }
+
+               if ( this._mouseDistanceMet( event ) && this._mouseDelayMet( event ) ) {
+                       this._mouseStarted = ( this._mouseStart( event ) !== false );
+                       if ( !this._mouseStarted ) {
+                               event.preventDefault();
+                               return true;
+                       }
+               }
+
+               // Click event may never have fired (Gecko & Opera)
+               if ( true === $.data( event.target, this.widgetName + ".preventClickEvent" ) ) {
+                       $.removeData( event.target, this.widgetName + ".preventClickEvent" );
+               }
+
+               // These delegates are required to keep context
+               this._mouseMoveDelegate = function( event ) {
+                       return that._mouseMove( event );
+               };
+               this._mouseUpDelegate = function( event ) {
+                       return that._mouseUp( event );
+               };
+
+               this.document
+                       .on( "mousemove." + this.widgetName, this._mouseMoveDelegate )
+                       .on( "mouseup." + this.widgetName, this._mouseUpDelegate );
+
+               event.preventDefault();
+
+               mouseHandled = true;
+               return true;
+       },
+
+       _mouseMove: function( event ) {
+
+               // Only check for mouseups outside the document if you've moved inside the document
+               // at least once. This prevents the firing of mouseup in the case of IE<9, which will
+               // fire a mousemove event if content is placed under the cursor. See #7778
+               // Support: IE <9
+               if ( this._mouseMoved ) {
+
+                       // IE mouseup check - mouseup happened when mouse was out of window
+                       if ( $.ui.ie && ( !document.documentMode || document.documentMode < 9 ) &&
+                                       !event.button ) {
+                               return this._mouseUp( event );
+
+                       // Iframe mouseup check - mouseup occurred in another document
+                       } else if ( !event.which ) {
+
+                               // Support: Safari <=8 - 9
+                               // Safari sets which to 0 if you press any of the following keys
+                               // during a drag (#14461)
+                               if ( event.originalEvent.altKey || event.originalEvent.ctrlKey ||
+                                               event.originalEvent.metaKey || event.originalEvent.shiftKey ) {
+                                       this.ignoreMissingWhich = true;
+                               } else if ( !this.ignoreMissingWhich ) {
+                                       return this._mouseUp( event );
+                               }
+                       }
+               }
+
+               if ( event.which || event.button ) {
+                       this._mouseMoved = true;
+               }
+
+               if ( this._mouseStarted ) {
+                       this._mouseDrag( event );
+                       return event.preventDefault();
+               }
+
+               if ( this._mouseDistanceMet( event ) && this._mouseDelayMet( event ) ) {
+                       this._mouseStarted =
+                               ( this._mouseStart( this._mouseDownEvent, event ) !== false );
+                       ( this._mouseStarted ? this._mouseDrag( event ) : this._mouseUp( event ) );
+               }
+
+               return !this._mouseStarted;
+       },
+
+       _mouseUp: function( event ) {
+               this.document
+                       .off( "mousemove." + this.widgetName, this._mouseMoveDelegate )
+                       .off( "mouseup." + this.widgetName, this._mouseUpDelegate );
+
+               if ( this._mouseStarted ) {
+                       this._mouseStarted = false;
+
+                       if ( event.target === this._mouseDownEvent.target ) {
+                               $.data( event.target, this.widgetName + ".preventClickEvent", true );
+                       }
+
+                       this._mouseStop( event );
+               }
+
+               if ( this._mouseDelayTimer ) {
+                       clearTimeout( this._mouseDelayTimer );
+                       delete this._mouseDelayTimer;
+               }
+
+               this.ignoreMissingWhich = false;
+               mouseHandled = false;
+               event.preventDefault();
+       },
+
+       _mouseDistanceMet: function( event ) {
+               return ( Math.max(
+                               Math.abs( this._mouseDownEvent.pageX - event.pageX ),
+                               Math.abs( this._mouseDownEvent.pageY - event.pageY )
+                       ) >= this.options.distance
+               );
+       },
+
+       _mouseDelayMet: function( /* event */ ) {
+               return this.mouseDelayMet;
+       },
+
+       // These are placeholder methods, to be overriden by extending plugin
+       _mouseStart: function( /* event */ ) {},
+       _mouseDrag: function( /* event */ ) {},
+       _mouseStop: function( /* event */ ) {},
+       _mouseCapture: function( /* event */ ) { return true; }
+} );
+
+
+
+
+// $.ui.plugin is deprecated. Use $.widget() extensions instead.
+var plugin = $.ui.plugin = {
+       add: function( module, option, set ) {
+               var i,
+                       proto = $.ui[ module ].prototype;
+               for ( i in set ) {
+                       proto.plugins[ i ] = proto.plugins[ i ] || [];
+                       proto.plugins[ i ].push( [ option, set[ i ] ] );
+               }
+       },
+       call: function( instance, name, args, allowDisconnected ) {
+               var i,
+                       set = instance.plugins[ name ];
+
+               if ( !set ) {
+                       return;
+               }
+
+               if ( !allowDisconnected && ( !instance.element[ 0 ].parentNode ||
+                               instance.element[ 0 ].parentNode.nodeType === 11 ) ) {
+                       return;
+               }
+
+               for ( i = 0; i < set.length; i++ ) {
+                       if ( instance.options[ set[ i ][ 0 ] ] ) {
+                               set[ i ][ 1 ].apply( instance.element, args );
+                       }
+               }
+       }
+};
+
+
+
+var safeActiveElement = $.ui.safeActiveElement = function( document ) {
+       var activeElement;
+
+       // Support: IE 9 only
+       // IE9 throws an "Unspecified error" accessing document.activeElement from an <iframe>
+       try {
+               activeElement = document.activeElement;
+       } catch ( error ) {
+               activeElement = document.body;
+       }
+
+       // Support: IE 9 - 11 only
+       // IE may return null instead of an element
+       // Interestingly, this only seems to occur when NOT in an iframe
+       if ( !activeElement ) {
+               activeElement = document.body;
+       }
+
+       // Support: IE 11 only
+       // IE11 returns a seemingly empty object in some cases when accessing
+       // document.activeElement from an <iframe>
+       if ( !activeElement.nodeName ) {
+               activeElement = document.body;
+       }
+
+       return activeElement;
+};
+
+
+
+var safeBlur = $.ui.safeBlur = function( element ) {
+
+       // Support: IE9 - 10 only
+       // If the <body> is blurred, IE will switch windows, see #9420
+       if ( element && element.nodeName.toLowerCase() !== "body" ) {
+               $( element ).trigger( "blur" );
+       }
+};
+
+
+/*!
+ * jQuery UI Draggable 1.12.1
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ */
+
+//>>label: Draggable
+//>>group: Interactions
+//>>description: Enables dragging functionality for any element.
+//>>docs: http://api.jqueryui.com/draggable/
+//>>demos: http://jqueryui.com/draggable/
+//>>css.structure: ../../themes/base/draggable.css
+
+
+
+$.widget( "ui.draggable", $.ui.mouse, {
+       version: "1.12.1",
+       widgetEventPrefix: "drag",
+       options: {
+               addClasses: true,
+               appendTo: "parent",
+               axis: false,
+               connectToSortable: false,
+               containment: false,
+               cursor: "auto",
+               cursorAt: false,
+               grid: false,
+               handle: false,
+               helper: "original",
+               iframeFix: false,
+               opacity: false,
+               refreshPositions: false,
+               revert: false,
+               revertDuration: 500,
+               scope: "default",
+               scroll: true,
+               scrollSensitivity: 20,
+               scrollSpeed: 20,
+               snap: false,
+               snapMode: "both",
+               snapTolerance: 20,
+               stack: false,
+               zIndex: false,
+
+               // Callbacks
+               drag: null,
+               start: null,
+               stop: null
+       },
+       _create: function() {
+
+               if ( this.options.helper === "original" ) {
+                       this._setPositionRelative();
+               }
+               if ( this.options.addClasses ) {
+                       this._addClass( "ui-draggable" );
+               }
+               this._setHandleClassName();
+
+               this._mouseInit();
+       },
+
+       _setOption: function( key, value ) {
+               this._super( key, value );
+               if ( key === "handle" ) {
+                       this._removeHandleClassName();
+                       this._setHandleClassName();
+               }
+       },
+
+       _destroy: function() {
+               if ( ( this.helper || this.element ).is( ".ui-draggable-dragging" ) ) {
+                       this.destroyOnClear = true;
+                       return;
+               }
+               this._removeHandleClassName();
+               this._mouseDestroy();
+       },
+
+       _mouseCapture: function( event ) {
+               var o = this.options;
+
+               // Among others, prevent a drag on a resizable-handle
+               if ( this.helper || o.disabled ||
+                               $( event.target ).closest( ".ui-resizable-handle" ).length > 0 ) {
+                       return false;
+               }
+
+               //Quit if we're not on a valid handle
+               this.handle = this._getHandle( event );
+               if ( !this.handle ) {
+                       return false;
+               }
+
+               this._blurActiveElement( event );
+
+               this._blockFrames( o.iframeFix === true ? "iframe" : o.iframeFix );
+
+               return true;
+
+       },
+
+       _blockFrames: function( selector ) {
+               this.iframeBlocks = this.document.find( selector ).map( function() {
+                       var iframe = $( this );
+
+                       return $( "<div>" )
+                               .css( "position", "absolute" )
+                               .appendTo( iframe.parent() )
+                               .outerWidth( iframe.outerWidth() )
+                               .outerHeight( iframe.outerHeight() )
+                               .offset( iframe.offset() )[ 0 ];
+               } );
+       },
+
+       _unblockFrames: function() {
+               if ( this.iframeBlocks ) {
+                       this.iframeBlocks.remove();
+                       delete this.iframeBlocks;
+               }
+       },
+
+       _blurActiveElement: function( event ) {
+               var activeElement = $.ui.safeActiveElement( this.document[ 0 ] ),
+                       target = $( event.target );
+
+               // Don't blur if the event occurred on an element that is within
+               // the currently focused element
+               // See #10527, #12472
+               if ( target.closest( activeElement ).length ) {
+                       return;
+               }
+
+               // Blur any element that currently has focus, see #4261
+               $.ui.safeBlur( activeElement );
+       },
+
+       _mouseStart: function( event ) {
+
+               var o = this.options;
+
+               //Create and append the visible helper
+               this.helper = this._createHelper( event );
+
+               this._addClass( this.helper, "ui-draggable-dragging" );
+
+               //Cache the helper size
+               this._cacheHelperProportions();
+
+               //If ddmanager is used for droppables, set the global draggable
+               if ( $.ui.ddmanager ) {
+                       $.ui.ddmanager.current = this;
+               }
+
+               /*
+                * - Position generation -
+                * This block generates everything position related - it's the core of draggables.
+                */
+
+               //Cache the margins of the original element
+               this._cacheMargins();
+
+               //Store the helper's css position
+               this.cssPosition = this.helper.css( "position" );
+               this.scrollParent = this.helper.scrollParent( true );
+               this.offsetParent = this.helper.offsetParent();
+               this.hasFixedAncestor = this.helper.parents().filter( function() {
+                               return $( this ).css( "position" ) === "fixed";
+                       } ).length > 0;
+
+               //The element's absolute position on the page minus margins
+               this.positionAbs = this.element.offset();
+               this._refreshOffsets( event );
+
+               //Generate the original position
+               this.originalPosition = this.position = this._generatePosition( event, false );
+               this.originalPageX = event.pageX;
+               this.originalPageY = event.pageY;
+
+               //Adjust the mouse offset relative to the helper if "cursorAt" is supplied
+               ( o.cursorAt && this._adjustOffsetFromHelper( o.cursorAt ) );
+
+               //Set a containment if given in the options
+               this._setContainment();
+
+               //Trigger event + callbacks
+               if ( this._trigger( "start", event ) === false ) {
+                       this._clear();
+                       return false;
+               }
+
+               //Recache the helper size
+               this._cacheHelperProportions();
+
+               //Prepare the droppable offsets
+               if ( $.ui.ddmanager && !o.dropBehaviour ) {
+                       $.ui.ddmanager.prepareOffsets( this, event );
+               }
+
+               // Execute the drag once - this causes the helper not to be visible before getting its
+               // correct position
+               this._mouseDrag( event, true );
+
+               // If the ddmanager is used for droppables, inform the manager that dragging has started
+               // (see #5003)
+               if ( $.ui.ddmanager ) {
+                       $.ui.ddmanager.dragStart( this, event );
+               }
+
+               return true;
+       },
+
+       _refreshOffsets: function( event ) {
+               this.offset = {
+                       top: this.positionAbs.top - this.margins.top,
+                       left: this.positionAbs.left - this.margins.left,
+                       scroll: false,
+                       parent: this._getParentOffset(),
+                       relative: this._getRelativeOffset()
+               };
+
+               this.offset.click = {
+                       left: event.pageX - this.offset.left,
+                       top: event.pageY - this.offset.top
+               };
+       },
+
+       _mouseDrag: function( event, noPropagation ) {
+
+               // reset any necessary cached properties (see #5009)
+               if ( this.hasFixedAncestor ) {
+                       this.offset.parent = this._getParentOffset();
+               }
+
+               //Compute the helpers position
+               this.position = this._generatePosition( event, true );
+               this.positionAbs = this._convertPositionTo( "absolute" );
+
+               //Call plugins and callbacks and use the resulting position if something is returned
+               if ( !noPropagation ) {
+                       var ui = this._uiHash();
+                       if ( this._trigger( "drag", event, ui ) === false ) {
+                               this._mouseUp( new $.Event( "mouseup", event ) );
+                               return false;
+                       }
+                       this.position = ui.position;
+               }
+
+               this.helper[ 0 ].style.left = this.position.left + "px";
+               this.helper[ 0 ].style.top = this.position.top + "px";
+
+               if ( $.ui.ddmanager ) {
+                       $.ui.ddmanager.drag( this, event );
+               }
+
+               return false;
+       },
+
+       _mouseStop: function( event ) {
+
+               //If we are using droppables, inform the manager about the drop
+               var that = this,
+                       dropped = false;
+               if ( $.ui.ddmanager && !this.options.dropBehaviour ) {
+                       dropped = $.ui.ddmanager.drop( this, event );
+               }
+
+               //if a drop comes from outside (a sortable)
+               if ( this.dropped ) {
+                       dropped = this.dropped;
+                       this.dropped = false;
+               }
+
+               if ( ( this.options.revert === "invalid" && !dropped ) ||
+                               ( this.options.revert === "valid" && dropped ) ||
+                               this.options.revert === true || ( $.isFunction( this.options.revert ) &&
+                               this.options.revert.call( this.element, dropped ) )
+               ) {
+                       $( this.helper ).animate(
+                               this.originalPosition,
+                               parseInt( this.options.revertDuration, 10 ),
+                               function() {
+                                       if ( that._trigger( "stop", event ) !== false ) {
+                                               that._clear();
+                                       }
+                               }
+                       );
+               } else {
+                       if ( this._trigger( "stop", event ) !== false ) {
+                               this._clear();
+                       }
+               }
+
+               return false;
+       },
+
+       _mouseUp: function( event ) {
+               this._unblockFrames();
+
+               // If the ddmanager is used for droppables, inform the manager that dragging has stopped
+               // (see #5003)
+               if ( $.ui.ddmanager ) {
+                       $.ui.ddmanager.dragStop( this, event );
+               }
+
+               // Only need to focus if the event occurred on the draggable itself, see #10527
+               if ( this.handleElement.is( event.target ) ) {
+
+                       // The interaction is over; whether or not the click resulted in a drag,
+                       // focus the element
+                       this.element.trigger( "focus" );
+               }
+
+               return $.ui.mouse.prototype._mouseUp.call( this, event );
+       },
+
+       cancel: function() {
+
+               if ( this.helper.is( ".ui-draggable-dragging" ) ) {
+                       this._mouseUp( new $.Event( "mouseup", { target: this.element[ 0 ] } ) );
+               } else {
+                       this._clear();
+               }
+
+               return this;
+
+       },
+
+       _getHandle: function( event ) {
+               return this.options.handle ?
+                       !!$( event.target ).closest( this.element.find( this.options.handle ) ).length :
+                       true;
+       },
+
+       _setHandleClassName: function() {
+               this.handleElement = this.options.handle ?
+                       this.element.find( this.options.handle ) : this.element;
+               this._addClass( this.handleElement, "ui-draggable-handle" );
+       },
+
+       _removeHandleClassName: function() {
+               this._removeClass( this.handleElement, "ui-draggable-handle" );
+       },
+
+       _createHelper: function( event ) {
+
+               var o = this.options,
+                       helperIsFunction = $.isFunction( o.helper ),
+                       helper = helperIsFunction ?
+                               $( o.helper.apply( this.element[ 0 ], [ event ] ) ) :
+                               ( o.helper === "clone" ?
+                                       this.element.clone().removeAttr( "id" ) :
+                                       this.element );
+
+               if ( !helper.parents( "body" ).length ) {
+                       helper.appendTo( ( o.appendTo === "parent" ?
+                               this.element[ 0 ].parentNode :
+                               o.appendTo ) );
+               }
+
+               // Http://bugs.jqueryui.com/ticket/9446
+               // a helper function can return the original element
+               // which wouldn't have been set to relative in _create
+               if ( helperIsFunction && helper[ 0 ] === this.element[ 0 ] ) {
+                       this._setPositionRelative();
+               }
+
+               if ( helper[ 0 ] !== this.element[ 0 ] &&
+                               !( /(fixed|absolute)/ ).test( helper.css( "position" ) ) ) {
+                       helper.css( "position", "absolute" );
+               }
+
+               return helper;
+
+       },
+
+       _setPositionRelative: function() {
+               if ( !( /^(?:r|a|f)/ ).test( this.element.css( "position" ) ) ) {
+                       this.element[ 0 ].style.position = "relative";
+               }
+       },
+
+       _adjustOffsetFromHelper: function( obj ) {
+               if ( typeof obj === "string" ) {
+                       obj = obj.split( " " );
+               }
+               if ( $.isArray( obj ) ) {
+                       obj = { left: +obj[ 0 ], top: +obj[ 1 ] || 0 };
+               }
+               if ( "left" in obj ) {
+                       this.offset.click.left = obj.left + this.margins.left;
+               }
+               if ( "right" in obj ) {
+                       this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;
+               }
+               if ( "top" in obj ) {
+                       this.offset.click.top = obj.top + this.margins.top;
+               }
+               if ( "bottom" in obj ) {
+                       this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;
+               }
+       },
+
+       _isRootNode: function( element ) {
+               return ( /(html|body)/i ).test( element.tagName ) || element === this.document[ 0 ];
+       },
+
+       _getParentOffset: function() {
+
+               //Get the offsetParent and cache its position
+               var po = this.offsetParent.offset(),
+                       document = this.document[ 0 ];
+
+               // This is a special case where we need to modify a offset calculated on start, since the
+               // following happened:
+               // 1. The position of the helper is absolute, so it's position is calculated based on the
+               // next positioned parent
+               // 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't
+               // the document, which means that the scroll is included in the initial calculation of the
+               // offset of the parent, and never recalculated upon drag
+               if ( this.cssPosition === "absolute" && this.scrollParent[ 0 ] !== document &&
+                               $.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) {
+                       po.left += this.scrollParent.scrollLeft();
+                       po.top += this.scrollParent.scrollTop();
+               }
+
+               if ( this._isRootNode( this.offsetParent[ 0 ] ) ) {
+                       po = { top: 0, left: 0 };
+               }
+
+               return {
+                       top: po.top + ( parseInt( this.offsetParent.css( "borderTopWidth" ), 10 ) || 0 ),
+                       left: po.left + ( parseInt( this.offsetParent.css( "borderLeftWidth" ), 10 ) || 0 )
+               };
+
+       },
+
+       _getRelativeOffset: function() {
+               if ( this.cssPosition !== "relative" ) {
+                       return { top: 0, left: 0 };
+               }
+
+               var p = this.element.position(),
+                       scrollIsRootNode = this._isRootNode( this.scrollParent[ 0 ] );
+
+               return {
+                       top: p.top - ( parseInt( this.helper.css( "top" ), 10 ) || 0 ) +
+                               ( !scrollIsRootNode ? this.scrollParent.scrollTop() : 0 ),
+                       left: p.left - ( parseInt( this.helper.css( "left" ), 10 ) || 0 ) +
+                               ( !scrollIsRootNode ? this.scrollParent.scrollLeft() : 0 )
+               };
+
+       },
+
+       _cacheMargins: function() {
+               this.margins = {
+                       left: ( parseInt( this.element.css( "marginLeft" ), 10 ) || 0 ),
+                       top: ( parseInt( this.element.css( "marginTop" ), 10 ) || 0 ),
+                       right: ( parseInt( this.element.css( "marginRight" ), 10 ) || 0 ),
+                       bottom: ( parseInt( this.element.css( "marginBottom" ), 10 ) || 0 )
+               };
+       },
+
+       _cacheHelperProportions: function() {
+               this.helperProportions = {
+                       width: this.helper.outerWidth(),
+                       height: this.helper.outerHeight()
+               };
+       },
+
+       _setContainment: function() {
+
+               var isUserScrollable, c, ce,
+                       o = this.options,
+                       document = this.document[ 0 ];
+
+               this.relativeContainer = null;
+
+               if ( !o.containment ) {
+                       this.containment = null;
+                       return;
+               }
+
+               if ( o.containment === "window" ) {
+                       this.containment = [
+                               $( window ).scrollLeft() - this.offset.relative.left - this.offset.parent.left,
+                               $( window ).scrollTop() - this.offset.relative.top - this.offset.parent.top,
+                               $( window ).scrollLeft() + $( window ).width() -
+                                       this.helperProportions.width - this.margins.left,
+                               $( window ).scrollTop() +
+                                       ( $( window ).height() || document.body.parentNode.scrollHeight ) -
+                                       this.helperProportions.height - this.margins.top
+                       ];
+                       return;
+               }
+
+               if ( o.containment === "document" ) {
+                       this.containment = [
+                               0,
+                               0,
+                               $( document ).width() - this.helperProportions.width - this.margins.left,
+                               ( $( document ).height() || document.body.parentNode.scrollHeight ) -
+                                       this.helperProportions.height - this.margins.top
+                       ];
+                       return;
+               }
+
+               if ( o.containment.constructor === Array ) {
+                       this.containment = o.containment;
+                       return;
+               }
+
+               if ( o.containment === "parent" ) {
+                       o.containment = this.helper[ 0 ].parentNode;
+               }
+
+               c = $( o.containment );
+               ce = c[ 0 ];
+
+               if ( !ce ) {
+                       return;
+               }
+
+               isUserScrollable = /(scroll|auto)/.test( c.css( "overflow" ) );
+
+               this.containment = [
+                       ( parseInt( c.css( "borderLeftWidth" ), 10 ) || 0 ) +
+                               ( parseInt( c.css( "paddingLeft" ), 10 ) || 0 ),
+                       ( parseInt( c.css( "borderTopWidth" ), 10 ) || 0 ) +
+                               ( parseInt( c.css( "paddingTop" ), 10 ) || 0 ),
+                       ( isUserScrollable ? Math.max( ce.scrollWidth, ce.offsetWidth ) : ce.offsetWidth ) -
+                               ( parseInt( c.css( "borderRightWidth" ), 10 ) || 0 ) -
+                               ( parseInt( c.css( "paddingRight" ), 10 ) || 0 ) -
+                               this.helperProportions.width -
+                               this.margins.left -
+                               this.margins.right,
+                       ( isUserScrollable ? Math.max( ce.scrollHeight, ce.offsetHeight ) : ce.offsetHeight ) -
+                               ( parseInt( c.css( "borderBottomWidth" ), 10 ) || 0 ) -
+                               ( parseInt( c.css( "paddingBottom" ), 10 ) || 0 ) -
+                               this.helperProportions.height -
+                               this.margins.top -
+                               this.margins.bottom
+               ];
+               this.relativeContainer = c;
+       },
+
+       _convertPositionTo: function( d, pos ) {
+
+               if ( !pos ) {
+                       pos = this.position;
+               }
+
+               var mod = d === "absolute" ? 1 : -1,
+                       scrollIsRootNode = this._isRootNode( this.scrollParent[ 0 ] );
+
+               return {
+                       top: (
+
+                               // The absolute mouse position
+                               pos.top +
+
+                               // Only for relative positioned nodes: Relative offset from element to offset parent
+                               this.offset.relative.top * mod +
+
+                               // The offsetParent's offset without borders (offset + border)
+                               this.offset.parent.top * mod -
+                               ( ( this.cssPosition === "fixed" ?
+                                       -this.offset.scroll.top :
+                                       ( scrollIsRootNode ? 0 : this.offset.scroll.top ) ) * mod )
+                       ),
+                       left: (
+
+                               // The absolute mouse position
+                               pos.left +
+
+                               // Only for relative positioned nodes: Relative offset from element to offset parent
+                               this.offset.relative.left * mod +
+
+                               // The offsetParent's offset without borders (offset + border)
+                               this.offset.parent.left * mod   -
+                               ( ( this.cssPosition === "fixed" ?
+                                       -this.offset.scroll.left :
+                                       ( scrollIsRootNode ? 0 : this.offset.scroll.left ) ) * mod )
+                       )
+               };
+
+       },
+
+       _generatePosition: function( event, constrainPosition ) {
+
+               var containment, co, top, left,
+                       o = this.options,
+                       scrollIsRootNode = this._isRootNode( this.scrollParent[ 0 ] ),
+                       pageX = event.pageX,
+                       pageY = event.pageY;
+
+               // Cache the scroll
+               if ( !scrollIsRootNode || !this.offset.scroll ) {
+                       this.offset.scroll = {
+                               top: this.scrollParent.scrollTop(),
+                               left: this.scrollParent.scrollLeft()
+                       };
+               }
+
+               /*
+                * - Position constraining -
+                * Constrain the position to a mix of grid, containment.
+                */
+
+               // If we are not dragging yet, we won't check for options
+               if ( constrainPosition ) {
+                       if ( this.containment ) {
+                               if ( this.relativeContainer ) {
+                                       co = this.relativeContainer.offset();
+                                       containment = [
+                                               this.containment[ 0 ] + co.left,
+                                               this.containment[ 1 ] + co.top,
+                                               this.containment[ 2 ] + co.left,
+                                               this.containment[ 3 ] + co.top
+                                       ];
+                               } else {
+                                       containment = this.containment;
+                               }
+
+                               if ( event.pageX - this.offset.click.left < containment[ 0 ] ) {
+                                       pageX = containment[ 0 ] + this.offset.click.left;
+                               }
+                               if ( event.pageY - this.offset.click.top < containment[ 1 ] ) {
+                                       pageY = containment[ 1 ] + this.offset.click.top;
+                               }
+                               if ( event.pageX - this.offset.click.left > containment[ 2 ] ) {
+                                       pageX = containment[ 2 ] + this.offset.click.left;
+                               }
+                               if ( event.pageY - this.offset.click.top > containment[ 3 ] ) {
+                                       pageY = containment[ 3 ] + this.offset.click.top;
+                               }
+                       }
+
+                       if ( o.grid ) {
+
+                               //Check for grid elements set to 0 to prevent divide by 0 error causing invalid
+                               // argument errors in IE (see ticket #6950)
+                               top = o.grid[ 1 ] ? this.originalPageY + Math.round( ( pageY -
+                                       this.originalPageY ) / o.grid[ 1 ] ) * o.grid[ 1 ] : this.originalPageY;
+                               pageY = containment ? ( ( top - this.offset.click.top >= containment[ 1 ] ||
+                                       top - this.offset.click.top > containment[ 3 ] ) ?
+                                               top :
+                                               ( ( top - this.offset.click.top >= containment[ 1 ] ) ?
+                                                       top - o.grid[ 1 ] : top + o.grid[ 1 ] ) ) : top;
+
+                               left = o.grid[ 0 ] ? this.originalPageX +
+                                       Math.round( ( pageX - this.originalPageX ) / o.grid[ 0 ] ) * o.grid[ 0 ] :
+                                       this.originalPageX;
+                               pageX = containment ? ( ( left - this.offset.click.left >= containment[ 0 ] ||
+                                       left - this.offset.click.left > containment[ 2 ] ) ?
+                                               left :
+                                               ( ( left - this.offset.click.left >= containment[ 0 ] ) ?
+                                                       left - o.grid[ 0 ] : left + o.grid[ 0 ] ) ) : left;
+                       }
+
+                       if ( o.axis === "y" ) {
+                               pageX = this.originalPageX;
+                       }
+
+                       if ( o.axis === "x" ) {
+                               pageY = this.originalPageY;
+                       }
+               }
+
+               return {
+                       top: (
+
+                               // The absolute mouse position
+                               pageY -
+
+                               // Click offset (relative to the element)
+                               this.offset.click.top -
+
+                               // Only for relative positioned nodes: Relative offset from element to offset parent
+                               this.offset.relative.top -
+
+                               // The offsetParent's offset without borders (offset + border)
+                               this.offset.parent.top +
+                               ( this.cssPosition === "fixed" ?
+                                       -this.offset.scroll.top :
+                                       ( scrollIsRootNode ? 0 : this.offset.scroll.top ) )
+                       ),
+                       left: (
+
+                               // The absolute mouse position
+                               pageX -
+
+                               // Click offset (relative to the element)
+                               this.offset.click.left -
+
+                               // Only for relative positioned nodes: Relative offset from element to offset parent
+                               this.offset.relative.left -
+
+                               // The offsetParent's offset without borders (offset + border)
+                               this.offset.parent.left +
+                               ( this.cssPosition === "fixed" ?
+                                       -this.offset.scroll.left :
+                                       ( scrollIsRootNode ? 0 : this.offset.scroll.left ) )
+                       )
+               };
+
+       },
+
+       _clear: function() {
+               this._removeClass( this.helper, "ui-draggable-dragging" );
+               if ( this.helper[ 0 ] !== this.element[ 0 ] && !this.cancelHelperRemoval ) {
+                       this.helper.remove();
+               }
+               this.helper = null;
+               this.cancelHelperRemoval = false;
+               if ( this.destroyOnClear ) {
+                       this.destroy();
+               }
+       },
+
+       // From now on bulk stuff - mainly helpers
+
+       _trigger: function( type, event, ui ) {
+               ui = ui || this._uiHash();
+               $.ui.plugin.call( this, type, [ event, ui, this ], true );
+
+               // Absolute position and offset (see #6884 ) have to be recalculated after plugins
+               if ( /^(drag|start|stop)/.test( type ) ) {
+                       this.positionAbs = this._convertPositionTo( "absolute" );
+                       ui.offset = this.positionAbs;
+               }
+               return $.Widget.prototype._trigger.call( this, type, event, ui );
+       },
+
+       plugins: {},
+
+       _uiHash: function() {
+               return {
+                       helper: this.helper,
+                       position: this.position,
+                       originalPosition: this.originalPosition,
+                       offset: this.positionAbs
+               };
+       }
+
+} );
+
+$.ui.plugin.add( "draggable", "connectToSortable", {
+       start: function( event, ui, draggable ) {
+               var uiSortable = $.extend( {}, ui, {
+                       item: draggable.element
+               } );
+
+               draggable.sortables = [];
+               $( draggable.options.connectToSortable ).each( function() {
+                       var sortable = $( this ).sortable( "instance" );
+
+                       if ( sortable && !sortable.options.disabled ) {
+                               draggable.sortables.push( sortable );
+
+                               // RefreshPositions is called at drag start to refresh the containerCache
+                               // which is used in drag. This ensures it's initialized and synchronized
+                               // with any changes that might have happened on the page since initialization.
+                               sortable.refreshPositions();
+                               sortable._trigger( "activate", event, uiSortable );
+                       }
+               } );
+       },
+       stop: function( event, ui, draggable ) {
+               var uiSortable = $.extend( {}, ui, {
+                       item: draggable.element
+               } );
+
+               draggable.cancelHelperRemoval = false;
+
+               $.each( draggable.sortables, function() {
+                       var sortable = this;
+
+                       if ( sortable.isOver ) {
+                               sortable.isOver = 0;
+
+                               // Allow this sortable to handle removing the helper
+                               draggable.cancelHelperRemoval = true;
+                               sortable.cancelHelperRemoval = false;
+
+                               // Use _storedCSS To restore properties in the sortable,
+                               // as this also handles revert (#9675) since the draggable
+                               // may have modified them in unexpected ways (#8809)
+                               sortable._storedCSS = {
+                                       position: sortable.placeholder.css( "position" ),
+                                       top: sortable.placeholder.css( "top" ),
+                                       left: sortable.placeholder.css( "left" )
+                               };
+
+                               sortable._mouseStop( event );
+
+                               // Once drag has ended, the sortable should return to using
+                               // its original helper, not the shared helper from draggable
+                               sortable.options.helper = sortable.options._helper;
+                       } else {
+
+                               // Prevent this Sortable from removing the helper.
+                               // However, don't set the draggable to remove the helper
+                               // either as another connected Sortable may yet handle the removal.
+                               sortable.cancelHelperRemoval = true;
+
+                               sortable._trigger( "deactivate", event, uiSortable );
+                       }
+               } );
+       },
+       drag: function( event, ui, draggable ) {
+               $.each( draggable.sortables, function() {
+                       var innermostIntersecting = false,
+                               sortable = this;
+
+                       // Copy over variables that sortable's _intersectsWith uses
+                       sortable.positionAbs = draggable.positionAbs;
+                       sortable.helperProportions = draggable.helperProportions;
+                       sortable.offset.click = draggable.offset.click;
+
+                       if ( sortable._intersectsWith( sortable.containerCache ) ) {
+                               innermostIntersecting = true;
+
+                               $.each( draggable.sortables, function() {
+
+                                       // Copy over variables that sortable's _intersectsWith uses
+                                       this.positionAbs = draggable.positionAbs;
+                                       this.helperProportions = draggable.helperProportions;
+                                       this.offset.click = draggable.offset.click;
+
+                                       if ( this !== sortable &&
+                                                       this._intersectsWith( this.containerCache ) &&
+                                                       $.contains( sortable.element[ 0 ], this.element[ 0 ] ) ) {
+                                               innermostIntersecting = false;
+                                       }
+
+                                       return innermostIntersecting;
+                               } );
+                       }
+
+                       if ( innermostIntersecting ) {
+
+                               // If it intersects, we use a little isOver variable and set it once,
+                               // so that the move-in stuff gets fired only once.
+                               if ( !sortable.isOver ) {
+                                       sortable.isOver = 1;
+
+                                       // Store draggable's parent in case we need to reappend to it later.
+                                       draggable._parent = ui.helper.parent();
+
+                                       sortable.currentItem = ui.helper
+                                               .appendTo( sortable.element )
+                                               .data( "ui-sortable-item", true );
+
+                                       // Store helper option to later restore it
+                                       sortable.options._helper = sortable.options.helper;
+
+                                       sortable.options.helper = function() {
+                                               return ui.helper[ 0 ];
+                                       };
+
+                                       // Fire the start events of the sortable with our passed browser event,
+                                       // and our own helper (so it doesn't create a new one)
+                                       event.target = sortable.currentItem[ 0 ];
+                                       sortable._mouseCapture( event, true );
+                                       sortable._mouseStart( event, true, true );
+
+                                       // Because the browser event is way off the new appended portlet,
+                                       // modify necessary variables to reflect the changes
+                                       sortable.offset.click.top = draggable.offset.click.top;
+                                       sortable.offset.click.left = draggable.offset.click.left;
+                                       sortable.offset.parent.left -= draggable.offset.parent.left -
+                                               sortable.offset.parent.left;
+                                       sortable.offset.parent.top -= draggable.offset.parent.top -
+                                               sortable.offset.parent.top;
+
+                                       draggable._trigger( "toSortable", event );
+
+                                       // Inform draggable that the helper is in a valid drop zone,
+                                       // used solely in the revert option to handle "valid/invalid".
+                                       draggable.dropped = sortable.element;
+
+                                       // Need to refreshPositions of all sortables in the case that
+                                       // adding to one sortable changes the location of the other sortables (#9675)
+                                       $.each( draggable.sortables, function() {
+                                               this.refreshPositions();
+                                       } );
+
+                                       // Hack so receive/update callbacks work (mostly)
+                                       draggable.currentItem = draggable.element;
+                                       sortable.fromOutside = draggable;
+                               }
+
+                               if ( sortable.currentItem ) {
+                                       sortable._mouseDrag( event );
+
+                                       // Copy the sortable's position because the draggable's can potentially reflect
+                                       // a relative position, while sortable is always absolute, which the dragged
+                                       // element has now become. (#8809)
+                                       ui.position = sortable.position;
+                               }
+                       } else {
+
+                               // If it doesn't intersect with the sortable, and it intersected before,
+                               // we fake the drag stop of the sortable, but make sure it doesn't remove
+                               // the helper by using cancelHelperRemoval.
+                               if ( sortable.isOver ) {
+
+                                       sortable.isOver = 0;
+                                       sortable.cancelHelperRemoval = true;
+
+                                       // Calling sortable's mouseStop would trigger a revert,
+                                       // so revert must be temporarily false until after mouseStop is called.
+                                       sortable.options._revert = sortable.options.revert;
+                                       sortable.options.revert = false;
+
+                                       sortable._trigger( "out", event, sortable._uiHash( sortable ) );
+                                       sortable._mouseStop( event, true );
+
+                                       // Restore sortable behaviors that were modfied
+                                       // when the draggable entered the sortable area (#9481)
+                                       sortable.options.revert = sortable.options._revert;
+                                       sortable.options.helper = sortable.options._helper;
+
+                                       if ( sortable.placeholder ) {
+                                               sortable.placeholder.remove();
+                                       }
+
+                                       // Restore and recalculate the draggable's offset considering the sortable
+                                       // may have modified them in unexpected ways. (#8809, #10669)
+                                       ui.helper.appendTo( draggable._parent );
+                                       draggable._refreshOffsets( event );
+                                       ui.position = draggable._generatePosition( event, true );
+
+                                       draggable._trigger( "fromSortable", event );
+
+                                       // Inform draggable that the helper is no longer in a valid drop zone
+                                       draggable.dropped = false;
+
+                                       // Need to refreshPositions of all sortables just in case removing
+                                       // from one sortable changes the location of other sortables (#9675)
+                                       $.each( draggable.sortables, function() {
+                                               this.refreshPositions();
+                                       } );
+                               }
+                       }
+               } );
+       }
+} );
+
+$.ui.plugin.add( "draggable", "cursor", {
+       start: function( event, ui, instance ) {
+               var t = $( "body" ),
+                       o = instance.options;
+
+               if ( t.css( "cursor" ) ) {
+                       o._cursor = t.css( "cursor" );
+               }
+               t.css( "cursor", o.cursor );
+       },
+       stop: function( event, ui, instance ) {
+               var o = instance.options;
+               if ( o._cursor ) {
+                       $( "body" ).css( "cursor", o._cursor );
+               }
+       }
+} );
+
+$.ui.plugin.add( "draggable", "opacity", {
+       start: function( event, ui, instance ) {
+               var t = $( ui.helper ),
+                       o = instance.options;
+               if ( t.css( "opacity" ) ) {
+                       o._opacity = t.css( "opacity" );
+               }
+               t.css( "opacity", o.opacity );
+       },
+       stop: function( event, ui, instance ) {
+               var o = instance.options;
+               if ( o._opacity ) {
+                       $( ui.helper ).css( "opacity", o._opacity );
+               }
+       }
+} );
+
+$.ui.plugin.add( "draggable", "scroll", {
+       start: function( event, ui, i ) {
+               if ( !i.scrollParentNotHidden ) {
+                       i.scrollParentNotHidden = i.helper.scrollParent( false );
+               }
+
+               if ( i.scrollParentNotHidden[ 0 ] !== i.document[ 0 ] &&
+                               i.scrollParentNotHidden[ 0 ].tagName !== "HTML" ) {
+                       i.overflowOffset = i.scrollParentNotHidden.offset();
+               }
+       },
+       drag: function( event, ui, i  ) {
+
+               var o = i.options,
+                       scrolled = false,
+                       scrollParent = i.scrollParentNotHidden[ 0 ],
+                       document = i.document[ 0 ];
+
+               if ( scrollParent !== document && scrollParent.tagName !== "HTML" ) {
+                       if ( !o.axis || o.axis !== "x" ) {
+                               if ( ( i.overflowOffset.top + scrollParent.offsetHeight ) - event.pageY <
+                                               o.scrollSensitivity ) {
+                                       scrollParent.scrollTop = scrolled = scrollParent.scrollTop + o.scrollSpeed;
+                               } else if ( event.pageY - i.overflowOffset.top < o.scrollSensitivity ) {
+                                       scrollParent.scrollTop = scrolled = scrollParent.scrollTop - o.scrollSpeed;
+                               }
+                       }
+
+                       if ( !o.axis || o.axis !== "y" ) {
+                               if ( ( i.overflowOffset.left + scrollParent.offsetWidth ) - event.pageX <
+                                               o.scrollSensitivity ) {
+                                       scrollParent.scrollLeft = scrolled = scrollParent.scrollLeft + o.scrollSpeed;
+                               } else if ( event.pageX - i.overflowOffset.left < o.scrollSensitivity ) {
+                                       scrollParent.scrollLeft = scrolled = scrollParent.scrollLeft - o.scrollSpeed;
+                               }
+                       }
+
+               } else {
+
+                       if ( !o.axis || o.axis !== "x" ) {
+                               if ( event.pageY - $( document ).scrollTop() < o.scrollSensitivity ) {
+                                       scrolled = $( document ).scrollTop( $( document ).scrollTop() - o.scrollSpeed );
+                               } else if ( $( window ).height() - ( event.pageY - $( document ).scrollTop() ) <
+                                               o.scrollSensitivity ) {
+                                       scrolled = $( document ).scrollTop( $( document ).scrollTop() + o.scrollSpeed );
+                               }
+                       }
+
+                       if ( !o.axis || o.axis !== "y" ) {
+                               if ( event.pageX - $( document ).scrollLeft() < o.scrollSensitivity ) {
+                                       scrolled = $( document ).scrollLeft(
+                                               $( document ).scrollLeft() - o.scrollSpeed
+                                       );
+                               } else if ( $( window ).width() - ( event.pageX - $( document ).scrollLeft() ) <
+                                               o.scrollSensitivity ) {
+                                       scrolled = $( document ).scrollLeft(
+                                               $( document ).scrollLeft() + o.scrollSpeed
+                                       );
+                               }
+                       }
+
+               }
+
+               if ( scrolled !== false && $.ui.ddmanager && !o.dropBehaviour ) {
+                       $.ui.ddmanager.prepareOffsets( i, event );
+               }
+
+       }
+} );
+
+$.ui.plugin.add( "draggable", "snap", {
+       start: function( event, ui, i ) {
+
+               var o = i.options;
+
+               i.snapElements = [];
+
+               $( o.snap.constructor !== String ? ( o.snap.items || ":data(ui-draggable)" ) : o.snap )
+                       .each( function() {
+                               var $t = $( this ),
+                                       $o = $t.offset();
+                               if ( this !== i.element[ 0 ] ) {
+                                       i.snapElements.push( {
+                                               item: this,
+                                               width: $t.outerWidth(), height: $t.outerHeight(),
+                                               top: $o.top, left: $o.left
+                                       } );
+                               }
+                       } );
+
+       },
+       drag: function( event, ui, inst ) {
+
+               var ts, bs, ls, rs, l, r, t, b, i, first,
+                       o = inst.options,
+                       d = o.snapTolerance,
+                       x1 = ui.offset.left, x2 = x1 + inst.helperProportions.width,
+                       y1 = ui.offset.top, y2 = y1 + inst.helperProportions.height;
+
+               for ( i = inst.snapElements.length - 1; i >= 0; i-- ) {
+
+                       l = inst.snapElements[ i ].left - inst.margins.left;
+                       r = l + inst.snapElements[ i ].width;
+                       t = inst.snapElements[ i ].top - inst.margins.top;
+                       b = t + inst.snapElements[ i ].height;
+
+                       if ( x2 < l - d || x1 > r + d || y2 < t - d || y1 > b + d ||
+                                       !$.contains( inst.snapElements[ i ].item.ownerDocument,
+                                       inst.snapElements[ i ].item ) ) {
+                               if ( inst.snapElements[ i ].snapping ) {
+                                       ( inst.options.snap.release &&
+                                               inst.options.snap.release.call(
+                                                       inst.element,
+                                                       event,
+                                                       $.extend( inst._uiHash(), { snapItem: inst.snapElements[ i ].item } )
+                                               ) );
+                               }
+                               inst.snapElements[ i ].snapping = false;
+                               continue;
+                       }
+
+                       if ( o.snapMode !== "inner" ) {
+                               ts = Math.abs( t - y2 ) <= d;
+                               bs = Math.abs( b - y1 ) <= d;
+                               ls = Math.abs( l - x2 ) <= d;
+                               rs = Math.abs( r - x1 ) <= d;
+                               if ( ts ) {
+                                       ui.position.top = inst._convertPositionTo( "relative", {
+                                               top: t - inst.helperProportions.height,
+                                               left: 0
+                                       } ).top;
+                               }
+                               if ( bs ) {
+                                       ui.position.top = inst._convertPositionTo( "relative", {
+                                               top: b,
+                                               left: 0
+                                       } ).top;
+                               }
+                               if ( ls ) {
+                                       ui.position.left = inst._convertPositionTo( "relative", {
+                                               top: 0,
+                                               left: l - inst.helperProportions.width
+                                       } ).left;
+                               }
+                               if ( rs ) {
+                                       ui.position.left = inst._convertPositionTo( "relative", {
+                                               top: 0,
+                                               left: r
+                                       } ).left;
+                               }
+                       }
+
+                       first = ( ts || bs || ls || rs );
+
+                       if ( o.snapMode !== "outer" ) {
+                               ts = Math.abs( t - y1 ) <= d;
+                               bs = Math.abs( b - y2 ) <= d;
+                               ls = Math.abs( l - x1 ) <= d;
+                               rs = Math.abs( r - x2 ) <= d;
+                               if ( ts ) {
+                                       ui.position.top = inst._convertPositionTo( "relative", {
+                                               top: t,
+                                               left: 0
+                                       } ).top;
+                               }
+                               if ( bs ) {
+                                       ui.position.top = inst._convertPositionTo( "relative", {
+                                               top: b - inst.helperProportions.height,
+                                               left: 0
+                                       } ).top;
+                               }
+                               if ( ls ) {
+                                       ui.position.left = inst._convertPositionTo( "relative", {
+                                               top: 0,
+                                               left: l
+                                       } ).left;
+                               }
+                               if ( rs ) {
+                                       ui.position.left = inst._convertPositionTo( "relative", {
+                                               top: 0,
+                                               left: r - inst.helperProportions.width
+                                       } ).left;
+                               }
+                       }
+
+                       if ( !inst.snapElements[ i ].snapping && ( ts || bs || ls || rs || first ) ) {
+                               ( inst.options.snap.snap &&
+                                       inst.options.snap.snap.call(
+                                               inst.element,
+                                               event,
+                                               $.extend( inst._uiHash(), {
+                                                       snapItem: inst.snapElements[ i ].item
+                                               } ) ) );
+                       }
+                       inst.snapElements[ i ].snapping = ( ts || bs || ls || rs || first );
+
+               }
+
+       }
+} );
+
+$.ui.plugin.add( "draggable", "stack", {
+       start: function( event, ui, instance ) {
+               var min,
+                       o = instance.options,
+                       group = $.makeArray( $( o.stack ) ).sort( function( a, b ) {
+                               return ( parseInt( $( a ).css( "zIndex" ), 10 ) || 0 ) -
+                                       ( parseInt( $( b ).css( "zIndex" ), 10 ) || 0 );
+                       } );
+
+               if ( !group.length ) { return; }
+
+               min = parseInt( $( group[ 0 ] ).css( "zIndex" ), 10 ) || 0;
+               $( group ).each( function( i ) {
+                       $( this ).css( "zIndex", min + i );
+               } );
+               this.css( "zIndex", ( min + group.length ) );
+       }
+} );
+
+$.ui.plugin.add( "draggable", "zIndex", {
+       start: function( event, ui, instance ) {
+               var t = $( ui.helper ),
+                       o = instance.options;
+
+               if ( t.css( "zIndex" ) ) {
+                       o._zIndex = t.css( "zIndex" );
+               }
+               t.css( "zIndex", o.zIndex );
+       },
+       stop: function( event, ui, instance ) {
+               var o = instance.options;
+
+               if ( o._zIndex ) {
+                       $( ui.helper ).css( "zIndex", o._zIndex );
+               }
+       }
+} );
+
+var widgetsDraggable = $.ui.draggable;
+
+
+/*!
+ * jQuery UI Droppable 1.12.1
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ */
+
+//>>label: Droppable
+//>>group: Interactions
+//>>description: Enables drop targets for draggable elements.
+//>>docs: http://api.jqueryui.com/droppable/
+//>>demos: http://jqueryui.com/droppable/
+
+
+
+$.widget( "ui.droppable", {
+       version: "1.12.1",
+       widgetEventPrefix: "drop",
+       options: {
+               accept: "*",
+               addClasses: true,
+               greedy: false,
+               scope: "default",
+               tolerance: "intersect",
+
+               // Callbacks
+               activate: null,
+               deactivate: null,
+               drop: null,
+               out: null,
+               over: null
+       },
+       _create: function() {
+
+               var proportions,
+                       o = this.options,
+                       accept = o.accept;
+
+               this.isover = false;
+               this.isout = true;
+
+               this.accept = $.isFunction( accept ) ? accept : function( d ) {
+                       return d.is( accept );
+               };
+
+               this.proportions = function( /* valueToWrite */ ) {
+                       if ( arguments.length ) {
+
+                               // Store the droppable's proportions
+                               proportions = arguments[ 0 ];
+                       } else {
+
+                               // Retrieve or derive the droppable's proportions
+                               return proportions ?
+                                       proportions :
+                                       proportions = {
+                                               width: this.element[ 0 ].offsetWidth,
+                                               height: this.element[ 0 ].offsetHeight
+                                       };
+                       }
+               };
+
+               this._addToManager( o.scope );
+
+               o.addClasses && this._addClass( "ui-droppable" );
+
+       },
+
+       _addToManager: function( scope ) {
+
+               // Add the reference and positions to the manager
+               $.ui.ddmanager.droppables[ scope ] = $.ui.ddmanager.droppables[ scope ] || [];
+               $.ui.ddmanager.droppables[ scope ].push( this );
+       },
+
+       _splice: function( drop ) {
+               var i = 0;
+               for ( ; i < drop.length; i++ ) {
+                       if ( drop[ i ] === this ) {
+                               drop.splice( i, 1 );
+                       }
+               }
+       },
+
+       _destroy: function() {
+               var drop = $.ui.ddmanager.droppables[ this.options.scope ];
+
+               this._splice( drop );
+       },
+
+       _setOption: function( key, value ) {
+
+               if ( key === "accept" ) {
+                       this.accept = $.isFunction( value ) ? value : function( d ) {
+                               return d.is( value );
+                       };
+               } else if ( key === "scope" ) {
+                       var drop = $.ui.ddmanager.droppables[ this.options.scope ];
+
+                       this._splice( drop );
+                       this._addToManager( value );
+               }
+
+               this._super( key, value );
+       },
+
+       _activate: function( event ) {
+               var draggable = $.ui.ddmanager.current;
+
+               this._addActiveClass();
+               if ( draggable ) {
+                       this._trigger( "activate", event, this.ui( draggable ) );
+               }
+       },
+
+       _deactivate: function( event ) {
+               var draggable = $.ui.ddmanager.current;
+
+               this._removeActiveClass();
+               if ( draggable ) {
+                       this._trigger( "deactivate", event, this.ui( draggable ) );
+               }
+       },
+
+       _over: function( event ) {
+
+               var draggable = $.ui.ddmanager.current;
+
+               // Bail if draggable and droppable are same element
+               if ( !draggable || ( draggable.currentItem ||
+                               draggable.element )[ 0 ] === this.element[ 0 ] ) {
+                       return;
+               }
+
+               if ( this.accept.call( this.element[ 0 ], ( draggable.currentItem ||
+                               draggable.element ) ) ) {
+                       this._addHoverClass();
+                       this._trigger( "over", event, this.ui( draggable ) );
+               }
+
+       },
+
+       _out: function( event ) {
+
+               var draggable = $.ui.ddmanager.current;
+
+               // Bail if draggable and droppable are same element
+               if ( !draggable || ( draggable.currentItem ||
+                               draggable.element )[ 0 ] === this.element[ 0 ] ) {
+                       return;
+               }
+
+               if ( this.accept.call( this.element[ 0 ], ( draggable.currentItem ||
+                               draggable.element ) ) ) {
+                       this._removeHoverClass();
+                       this._trigger( "out", event, this.ui( draggable ) );
+               }
+
+       },
+
+       _drop: function( event, custom ) {
+
+               var draggable = custom || $.ui.ddmanager.current,
+                       childrenIntersection = false;
+
+               // Bail if draggable and droppable are same element
+               if ( !draggable || ( draggable.currentItem ||
+                               draggable.element )[ 0 ] === this.element[ 0 ] ) {
+                       return false;
+               }
+
+               this.element
+                       .find( ":data(ui-droppable)" )
+                       .not( ".ui-draggable-dragging" )
+                       .each( function() {
+                               var inst = $( this ).droppable( "instance" );
+                               if (
+                                       inst.options.greedy &&
+                                       !inst.options.disabled &&
+                                       inst.options.scope === draggable.options.scope &&
+                                       inst.accept.call(
+                                               inst.element[ 0 ], ( draggable.currentItem || draggable.element )
+                                       ) &&
+                                       intersect(
+                                               draggable,
+                                               $.extend( inst, { offset: inst.element.offset() } ),
+                                               inst.options.tolerance, event
+                                       )
+                               ) {
+                                       childrenIntersection = true;
+                                       return false; }
+                       } );
+               if ( childrenIntersection ) {
+                       return false;
+               }
+
+               if ( this.accept.call( this.element[ 0 ],
+                               ( draggable.currentItem || draggable.element ) ) ) {
+                       this._removeActiveClass();
+                       this._removeHoverClass();
+
+                       this._trigger( "drop", event, this.ui( draggable ) );
+                       return this.element;
+               }
+
+               return false;
+
+       },
+
+       ui: function( c ) {
+               return {
+                       draggable: ( c.currentItem || c.element ),
+                       helper: c.helper,
+                       position: c.position,
+                       offset: c.positionAbs
+               };
+       },
+
+       // Extension points just to make backcompat sane and avoid duplicating logic
+       // TODO: Remove in 1.13 along with call to it below
+       _addHoverClass: function() {
+               this._addClass( "ui-droppable-hover" );
+       },
+
+       _removeHoverClass: function() {
+               this._removeClass( "ui-droppable-hover" );
+       },
+
+       _addActiveClass: function() {
+               this._addClass( "ui-droppable-active" );
+       },
+
+       _removeActiveClass: function() {
+               this._removeClass( "ui-droppable-active" );
+       }
+} );
+
+var intersect = $.ui.intersect = ( function() {
+       function isOverAxis( x, reference, size ) {
+               return ( x >= reference ) && ( x < ( reference + size ) );
+       }
+
+       return function( draggable, droppable, toleranceMode, event ) {
+
+               if ( !droppable.offset ) {
+                       return false;
+               }
+
+               var x1 = ( draggable.positionAbs ||
+                               draggable.position.absolute ).left + draggable.margins.left,
+                       y1 = ( draggable.positionAbs ||
+                               draggable.position.absolute ).top + draggable.margins.top,
+                       x2 = x1 + draggable.helperProportions.width,
+                       y2 = y1 + draggable.helperProportions.height,
+                       l = droppable.offset.left,
+                       t = droppable.offset.top,
+                       r = l + droppable.proportions().width,
+                       b = t + droppable.proportions().height;
+
+               switch ( toleranceMode ) {
+               case "fit":
+                       return ( l <= x1 && x2 <= r && t <= y1 && y2 <= b );
+               case "intersect":
+                       return ( l < x1 + ( draggable.helperProportions.width / 2 ) && // Right Half
+                               x2 - ( draggable.helperProportions.width / 2 ) < r && // Left Half
+                               t < y1 + ( draggable.helperProportions.height / 2 ) && // Bottom Half
+                               y2 - ( draggable.helperProportions.height / 2 ) < b ); // Top Half
+               case "pointer":
+                       return isOverAxis( event.pageY, t, droppable.proportions().height ) &&
+                               isOverAxis( event.pageX, l, droppable.proportions().width );
+               case "touch":
+                       return (
+                               ( y1 >= t && y1 <= b ) || // Top edge touching
+                               ( y2 >= t && y2 <= b ) || // Bottom edge touching
+                               ( y1 < t && y2 > b ) // Surrounded vertically
+                       ) && (
+                               ( x1 >= l && x1 <= r ) || // Left edge touching
+                               ( x2 >= l && x2 <= r ) || // Right edge touching
+                               ( x1 < l && x2 > r ) // Surrounded horizontally
+                       );
+               default:
+                       return false;
+               }
+       };
+} )();
+
+/*
+       This manager tracks offsets of draggables and droppables
+*/
+$.ui.ddmanager = {
+       current: null,
+       droppables: { "default": [] },
+       prepareOffsets: function( t, event ) {
+
+               var i, j,
+                       m = $.ui.ddmanager.droppables[ t.options.scope ] || [],
+                       type = event ? event.type : null, // workaround for #2317
+                       list = ( t.currentItem || t.element ).find( ":data(ui-droppable)" ).addBack();
+
+               droppablesLoop: for ( i = 0; i < m.length; i++ ) {
+
+                       // No disabled and non-accepted
+                       if ( m[ i ].options.disabled || ( t && !m[ i ].accept.call( m[ i ].element[ 0 ],
+                                       ( t.currentItem || t.element ) ) ) ) {
+                               continue;
+                       }
+
+                       // Filter out elements in the current dragged item
+                       for ( j = 0; j < list.length; j++ ) {
+                               if ( list[ j ] === m[ i ].element[ 0 ] ) {
+                                       m[ i ].proportions().height = 0;
+                                       continue droppablesLoop;
+                               }
+                       }
+
+                       m[ i ].visible = m[ i ].element.css( "display" ) !== "none";
+                       if ( !m[ i ].visible ) {
+                               continue;
+                       }
+
+                       // Activate the droppable if used directly from draggables
+                       if ( type === "mousedown" ) {
+                               m[ i ]._activate.call( m[ i ], event );
+                       }
+
+                       m[ i ].offset = m[ i ].element.offset();
+                       m[ i ].proportions( {
+                               width: m[ i ].element[ 0 ].offsetWidth,
+                               height: m[ i ].element[ 0 ].offsetHeight
+                       } );
+
+               }
+
+       },
+       drop: function( draggable, event ) {
+
+               var dropped = false;
+
+               // Create a copy of the droppables in case the list changes during the drop (#9116)
+               $.each( ( $.ui.ddmanager.droppables[ draggable.options.scope ] || [] ).slice(), function() {
+
+                       if ( !this.options ) {
+                               return;
+                       }
+                       if ( !this.options.disabled && this.visible &&
+                                       intersect( draggable, this, this.options.tolerance, event ) ) {
+                               dropped = this._drop.call( this, event ) || dropped;
+                       }
+
+                       if ( !this.options.disabled && this.visible && this.accept.call( this.element[ 0 ],
+                                       ( draggable.currentItem || draggable.element ) ) ) {
+                               this.isout = true;
+                               this.isover = false;
+                               this._deactivate.call( this, event );
+                       }
+
+               } );
+               return dropped;
+
+       },
+       dragStart: function( draggable, event ) {
+
+               // Listen for scrolling so that if the dragging causes scrolling the position of the
+               // droppables can be recalculated (see #5003)
+               draggable.element.parentsUntil( "body" ).on( "scroll.droppable", function() {
+                       if ( !draggable.options.refreshPositions ) {
+                               $.ui.ddmanager.prepareOffsets( draggable, event );
+                       }
+               } );
+       },
+       drag: function( draggable, event ) {
+
+               // If you have a highly dynamic page, you might try this option. It renders positions
+               // every time you move the mouse.
+               if ( draggable.options.refreshPositions ) {
+                       $.ui.ddmanager.prepareOffsets( draggable, event );
+               }
+
+               // Run through all droppables and check their positions based on specific tolerance options
+               $.each( $.ui.ddmanager.droppables[ draggable.options.scope ] || [], function() {
+
+                       if ( this.options.disabled || this.greedyChild || !this.visible ) {
+                               return;
+                       }
+
+                       var parentInstance, scope, parent,
+                               intersects = intersect( draggable, this, this.options.tolerance, event ),
+                               c = !intersects && this.isover ?
+                                       "isout" :
+                                       ( intersects && !this.isover ? "isover" : null );
+                       if ( !c ) {
+                               return;
+                       }
+
+                       if ( this.options.greedy ) {
+
+                               // find droppable parents with same scope
+                               scope = this.options.scope;
+                               parent = this.element.parents( ":data(ui-droppable)" ).filter( function() {
+                                       return $( this ).droppable( "instance" ).options.scope === scope;
+                               } );
+
+                               if ( parent.length ) {
+                                       parentInstance = $( parent[ 0 ] ).droppable( "instance" );
+                                       parentInstance.greedyChild = ( c === "isover" );
+                               }
+                       }
+
+                       // We just moved into a greedy child
+                       if ( parentInstance && c === "isover" ) {
+                               parentInstance.isover = false;
+                               parentInstance.isout = true;
+                               parentInstance._out.call( parentInstance, event );
+                       }
+
+                       this[ c ] = true;
+                       this[ c === "isout" ? "isover" : "isout" ] = false;
+                       this[ c === "isover" ? "_over" : "_out" ].call( this, event );
+
+                       // We just moved out of a greedy child
+                       if ( parentInstance && c === "isout" ) {
+                               parentInstance.isout = false;
+                               parentInstance.isover = true;
+                               parentInstance._over.call( parentInstance, event );
+                       }
+               } );
+
+       },
+       dragStop: function( draggable, event ) {
+               draggable.element.parentsUntil( "body" ).off( "scroll.droppable" );
+
+               // Call prepareOffsets one final time since IE does not fire return scroll events when
+               // overflow was caused by drag (see #5003)
+               if ( !draggable.options.refreshPositions ) {
+                       $.ui.ddmanager.prepareOffsets( draggable, event );
+               }
+       }
+};
+
+// DEPRECATED
+// TODO: switch return back to widget declaration at top of file when this is removed
+if ( $.uiBackCompat !== false ) {
+
+       // Backcompat for activeClass and hoverClass options
+       $.widget( "ui.droppable", $.ui.droppable, {
+               options: {
+                       hoverClass: false,
+                       activeClass: false
+               },
+               _addActiveClass: function() {
+                       this._super();
+                       if ( this.options.activeClass ) {
+                               this.element.addClass( this.options.activeClass );
+                       }
+               },
+               _removeActiveClass: function() {
+                       this._super();
+                       if ( this.options.activeClass ) {
+                               this.element.removeClass( this.options.activeClass );
+                       }
+               },
+               _addHoverClass: function() {
+                       this._super();
+                       if ( this.options.hoverClass ) {
+                               this.element.addClass( this.options.hoverClass );
+                       }
+               },
+               _removeHoverClass: function() {
+                       this._super();
+                       if ( this.options.hoverClass ) {
+                               this.element.removeClass( this.options.hoverClass );
+                       }
+               }
+       } );
+}
+
+var widgetsDroppable = $.ui.droppable;
+
+
+/*!
+ * jQuery UI Resizable 1.12.1
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ */
+
+//>>label: Resizable
+//>>group: Interactions
+//>>description: Enables resize functionality for any element.
+//>>docs: http://api.jqueryui.com/resizable/
+//>>demos: http://jqueryui.com/resizable/
+//>>css.structure: ../../themes/base/core.css
+//>>css.structure: ../../themes/base/resizable.css
+//>>css.theme: ../../themes/base/theme.css
+
+
+
+$.widget( "ui.resizable", $.ui.mouse, {
+       version: "1.12.1",
+       widgetEventPrefix: "resize",
+       options: {
+               alsoResize: false,
+               animate: false,
+               animateDuration: "slow",
+               animateEasing: "swing",
+               aspectRatio: false,
+               autoHide: false,
+               classes: {
+                       "ui-resizable-se": "ui-icon ui-icon-gripsmall-diagonal-se"
+               },
+               containment: false,
+               ghost: false,
+               grid: false,
+               handles: "e,s,se",
+               helper: false,
+               maxHeight: null,
+               maxWidth: null,
+               minHeight: 10,
+               minWidth: 10,
+
+               // See #7960
+               zIndex: 90,
+
+               // Callbacks
+               resize: null,
+               start: null,
+               stop: null
+       },
+
+       _num: function( value ) {
+               return parseFloat( value ) || 0;
+       },
+
+       _isNumber: function( value ) {
+               return !isNaN( parseFloat( value ) );
+       },
+
+       _hasScroll: function( el, a ) {
+
+               if ( $( el ).css( "overflow" ) === "hidden" ) {
+                       return false;
+               }
+
+               var scroll = ( a && a === "left" ) ? "scrollLeft" : "scrollTop",
+                       has = false;
+
+               if ( el[ scroll ] > 0 ) {
+                       return true;
+               }
+
+               // TODO: determine which cases actually cause this to happen
+               // if the element doesn't have the scroll set, see if it's possible to
+               // set the scroll
+               el[ scroll ] = 1;
+               has = ( el[ scroll ] > 0 );
+               el[ scroll ] = 0;
+               return has;
+       },
+
+       _create: function() {
+
+               var margins,
+                       o = this.options,
+                       that = this;
+               this._addClass( "ui-resizable" );
+
+               $.extend( this, {
+                       _aspectRatio: !!( o.aspectRatio ),
+                       aspectRatio: o.aspectRatio,
+                       originalElement: this.element,
+                       _proportionallyResizeElements: [],
+                       _helper: o.helper || o.ghost || o.animate ? o.helper || "ui-resizable-helper" : null
+               } );
+
+               // Wrap the element if it cannot hold child nodes
+               if ( this.element[ 0 ].nodeName.match( /^(canvas|textarea|input|select|button|img)$/i ) ) {
+
+                       this.element.wrap(
+                               $( "<div class='ui-wrapper' style='overflow: hidden;'></div>" ).css( {
+                                       position: this.element.css( "position" ),
+                                       width: this.element.outerWidth(),
+                                       height: this.element.outerHeight(),
+                                       top: this.element.css( "top" ),
+                                       left: this.element.css( "left" )
+                               } )
+                       );
+
+                       this.element = this.element.parent().data(
+                               "ui-resizable", this.element.resizable( "instance" )
+                       );
+
+                       this.elementIsWrapper = true;
+
+                       margins = {
+                               marginTop: this.originalElement.css( "marginTop" ),
+                               marginRight: this.originalElement.css( "marginRight" ),
+                               marginBottom: this.originalElement.css( "marginBottom" ),
+                               marginLeft: this.originalElement.css( "marginLeft" )
+                       };
+
+                       this.element.css( margins );
+                       this.originalElement.css( "margin", 0 );
+
+                       // support: Safari
+                       // Prevent Safari textarea resize
+                       this.originalResizeStyle = this.originalElement.css( "resize" );
+                       this.originalElement.css( "resize", "none" );
+
+                       this._proportionallyResizeElements.push( this.originalElement.css( {
+                               position: "static",
+                               zoom: 1,
+                               display: "block"
+                       } ) );
+
+                       // Support: IE9
+                       // avoid IE jump (hard set the margin)
+                       this.originalElement.css( margins );
+
+                       this._proportionallyResize();
+               }
+
+               this._setupHandles();
+
+               if ( o.autoHide ) {
+                       $( this.element )
+                               .on( "mouseenter", function() {
+                                       if ( o.disabled ) {
+                                               return;
+                                       }
+                                       that._removeClass( "ui-resizable-autohide" );
+                                       that._handles.show();
+                               } )
+                               .on( "mouseleave", function() {
+                                       if ( o.disabled ) {
+                                               return;
+                                       }
+                                       if ( !that.resizing ) {
+                                               that._addClass( "ui-resizable-autohide" );
+                                               that._handles.hide();
+                                       }
+                               } );
+               }
+
+               this._mouseInit();
+       },
+
+       _destroy: function() {
+
+               this._mouseDestroy();
+
+               var wrapper,
+                       _destroy = function( exp ) {
+                               $( exp )
+                                       .removeData( "resizable" )
+                                       .removeData( "ui-resizable" )
+                                       .off( ".resizable" )
+                                       .find( ".ui-resizable-handle" )
+                                               .remove();
+                       };
+
+               // TODO: Unwrap at same DOM position
+               if ( this.elementIsWrapper ) {
+                       _destroy( this.element );
+                       wrapper = this.element;
+                       this.originalElement.css( {
+                               position: wrapper.css( "position" ),
+                               width: wrapper.outerWidth(),
+                               height: wrapper.outerHeight(),
+                               top: wrapper.css( "top" ),
+                               left: wrapper.css( "left" )
+                       } ).insertAfter( wrapper );
+                       wrapper.remove();
+               }
+
+               this.originalElement.css( "resize", this.originalResizeStyle );
+               _destroy( this.originalElement );
+
+               return this;
+       },
+
+       _setOption: function( key, value ) {
+               this._super( key, value );
+
+               switch ( key ) {
+               case "handles":
+                       this._removeHandles();
+                       this._setupHandles();
+                       break;
+               default:
+                       break;
+               }
+       },
+
+       _setupHandles: function() {
+               var o = this.options, handle, i, n, hname, axis, that = this;
+               this.handles = o.handles ||
+                       ( !$( ".ui-resizable-handle", this.element ).length ?
+                               "e,s,se" : {
+                                       n: ".ui-resizable-n",
+                                       e: ".ui-resizable-e",
+                                       s: ".ui-resizable-s",
+                                       w: ".ui-resizable-w",
+                                       se: ".ui-resizable-se",
+                                       sw: ".ui-resizable-sw",
+                                       ne: ".ui-resizable-ne",
+                                       nw: ".ui-resizable-nw"
+                               } );
+
+               this._handles = $();
+               if ( this.handles.constructor === String ) {
+
+                       if ( this.handles === "all" ) {
+                               this.handles = "n,e,s,w,se,sw,ne,nw";
+                       }
+
+                       n = this.handles.split( "," );
+                       this.handles = {};
+
+                       for ( i = 0; i < n.length; i++ ) {
+
+                               handle = $.trim( n[ i ] );
+                               hname = "ui-resizable-" + handle;
+                               axis = $( "<div>" );
+                               this._addClass( axis, "ui-resizable-handle " + hname );
+
+                               axis.css( { zIndex: o.zIndex } );
+
+                               this.handles[ handle ] = ".ui-resizable-" + handle;
+                               this.element.append( axis );
+                       }
+
+               }
+
+               this._renderAxis = function( target ) {
+
+                       var i, axis, padPos, padWrapper;
+
+                       target = target || this.element;
+
+                       for ( i in this.handles ) {
+
+                               if ( this.handles[ i ].constructor === String ) {
+                                       this.handles[ i ] = this.element.children( this.handles[ i ] ).first().show();
+                               } else if ( this.handles[ i ].jquery || this.handles[ i ].nodeType ) {
+                                       this.handles[ i ] = $( this.handles[ i ] );
+                                       this._on( this.handles[ i ], { "mousedown": that._mouseDown } );
+                               }
+
+                               if ( this.elementIsWrapper &&
+                                               this.originalElement[ 0 ]
+                                                       .nodeName
+                                                       .match( /^(textarea|input|select|button)$/i ) ) {
+                                       axis = $( this.handles[ i ], this.element );
+
+                                       padWrapper = /sw|ne|nw|se|n|s/.test( i ) ?
+                                               axis.outerHeight() :
+                                               axis.outerWidth();
+
+                                       padPos = [ "padding",
+                                               /ne|nw|n/.test( i ) ? "Top" :
+                                               /se|sw|s/.test( i ) ? "Bottom" :
+                                               /^e$/.test( i ) ? "Right" : "Left" ].join( "" );
+
+                                       target.css( padPos, padWrapper );
+
+                                       this._proportionallyResize();
+                               }
+
+                               this._handles = this._handles.add( this.handles[ i ] );
+                       }
+               };
+
+               // TODO: make renderAxis a prototype function
+               this._renderAxis( this.element );
+
+               this._handles = this._handles.add( this.element.find( ".ui-resizable-handle" ) );
+               this._handles.disableSelection();
+
+               this._handles.on( "mouseover", function() {
+                       if ( !that.resizing ) {
+                               if ( this.className ) {
+                                       axis = this.className.match( /ui-resizable-(se|sw|ne|nw|n|e|s|w)/i );
+                               }
+                               that.axis = axis && axis[ 1 ] ? axis[ 1 ] : "se";
+                       }
+               } );
+
+               if ( o.autoHide ) {
+                       this._handles.hide();
+                       this._addClass( "ui-resizable-autohide" );
+               }
+       },
+
+       _removeHandles: function() {
+               this._handles.remove();
+       },
+
+       _mouseCapture: function( event ) {
+               var i, handle,
+                       capture = false;
+
+               for ( i in this.handles ) {
+                       handle = $( this.handles[ i ] )[ 0 ];
+                       if ( handle === event.target || $.contains( handle, event.target ) ) {
+                               capture = true;
+                       }
+               }
+
+               return !this.options.disabled && capture;
+       },
+
+       _mouseStart: function( event ) {
+
+               var curleft, curtop, cursor,
+                       o = this.options,
+                       el = this.element;
+
+               this.resizing = true;
+
+               this._renderProxy();
+
+               curleft = this._num( this.helper.css( "left" ) );
+               curtop = this._num( this.helper.css( "top" ) );
+
+               if ( o.containment ) {
+                       curleft += $( o.containment ).scrollLeft() || 0;
+                       curtop += $( o.containment ).scrollTop() || 0;
+               }
+
+               this.offset = this.helper.offset();
+               this.position = { left: curleft, top: curtop };
+
+               this.size = this._helper ? {
+                               width: this.helper.width(),
+                               height: this.helper.height()
+                       } : {
+                               width: el.width(),
+                               height: el.height()
+                       };
+
+               this.originalSize = this._helper ? {
+                               width: el.outerWidth(),
+                               height: el.outerHeight()
+                       } : {
+                               width: el.width(),
+                               height: el.height()
+                       };
+
+               this.sizeDiff = {
+                       width: el.outerWidth() - el.width(),
+                       height: el.outerHeight() - el.height()
+               };
+
+               this.originalPosition = { left: curleft, top: curtop };
+               this.originalMousePosition = { left: event.pageX, top: event.pageY };
+
+               this.aspectRatio = ( typeof o.aspectRatio === "number" ) ?
+                       o.aspectRatio :
+                       ( ( this.originalSize.width / this.originalSize.height ) || 1 );
+
+               cursor = $( ".ui-resizable-" + this.axis ).css( "cursor" );
+               $( "body" ).css( "cursor", cursor === "auto" ? this.axis + "-resize" : cursor );
+
+               this._addClass( "ui-resizable-resizing" );
+               this._propagate( "start", event );
+               return true;
+       },
+
+       _mouseDrag: function( event ) {
+
+               var data, props,
+                       smp = this.originalMousePosition,
+                       a = this.axis,
+                       dx = ( event.pageX - smp.left ) || 0,
+                       dy = ( event.pageY - smp.top ) || 0,
+                       trigger = this._change[ a ];
+
+               this._updatePrevProperties();
+
+               if ( !trigger ) {
+                       return false;
+               }
+
+               data = trigger.apply( this, [ event, dx, dy ] );
+
+               this._updateVirtualBoundaries( event.shiftKey );
+               if ( this._aspectRatio || event.shiftKey ) {
+                       data = this._updateRatio( data, event );
+               }
+
+               data = this._respectSize( data, event );
+
+               this._updateCache( data );
+
+               this._propagate( "resize", event );
+
+               props = this._applyChanges();
+
+               if ( !this._helper && this._proportionallyResizeElements.length ) {
+                       this._proportionallyResize();
+               }
+
+               if ( !$.isEmptyObject( props ) ) {
+                       this._updatePrevProperties();
+                       this._trigger( "resize", event, this.ui() );
+                       this._applyChanges();
+               }
+
+               return false;
+       },
+
+       _mouseStop: function( event ) {
+
+               this.resizing = false;
+               var pr, ista, soffseth, soffsetw, s, left, top,
+                       o = this.options, that = this;
+
+               if ( this._helper ) {
+
+                       pr = this._proportionallyResizeElements;
+                       ista = pr.length && ( /textarea/i ).test( pr[ 0 ].nodeName );
+                       soffseth = ista && this._hasScroll( pr[ 0 ], "left" ) ? 0 : that.sizeDiff.height;
+                       soffsetw = ista ? 0 : that.sizeDiff.width;
+
+                       s = {
+                               width: ( that.helper.width()  - soffsetw ),
+                               height: ( that.helper.height() - soffseth )
+                       };
+                       left = ( parseFloat( that.element.css( "left" ) ) +
+                               ( that.position.left - that.originalPosition.left ) ) || null;
+                       top = ( parseFloat( that.element.css( "top" ) ) +
+                               ( that.position.top - that.originalPosition.top ) ) || null;
+
+                       if ( !o.animate ) {
+                               this.element.css( $.extend( s, { top: top, left: left } ) );
+                       }
+
+                       that.helper.height( that.size.height );
+                       that.helper.width( that.size.width );
+
+                       if ( this._helper && !o.animate ) {
+                               this._proportionallyResize();
+                       }
+               }
+
+               $( "body" ).css( "cursor", "auto" );
+
+               this._removeClass( "ui-resizable-resizing" );
+
+               this._propagate( "stop", event );
+
+               if ( this._helper ) {
+                       this.helper.remove();
+               }
+
+               return false;
+
+       },
+
+       _updatePrevProperties: function() {
+               this.prevPosition = {
+                       top: this.position.top,
+                       left: this.position.left
+               };
+               this.prevSize = {
+                       width: this.size.width,
+                       height: this.size.height
+               };
+       },
+
+       _applyChanges: function() {
+               var props = {};
+
+               if ( this.position.top !== this.prevPosition.top ) {
+                       props.top = this.position.top + "px";
+               }
+               if ( this.position.left !== this.prevPosition.left ) {
+                       props.left = this.position.left + "px";
+               }
+               if ( this.size.width !== this.prevSize.width ) {
+                       props.width = this.size.width + "px";
+               }
+               if ( this.size.height !== this.prevSize.height ) {
+                       props.height = this.size.height + "px";
+               }
+
+               this.helper.css( props );
+
+               return props;
+       },
+
+       _updateVirtualBoundaries: function( forceAspectRatio ) {
+               var pMinWidth, pMaxWidth, pMinHeight, pMaxHeight, b,
+                       o = this.options;
+
+               b = {
+                       minWidth: this._isNumber( o.minWidth ) ? o.minWidth : 0,
+                       maxWidth: this._isNumber( o.maxWidth ) ? o.maxWidth : Infinity,
+                       minHeight: this._isNumber( o.minHeight ) ? o.minHeight : 0,
+                       maxHeight: this._isNumber( o.maxHeight ) ? o.maxHeight : Infinity
+               };
+
+               if ( this._aspectRatio || forceAspectRatio ) {
+                       pMinWidth = b.minHeight * this.aspectRatio;
+                       pMinHeight = b.minWidth / this.aspectRatio;
+                       pMaxWidth = b.maxHeight * this.aspectRatio;
+                       pMaxHeight = b.maxWidth / this.aspectRatio;
+
+                       if ( pMinWidth > b.minWidth ) {
+                               b.minWidth = pMinWidth;
+                       }
+                       if ( pMinHeight > b.minHeight ) {
+                               b.minHeight = pMinHeight;
+                       }
+                       if ( pMaxWidth < b.maxWidth ) {
+                               b.maxWidth = pMaxWidth;
+                       }
+                       if ( pMaxHeight < b.maxHeight ) {
+                               b.maxHeight = pMaxHeight;
+                       }
+               }
+               this._vBoundaries = b;
+       },
+
+       _updateCache: function( data ) {
+               this.offset = this.helper.offset();
+               if ( this._isNumber( data.left ) ) {
+                       this.position.left = data.left;
+               }
+               if ( this._isNumber( data.top ) ) {
+                       this.position.top = data.top;
+               }
+               if ( this._isNumber( data.height ) ) {
+                       this.size.height = data.height;
+               }
+               if ( this._isNumber( data.width ) ) {
+                       this.size.width = data.width;
+               }
+       },
+
+       _updateRatio: function( data ) {
+
+               var cpos = this.position,
+                       csize = this.size,
+                       a = this.axis;
+
+               if ( this._isNumber( data.height ) ) {
+                       data.width = ( data.height * this.aspectRatio );
+               } else if ( this._isNumber( data.width ) ) {
+                       data.height = ( data.width / this.aspectRatio );
+               }
+
+               if ( a === "sw" ) {
+                       data.left = cpos.left + ( csize.width - data.width );
+                       data.top = null;
+               }
+               if ( a === "nw" ) {
+                       data.top = cpos.top + ( csize.height - data.height );
+                       data.left = cpos.left + ( csize.width - data.width );
+               }
+
+               return data;
+       },
+
+       _respectSize: function( data ) {
+
+               var o = this._vBoundaries,
+                       a = this.axis,
+                       ismaxw = this._isNumber( data.width ) && o.maxWidth && ( o.maxWidth < data.width ),
+                       ismaxh = this._isNumber( data.height ) && o.maxHeight && ( o.maxHeight < data.height ),
+                       isminw = this._isNumber( data.width ) && o.minWidth && ( o.minWidth > data.width ),
+                       isminh = this._isNumber( data.height ) && o.minHeight && ( o.minHeight > data.height ),
+                       dw = this.originalPosition.left + this.originalSize.width,
+                       dh = this.originalPosition.top + this.originalSize.height,
+                       cw = /sw|nw|w/.test( a ), ch = /nw|ne|n/.test( a );
+               if ( isminw ) {
+                       data.width = o.minWidth;
+               }
+               if ( isminh ) {
+                       data.height = o.minHeight;
+               }
+               if ( ismaxw ) {
+                       data.width = o.maxWidth;
+               }
+               if ( ismaxh ) {
+                       data.height = o.maxHeight;
+               }
+
+               if ( isminw && cw ) {
+                       data.left = dw - o.minWidth;
+               }
+               if ( ismaxw && cw ) {
+                       data.left = dw - o.maxWidth;
+               }
+               if ( isminh && ch ) {
+                       data.top = dh - o.minHeight;
+               }
+               if ( ismaxh && ch ) {
+                       data.top = dh - o.maxHeight;
+               }
+
+               // Fixing jump error on top/left - bug #2330
+               if ( !data.width && !data.height && !data.left && data.top ) {
+                       data.top = null;
+               } else if ( !data.width && !data.height && !data.top && data.left ) {
+                       data.left = null;
+               }
+
+               return data;
+       },
+
+       _getPaddingPlusBorderDimensions: function( element ) {
+               var i = 0,
+                       widths = [],
+                       borders = [
+                               element.css( "borderTopWidth" ),
+                               element.css( "borderRightWidth" ),
+                               element.css( "borderBottomWidth" ),
+                               element.css( "borderLeftWidth" )
+                       ],
+                       paddings = [
+                               element.css( "paddingTop" ),
+                               element.css( "paddingRight" ),
+                               element.css( "paddingBottom" ),
+                               element.css( "paddingLeft" )
+                       ];
+
+               for ( ; i < 4; i++ ) {
+                       widths[ i ] = ( parseFloat( borders[ i ] ) || 0 );
+                       widths[ i ] += ( parseFloat( paddings[ i ] ) || 0 );
+               }
+
+               return {
+                       height: widths[ 0 ] + widths[ 2 ],
+                       width: widths[ 1 ] + widths[ 3 ]
+               };
+       },
+
+       _proportionallyResize: function() {
+
+               if ( !this._proportionallyResizeElements.length ) {
+                       return;
+               }
+
+               var prel,
+                       i = 0,
+                       element = this.helper || this.element;
+
+               for ( ; i < this._proportionallyResizeElements.length; i++ ) {
+
+                       prel = this._proportionallyResizeElements[ i ];
+
+                       // TODO: Seems like a bug to cache this.outerDimensions
+                       // considering that we are in a loop.
+                       if ( !this.outerDimensions ) {
+                               this.outerDimensions = this._getPaddingPlusBorderDimensions( prel );
+                       }
+
+                       prel.css( {
+                               height: ( element.height() - this.outerDimensions.height ) || 0,
+                               width: ( element.width() - this.outerDimensions.width ) || 0
+                       } );
+
+               }
+
+       },
+
+       _renderProxy: function() {
+
+               var el = this.element, o = this.options;
+               this.elementOffset = el.offset();
+
+               if ( this._helper ) {
+
+                       this.helper = this.helper || $( "<div style='overflow:hidden;'></div>" );
+
+                       this._addClass( this.helper, this._helper );
+                       this.helper.css( {
+                               width: this.element.outerWidth(),
+                               height: this.element.outerHeight(),
+                               position: "absolute",
+                               left: this.elementOffset.left + "px",
+                               top: this.elementOffset.top + "px",
+                               zIndex: ++o.zIndex //TODO: Don't modify option
+                       } );
+
+                       this.helper
+                               .appendTo( "body" )
+                               .disableSelection();
+
+               } else {
+                       this.helper = this.element;
+               }
+
+       },
+
+       _change: {
+               e: function( event, dx ) {
+                       return { width: this.originalSize.width + dx };
+               },
+               w: function( event, dx ) {
+                       var cs = this.originalSize, sp = this.originalPosition;
+                       return { left: sp.left + dx, width: cs.width - dx };
+               },
+               n: function( event, dx, dy ) {
+                       var cs = this.originalSize, sp = this.originalPosition;
+                       return { top: sp.top + dy, height: cs.height - dy };
+               },
+               s: function( event, dx, dy ) {
+                       return { height: this.originalSize.height + dy };
+               },
+               se: function( event, dx, dy ) {
+                       return $.extend( this._change.s.apply( this, arguments ),
+                               this._change.e.apply( this, [ event, dx, dy ] ) );
+               },
+               sw: function( event, dx, dy ) {
+                       return $.extend( this._change.s.apply( this, arguments ),
+                               this._change.w.apply( this, [ event, dx, dy ] ) );
+               },
+               ne: function( event, dx, dy ) {
+                       return $.extend( this._change.n.apply( this, arguments ),
+                               this._change.e.apply( this, [ event, dx, dy ] ) );
+               },
+               nw: function( event, dx, dy ) {
+                       return $.extend( this._change.n.apply( this, arguments ),
+                               this._change.w.apply( this, [ event, dx, dy ] ) );
+               }
+       },
+
+       _propagate: function( n, event ) {
+               $.ui.plugin.call( this, n, [ event, this.ui() ] );
+               ( n !== "resize" && this._trigger( n, event, this.ui() ) );
+       },
+
+       plugins: {},
+
+       ui: function() {
+               return {
+                       originalElement: this.originalElement,
+                       element: this.element,
+                       helper: this.helper,
+                       position: this.position,
+                       size: this.size,
+                       originalSize: this.originalSize,
+                       originalPosition: this.originalPosition
+               };
+       }
+
+} );
+
+/*
+ * Resizable Extensions
+ */
+
+$.ui.plugin.add( "resizable", "animate", {
+
+       stop: function( event ) {
+               var that = $( this ).resizable( "instance" ),
+                       o = that.options,
+                       pr = that._proportionallyResizeElements,
+                       ista = pr.length && ( /textarea/i ).test( pr[ 0 ].nodeName ),
+                       soffseth = ista && that._hasScroll( pr[ 0 ], "left" ) ? 0 : that.sizeDiff.height,
+                       soffsetw = ista ? 0 : that.sizeDiff.width,
+                       style = {
+                               width: ( that.size.width - soffsetw ),
+                               height: ( that.size.height - soffseth )
+                       },
+                       left = ( parseFloat( that.element.css( "left" ) ) +
+                               ( that.position.left - that.originalPosition.left ) ) || null,
+                       top = ( parseFloat( that.element.css( "top" ) ) +
+                               ( that.position.top - that.originalPosition.top ) ) || null;
+
+               that.element.animate(
+                       $.extend( style, top && left ? { top: top, left: left } : {} ), {
+                               duration: o.animateDuration,
+                               easing: o.animateEasing,
+                               step: function() {
+
+                                       var data = {
+                                               width: parseFloat( that.element.css( "width" ) ),
+                                               height: parseFloat( that.element.css( "height" ) ),
+                                               top: parseFloat( that.element.css( "top" ) ),
+                                               left: parseFloat( that.element.css( "left" ) )
+                                       };
+
+                                       if ( pr && pr.length ) {
+                                               $( pr[ 0 ] ).css( { width: data.width, height: data.height } );
+                                       }
+
+                                       // Propagating resize, and updating values for each animation step
+                                       that._updateCache( data );
+                                       that._propagate( "resize", event );
+
+                               }
+                       }
+               );
+       }
+
+} );
+
+$.ui.plugin.add( "resizable", "containment", {
+
+       start: function() {
+               var element, p, co, ch, cw, width, height,
+                       that = $( this ).resizable( "instance" ),
+                       o = that.options,
+                       el = that.element,
+                       oc = o.containment,
+                       ce = ( oc instanceof $ ) ?
+                               oc.get( 0 ) :
+                               ( /parent/.test( oc ) ) ? el.parent().get( 0 ) : oc;
+
+               if ( !ce ) {
+                       return;
+               }
+
+               that.containerElement = $( ce );
+
+               if ( /document/.test( oc ) || oc === document ) {
+                       that.containerOffset = {
+                               left: 0,
+                               top: 0
+                       };
+                       that.containerPosition = {
+                               left: 0,
+                               top: 0
+                       };
+
+                       that.parentData = {
+                               element: $( document ),
+                               left: 0,
+                               top: 0,
+                               width: $( document ).width(),
+                               height: $( document ).height() || document.body.parentNode.scrollHeight
+                       };
+               } else {
+                       element = $( ce );
+                       p = [];
+                       $( [ "Top", "Right", "Left", "Bottom" ] ).each( function( i, name ) {
+                               p[ i ] = that._num( element.css( "padding" + name ) );
+                       } );
+
+                       that.containerOffset = element.offset();
+                       that.containerPosition = element.position();
+                       that.containerSize = {
+                               height: ( element.innerHeight() - p[ 3 ] ),
+                               width: ( element.innerWidth() - p[ 1 ] )
+                       };
+
+                       co = that.containerOffset;
+                       ch = that.containerSize.height;
+                       cw = that.containerSize.width;
+                       width = ( that._hasScroll ( ce, "left" ) ? ce.scrollWidth : cw );
+                       height = ( that._hasScroll ( ce ) ? ce.scrollHeight : ch ) ;
+
+                       that.parentData = {
+                               element: ce,
+                               left: co.left,
+                               top: co.top,
+                               width: width,
+                               height: height
+                       };
+               }
+       },
+
+       resize: function( event ) {
+               var woset, hoset, isParent, isOffsetRelative,
+                       that = $( this ).resizable( "instance" ),
+                       o = that.options,
+                       co = that.containerOffset,
+                       cp = that.position,
+                       pRatio = that._aspectRatio || event.shiftKey,
+                       cop = {
+                               top: 0,
+                               left: 0
+                       },
+                       ce = that.containerElement,
+                       continueResize = true;
+
+               if ( ce[ 0 ] !== document && ( /static/ ).test( ce.css( "position" ) ) ) {
+                       cop = co;
+               }
+
+               if ( cp.left < ( that._helper ? co.left : 0 ) ) {
+                       that.size.width = that.size.width +
+                               ( that._helper ?
+                                       ( that.position.left - co.left ) :
+                                       ( that.position.left - cop.left ) );
+
+                       if ( pRatio ) {
+                               that.size.height = that.size.width / that.aspectRatio;
+                               continueResize = false;
+                       }
+                       that.position.left = o.helper ? co.left : 0;
+               }
+
+               if ( cp.top < ( that._helper ? co.top : 0 ) ) {
+                       that.size.height = that.size.height +
+                               ( that._helper ?
+                                       ( that.position.top - co.top ) :
+                                       that.position.top );
+
+                       if ( pRatio ) {
+                               that.size.width = that.size.height * that.aspectRatio;
+                               continueResize = false;
+                       }
+                       that.position.top = that._helper ? co.top : 0;
+               }
+
+               isParent = that.containerElement.get( 0 ) === that.element.parent().get( 0 );
+               isOffsetRelative = /relative|absolute/.test( that.containerElement.css( "position" ) );
+
+               if ( isParent && isOffsetRelative ) {
+                       that.offset.left = that.parentData.left + that.position.left;
+                       that.offset.top = that.parentData.top + that.position.top;
+               } else {
+                       that.offset.left = that.element.offset().left;
+                       that.offset.top = that.element.offset().top;
+               }
+
+               woset = Math.abs( that.sizeDiff.width +
+                       ( that._helper ?
+                               that.offset.left - cop.left :
+                               ( that.offset.left - co.left ) ) );
+
+               hoset = Math.abs( that.sizeDiff.height +
+                       ( that._helper ?
+                               that.offset.top - cop.top :
+                               ( that.offset.top - co.top ) ) );
+
+               if ( woset + that.size.width >= that.parentData.width ) {
+                       that.size.width = that.parentData.width - woset;
+                       if ( pRatio ) {
+                               that.size.height = that.size.width / that.aspectRatio;
+                               continueResize = false;
+                       }
+               }
+
+               if ( hoset + that.size.height >= that.parentData.height ) {
+                       that.size.height = that.parentData.height - hoset;
+                       if ( pRatio ) {
+                               that.size.width = that.size.height * that.aspectRatio;
+                               continueResize = false;
+                       }
+               }
+
+               if ( !continueResize ) {
+                       that.position.left = that.prevPosition.left;
+                       that.position.top = that.prevPosition.top;
+                       that.size.width = that.prevSize.width;
+                       that.size.height = that.prevSize.height;
+               }
+       },
+
+       stop: function() {
+               var that = $( this ).resizable( "instance" ),
+                       o = that.options,
+                       co = that.containerOffset,
+                       cop = that.containerPosition,
+                       ce = that.containerElement,
+                       helper = $( that.helper ),
+                       ho = helper.offset(),
+                       w = helper.outerWidth() - that.sizeDiff.width,
+                       h = helper.outerHeight() - that.sizeDiff.height;
+
+               if ( that._helper && !o.animate && ( /relative/ ).test( ce.css( "position" ) ) ) {
+                       $( this ).css( {
+                               left: ho.left - cop.left - co.left,
+                               width: w,
+                               height: h
+                       } );
+               }
+
+               if ( that._helper && !o.animate && ( /static/ ).test( ce.css( "position" ) ) ) {
+                       $( this ).css( {
+                               left: ho.left - cop.left - co.left,
+                               width: w,
+                               height: h
+                       } );
+               }
+       }
+} );
+
+$.ui.plugin.add( "resizable", "alsoResize", {
+
+       start: function() {
+               var that = $( this ).resizable( "instance" ),
+                       o = that.options;
+
+               $( o.alsoResize ).each( function() {
+                       var el = $( this );
+                       el.data( "ui-resizable-alsoresize", {
+                               width: parseFloat( el.width() ), height: parseFloat( el.height() ),
+                               left: parseFloat( el.css( "left" ) ), top: parseFloat( el.css( "top" ) )
+                       } );
+               } );
+       },
+
+       resize: function( event, ui ) {
+               var that = $( this ).resizable( "instance" ),
+                       o = that.options,
+                       os = that.originalSize,
+                       op = that.originalPosition,
+                       delta = {
+                               height: ( that.size.height - os.height ) || 0,
+                               width: ( that.size.width - os.width ) || 0,
+                               top: ( that.position.top - op.top ) || 0,
+                               left: ( that.position.left - op.left ) || 0
+                       };
+
+                       $( o.alsoResize ).each( function() {
+                               var el = $( this ), start = $( this ).data( "ui-resizable-alsoresize" ), style = {},
+                                       css = el.parents( ui.originalElement[ 0 ] ).length ?
+                                                       [ "width", "height" ] :
+                                                       [ "width", "height", "top", "left" ];
+
+                               $.each( css, function( i, prop ) {
+                                       var sum = ( start[ prop ] || 0 ) + ( delta[ prop ] || 0 );
+                                       if ( sum && sum >= 0 ) {
+                                               style[ prop ] = sum || null;
+                                       }
+                               } );
+
+                               el.css( style );
+                       } );
+       },
+
+       stop: function() {
+               $( this ).removeData( "ui-resizable-alsoresize" );
+       }
+} );
+
+$.ui.plugin.add( "resizable", "ghost", {
+
+       start: function() {
+
+               var that = $( this ).resizable( "instance" ), cs = that.size;
+
+               that.ghost = that.originalElement.clone();
+               that.ghost.css( {
+                       opacity: 0.25,
+                       display: "block",
+                       position: "relative",
+                       height: cs.height,
+                       width: cs.width,
+                       margin: 0,
+                       left: 0,
+                       top: 0
+               } );
+
+               that._addClass( that.ghost, "ui-resizable-ghost" );
+
+               // DEPRECATED
+               // TODO: remove after 1.12
+               if ( $.uiBackCompat !== false && typeof that.options.ghost === "string" ) {
+
+                       // Ghost option
+                       that.ghost.addClass( this.options.ghost );
+               }
+
+               that.ghost.appendTo( that.helper );
+
+       },
+
+       resize: function() {
+               var that = $( this ).resizable( "instance" );
+               if ( that.ghost ) {
+                       that.ghost.css( {
+                               position: "relative",
+                               height: that.size.height,
+                               width: that.size.width
+                       } );
+               }
+       },
+
+       stop: function() {
+               var that = $( this ).resizable( "instance" );
+               if ( that.ghost && that.helper ) {
+                       that.helper.get( 0 ).removeChild( that.ghost.get( 0 ) );
+               }
+       }
+
+} );
+
+$.ui.plugin.add( "resizable", "grid", {
+
+       resize: function() {
+               var outerDimensions,
+                       that = $( this ).resizable( "instance" ),
+                       o = that.options,
+                       cs = that.size,
+                       os = that.originalSize,
+                       op = that.originalPosition,
+                       a = that.axis,
+                       grid = typeof o.grid === "number" ? [ o.grid, o.grid ] : o.grid,
+                       gridX = ( grid[ 0 ] || 1 ),
+                       gridY = ( grid[ 1 ] || 1 ),
+                       ox = Math.round( ( cs.width - os.width ) / gridX ) * gridX,
+                       oy = Math.round( ( cs.height - os.height ) / gridY ) * gridY,
+                       newWidth = os.width + ox,
+                       newHeight = os.height + oy,
+                       isMaxWidth = o.maxWidth && ( o.maxWidth < newWidth ),
+                       isMaxHeight = o.maxHeight && ( o.maxHeight < newHeight ),
+                       isMinWidth = o.minWidth && ( o.minWidth > newWidth ),
+                       isMinHeight = o.minHeight && ( o.minHeight > newHeight );
+
+               o.grid = grid;
+
+               if ( isMinWidth ) {
+                       newWidth += gridX;
+               }
+               if ( isMinHeight ) {
+                       newHeight += gridY;
+               }
+               if ( isMaxWidth ) {
+                       newWidth -= gridX;
+               }
+               if ( isMaxHeight ) {
+                       newHeight -= gridY;
+               }
+
+               if ( /^(se|s|e)$/.test( a ) ) {
+                       that.size.width = newWidth;
+                       that.size.height = newHeight;
+               } else if ( /^(ne)$/.test( a ) ) {
+                       that.size.width = newWidth;
+                       that.size.height = newHeight;
+                       that.position.top = op.top - oy;
+               } else if ( /^(sw)$/.test( a ) ) {
+                       that.size.width = newWidth;
+                       that.size.height = newHeight;
+                       that.position.left = op.left - ox;
+               } else {
+                       if ( newHeight - gridY <= 0 || newWidth - gridX <= 0 ) {
+                               outerDimensions = that._getPaddingPlusBorderDimensions( this );
+                       }
+
+                       if ( newHeight - gridY > 0 ) {
+                               that.size.height = newHeight;
+                               that.position.top = op.top - oy;
+                       } else {
+                               newHeight = gridY - outerDimensions.height;
+                               that.size.height = newHeight;
+                               that.position.top = op.top + os.height - newHeight;
+                       }
+                       if ( newWidth - gridX > 0 ) {
+                               that.size.width = newWidth;
+                               that.position.left = op.left - ox;
+                       } else {
+                               newWidth = gridX - outerDimensions.width;
+                               that.size.width = newWidth;
+                               that.position.left = op.left + os.width - newWidth;
+                       }
+               }
+       }
+
+} );
+
+var widgetsResizable = $.ui.resizable;
+
+
+/*!
+ * jQuery UI Selectable 1.12.1
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ */
+
+//>>label: Selectable
+//>>group: Interactions
+//>>description: Allows groups of elements to be selected with the mouse.
+//>>docs: http://api.jqueryui.com/selectable/
+//>>demos: http://jqueryui.com/selectable/
+//>>css.structure: ../../themes/base/selectable.css
+
+
+
+var widgetsSelectable = $.widget( "ui.selectable", $.ui.mouse, {
+       version: "1.12.1",
+       options: {
+               appendTo: "body",
+               autoRefresh: true,
+               distance: 0,
+               filter: "*",
+               tolerance: "touch",
+
+               // Callbacks
+               selected: null,
+               selecting: null,
+               start: null,
+               stop: null,
+               unselected: null,
+               unselecting: null
+       },
+       _create: function() {
+               var that = this;
+
+               this._addClass( "ui-selectable" );
+
+               this.dragged = false;
+
+               // Cache selectee children based on filter
+               this.refresh = function() {
+                       that.elementPos = $( that.element[ 0 ] ).offset();
+                       that.selectees = $( that.options.filter, that.element[ 0 ] );
+                       that._addClass( that.selectees, "ui-selectee" );
+                       that.selectees.each( function() {
+                               var $this = $( this ),
+                                       selecteeOffset = $this.offset(),
+                                       pos = {
+                                               left: selecteeOffset.left - that.elementPos.left,
+                                               top: selecteeOffset.top - that.elementPos.top
+                                       };
+                               $.data( this, "selectable-item", {
+                                       element: this,
+                                       $element: $this,
+                                       left: pos.left,
+                                       top: pos.top,
+                                       right: pos.left + $this.outerWidth(),
+                                       bottom: pos.top + $this.outerHeight(),
+                                       startselected: false,
+                                       selected: $this.hasClass( "ui-selected" ),
+                                       selecting: $this.hasClass( "ui-selecting" ),
+                                       unselecting: $this.hasClass( "ui-unselecting" )
+                               } );
+                       } );
+               };
+               this.refresh();
+
+               this._mouseInit();
+
+               this.helper = $( "<div>" );
+               this._addClass( this.helper, "ui-selectable-helper" );
+       },
+
+       _destroy: function() {
+               this.selectees.removeData( "selectable-item" );
+               this._mouseDestroy();
+       },
+
+       _mouseStart: function( event ) {
+               var that = this,
+                       options = this.options;
+
+               this.opos = [ event.pageX, event.pageY ];
+               this.elementPos = $( this.element[ 0 ] ).offset();
+
+               if ( this.options.disabled ) {
+                       return;
+               }
+
+               this.selectees = $( options.filter, this.element[ 0 ] );
+
+               this._trigger( "start", event );
+
+               $( options.appendTo ).append( this.helper );
+
+               // position helper (lasso)
+               this.helper.css( {
+                       "left": event.pageX,
+                       "top": event.pageY,
+                       "width": 0,
+                       "height": 0
+               } );
+
+               if ( options.autoRefresh ) {
+                       this.refresh();
+               }
+
+               this.selectees.filter( ".ui-selected" ).each( function() {
+                       var selectee = $.data( this, "selectable-item" );
+                       selectee.startselected = true;
+                       if ( !event.metaKey && !event.ctrlKey ) {
+                               that._removeClass( selectee.$element, "ui-selected" );
+                               selectee.selected = false;
+                               that._addClass( selectee.$element, "ui-unselecting" );
+                               selectee.unselecting = true;
+
+                               // selectable UNSELECTING callback
+                               that._trigger( "unselecting", event, {
+                                       unselecting: selectee.element
+                               } );
+                       }
+               } );
+
+               $( event.target ).parents().addBack().each( function() {
+                       var doSelect,
+                               selectee = $.data( this, "selectable-item" );
+                       if ( selectee ) {
+                               doSelect = ( !event.metaKey && !event.ctrlKey ) ||
+                                       !selectee.$element.hasClass( "ui-selected" );
+                               that._removeClass( selectee.$element, doSelect ? "ui-unselecting" : "ui-selected" )
+                                       ._addClass( selectee.$element, doSelect ? "ui-selecting" : "ui-unselecting" );
+                               selectee.unselecting = !doSelect;
+                               selectee.selecting = doSelect;
+                               selectee.selected = doSelect;
+
+                               // selectable (UN)SELECTING callback
+                               if ( doSelect ) {
+                                       that._trigger( "selecting", event, {
+                                               selecting: selectee.element
+                                       } );
+                               } else {
+                                       that._trigger( "unselecting", event, {
+                                               unselecting: selectee.element
+                                       } );
+                               }
+                               return false;
+                       }
+               } );
+
+       },
+
+       _mouseDrag: function( event ) {
+
+               this.dragged = true;
+
+               if ( this.options.disabled ) {
+                       return;
+               }
+
+               var tmp,
+                       that = this,
+                       options = this.options,
+                       x1 = this.opos[ 0 ],
+                       y1 = this.opos[ 1 ],
+                       x2 = event.pageX,
+                       y2 = event.pageY;
+
+               if ( x1 > x2 ) { tmp = x2; x2 = x1; x1 = tmp; }
+               if ( y1 > y2 ) { tmp = y2; y2 = y1; y1 = tmp; }
+               this.helper.css( { left: x1, top: y1, width: x2 - x1, height: y2 - y1 } );
+
+               this.selectees.each( function() {
+                       var selectee = $.data( this, "selectable-item" ),
+                               hit = false,
+                               offset = {};
+
+                       //prevent helper from being selected if appendTo: selectable
+                       if ( !selectee || selectee.element === that.element[ 0 ] ) {
+                               return;
+                       }
+
+                       offset.left   = selectee.left   + that.elementPos.left;
+                       offset.right  = selectee.right  + that.elementPos.left;
+                       offset.top    = selectee.top    + that.elementPos.top;
+                       offset.bottom = selectee.bottom + that.elementPos.top;
+
+                       if ( options.tolerance === "touch" ) {
+                               hit = ( !( offset.left > x2 || offset.right < x1 || offset.top > y2 ||
+                    offset.bottom < y1 ) );
+                       } else if ( options.tolerance === "fit" ) {
+                               hit = ( offset.left > x1 && offset.right < x2 && offset.top > y1 &&
+                    offset.bottom < y2 );
+                       }
+
+                       if ( hit ) {
+
+                               // SELECT
+                               if ( selectee.selected ) {
+                                       that._removeClass( selectee.$element, "ui-selected" );
+                                       selectee.selected = false;
+                               }
+                               if ( selectee.unselecting ) {
+                                       that._removeClass( selectee.$element, "ui-unselecting" );
+                                       selectee.unselecting = false;
+                               }
+                               if ( !selectee.selecting ) {
+                                       that._addClass( selectee.$element, "ui-selecting" );
+                                       selectee.selecting = true;
+
+                                       // selectable SELECTING callback
+                                       that._trigger( "selecting", event, {
+                                               selecting: selectee.element
+                                       } );
+                               }
+                       } else {
+
+                               // UNSELECT
+                               if ( selectee.selecting ) {
+                                       if ( ( event.metaKey || event.ctrlKey ) && selectee.startselected ) {
+                                               that._removeClass( selectee.$element, "ui-selecting" );
+                                               selectee.selecting = false;
+                                               that._addClass( selectee.$element, "ui-selected" );
+                                               selectee.selected = true;
+                                       } else {
+                                               that._removeClass( selectee.$element, "ui-selecting" );
+                                               selectee.selecting = false;
+                                               if ( selectee.startselected ) {
+                                                       that._addClass( selectee.$element, "ui-unselecting" );
+                                                       selectee.unselecting = true;
+                                               }
+
+                                               // selectable UNSELECTING callback
+                                               that._trigger( "unselecting", event, {
+                                                       unselecting: selectee.element
+                                               } );
+                                       }
+                               }
+                               if ( selectee.selected ) {
+                                       if ( !event.metaKey && !event.ctrlKey && !selectee.startselected ) {
+                                               that._removeClass( selectee.$element, "ui-selected" );
+                                               selectee.selected = false;
+
+                                               that._addClass( selectee.$element, "ui-unselecting" );
+                                               selectee.unselecting = true;
+
+                                               // selectable UNSELECTING callback
+                                               that._trigger( "unselecting", event, {
+                                                       unselecting: selectee.element
+                                               } );
+                                       }
+                               }
+                       }
+               } );
+
+               return false;
+       },
+
+       _mouseStop: function( event ) {
+               var that = this;
+
+               this.dragged = false;
+
+               $( ".ui-unselecting", this.element[ 0 ] ).each( function() {
+                       var selectee = $.data( this, "selectable-item" );
+                       that._removeClass( selectee.$element, "ui-unselecting" );
+                       selectee.unselecting = false;
+                       selectee.startselected = false;
+                       that._trigger( "unselected", event, {
+                               unselected: selectee.element
+                       } );
+               } );
+               $( ".ui-selecting", this.element[ 0 ] ).each( function() {
+                       var selectee = $.data( this, "selectable-item" );
+                       that._removeClass( selectee.$element, "ui-selecting" )
+                               ._addClass( selectee.$element, "ui-selected" );
+                       selectee.selecting = false;
+                       selectee.selected = true;
+                       selectee.startselected = true;
+                       that._trigger( "selected", event, {
+                               selected: selectee.element
+                       } );
+               } );
+               this._trigger( "stop", event );
+
+               this.helper.remove();
+
+               return false;
+       }
+
+} );
+
+
+/*!
+ * jQuery UI Sortable 1.12.1
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ */
+
+//>>label: Sortable
+//>>group: Interactions
+//>>description: Enables items in a list to be sorted using the mouse.
+//>>docs: http://api.jqueryui.com/sortable/
+//>>demos: http://jqueryui.com/sortable/
+//>>css.structure: ../../themes/base/sortable.css
+
+
+
+var widgetsSortable = $.widget( "ui.sortable", $.ui.mouse, {
+       version: "1.12.1",
+       widgetEventPrefix: "sort",
+       ready: false,
+       options: {
+               appendTo: "parent",
+               axis: false,
+               connectWith: false,
+               containment: false,
+               cursor: "auto",
+               cursorAt: false,
+               dropOnEmpty: true,
+               forcePlaceholderSize: false,
+               forceHelperSize: false,
+               grid: false,
+               handle: false,
+               helper: "original",
+               items: "> *",
+               opacity: false,
+               placeholder: false,
+               revert: false,
+               scroll: true,
+               scrollSensitivity: 20,
+               scrollSpeed: 20,
+               scope: "default",
+               tolerance: "intersect",
+               zIndex: 1000,
+
+               // Callbacks
+               activate: null,
+               beforeStop: null,
+               change: null,
+               deactivate: null,
+               out: null,
+               over: null,
+               receive: null,
+               remove: null,
+               sort: null,
+               start: null,
+               stop: null,
+               update: null
+       },
+
+       _isOverAxis: function( x, reference, size ) {
+               return ( x >= reference ) && ( x < ( reference + size ) );
+       },
+
+       _isFloating: function( item ) {
+               return ( /left|right/ ).test( item.css( "float" ) ) ||
+                       ( /inline|table-cell/ ).test( item.css( "display" ) );
+       },
+
+       _create: function() {
+               this.containerCache = {};
+               this._addClass( "ui-sortable" );
+
+               //Get the items
+               this.refresh();
+
+               //Let's determine the parent's offset
+               this.offset = this.element.offset();
+
+               //Initialize mouse events for interaction
+               this._mouseInit();
+
+               this._setHandleClassName();
+
+               //We're ready to go
+               this.ready = true;
+
+       },
+
+       _setOption: function( key, value ) {
+               this._super( key, value );
+
+               if ( key === "handle" ) {
+                       this._setHandleClassName();
+               }
+       },
+
+       _setHandleClassName: function() {
+               var that = this;
+               this._removeClass( this.element.find( ".ui-sortable-handle" ), "ui-sortable-handle" );
+               $.each( this.items, function() {
+                       that._addClass(
+                               this.instance.options.handle ?
+                                       this.item.find( this.instance.options.handle ) :
+                                       this.item,
+                               "ui-sortable-handle"
+                       );
+               } );
+       },
+
+       _destroy: function() {
+               this._mouseDestroy();
+
+               for ( var i = this.items.length - 1; i >= 0; i-- ) {
+                       this.items[ i ].item.removeData( this.widgetName + "-item" );
+               }
+
+               return this;
+       },
+
+       _mouseCapture: function( event, overrideHandle ) {
+               var currentItem = null,
+                       validHandle = false,
+                       that = this;
+
+               if ( this.reverting ) {
+                       return false;
+               }
+
+               if ( this.options.disabled || this.options.type === "static" ) {
+                       return false;
+               }
+
+               //We have to refresh the items data once first
+               this._refreshItems( event );
+
+               //Find out if the clicked node (or one of its parents) is a actual item in this.items
+               $( event.target ).parents().each( function() {
+                       if ( $.data( this, that.widgetName + "-item" ) === that ) {
+                               currentItem = $( this );
+                               return false;
+                       }
+               } );
+               if ( $.data( event.target, that.widgetName + "-item" ) === that ) {
+                       currentItem = $( event.target );
+               }
+
+               if ( !currentItem ) {
+                       return false;
+               }
+               if ( this.options.handle && !overrideHandle ) {
+                       $( this.options.handle, currentItem ).find( "*" ).addBack().each( function() {
+                               if ( this === event.target ) {
+                                       validHandle = true;
+                               }
+                       } );
+                       if ( !validHandle ) {
+                               return false;
+                       }
+               }
+
+               this.currentItem = currentItem;
+               this._removeCurrentsFromItems();
+               return true;
+
+       },
+
+       _mouseStart: function( event, overrideHandle, noActivation ) {
+
+               var i, body,
+                       o = this.options;
+
+               this.currentContainer = this;
+
+               //We only need to call refreshPositions, because the refreshItems call has been moved to
+               // mouseCapture
+               this.refreshPositions();
+
+               //Create and append the visible helper
+               this.helper = this._createHelper( event );
+
+               //Cache the helper size
+               this._cacheHelperProportions();
+
+               /*
+                * - Position generation -
+                * This block generates everything position related - it's the core of draggables.
+                */
+
+               //Cache the margins of the original element
+               this._cacheMargins();
+
+               //Get the next scrolling parent
+               this.scrollParent = this.helper.scrollParent();
+
+               //The element's absolute position on the page minus margins
+               this.offset = this.currentItem.offset();
+               this.offset = {
+                       top: this.offset.top - this.margins.top,
+                       left: this.offset.left - this.margins.left
+               };
+
+               $.extend( this.offset, {
+                       click: { //Where the click happened, relative to the element
+                               left: event.pageX - this.offset.left,
+                               top: event.pageY - this.offset.top
+                       },
+                       parent: this._getParentOffset(),
+
+                       // This is a relative to absolute position minus the actual position calculation -
+                       // only used for relative positioned helper
+                       relative: this._getRelativeOffset()
+               } );
+
+               // Only after we got the offset, we can change the helper's position to absolute
+               // TODO: Still need to figure out a way to make relative sorting possible
+               this.helper.css( "position", "absolute" );
+               this.cssPosition = this.helper.css( "position" );
+
+               //Generate the original position
+               this.originalPosition = this._generatePosition( event );
+               this.originalPageX = event.pageX;
+               this.originalPageY = event.pageY;
+
+               //Adjust the mouse offset relative to the helper if "cursorAt" is supplied
+               ( o.cursorAt && this._adjustOffsetFromHelper( o.cursorAt ) );
+
+               //Cache the former DOM position
+               this.domPosition = {
+                       prev: this.currentItem.prev()[ 0 ],
+                       parent: this.currentItem.parent()[ 0 ]
+               };
+
+               // If the helper is not the original, hide the original so it's not playing any role during
+               // the drag, won't cause anything bad this way
+               if ( this.helper[ 0 ] !== this.currentItem[ 0 ] ) {
+                       this.currentItem.hide();
+               }
+
+               //Create the placeholder
+               this._createPlaceholder();
+
+               //Set a containment if given in the options
+               if ( o.containment ) {
+                       this._setContainment();
+               }
+
+               if ( o.cursor && o.cursor !== "auto" ) { // cursor option
+                       body = this.document.find( "body" );
+
+                       // Support: IE
+                       this.storedCursor = body.css( "cursor" );
+                       body.css( "cursor", o.cursor );
+
+                       this.storedStylesheet =
+                               $( "<style>*{ cursor: " + o.cursor + " !important; }</style>" ).appendTo( body );
+               }
+
+               if ( o.opacity ) { // opacity option
+                       if ( this.helper.css( "opacity" ) ) {
+                               this._storedOpacity = this.helper.css( "opacity" );
+                       }
+                       this.helper.css( "opacity", o.opacity );
+               }
+
+               if ( o.zIndex ) { // zIndex option
+                       if ( this.helper.css( "zIndex" ) ) {
+                               this._storedZIndex = this.helper.css( "zIndex" );
+                       }
+                       this.helper.css( "zIndex", o.zIndex );
+               }
+
+               //Prepare scrolling
+               if ( this.scrollParent[ 0 ] !== this.document[ 0 ] &&
+                               this.scrollParent[ 0 ].tagName !== "HTML" ) {
+                       this.overflowOffset = this.scrollParent.offset();
+               }
+
+               //Call callbacks
+               this._trigger( "start", event, this._uiHash() );
+
+               //Recache the helper size
+               if ( !this._preserveHelperProportions ) {
+                       this._cacheHelperProportions();
+               }
+
+               //Post "activate" events to possible containers
+               if ( !noActivation ) {
+                       for ( i = this.containers.length - 1; i >= 0; i-- ) {
+                               this.containers[ i ]._trigger( "activate", event, this._uiHash( this ) );
+                       }
+               }
+
+               //Prepare possible droppables
+               if ( $.ui.ddmanager ) {
+                       $.ui.ddmanager.current = this;
+               }
+
+               if ( $.ui.ddmanager && !o.dropBehaviour ) {
+                       $.ui.ddmanager.prepareOffsets( this, event );
+               }
+
+               this.dragging = true;
+
+               this._addClass( this.helper, "ui-sortable-helper" );
+
+               // Execute the drag once - this causes the helper not to be visiblebefore getting its
+               // correct position
+               this._mouseDrag( event );
+               return true;
+
+       },
+
+       _mouseDrag: function( event ) {
+               var i, item, itemElement, intersection,
+                       o = this.options,
+                       scrolled = false;
+
+               //Compute the helpers position
+               this.position = this._generatePosition( event );
+               this.positionAbs = this._convertPositionTo( "absolute" );
+
+               if ( !this.lastPositionAbs ) {
+                       this.lastPositionAbs = this.positionAbs;
+               }
+
+               //Do scrolling
+               if ( this.options.scroll ) {
+                       if ( this.scrollParent[ 0 ] !== this.document[ 0 ] &&
+                                       this.scrollParent[ 0 ].tagName !== "HTML" ) {
+
+                               if ( ( this.overflowOffset.top + this.scrollParent[ 0 ].offsetHeight ) -
+                                               event.pageY < o.scrollSensitivity ) {
+                                       this.scrollParent[ 0 ].scrollTop =
+                                               scrolled = this.scrollParent[ 0 ].scrollTop + o.scrollSpeed;
+                               } else if ( event.pageY - this.overflowOffset.top < o.scrollSensitivity ) {
+                                       this.scrollParent[ 0 ].scrollTop =
+                                               scrolled = this.scrollParent[ 0 ].scrollTop - o.scrollSpeed;
+                               }
+
+                               if ( ( this.overflowOffset.left + this.scrollParent[ 0 ].offsetWidth ) -
+                                               event.pageX < o.scrollSensitivity ) {
+                                       this.scrollParent[ 0 ].scrollLeft = scrolled =
+                                               this.scrollParent[ 0 ].scrollLeft + o.scrollSpeed;
+                               } else if ( event.pageX - this.overflowOffset.left < o.scrollSensitivity ) {
+                                       this.scrollParent[ 0 ].scrollLeft = scrolled =
+                                               this.scrollParent[ 0 ].scrollLeft - o.scrollSpeed;
+                               }
+
+                       } else {
+
+                               if ( event.pageY - this.document.scrollTop() < o.scrollSensitivity ) {
+                                       scrolled = this.document.scrollTop( this.document.scrollTop() - o.scrollSpeed );
+                               } else if ( this.window.height() - ( event.pageY - this.document.scrollTop() ) <
+                                               o.scrollSensitivity ) {
+                                       scrolled = this.document.scrollTop( this.document.scrollTop() + o.scrollSpeed );
+                               }
+
+                               if ( event.pageX - this.document.scrollLeft() < o.scrollSensitivity ) {
+                                       scrolled = this.document.scrollLeft(
+                                               this.document.scrollLeft() - o.scrollSpeed
+                                       );
+                               } else if ( this.window.width() - ( event.pageX - this.document.scrollLeft() ) <
+                                               o.scrollSensitivity ) {
+                                       scrolled = this.document.scrollLeft(
+                                               this.document.scrollLeft() + o.scrollSpeed
+                                       );
+                               }
+
+                       }
+
+                       if ( scrolled !== false && $.ui.ddmanager && !o.dropBehaviour ) {
+                               $.ui.ddmanager.prepareOffsets( this, event );
+                       }
+               }
+
+               //Regenerate the absolute position used for position checks
+               this.positionAbs = this._convertPositionTo( "absolute" );
+
+               //Set the helper position
+               if ( !this.options.axis || this.options.axis !== "y" ) {
+                       this.helper[ 0 ].style.left = this.position.left + "px";
+               }
+               if ( !this.options.axis || this.options.axis !== "x" ) {
+                       this.helper[ 0 ].style.top = this.position.top + "px";
+               }
+
+               //Rearrange
+               for ( i = this.items.length - 1; i >= 0; i-- ) {
+
+                       //Cache variables and intersection, continue if no intersection
+                       item = this.items[ i ];
+                       itemElement = item.item[ 0 ];
+                       intersection = this._intersectsWithPointer( item );
+                       if ( !intersection ) {
+                               continue;
+                       }
+
+                       // Only put the placeholder inside the current Container, skip all
+                       // items from other containers. This works because when moving
+                       // an item from one container to another the
+                       // currentContainer is switched before the placeholder is moved.
+                       //
+                       // Without this, moving items in "sub-sortables" can cause
+                       // the placeholder to jitter between the outer and inner container.
+                       if ( item.instance !== this.currentContainer ) {
+                               continue;
+                       }
+
+                       // Cannot intersect with itself
+                       // no useless actions that have been done before
+                       // no action if the item moved is the parent of the item checked
+                       if ( itemElement !== this.currentItem[ 0 ] &&
+                               this.placeholder[ intersection === 1 ? "next" : "prev" ]()[ 0 ] !== itemElement &&
+                               !$.contains( this.placeholder[ 0 ], itemElement ) &&
+                               ( this.options.type === "semi-dynamic" ?
+                                       !$.contains( this.element[ 0 ], itemElement ) :
+                                       true
+                               )
+                       ) {
+
+                               this.direction = intersection === 1 ? "down" : "up";
+
+                               if ( this.options.tolerance === "pointer" || this._intersectsWithSides( item ) ) {
+                                       this._rearrange( event, item );
+                               } else {
+                                       break;
+                               }
+
+                               this._trigger( "change", event, this._uiHash() );
+                               break;
+                       }
+               }
+
+               //Post events to containers
+               this._contactContainers( event );
+
+               //Interconnect with droppables
+               if ( $.ui.ddmanager ) {
+                       $.ui.ddmanager.drag( this, event );
+               }
+
+               //Call callbacks
+               this._trigger( "sort", event, this._uiHash() );
+
+               this.lastPositionAbs = this.positionAbs;
+               return false;
+
+       },
+
+       _mouseStop: function( event, noPropagation ) {
+
+               if ( !event ) {
+                       return;
+               }
+
+               //If we are using droppables, inform the manager about the drop
+               if ( $.ui.ddmanager && !this.options.dropBehaviour ) {
+                       $.ui.ddmanager.drop( this, event );
+               }
+
+               if ( this.options.revert ) {
+                       var that = this,
+                               cur = this.placeholder.offset(),
+                               axis = this.options.axis,
+                               animation = {};
+
+                       if ( !axis || axis === "x" ) {
+                               animation.left = cur.left - this.offset.parent.left - this.margins.left +
+                                       ( this.offsetParent[ 0 ] === this.document[ 0 ].body ?
+                                               0 :
+                                               this.offsetParent[ 0 ].scrollLeft
+                                       );
+                       }
+                       if ( !axis || axis === "y" ) {
+                               animation.top = cur.top - this.offset.parent.top - this.margins.top +
+                                       ( this.offsetParent[ 0 ] === this.document[ 0 ].body ?
+                                               0 :
+                                               this.offsetParent[ 0 ].scrollTop
+                                       );
+                       }
+                       this.reverting = true;
+                       $( this.helper ).animate(
+                               animation,
+                               parseInt( this.options.revert, 10 ) || 500,
+                               function() {
+                                       that._clear( event );
+                               }
+                       );
+               } else {
+                       this._clear( event, noPropagation );
+               }
+
+               return false;
+
+       },
+
+       cancel: function() {
+
+               if ( this.dragging ) {
+
+                       this._mouseUp( new $.Event( "mouseup", { target: null } ) );
+
+                       if ( this.options.helper === "original" ) {
+                               this.currentItem.css( this._storedCSS );
+                               this._removeClass( this.currentItem, "ui-sortable-helper" );
+                       } else {
+                               this.currentItem.show();
+                       }
+
+                       //Post deactivating events to containers
+                       for ( var i = this.containers.length - 1; i >= 0; i-- ) {
+                               this.containers[ i ]._trigger( "deactivate", null, this._uiHash( this ) );
+                               if ( this.containers[ i ].containerCache.over ) {
+                                       this.containers[ i ]._trigger( "out", null, this._uiHash( this ) );
+                                       this.containers[ i ].containerCache.over = 0;
+                               }
+                       }
+
+               }
+
+               if ( this.placeholder ) {
+
+                       //$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately,
+                       // it unbinds ALL events from the original node!
+                       if ( this.placeholder[ 0 ].parentNode ) {
+                               this.placeholder[ 0 ].parentNode.removeChild( this.placeholder[ 0 ] );
+                       }
+                       if ( this.options.helper !== "original" && this.helper &&
+                                       this.helper[ 0 ].parentNode ) {
+                               this.helper.remove();
+                       }
+
+                       $.extend( this, {
+                               helper: null,
+                               dragging: false,
+                               reverting: false,
+                               _noFinalSort: null
+                       } );
+
+                       if ( this.domPosition.prev ) {
+                               $( this.domPosition.prev ).after( this.currentItem );
+                       } else {
+                               $( this.domPosition.parent ).prepend( this.currentItem );
+                       }
+               }
+
+               return this;
+
+       },
+
+       serialize: function( o ) {
+
+               var items = this._getItemsAsjQuery( o && o.connected ),
+                       str = [];
+               o = o || {};
+
+               $( items ).each( function() {
+                       var res = ( $( o.item || this ).attr( o.attribute || "id" ) || "" )
+                               .match( o.expression || ( /(.+)[\-=_](.+)/ ) );
+                       if ( res ) {
+                               str.push(
+                                       ( o.key || res[ 1 ] + "[]" ) +
+                                       "=" + ( o.key && o.expression ? res[ 1 ] : res[ 2 ] ) );
+                       }
+               } );
+
+               if ( !str.length && o.key ) {
+                       str.push( o.key + "=" );
+               }
+
+               return str.join( "&" );
+
+       },
+
+       toArray: function( o ) {
+
+               var items = this._getItemsAsjQuery( o && o.connected ),
+                       ret = [];
+
+               o = o || {};
+
+               items.each( function() {
+                       ret.push( $( o.item || this ).attr( o.attribute || "id" ) || "" );
+               } );
+               return ret;
+
+       },
+
+       /* Be careful with the following core functions */
+       _intersectsWith: function( item ) {
+
+               var x1 = this.positionAbs.left,
+                       x2 = x1 + this.helperProportions.width,
+                       y1 = this.positionAbs.top,
+                       y2 = y1 + this.helperProportions.height,
+                       l = item.left,
+                       r = l + item.width,
+                       t = item.top,
+                       b = t + item.height,
+                       dyClick = this.offset.click.top,
+                       dxClick = this.offset.click.left,
+                       isOverElementHeight = ( this.options.axis === "x" ) || ( ( y1 + dyClick ) > t &&
+                               ( y1 + dyClick ) < b ),
+                       isOverElementWidth = ( this.options.axis === "y" ) || ( ( x1 + dxClick ) > l &&
+                               ( x1 + dxClick ) < r ),
+                       isOverElement = isOverElementHeight && isOverElementWidth;
+
+               if ( this.options.tolerance === "pointer" ||
+                       this.options.forcePointerForContainers ||
+                       ( this.options.tolerance !== "pointer" &&
+                               this.helperProportions[ this.floating ? "width" : "height" ] >
+                               item[ this.floating ? "width" : "height" ] )
+               ) {
+                       return isOverElement;
+               } else {
+
+                       return ( l < x1 + ( this.helperProportions.width / 2 ) && // Right Half
+                               x2 - ( this.helperProportions.width / 2 ) < r && // Left Half
+                               t < y1 + ( this.helperProportions.height / 2 ) && // Bottom Half
+                               y2 - ( this.helperProportions.height / 2 ) < b ); // Top Half
+
+               }
+       },
+
+       _intersectsWithPointer: function( item ) {
+               var verticalDirection, horizontalDirection,
+                       isOverElementHeight = ( this.options.axis === "x" ) ||
+                               this._isOverAxis(
+                                       this.positionAbs.top + this.offset.click.top, item.top, item.height ),
+                       isOverElementWidth = ( this.options.axis === "y" ) ||
+                               this._isOverAxis(
+                                       this.positionAbs.left + this.offset.click.left, item.left, item.width ),
+                       isOverElement = isOverElementHeight && isOverElementWidth;
+
+               if ( !isOverElement ) {
+                       return false;
+               }
+
+               verticalDirection = this._getDragVerticalDirection();
+               horizontalDirection = this._getDragHorizontalDirection();
+
+               return this.floating ?
+                       ( ( horizontalDirection === "right" || verticalDirection === "down" ) ? 2 : 1 )
+                       : ( verticalDirection && ( verticalDirection === "down" ? 2 : 1 ) );
+
+       },
+
+       _intersectsWithSides: function( item ) {
+
+               var isOverBottomHalf = this._isOverAxis( this.positionAbs.top +
+                               this.offset.click.top, item.top + ( item.height / 2 ), item.height ),
+                       isOverRightHalf = this._isOverAxis( this.positionAbs.left +
+                               this.offset.click.left, item.left + ( item.width / 2 ), item.width ),
+                       verticalDirection = this._getDragVerticalDirection(),
+                       horizontalDirection = this._getDragHorizontalDirection();
+
+               if ( this.floating && horizontalDirection ) {
+                       return ( ( horizontalDirection === "right" && isOverRightHalf ) ||
+                               ( horizontalDirection === "left" && !isOverRightHalf ) );
+               } else {
+                       return verticalDirection && ( ( verticalDirection === "down" && isOverBottomHalf ) ||
+                               ( verticalDirection === "up" && !isOverBottomHalf ) );
+               }
+
+       },
+
+       _getDragVerticalDirection: function() {
+               var delta = this.positionAbs.top - this.lastPositionAbs.top;
+               return delta !== 0 && ( delta > 0 ? "down" : "up" );
+       },
+
+       _getDragHorizontalDirection: function() {
+               var delta = this.positionAbs.left - this.lastPositionAbs.left;
+               return delta !== 0 && ( delta > 0 ? "right" : "left" );
+       },
+
+       refresh: function( event ) {
+               this._refreshItems( event );
+               this._setHandleClassName();
+               this.refreshPositions();
+               return this;
+       },
+
+       _connectWith: function() {
+               var options = this.options;
+               return options.connectWith.constructor === String ?
+                       [ options.connectWith ] :
+                       options.connectWith;
+       },
+
+       _getItemsAsjQuery: function( connected ) {
+
+               var i, j, cur, inst,
+                       items = [],
+                       queries = [],
+                       connectWith = this._connectWith();
+
+               if ( connectWith && connected ) {
+                       for ( i = connectWith.length - 1; i >= 0; i-- ) {
+                               cur = $( connectWith[ i ], this.document[ 0 ] );
+                               for ( j = cur.length - 1; j >= 0; j-- ) {
+                                       inst = $.data( cur[ j ], this.widgetFullName );
+                                       if ( inst && inst !== this && !inst.options.disabled ) {
+                                               queries.push( [ $.isFunction( inst.options.items ) ?
+                                                       inst.options.items.call( inst.element ) :
+                                                       $( inst.options.items, inst.element )
+                                                               .not( ".ui-sortable-helper" )
+                                                               .not( ".ui-sortable-placeholder" ), inst ] );
+                                       }
+                               }
+                       }
+               }
+
+               queries.push( [ $.isFunction( this.options.items ) ?
+                       this.options.items
+                               .call( this.element, null, { options: this.options, item: this.currentItem } ) :
+                       $( this.options.items, this.element )
+                               .not( ".ui-sortable-helper" )
+                               .not( ".ui-sortable-placeholder" ), this ] );
+
+               function addItems() {
+                       items.push( this );
+               }
+               for ( i = queries.length - 1; i >= 0; i-- ) {
+                       queries[ i ][ 0 ].each( addItems );
+               }
+
+               return $( items );
+
+       },
+
+       _removeCurrentsFromItems: function() {
+
+               var list = this.currentItem.find( ":data(" + this.widgetName + "-item)" );
+
+               this.items = $.grep( this.items, function( item ) {
+                       for ( var j = 0; j < list.length; j++ ) {
+                               if ( list[ j ] === item.item[ 0 ] ) {
+                                       return false;
+                               }
+                       }
+                       return true;
+               } );
+
+       },
+
+       _refreshItems: function( event ) {
+
+               this.items = [];
+               this.containers = [ this ];
+
+               var i, j, cur, inst, targetData, _queries, item, queriesLength,
+                       items = this.items,
+                       queries = [ [ $.isFunction( this.options.items ) ?
+                               this.options.items.call( this.element[ 0 ], event, { item: this.currentItem } ) :
+                               $( this.options.items, this.element ), this ] ],
+                       connectWith = this._connectWith();
+
+               //Shouldn't be run the first time through due to massive slow-down
+               if ( connectWith && this.ready ) {
+                       for ( i = connectWith.length - 1; i >= 0; i-- ) {
+                               cur = $( connectWith[ i ], this.document[ 0 ] );
+                               for ( j = cur.length - 1; j >= 0; j-- ) {
+                                       inst = $.data( cur[ j ], this.widgetFullName );
+                                       if ( inst && inst !== this && !inst.options.disabled ) {
+                                               queries.push( [ $.isFunction( inst.options.items ) ?
+                                                       inst.options.items
+                                                               .call( inst.element[ 0 ], event, { item: this.currentItem } ) :
+                                                       $( inst.options.items, inst.element ), inst ] );
+                                               this.containers.push( inst );
+                                       }
+                               }
+                       }
+               }
+
+               for ( i = queries.length - 1; i >= 0; i-- ) {
+                       targetData = queries[ i ][ 1 ];
+                       _queries = queries[ i ][ 0 ];
+
+                       for ( j = 0, queriesLength = _queries.length; j < queriesLength; j++ ) {
+                               item = $( _queries[ j ] );
+
+                               // Data for target checking (mouse manager)
+                               item.data( this.widgetName + "-item", targetData );
+
+                               items.push( {
+                                       item: item,
+                                       instance: targetData,
+                                       width: 0, height: 0,
+                                       left: 0, top: 0
+                               } );
+                       }
+               }
+
+       },
+
+       refreshPositions: function( fast ) {
+
+               // Determine whether items are being displayed horizontally
+               this.floating = this.items.length ?
+                       this.options.axis === "x" || this._isFloating( this.items[ 0 ].item ) :
+                       false;
+
+               //This has to be redone because due to the item being moved out/into the offsetParent,
+               // the offsetParent's position will change
+               if ( this.offsetParent && this.helper ) {
+                       this.offset.parent = this._getParentOffset();
+               }
+
+               var i, item, t, p;
+
+               for ( i = this.items.length - 1; i >= 0; i-- ) {
+                       item = this.items[ i ];
+
+                       //We ignore calculating positions of all connected containers when we're not over them
+                       if ( item.instance !== this.currentContainer && this.currentContainer &&
+                                       item.item[ 0 ] !== this.currentItem[ 0 ] ) {
+                               continue;
+                       }
+
+                       t = this.options.toleranceElement ?
+                               $( this.options.toleranceElement, item.item ) :
+                               item.item;
+
+                       if ( !fast ) {
+                               item.width = t.outerWidth();
+                               item.height = t.outerHeight();
+                       }
+
+                       p = t.offset();
+                       item.left = p.left;
+                       item.top = p.top;
+               }
+
+               if ( this.options.custom && this.options.custom.refreshContainers ) {
+                       this.options.custom.refreshContainers.call( this );
+               } else {
+                       for ( i = this.containers.length - 1; i >= 0; i-- ) {
+                               p = this.containers[ i ].element.offset();
+                               this.containers[ i ].containerCache.left = p.left;
+                               this.containers[ i ].containerCache.top = p.top;
+                               this.containers[ i ].containerCache.width =
+                                       this.containers[ i ].element.outerWidth();
+                               this.containers[ i ].containerCache.height =
+                                       this.containers[ i ].element.outerHeight();
+                       }
+               }
+
+               return this;
+       },
+
+       _createPlaceholder: function( that ) {
+               that = that || this;
+               var className,
+                       o = that.options;
+
+               if ( !o.placeholder || o.placeholder.constructor === String ) {
+                       className = o.placeholder;
+                       o.placeholder = {
+                               element: function() {
+
+                                       var nodeName = that.currentItem[ 0 ].nodeName.toLowerCase(),
+                                               element = $( "<" + nodeName + ">", that.document[ 0 ] );
+
+                                               that._addClass( element, "ui-sortable-placeholder",
+                                                               className || that.currentItem[ 0 ].className )
+                                                       ._removeClass( element, "ui-sortable-helper" );
+
+                                       if ( nodeName === "tbody" ) {
+                                               that._createTrPlaceholder(
+                                                       that.currentItem.find( "tr" ).eq( 0 ),
+                                                       $( "<tr>", that.document[ 0 ] ).appendTo( element )
+                                               );
+                                       } else if ( nodeName === "tr" ) {
+                                               that._createTrPlaceholder( that.currentItem, element );
+                                       } else if ( nodeName === "img" ) {
+                                               element.attr( "src", that.currentItem.attr( "src" ) );
+                                       }
+
+                                       if ( !className ) {
+                                               element.css( "visibility", "hidden" );
+                                       }
+
+                                       return element;
+                               },
+                               update: function( container, p ) {
+
+                                       // 1. If a className is set as 'placeholder option, we don't force sizes -
+                                       // the class is responsible for that
+                                       // 2. The option 'forcePlaceholderSize can be enabled to force it even if a
+                                       // class name is specified
+                                       if ( className && !o.forcePlaceholderSize ) {
+                                               return;
+                                       }
+
+                                       //If the element doesn't have a actual height by itself (without styles coming
+                                       // from a stylesheet), it receives the inline height from the dragged item
+                                       if ( !p.height() ) {
+                                               p.height(
+                                                       that.currentItem.innerHeight() -
+                                                       parseInt( that.currentItem.css( "paddingTop" ) || 0, 10 ) -
+                                                       parseInt( that.currentItem.css( "paddingBottom" ) || 0, 10 ) );
+                                       }
+                                       if ( !p.width() ) {
+                                               p.width(
+                                                       that.currentItem.innerWidth() -
+                                                       parseInt( that.currentItem.css( "paddingLeft" ) || 0, 10 ) -
+                                                       parseInt( that.currentItem.css( "paddingRight" ) || 0, 10 ) );
+                                       }
+                               }
+                       };
+               }
+
+               //Create the placeholder
+               that.placeholder = $( o.placeholder.element.call( that.element, that.currentItem ) );
+
+               //Append it after the actual current item
+               that.currentItem.after( that.placeholder );
+
+               //Update the size of the placeholder (TODO: Logic to fuzzy, see line 316/317)
+               o.placeholder.update( that, that.placeholder );
+
+       },
+
+       _createTrPlaceholder: function( sourceTr, targetTr ) {
+               var that = this;
+
+               sourceTr.children().each( function() {
+                       $( "<td>&#160;</td>", that.document[ 0 ] )
+                               .attr( "colspan", $( this ).attr( "colspan" ) || 1 )
+                               .appendTo( targetTr );
+               } );
+       },
+
+       _contactContainers: function( event ) {
+               var i, j, dist, itemWithLeastDistance, posProperty, sizeProperty, cur, nearBottom,
+                       floating, axis,
+                       innermostContainer = null,
+                       innermostIndex = null;
+
+               // Get innermost container that intersects with item
+               for ( i = this.containers.length - 1; i >= 0; i-- ) {
+
+                       // Never consider a container that's located within the item itself
+                       if ( $.contains( this.currentItem[ 0 ], this.containers[ i ].element[ 0 ] ) ) {
+                               continue;
+                       }
+
+                       if ( this._intersectsWith( this.containers[ i ].containerCache ) ) {
+
+                               // If we've already found a container and it's more "inner" than this, then continue
+                               if ( innermostContainer &&
+                                               $.contains(
+                                                       this.containers[ i ].element[ 0 ],
+                                                       innermostContainer.element[ 0 ] ) ) {
+                                       continue;
+                               }
+
+                               innermostContainer = this.containers[ i ];
+                               innermostIndex = i;
+
+                       } else {
+
+                               // container doesn't intersect. trigger "out" event if necessary
+                               if ( this.containers[ i ].containerCache.over ) {
+                                       this.containers[ i ]._trigger( "out", event, this._uiHash( this ) );
+                                       this.containers[ i ].containerCache.over = 0;
+                               }
+                       }
+
+               }
+
+               // If no intersecting containers found, return
+               if ( !innermostContainer ) {
+                       return;
+               }
+
+               // Move the item into the container if it's not there already
+               if ( this.containers.length === 1 ) {
+                       if ( !this.containers[ innermostIndex ].containerCache.over ) {
+                               this.containers[ innermostIndex ]._trigger( "over", event, this._uiHash( this ) );
+                               this.containers[ innermostIndex ].containerCache.over = 1;
+                       }
+               } else {
+
+                       // When entering a new container, we will find the item with the least distance and
+                       // append our item near it
+                       dist = 10000;
+                       itemWithLeastDistance = null;
+                       floating = innermostContainer.floating || this._isFloating( this.currentItem );
+                       posProperty = floating ? "left" : "top";
+                       sizeProperty = floating ? "width" : "height";
+                       axis = floating ? "pageX" : "pageY";
+
+                       for ( j = this.items.length - 1; j >= 0; j-- ) {
+                               if ( !$.contains(
+                                               this.containers[ innermostIndex ].element[ 0 ], this.items[ j ].item[ 0 ] )
+                               ) {
+                                       continue;
+                               }
+                               if ( this.items[ j ].item[ 0 ] === this.currentItem[ 0 ] ) {
+                                       continue;
+                               }
+
+                               cur = this.items[ j ].item.offset()[ posProperty ];
+                               nearBottom = false;
+                               if ( event[ axis ] - cur > this.items[ j ][ sizeProperty ] / 2 ) {
+                                       nearBottom = true;
+                               }
+
+                               if ( Math.abs( event[ axis ] - cur ) < dist ) {
+                                       dist = Math.abs( event[ axis ] - cur );
+                                       itemWithLeastDistance = this.items[ j ];
+                                       this.direction = nearBottom ? "up" : "down";
+                               }
+                       }
+
+                       //Check if dropOnEmpty is enabled
+                       if ( !itemWithLeastDistance && !this.options.dropOnEmpty ) {
+                               return;
+                       }
+
+                       if ( this.currentContainer === this.containers[ innermostIndex ] ) {
+                               if ( !this.currentContainer.containerCache.over ) {
+                                       this.containers[ innermostIndex ]._trigger( "over", event, this._uiHash() );
+                                       this.currentContainer.containerCache.over = 1;
+                               }
+                               return;
+                       }
+
+                       itemWithLeastDistance ?
+                               this._rearrange( event, itemWithLeastDistance, null, true ) :
+                               this._rearrange( event, null, this.containers[ innermostIndex ].element, true );
+                       this._trigger( "change", event, this._uiHash() );
+                       this.containers[ innermostIndex ]._trigger( "change", event, this._uiHash( this ) );
+                       this.currentContainer = this.containers[ innermostIndex ];
+
+                       //Update the placeholder
+                       this.options.placeholder.update( this.currentContainer, this.placeholder );
+
+                       this.containers[ innermostIndex ]._trigger( "over", event, this._uiHash( this ) );
+                       this.containers[ innermostIndex ].containerCache.over = 1;
+               }
+
+       },
+
+       _createHelper: function( event ) {
+
+               var o = this.options,
+                       helper = $.isFunction( o.helper ) ?
+                               $( o.helper.apply( this.element[ 0 ], [ event, this.currentItem ] ) ) :
+                               ( o.helper === "clone" ? this.currentItem.clone() : this.currentItem );
+
+               //Add the helper to the DOM if that didn't happen already
+               if ( !helper.parents( "body" ).length ) {
+                       $( o.appendTo !== "parent" ?
+                               o.appendTo :
+                               this.currentItem[ 0 ].parentNode )[ 0 ].appendChild( helper[ 0 ] );
+               }
+
+               if ( helper[ 0 ] === this.currentItem[ 0 ] ) {
+                       this._storedCSS = {
+                               width: this.currentItem[ 0 ].style.width,
+                               height: this.currentItem[ 0 ].style.height,
+                               position: this.currentItem.css( "position" ),
+                               top: this.currentItem.css( "top" ),
+                               left: this.currentItem.css( "left" )
+                       };
+               }
+
+               if ( !helper[ 0 ].style.width || o.forceHelperSize ) {
+                       helper.width( this.currentItem.width() );
+               }
+               if ( !helper[ 0 ].style.height || o.forceHelperSize ) {
+                       helper.height( this.currentItem.height() );
+               }
+
+               return helper;
+
+       },
+
+       _adjustOffsetFromHelper: function( obj ) {
+               if ( typeof obj === "string" ) {
+                       obj = obj.split( " " );
+               }
+               if ( $.isArray( obj ) ) {
+                       obj = { left: +obj[ 0 ], top: +obj[ 1 ] || 0 };
+               }
+               if ( "left" in obj ) {
+                       this.offset.click.left = obj.left + this.margins.left;
+               }
+               if ( "right" in obj ) {
+                       this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;
+               }
+               if ( "top" in obj ) {
+                       this.offset.click.top = obj.top + this.margins.top;
+               }
+               if ( "bottom" in obj ) {
+                       this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;
+               }
+       },
+
+       _getParentOffset: function() {
+
+               //Get the offsetParent and cache its position
+               this.offsetParent = this.helper.offsetParent();
+               var po = this.offsetParent.offset();
+
+               // This is a special case where we need to modify a offset calculated on start, since the
+               // following happened:
+               // 1. The position of the helper is absolute, so it's position is calculated based on the
+               // next positioned parent
+               // 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't
+               // the document, which means that the scroll is included in the initial calculation of the
+               // offset of the parent, and never recalculated upon drag
+               if ( this.cssPosition === "absolute" && this.scrollParent[ 0 ] !== this.document[ 0 ] &&
+                               $.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) {
+                       po.left += this.scrollParent.scrollLeft();
+                       po.top += this.scrollParent.scrollTop();
+               }
+
+               // This needs to be actually done for all browsers, since pageX/pageY includes this
+               // information with an ugly IE fix
+               if ( this.offsetParent[ 0 ] === this.document[ 0 ].body ||
+                               ( this.offsetParent[ 0 ].tagName &&
+                               this.offsetParent[ 0 ].tagName.toLowerCase() === "html" && $.ui.ie ) ) {
+                       po = { top: 0, left: 0 };
+               }
+
+               return {
+                       top: po.top + ( parseInt( this.offsetParent.css( "borderTopWidth" ), 10 ) || 0 ),
+                       left: po.left + ( parseInt( this.offsetParent.css( "borderLeftWidth" ), 10 ) || 0 )
+               };
+
+       },
+
+       _getRelativeOffset: function() {
+
+               if ( this.cssPosition === "relative" ) {
+                       var p = this.currentItem.position();
+                       return {
+                               top: p.top - ( parseInt( this.helper.css( "top" ), 10 ) || 0 ) +
+                                       this.scrollParent.scrollTop(),
+                               left: p.left - ( parseInt( this.helper.css( "left" ), 10 ) || 0 ) +
+                                       this.scrollParent.scrollLeft()
+                       };
+               } else {
+                       return { top: 0, left: 0 };
+               }
+
+       },
+
+       _cacheMargins: function() {
+               this.margins = {
+                       left: ( parseInt( this.currentItem.css( "marginLeft" ), 10 ) || 0 ),
+                       top: ( parseInt( this.currentItem.css( "marginTop" ), 10 ) || 0 )
+               };
+       },
+
+       _cacheHelperProportions: function() {
+               this.helperProportions = {
+                       width: this.helper.outerWidth(),
+                       height: this.helper.outerHeight()
+               };
+       },
+
+       _setContainment: function() {
+
+               var ce, co, over,
+                       o = this.options;
+               if ( o.containment === "parent" ) {
+                       o.containment = this.helper[ 0 ].parentNode;
+               }
+               if ( o.containment === "document" || o.containment === "window" ) {
+                       this.containment = [
+                               0 - this.offset.relative.left - this.offset.parent.left,
+                               0 - this.offset.relative.top - this.offset.parent.top,
+                               o.containment === "document" ?
+                                       this.document.width() :
+                                       this.window.width() - this.helperProportions.width - this.margins.left,
+                               ( o.containment === "document" ?
+                                       ( this.document.height() || document.body.parentNode.scrollHeight ) :
+                                       this.window.height() || this.document[ 0 ].body.parentNode.scrollHeight
+                               ) - this.helperProportions.height - this.margins.top
+                       ];
+               }
+
+               if ( !( /^(document|window|parent)$/ ).test( o.containment ) ) {
+                       ce = $( o.containment )[ 0 ];
+                       co = $( o.containment ).offset();
+                       over = ( $( ce ).css( "overflow" ) !== "hidden" );
+
+                       this.containment = [
+                               co.left + ( parseInt( $( ce ).css( "borderLeftWidth" ), 10 ) || 0 ) +
+                                       ( parseInt( $( ce ).css( "paddingLeft" ), 10 ) || 0 ) - this.margins.left,
+                               co.top + ( parseInt( $( ce ).css( "borderTopWidth" ), 10 ) || 0 ) +
+                                       ( parseInt( $( ce ).css( "paddingTop" ), 10 ) || 0 ) - this.margins.top,
+                               co.left + ( over ? Math.max( ce.scrollWidth, ce.offsetWidth ) : ce.offsetWidth ) -
+                                       ( parseInt( $( ce ).css( "borderLeftWidth" ), 10 ) || 0 ) -
+                                       ( parseInt( $( ce ).css( "paddingRight" ), 10 ) || 0 ) -
+                                       this.helperProportions.width - this.margins.left,
+                               co.top + ( over ? Math.max( ce.scrollHeight, ce.offsetHeight ) : ce.offsetHeight ) -
+                                       ( parseInt( $( ce ).css( "borderTopWidth" ), 10 ) || 0 ) -
+                                       ( parseInt( $( ce ).css( "paddingBottom" ), 10 ) || 0 ) -
+                                       this.helperProportions.height - this.margins.top
+                       ];
+               }
+
+       },
+
+       _convertPositionTo: function( d, pos ) {
+
+               if ( !pos ) {
+                       pos = this.position;
+               }
+               var mod = d === "absolute" ? 1 : -1,
+                       scroll = this.cssPosition === "absolute" &&
+                               !( this.scrollParent[ 0 ] !== this.document[ 0 ] &&
+                               $.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) ?
+                                       this.offsetParent :
+                                       this.scrollParent,
+                       scrollIsRootNode = ( /(html|body)/i ).test( scroll[ 0 ].tagName );
+
+               return {
+                       top: (
+
+                               // The absolute mouse position
+                               pos.top +
+
+                               // Only for relative positioned nodes: Relative offset from element to offset parent
+                               this.offset.relative.top * mod +
+
+                               // The offsetParent's offset without borders (offset + border)
+                               this.offset.parent.top * mod -
+                               ( ( this.cssPosition === "fixed" ?
+                                       -this.scrollParent.scrollTop() :
+                                       ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) * mod )
+                       ),
+                       left: (
+
+                               // The absolute mouse position
+                               pos.left +
+
+                               // Only for relative positioned nodes: Relative offset from element to offset parent
+                               this.offset.relative.left * mod +
+
+                               // The offsetParent's offset without borders (offset + border)
+                               this.offset.parent.left * mod   -
+                               ( ( this.cssPosition === "fixed" ?
+                                       -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 :
+                                       scroll.scrollLeft() ) * mod )
+                       )
+               };
+
+       },
+
+       _generatePosition: function( event ) {
+
+               var top, left,
+                       o = this.options,
+                       pageX = event.pageX,
+                       pageY = event.pageY,
+                       scroll = this.cssPosition === "absolute" &&
+                               !( this.scrollParent[ 0 ] !== this.document[ 0 ] &&
+                               $.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) ?
+                                       this.offsetParent :
+                                       this.scrollParent,
+                               scrollIsRootNode = ( /(html|body)/i ).test( scroll[ 0 ].tagName );
+
+               // This is another very weird special case that only happens for relative elements:
+               // 1. If the css position is relative
+               // 2. and the scroll parent is the document or similar to the offset parent
+               // we have to refresh the relative offset during the scroll so there are no jumps
+               if ( this.cssPosition === "relative" && !( this.scrollParent[ 0 ] !== this.document[ 0 ] &&
+                               this.scrollParent[ 0 ] !== this.offsetParent[ 0 ] ) ) {
+                       this.offset.relative = this._getRelativeOffset();
+               }
+
+               /*
+                * - Position constraining -
+                * Constrain the position to a mix of grid, containment.
+                */
+
+               if ( this.originalPosition ) { //If we are not dragging yet, we won't check for options
+
+                       if ( this.containment ) {
+                               if ( event.pageX - this.offset.click.left < this.containment[ 0 ] ) {
+                                       pageX = this.containment[ 0 ] + this.offset.click.left;
+                               }
+                               if ( event.pageY - this.offset.click.top < this.containment[ 1 ] ) {
+                                       pageY = this.containment[ 1 ] + this.offset.click.top;
+                               }
+                               if ( event.pageX - this.offset.click.left > this.containment[ 2 ] ) {
+                                       pageX = this.containment[ 2 ] + this.offset.click.left;
+                               }
+                               if ( event.pageY - this.offset.click.top > this.containment[ 3 ] ) {
+                                       pageY = this.containment[ 3 ] + this.offset.click.top;
+                               }
+                       }
+
+                       if ( o.grid ) {
+                               top = this.originalPageY + Math.round( ( pageY - this.originalPageY ) /
+                                       o.grid[ 1 ] ) * o.grid[ 1 ];
+                               pageY = this.containment ?
+                                       ( ( top - this.offset.click.top >= this.containment[ 1 ] &&
+                                               top - this.offset.click.top <= this.containment[ 3 ] ) ?
+                                                       top :
+                                                       ( ( top - this.offset.click.top >= this.containment[ 1 ] ) ?
+                                                               top - o.grid[ 1 ] : top + o.grid[ 1 ] ) ) :
+                                                               top;
+
+                               left = this.originalPageX + Math.round( ( pageX - this.originalPageX ) /
+                                       o.grid[ 0 ] ) * o.grid[ 0 ];
+                               pageX = this.containment ?
+                                       ( ( left - this.offset.click.left >= this.containment[ 0 ] &&
+                                               left - this.offset.click.left <= this.containment[ 2 ] ) ?
+                                                       left :
+                                                       ( ( left - this.offset.click.left >= this.containment[ 0 ] ) ?
+                                                               left - o.grid[ 0 ] : left + o.grid[ 0 ] ) ) :
+                                                               left;
+                       }
+
+               }
+
+               return {
+                       top: (
+
+                               // The absolute mouse position
+                               pageY -
+
+                               // Click offset (relative to the element)
+                               this.offset.click.top -
+
+                               // Only for relative positioned nodes: Relative offset from element to offset parent
+                               this.offset.relative.top -
+
+                               // The offsetParent's offset without borders (offset + border)
+                               this.offset.parent.top +
+                               ( ( this.cssPosition === "fixed" ?
+                                       -this.scrollParent.scrollTop() :
+                                       ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) )
+                       ),
+                       left: (
+
+                               // The absolute mouse position
+                               pageX -
+
+                               // Click offset (relative to the element)
+                               this.offset.click.left -
+
+                               // Only for relative positioned nodes: Relative offset from element to offset parent
+                               this.offset.relative.left -
+
+                               // The offsetParent's offset without borders (offset + border)
+                               this.offset.parent.left +
+                               ( ( this.cssPosition === "fixed" ?
+                                       -this.scrollParent.scrollLeft() :
+                                       scrollIsRootNode ? 0 : scroll.scrollLeft() ) )
+                       )
+               };
+
+       },
+
+       _rearrange: function( event, i, a, hardRefresh ) {
+
+               a ? a[ 0 ].appendChild( this.placeholder[ 0 ] ) :
+                       i.item[ 0 ].parentNode.insertBefore( this.placeholder[ 0 ],
+                               ( this.direction === "down" ? i.item[ 0 ] : i.item[ 0 ].nextSibling ) );
+
+               //Various things done here to improve the performance:
+               // 1. we create a setTimeout, that calls refreshPositions
+               // 2. on the instance, we have a counter variable, that get's higher after every append
+               // 3. on the local scope, we copy the counter variable, and check in the timeout,
+               // if it's still the same
+               // 4. this lets only the last addition to the timeout stack through
+               this.counter = this.counter ? ++this.counter : 1;
+               var counter = this.counter;
+
+               this._delay( function() {
+                       if ( counter === this.counter ) {
+
+                               //Precompute after each DOM insertion, NOT on mousemove
+                               this.refreshPositions( !hardRefresh );
+                       }
+               } );
+
+       },
+
+       _clear: function( event, noPropagation ) {
+
+               this.reverting = false;
+
+               // We delay all events that have to be triggered to after the point where the placeholder
+               // has been removed and everything else normalized again
+               var i,
+                       delayedTriggers = [];
+
+               // We first have to update the dom position of the actual currentItem
+               // Note: don't do it if the current item is already removed (by a user), or it gets
+               // reappended (see #4088)
+               if ( !this._noFinalSort && this.currentItem.parent().length ) {
+                       this.placeholder.before( this.currentItem );
+               }
+               this._noFinalSort = null;
+
+               if ( this.helper[ 0 ] === this.currentItem[ 0 ] ) {
+                       for ( i in this._storedCSS ) {
+                               if ( this._storedCSS[ i ] === "auto" || this._storedCSS[ i ] === "static" ) {
+                                       this._storedCSS[ i ] = "";
+                               }
+                       }
+                       this.currentItem.css( this._storedCSS );
+                       this._removeClass( this.currentItem, "ui-sortable-helper" );
+               } else {
+                       this.currentItem.show();
+               }
+
+               if ( this.fromOutside && !noPropagation ) {
+                       delayedTriggers.push( function( event ) {
+                               this._trigger( "receive", event, this._uiHash( this.fromOutside ) );
+                       } );
+               }
+               if ( ( this.fromOutside ||
+                               this.domPosition.prev !==
+                               this.currentItem.prev().not( ".ui-sortable-helper" )[ 0 ] ||
+                               this.domPosition.parent !== this.currentItem.parent()[ 0 ] ) && !noPropagation ) {
+
+                       // Trigger update callback if the DOM position has changed
+                       delayedTriggers.push( function( event ) {
+                               this._trigger( "update", event, this._uiHash() );
+                       } );
+               }
+
+               // Check if the items Container has Changed and trigger appropriate
+               // events.
+               if ( this !== this.currentContainer ) {
+                       if ( !noPropagation ) {
+                               delayedTriggers.push( function( event ) {
+                                       this._trigger( "remove", event, this._uiHash() );
+                               } );
+                               delayedTriggers.push( ( function( c ) {
+                                       return function( event ) {
+                                               c._trigger( "receive", event, this._uiHash( this ) );
+                                       };
+                               } ).call( this, this.currentContainer ) );
+                               delayedTriggers.push( ( function( c ) {
+                                       return function( event ) {
+                                               c._trigger( "update", event, this._uiHash( this ) );
+                                       };
+                               } ).call( this, this.currentContainer ) );
+                       }
+               }
+
+               //Post events to containers
+               function delayEvent( type, instance, container ) {
+                       return function( event ) {
+                               container._trigger( type, event, instance._uiHash( instance ) );
+                       };
+               }
+               for ( i = this.containers.length - 1; i >= 0; i-- ) {
+                       if ( !noPropagation ) {
+                               delayedTriggers.push( delayEvent( "deactivate", this, this.containers[ i ] ) );
+                       }
+                       if ( this.containers[ i ].containerCache.over ) {
+                               delayedTriggers.push( delayEvent( "out", this, this.containers[ i ] ) );
+                               this.containers[ i ].containerCache.over = 0;
+                       }
+               }
+
+               //Do what was originally in plugins
+               if ( this.storedCursor ) {
+                       this.document.find( "body" ).css( "cursor", this.storedCursor );
+                       this.storedStylesheet.remove();
+               }
+               if ( this._storedOpacity ) {
+                       this.helper.css( "opacity", this._storedOpacity );
+               }
+               if ( this._storedZIndex ) {
+                       this.helper.css( "zIndex", this._storedZIndex === "auto" ? "" : this._storedZIndex );
+               }
+
+               this.dragging = false;
+
+               if ( !noPropagation ) {
+                       this._trigger( "beforeStop", event, this._uiHash() );
+               }
+
+               //$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately,
+               // it unbinds ALL events from the original node!
+               this.placeholder[ 0 ].parentNode.removeChild( this.placeholder[ 0 ] );
+
+               if ( !this.cancelHelperRemoval ) {
+                       if ( this.helper[ 0 ] !== this.currentItem[ 0 ] ) {
+                               this.helper.remove();
+                       }
+                       this.helper = null;
+               }
+
+               if ( !noPropagation ) {
+                       for ( i = 0; i < delayedTriggers.length; i++ ) {
+
+                               // Trigger all delayed events
+                               delayedTriggers[ i ].call( this, event );
+                       }
+                       this._trigger( "stop", event, this._uiHash() );
+               }
+
+               this.fromOutside = false;
+               return !this.cancelHelperRemoval;
+
+       },
+
+       _trigger: function() {
+               if ( $.Widget.prototype._trigger.apply( this, arguments ) === false ) {
+                       this.cancel();
+               }
+       },
+
+       _uiHash: function( _inst ) {
+               var inst = _inst || this;
+               return {
+                       helper: inst.helper,
+                       placeholder: inst.placeholder || $( [] ),
+                       position: inst.position,
+                       originalPosition: inst.originalPosition,
+                       offset: inst.positionAbs,
+                       item: inst.currentItem,
+                       sender: _inst ? _inst.element : null
+               };
+       }
+
+} );
+
+
+/*!
+ * jQuery UI Accordion 1.12.1
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ */
+
+//>>label: Accordion
+//>>group: Widgets
+// jscs:disable maximumLineLength
+//>>description: Displays collapsible content panels for presenting information in a limited amount of space.
+// jscs:enable maximumLineLength
+//>>docs: http://api.jqueryui.com/accordion/
+//>>demos: http://jqueryui.com/accordion/
+//>>css.structure: ../../themes/base/core.css
+//>>css.structure: ../../themes/base/accordion.css
+//>>css.theme: ../../themes/base/theme.css
+
+
+
+var widgetsAccordion = $.widget( "ui.accordion", {
+       version: "1.12.1",
+       options: {
+               active: 0,
+               animate: {},
+               classes: {
+                       "ui-accordion-header": "ui-corner-top",
+                       "ui-accordion-header-collapsed": "ui-corner-all",
+                       "ui-accordion-content": "ui-corner-bottom"
+               },
+               collapsible: false,
+               event: "click",
+               header: "> li > :first-child, > :not(li):even",
+               heightStyle: "auto",
+               icons: {
+                       activeHeader: "ui-icon-triangle-1-s",
+                       header: "ui-icon-triangle-1-e"
+               },
+
+               // Callbacks
+               activate: null,
+               beforeActivate: null
+       },
+
+       hideProps: {
+               borderTopWidth: "hide",
+               borderBottomWidth: "hide",
+               paddingTop: "hide",
+               paddingBottom: "hide",
+               height: "hide"
+       },
+
+       showProps: {
+               borderTopWidth: "show",
+               borderBottomWidth: "show",
+               paddingTop: "show",
+               paddingBottom: "show",
+               height: "show"
+       },
+
+       _create: function() {
+               var options = this.options;
+
+               this.prevShow = this.prevHide = $();
+               this._addClass( "ui-accordion", "ui-widget ui-helper-reset" );
+               this.element.attr( "role", "tablist" );
+
+               // Don't allow collapsible: false and active: false / null
+               if ( !options.collapsible && ( options.active === false || options.active == null ) ) {
+                       options.active = 0;
+               }
+
+               this._processPanels();
+
+               // handle negative values
+               if ( options.active < 0 ) {
+                       options.active += this.headers.length;
+               }
+               this._refresh();
+       },
+
+       _getCreateEventData: function() {
+               return {
+                       header: this.active,
+                       panel: !this.active.length ? $() : this.active.next()
+               };
+       },
+
+       _createIcons: function() {
+               var icon, children,
+                       icons = this.options.icons;
+
+               if ( icons ) {
+                       icon = $( "<span>" );
+                       this._addClass( icon, "ui-accordion-header-icon", "ui-icon " + icons.header );
+                       icon.prependTo( this.headers );
+                       children = this.active.children( ".ui-accordion-header-icon" );
+                       this._removeClass( children, icons.header )
+                               ._addClass( children, null, icons.activeHeader )
+                               ._addClass( this.headers, "ui-accordion-icons" );
+               }
+       },
+
+       _destroyIcons: function() {
+               this._removeClass( this.headers, "ui-accordion-icons" );
+               this.headers.children( ".ui-accordion-header-icon" ).remove();
+       },
+
+       _destroy: function() {
+               var contents;
+
+               // Clean up main element
+               this.element.removeAttr( "role" );
+
+               // Clean up headers
+               this.headers
+                       .removeAttr( "role aria-expanded aria-selected aria-controls tabIndex" )
+                       .removeUniqueId();
+
+               this._destroyIcons();
+
+               // Clean up content panels
+               contents = this.headers.next()
+                       .css( "display", "" )
+                       .removeAttr( "role aria-hidden aria-labelledby" )
+                       .removeUniqueId();
+
+               if ( this.options.heightStyle !== "content" ) {
+                       contents.css( "height", "" );
+               }
+       },
+
+       _setOption: function( key, value ) {
+               if ( key === "active" ) {
+
+                       // _activate() will handle invalid values and update this.options
+                       this._activate( value );
+                       return;
+               }
+
+               if ( key === "event" ) {
+                       if ( this.options.event ) {
+                               this._off( this.headers, this.options.event );
+                       }
+                       this._setupEvents( value );
+               }
+
+               this._super( key, value );
+
+               // Setting collapsible: false while collapsed; open first panel
+               if ( key === "collapsible" && !value && this.options.active === false ) {
+                       this._activate( 0 );
+               }
+
+               if ( key === "icons" ) {
+                       this._destroyIcons();
+                       if ( value ) {
+                               this._createIcons();
+                       }
+               }
+       },
+
+       _setOptionDisabled: function( value ) {
+               this._super( value );
+
+               this.element.attr( "aria-disabled", value );
+
+               // Support: IE8 Only
+               // #5332 / #6059 - opacity doesn't cascade to positioned elements in IE
+               // so we need to add the disabled class to the headers and panels
+               this._toggleClass( null, "ui-state-disabled", !!value );
+               this._toggleClass( this.headers.add( this.headers.next() ), null, "ui-state-disabled",
+                       !!value );
+       },
+
+       _keydown: function( event ) {
+               if ( event.altKey || event.ctrlKey ) {
+                       return;
+               }
+
+               var keyCode = $.ui.keyCode,
+                       length = this.headers.length,
+                       currentIndex = this.headers.index( event.target ),
+                       toFocus = false;
+
+               switch ( event.keyCode ) {
+               case keyCode.RIGHT:
+               case keyCode.DOWN:
+                       toFocus = this.headers[ ( currentIndex + 1 ) % length ];
+                       break;
+               case keyCode.LEFT:
+               case keyCode.UP:
+                       toFocus = this.headers[ ( currentIndex - 1 + length ) % length ];
+                       break;
+               case keyCode.SPACE:
+               case keyCode.ENTER:
+                       this._eventHandler( event );
+                       break;
+               case keyCode.HOME:
+                       toFocus = this.headers[ 0 ];
+                       break;
+               case keyCode.END:
+                       toFocus = this.headers[ length - 1 ];
+                       break;
+               }
+
+               if ( toFocus ) {
+                       $( event.target ).attr( "tabIndex", -1 );
+                       $( toFocus ).attr( "tabIndex", 0 );
+                       $( toFocus ).trigger( "focus" );
+                       event.preventDefault();
+               }
+       },
+
+       _panelKeyDown: function( event ) {
+               if ( event.keyCode === $.ui.keyCode.UP && event.ctrlKey ) {
+                       $( event.currentTarget ).prev().trigger( "focus" );
+               }
+       },
+
+       refresh: function() {
+               var options = this.options;
+               this._processPanels();
+
+               // Was collapsed or no panel
+               if ( ( options.active === false && options.collapsible === true ) ||
+                               !this.headers.length ) {
+                       options.active = false;
+                       this.active = $();
+
+               // active false only when collapsible is true
+               } else if ( options.active === false ) {
+                       this._activate( 0 );
+
+               // was active, but active panel is gone
+               } else if ( this.active.length && !$.contains( this.element[ 0 ], this.active[ 0 ] ) ) {
+
+                       // all remaining panel are disabled
+                       if ( this.headers.length === this.headers.find( ".ui-state-disabled" ).length ) {
+                               options.active = false;
+                               this.active = $();
+
+                       // activate previous panel
+                       } else {
+                               this._activate( Math.max( 0, options.active - 1 ) );
+                       }
+
+               // was active, active panel still exists
+               } else {
+
+                       // make sure active index is correct
+                       options.active = this.headers.index( this.active );
+               }
+
+               this._destroyIcons();
+
+               this._refresh();
+       },
+
+       _processPanels: function() {
+               var prevHeaders = this.headers,
+                       prevPanels = this.panels;
+
+               this.headers = this.element.find( this.options.header );
+               this._addClass( this.headers, "ui-accordion-header ui-accordion-header-collapsed",
+                       "ui-state-default" );
+
+               this.panels = this.headers.next().filter( ":not(.ui-accordion-content-active)" ).hide();
+               this._addClass( this.panels, "ui-accordion-content", "ui-helper-reset ui-widget-content" );
+
+               // Avoid memory leaks (#10056)
+               if ( prevPanels ) {
+                       this._off( prevHeaders.not( this.headers ) );
+                       this._off( prevPanels.not( this.panels ) );
+               }
+       },
+
+       _refresh: function() {
+               var maxHeight,
+                       options = this.options,
+                       heightStyle = options.heightStyle,
+                       parent = this.element.parent();
+
+               this.active = this._findActive( options.active );
+               this._addClass( this.active, "ui-accordion-header-active", "ui-state-active" )
+                       ._removeClass( this.active, "ui-accordion-header-collapsed" );
+               this._addClass( this.active.next(), "ui-accordion-content-active" );
+               this.active.next().show();
+
+               this.headers
+                       .attr( "role", "tab" )
+                       .each( function() {
+                               var header = $( this ),
+                                       headerId = header.uniqueId().attr( "id" ),
+                                       panel = header.next(),
+                                       panelId = panel.uniqueId().attr( "id" );
+                               header.attr( "aria-controls", panelId );
+                               panel.attr( "aria-labelledby", headerId );
+                       } )
+                       .next()
+                               .attr( "role", "tabpanel" );
+
+               this.headers
+                       .not( this.active )
+                               .attr( {
+                                       "aria-selected": "false",
+                                       "aria-expanded": "false",
+                                       tabIndex: -1
+                               } )
+                               .next()
+                                       .attr( {
+                                               "aria-hidden": "true"
+                                       } )
+                                       .hide();
+
+               // Make sure at least one header is in the tab order
+               if ( !this.active.length ) {
+                       this.headers.eq( 0 ).attr( "tabIndex", 0 );
+               } else {
+                       this.active.attr( {
+                               "aria-selected": "true",
+                               "aria-expanded": "true",
+                               tabIndex: 0
+                       } )
+                               .next()
+                                       .attr( {
+                                               "aria-hidden": "false"
+                                       } );
+               }
+
+               this._createIcons();
+
+               this._setupEvents( options.event );
+
+               if ( heightStyle === "fill" ) {
+                       maxHeight = parent.height();
+                       this.element.siblings( ":visible" ).each( function() {
+                               var elem = $( this ),
+                                       position = elem.css( "position" );
+
+                               if ( position === "absolute" || position === "fixed" ) {
+                                       return;
+                               }
+                               maxHeight -= elem.outerHeight( true );
+                       } );
+
+                       this.headers.each( function() {
+                               maxHeight -= $( this ).outerHeight( true );
+                       } );
+
+                       this.headers.next()
+                               .each( function() {
+                                       $( this ).height( Math.max( 0, maxHeight -
+                                               $( this ).innerHeight() + $( this ).height() ) );
+                               } )
+                               .css( "overflow", "auto" );
+               } else if ( heightStyle === "auto" ) {
+                       maxHeight = 0;
+                       this.headers.next()
+                               .each( function() {
+                                       var isVisible = $( this ).is( ":visible" );
+                                       if ( !isVisible ) {
+                                               $( this ).show();
+                                       }
+                                       maxHeight = Math.max( maxHeight, $( this ).css( "height", "" ).height() );
+                                       if ( !isVisible ) {
+                                               $( this ).hide();
+                                       }
+                               } )
+                               .height( maxHeight );
+               }
+       },
+
+       _activate: function( index ) {
+               var active = this._findActive( index )[ 0 ];
+
+               // Trying to activate the already active panel
+               if ( active === this.active[ 0 ] ) {
+                       return;
+               }
+
+               // Trying to collapse, simulate a click on the currently active header
+               active = active || this.active[ 0 ];
+
+               this._eventHandler( {
+                       target: active,
+                       currentTarget: active,
+                       preventDefault: $.noop
+               } );
+       },
+
+       _findActive: function( selector ) {
+               return typeof selector === "number" ? this.headers.eq( selector ) : $();
+       },
+
+       _setupEvents: function( event ) {
+               var events = {
+                       keydown: "_keydown"
+               };
+               if ( event ) {
+                       $.each( event.split( " " ), function( index, eventName ) {
+                               events[ eventName ] = "_eventHandler";
+                       } );
+               }
+
+               this._off( this.headers.add( this.headers.next() ) );
+               this._on( this.headers, events );
+               this._on( this.headers.next(), { keydown: "_panelKeyDown" } );
+               this._hoverable( this.headers );
+               this._focusable( this.headers );
+       },
+
+       _eventHandler: function( event ) {
+               var activeChildren, clickedChildren,
+                       options = this.options,
+                       active = this.active,
+                       clicked = $( event.currentTarget ),
+                       clickedIsActive = clicked[ 0 ] === active[ 0 ],
+                       collapsing = clickedIsActive && options.collapsible,
+                       toShow = collapsing ? $() : clicked.next(),
+                       toHide = active.next(),
+                       eventData = {
+                               oldHeader: active,
+                               oldPanel: toHide,
+                               newHeader: collapsing ? $() : clicked,
+                               newPanel: toShow
+                       };
+
+               event.preventDefault();
+
+               if (
+
+                               // click on active header, but not collapsible
+                               ( clickedIsActive && !options.collapsible ) ||
+
+                               // allow canceling activation
+                               ( this._trigger( "beforeActivate", event, eventData ) === false ) ) {
+                       return;
+               }
+
+               options.active = collapsing ? false : this.headers.index( clicked );
+
+               // When the call to ._toggle() comes after the class changes
+               // it causes a very odd bug in IE 8 (see #6720)
+               this.active = clickedIsActive ? $() : clicked;
+               this._toggle( eventData );
+
+               // Switch classes
+               // corner classes on the previously active header stay after the animation
+               this._removeClass( active, "ui-accordion-header-active", "ui-state-active" );
+               if ( options.icons ) {
+                       activeChildren = active.children( ".ui-accordion-header-icon" );
+                       this._removeClass( activeChildren, null, options.icons.activeHeader )
+                               ._addClass( activeChildren, null, options.icons.header );
+               }
+
+               if ( !clickedIsActive ) {
+                       this._removeClass( clicked, "ui-accordion-header-collapsed" )
+                               ._addClass( clicked, "ui-accordion-header-active", "ui-state-active" );
+                       if ( options.icons ) {
+                               clickedChildren = clicked.children( ".ui-accordion-header-icon" );
+                               this._removeClass( clickedChildren, null, options.icons.header )
+                                       ._addClass( clickedChildren, null, options.icons.activeHeader );
+                       }
+
+                       this._addClass( clicked.next(), "ui-accordion-content-active" );
+               }
+       },
+
+       _toggle: function( data ) {
+               var toShow = data.newPanel,
+                       toHide = this.prevShow.length ? this.prevShow : data.oldPanel;
+
+               // Handle activating a panel during the animation for another activation
+               this.prevShow.add( this.prevHide ).stop( true, true );
+               this.prevShow = toShow;
+               this.prevHide = toHide;
+
+               if ( this.options.animate ) {
+                       this._animate( toShow, toHide, data );
+               } else {
+                       toHide.hide();
+                       toShow.show();
+                       this._toggleComplete( data );
+               }
+
+               toHide.attr( {
+                       "aria-hidden": "true"
+               } );
+               toHide.prev().attr( {
+                       "aria-selected": "false",
+                       "aria-expanded": "false"
+               } );
+
+               // if we're switching panels, remove the old header from the tab order
+               // if we're opening from collapsed state, remove the previous header from the tab order
+               // if we're collapsing, then keep the collapsing header in the tab order
+               if ( toShow.length && toHide.length ) {
+                       toHide.prev().attr( {
+                               "tabIndex": -1,
+                               "aria-expanded": "false"
+                       } );
+               } else if ( toShow.length ) {
+                       this.headers.filter( function() {
+                               return parseInt( $( this ).attr( "tabIndex" ), 10 ) === 0;
+                       } )
+                               .attr( "tabIndex", -1 );
+               }
+
+               toShow
+                       .attr( "aria-hidden", "false" )
+                       .prev()
+                               .attr( {
+                                       "aria-selected": "true",
+                                       "aria-expanded": "true",
+                                       tabIndex: 0
+                               } );
+       },
+
+       _animate: function( toShow, toHide, data ) {
+               var total, easing, duration,
+                       that = this,
+                       adjust = 0,
+                       boxSizing = toShow.css( "box-sizing" ),
+                       down = toShow.length &&
+                               ( !toHide.length || ( toShow.index() < toHide.index() ) ),
+                       animate = this.options.animate || {},
+                       options = down && animate.down || animate,
+                       complete = function() {
+                               that._toggleComplete( data );
+                       };
+
+               if ( typeof options === "number" ) {
+                       duration = options;
+               }
+               if ( typeof options === "string" ) {
+                       easing = options;
+               }
+
+               // fall back from options to animation in case of partial down settings
+               easing = easing || options.easing || animate.easing;
+               duration = duration || options.duration || animate.duration;
+
+               if ( !toHide.length ) {
+                       return toShow.animate( this.showProps, duration, easing, complete );
+               }
+               if ( !toShow.length ) {
+                       return toHide.animate( this.hideProps, duration, easing, complete );
+               }
+
+               total = toShow.show().outerHeight();
+               toHide.animate( this.hideProps, {
+                       duration: duration,
+                       easing: easing,
+                       step: function( now, fx ) {
+                               fx.now = Math.round( now );
+                       }
+               } );
+               toShow
+                       .hide()
+                       .animate( this.showProps, {
+                               duration: duration,
+                               easing: easing,
+                               complete: complete,
+                               step: function( now, fx ) {
+                                       fx.now = Math.round( now );
+                                       if ( fx.prop !== "height" ) {
+                                               if ( boxSizing === "content-box" ) {
+                                                       adjust += fx.now;
+                                               }
+                                       } else if ( that.options.heightStyle !== "content" ) {
+                                               fx.now = Math.round( total - toHide.outerHeight() - adjust );
+                                               adjust = 0;
+                                       }
+                               }
+                       } );
+       },
+
+       _toggleComplete: function( data ) {
+               var toHide = data.oldPanel,
+                       prev = toHide.prev();
+
+               this._removeClass( toHide, "ui-accordion-content-active" );
+               this._removeClass( prev, "ui-accordion-header-active" )
+                       ._addClass( prev, "ui-accordion-header-collapsed" );
+
+               // Work around for rendering bug in IE (#5421)
+               if ( toHide.length ) {
+                       toHide.parent()[ 0 ].className = toHide.parent()[ 0 ].className;
+               }
+               this._trigger( "activate", null, data );
+       }
+} );
+
+
+/*!
+ * jQuery UI Menu 1.12.1
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ */
+
+//>>label: Menu
+//>>group: Widgets
+//>>description: Creates nestable menus.
+//>>docs: http://api.jqueryui.com/menu/
+//>>demos: http://jqueryui.com/menu/
+//>>css.structure: ../../themes/base/core.css
+//>>css.structure: ../../themes/base/menu.css
+//>>css.theme: ../../themes/base/theme.css
+
+
+
+var widgetsMenu = $.widget( "ui.menu", {
+       version: "1.12.1",
+       defaultElement: "<ul>",
+       delay: 300,
+       options: {
+               icons: {
+                       submenu: "ui-icon-caret-1-e"
+               },
+               items: "> *",
+               menus: "ul",
+               position: {
+                       my: "left top",
+                       at: "right top"
+               },
+               role: "menu",
+
+               // Callbacks
+               blur: null,
+               focus: null,
+               select: null
+       },
+
+       _create: function() {
+               this.activeMenu = this.element;
+
+               // Flag used to prevent firing of the click handler
+               // as the event bubbles up through nested menus
+               this.mouseHandled = false;
+               this.element
+                       .uniqueId()
+                       .attr( {
+                               role: this.options.role,
+                               tabIndex: 0
+                       } );
+
+               this._addClass( "ui-menu", "ui-widget ui-widget-content" );
+               this._on( {
+
+                       // Prevent focus from sticking to links inside menu after clicking
+                       // them (focus should always stay on UL during navigation).
+                       "mousedown .ui-menu-item": function( event ) {
+                               event.preventDefault();
+                       },
+                       "click .ui-menu-item": function( event ) {
+                               var target = $( event.target );
+                               var active = $( $.ui.safeActiveElement( this.document[ 0 ] ) );
+                               if ( !this.mouseHandled && target.not( ".ui-state-disabled" ).length ) {
+                                       this.select( event );
+
+                                       // Only set the mouseHandled flag if the event will bubble, see #9469.
+                                       if ( !event.isPropagationStopped() ) {
+                                               this.mouseHandled = true;
+                                       }
+
+                                       // Open submenu on click
+                                       if ( target.has( ".ui-menu" ).length ) {
+                                               this.expand( event );
+                                       } else if ( !this.element.is( ":focus" ) &&
+                                                       active.closest( ".ui-menu" ).length ) {
+
+                                               // Redirect focus to the menu
+                                               this.element.trigger( "focus", [ true ] );
+
+                                               // If the active item is on the top level, let it stay active.
+                                               // Otherwise, blur the active item since it is no longer visible.
+                                               if ( this.active && this.active.parents( ".ui-menu" ).length === 1 ) {
+                                                       clearTimeout( this.timer );
+                                               }
+                                       }
+                               }
+                       },
+                       "mouseenter .ui-menu-item": function( event ) {
+
+                               // Ignore mouse events while typeahead is active, see #10458.
+                               // Prevents focusing the wrong item when typeahead causes a scroll while the mouse
+                               // is over an item in the menu
+                               if ( this.previousFilter ) {
+                                       return;
+                               }
+
+                               var actualTarget = $( event.target ).closest( ".ui-menu-item" ),
+                                       target = $( event.currentTarget );
+
+                               // Ignore bubbled events on parent items, see #11641
+                               if ( actualTarget[ 0 ] !== target[ 0 ] ) {
+                                       return;
+                               }
+
+                               // Remove ui-state-active class from siblings of the newly focused menu item
+                               // to avoid a jump caused by adjacent elements both having a class with a border
+                               this._removeClass( target.siblings().children( ".ui-state-active" ),
+                                       null, "ui-state-active" );
+                               this.focus( event, target );
+                       },
+                       mouseleave: "collapseAll",
+                       "mouseleave .ui-menu": "collapseAll",
+                       focus: function( event, keepActiveItem ) {
+
+                               // If there's already an active item, keep it active
+                               // If not, activate the first item
+                               var item = this.active || this.element.find( this.options.items ).eq( 0 );
+
+                               if ( !keepActiveItem ) {
+                                       this.focus( event, item );
+                               }
+                       },
+                       blur: function( event ) {
+                               this._delay( function() {
+                                       var notContained = !$.contains(
+                                               this.element[ 0 ],
+                                               $.ui.safeActiveElement( this.document[ 0 ] )
+                                       );
+                                       if ( notContained ) {
+                                               this.collapseAll( event );
+                                       }
+                               } );
+                       },
+                       keydown: "_keydown"
+               } );
+
+               this.refresh();
+
+               // Clicks outside of a menu collapse any open menus
+               this._on( this.document, {
+                       click: function( event ) {
+                               if ( this._closeOnDocumentClick( event ) ) {
+                                       this.collapseAll( event );
+                               }
+
+                               // Reset the mouseHandled flag
+                               this.mouseHandled = false;
+                       }
+               } );
+       },
+
+       _destroy: function() {
+               var items = this.element.find( ".ui-menu-item" )
+                               .removeAttr( "role aria-disabled" ),
+                       submenus = items.children( ".ui-menu-item-wrapper" )
+                               .removeUniqueId()
+                               .removeAttr( "tabIndex role aria-haspopup" );
+
+               // Destroy (sub)menus
+               this.element
+                       .removeAttr( "aria-activedescendant" )
+                       .find( ".ui-menu" ).addBack()
+                               .removeAttr( "role aria-labelledby aria-expanded aria-hidden aria-disabled " +
+                                       "tabIndex" )
+                               .removeUniqueId()
+                               .show();
+
+               submenus.children().each( function() {
+                       var elem = $( this );
+                       if ( elem.data( "ui-menu-submenu-caret" ) ) {
+                               elem.remove();
+                       }
+               } );
+       },
+
+       _keydown: function( event ) {
+               var match, prev, character, skip,
+                       preventDefault = true;
+
+               switch ( event.keyCode ) {
+               case $.ui.keyCode.PAGE_UP:
+                       this.previousPage( event );
+                       break;
+               case $.ui.keyCode.PAGE_DOWN:
+                       this.nextPage( event );
+                       break;
+               case $.ui.keyCode.HOME:
+                       this._move( "first", "first", event );
+                       break;
+               case $.ui.keyCode.END:
+                       this._move( "last", "last", event );
+                       break;
+               case $.ui.keyCode.UP:
+                       this.previous( event );
+                       break;
+               case $.ui.keyCode.DOWN:
+                       this.next( event );
+                       break;
+               case $.ui.keyCode.LEFT:
+                       this.collapse( event );
+                       break;
+               case $.ui.keyCode.RIGHT:
+                       if ( this.active && !this.active.is( ".ui-state-disabled" ) ) {
+                               this.expand( event );
+                       }
+                       break;
+               case $.ui.keyCode.ENTER:
+               case $.ui.keyCode.SPACE:
+                       this._activate( event );
+                       break;
+               case $.ui.keyCode.ESCAPE:
+                       this.collapse( event );
+                       break;
+               default:
+                       preventDefault = false;
+                       prev = this.previousFilter || "";
+                       skip = false;
+
+                       // Support number pad values
+                       character = event.keyCode >= 96 && event.keyCode <= 105 ?
+                               ( event.keyCode - 96 ).toString() : String.fromCharCode( event.keyCode );
+
+                       clearTimeout( this.filterTimer );
+
+                       if ( character === prev ) {
+                               skip = true;
+                       } else {
+                               character = prev + character;
+                       }
+
+                       match = this._filterMenuItems( character );
+                       match = skip && match.index( this.active.next() ) !== -1 ?
+                               this.active.nextAll( ".ui-menu-item" ) :
+                               match;
+
+                       // If no matches on the current filter, reset to the last character pressed
+                       // to move down the menu to the first item that starts with that character
+                       if ( !match.length ) {
+                               character = String.fromCharCode( event.keyCode );
+                               match = this._filterMenuItems( character );
+                       }
+
+                       if ( match.length ) {
+                               this.focus( event, match );
+                               this.previousFilter = character;
+                               this.filterTimer = this._delay( function() {
+                                       delete this.previousFilter;
+                               }, 1000 );
+                       } else {
+                               delete this.previousFilter;
+                       }
+               }
+
+               if ( preventDefault ) {
+                       event.preventDefault();
+               }
+       },
+
+       _activate: function( event ) {
+               if ( this.active && !this.active.is( ".ui-state-disabled" ) ) {
+                       if ( this.active.children( "[aria-haspopup='true']" ).length ) {
+                               this.expand( event );
+                       } else {
+                               this.select( event );
+                       }
+               }
+       },
+
+       refresh: function() {
+               var menus, items, newSubmenus, newItems, newWrappers,
+                       that = this,
+                       icon = this.options.icons.submenu,
+                       submenus = this.element.find( this.options.menus );
+
+               this._toggleClass( "ui-menu-icons", null, !!this.element.find( ".ui-icon" ).length );
+
+               // Initialize nested menus
+               newSubmenus = submenus.filter( ":not(.ui-menu)" )
+                       .hide()
+                       .attr( {
+                               role: this.options.role,
+                               "aria-hidden": "true",
+                               "aria-expanded": "false"
+                       } )
+                       .each( function() {
+                               var menu = $( this ),
+                                       item = menu.prev(),
+                                       submenuCaret = $( "<span>" ).data( "ui-menu-submenu-caret", true );
+
+                               that._addClass( submenuCaret, "ui-menu-icon", "ui-icon " + icon );
+                               item
+                                       .attr( "aria-haspopup", "true" )
+                                       .prepend( submenuCaret );
+                               menu.attr( "aria-labelledby", item.attr( "id" ) );
+                       } );
+
+               this._addClass( newSubmenus, "ui-menu", "ui-widget ui-widget-content ui-front" );
+
+               menus = submenus.add( this.element );
+               items = menus.find( this.options.items );
+
+               // Initialize menu-items containing spaces and/or dashes only as dividers
+               items.not( ".ui-menu-item" ).each( function() {
+                       var item = $( this );
+                       if ( that._isDivider( item ) ) {
+                               that._addClass( item, "ui-menu-divider", "ui-widget-content" );
+                       }
+               } );
+
+               // Don't refresh list items that are already adapted
+               newItems = items.not( ".ui-menu-item, .ui-menu-divider" );
+               newWrappers = newItems.children()
+                       .not( ".ui-menu" )
+                               .uniqueId()
+                               .attr( {
+                                       tabIndex: -1,
+                                       role: this._itemRole()
+                               } );
+               this._addClass( newItems, "ui-menu-item" )
+                       ._addClass( newWrappers, "ui-menu-item-wrapper" );
+
+               // Add aria-disabled attribute to any disabled menu item
+               items.filter( ".ui-state-disabled" ).attr( "aria-disabled", "true" );
+
+               // If the active item has been removed, blur the menu
+               if ( this.active && !$.contains( this.element[ 0 ], this.active[ 0 ] ) ) {
+                       this.blur();
+               }
+       },
+
+       _itemRole: function() {
+               return {
+                       menu: "menuitem",
+                       listbox: "option"
+               }[ this.options.role ];
+       },
+
+       _setOption: function( key, value ) {
+               if ( key === "icons" ) {
+                       var icons = this.element.find( ".ui-menu-icon" );
+                       this._removeClass( icons, null, this.options.icons.submenu )
+                               ._addClass( icons, null, value.submenu );
+               }
+               this._super( key, value );
+       },
+
+       _setOptionDisabled: function( value ) {
+               this._super( value );
+
+               this.element.attr( "aria-disabled", String( value ) );
+               this._toggleClass( null, "ui-state-disabled", !!value );
+       },
+
+       focus: function( event, item ) {
+               var nested, focused, activeParent;
+               this.blur( event, event && event.type === "focus" );
+
+               this._scrollIntoView( item );
+
+               this.active = item.first();
+
+               focused = this.active.children( ".ui-menu-item-wrapper" );
+               this._addClass( focused, null, "ui-state-active" );
+
+               // Only update aria-activedescendant if there's a role
+               // otherwise we assume focus is managed elsewhere
+               if ( this.options.role ) {
+                       this.element.attr( "aria-activedescendant", focused.attr( "id" ) );
+               }
+
+               // Highlight active parent menu item, if any
+               activeParent = this.active
+                       .parent()
+                               .closest( ".ui-menu-item" )
+                                       .children( ".ui-menu-item-wrapper" );
+               this._addClass( activeParent, null, "ui-state-active" );
+
+               if ( event && event.type === "keydown" ) {
+                       this._close();
+               } else {
+                       this.timer = this._delay( function() {
+                               this._close();
+                       }, this.delay );
+               }
+
+               nested = item.children( ".ui-menu" );
+               if ( nested.length && event && ( /^mouse/.test( event.type ) ) ) {
+                       this._startOpening( nested );
+               }
+               this.activeMenu = item.parent();
+
+               this._trigger( "focus", event, { item: item } );
+       },
+
+       _scrollIntoView: function( item ) {
+               var borderTop, paddingTop, offset, scroll, elementHeight, itemHeight;
+               if ( this._hasScroll() ) {
+                       borderTop = parseFloat( $.css( this.activeMenu[ 0 ], "borderTopWidth" ) ) || 0;
+                       paddingTop = parseFloat( $.css( this.activeMenu[ 0 ], "paddingTop" ) ) || 0;
+                       offset = item.offset().top - this.activeMenu.offset().top - borderTop - paddingTop;
+                       scroll = this.activeMenu.scrollTop();
+                       elementHeight = this.activeMenu.height();
+                       itemHeight = item.outerHeight();
+
+                       if ( offset < 0 ) {
+                               this.activeMenu.scrollTop( scroll + offset );
+                       } else if ( offset + itemHeight > elementHeight ) {
+                               this.activeMenu.scrollTop( scroll + offset - elementHeight + itemHeight );
+                       }
+               }
+       },
+
+       blur: function( event, fromFocus ) {
+               if ( !fromFocus ) {
+                       clearTimeout( this.timer );
+               }
+
+               if ( !this.active ) {
+                       return;
+               }
+
+               this._removeClass( this.active.children( ".ui-menu-item-wrapper" ),
+                       null, "ui-state-active" );
+
+               this._trigger( "blur", event, { item: this.active } );
+               this.active = null;
+       },
+
+       _startOpening: function( submenu ) {
+               clearTimeout( this.timer );
+
+               // Don't open if already open fixes a Firefox bug that caused a .5 pixel
+               // shift in the submenu position when mousing over the caret icon
+               if ( submenu.attr( "aria-hidden" ) !== "true" ) {
+                       return;
+               }
+
+               this.timer = this._delay( function() {
+                       this._close();
+                       this._open( submenu );
+               }, this.delay );
+       },
+
+       _open: function( submenu ) {
+               var position = $.extend( {
+                       of: this.active
+               }, this.options.position );
+
+               clearTimeout( this.timer );
+               this.element.find( ".ui-menu" ).not( submenu.parents( ".ui-menu" ) )
+                       .hide()
+                       .attr( "aria-hidden", "true" );
+
+               submenu
+                       .show()
+                       .removeAttr( "aria-hidden" )
+                       .attr( "aria-expanded", "true" )
+                       .position( position );
+       },
+
+       collapseAll: function( event, all ) {
+               clearTimeout( this.timer );
+               this.timer = this._delay( function() {
+
+                       // If we were passed an event, look for the submenu that contains the event
+                       var currentMenu = all ? this.element :
+                               $( event && event.target ).closest( this.element.find( ".ui-menu" ) );
+
+                       // If we found no valid submenu ancestor, use the main menu to close all
+                       // sub menus anyway
+                       if ( !currentMenu.length ) {
+                               currentMenu = this.element;
+                       }
+
+                       this._close( currentMenu );
+
+                       this.blur( event );
+
+                       // Work around active item staying active after menu is blurred
+                       this._removeClass( currentMenu.find( ".ui-state-active" ), null, "ui-state-active" );
+
+                       this.activeMenu = currentMenu;
+               }, this.delay );
+       },
+
+       // With no arguments, closes the currently active menu - if nothing is active
+       // it closes all menus.  If passed an argument, it will search for menus BELOW
+       _close: function( startMenu ) {
+               if ( !startMenu ) {
+                       startMenu = this.active ? this.active.parent() : this.element;
+               }
+
+               startMenu.find( ".ui-menu" )
+                       .hide()
+                       .attr( "aria-hidden", "true" )
+                       .attr( "aria-expanded", "false" );
+       },
+
+       _closeOnDocumentClick: function( event ) {
+               return !$( event.target ).closest( ".ui-menu" ).length;
+       },
+
+       _isDivider: function( item ) {
+
+               // Match hyphen, em dash, en dash
+               return !/[^\-\u2014\u2013\s]/.test( item.text() );
+       },
+
+       collapse: function( event ) {
+               var newItem = this.active &&
+                       this.active.parent().closest( ".ui-menu-item", this.element );
+               if ( newItem && newItem.length ) {
+                       this._close();
+                       this.focus( event, newItem );
+               }
+       },
+
+       expand: function( event ) {
+               var newItem = this.active &&
+                       this.active
+                               .children( ".ui-menu " )
+                                       .find( this.options.items )
+                                               .first();
+
+               if ( newItem && newItem.length ) {
+                       this._open( newItem.parent() );
+
+                       // Delay so Firefox will not hide activedescendant change in expanding submenu from AT
+                       this._delay( function() {
+                               this.focus( event, newItem );
+                       } );
+               }
+       },
+
+       next: function( event ) {
+               this._move( "next", "first", event );
+       },
+
+       previous: function( event ) {
+               this._move( "prev", "last", event );
+       },
+
+       isFirstItem: function() {
+               return this.active && !this.active.prevAll( ".ui-menu-item" ).length;
+       },
+
+       isLastItem: function() {
+               return this.active && !this.active.nextAll( ".ui-menu-item" ).length;
+       },
+
+       _move: function( direction, filter, event ) {
+               var next;
+               if ( this.active ) {
+                       if ( direction === "first" || direction === "last" ) {
+                               next = this.active
+                                       [ direction === "first" ? "prevAll" : "nextAll" ]( ".ui-menu-item" )
+                                       .eq( -1 );
+                       } else {
+                               next = this.active
+                                       [ direction + "All" ]( ".ui-menu-item" )
+                                       .eq( 0 );
+                       }
+               }
+               if ( !next || !next.length || !this.active ) {
+                       next = this.activeMenu.find( this.options.items )[ filter ]();
+               }
+
+               this.focus( event, next );
+       },
+
+       nextPage: function( event ) {
+               var item, base, height;
+
+               if ( !this.active ) {
+                       this.next( event );
+                       return;
+               }
+               if ( this.isLastItem() ) {
+                       return;
+               }
+               if ( this._hasScroll() ) {
+                       base = this.active.offset().top;
+                       height = this.element.height();
+                       this.active.nextAll( ".ui-menu-item" ).each( function() {
+                               item = $( this );
+                               return item.offset().top - base - height < 0;
+                       } );
+
+                       this.focus( event, item );
+               } else {
+                       this.focus( event, this.activeMenu.find( this.options.items )
+                               [ !this.active ? "first" : "last" ]() );
+               }
+       },
+
+       previousPage: function( event ) {
+               var item, base, height;
+               if ( !this.active ) {
+                       this.next( event );
+                       return;
+               }
+               if ( this.isFirstItem() ) {
+                       return;
+               }
+               if ( this._hasScroll() ) {
+                       base = this.active.offset().top;
+                       height = this.element.height();
+                       this.active.prevAll( ".ui-menu-item" ).each( function() {
+                               item = $( this );
+                               return item.offset().top - base + height > 0;
+                       } );
+
+                       this.focus( event, item );
+               } else {
+                       this.focus( event, this.activeMenu.find( this.options.items ).first() );
+               }
+       },
+
+       _hasScroll: function() {
+               return this.element.outerHeight() < this.element.prop( "scrollHeight" );
+       },
+
+       select: function( event ) {
+
+               // TODO: It should never be possible to not have an active item at this
+               // point, but the tests don't trigger mouseenter before click.
+               this.active = this.active || $( event.target ).closest( ".ui-menu-item" );
+               var ui = { item: this.active };
+               if ( !this.active.has( ".ui-menu" ).length ) {
+                       this.collapseAll( event, true );
+               }
+               this._trigger( "select", event, ui );
+       },
+
+       _filterMenuItems: function( character ) {
+               var escapedCharacter = character.replace( /[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&" ),
+                       regex = new RegExp( "^" + escapedCharacter, "i" );
+
+               return this.activeMenu
+                       .find( this.options.items )
+
+                               // Only match on items, not dividers or other content (#10571)
+                               .filter( ".ui-menu-item" )
+                                       .filter( function() {
+                                               return regex.test(
+                                                       $.trim( $( this ).children( ".ui-menu-item-wrapper" ).text() ) );
+                                       } );
+       }
+} );
+
+
+/*!
+ * jQuery UI Autocomplete 1.12.1
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ */
+
+//>>label: Autocomplete
+//>>group: Widgets
+//>>description: Lists suggested words as the user is typing.
+//>>docs: http://api.jqueryui.com/autocomplete/
+//>>demos: http://jqueryui.com/autocomplete/
+//>>css.structure: ../../themes/base/core.css
+//>>css.structure: ../../themes/base/autocomplete.css
+//>>css.theme: ../../themes/base/theme.css
+
+
+
+$.widget( "ui.autocomplete", {
+       version: "1.12.1",
+       defaultElement: "<input>",
+       options: {
+               appendTo: null,
+               autoFocus: false,
+               delay: 300,
+               minLength: 1,
+               position: {
+                       my: "left top",
+                       at: "left bottom",
+                       collision: "none"
+               },
+               source: null,
+
+               // Callbacks
+               change: null,
+               close: null,
+               focus: null,
+               open: null,
+               response: null,
+               search: null,
+               select: null
+       },
+
+       requestIndex: 0,
+       pending: 0,
+
+       _create: function() {
+
+               // Some browsers only repeat keydown events, not keypress events,
+               // so we use the suppressKeyPress flag to determine if we've already
+               // handled the keydown event. #7269
+               // Unfortunately the code for & in keypress is the same as the up arrow,
+               // so we use the suppressKeyPressRepeat flag to avoid handling keypress
+               // events when we know the keydown event was used to modify the
+               // search term. #7799
+               var suppressKeyPress, suppressKeyPressRepeat, suppressInput,
+                       nodeName = this.element[ 0 ].nodeName.toLowerCase(),
+                       isTextarea = nodeName === "textarea",
+                       isInput = nodeName === "input";
+
+               // Textareas are always multi-line
+               // Inputs are always single-line, even if inside a contentEditable element
+               // IE also treats inputs as contentEditable
+               // All other element types are determined by whether or not they're contentEditable
+               this.isMultiLine = isTextarea || !isInput && this._isContentEditable( this.element );
+
+               this.valueMethod = this.element[ isTextarea || isInput ? "val" : "text" ];
+               this.isNewMenu = true;
+
+               this._addClass( "ui-autocomplete-input" );
+               this.element.attr( "autocomplete", "off" );
+
+               this._on( this.element, {
+                       keydown: function( event ) {
+                               if ( this.element.prop( "readOnly" ) ) {
+                                       suppressKeyPress = true;
+                                       suppressInput = true;
+                                       suppressKeyPressRepeat = true;
+                                       return;
+                               }
+
+                               suppressKeyPress = false;
+                               suppressInput = false;
+                               suppressKeyPressRepeat = false;
+                               var keyCode = $.ui.keyCode;
+                               switch ( event.keyCode ) {
+                               case keyCode.PAGE_UP:
+                                       suppressKeyPress = true;
+                                       this._move( "previousPage", event );
+                                       break;
+                               case keyCode.PAGE_DOWN:
+                                       suppressKeyPress = true;
+                                       this._move( "nextPage", event );
+                                       break;
+                               case keyCode.UP:
+                                       suppressKeyPress = true;
+                                       this._keyEvent( "previous", event );
+                                       break;
+                               case keyCode.DOWN:
+                                       suppressKeyPress = true;
+                                       this._keyEvent( "next", event );
+                                       break;
+                               case keyCode.ENTER:
+
+                                       // when menu is open and has focus
+                                       if ( this.menu.active ) {
+
+                                               // #6055 - Opera still allows the keypress to occur
+                                               // which causes forms to submit
+                                               suppressKeyPress = true;
+                                               event.preventDefault();
+                                               this.menu.select( event );
+                                       }
+                                       break;
+                               case keyCode.TAB:
+                                       if ( this.menu.active ) {
+                                               this.menu.select( event );
+                                       }
+                                       break;
+                               case keyCode.ESCAPE:
+                                       if ( this.menu.element.is( ":visible" ) ) {
+                                               if ( !this.isMultiLine ) {
+                                                       this._value( this.term );
+                                               }
+                                               this.close( event );
+
+                                               // Different browsers have different default behavior for escape
+                                               // Single press can mean undo or clear
+                                               // Double press in IE means clear the whole form
+                                               event.preventDefault();
+                                       }
+                                       break;
+                               default:
+                                       suppressKeyPressRepeat = true;
+
+                                       // search timeout should be triggered before the input value is changed
+                                       this._searchTimeout( event );
+                                       break;
+                               }
+                       },
+                       keypress: function( event ) {
+                               if ( suppressKeyPress ) {
+                                       suppressKeyPress = false;
+                                       if ( !this.isMultiLine || this.menu.element.is( ":visible" ) ) {
+                                               event.preventDefault();
+                                       }
+                                       return;
+                               }
+                               if ( suppressKeyPressRepeat ) {
+                                       return;
+                               }
+
+                               // Replicate some key handlers to allow them to repeat in Firefox and Opera
+                               var keyCode = $.ui.keyCode;
+                               switch ( event.keyCode ) {
+                               case keyCode.PAGE_UP:
+                                       this._move( "previousPage", event );
+                                       break;
+                               case keyCode.PAGE_DOWN:
+                                       this._move( "nextPage", event );
+                                       break;
+                               case keyCode.UP:
+                                       this._keyEvent( "previous", event );
+                                       break;
+                               case keyCode.DOWN:
+                                       this._keyEvent( "next", event );
+                                       break;
+                               }
+                       },
+                       input: function( event ) {
+                               if ( suppressInput ) {
+                                       suppressInput = false;
+                                       event.preventDefault();
+                                       return;
+                               }
+                               this._searchTimeout( event );
+                       },
+                       focus: function() {
+                               this.selectedItem = null;
+                               this.previous = this._value();
+                       },
+                       blur: function( event ) {
+                               if ( this.cancelBlur ) {
+                                       delete this.cancelBlur;
+                                       return;
+                               }
+
+                               clearTimeout( this.searching );
+                               this.close( event );
+                               this._change( event );
+                       }
+               } );
+
+               this._initSource();
+               this.menu = $( "<ul>" )
+                       .appendTo( this._appendTo() )
+                       .menu( {
+
+                               // disable ARIA support, the live region takes care of that
+                               role: null
+                       } )
+                       .hide()
+                       .menu( "instance" );
+
+               this._addClass( this.menu.element, "ui-autocomplete", "ui-front" );
+               this._on( this.menu.element, {
+                       mousedown: function( event ) {
+
+                               // prevent moving focus out of the text field
+                               event.preventDefault();
+
+                               // IE doesn't prevent moving focus even with event.preventDefault()
+                               // so we set a flag to know when we should ignore the blur event
+                               this.cancelBlur = true;
+                               this._delay( function() {
+                                       delete this.cancelBlur;
+
+                                       // Support: IE 8 only
+                                       // Right clicking a menu item or selecting text from the menu items will
+                                       // result in focus moving out of the input. However, we've already received
+                                       // and ignored the blur event because of the cancelBlur flag set above. So
+                                       // we restore focus to ensure that the menu closes properly based on the user's
+                                       // next actions.
+                                       if ( this.element[ 0 ] !== $.ui.safeActiveElement( this.document[ 0 ] ) ) {
+                                               this.element.trigger( "focus" );
+                                       }
+                               } );
+                       },
+                       menufocus: function( event, ui ) {
+                               var label, item;
+
+                               // support: Firefox
+                               // Prevent accidental activation of menu items in Firefox (#7024 #9118)
+                               if ( this.isNewMenu ) {
+                                       this.isNewMenu = false;
+                                       if ( event.originalEvent && /^mouse/.test( event.originalEvent.type ) ) {
+                                               this.menu.blur();
+
+                                               this.document.one( "mousemove", function() {
+                                                       $( event.target ).trigger( event.originalEvent );
+                                               } );
+
+                                               return;
+                                       }
+                               }
+
+                               item = ui.item.data( "ui-autocomplete-item" );
+                               if ( false !== this._trigger( "focus", event, { item: item } ) ) {
+
+                                       // use value to match what will end up in the input, if it was a key event
+                                       if ( event.originalEvent && /^key/.test( event.originalEvent.type ) ) {
+                                               this._value( item.value );
+                                       }
+                               }
+
+                               // Announce the value in the liveRegion
+                               label = ui.item.attr( "aria-label" ) || item.value;
+                               if ( label && $.trim( label ).length ) {
+                                       this.liveRegion.children().hide();
+                                       $( "<div>" ).text( label ).appendTo( this.liveRegion );
+                               }
+                       },
+                       menuselect: function( event, ui ) {
+                               var item = ui.item.data( "ui-autocomplete-item" ),
+                                       previous = this.previous;
+
+                               // Only trigger when focus was lost (click on menu)
+                               if ( this.element[ 0 ] !== $.ui.safeActiveElement( this.document[ 0 ] ) ) {
+                                       this.element.trigger( "focus" );
+                                       this.previous = previous;
+
+                                       // #6109 - IE triggers two focus events and the second
+                                       // is asynchronous, so we need to reset the previous
+                                       // term synchronously and asynchronously :-(
+                                       this._delay( function() {
+                                               this.previous = previous;
+                                               this.selectedItem = item;
+                                       } );
+                               }
+
+                               if ( false !== this._trigger( "select", event, { item: item } ) ) {
+                                       this._value( item.value );
+                               }
+
+                               // reset the term after the select event
+                               // this allows custom select handling to work properly
+                               this.term = this._value();
+
+                               this.close( event );
+                               this.selectedItem = item;
+                       }
+               } );
+
+               this.liveRegion = $( "<div>", {
+                       role: "status",
+                       "aria-live": "assertive",
+                       "aria-relevant": "additions"
+               } )
+                       .appendTo( this.document[ 0 ].body );
+
+               this._addClass( this.liveRegion, null, "ui-helper-hidden-accessible" );
+
+               // Turning off autocomplete prevents the browser from remembering the
+               // value when navigating through history, so we re-enable autocomplete
+               // if the page is unloaded before the widget is destroyed. #7790
+               this._on( this.window, {
+                       beforeunload: function() {
+                               this.element.removeAttr( "autocomplete" );
+                       }
+               } );
+       },
+
+       _destroy: function() {
+               clearTimeout( this.searching );
+               this.element.removeAttr( "autocomplete" );
+               this.menu.element.remove();
+               this.liveRegion.remove();
+       },
+
+       _setOption: function( key, value ) {
+               this._super( key, value );
+               if ( key === "source" ) {
+                       this._initSource();
+               }
+               if ( key === "appendTo" ) {
+                       this.menu.element.appendTo( this._appendTo() );
+               }
+               if ( key === "disabled" && value && this.xhr ) {
+                       this.xhr.abort();
+               }
+       },
+
+       _isEventTargetInWidget: function( event ) {
+               var menuElement = this.menu.element[ 0 ];
+
+               return event.target === this.element[ 0 ] ||
+                       event.target === menuElement ||
+                       $.contains( menuElement, event.target );
+       },
+
+       _closeOnClickOutside: function( event ) {
+               if ( !this._isEventTargetInWidget( event ) ) {
+                       this.close();
+               }
+       },
+
+       _appendTo: function() {
+               var element = this.options.appendTo;
+
+               if ( element ) {
+                       element = element.jquery || element.nodeType ?
+                               $( element ) :
+                               this.document.find( element ).eq( 0 );
+               }
+
+               if ( !element || !element[ 0 ] ) {
+                       element = this.element.closest( ".ui-front, dialog" );
+               }
+
+               if ( !element.length ) {
+                       element = this.document[ 0 ].body;
+               }
+
+               return element;
+       },
+
+       _initSource: function() {
+               var array, url,
+                       that = this;
+               if ( $.isArray( this.options.source ) ) {
+                       array = this.options.source;
+                       this.source = function( request, response ) {
+                               response( $.ui.autocomplete.filter( array, request.term ) );
+                       };
+               } else if ( typeof this.options.source === "string" ) {
+                       url = this.options.source;
+                       this.source = function( request, response ) {
+                               if ( that.xhr ) {
+                                       that.xhr.abort();
+                               }
+                               that.xhr = $.ajax( {
+                                       url: url,
+                                       data: request,
+                                       dataType: "json",
+                                       success: function( data ) {
+                                               response( data );
+                                       },
+                                       error: function() {
+                                               response( [] );
+                                       }
+                               } );
+                       };
+               } else {
+                       this.source = this.options.source;
+               }
+       },
+
+       _searchTimeout: function( event ) {
+               clearTimeout( this.searching );
+               this.searching = this._delay( function() {
+
+                       // Search if the value has changed, or if the user retypes the same value (see #7434)
+                       var equalValues = this.term === this._value(),
+                               menuVisible = this.menu.element.is( ":visible" ),
+                               modifierKey = event.altKey || event.ctrlKey || event.metaKey || event.shiftKey;
+
+                       if ( !equalValues || ( equalValues && !menuVisible && !modifierKey ) ) {
+                               this.selectedItem = null;
+                               this.search( null, event );
+                       }
+               }, this.options.delay );
+       },
+
+       search: function( value, event ) {
+               value = value != null ? value : this._value();
+
+               // Always save the actual value, not the one passed as an argument
+               this.term = this._value();
+
+               if ( value.length < this.options.minLength ) {
+                       return this.close( event );
+               }
+
+               if ( this._trigger( "search", event ) === false ) {
+                       return;
+               }
+
+               return this._search( value );
+       },
+
+       _search: function( value ) {
+               this.pending++;
+               this._addClass( "ui-autocomplete-loading" );
+               this.cancelSearch = false;
+
+               this.source( { term: value }, this._response() );
+       },
+
+       _response: function() {
+               var index = ++this.requestIndex;
+
+               return $.proxy( function( content ) {
+                       if ( index === this.requestIndex ) {
+                               this.__response( content );
+                       }
+
+                       this.pending--;
+                       if ( !this.pending ) {
+                               this._removeClass( "ui-autocomplete-loading" );
+                       }
+               }, this );
+       },
+
+       __response: function( content ) {
+               if ( content ) {
+                       content = this._normalize( content );
+               }
+               this._trigger( "response", null, { content: content } );
+               if ( !this.options.disabled && content && content.length && !this.cancelSearch ) {
+                       this._suggest( content );
+                       this._trigger( "open" );
+               } else {
+
+                       // use ._close() instead of .close() so we don't cancel future searches
+                       this._close();
+               }
+       },
+
+       close: function( event ) {
+               this.cancelSearch = true;
+               this._close( event );
+       },
+
+       _close: function( event ) {
+
+               // Remove the handler that closes the menu on outside clicks
+               this._off( this.document, "mousedown" );
+
+               if ( this.menu.element.is( ":visible" ) ) {
+                       this.menu.element.hide();
+                       this.menu.blur();
+                       this.isNewMenu = true;
+                       this._trigger( "close", event );
+               }
+       },
+
+       _change: function( event ) {
+               if ( this.previous !== this._value() ) {
+                       this._trigger( "change", event, { item: this.selectedItem } );
+               }
+       },
+
+       _normalize: function( items ) {
+
+               // assume all items have the right format when the first item is complete
+               if ( items.length && items[ 0 ].label && items[ 0 ].value ) {
+                       return items;
+               }
+               return $.map( items, function( item ) {
+                       if ( typeof item === "string" ) {
+                               return {
+                                       label: item,
+                                       value: item
+                               };
+                       }
+                       return $.extend( {}, item, {
+                               label: item.label || item.value,
+                               value: item.value || item.label
+                       } );
+               } );
+       },
+
+       _suggest: function( items ) {
+               var ul = this.menu.element.empty();
+               this._renderMenu( ul, items );
+               this.isNewMenu = true;
+               this.menu.refresh();
+
+               // Size and position menu
+               ul.show();
+               this._resizeMenu();
+               ul.position( $.extend( {
+                       of: this.element
+               }, this.options.position ) );
+
+               if ( this.options.autoFocus ) {
+                       this.menu.next();
+               }
+
+               // Listen for interactions outside of the widget (#6642)
+               this._on( this.document, {
+                       mousedown: "_closeOnClickOutside"
+               } );
+       },
+
+       _resizeMenu: function() {
+               var ul = this.menu.element;
+               ul.outerWidth( Math.max(
+
+                       // Firefox wraps long text (possibly a rounding bug)
+                       // so we add 1px to avoid the wrapping (#7513)
+                       ul.width( "" ).outerWidth() + 1,
+                       this.element.outerWidth()
+               ) );
+       },
+
+       _renderMenu: function( ul, items ) {
+               var that = this;
+               $.each( items, function( index, item ) {
+                       that._renderItemData( ul, item );
+               } );
+       },
+
+       _renderItemData: function( ul, item ) {
+               return this._renderItem( ul, item ).data( "ui-autocomplete-item", item );
+       },
+
+       _renderItem: function( ul, item ) {
+               return $( "<li>" )
+                       .append( $( "<div>" ).text( item.label ) )
+                       .appendTo( ul );
+       },
+
+       _move: function( direction, event ) {
+               if ( !this.menu.element.is( ":visible" ) ) {
+                       this.search( null, event );
+                       return;
+               }
+               if ( this.menu.isFirstItem() && /^previous/.test( direction ) ||
+                               this.menu.isLastItem() && /^next/.test( direction ) ) {
+
+                       if ( !this.isMultiLine ) {
+                               this._value( this.term );
+                       }
+
+                       this.menu.blur();
+                       return;
+               }
+               this.menu[ direction ]( event );
+       },
+
+       widget: function() {
+               return this.menu.element;
+       },
+
+       _value: function() {
+               return this.valueMethod.apply( this.element, arguments );
+       },
+
+       _keyEvent: function( keyEvent, event ) {
+               if ( !this.isMultiLine || this.menu.element.is( ":visible" ) ) {
+                       this._move( keyEvent, event );
+
+                       // Prevents moving cursor to beginning/end of the text field in some browsers
+                       event.preventDefault();
+               }
+       },
+
+       // Support: Chrome <=50
+       // We should be able to just use this.element.prop( "isContentEditable" )
+       // but hidden elements always report false in Chrome.
+       // https://code.google.com/p/chromium/issues/detail?id=313082
+       _isContentEditable: function( element ) {
+               if ( !element.length ) {
+                       return false;
+               }
+
+               var editable = element.prop( "contentEditable" );
+
+               if ( editable === "inherit" ) {
+                 return this._isContentEditable( element.parent() );
+               }
+
+               return editable === "true";
+       }
+} );
+
+$.extend( $.ui.autocomplete, {
+       escapeRegex: function( value ) {
+               return value.replace( /[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&" );
+       },
+       filter: function( array, term ) {
+               var matcher = new RegExp( $.ui.autocomplete.escapeRegex( term ), "i" );
+               return $.grep( array, function( value ) {
+                       return matcher.test( value.label || value.value || value );
+               } );
+       }
+} );
+
+// Live region extension, adding a `messages` option
+// NOTE: This is an experimental API. We are still investigating
+// a full solution for string manipulation and internationalization.
+$.widget( "ui.autocomplete", $.ui.autocomplete, {
+       options: {
+               messages: {
+                       noResults: "No search results.",
+                       results: function( amount ) {
+                               return amount + ( amount > 1 ? " results are" : " result is" ) +
+                                       " available, use up and down arrow keys to navigate.";
+                       }
+               }
+       },
+
+       __response: function( content ) {
+               var message;
+               this._superApply( arguments );
+               if ( this.options.disabled || this.cancelSearch ) {
+                       return;
+               }
+               if ( content && content.length ) {
+                       message = this.options.messages.results( content.length );
+               } else {
+                       message = this.options.messages.noResults;
+               }
+               this.liveRegion.children().hide();
+               $( "<div>" ).text( message ).appendTo( this.liveRegion );
+       }
+} );
+
+var widgetsAutocomplete = $.ui.autocomplete;
+
+
+/*!
+ * jQuery UI Controlgroup 1.12.1
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ */
+
+//>>label: Controlgroup
+//>>group: Widgets
+//>>description: Visually groups form control widgets
+//>>docs: http://api.jqueryui.com/controlgroup/
+//>>demos: http://jqueryui.com/controlgroup/
+//>>css.structure: ../../themes/base/core.css
+//>>css.structure: ../../themes/base/controlgroup.css
+//>>css.theme: ../../themes/base/theme.css
+
+
+var controlgroupCornerRegex = /ui-corner-([a-z]){2,6}/g;
+
+var widgetsControlgroup = $.widget( "ui.controlgroup", {
+       version: "1.12.1",
+       defaultElement: "<div>",
+       options: {
+               direction: "horizontal",
+               disabled: null,
+               onlyVisible: true,
+               items: {
+                       "button": "input[type=button], input[type=submit], input[type=reset], button, a",
+                       "controlgroupLabel": ".ui-controlgroup-label",
+                       "checkboxradio": "input[type='checkbox'], input[type='radio']",
+                       "selectmenu": "select",
+                       "spinner": ".ui-spinner-input"
+               }
+       },
+
+       _create: function() {
+               this._enhance();
+       },
+
+       // To support the enhanced option in jQuery Mobile, we isolate DOM manipulation
+       _enhance: function() {
+               this.element.attr( "role", "toolbar" );
+               this.refresh();
+       },
+
+       _destroy: function() {
+               this._callChildMethod( "destroy" );
+               this.childWidgets.removeData( "ui-controlgroup-data" );
+               this.element.removeAttr( "role" );
+               if ( this.options.items.controlgroupLabel ) {
+                       this.element
+                               .find( this.options.items.controlgroupLabel )
+                               .find( ".ui-controlgroup-label-contents" )
+                               .contents().unwrap();
+               }
+       },
+
+       _initWidgets: function() {
+               var that = this,
+                       childWidgets = [];
+
+               // First we iterate over each of the items options
+               $.each( this.options.items, function( widget, selector ) {
+                       var labels;
+                       var options = {};
+
+                       // Make sure the widget has a selector set
+                       if ( !selector ) {
+                               return;
+                       }
+
+                       if ( widget === "controlgroupLabel" ) {
+                               labels = that.element.find( selector );
+                               labels.each( function() {
+                                       var element = $( this );
+
+                                       if ( element.children( ".ui-controlgroup-label-contents" ).length ) {
+                                               return;
+                                       }
+                                       element.contents()
+                                               .wrapAll( "<span class='ui-controlgroup-label-contents'></span>" );
+                               } );
+                               that._addClass( labels, null, "ui-widget ui-widget-content ui-state-default" );
+                               childWidgets = childWidgets.concat( labels.get() );
+                               return;
+                       }
+
+                       // Make sure the widget actually exists
+                       if ( !$.fn[ widget ] ) {
+                               return;
+                       }
+
+                       // We assume everything is in the middle to start because we can't determine
+                       // first / last elements until all enhancments are done.
+                       if ( that[ "_" + widget + "Options" ] ) {
+                               options = that[ "_" + widget + "Options" ]( "middle" );
+                       } else {
+                               options = { classes: {} };
+                       }
+
+                       // Find instances of this widget inside controlgroup and init them
+                       that.element
+                               .find( selector )
+                               .each( function() {
+                                       var element = $( this );
+                                       var instance = element[ widget ]( "instance" );
+
+                                       // We need to clone the default options for this type of widget to avoid
+                                       // polluting the variable options which has a wider scope than a single widget.
+                                       var instanceOptions = $.widget.extend( {}, options );
+
+                                       // If the button is the child of a spinner ignore it
+                                       // TODO: Find a more generic solution
+                                       if ( widget === "button" && element.parent( ".ui-spinner" ).length ) {
+                                               return;
+                                       }
+
+                                       // Create the widget if it doesn't exist
+                                       if ( !instance ) {
+                                               instance = element[ widget ]()[ widget ]( "instance" );
+                                       }
+                                       if ( instance ) {
+                                               instanceOptions.classes =
+                                                       that._resolveClassesValues( instanceOptions.classes, instance );
+                                       }
+                                       element[ widget ]( instanceOptions );
+
+                                       // Store an instance of the controlgroup to be able to reference
+                                       // from the outermost element for changing options and refresh
+                                       var widgetElement = element[ widget ]( "widget" );
+                                       $.data( widgetElement[ 0 ], "ui-controlgroup-data",
+                                               instance ? instance : element[ widget ]( "instance" ) );
+
+                                       childWidgets.push( widgetElement[ 0 ] );
+                               } );
+               } );
+
+               this.childWidgets = $( $.unique( childWidgets ) );
+               this._addClass( this.childWidgets, "ui-controlgroup-item" );
+       },
+
+       _callChildMethod: function( method ) {
+               this.childWidgets.each( function() {
+                       var element = $( this ),
+                               data = element.data( "ui-controlgroup-data" );
+                       if ( data && data[ method ] ) {
+                               data[ method ]();
+                       }
+               } );
+       },
+
+       _updateCornerClass: function( element, position ) {
+               var remove = "ui-corner-top ui-corner-bottom ui-corner-left ui-corner-right ui-corner-all";
+               var add = this._buildSimpleOptions( position, "label" ).classes.label;
+
+               this._removeClass( element, null, remove );
+               this._addClass( element, null, add );
+       },
+
+       _buildSimpleOptions: function( position, key ) {
+               var direction = this.options.direction === "vertical";
+               var result = {
+                       classes: {}
+               };
+               result.classes[ key ] = {
+                       "middle": "",
+                       "first": "ui-corner-" + ( direction ? "top" : "left" ),
+                       "last": "ui-corner-" + ( direction ? "bottom" : "right" ),
+                       "only": "ui-corner-all"
+               }[ position ];
+
+               return result;
+       },
+
+       _spinnerOptions: function( position ) {
+               var options = this._buildSimpleOptions( position, "ui-spinner" );
+
+               options.classes[ "ui-spinner-up" ] = "";
+               options.classes[ "ui-spinner-down" ] = "";
+
+               return options;
+       },
+
+       _buttonOptions: function( position ) {
+               return this._buildSimpleOptions( position, "ui-button" );
+       },
+
+       _checkboxradioOptions: function( position ) {
+               return this._buildSimpleOptions( position, "ui-checkboxradio-label" );
+       },
+
+       _selectmenuOptions: function( position ) {
+               var direction = this.options.direction === "vertical";
+               return {
+                       width: direction ? "auto" : false,
+                       classes: {
+                               middle: {
+                                       "ui-selectmenu-button-open": "",
+                                       "ui-selectmenu-button-closed": ""
+                               },
+                               first: {
+                                       "ui-selectmenu-button-open": "ui-corner-" + ( direction ? "top" : "tl" ),
+                                       "ui-selectmenu-button-closed": "ui-corner-" + ( direction ? "top" : "left" )
+                               },
+                               last: {
+                                       "ui-selectmenu-button-open": direction ? "" : "ui-corner-tr",
+                                       "ui-selectmenu-button-closed": "ui-corner-" + ( direction ? "bottom" : "right" )
+                               },
+                               only: {
+                                       "ui-selectmenu-button-open": "ui-corner-top",
+                                       "ui-selectmenu-button-closed": "ui-corner-all"
+                               }
+
+                       }[ position ]
+               };
+       },
+
+       _resolveClassesValues: function( classes, instance ) {
+               var result = {};
+               $.each( classes, function( key ) {
+                       var current = instance.options.classes[ key ] || "";
+                       current = $.trim( current.replace( controlgroupCornerRegex, "" ) );
+                       result[ key ] = ( current + " " + classes[ key ] ).replace( /\s+/g, " " );
+               } );
+               return result;
+       },
+
+       _setOption: function( key, value ) {
+               if ( key === "direction" ) {
+                       this._removeClass( "ui-controlgroup-" + this.options.direction );
+               }
+
+               this._super( key, value );
+               if ( key === "disabled" ) {
+                       this._callChildMethod( value ? "disable" : "enable" );
+                       return;
+               }
+
+               this.refresh();
+       },
+
+       refresh: function() {
+               var children,
+                       that = this;
+
+               this._addClass( "ui-controlgroup ui-controlgroup-" + this.options.direction );
+
+               if ( this.options.direction === "horizontal" ) {
+                       this._addClass( null, "ui-helper-clearfix" );
+               }
+               this._initWidgets();
+
+               children = this.childWidgets;
+
+               // We filter here because we need to track all childWidgets not just the visible ones
+               if ( this.options.onlyVisible ) {
+                       children = children.filter( ":visible" );
+               }
+
+               if ( children.length ) {
+
+                       // We do this last because we need to make sure all enhancment is done
+                       // before determining first and last
+                       $.each( [ "first", "last" ], function( index, value ) {
+                               var instance = children[ value ]().data( "ui-controlgroup-data" );
+
+                               if ( instance && that[ "_" + instance.widgetName + "Options" ] ) {
+                                       var options = that[ "_" + instance.widgetName + "Options" ](
+                                               children.length === 1 ? "only" : value
+                                       );
+                                       options.classes = that._resolveClassesValues( options.classes, instance );
+                                       instance.element[ instance.widgetName ]( options );
+                               } else {
+                                       that._updateCornerClass( children[ value ](), value );
+                               }
+                       } );
+
+                       // Finally call the refresh method on each of the child widgets.
+                       this._callChildMethod( "refresh" );
+               }
+       }
+} );
+
+/*!
+ * jQuery UI Checkboxradio 1.12.1
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ */
+
+//>>label: Checkboxradio
+//>>group: Widgets
+//>>description: Enhances a form with multiple themeable checkboxes or radio buttons.
+//>>docs: http://api.jqueryui.com/checkboxradio/
+//>>demos: http://jqueryui.com/checkboxradio/
+//>>css.structure: ../../themes/base/core.css
+//>>css.structure: ../../themes/base/button.css
+//>>css.structure: ../../themes/base/checkboxradio.css
+//>>css.theme: ../../themes/base/theme.css
+
+
+
+$.widget( "ui.checkboxradio", [ $.ui.formResetMixin, {
+       version: "1.12.1",
+       options: {
+               disabled: null,
+               label: null,
+               icon: true,
+               classes: {
+                       "ui-checkboxradio-label": "ui-corner-all",
+                       "ui-checkboxradio-icon": "ui-corner-all"
+               }
+       },
+
+       _getCreateOptions: function() {
+               var disabled, labels;
+               var that = this;
+               var options = this._super() || {};
+
+               // We read the type here, because it makes more sense to throw a element type error first,
+               // rather then the error for lack of a label. Often if its the wrong type, it
+               // won't have a label (e.g. calling on a div, btn, etc)
+               this._readType();
+
+               labels = this.element.labels();
+
+               // If there are multiple labels, use the last one
+               this.label = $( labels[ labels.length - 1 ] );
+               if ( !this.label.length ) {
+                       $.error( "No label found for checkboxradio widget" );
+               }
+
+               this.originalLabel = "";
+
+               // We need to get the label text but this may also need to make sure it does not contain the
+               // input itself.
+               this.label.contents().not( this.element[ 0 ] ).each( function() {
+
+                       // The label contents could be text, html, or a mix. We concat each element to get a
+                       // string representation of the label, without the input as part of it.
+                       that.originalLabel += this.nodeType === 3 ? $( this ).text() : this.outerHTML;
+               } );
+
+               // Set the label option if we found label text
+               if ( this.originalLabel ) {
+                       options.label = this.originalLabel;
+               }
+
+               disabled = this.element[ 0 ].disabled;
+               if ( disabled != null ) {
+                       options.disabled = disabled;
+               }
+               return options;
+       },
+
+       _create: function() {
+               var checked = this.element[ 0 ].checked;
+
+               this._bindFormResetHandler();
+
+               if ( this.options.disabled == null ) {
+                       this.options.disabled = this.element[ 0 ].disabled;
+               }
+
+               this._setOption( "disabled", this.options.disabled );
+               this._addClass( "ui-checkboxradio", "ui-helper-hidden-accessible" );
+               this._addClass( this.label, "ui-checkboxradio-label", "ui-button ui-widget" );
+
+               if ( this.type === "radio" ) {
+                       this._addClass( this.label, "ui-checkboxradio-radio-label" );
+               }
+
+               if ( this.options.label && this.options.label !== this.originalLabel ) {
+                       this._updateLabel();
+               } else if ( this.originalLabel ) {
+                       this.options.label = this.originalLabel;
+               }
+
+               this._enhance();
+
+               if ( checked ) {
+                       this._addClass( this.label, "ui-checkboxradio-checked", "ui-state-active" );
+                       if ( this.icon ) {
+                               this._addClass( this.icon, null, "ui-state-hover" );
+                       }
+               }
+
+               this._on( {
+                       change: "_toggleClasses",
+                       focus: function() {
+                               this._addClass( this.label, null, "ui-state-focus ui-visual-focus" );
+                       },
+                       blur: function() {
+                               this._removeClass( this.label, null, "ui-state-focus ui-visual-focus" );
+                       }
+               } );
+       },
+
+       _readType: function() {
+               var nodeName = this.element[ 0 ].nodeName.toLowerCase();
+               this.type = this.element[ 0 ].type;
+               if ( nodeName !== "input" || !/radio|checkbox/.test( this.type ) ) {
+                       $.error( "Can't create checkboxradio on element.nodeName=" + nodeName +
+                               " and element.type=" + this.type );
+               }
+       },
+
+       // Support jQuery Mobile enhanced option
+       _enhance: function() {
+               this._updateIcon( this.element[ 0 ].checked );
+       },
+
+       widget: function() {
+               return this.label;
+       },
+
+       _getRadioGroup: function() {
+               var group;
+               var name = this.element[ 0 ].name;
+               var nameSelector = "input[name='" + $.ui.escapeSelector( name ) + "']";
+
+               if ( !name ) {
+                       return $( [] );
+               }
+
+               if ( this.form.length ) {
+                       group = $( this.form[ 0 ].elements ).filter( nameSelector );
+               } else {
+
+                       // Not inside a form, check all inputs that also are not inside a form
+                       group = $( nameSelector ).filter( function() {
+                               return $( this ).form().length === 0;
+                       } );
+               }
+
+               return group.not( this.element );
+       },
+
+       _toggleClasses: function() {
+               var checked = this.element[ 0 ].checked;
+               this._toggleClass( this.label, "ui-checkboxradio-checked", "ui-state-active", checked );
+
+               if ( this.options.icon && this.type === "checkbox" ) {
+                       this._toggleClass( this.icon, null, "ui-icon-check ui-state-checked", checked )
+                               ._toggleClass( this.icon, null, "ui-icon-blank", !checked );
+               }
+
+               if ( this.type === "radio" ) {
+                       this._getRadioGroup()
+                               .each( function() {
+                                       var instance = $( this ).checkboxradio( "instance" );
+
+                                       if ( instance ) {
+                                               instance._removeClass( instance.label,
+                                                       "ui-checkboxradio-checked", "ui-state-active" );
+                                       }
+                               } );
+               }
+       },
+
+       _destroy: function() {
+               this._unbindFormResetHandler();
+
+               if ( this.icon ) {
+                       this.icon.remove();
+                       this.iconSpace.remove();
+               }
+       },
+
+       _setOption: function( key, value ) {
+
+               // We don't allow the value to be set to nothing
+               if ( key === "label" && !value ) {
+                       return;
+               }
+
+               this._super( key, value );
+
+               if ( key === "disabled" ) {
+                       this._toggleClass( this.label, null, "ui-state-disabled", value );
+                       this.element[ 0 ].disabled = value;
+
+                       // Don't refresh when setting disabled
+                       return;
+               }
+               this.refresh();
+       },
+
+       _updateIcon: function( checked ) {
+               var toAdd = "ui-icon ui-icon-background ";
+
+               if ( this.options.icon ) {
+                       if ( !this.icon ) {
+                               this.icon = $( "<span>" );
+                               this.iconSpace = $( "<span> </span>" );
+                               this._addClass( this.iconSpace, "ui-checkboxradio-icon-space" );
+                       }
+
+                       if ( this.type === "checkbox" ) {
+                               toAdd += checked ? "ui-icon-check ui-state-checked" : "ui-icon-blank";
+                               this._removeClass( this.icon, null, checked ? "ui-icon-blank" : "ui-icon-check" );
+                       } else {
+                               toAdd += "ui-icon-blank";
+                       }
+                       this._addClass( this.icon, "ui-checkboxradio-icon", toAdd );
+                       if ( !checked ) {
+                               this._removeClass( this.icon, null, "ui-icon-check ui-state-checked" );
+                       }
+                       this.icon.prependTo( this.label ).after( this.iconSpace );
+               } else if ( this.icon !== undefined ) {
+                       this.icon.remove();
+                       this.iconSpace.remove();
+                       delete this.icon;
+               }
+       },
+
+       _updateLabel: function() {
+
+               // Remove the contents of the label ( minus the icon, icon space, and input )
+               var contents = this.label.contents().not( this.element[ 0 ] );
+               if ( this.icon ) {
+                       contents = contents.not( this.icon[ 0 ] );
+               }
+               if ( this.iconSpace ) {
+                       contents = contents.not( this.iconSpace[ 0 ] );
+               }
+               contents.remove();
+
+               this.label.append( this.options.label );
+       },
+
+       refresh: function() {
+               var checked = this.element[ 0 ].checked,
+                       isDisabled = this.element[ 0 ].disabled;
+
+               this._updateIcon( checked );
+               this._toggleClass( this.label, "ui-checkboxradio-checked", "ui-state-active", checked );
+               if ( this.options.label !== null ) {
+                       this._updateLabel();
+               }
+
+               if ( isDisabled !== this.options.disabled ) {
+                       this._setOptions( { "disabled": isDisabled } );
+               }
+       }
+
+} ] );
+
+var widgetsCheckboxradio = $.ui.checkboxradio;
+
+
+/*!
+ * jQuery UI Button 1.12.1
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ */
+
+//>>label: Button
+//>>group: Widgets
+//>>description: Enhances a form with themeable buttons.
+//>>docs: http://api.jqueryui.com/button/
+//>>demos: http://jqueryui.com/button/
+//>>css.structure: ../../themes/base/core.css
+//>>css.structure: ../../themes/base/button.css
+//>>css.theme: ../../themes/base/theme.css
+
+
+
+$.widget( "ui.button", {
+       version: "1.12.1",
+       defaultElement: "<button>",
+       options: {
+               classes: {
+                       "ui-button": "ui-corner-all"
+               },
+               disabled: null,
+               icon: null,
+               iconPosition: "beginning",
+               label: null,
+               showLabel: true
+       },
+
+       _getCreateOptions: function() {
+               var disabled,
+
+                       // This is to support cases like in jQuery Mobile where the base widget does have
+                       // an implementation of _getCreateOptions
+                       options = this._super() || {};
+
+               this.isInput = this.element.is( "input" );
+
+               disabled = this.element[ 0 ].disabled;
+               if ( disabled != null ) {
+                       options.disabled = disabled;
+               }
+
+               this.originalLabel = this.isInput ? this.element.val() : this.element.html();
+               if ( this.originalLabel ) {
+                       options.label = this.originalLabel;
+               }
+
+               return options;
+       },
+
+       _create: function() {
+               if ( !this.option.showLabel & !this.options.icon ) {
+                       this.options.showLabel = true;
+               }
+
+               // We have to check the option again here even though we did in _getCreateOptions,
+               // because null may have been passed on init which would override what was set in
+               // _getCreateOptions
+               if ( this.options.disabled == null ) {
+                       this.options.disabled = this.element[ 0 ].disabled || false;
+               }
+
+               this.hasTitle = !!this.element.attr( "title" );
+
+               // Check to see if the label needs to be set or if its already correct
+               if ( this.options.label && this.options.label !== this.originalLabel ) {
+                       if ( this.isInput ) {
+                               this.element.val( this.options.label );
+                       } else {
+                               this.element.html( this.options.label );
+                       }
+               }
+               this._addClass( "ui-button", "ui-widget" );
+               this._setOption( "disabled", this.options.disabled );
+               this._enhance();
+
+               if ( this.element.is( "a" ) ) {
+                       this._on( {
+                               "keyup": function( event ) {
+                                       if ( event.keyCode === $.ui.keyCode.SPACE ) {
+                                               event.preventDefault();
+
+                                               // Support: PhantomJS <= 1.9, IE 8 Only
+                                               // If a native click is available use it so we actually cause navigation
+                                               // otherwise just trigger a click event
+                                               if ( this.element[ 0 ].click ) {
+                                                       this.element[ 0 ].click();
+                                               } else {
+                                                       this.element.trigger( "click" );
+                                               }
+                                       }
+                               }
+                       } );
+               }
+       },
+
+       _enhance: function() {
+               if ( !this.element.is( "button" ) ) {
+                       this.element.attr( "role", "button" );
+               }
+
+               if ( this.options.icon ) {
+                       this._updateIcon( "icon", this.options.icon );
+                       this._updateTooltip();
+               }
+       },
+
+       _updateTooltip: function() {
+               this.title = this.element.attr( "title" );
+
+               if ( !this.options.showLabel && !this.title ) {
+                       this.element.attr( "title", this.options.label );
+               }
+       },
+
+       _updateIcon: function( option, value ) {
+               var icon = option !== "iconPosition",
+                       position = icon ? this.options.iconPosition : value,
+                       displayBlock = position === "top" || position === "bottom";
+
+               // Create icon
+               if ( !this.icon ) {
+                       this.icon = $( "<span>" );
+
+                       this._addClass( this.icon, "ui-button-icon", "ui-icon" );
+
+                       if ( !this.options.showLabel ) {
+                               this._addClass( "ui-button-icon-only" );
+                       }
+               } else if ( icon ) {
+
+                       // If we are updating the icon remove the old icon class
+                       this._removeClass( this.icon, null, this.options.icon );
+               }
+
+               // If we are updating the icon add the new icon class
+               if ( icon ) {
+                       this._addClass( this.icon, null, value );
+               }
+
+               this._attachIcon( position );
+
+               // If the icon is on top or bottom we need to add the ui-widget-icon-block class and remove
+               // the iconSpace if there is one.
+               if ( displayBlock ) {
+                       this._addClass( this.icon, null, "ui-widget-icon-block" );
+                       if ( this.iconSpace ) {
+                               this.iconSpace.remove();
+                       }
+               } else {
+
+                       // Position is beginning or end so remove the ui-widget-icon-block class and add the
+                       // space if it does not exist
+                       if ( !this.iconSpace ) {
+                               this.iconSpace = $( "<span> </span>" );
+                               this._addClass( this.iconSpace, "ui-button-icon-space" );
+                       }
+                       this._removeClass( this.icon, null, "ui-wiget-icon-block" );
+                       this._attachIconSpace( position );
+               }
+       },
+
+       _destroy: function() {
+               this.element.removeAttr( "role" );
+
+               if ( this.icon ) {
+                       this.icon.remove();
+               }
+               if ( this.iconSpace ) {
+                       this.iconSpace.remove();
+               }
+               if ( !this.hasTitle ) {
+                       this.element.removeAttr( "title" );
+               }
+       },
+
+       _attachIconSpace: function( iconPosition ) {
+               this.icon[ /^(?:end|bottom)/.test( iconPosition ) ? "before" : "after" ]( this.iconSpace );
+       },
+
+       _attachIcon: function( iconPosition ) {
+               this.element[ /^(?:end|bottom)/.test( iconPosition ) ? "append" : "prepend" ]( this.icon );
+       },
+
+       _setOptions: function( options ) {
+               var newShowLabel = options.showLabel === undefined ?
+                               this.options.showLabel :
+                               options.showLabel,
+                       newIcon = options.icon === undefined ? this.options.icon : options.icon;
+
+               if ( !newShowLabel && !newIcon ) {
+                       options.showLabel = true;
+               }
+               this._super( options );
+       },
+
+       _setOption: function( key, value ) {
+               if ( key === "icon" ) {
+                       if ( value ) {
+                               this._updateIcon( key, value );
+                       } else if ( this.icon ) {
+                               this.icon.remove();
+                               if ( this.iconSpace ) {
+                                       this.iconSpace.remove();
+                               }
+                       }
+               }
+
+               if ( key === "iconPosition" ) {
+                       this._updateIcon( key, value );
+               }
+
+               // Make sure we can't end up with a button that has neither text nor icon
+               if ( key === "showLabel" ) {
+                               this._toggleClass( "ui-button-icon-only", null, !value );
+                               this._updateTooltip();
+               }
+
+               if ( key === "label" ) {
+                       if ( this.isInput ) {
+                               this.element.val( value );
+                       } else {
+
+                               // If there is an icon, append it, else nothing then append the value
+                               // this avoids removal of the icon when setting label text
+                               this.element.html( value );
+                               if ( this.icon ) {
+                                       this._attachIcon( this.options.iconPosition );
+                                       this._attachIconSpace( this.options.iconPosition );
+                               }
+                       }
+               }
+
+               this._super( key, value );
+
+               if ( key === "disabled" ) {
+                       this._toggleClass( null, "ui-state-disabled", value );
+                       this.element[ 0 ].disabled = value;
+                       if ( value ) {
+                               this.element.blur();
+                       }
+               }
+       },
+
+       refresh: function() {
+
+               // Make sure to only check disabled if its an element that supports this otherwise
+               // check for the disabled class to determine state
+               var isDisabled = this.element.is( "input, button" ) ?
+                       this.element[ 0 ].disabled : this.element.hasClass( "ui-button-disabled" );
+
+               if ( isDisabled !== this.options.disabled ) {
+                       this._setOptions( { disabled: isDisabled } );
+               }
+
+               this._updateTooltip();
+       }
+} );
+
+// DEPRECATED
+if ( $.uiBackCompat !== false ) {
+
+       // Text and Icons options
+       $.widget( "ui.button", $.ui.button, {
+               options: {
+                       text: true,
+                       icons: {
+                               primary: null,
+                               secondary: null
+                       }
+               },
+
+               _create: function() {
+                       if ( this.options.showLabel && !this.options.text ) {
+                               this.options.showLabel = this.options.text;
+                       }
+                       if ( !this.options.showLabel && this.options.text ) {
+                               this.options.text = this.options.showLabel;
+                       }
+                       if ( !this.options.icon && ( this.options.icons.primary ||
+                                       this.options.icons.secondary ) ) {
+                               if ( this.options.icons.primary ) {
+                                       this.options.icon = this.options.icons.primary;
+                               } else {
+                                       this.options.icon = this.options.icons.secondary;
+                                       this.options.iconPosition = "end";
+                               }
+                       } else if ( this.options.icon ) {
+                               this.options.icons.primary = this.options.icon;
+                       }
+                       this._super();
+               },
+
+               _setOption: function( key, value ) {
+                       if ( key === "text" ) {
+                               this._super( "showLabel", value );
+                               return;
+                       }
+                       if ( key === "showLabel" ) {
+                               this.options.text = value;
+                       }
+                       if ( key === "icon" ) {
+                               this.options.icons.primary = value;
+                       }
+                       if ( key === "icons" ) {
+                               if ( value.primary ) {
+                                       this._super( "icon", value.primary );
+                                       this._super( "iconPosition", "beginning" );
+                               } else if ( value.secondary ) {
+                                       this._super( "icon", value.secondary );
+                                       this._super( "iconPosition", "end" );
+                               }
+                       }
+                       this._superApply( arguments );
+               }
+       } );
+
+       $.fn.button = ( function( orig ) {
+               return function() {
+                       if ( !this.length || ( this.length && this[ 0 ].tagName !== "INPUT" ) ||
+                                       ( this.length && this[ 0 ].tagName === "INPUT" && (
+                                               this.attr( "type" ) !== "checkbox" && this.attr( "type" ) !== "radio"
+                                       ) ) ) {
+                               return orig.apply( this, arguments );
+                       }
+                       if ( !$.ui.checkboxradio ) {
+                               $.error( "Checkboxradio widget missing" );
+                       }
+                       if ( arguments.length === 0 ) {
+                               return this.checkboxradio( {
+                                       "icon": false
+                               } );
+                       }
+                       return this.checkboxradio.apply( this, arguments );
+               };
+       } )( $.fn.button );
+
+       $.fn.buttonset = function() {
+               if ( !$.ui.controlgroup ) {
+                       $.error( "Controlgroup widget missing" );
+               }
+               if ( arguments[ 0 ] === "option" && arguments[ 1 ] === "items" && arguments[ 2 ] ) {
+                       return this.controlgroup.apply( this,
+                               [ arguments[ 0 ], "items.button", arguments[ 2 ] ] );
+               }
+               if ( arguments[ 0 ] === "option" && arguments[ 1 ] === "items" ) {
+                       return this.controlgroup.apply( this, [ arguments[ 0 ], "items.button" ] );
+               }
+               if ( typeof arguments[ 0 ] === "object" && arguments[ 0 ].items ) {
+                       arguments[ 0 ].items = {
+                               button: arguments[ 0 ].items
+                       };
+               }
+               return this.controlgroup.apply( this, arguments );
+       };
+}
+
+var widgetsButton = $.ui.button;
+
+
+// jscs:disable maximumLineLength
+/* jscs:disable requireCamelCaseOrUpperCaseIdentifiers */
+/*!
+ * jQuery UI Datepicker 1.12.1
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ */
+
+//>>label: Datepicker
+//>>group: Widgets
+//>>description: Displays a calendar from an input or inline for selecting dates.
+//>>docs: http://api.jqueryui.com/datepicker/
+//>>demos: http://jqueryui.com/datepicker/
+//>>css.structure: ../../themes/base/core.css
+//>>css.structure: ../../themes/base/datepicker.css
+//>>css.theme: ../../themes/base/theme.css
+
+
+
+$.extend( $.ui, { datepicker: { version: "1.12.1" } } );
+
+var datepicker_instActive;
+
+function datepicker_getZindex( elem ) {
+       var position, value;
+       while ( elem.length && elem[ 0 ] !== document ) {
+
+               // Ignore z-index if position is set to a value where z-index is ignored by the browser
+               // This makes behavior of this function consistent across browsers
+               // WebKit always returns auto if the element is positioned
+               position = elem.css( "position" );
+               if ( position === "absolute" || position === "relative" || position === "fixed" ) {
+
+                       // IE returns 0 when zIndex is not specified
+                       // other browsers return a string
+                       // we ignore the case of nested elements with an explicit value of 0
+                       // <div style="z-index: -10;"><div style="z-index: 0;"></div></div>
+                       value = parseInt( elem.css( "zIndex" ), 10 );
+                       if ( !isNaN( value ) && value !== 0 ) {
+                               return value;
+                       }
+               }
+               elem = elem.parent();
+       }
+
+       return 0;
+}
+/* Date picker manager.
+   Use the singleton instance of this class, $.datepicker, to interact with the date picker.
+   Settings for (groups of) date pickers are maintained in an instance object,
+   allowing multiple different settings on the same page. */
+
+function Datepicker() {
+       this._curInst = null; // The current instance in use
+       this._keyEvent = false; // If the last event was a key event
+       this._disabledInputs = []; // List of date picker inputs that have been disabled
+       this._datepickerShowing = false; // True if the popup picker is showing , false if not
+       this._inDialog = false; // True if showing within a "dialog", false if not
+       this._mainDivId = "ui-datepicker-div"; // The ID of the main datepicker division
+       this._inlineClass = "ui-datepicker-inline"; // The name of the inline marker class
+       this._appendClass = "ui-datepicker-append"; // The name of the append marker class
+       this._triggerClass = "ui-datepicker-trigger"; // The name of the trigger marker class
+       this._dialogClass = "ui-datepicker-dialog"; // The name of the dialog marker class
+       this._disableClass = "ui-datepicker-disabled"; // The name of the disabled covering marker class
+       this._unselectableClass = "ui-datepicker-unselectable"; // The name of the unselectable cell marker class
+       this._currentClass = "ui-datepicker-current-day"; // The name of the current day marker class
+       this._dayOverClass = "ui-datepicker-days-cell-over"; // The name of the day hover marker class
+       this.regional = []; // Available regional settings, indexed by language code
+       this.regional[ "" ] = { // Default regional settings
+               closeText: "Done", // Display text for close link
+               prevText: "Prev", // Display text for previous month link
+               nextText: "Next", // Display text for next month link
+               currentText: "Today", // Display text for current month link
+               monthNames: [ "January","February","March","April","May","June",
+                       "July","August","September","October","November","December" ], // Names of months for drop-down and formatting
+               monthNamesShort: [ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" ], // For formatting
+               dayNames: [ "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" ], // For formatting
+               dayNamesShort: [ "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" ], // For formatting
+               dayNamesMin: [ "Su","Mo","Tu","We","Th","Fr","Sa" ], // Column headings for days starting at Sunday
+               weekHeader: "Wk", // Column header for week of the year
+               dateFormat: "mm/dd/yy", // See format options on parseDate
+               firstDay: 0, // The first day of the week, Sun = 0, Mon = 1, ...
+               isRTL: false, // True if right-to-left language, false if left-to-right
+               showMonthAfterYear: false, // True if the year select precedes month, false for month then year
+               yearSuffix: "" // Additional text to append to the year in the month headers
+       };
+       this._defaults = { // Global defaults for all the date picker instances
+               showOn: "focus", // "focus" for popup on focus,
+                       // "button" for trigger button, or "both" for either
+               showAnim: "fadeIn", // Name of jQuery animation for popup
+               showOptions: {}, // Options for enhanced animations
+               defaultDate: null, // Used when field is blank: actual date,
+                       // +/-number for offset from today, null for today
+               appendText: "", // Display text following the input box, e.g. showing the format
+               buttonText: "...", // Text for trigger button
+               buttonImage: "", // URL for trigger button image
+               buttonImageOnly: false, // True if the image appears alone, false if it appears on a button
+               hideIfNoPrevNext: false, // True to hide next/previous month links
+                       // if not applicable, false to just disable them
+               navigationAsDateFormat: false, // True if date formatting applied to prev/today/next links
+               gotoCurrent: false, // True if today link goes back to current selection instead
+               changeMonth: false, // True if month can be selected directly, false if only prev/next
+               changeYear: false, // True if year can be selected directly, false if only prev/next
+               yearRange: "c-10:c+10", // Range of years to display in drop-down,
+                       // either relative to today's year (-nn:+nn), relative to currently displayed year
+                       // (c-nn:c+nn), absolute (nnnn:nnnn), or a combination of the above (nnnn:-n)
+               showOtherMonths: false, // True to show dates in other months, false to leave blank
+               selectOtherMonths: false, // True to allow selection of dates in other months, false for unselectable
+               showWeek: false, // True to show week of the year, false to not show it
+               calculateWeek: this.iso8601Week, // How to calculate the week of the year,
+                       // takes a Date and returns the number of the week for it
+               shortYearCutoff: "+10", // Short year values < this are in the current century,
+                       // > this are in the previous century,
+                       // string value starting with "+" for current year + value
+               minDate: null, // The earliest selectable date, or null for no limit
+               maxDate: null, // The latest selectable date, or null for no limit
+               duration: "fast", // Duration of display/closure
+               beforeShowDay: null, // Function that takes a date and returns an array with
+                       // [0] = true if selectable, false if not, [1] = custom CSS class name(s) or "",
+                       // [2] = cell title (optional), e.g. $.datepicker.noWeekends
+               beforeShow: null, // Function that takes an input field and
+                       // returns a set of custom settings for the date picker
+               onSelect: null, // Define a callback function when a date is selected
+               onChangeMonthYear: null, // Define a callback function when the month or year is changed
+               onClose: null, // Define a callback function when the datepicker is closed
+               numberOfMonths: 1, // Number of months to show at a time
+               showCurrentAtPos: 0, // The position in multipe months at which to show the current month (starting at 0)
+               stepMonths: 1, // Number of months to step back/forward
+               stepBigMonths: 12, // Number of months to step back/forward for the big links
+               altField: "", // Selector for an alternate field to store selected dates into
+               altFormat: "", // The date format to use for the alternate field
+               constrainInput: true, // The input is constrained by the current date format
+               showButtonPanel: false, // True to show button panel, false to not show it
+               autoSize: false, // True to size the input for the date format, false to leave as is
+               disabled: false // The initial disabled state
+       };
+       $.extend( this._defaults, this.regional[ "" ] );
+       this.regional.en = $.extend( true, {}, this.regional[ "" ] );
+       this.regional[ "en-US" ] = $.extend( true, {}, this.regional.en );
+       this.dpDiv = datepicker_bindHover( $( "<div id='" + this._mainDivId + "' class='ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>" ) );
+}
+
+$.extend( Datepicker.prototype, {
+       /* Class name added to elements to indicate already configured with a date picker. */
+       markerClassName: "hasDatepicker",
+
+       //Keep track of the maximum number of rows displayed (see #7043)
+       maxRows: 4,
+
+       // TODO rename to "widget" when switching to widget factory
+       _widgetDatepicker: function() {
+               return this.dpDiv;
+       },
+
+       /* Override the default settings for all instances of the date picker.
+        * @param  settings  object - the new settings to use as defaults (anonymous object)
+        * @return the manager object
+        */
+       setDefaults: function( settings ) {
+               datepicker_extendRemove( this._defaults, settings || {} );
+               return this;
+       },
+
+       /* Attach the date picker to a jQuery selection.
+        * @param  target       element - the target input field or division or span
+        * @param  settings  object - the new settings to use for this date picker instance (anonymous)
+        */
+       _attachDatepicker: function( target, settings ) {
+               var nodeName, inline, inst;
+               nodeName = target.nodeName.toLowerCase();
+               inline = ( nodeName === "div" || nodeName === "span" );
+               if ( !target.id ) {
+                       this.uuid += 1;
+                       target.id = "dp" + this.uuid;
+               }
+               inst = this._newInst( $( target ), inline );
+               inst.settings = $.extend( {}, settings || {} );
+               if ( nodeName === "input" ) {
+                       this._connectDatepicker( target, inst );
+               } else if ( inline ) {
+                       this._inlineDatepicker( target, inst );
+               }
+       },
+
+       /* Create a new instance object. */
+       _newInst: function( target, inline ) {
+               var id = target[ 0 ].id.replace( /([^A-Za-z0-9_\-])/g, "\\\\$1" ); // escape jQuery meta chars
+               return { id: id, input: target, // associated target
+                       selectedDay: 0, selectedMonth: 0, selectedYear: 0, // current selection
+                       drawMonth: 0, drawYear: 0, // month being drawn
+                       inline: inline, // is datepicker inline or not
+                       dpDiv: ( !inline ? this.dpDiv : // presentation div
+                       datepicker_bindHover( $( "<div class='" + this._inlineClass + " ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>" ) ) ) };
+       },
+
+       /* Attach the date picker to an input field. */
+       _connectDatepicker: function( target, inst ) {
+               var input = $( target );
+               inst.append = $( [] );
+               inst.trigger = $( [] );
+               if ( input.hasClass( this.markerClassName ) ) {
+                       return;
+               }
+               this._attachments( input, inst );
+               input.addClass( this.markerClassName ).on( "keydown", this._doKeyDown ).
+                       on( "keypress", this._doKeyPress ).on( "keyup", this._doKeyUp );
+               this._autoSize( inst );
+               $.data( target, "datepicker", inst );
+
+               //If disabled option is true, disable the datepicker once it has been attached to the input (see ticket #5665)
+               if ( inst.settings.disabled ) {
+                       this._disableDatepicker( target );
+               }
+       },
+
+       /* Make attachments based on settings. */
+       _attachments: function( input, inst ) {
+               var showOn, buttonText, buttonImage,
+                       appendText = this._get( inst, "appendText" ),
+                       isRTL = this._get( inst, "isRTL" );
+
+               if ( inst.append ) {
+                       inst.append.remove();
+               }
+               if ( appendText ) {
+                       inst.append = $( "<span class='" + this._appendClass + "'>" + appendText + "</span>" );
+                       input[ isRTL ? "before" : "after" ]( inst.append );
+               }
+
+               input.off( "focus", this._showDatepicker );
+
+               if ( inst.trigger ) {
+                       inst.trigger.remove();
+               }
+
+               showOn = this._get( inst, "showOn" );
+               if ( showOn === "focus" || showOn === "both" ) { // pop-up date picker when in the marked field
+                       input.on( "focus", this._showDatepicker );
+               }
+               if ( showOn === "button" || showOn === "both" ) { // pop-up date picker when button clicked
+                       buttonText = this._get( inst, "buttonText" );
+                       buttonImage = this._get( inst, "buttonImage" );
+                       inst.trigger = $( this._get( inst, "buttonImageOnly" ) ?
+                               $( "<img/>" ).addClass( this._triggerClass ).
+                                       attr( { src: buttonImage, alt: buttonText, title: buttonText } ) :
+                               $( "<button type='button'></button>" ).addClass( this._triggerClass ).
+                                       html( !buttonImage ? buttonText : $( "<img/>" ).attr(
+                                       { src:buttonImage, alt:buttonText, title:buttonText } ) ) );
+                       input[ isRTL ? "before" : "after" ]( inst.trigger );
+                       inst.trigger.on( "click", function() {
+                               if ( $.datepicker._datepickerShowing && $.datepicker._lastInput === input[ 0 ] ) {
+                                       $.datepicker._hideDatepicker();
+                               } else if ( $.datepicker._datepickerShowing && $.datepicker._lastInput !== input[ 0 ] ) {
+                                       $.datepicker._hideDatepicker();
+                                       $.datepicker._showDatepicker( input[ 0 ] );
+                               } else {
+                                       $.datepicker._showDatepicker( input[ 0 ] );
+                               }
+                               return false;
+                       } );
+               }
+       },
+
+       /* Apply the maximum length for the date format. */
+       _autoSize: function( inst ) {
+               if ( this._get( inst, "autoSize" ) && !inst.inline ) {
+                       var findMax, max, maxI, i,
+                               date = new Date( 2009, 12 - 1, 20 ), // Ensure double digits
+                               dateFormat = this._get( inst, "dateFormat" );
+
+                       if ( dateFormat.match( /[DM]/ ) ) {
+                               findMax = function( names ) {
+                                       max = 0;
+                                       maxI = 0;
+                                       for ( i = 0; i < names.length; i++ ) {
+                                               if ( names[ i ].length > max ) {
+                                                       max = names[ i ].length;
+                                                       maxI = i;
+                                               }
+                                       }
+                                       return maxI;
+                               };
+                               date.setMonth( findMax( this._get( inst, ( dateFormat.match( /MM/ ) ?
+                                       "monthNames" : "monthNamesShort" ) ) ) );
+                               date.setDate( findMax( this._get( inst, ( dateFormat.match( /DD/ ) ?
+                                       "dayNames" : "dayNamesShort" ) ) ) + 20 - date.getDay() );
+                       }
+                       inst.input.attr( "size", this._formatDate( inst, date ).length );
+               }
+       },
+
+       /* Attach an inline date picker to a div. */
+       _inlineDatepicker: function( target, inst ) {
+               var divSpan = $( target );
+               if ( divSpan.hasClass( this.markerClassName ) ) {
+                       return;
+               }
+               divSpan.addClass( this.markerClassName ).append( inst.dpDiv );
+               $.data( target, "datepicker", inst );
+               this._setDate( inst, this._getDefaultDate( inst ), true );
+               this._updateDatepicker( inst );
+               this._updateAlternate( inst );
+
+               //If disabled option is true, disable the datepicker before showing it (see ticket #5665)
+               if ( inst.settings.disabled ) {
+                       this._disableDatepicker( target );
+               }
+
+               // Set display:block in place of inst.dpDiv.show() which won't work on disconnected elements
+               // http://bugs.jqueryui.com/ticket/7552 - A Datepicker created on a detached div has zero height
+               inst.dpDiv.css( "display", "block" );
+       },
+
+       /* Pop-up the date picker in a "dialog" box.
+        * @param  input element - ignored
+        * @param  date string or Date - the initial date to display
+        * @param  onSelect  function - the function to call when a date is selected
+        * @param  settings  object - update the dialog date picker instance's settings (anonymous object)
+        * @param  pos int[2] - coordinates for the dialog's position within the screen or
+        *                                      event - with x/y coordinates or
+        *                                      leave empty for default (screen centre)
+        * @return the manager object
+        */
+       _dialogDatepicker: function( input, date, onSelect, settings, pos ) {
+               var id, browserWidth, browserHeight, scrollX, scrollY,
+                       inst = this._dialogInst; // internal instance
+
+               if ( !inst ) {
+                       this.uuid += 1;
+                       id = "dp" + this.uuid;
+                       this._dialogInput = $( "<input type='text' id='" + id +
+                               "' style='position: absolute; top: -100px; width: 0px;'/>" );
+                       this._dialogInput.on( "keydown", this._doKeyDown );
+                       $( "body" ).append( this._dialogInput );
+                       inst = this._dialogInst = this._newInst( this._dialogInput, false );
+                       inst.settings = {};
+                       $.data( this._dialogInput[ 0 ], "datepicker", inst );
+               }
+               datepicker_extendRemove( inst.settings, settings || {} );
+               date = ( date && date.constructor === Date ? this._formatDate( inst, date ) : date );
+               this._dialogInput.val( date );
+
+               this._pos = ( pos ? ( pos.length ? pos : [ pos.pageX, pos.pageY ] ) : null );
+               if ( !this._pos ) {
+                       browserWidth = document.documentElement.clientWidth;
+                       browserHeight = document.documentElement.clientHeight;
+                       scrollX = document.documentElement.scrollLeft || document.body.scrollLeft;
+                       scrollY = document.documentElement.scrollTop || document.body.scrollTop;
+                       this._pos = // should use actual width/height below
+                               [ ( browserWidth / 2 ) - 100 + scrollX, ( browserHeight / 2 ) - 150 + scrollY ];
+               }
+
+               // Move input on screen for focus, but hidden behind dialog
+               this._dialogInput.css( "left", ( this._pos[ 0 ] + 20 ) + "px" ).css( "top", this._pos[ 1 ] + "px" );
+               inst.settings.onSelect = onSelect;
+               this._inDialog = true;
+               this.dpDiv.addClass( this._dialogClass );
+               this._showDatepicker( this._dialogInput[ 0 ] );
+               if ( $.blockUI ) {
+                       $.blockUI( this.dpDiv );
+               }
+               $.data( this._dialogInput[ 0 ], "datepicker", inst );
+               return this;
+       },
+
+       /* Detach a datepicker from its control.
+        * @param  target       element - the target input field or division or span
+        */
+       _destroyDatepicker: function( target ) {
+               var nodeName,
+                       $target = $( target ),
+                       inst = $.data( target, "datepicker" );
+
+               if ( !$target.hasClass( this.markerClassName ) ) {
+                       return;
+               }
+
+               nodeName = target.nodeName.toLowerCase();
+               $.removeData( target, "datepicker" );
+               if ( nodeName === "input" ) {
+                       inst.append.remove();
+                       inst.trigger.remove();
+                       $target.removeClass( this.markerClassName ).
+                               off( "focus", this._showDatepicker ).
+                               off( "keydown", this._doKeyDown ).
+                               off( "keypress", this._doKeyPress ).
+                               off( "keyup", this._doKeyUp );
+               } else if ( nodeName === "div" || nodeName === "span" ) {
+                       $target.removeClass( this.markerClassName ).empty();
+               }
+
+               if ( datepicker_instActive === inst ) {
+                       datepicker_instActive = null;
+               }
+       },
+
+       /* Enable the date picker to a jQuery selection.
+        * @param  target       element - the target input field or division or span
+        */
+       _enableDatepicker: function( target ) {
+               var nodeName, inline,
+                       $target = $( target ),
+                       inst = $.data( target, "datepicker" );
+
+               if ( !$target.hasClass( this.markerClassName ) ) {
+                       return;
+               }
+
+               nodeName = target.nodeName.toLowerCase();
+               if ( nodeName === "input" ) {
+                       target.disabled = false;
+                       inst.trigger.filter( "button" ).
+                               each( function() { this.disabled = false; } ).end().
+                               filter( "img" ).css( { opacity: "1.0", cursor: "" } );
+               } else if ( nodeName === "div" || nodeName === "span" ) {
+                       inline = $target.children( "." + this._inlineClass );
+                       inline.children().removeClass( "ui-state-disabled" );
+                       inline.find( "select.ui-datepicker-month, select.ui-datepicker-year" ).
+                               prop( "disabled", false );
+               }
+               this._disabledInputs = $.map( this._disabledInputs,
+                       function( value ) { return ( value === target ? null : value ); } ); // delete entry
+       },
+
+       /* Disable the date picker to a jQuery selection.
+        * @param  target       element - the target input field or division or span
+        */
+       _disableDatepicker: function( target ) {
+               var nodeName, inline,
+                       $target = $( target ),
+                       inst = $.data( target, "datepicker" );
+
+               if ( !$target.hasClass( this.markerClassName ) ) {
+                       return;
+               }
+
+               nodeName = target.nodeName.toLowerCase();
+               if ( nodeName === "input" ) {
+                       target.disabled = true;
+                       inst.trigger.filter( "button" ).
+                               each( function() { this.disabled = true; } ).end().
+                               filter( "img" ).css( { opacity: "0.5", cursor: "default" } );
+               } else if ( nodeName === "div" || nodeName === "span" ) {
+                       inline = $target.children( "." + this._inlineClass );
+                       inline.children().addClass( "ui-state-disabled" );
+                       inline.find( "select.ui-datepicker-month, select.ui-datepicker-year" ).
+                               prop( "disabled", true );
+               }
+               this._disabledInputs = $.map( this._disabledInputs,
+                       function( value ) { return ( value === target ? null : value ); } ); // delete entry
+               this._disabledInputs[ this._disabledInputs.length ] = target;
+       },
+
+       /* Is the first field in a jQuery collection disabled as a datepicker?
+        * @param  target       element - the target input field or division or span
+        * @return boolean - true if disabled, false if enabled
+        */
+       _isDisabledDatepicker: function( target ) {
+               if ( !target ) {
+                       return false;
+               }
+               for ( var i = 0; i < this._disabledInputs.length; i++ ) {
+                       if ( this._disabledInputs[ i ] === target ) {
+                               return true;
+                       }
+               }
+               return false;
+       },
+
+       /* Retrieve the instance data for the target control.
+        * @param  target  element - the target input field or division or span
+        * @return  object - the associated instance data
+        * @throws  error if a jQuery problem getting data
+        */
+       _getInst: function( target ) {
+               try {
+                       return $.data( target, "datepicker" );
+               }
+               catch ( err ) {
+                       throw "Missing instance data for this datepicker";
+               }
+       },
+
+       /* Update or retrieve the settings for a date picker attached to an input field or division.
+        * @param  target  element - the target input field or division or span
+        * @param  name object - the new settings to update or
+        *                              string - the name of the setting to change or retrieve,
+        *                              when retrieving also "all" for all instance settings or
+        *                              "defaults" for all global defaults
+        * @param  value   any - the new value for the setting
+        *                              (omit if above is an object or to retrieve a value)
+        */
+       _optionDatepicker: function( target, name, value ) {
+               var settings, date, minDate, maxDate,
+                       inst = this._getInst( target );
+
+               if ( arguments.length === 2 && typeof name === "string" ) {
+                       return ( name === "defaults" ? $.extend( {}, $.datepicker._defaults ) :
+                               ( inst ? ( name === "all" ? $.extend( {}, inst.settings ) :
+                               this._get( inst, name ) ) : null ) );
+               }
+
+               settings = name || {};
+               if ( typeof name === "string" ) {
+                       settings = {};
+                       settings[ name ] = value;
+               }
+
+               if ( inst ) {
+                       if ( this._curInst === inst ) {
+                               this._hideDatepicker();
+                       }
+
+                       date = this._getDateDatepicker( target, true );
+                       minDate = this._getMinMaxDate( inst, "min" );
+                       maxDate = this._getMinMaxDate( inst, "max" );
+                       datepicker_extendRemove( inst.settings, settings );
+
+                       // reformat the old minDate/maxDate values if dateFormat changes and a new minDate/maxDate isn't provided
+                       if ( minDate !== null && settings.dateFormat !== undefined && settings.minDate === undefined ) {
+                               inst.settings.minDate = this._formatDate( inst, minDate );
+                       }
+                       if ( maxDate !== null && settings.dateFormat !== undefined && settings.maxDate === undefined ) {
+                               inst.settings.maxDate = this._formatDate( inst, maxDate );
+                       }
+                       if ( "disabled" in settings ) {
+                               if ( settings.disabled ) {
+                                       this._disableDatepicker( target );
+                               } else {
+                                       this._enableDatepicker( target );
+                               }
+                       }
+                       this._attachments( $( target ), inst );
+                       this._autoSize( inst );
+                       this._setDate( inst, date );
+                       this._updateAlternate( inst );
+                       this._updateDatepicker( inst );
+               }
+       },
+
+       // Change method deprecated
+       _changeDatepicker: function( target, name, value ) {
+               this._optionDatepicker( target, name, value );
+       },
+
+       /* Redraw the date picker attached to an input field or division.
+        * @param  target  element - the target input field or division or span
+        */
+       _refreshDatepicker: function( target ) {
+               var inst = this._getInst( target );
+               if ( inst ) {
+                       this._updateDatepicker( inst );
+               }
+       },
+
+       /* Set the dates for a jQuery selection.
+        * @param  target element - the target input field or division or span
+        * @param  date Date - the new date
+        */
+       _setDateDatepicker: function( target, date ) {
+               var inst = this._getInst( target );
+               if ( inst ) {
+                       this._setDate( inst, date );
+                       this._updateDatepicker( inst );
+                       this._updateAlternate( inst );
+               }
+       },
+
+       /* Get the date(s) for the first entry in a jQuery selection.
+        * @param  target element - the target input field or division or span
+        * @param  noDefault boolean - true if no default date is to be used
+        * @return Date - the current date
+        */
+       _getDateDatepicker: function( target, noDefault ) {
+               var inst = this._getInst( target );
+               if ( inst && !inst.inline ) {
+                       this._setDateFromField( inst, noDefault );
+               }
+               return ( inst ? this._getDate( inst ) : null );
+       },
+
+       /* Handle keystrokes. */
+       _doKeyDown: function( event ) {
+               var onSelect, dateStr, sel,
+                       inst = $.datepicker._getInst( event.target ),
+                       handled = true,
+                       isRTL = inst.dpDiv.is( ".ui-datepicker-rtl" );
+
+               inst._keyEvent = true;
+               if ( $.datepicker._datepickerShowing ) {
+                       switch ( event.keyCode ) {
+                               case 9: $.datepicker._hideDatepicker();
+                                               handled = false;
+                                               break; // hide on tab out
+                               case 13: sel = $( "td." + $.datepicker._dayOverClass + ":not(." +
+                                                                       $.datepicker._currentClass + ")", inst.dpDiv );
+                                               if ( sel[ 0 ] ) {
+                                                       $.datepicker._selectDay( event.target, inst.selectedMonth, inst.selectedYear, sel[ 0 ] );
+                                               }
+
+                                               onSelect = $.datepicker._get( inst, "onSelect" );
+                                               if ( onSelect ) {
+                                                       dateStr = $.datepicker._formatDate( inst );
+
+                                                       // Trigger custom callback
+                                                       onSelect.apply( ( inst.input ? inst.input[ 0 ] : null ), [ dateStr, inst ] );
+                                               } else {
+                                                       $.datepicker._hideDatepicker();
+                                               }
+
+                                               return false; // don't submit the form
+                               case 27: $.datepicker._hideDatepicker();
+                                               break; // hide on escape
+                               case 33: $.datepicker._adjustDate( event.target, ( event.ctrlKey ?
+                                                       -$.datepicker._get( inst, "stepBigMonths" ) :
+                                                       -$.datepicker._get( inst, "stepMonths" ) ), "M" );
+                                               break; // previous month/year on page up/+ ctrl
+                               case 34: $.datepicker._adjustDate( event.target, ( event.ctrlKey ?
+                                                       +$.datepicker._get( inst, "stepBigMonths" ) :
+                                                       +$.datepicker._get( inst, "stepMonths" ) ), "M" );
+                                               break; // next month/year on page down/+ ctrl
+                               case 35: if ( event.ctrlKey || event.metaKey ) {
+                                                       $.datepicker._clearDate( event.target );
+                                               }
+                                               handled = event.ctrlKey || event.metaKey;
+                                               break; // clear on ctrl or command +end
+                               case 36: if ( event.ctrlKey || event.metaKey ) {
+                                                       $.datepicker._gotoToday( event.target );
+                                               }
+                                               handled = event.ctrlKey || event.metaKey;
+                                               break; // current on ctrl or command +home
+                               case 37: if ( event.ctrlKey || event.metaKey ) {
+                                                       $.datepicker._adjustDate( event.target, ( isRTL ? +1 : -1 ), "D" );
+                                               }
+                                               handled = event.ctrlKey || event.metaKey;
+
+                                               // -1 day on ctrl or command +left
+                                               if ( event.originalEvent.altKey ) {
+                                                       $.datepicker._adjustDate( event.target, ( event.ctrlKey ?
+                                                               -$.datepicker._get( inst, "stepBigMonths" ) :
+                                                               -$.datepicker._get( inst, "stepMonths" ) ), "M" );
+                                               }
+
+                                               // next month/year on alt +left on Mac
+                                               break;
+                               case 38: if ( event.ctrlKey || event.metaKey ) {
+                                                       $.datepicker._adjustDate( event.target, -7, "D" );
+                                               }
+                                               handled = event.ctrlKey || event.metaKey;
+                                               break; // -1 week on ctrl or command +up
+                               case 39: if ( event.ctrlKey || event.metaKey ) {
+                                                       $.datepicker._adjustDate( event.target, ( isRTL ? -1 : +1 ), "D" );
+                                               }
+                                               handled = event.ctrlKey || event.metaKey;
+
+                                               // +1 day on ctrl or command +right
+                                               if ( event.originalEvent.altKey ) {
+                                                       $.datepicker._adjustDate( event.target, ( event.ctrlKey ?
+                                                               +$.datepicker._get( inst, "stepBigMonths" ) :
+                                                               +$.datepicker._get( inst, "stepMonths" ) ), "M" );
+                                               }
+
+                                               // next month/year on alt +right
+                                               break;
+                               case 40: if ( event.ctrlKey || event.metaKey ) {
+                                                       $.datepicker._adjustDate( event.target, +7, "D" );
+                                               }
+                                               handled = event.ctrlKey || event.metaKey;
+                                               break; // +1 week on ctrl or command +down
+                               default: handled = false;
+                       }
+               } else if ( event.keyCode === 36 && event.ctrlKey ) { // display the date picker on ctrl+home
+                       $.datepicker._showDatepicker( this );
+               } else {
+                       handled = false;
+               }
+
+               if ( handled ) {
+                       event.preventDefault();
+                       event.stopPropagation();
+               }
+       },
+
+       /* Filter entered characters - based on date format. */
+       _doKeyPress: function( event ) {
+               var chars, chr,
+                       inst = $.datepicker._getInst( event.target );
+
+               if ( $.datepicker._get( inst, "constrainInput" ) ) {
+                       chars = $.datepicker._possibleChars( $.datepicker._get( inst, "dateFormat" ) );
+                       chr = String.fromCharCode( event.charCode == null ? event.keyCode : event.charCode );
+                       return event.ctrlKey || event.metaKey || ( chr < " " || !chars || chars.indexOf( chr ) > -1 );
+               }
+       },
+
+       /* Synchronise manual entry and field/alternate field. */
+       _doKeyUp: function( event ) {
+               var date,
+                       inst = $.datepicker._getInst( event.target );
+
+               if ( inst.input.val() !== inst.lastVal ) {
+                       try {
+                               date = $.datepicker.parseDate( $.datepicker._get( inst, "dateFormat" ),
+                                       ( inst.input ? inst.input.val() : null ),
+                                       $.datepicker._getFormatConfig( inst ) );
+
+                               if ( date ) { // only if valid
+                                       $.datepicker._setDateFromField( inst );
+                                       $.datepicker._updateAlternate( inst );
+                                       $.datepicker._updateDatepicker( inst );
+                               }
+                       }
+                       catch ( err ) {
+                       }
+               }
+               return true;
+       },
+
+       /* Pop-up the date picker for a given input field.
+        * If false returned from beforeShow event handler do not show.
+        * @param  input  element - the input field attached to the date picker or
+        *                                      event - if triggered by focus
+        */
+       _showDatepicker: function( input ) {
+               input = input.target || input;
+               if ( input.nodeName.toLowerCase() !== "input" ) { // find from button/image trigger
+                       input = $( "input", input.parentNode )[ 0 ];
+               }
+
+               if ( $.datepicker._isDisabledDatepicker( input ) || $.datepicker._lastInput === input ) { // already here
+                       return;
+               }
+
+               var inst, beforeShow, beforeShowSettings, isFixed,
+                       offset, showAnim, duration;
+
+               inst = $.datepicker._getInst( input );
+               if ( $.datepicker._curInst && $.datepicker._curInst !== inst ) {
+                       $.datepicker._curInst.dpDiv.stop( true, true );
+                       if ( inst && $.datepicker._datepickerShowing ) {
+                               $.datepicker._hideDatepicker( $.datepicker._curInst.input[ 0 ] );
+                       }
+               }
+
+               beforeShow = $.datepicker._get( inst, "beforeShow" );
+               beforeShowSettings = beforeShow ? beforeShow.apply( input, [ input, inst ] ) : {};
+               if ( beforeShowSettings === false ) {
+                       return;
+               }
+               datepicker_extendRemove( inst.settings, beforeShowSettings );
+
+               inst.lastVal = null;
+               $.datepicker._lastInput = input;
+               $.datepicker._setDateFromField( inst );
+
+               if ( $.datepicker._inDialog ) { // hide cursor
+                       input.value = "";
+               }
+               if ( !$.datepicker._pos ) { // position below input
+                       $.datepicker._pos = $.datepicker._findPos( input );
+                       $.datepicker._pos[ 1 ] += input.offsetHeight; // add the height
+               }
+
+               isFixed = false;
+               $( input ).parents().each( function() {
+                       isFixed |= $( this ).css( "position" ) === "fixed";
+                       return !isFixed;
+               } );
+
+               offset = { left: $.datepicker._pos[ 0 ], top: $.datepicker._pos[ 1 ] };
+               $.datepicker._pos = null;
+
+               //to avoid flashes on Firefox
+               inst.dpDiv.empty();
+
+               // determine sizing offscreen
+               inst.dpDiv.css( { position: "absolute", display: "block", top: "-1000px" } );
+               $.datepicker._updateDatepicker( inst );
+
+               // fix width for dynamic number of date pickers
+               // and adjust position before showing
+               offset = $.datepicker._checkOffset( inst, offset, isFixed );
+               inst.dpDiv.css( { position: ( $.datepicker._inDialog && $.blockUI ?
+                       "static" : ( isFixed ? "fixed" : "absolute" ) ), display: "none",
+                       left: offset.left + "px", top: offset.top + "px" } );
+
+               if ( !inst.inline ) {
+                       showAnim = $.datepicker._get( inst, "showAnim" );
+                       duration = $.datepicker._get( inst, "duration" );
+                       inst.dpDiv.css( "z-index", datepicker_getZindex( $( input ) ) + 1 );
+                       $.datepicker._datepickerShowing = true;
+
+                       if ( $.effects && $.effects.effect[ showAnim ] ) {
+                               inst.dpDiv.show( showAnim, $.datepicker._get( inst, "showOptions" ), duration );
+                       } else {
+                               inst.dpDiv[ showAnim || "show" ]( showAnim ? duration : null );
+                       }
+
+                       if ( $.datepicker._shouldFocusInput( inst ) ) {
+                               inst.input.trigger( "focus" );
+                       }
+
+                       $.datepicker._curInst = inst;
+               }
+       },
+
+       /* Generate the date picker content. */
+       _updateDatepicker: function( inst ) {
+               this.maxRows = 4; //Reset the max number of rows being displayed (see #7043)
+               datepicker_instActive = inst; // for delegate hover events
+               inst.dpDiv.empty().append( this._generateHTML( inst ) );
+               this._attachHandlers( inst );
+
+               var origyearshtml,
+                       numMonths = this._getNumberOfMonths( inst ),
+                       cols = numMonths[ 1 ],
+                       width = 17,
+                       activeCell = inst.dpDiv.find( "." + this._dayOverClass + " a" );
+
+               if ( activeCell.length > 0 ) {
+                       datepicker_handleMouseover.apply( activeCell.get( 0 ) );
+               }
+
+               inst.dpDiv.removeClass( "ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4" ).width( "" );
+               if ( cols > 1 ) {
+                       inst.dpDiv.addClass( "ui-datepicker-multi-" + cols ).css( "width", ( width * cols ) + "em" );
+               }
+               inst.dpDiv[ ( numMonths[ 0 ] !== 1 || numMonths[ 1 ] !== 1 ? "add" : "remove" ) +
+                       "Class" ]( "ui-datepicker-multi" );
+               inst.dpDiv[ ( this._get( inst, "isRTL" ) ? "add" : "remove" ) +
+                       "Class" ]( "ui-datepicker-rtl" );
+
+               if ( inst === $.datepicker._curInst && $.datepicker._datepickerShowing && $.datepicker._shouldFocusInput( inst ) ) {
+                       inst.input.trigger( "focus" );
+               }
+
+               // Deffered render of the years select (to avoid flashes on Firefox)
+               if ( inst.yearshtml ) {
+                       origyearshtml = inst.yearshtml;
+                       setTimeout( function() {
+
+                               //assure that inst.yearshtml didn't change.
+                               if ( origyearshtml === inst.yearshtml && inst.yearshtml ) {
+                                       inst.dpDiv.find( "select.ui-datepicker-year:first" ).replaceWith( inst.yearshtml );
+                               }
+                               origyearshtml = inst.yearshtml = null;
+                       }, 0 );
+               }
+       },
+
+       // #6694 - don't focus the input if it's already focused
+       // this breaks the change event in IE
+       // Support: IE and jQuery <1.9
+       _shouldFocusInput: function( inst ) {
+               return inst.input && inst.input.is( ":visible" ) && !inst.input.is( ":disabled" ) && !inst.input.is( ":focus" );
+       },
+
+       /* Check positioning to remain on screen. */
+       _checkOffset: function( inst, offset, isFixed ) {
+               var dpWidth = inst.dpDiv.outerWidth(),
+                       dpHeight = inst.dpDiv.outerHeight(),
+                       inputWidth = inst.input ? inst.input.outerWidth() : 0,
+                       inputHeight = inst.input ? inst.input.outerHeight() : 0,
+                       viewWidth = document.documentElement.clientWidth + ( isFixed ? 0 : $( document ).scrollLeft() ),
+                       viewHeight = document.documentElement.clientHeight + ( isFixed ? 0 : $( document ).scrollTop() );
+
+               offset.left -= ( this._get( inst, "isRTL" ) ? ( dpWidth - inputWidth ) : 0 );
+               offset.left -= ( isFixed && offset.left === inst.input.offset().left ) ? $( document ).scrollLeft() : 0;
+               offset.top -= ( isFixed && offset.top === ( inst.input.offset().top + inputHeight ) ) ? $( document ).scrollTop() : 0;
+
+               // Now check if datepicker is showing outside window viewport - move to a better place if so.
+               offset.left -= Math.min( offset.left, ( offset.left + dpWidth > viewWidth && viewWidth > dpWidth ) ?
+                       Math.abs( offset.left + dpWidth - viewWidth ) : 0 );
+               offset.top -= Math.min( offset.top, ( offset.top + dpHeight > viewHeight && viewHeight > dpHeight ) ?
+                       Math.abs( dpHeight + inputHeight ) : 0 );
+
+               return offset;
+       },
+
+       /* Find an object's position on the screen. */
+       _findPos: function( obj ) {
+               var position,
+                       inst = this._getInst( obj ),
+                       isRTL = this._get( inst, "isRTL" );
+
+               while ( obj && ( obj.type === "hidden" || obj.nodeType !== 1 || $.expr.filters.hidden( obj ) ) ) {
+                       obj = obj[ isRTL ? "previousSibling" : "nextSibling" ];
+               }
+
+               position = $( obj ).offset();
+               return [ position.left, position.top ];
+       },
+
+       /* Hide the date picker from view.
+        * @param  input  element - the input field attached to the date picker
+        */
+       _hideDatepicker: function( input ) {
+               var showAnim, duration, postProcess, onClose,
+                       inst = this._curInst;
+
+               if ( !inst || ( input && inst !== $.data( input, "datepicker" ) ) ) {
+                       return;
+               }
+
+               if ( this._datepickerShowing ) {
+                       showAnim = this._get( inst, "showAnim" );
+                       duration = this._get( inst, "duration" );
+                       postProcess = function() {
+                               $.datepicker._tidyDialog( inst );
+                       };
+
+                       // DEPRECATED: after BC for 1.8.x $.effects[ showAnim ] is not needed
+                       if ( $.effects && ( $.effects.effect[ showAnim ] || $.effects[ showAnim ] ) ) {
+                               inst.dpDiv.hide( showAnim, $.datepicker._get( inst, "showOptions" ), duration, postProcess );
+                       } else {
+                               inst.dpDiv[ ( showAnim === "slideDown" ? "slideUp" :
+                                       ( showAnim === "fadeIn" ? "fadeOut" : "hide" ) ) ]( ( showAnim ? duration : null ), postProcess );
+                       }
+
+                       if ( !showAnim ) {
+                               postProcess();
+                       }
+                       this._datepickerShowing = false;
+
+                       onClose = this._get( inst, "onClose" );
+                       if ( onClose ) {
+                               onClose.apply( ( inst.input ? inst.input[ 0 ] : null ), [ ( inst.input ? inst.input.val() : "" ), inst ] );
+                       }
+
+                       this._lastInput = null;
+                       if ( this._inDialog ) {
+                               this._dialogInput.css( { position: "absolute", left: "0", top: "-100px" } );
+                               if ( $.blockUI ) {
+                                       $.unblockUI();
+                                       $( "body" ).append( this.dpDiv );
+                               }
+                       }
+                       this._inDialog = false;
+               }
+       },
+
+       /* Tidy up after a dialog display. */
+       _tidyDialog: function( inst ) {
+               inst.dpDiv.removeClass( this._dialogClass ).off( ".ui-datepicker-calendar" );
+       },
+
+       /* Close date picker if clicked elsewhere. */
+       _checkExternalClick: function( event ) {
+               if ( !$.datepicker._curInst ) {
+                       return;
+               }
+
+               var $target = $( event.target ),
+                       inst = $.datepicker._getInst( $target[ 0 ] );
+
+               if ( ( ( $target[ 0 ].id !== $.datepicker._mainDivId &&
+                               $target.parents( "#" + $.datepicker._mainDivId ).length === 0 &&
+                               !$target.hasClass( $.datepicker.markerClassName ) &&
+                               !$target.closest( "." + $.datepicker._triggerClass ).length &&
+                               $.datepicker._datepickerShowing && !( $.datepicker._inDialog && $.blockUI ) ) ) ||
+                       ( $target.hasClass( $.datepicker.markerClassName ) && $.datepicker._curInst !== inst ) ) {
+                               $.datepicker._hideDatepicker();
+               }
+       },
+
+       /* Adjust one of the date sub-fields. */
+       _adjustDate: function( id, offset, period ) {
+               var target = $( id ),
+                       inst = this._getInst( target[ 0 ] );
+
+               if ( this._isDisabledDatepicker( target[ 0 ] ) ) {
+                       return;
+               }
+               this._adjustInstDate( inst, offset +
+                       ( period === "M" ? this._get( inst, "showCurrentAtPos" ) : 0 ), // undo positioning
+                       period );
+               this._updateDatepicker( inst );
+       },
+
+       /* Action for current link. */
+       _gotoToday: function( id ) {
+               var date,
+                       target = $( id ),
+                       inst = this._getInst( target[ 0 ] );
+
+               if ( this._get( inst, "gotoCurrent" ) && inst.currentDay ) {
+                       inst.selectedDay = inst.currentDay;
+                       inst.drawMonth = inst.selectedMonth = inst.currentMonth;
+                       inst.drawYear = inst.selectedYear = inst.currentYear;
+               } else {
+                       date = new Date();
+                       inst.selectedDay = date.getDate();
+                       inst.drawMonth = inst.selectedMonth = date.getMonth();
+                       inst.drawYear = inst.selectedYear = date.getFullYear();
+               }
+               this._notifyChange( inst );
+               this._adjustDate( target );
+       },
+
+       /* Action for selecting a new month/year. */
+       _selectMonthYear: function( id, select, period ) {
+               var target = $( id ),
+                       inst = this._getInst( target[ 0 ] );
+
+               inst[ "selected" + ( period === "M" ? "Month" : "Year" ) ] =
+               inst[ "draw" + ( period === "M" ? "Month" : "Year" ) ] =
+                       parseInt( select.options[ select.selectedIndex ].value, 10 );
+
+               this._notifyChange( inst );
+               this._adjustDate( target );
+       },
+
+       /* Action for selecting a day. */
+       _selectDay: function( id, month, year, td ) {
+               var inst,
+                       target = $( id );
+
+               if ( $( td ).hasClass( this._unselectableClass ) || this._isDisabledDatepicker( target[ 0 ] ) ) {
+                       return;
+               }
+
+               inst = this._getInst( target[ 0 ] );
+               inst.selectedDay = inst.currentDay = $( "a", td ).html();
+               inst.selectedMonth = inst.currentMonth = month;
+               inst.selectedYear = inst.currentYear = year;
+               this._selectDate( id, this._formatDate( inst,
+                       inst.currentDay, inst.currentMonth, inst.currentYear ) );
+       },
+
+       /* Erase the input field and hide the date picker. */
+       _clearDate: function( id ) {
+               var target = $( id );
+               this._selectDate( target, "" );
+       },
+
+       /* Update the input field with the selected date. */
+       _selectDate: function( id, dateStr ) {
+               var onSelect,
+                       target = $( id ),
+                       inst = this._getInst( target[ 0 ] );
+
+               dateStr = ( dateStr != null ? dateStr : this._formatDate( inst ) );
+               if ( inst.input ) {
+                       inst.input.val( dateStr );
+               }
+               this._updateAlternate( inst );
+
+               onSelect = this._get( inst, "onSelect" );
+               if ( onSelect ) {
+                       onSelect.apply( ( inst.input ? inst.input[ 0 ] : null ), [ dateStr, inst ] );  // trigger custom callback
+               } else if ( inst.input ) {
+                       inst.input.trigger( "change" ); // fire the change event
+               }
+
+               if ( inst.inline ) {
+                       this._updateDatepicker( inst );
+               } else {
+                       this._hideDatepicker();
+                       this._lastInput = inst.input[ 0 ];
+                       if ( typeof( inst.input[ 0 ] ) !== "object" ) {
+                               inst.input.trigger( "focus" ); // restore focus
+                       }
+                       this._lastInput = null;
+               }
+       },
+
+       /* Update any alternate field to synchronise with the main field. */
+       _updateAlternate: function( inst ) {
+               var altFormat, date, dateStr,
+                       altField = this._get( inst, "altField" );
+
+               if ( altField ) { // update alternate field too
+                       altFormat = this._get( inst, "altFormat" ) || this._get( inst, "dateFormat" );
+                       date = this._getDate( inst );
+                       dateStr = this.formatDate( altFormat, date, this._getFormatConfig( inst ) );
+                       $( altField ).val( dateStr );
+               }
+       },
+
+       /* Set as beforeShowDay function to prevent selection of weekends.
+        * @param  date  Date - the date to customise
+        * @return [boolean, string] - is this date selectable?, what is its CSS class?
+        */
+       noWeekends: function( date ) {
+               var day = date.getDay();
+               return [ ( day > 0 && day < 6 ), "" ];
+       },
+
+       /* Set as calculateWeek to determine the week of the year based on the ISO 8601 definition.
+        * @param  date  Date - the date to get the week for
+        * @return  number - the number of the week within the year that contains this date
+        */
+       iso8601Week: function( date ) {
+               var time,
+                       checkDate = new Date( date.getTime() );
+
+               // Find Thursday of this week starting on Monday
+               checkDate.setDate( checkDate.getDate() + 4 - ( checkDate.getDay() || 7 ) );
+
+               time = checkDate.getTime();
+               checkDate.setMonth( 0 ); // Compare with Jan 1
+               checkDate.setDate( 1 );
+               return Math.floor( Math.round( ( time - checkDate ) / 86400000 ) / 7 ) + 1;
+       },
+
+       /* Parse a string value into a date object.
+        * See formatDate below for the possible formats.
+        *
+        * @param  format string - the expected format of the date
+        * @param  value string - the date in the above format
+        * @param  settings Object - attributes include:
+        *                                      shortYearCutoff  number - the cutoff year for determining the century (optional)
+        *                                      dayNamesShort   string[7] - abbreviated names of the days from Sunday (optional)
+        *                                      dayNames                string[7] - names of the days from Sunday (optional)
+        *                                      monthNamesShort string[12] - abbreviated names of the months (optional)
+        *                                      monthNames              string[12] - names of the months (optional)
+        * @return  Date - the extracted date value or null if value is blank
+        */
+       parseDate: function( format, value, settings ) {
+               if ( format == null || value == null ) {
+                       throw "Invalid arguments";
+               }
+
+               value = ( typeof value === "object" ? value.toString() : value + "" );
+               if ( value === "" ) {
+                       return null;
+               }
+
+               var iFormat, dim, extra,
+                       iValue = 0,
+                       shortYearCutoffTemp = ( settings ? settings.shortYearCutoff : null ) || this._defaults.shortYearCutoff,
+                       shortYearCutoff = ( typeof shortYearCutoffTemp !== "string" ? shortYearCutoffTemp :
+                               new Date().getFullYear() % 100 + parseInt( shortYearCutoffTemp, 10 ) ),
+                       dayNamesShort = ( settings ? settings.dayNamesShort : null ) || this._defaults.dayNamesShort,
+                       dayNames = ( settings ? settings.dayNames : null ) || this._defaults.dayNames,
+                       monthNamesShort = ( settings ? settings.monthNamesShort : null ) || this._defaults.monthNamesShort,
+                       monthNames = ( settings ? settings.monthNames : null ) || this._defaults.monthNames,
+                       year = -1,
+                       month = -1,
+                       day = -1,
+                       doy = -1,
+                       literal = false,
+                       date,
+
+                       // Check whether a format character is doubled
+                       lookAhead = function( match ) {
+                               var matches = ( iFormat + 1 < format.length && format.charAt( iFormat + 1 ) === match );
+                               if ( matches ) {
+                                       iFormat++;
+                               }
+                               return matches;
+                       },
+
+                       // Extract a number from the string value
+                       getNumber = function( match ) {
+                               var isDoubled = lookAhead( match ),
+                                       size = ( match === "@" ? 14 : ( match === "!" ? 20 :
+                                       ( match === "y" && isDoubled ? 4 : ( match === "o" ? 3 : 2 ) ) ) ),
+                                       minSize = ( match === "y" ? size : 1 ),
+                                       digits = new RegExp( "^\\d{" + minSize + "," + size + "}" ),
+                                       num = value.substring( iValue ).match( digits );
+                               if ( !num ) {
+                                       throw "Missing number at position " + iValue;
+                               }
+                               iValue += num[ 0 ].length;
+                               return parseInt( num[ 0 ], 10 );
+                       },
+
+                       // Extract a name from the string value and convert to an index
+                       getName = function( match, shortNames, longNames ) {
+                               var index = -1,
+                                       names = $.map( lookAhead( match ) ? longNames : shortNames, function( v, k ) {
+                                               return [ [ k, v ] ];
+                                       } ).sort( function( a, b ) {
+                                               return -( a[ 1 ].length - b[ 1 ].length );
+                                       } );
+
+                               $.each( names, function( i, pair ) {
+                                       var name = pair[ 1 ];
+                                       if ( value.substr( iValue, name.length ).toLowerCase() === name.toLowerCase() ) {
+                                               index = pair[ 0 ];
+                                               iValue += name.length;
+                                               return false;
+                                       }
+                               } );
+                               if ( index !== -1 ) {
+                                       return index + 1;
+                               } else {
+                                       throw "Unknown name at position " + iValue;
+                               }
+                       },
+
+                       // Confirm that a literal character matches the string value
+                       checkLiteral = function() {
+                               if ( value.charAt( iValue ) !== format.charAt( iFormat ) ) {
+                                       throw "Unexpected literal at position " + iValue;
+                               }
+                               iValue++;
+                       };
+
+               for ( iFormat = 0; iFormat < format.length; iFormat++ ) {
+                       if ( literal ) {
+                               if ( format.charAt( iFormat ) === "'" && !lookAhead( "'" ) ) {
+                                       literal = false;
+                               } else {
+                                       checkLiteral();
+                               }
+                       } else {
+                               switch ( format.charAt( iFormat ) ) {
+                                       case "d":
+                                               day = getNumber( "d" );
+                                               break;
+                                       case "D":
+                                               getName( "D", dayNamesShort, dayNames );
+                                               break;
+                                       case "o":
+                                               doy = getNumber( "o" );
+                                               break;
+                                       case "m":
+                                               month = getNumber( "m" );
+                                               break;
+                                       case "M":
+                                               month = getName( "M", monthNamesShort, monthNames );
+                                               break;
+                                       case "y":
+                                               year = getNumber( "y" );
+                                               break;
+                                       case "@":
+                                               date = new Date( getNumber( "@" ) );
+                                               year = date.getFullYear();
+                                               month = date.getMonth() + 1;
+                                               day = date.getDate();
+                                               break;
+                                       case "!":
+                                               date = new Date( ( getNumber( "!" ) - this._ticksTo1970 ) / 10000 );
+                                               year = date.getFullYear();
+                                               month = date.getMonth() + 1;
+                                               day = date.getDate();
+                                               break;
+                                       case "'":
+                                               if ( lookAhead( "'" ) ) {
+                                                       checkLiteral();
+                                               } else {
+                                                       literal = true;
+                                               }
+                                               break;
+                                       default:
+                                               checkLiteral();
+                               }
+                       }
+               }
+
+               if ( iValue < value.length ) {
+                       extra = value.substr( iValue );
+                       if ( !/^\s+/.test( extra ) ) {
+                               throw "Extra/unparsed characters found in date: " + extra;
+                       }
+               }
+
+               if ( year === -1 ) {
+                       year = new Date().getFullYear();
+               } else if ( year < 100 ) {
+                       year += new Date().getFullYear() - new Date().getFullYear() % 100 +
+                               ( year <= shortYearCutoff ? 0 : -100 );
+               }
+
+               if ( doy > -1 ) {
+                       month = 1;
+                       day = doy;
+                       do {
+                               dim = this._getDaysInMonth( year, month - 1 );
+                               if ( day <= dim ) {
+                                       break;
+                               }
+                               month++;
+                               day -= dim;
+                       } while ( true );
+               }
+
+               date = this._daylightSavingAdjust( new Date( year, month - 1, day ) );
+               if ( date.getFullYear() !== year || date.getMonth() + 1 !== month || date.getDate() !== day ) {
+                       throw "Invalid date"; // E.g. 31/02/00
+               }
+               return date;
+       },
+
+       /* Standard date formats. */
+       ATOM: "yy-mm-dd", // RFC 3339 (ISO 8601)
+       COOKIE: "D, dd M yy",
+       ISO_8601: "yy-mm-dd",
+       RFC_822: "D, d M y",
+       RFC_850: "DD, dd-M-y",
+       RFC_1036: "D, d M y",
+       RFC_1123: "D, d M yy",
+       RFC_2822: "D, d M yy",
+       RSS: "D, d M y", // RFC 822
+       TICKS: "!",
+       TIMESTAMP: "@",
+       W3C: "yy-mm-dd", // ISO 8601
+
+       _ticksTo1970: ( ( ( 1970 - 1 ) * 365 + Math.floor( 1970 / 4 ) - Math.floor( 1970 / 100 ) +
+               Math.floor( 1970 / 400 ) ) * 24 * 60 * 60 * 10000000 ),
+
+       /* Format a date object into a string value.
+        * The format can be combinations of the following:
+        * d  - day of month (no leading zero)
+        * dd - day of month (two digit)
+        * o  - day of year (no leading zeros)
+        * oo - day of year (three digit)
+        * D  - day name short
+        * DD - day name long
+        * m  - month of year (no leading zero)
+        * mm - month of year (two digit)
+        * M  - month name short
+        * MM - month name long
+        * y  - year (two digit)
+        * yy - year (four digit)
+        * @ - Unix timestamp (ms since 01/01/1970)
+        * ! - Windows ticks (100ns since 01/01/0001)
+        * "..." - literal text
+        * '' - single quote
+        *
+        * @param  format string - the desired format of the date
+        * @param  date Date - the date value to format
+        * @param  settings Object - attributes include:
+        *                                      dayNamesShort   string[7] - abbreviated names of the days from Sunday (optional)
+        *                                      dayNames                string[7] - names of the days from Sunday (optional)
+        *                                      monthNamesShort string[12] - abbreviated names of the months (optional)
+        *                                      monthNames              string[12] - names of the months (optional)
+        * @return  string - the date in the above format
+        */
+       formatDate: function( format, date, settings ) {
+               if ( !date ) {
+                       return "";
+               }
+
+               var iFormat,
+                       dayNamesShort = ( settings ? settings.dayNamesShort : null ) || this._defaults.dayNamesShort,
+                       dayNames = ( settings ? settings.dayNames : null ) || this._defaults.dayNames,
+                       monthNamesShort = ( settings ? settings.monthNamesShort : null ) || this._defaults.monthNamesShort,
+                       monthNames = ( settings ? settings.monthNames : null ) || this._defaults.monthNames,
+
+                       // Check whether a format character is doubled
+                       lookAhead = function( match ) {
+                               var matches = ( iFormat + 1 < format.length && format.charAt( iFormat + 1 ) === match );
+                               if ( matches ) {
+                                       iFormat++;
+                               }
+                               return matches;
+                       },
+
+                       // Format a number, with leading zero if necessary
+                       formatNumber = function( match, value, len ) {
+                               var num = "" + value;
+                               if ( lookAhead( match ) ) {
+                                       while ( num.length < len ) {
+                                               num = "0" + num;
+                                       }
+                               }
+                               return num;
+                       },
+
+                       // Format a name, short or long as requested
+                       formatName = function( match, value, shortNames, longNames ) {
+                               return ( lookAhead( match ) ? longNames[ value ] : shortNames[ value ] );
+                       },
+                       output = "",
+                       literal = false;
+
+               if ( date ) {
+                       for ( iFormat = 0; iFormat < format.length; iFormat++ ) {
+                               if ( literal ) {
+                                       if ( format.charAt( iFormat ) === "'" && !lookAhead( "'" ) ) {
+                                               literal = false;
+                                       } else {
+                                               output += format.charAt( iFormat );
+                                       }
+                               } else {
+                                       switch ( format.charAt( iFormat ) ) {
+                                               case "d":
+                                                       output += formatNumber( "d", date.getDate(), 2 );
+                                                       break;
+                                               case "D":
+                                                       output += formatName( "D", date.getDay(), dayNamesShort, dayNames );
+                                                       break;
+                                               case "o":
+                                                       output += formatNumber( "o",
+                                                               Math.round( ( new Date( date.getFullYear(), date.getMonth(), date.getDate() ).getTime() - new Date( date.getFullYear(), 0, 0 ).getTime() ) / 86400000 ), 3 );
+                                                       break;
+                                               case "m":
+                                                       output += formatNumber( "m", date.getMonth() + 1, 2 );
+                                                       break;
+                                               case "M":
+                                                       output += formatName( "M", date.getMonth(), monthNamesShort, monthNames );
+                                                       break;
+                                               case "y":
+                                                       output += ( lookAhead( "y" ) ? date.getFullYear() :
+                                                               ( date.getFullYear() % 100 < 10 ? "0" : "" ) + date.getFullYear() % 100 );
+                                                       break;
+                                               case "@":
+                                                       output += date.getTime();
+                                                       break;
+                                               case "!":
+                                                       output += date.getTime() * 10000 + this._ticksTo1970;
+                                                       break;
+                                               case "'":
+                                                       if ( lookAhead( "'" ) ) {
+                                                               output += "'";
+                                                       } else {
+                                                               literal = true;
+                                                       }
+                                                       break;
+                                               default:
+                                                       output += format.charAt( iFormat );
+                                       }
+                               }
+                       }
+               }
+               return output;
+       },
+
+       /* Extract all possible characters from the date format. */
+       _possibleChars: function( format ) {
+               var iFormat,
+                       chars = "",
+                       literal = false,
+
+                       // Check whether a format character is doubled
+                       lookAhead = function( match ) {
+                               var matches = ( iFormat + 1 < format.length && format.charAt( iFormat + 1 ) === match );
+                               if ( matches ) {
+                                       iFormat++;
+                               }
+                               return matches;
+                       };
+
+               for ( iFormat = 0; iFormat < format.length; iFormat++ ) {
+                       if ( literal ) {
+                               if ( format.charAt( iFormat ) === "'" && !lookAhead( "'" ) ) {
+                                       literal = false;
+                               } else {
+                                       chars += format.charAt( iFormat );
+                               }
+                       } else {
+                               switch ( format.charAt( iFormat ) ) {
+                                       case "d": case "m": case "y": case "@":
+                                               chars += "0123456789";
+                                               break;
+                                       case "D": case "M":
+                                               return null; // Accept anything
+                                       case "'":
+                                               if ( lookAhead( "'" ) ) {
+                                                       chars += "'";
+                                               } else {
+                                                       literal = true;
+                                               }
+                                               break;
+                                       default:
+                                               chars += format.charAt( iFormat );
+                               }
+                       }
+               }
+               return chars;
+       },
+
+       /* Get a setting value, defaulting if necessary. */
+       _get: function( inst, name ) {
+               return inst.settings[ name ] !== undefined ?
+                       inst.settings[ name ] : this._defaults[ name ];
+       },
+
+       /* Parse existing date and initialise date picker. */
+       _setDateFromField: function( inst, noDefault ) {
+               if ( inst.input.val() === inst.lastVal ) {
+                       return;
+               }
+
+               var dateFormat = this._get( inst, "dateFormat" ),
+                       dates = inst.lastVal = inst.input ? inst.input.val() : null,
+                       defaultDate = this._getDefaultDate( inst ),
+                       date = defaultDate,
+                       settings = this._getFormatConfig( inst );
+
+               try {
+                       date = this.parseDate( dateFormat, dates, settings ) || defaultDate;
+               } catch ( event ) {
+                       dates = ( noDefault ? "" : dates );
+               }
+               inst.selectedDay = date.getDate();
+               inst.drawMonth = inst.selectedMonth = date.getMonth();
+               inst.drawYear = inst.selectedYear = date.getFullYear();
+               inst.currentDay = ( dates ? date.getDate() : 0 );
+               inst.currentMonth = ( dates ? date.getMonth() : 0 );
+               inst.currentYear = ( dates ? date.getFullYear() : 0 );
+               this._adjustInstDate( inst );
+       },
+
+       /* Retrieve the default date shown on opening. */
+       _getDefaultDate: function( inst ) {
+               return this._restrictMinMax( inst,
+                       this._determineDate( inst, this._get( inst, "defaultDate" ), new Date() ) );
+       },
+
+       /* A date may be specified as an exact value or a relative one. */
+       _determineDate: function( inst, date, defaultDate ) {
+               var offsetNumeric = function( offset ) {
+                               var date = new Date();
+                               date.setDate( date.getDate() + offset );
+                               return date;
+                       },
+                       offsetString = function( offset ) {
+                               try {
+                                       return $.datepicker.parseDate( $.datepicker._get( inst, "dateFormat" ),
+                                               offset, $.datepicker._getFormatConfig( inst ) );
+                               }
+                               catch ( e ) {
+
+                                       // Ignore
+                               }
+
+                               var date = ( offset.toLowerCase().match( /^c/ ) ?
+                                       $.datepicker._getDate( inst ) : null ) || new Date(),
+                                       year = date.getFullYear(),
+                                       month = date.getMonth(),
+                                       day = date.getDate(),
+                                       pattern = /([+\-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,
+                                       matches = pattern.exec( offset );
+
+                               while ( matches ) {
+                                       switch ( matches[ 2 ] || "d" ) {
+                                               case "d" : case "D" :
+                                                       day += parseInt( matches[ 1 ], 10 ); break;
+                                               case "w" : case "W" :
+                                                       day += parseInt( matches[ 1 ], 10 ) * 7; break;
+                                               case "m" : case "M" :
+                                                       month += parseInt( matches[ 1 ], 10 );
+                                                       day = Math.min( day, $.datepicker._getDaysInMonth( year, month ) );
+                                                       break;
+                                               case "y": case "Y" :
+                                                       year += parseInt( matches[ 1 ], 10 );
+                                                       day = Math.min( day, $.datepicker._getDaysInMonth( year, month ) );
+                                                       break;
+                                       }
+                                       matches = pattern.exec( offset );
+                               }
+                               return new Date( year, month, day );
+                       },
+                       newDate = ( date == null || date === "" ? defaultDate : ( typeof date === "string" ? offsetString( date ) :
+                               ( typeof date === "number" ? ( isNaN( date ) ? defaultDate : offsetNumeric( date ) ) : new Date( date.getTime() ) ) ) );
+
+               newDate = ( newDate && newDate.toString() === "Invalid Date" ? defaultDate : newDate );
+               if ( newDate ) {
+                       newDate.setHours( 0 );
+                       newDate.setMinutes( 0 );
+                       newDate.setSeconds( 0 );
+                       newDate.setMilliseconds( 0 );
+               }
+               return this._daylightSavingAdjust( newDate );
+       },
+
+       /* Handle switch to/from daylight saving.
+        * Hours may be non-zero on daylight saving cut-over:
+        * > 12 when midnight changeover, but then cannot generate
+        * midnight datetime, so jump to 1AM, otherwise reset.
+        * @param  date  (Date) the date to check
+        * @return  (Date) the corrected date
+        */
+       _daylightSavingAdjust: function( date ) {
+               if ( !date ) {
+                       return null;
+               }
+               date.setHours( date.getHours() > 12 ? date.getHours() + 2 : 0 );
+               return date;
+       },
+
+       /* Set the date(s) directly. */
+       _setDate: function( inst, date, noChange ) {
+               var clear = !date,
+                       origMonth = inst.selectedMonth,
+                       origYear = inst.selectedYear,
+                       newDate = this._restrictMinMax( inst, this._determineDate( inst, date, new Date() ) );
+
+               inst.selectedDay = inst.currentDay = newDate.getDate();
+               inst.drawMonth = inst.selectedMonth = inst.currentMonth = newDate.getMonth();
+               inst.drawYear = inst.selectedYear = inst.currentYear = newDate.getFullYear();
+               if ( ( origMonth !== inst.selectedMonth || origYear !== inst.selectedYear ) && !noChange ) {
+                       this._notifyChange( inst );
+               }
+               this._adjustInstDate( inst );
+               if ( inst.input ) {
+                       inst.input.val( clear ? "" : this._formatDate( inst ) );
+               }
+       },
+
+       /* Retrieve the date(s) directly. */
+       _getDate: function( inst ) {
+               var startDate = ( !inst.currentYear || ( inst.input && inst.input.val() === "" ) ? null :
+                       this._daylightSavingAdjust( new Date(
+                       inst.currentYear, inst.currentMonth, inst.currentDay ) ) );
+                       return startDate;
+       },
+
+       /* Attach the onxxx handlers.  These are declared statically so
+        * they work with static code transformers like Caja.
+        */
+       _attachHandlers: function( inst ) {
+               var stepMonths = this._get( inst, "stepMonths" ),
+                       id = "#" + inst.id.replace( /\\\\/g, "\\" );
+               inst.dpDiv.find( "[data-handler]" ).map( function() {
+                       var handler = {
+                               prev: function() {
+                                       $.datepicker._adjustDate( id, -stepMonths, "M" );
+                               },
+                               next: function() {
+                                       $.datepicker._adjustDate( id, +stepMonths, "M" );
+                               },
+                               hide: function() {
+                                       $.datepicker._hideDatepicker();
+                               },
+                               today: function() {
+                                       $.datepicker._gotoToday( id );
+                               },
+                               selectDay: function() {
+                                       $.datepicker._selectDay( id, +this.getAttribute( "data-month" ), +this.getAttribute( "data-year" ), this );
+                                       return false;
+                               },
+                               selectMonth: function() {
+                                       $.datepicker._selectMonthYear( id, this, "M" );
+                                       return false;
+                               },
+                               selectYear: function() {
+                                       $.datepicker._selectMonthYear( id, this, "Y" );
+                                       return false;
+                               }
+                       };
+                       $( this ).on( this.getAttribute( "data-event" ), handler[ this.getAttribute( "data-handler" ) ] );
+               } );
+       },
+
+       /* Generate the HTML for the current state of the date picker. */
+       _generateHTML: function( inst ) {
+               var maxDraw, prevText, prev, nextText, next, currentText, gotoDate,
+                       controls, buttonPanel, firstDay, showWeek, dayNames, dayNamesMin,
+                       monthNames, monthNamesShort, beforeShowDay, showOtherMonths,
+                       selectOtherMonths, defaultDate, html, dow, row, group, col, selectedDate,
+                       cornerClass, calender, thead, day, daysInMonth, leadDays, curRows, numRows,
+                       printDate, dRow, tbody, daySettings, otherMonth, unselectable,
+                       tempDate = new Date(),
+                       today = this._daylightSavingAdjust(
+                               new Date( tempDate.getFullYear(), tempDate.getMonth(), tempDate.getDate() ) ), // clear time
+                       isRTL = this._get( inst, "isRTL" ),
+                       showButtonPanel = this._get( inst, "showButtonPanel" ),
+                       hideIfNoPrevNext = this._get( inst, "hideIfNoPrevNext" ),
+                       navigationAsDateFormat = this._get( inst, "navigationAsDateFormat" ),
+                       numMonths = this._getNumberOfMonths( inst ),
+                       showCurrentAtPos = this._get( inst, "showCurrentAtPos" ),
+                       stepMonths = this._get( inst, "stepMonths" ),
+                       isMultiMonth = ( numMonths[ 0 ] !== 1 || numMonths[ 1 ] !== 1 ),
+                       currentDate = this._daylightSavingAdjust( ( !inst.currentDay ? new Date( 9999, 9, 9 ) :
+                               new Date( inst.currentYear, inst.currentMonth, inst.currentDay ) ) ),
+                       minDate = this._getMinMaxDate( inst, "min" ),
+                       maxDate = this._getMinMaxDate( inst, "max" ),
+                       drawMonth = inst.drawMonth - showCurrentAtPos,
+                       drawYear = inst.drawYear;
+
+               if ( drawMonth < 0 ) {
+                       drawMonth += 12;
+                       drawYear--;
+               }
+               if ( maxDate ) {
+                       maxDraw = this._daylightSavingAdjust( new Date( maxDate.getFullYear(),
+                               maxDate.getMonth() - ( numMonths[ 0 ] * numMonths[ 1 ] ) + 1, maxDate.getDate() ) );
+                       maxDraw = ( minDate && maxDraw < minDate ? minDate : maxDraw );
+                       while ( this._daylightSavingAdjust( new Date( drawYear, drawMonth, 1 ) ) > maxDraw ) {
+                               drawMonth--;
+                               if ( drawMonth < 0 ) {
+                                       drawMonth = 11;
+                                       drawYear--;
+                               }
+                       }
+               }
+               inst.drawMonth = drawMonth;
+               inst.drawYear = drawYear;
+
+               prevText = this._get( inst, "prevText" );
+               prevText = ( !navigationAsDateFormat ? prevText : this.formatDate( prevText,
+                       this._daylightSavingAdjust( new Date( drawYear, drawMonth - stepMonths, 1 ) ),
+                       this._getFormatConfig( inst ) ) );
+
+               prev = ( this._canAdjustMonth( inst, -1, drawYear, drawMonth ) ?
+                       "<a class='ui-datepicker-prev ui-corner-all' data-handler='prev' data-event='click'" +
+                       " title='" + prevText + "'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "e" : "w" ) + "'>" + prevText + "</span></a>" :
+                       ( hideIfNoPrevNext ? "" : "<a class='ui-datepicker-prev ui-corner-all ui-state-disabled' title='" + prevText + "'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "e" : "w" ) + "'>" + prevText + "</span></a>" ) );
+
+               nextText = this._get( inst, "nextText" );
+               nextText = ( !navigationAsDateFormat ? nextText : this.formatDate( nextText,
+                       this._daylightSavingAdjust( new Date( drawYear, drawMonth + stepMonths, 1 ) ),
+                       this._getFormatConfig( inst ) ) );
+
+               next = ( this._canAdjustMonth( inst, +1, drawYear, drawMonth ) ?
+                       "<a class='ui-datepicker-next ui-corner-all' data-handler='next' data-event='click'" +
+                       " title='" + nextText + "'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "w" : "e" ) + "'>" + nextText + "</span></a>" :
+                       ( hideIfNoPrevNext ? "" : "<a class='ui-datepicker-next ui-corner-all ui-state-disabled' title='" + nextText + "'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "w" : "e" ) + "'>" + nextText + "</span></a>" ) );
+
+               currentText = this._get( inst, "currentText" );
+               gotoDate = ( this._get( inst, "gotoCurrent" ) && inst.currentDay ? currentDate : today );
+               currentText = ( !navigationAsDateFormat ? currentText :
+                       this.formatDate( currentText, gotoDate, this._getFormatConfig( inst ) ) );
+
+               controls = ( !inst.inline ? "<button type='button' class='ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all' data-handler='hide' data-event='click'>" +
+                       this._get( inst, "closeText" ) + "</button>" : "" );
+
+               buttonPanel = ( showButtonPanel ) ? "<div class='ui-datepicker-buttonpane ui-widget-content'>" + ( isRTL ? controls : "" ) +
+                       ( this._isInRange( inst, gotoDate ) ? "<button type='button' class='ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all' data-handler='today' data-event='click'" +
+                       ">" + currentText + "</button>" : "" ) + ( isRTL ? "" : controls ) + "</div>" : "";
+
+               firstDay = parseInt( this._get( inst, "firstDay" ), 10 );
+               firstDay = ( isNaN( firstDay ) ? 0 : firstDay );
+
+               showWeek = this._get( inst, "showWeek" );
+               dayNames = this._get( inst, "dayNames" );
+               dayNamesMin = this._get( inst, "dayNamesMin" );
+               monthNames = this._get( inst, "monthNames" );
+               monthNamesShort = this._get( inst, "monthNamesShort" );
+               beforeShowDay = this._get( inst, "beforeShowDay" );
+               showOtherMonths = this._get( inst, "showOtherMonths" );
+               selectOtherMonths = this._get( inst, "selectOtherMonths" );
+               defaultDate = this._getDefaultDate( inst );
+               html = "";
+
+               for ( row = 0; row < numMonths[ 0 ]; row++ ) {
+                       group = "";
+                       this.maxRows = 4;
+                       for ( col = 0; col < numMonths[ 1 ]; col++ ) {
+                               selectedDate = this._daylightSavingAdjust( new Date( drawYear, drawMonth, inst.selectedDay ) );
+                               cornerClass = " ui-corner-all";
+                               calender = "";
+                               if ( isMultiMonth ) {
+                                       calender += "<div class='ui-datepicker-group";
+                                       if ( numMonths[ 1 ] > 1 ) {
+                                               switch ( col ) {
+                                                       case 0: calender += " ui-datepicker-group-first";
+                                                               cornerClass = " ui-corner-" + ( isRTL ? "right" : "left" ); break;
+                                                       case numMonths[ 1 ] - 1: calender += " ui-datepicker-group-last";
+                                                               cornerClass = " ui-corner-" + ( isRTL ? "left" : "right" ); break;
+                                                       default: calender += " ui-datepicker-group-middle"; cornerClass = ""; break;
+                                               }
+                                       }
+                                       calender += "'>";
+                               }
+                               calender += "<div class='ui-datepicker-header ui-widget-header ui-helper-clearfix" + cornerClass + "'>" +
+                                       ( /all|left/.test( cornerClass ) && row === 0 ? ( isRTL ? next : prev ) : "" ) +
+                                       ( /all|right/.test( cornerClass ) && row === 0 ? ( isRTL ? prev : next ) : "" ) +
+                                       this._generateMonthYearHeader( inst, drawMonth, drawYear, minDate, maxDate,
+                                       row > 0 || col > 0, monthNames, monthNamesShort ) + // draw month headers
+                                       "</div><table class='ui-datepicker-calendar'><thead>" +
+                                       "<tr>";
+                               thead = ( showWeek ? "<th class='ui-datepicker-week-col'>" + this._get( inst, "weekHeader" ) + "</th>" : "" );
+                               for ( dow = 0; dow < 7; dow++ ) { // days of the week
+                                       day = ( dow + firstDay ) % 7;
+                                       thead += "<th scope='col'" + ( ( dow + firstDay + 6 ) % 7 >= 5 ? " class='ui-datepicker-week-end'" : "" ) + ">" +
+                                               "<span title='" + dayNames[ day ] + "'>" + dayNamesMin[ day ] + "</span></th>";
+                               }
+                               calender += thead + "</tr></thead><tbody>";
+                               daysInMonth = this._getDaysInMonth( drawYear, drawMonth );
+                               if ( drawYear === inst.selectedYear && drawMonth === inst.selectedMonth ) {
+                                       inst.selectedDay = Math.min( inst.selectedDay, daysInMonth );
+                               }
+                               leadDays = ( this._getFirstDayOfMonth( drawYear, drawMonth ) - firstDay + 7 ) % 7;
+                               curRows = Math.ceil( ( leadDays + daysInMonth ) / 7 ); // calculate the number of rows to generate
+                               numRows = ( isMultiMonth ? this.maxRows > curRows ? this.maxRows : curRows : curRows ); //If multiple months, use the higher number of rows (see #7043)
+                               this.maxRows = numRows;
+                               printDate = this._daylightSavingAdjust( new Date( drawYear, drawMonth, 1 - leadDays ) );
+                               for ( dRow = 0; dRow < numRows; dRow++ ) { // create date picker rows
+                                       calender += "<tr>";
+                                       tbody = ( !showWeek ? "" : "<td class='ui-datepicker-week-col'>" +
+                                               this._get( inst, "calculateWeek" )( printDate ) + "</td>" );
+                                       for ( dow = 0; dow < 7; dow++ ) { // create date picker days
+                                               daySettings = ( beforeShowDay ?
+                                                       beforeShowDay.apply( ( inst.input ? inst.input[ 0 ] : null ), [ printDate ] ) : [ true, "" ] );
+                                               otherMonth = ( printDate.getMonth() !== drawMonth );
+                                               unselectable = ( otherMonth && !selectOtherMonths ) || !daySettings[ 0 ] ||
+                                                       ( minDate && printDate < minDate ) || ( maxDate && printDate > maxDate );
+                                               tbody += "<td class='" +
+                                                       ( ( dow + firstDay + 6 ) % 7 >= 5 ? " ui-datepicker-week-end" : "" ) + // highlight weekends
+                                                       ( otherMonth ? " ui-datepicker-other-month" : "" ) + // highlight days from other months
+                                                       ( ( printDate.getTime() === selectedDate.getTime() && drawMonth === inst.selectedMonth && inst._keyEvent ) || // user pressed key
+                                                       ( defaultDate.getTime() === printDate.getTime() && defaultDate.getTime() === selectedDate.getTime() ) ?
+
+                                                       // or defaultDate is current printedDate and defaultDate is selectedDate
+                                                       " " + this._dayOverClass : "" ) + // highlight selected day
+                                                       ( unselectable ? " " + this._unselectableClass + " ui-state-disabled" : "" ) +  // highlight unselectable days
+                                                       ( otherMonth && !showOtherMonths ? "" : " " + daySettings[ 1 ] + // highlight custom dates
+                                                       ( printDate.getTime() === currentDate.getTime() ? " " + this._currentClass : "" ) + // highlight selected day
+                                                       ( printDate.getTime() === today.getTime() ? " ui-datepicker-today" : "" ) ) + "'" + // highlight today (if different)
+                                                       ( ( !otherMonth || showOtherMonths ) && daySettings[ 2 ] ? " title='" + daySettings[ 2 ].replace( /'/g, "&#39;" ) + "'" : "" ) + // cell title
+                                                       ( unselectable ? "" : " data-handler='selectDay' data-event='click' data-month='" + printDate.getMonth() + "' data-year='" + printDate.getFullYear() + "'" ) + ">" + // actions
+                                                       ( otherMonth && !showOtherMonths ? "&#xa0;" : // display for other months
+                                                       ( unselectable ? "<span class='ui-state-default'>" + printDate.getDate() + "</span>" : "<a class='ui-state-default" +
+                                                       ( printDate.getTime() === today.getTime() ? " ui-state-highlight" : "" ) +
+                                                       ( printDate.getTime() === currentDate.getTime() ? " ui-state-active" : "" ) + // highlight selected day
+                                                       ( otherMonth ? " ui-priority-secondary" : "" ) + // distinguish dates from other months
+                                                       "' href='#'>" + printDate.getDate() + "</a>" ) ) + "</td>"; // display selectable date
+                                               printDate.setDate( printDate.getDate() + 1 );
+                                               printDate = this._daylightSavingAdjust( printDate );
+                                       }
+                                       calender += tbody + "</tr>";
+                               }
+                               drawMonth++;
+                               if ( drawMonth > 11 ) {
+                                       drawMonth = 0;
+                                       drawYear++;
+                               }
+                               calender += "</tbody></table>" + ( isMultiMonth ? "</div>" +
+                                                       ( ( numMonths[ 0 ] > 0 && col === numMonths[ 1 ] - 1 ) ? "<div class='ui-datepicker-row-break'></div>" : "" ) : "" );
+                               group += calender;
+                       }
+                       html += group;
+               }
+               html += buttonPanel;
+               inst._keyEvent = false;
+               return html;
+       },
+
+       /* Generate the month and year header. */
+       _generateMonthYearHeader: function( inst, drawMonth, drawYear, minDate, maxDate,
+                       secondary, monthNames, monthNamesShort ) {
+
+               var inMinYear, inMaxYear, month, years, thisYear, determineYear, year, endYear,
+                       changeMonth = this._get( inst, "changeMonth" ),
+                       changeYear = this._get( inst, "changeYear" ),
+                       showMonthAfterYear = this._get( inst, "showMonthAfterYear" ),
+                       html = "<div class='ui-datepicker-title'>",
+                       monthHtml = "";
+
+               // Month selection
+               if ( secondary || !changeMonth ) {
+                       monthHtml += "<span class='ui-datepicker-month'>" + monthNames[ drawMonth ] + "</span>";
+               } else {
+                       inMinYear = ( minDate && minDate.getFullYear() === drawYear );
+                       inMaxYear = ( maxDate && maxDate.getFullYear() === drawYear );
+                       monthHtml += "<select class='ui-datepicker-month' data-handler='selectMonth' data-event='change'>";
+                       for ( month = 0; month < 12; month++ ) {
+                               if ( ( !inMinYear || month >= minDate.getMonth() ) && ( !inMaxYear || month <= maxDate.getMonth() ) ) {
+                                       monthHtml += "<option value='" + month + "'" +
+                                               ( month === drawMonth ? " selected='selected'" : "" ) +
+                                               ">" + monthNamesShort[ month ] + "</option>";
+                               }
+                       }
+                       monthHtml += "</select>";
+               }
+
+               if ( !showMonthAfterYear ) {
+                       html += monthHtml + ( secondary || !( changeMonth && changeYear ) ? "&#xa0;" : "" );
+               }
+
+               // Year selection
+               if ( !inst.yearshtml ) {
+                       inst.yearshtml = "";
+                       if ( secondary || !changeYear ) {
+                               html += "<span class='ui-datepicker-year'>" + drawYear + "</span>";
+                       } else {
+
+                               // determine range of years to display
+                               years = this._get( inst, "yearRange" ).split( ":" );
+                               thisYear = new Date().getFullYear();
+                               determineYear = function( value ) {
+                                       var year = ( value.match( /c[+\-].*/ ) ? drawYear + parseInt( value.substring( 1 ), 10 ) :
+                                               ( value.match( /[+\-].*/ ) ? thisYear + parseInt( value, 10 ) :
+                                               parseInt( value, 10 ) ) );
+                                       return ( isNaN( year ) ? thisYear : year );
+                               };
+                               year = determineYear( years[ 0 ] );
+                               endYear = Math.max( year, determineYear( years[ 1 ] || "" ) );
+                               year = ( minDate ? Math.max( year, minDate.getFullYear() ) : year );
+                               endYear = ( maxDate ? Math.min( endYear, maxDate.getFullYear() ) : endYear );
+                               inst.yearshtml += "<select class='ui-datepicker-year' data-handler='selectYear' data-event='change'>";
+                               for ( ; year <= endYear; year++ ) {
+                                       inst.yearshtml += "<option value='" + year + "'" +
+                                               ( year === drawYear ? " selected='selected'" : "" ) +
+                                               ">" + year + "</option>";
+                               }
+                               inst.yearshtml += "</select>";
+
+                               html += inst.yearshtml;
+                               inst.yearshtml = null;
+                       }
+               }
+
+               html += this._get( inst, "yearSuffix" );
+               if ( showMonthAfterYear ) {
+                       html += ( secondary || !( changeMonth && changeYear ) ? "&#xa0;" : "" ) + monthHtml;
+               }
+               html += "</div>"; // Close datepicker_header
+               return html;
+       },
+
+       /* Adjust one of the date sub-fields. */
+       _adjustInstDate: function( inst, offset, period ) {
+               var year = inst.selectedYear + ( period === "Y" ? offset : 0 ),
+                       month = inst.selectedMonth + ( period === "M" ? offset : 0 ),
+                       day = Math.min( inst.selectedDay, this._getDaysInMonth( year, month ) ) + ( period === "D" ? offset : 0 ),
+                       date = this._restrictMinMax( inst, this._daylightSavingAdjust( new Date( year, month, day ) ) );
+
+               inst.selectedDay = date.getDate();
+               inst.drawMonth = inst.selectedMonth = date.getMonth();
+               inst.drawYear = inst.selectedYear = date.getFullYear();
+               if ( period === "M" || period === "Y" ) {
+                       this._notifyChange( inst );
+               }
+       },
+
+       /* Ensure a date is within any min/max bounds. */
+       _restrictMinMax: function( inst, date ) {
+               var minDate = this._getMinMaxDate( inst, "min" ),
+                       maxDate = this._getMinMaxDate( inst, "max" ),
+                       newDate = ( minDate && date < minDate ? minDate : date );
+               return ( maxDate && newDate > maxDate ? maxDate : newDate );
+       },
+
+       /* Notify change of month/year. */
+       _notifyChange: function( inst ) {
+               var onChange = this._get( inst, "onChangeMonthYear" );
+               if ( onChange ) {
+                       onChange.apply( ( inst.input ? inst.input[ 0 ] : null ),
+                               [ inst.selectedYear, inst.selectedMonth + 1, inst ] );
+               }
+       },
+
+       /* Determine the number of months to show. */
+       _getNumberOfMonths: function( inst ) {
+               var numMonths = this._get( inst, "numberOfMonths" );
+               return ( numMonths == null ? [ 1, 1 ] : ( typeof numMonths === "number" ? [ 1, numMonths ] : numMonths ) );
+       },
+
+       /* Determine the current maximum date - ensure no time components are set. */
+       _getMinMaxDate: function( inst, minMax ) {
+               return this._determineDate( inst, this._get( inst, minMax + "Date" ), null );
+       },
+
+       /* Find the number of days in a given month. */
+       _getDaysInMonth: function( year, month ) {
+               return 32 - this._daylightSavingAdjust( new Date( year, month, 32 ) ).getDate();
+       },
+
+       /* Find the day of the week of the first of a month. */
+       _getFirstDayOfMonth: function( year, month ) {
+               return new Date( year, month, 1 ).getDay();
+       },
+
+       /* Determines if we should allow a "next/prev" month display change. */
+       _canAdjustMonth: function( inst, offset, curYear, curMonth ) {
+               var numMonths = this._getNumberOfMonths( inst ),
+                       date = this._daylightSavingAdjust( new Date( curYear,
+                       curMonth + ( offset < 0 ? offset : numMonths[ 0 ] * numMonths[ 1 ] ), 1 ) );
+
+               if ( offset < 0 ) {
+                       date.setDate( this._getDaysInMonth( date.getFullYear(), date.getMonth() ) );
+               }
+               return this._isInRange( inst, date );
+       },
+
+       /* Is the given date in the accepted range? */
+       _isInRange: function( inst, date ) {
+               var yearSplit, currentYear,
+                       minDate = this._getMinMaxDate( inst, "min" ),
+                       maxDate = this._getMinMaxDate( inst, "max" ),
+                       minYear = null,
+                       maxYear = null,
+                       years = this._get( inst, "yearRange" );
+                       if ( years ) {
+                               yearSplit = years.split( ":" );
+                               currentYear = new Date().getFullYear();
+                               minYear = parseInt( yearSplit[ 0 ], 10 );
+                               maxYear = parseInt( yearSplit[ 1 ], 10 );
+                               if ( yearSplit[ 0 ].match( /[+\-].*/ ) ) {
+                                       minYear += currentYear;
+                               }
+                               if ( yearSplit[ 1 ].match( /[+\-].*/ ) ) {
+                                       maxYear += currentYear;
+                               }
+                       }
+
+               return ( ( !minDate || date.getTime() >= minDate.getTime() ) &&
+                       ( !maxDate || date.getTime() <= maxDate.getTime() ) &&
+                       ( !minYear || date.getFullYear() >= minYear ) &&
+                       ( !maxYear || date.getFullYear() <= maxYear ) );
+       },
+
+       /* Provide the configuration settings for formatting/parsing. */
+       _getFormatConfig: function( inst ) {
+               var shortYearCutoff = this._get( inst, "shortYearCutoff" );
+               shortYearCutoff = ( typeof shortYearCutoff !== "string" ? shortYearCutoff :
+                       new Date().getFullYear() % 100 + parseInt( shortYearCutoff, 10 ) );
+               return { shortYearCutoff: shortYearCutoff,
+                       dayNamesShort: this._get( inst, "dayNamesShort" ), dayNames: this._get( inst, "dayNames" ),
+                       monthNamesShort: this._get( inst, "monthNamesShort" ), monthNames: this._get( inst, "monthNames" ) };
+       },
+
+       /* Format the given date for display. */
+       _formatDate: function( inst, day, month, year ) {
+               if ( !day ) {
+                       inst.currentDay = inst.selectedDay;
+                       inst.currentMonth = inst.selectedMonth;
+                       inst.currentYear = inst.selectedYear;
+               }
+               var date = ( day ? ( typeof day === "object" ? day :
+                       this._daylightSavingAdjust( new Date( year, month, day ) ) ) :
+                       this._daylightSavingAdjust( new Date( inst.currentYear, inst.currentMonth, inst.currentDay ) ) );
+               return this.formatDate( this._get( inst, "dateFormat" ), date, this._getFormatConfig( inst ) );
+       }
+} );
+
+/*
+ * Bind hover events for datepicker elements.
+ * Done via delegate so the binding only occurs once in the lifetime of the parent div.
+ * Global datepicker_instActive, set by _updateDatepicker allows the handlers to find their way back to the active picker.
+ */
+function datepicker_bindHover( dpDiv ) {
+       var selector = "button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a";
+       return dpDiv.on( "mouseout", selector, function() {
+                       $( this ).removeClass( "ui-state-hover" );
+                       if ( this.className.indexOf( "ui-datepicker-prev" ) !== -1 ) {
+                               $( this ).removeClass( "ui-datepicker-prev-hover" );
+                       }
+                       if ( this.className.indexOf( "ui-datepicker-next" ) !== -1 ) {
+                               $( this ).removeClass( "ui-datepicker-next-hover" );
+                       }
+               } )
+               .on( "mouseover", selector, datepicker_handleMouseover );
+}
+
+function datepicker_handleMouseover() {
+       if ( !$.datepicker._isDisabledDatepicker( datepicker_instActive.inline ? datepicker_instActive.dpDiv.parent()[ 0 ] : datepicker_instActive.input[ 0 ] ) ) {
+               $( this ).parents( ".ui-datepicker-calendar" ).find( "a" ).removeClass( "ui-state-hover" );
+               $( this ).addClass( "ui-state-hover" );
+               if ( this.className.indexOf( "ui-datepicker-prev" ) !== -1 ) {
+                       $( this ).addClass( "ui-datepicker-prev-hover" );
+               }
+               if ( this.className.indexOf( "ui-datepicker-next" ) !== -1 ) {
+                       $( this ).addClass( "ui-datepicker-next-hover" );
+               }
+       }
+}
+
+/* jQuery extend now ignores nulls! */
+function datepicker_extendRemove( target, props ) {
+       $.extend( target, props );
+       for ( var name in props ) {
+               if ( props[ name ] == null ) {
+                       target[ name ] = props[ name ];
+               }
+       }
+       return target;
+}
+
+/* Invoke the datepicker functionality.
+   @param  options  string - a command, optionally followed by additional parameters or
+                                       Object - settings for attaching new datepicker functionality
+   @return  jQuery object */
+$.fn.datepicker = function( options ) {
+
+       /* Verify an empty collection wasn't passed - Fixes #6976 */
+       if ( !this.length ) {
+               return this;
+       }
+
+       /* Initialise the date picker. */
+       if ( !$.datepicker.initialized ) {
+               $( document ).on( "mousedown", $.datepicker._checkExternalClick );
+               $.datepicker.initialized = true;
+       }
+
+       /* Append datepicker main container to body if not exist. */
+       if ( $( "#" + $.datepicker._mainDivId ).length === 0 ) {
+               $( "body" ).append( $.datepicker.dpDiv );
+       }
+
+       var otherArgs = Array.prototype.slice.call( arguments, 1 );
+       if ( typeof options === "string" && ( options === "isDisabled" || options === "getDate" || options === "widget" ) ) {
+               return $.datepicker[ "_" + options + "Datepicker" ].
+                       apply( $.datepicker, [ this[ 0 ] ].concat( otherArgs ) );
+       }
+       if ( options === "option" && arguments.length === 2 && typeof arguments[ 1 ] === "string" ) {
+               return $.datepicker[ "_" + options + "Datepicker" ].
+                       apply( $.datepicker, [ this[ 0 ] ].concat( otherArgs ) );
+       }
+       return this.each( function() {
+               typeof options === "string" ?
+                       $.datepicker[ "_" + options + "Datepicker" ].
+                               apply( $.datepicker, [ this ].concat( otherArgs ) ) :
+                       $.datepicker._attachDatepicker( this, options );
+       } );
+};
+
+$.datepicker = new Datepicker(); // singleton instance
+$.datepicker.initialized = false;
+$.datepicker.uuid = new Date().getTime();
+$.datepicker.version = "1.12.1";
+
+var widgetsDatepicker = $.datepicker;
+
+
+/*!
+ * jQuery UI Dialog 1.12.1
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ */
+
+//>>label: Dialog
+//>>group: Widgets
+//>>description: Displays customizable dialog windows.
+//>>docs: http://api.jqueryui.com/dialog/
+//>>demos: http://jqueryui.com/dialog/
+//>>css.structure: ../../themes/base/core.css
+//>>css.structure: ../../themes/base/dialog.css
+//>>css.theme: ../../themes/base/theme.css
+
+
+
+$.widget( "ui.dialog", {
+       version: "1.12.1",
+       options: {
+               appendTo: "body",
+               autoOpen: true,
+               buttons: [],
+               classes: {
+                       "ui-dialog": "ui-corner-all",
+                       "ui-dialog-titlebar": "ui-corner-all"
+               },
+               closeOnEscape: true,
+               closeText: "Close",
+               draggable: true,
+               hide: null,
+               height: "auto",
+               maxHeight: null,
+               maxWidth: null,
+               minHeight: 150,
+               minWidth: 150,
+               modal: false,
+               position: {
+                       my: "center",
+                       at: "center",
+                       of: window,
+                       collision: "fit",
+
+                       // Ensure the titlebar is always visible
+                       using: function( pos ) {
+                               var topOffset = $( this ).css( pos ).offset().top;
+                               if ( topOffset < 0 ) {
+                                       $( this ).css( "top", pos.top - topOffset );
+                               }
+                       }
+               },
+               resizable: true,
+               show: null,
+               title: null,
+               width: 300,
+
+               // Callbacks
+               beforeClose: null,
+               close: null,
+               drag: null,
+               dragStart: null,
+               dragStop: null,
+               focus: null,
+               open: null,
+               resize: null,
+               resizeStart: null,
+               resizeStop: null
+       },
+
+       sizeRelatedOptions: {
+               buttons: true,
+               height: true,
+               maxHeight: true,
+               maxWidth: true,
+               minHeight: true,
+               minWidth: true,
+               width: true
+       },
+
+       resizableRelatedOptions: {
+               maxHeight: true,
+               maxWidth: true,
+               minHeight: true,
+               minWidth: true
+       },
+
+       _create: function() {
+               this.originalCss = {
+                       display: this.element[ 0 ].style.display,
+                       width: this.element[ 0 ].style.width,
+                       minHeight: this.element[ 0 ].style.minHeight,
+                       maxHeight: this.element[ 0 ].style.maxHeight,
+                       height: this.element[ 0 ].style.height
+               };
+               this.originalPosition = {
+                       parent: this.element.parent(),
+                       index: this.element.parent().children().index( this.element )
+               };
+               this.originalTitle = this.element.attr( "title" );
+               if ( this.options.title == null && this.originalTitle != null ) {
+                       this.options.title = this.originalTitle;
+               }
+
+               // Dialogs can't be disabled
+               if ( this.options.disabled ) {
+                       this.options.disabled = false;
+               }
+
+               this._createWrapper();
+
+               this.element
+                       .show()
+                       .removeAttr( "title" )
+                       .appendTo( this.uiDialog );
+
+               this._addClass( "ui-dialog-content", "ui-widget-content" );
+
+               this._createTitlebar();
+               this._createButtonPane();
+
+               if ( this.options.draggable && $.fn.draggable ) {
+                       this._makeDraggable();
+               }
+               if ( this.options.resizable && $.fn.resizable ) {
+                       this._makeResizable();
+               }
+
+               this._isOpen = false;
+
+               this._trackFocus();
+       },
+
+       _init: function() {
+               if ( this.options.autoOpen ) {
+                       this.open();
+               }
+       },
+
+       _appendTo: function() {
+               var element = this.options.appendTo;
+               if ( element && ( element.jquery || element.nodeType ) ) {
+                       return $( element );
+               }
+               return this.document.find( element || "body" ).eq( 0 );
+       },
+
+       _destroy: function() {
+               var next,
+                       originalPosition = this.originalPosition;
+
+               this._untrackInstance();
+               this._destroyOverlay();
+
+               this.element
+                       .removeUniqueId()
+                       .css( this.originalCss )
+
+                       // Without detaching first, the following becomes really slow
+                       .detach();
+
+               this.uiDialog.remove();
+
+               if ( this.originalTitle ) {
+                       this.element.attr( "title", this.originalTitle );
+               }
+
+               next = originalPosition.parent.children().eq( originalPosition.index );
+
+               // Don't try to place the dialog next to itself (#8613)
+               if ( next.length && next[ 0 ] !== this.element[ 0 ] ) {
+                       next.before( this.element );
+               } else {
+                       originalPosition.parent.append( this.element );
+               }
+       },
+
+       widget: function() {
+               return this.uiDialog;
+       },
+
+       disable: $.noop,
+       enable: $.noop,
+
+       close: function( event ) {
+               var that = this;
+
+               if ( !this._isOpen || this._trigger( "beforeClose", event ) === false ) {
+                       return;
+               }
+
+               this._isOpen = false;
+               this._focusedElement = null;
+               this._destroyOverlay();
+               this._untrackInstance();
+
+               if ( !this.opener.filter( ":focusable" ).trigger( "focus" ).length ) {
+
+                       // Hiding a focused element doesn't trigger blur in WebKit
+                       // so in case we have nothing to focus on, explicitly blur the active element
+                       // https://bugs.webkit.org/show_bug.cgi?id=47182
+                       $.ui.safeBlur( $.ui.safeActiveElement( this.document[ 0 ] ) );
+               }
+
+               this._hide( this.uiDialog, this.options.hide, function() {
+                       that._trigger( "close", event );
+               } );
+       },
+
+       isOpen: function() {
+               return this._isOpen;
+       },
+
+       moveToTop: function() {
+               this._moveToTop();
+       },
+
+       _moveToTop: function( event, silent ) {
+               var moved = false,
+                       zIndices = this.uiDialog.siblings( ".ui-front:visible" ).map( function() {
+                               return +$( this ).css( "z-index" );
+                       } ).get(),
+                       zIndexMax = Math.max.apply( null, zIndices );
+
+               if ( zIndexMax >= +this.uiDialog.css( "z-index" ) ) {
+                       this.uiDialog.css( "z-index", zIndexMax + 1 );
+                       moved = true;
+               }
+
+               if ( moved && !silent ) {
+                       this._trigger( "focus", event );
+               }
+               return moved;
+       },
+
+       open: function() {
+               var that = this;
+               if ( this._isOpen ) {
+                       if ( this._moveToTop() ) {
+                               this._focusTabbable();
+                       }
+                       return;
+               }
+
+               this._isOpen = true;
+               this.opener = $( $.ui.safeActiveElement( this.document[ 0 ] ) );
+
+               this._size();
+               this._position();
+               this._createOverlay();
+               this._moveToTop( null, true );
+
+               // Ensure the overlay is moved to the top with the dialog, but only when
+               // opening. The overlay shouldn't move after the dialog is open so that
+               // modeless dialogs opened after the modal dialog stack properly.
+               if ( this.overlay ) {
+                       this.overlay.css( "z-index", this.uiDialog.css( "z-index" ) - 1 );
+               }
+
+               this._show( this.uiDialog, this.options.show, function() {
+                       that._focusTabbable();
+                       that._trigger( "focus" );
+               } );
+
+               // Track the dialog immediately upon openening in case a focus event
+               // somehow occurs outside of the dialog before an element inside the
+               // dialog is focused (#10152)
+               this._makeFocusTarget();
+
+               this._trigger( "open" );
+       },
+
+       _focusTabbable: function() {
+
+               // Set focus to the first match:
+               // 1. An element that was focused previously
+               // 2. First element inside the dialog matching [autofocus]
+               // 3. Tabbable element inside the content element
+               // 4. Tabbable element inside the buttonpane
+               // 5. The close button
+               // 6. The dialog itself
+               var hasFocus = this._focusedElement;
+               if ( !hasFocus ) {
+                       hasFocus = this.element.find( "[autofocus]" );
+               }
+               if ( !hasFocus.length ) {
+                       hasFocus = this.element.find( ":tabbable" );
+               }
+               if ( !hasFocus.length ) {
+                       hasFocus = this.uiDialogButtonPane.find( ":tabbable" );
+               }
+               if ( !hasFocus.length ) {
+                       hasFocus = this.uiDialogTitlebarClose.filter( ":tabbable" );
+               }
+               if ( !hasFocus.length ) {
+                       hasFocus = this.uiDialog;
+               }
+               hasFocus.eq( 0 ).trigger( "focus" );
+       },
+
+       _keepFocus: function( event ) {
+               function checkFocus() {
+                       var activeElement = $.ui.safeActiveElement( this.document[ 0 ] ),
+                               isActive = this.uiDialog[ 0 ] === activeElement ||
+                                       $.contains( this.uiDialog[ 0 ], activeElement );
+                       if ( !isActive ) {
+                               this._focusTabbable();
+                       }
+               }
+               event.preventDefault();
+               checkFocus.call( this );
+
+               // support: IE
+               // IE <= 8 doesn't prevent moving focus even with event.preventDefault()
+               // so we check again later
+               this._delay( checkFocus );
+       },
+
+       _createWrapper: function() {
+               this.uiDialog = $( "<div>" )
+                       .hide()
+                       .attr( {
+
+                               // Setting tabIndex makes the div focusable
+                               tabIndex: -1,
+                               role: "dialog"
+                       } )
+                       .appendTo( this._appendTo() );
+
+               this._addClass( this.uiDialog, "ui-dialog", "ui-widget ui-widget-content ui-front" );
+               this._on( this.uiDialog, {
+                       keydown: function( event ) {
+                               if ( this.options.closeOnEscape && !event.isDefaultPrevented() && event.keyCode &&
+                                               event.keyCode === $.ui.keyCode.ESCAPE ) {
+                                       event.preventDefault();
+                                       this.close( event );
+                                       return;
+                               }
+
+                               // Prevent tabbing out of dialogs
+                               if ( event.keyCode !== $.ui.keyCode.TAB || event.isDefaultPrevented() ) {
+                                       return;
+                               }
+                               var tabbables = this.uiDialog.find( ":tabbable" ),
+                                       first = tabbables.filter( ":first" ),
+                                       last = tabbables.filter( ":last" );
+
+                               if ( ( event.target === last[ 0 ] || event.target === this.uiDialog[ 0 ] ) &&
+                                               !event.shiftKey ) {
+                                       this._delay( function() {
+                                               first.trigger( "focus" );
+                                       } );
+                                       event.preventDefault();
+                               } else if ( ( event.target === first[ 0 ] ||
+                                               event.target === this.uiDialog[ 0 ] ) && event.shiftKey ) {
+                                       this._delay( function() {
+                                               last.trigger( "focus" );
+                                       } );
+                                       event.preventDefault();
+                               }
+                       },
+                       mousedown: function( event ) {
+                               if ( this._moveToTop( event ) ) {
+                                       this._focusTabbable();
+                               }
+                       }
+               } );
+
+               // We assume that any existing aria-describedby attribute means
+               // that the dialog content is marked up properly
+               // otherwise we brute force the content as the description
+               if ( !this.element.find( "[aria-describedby]" ).length ) {
+                       this.uiDialog.attr( {
+                               "aria-describedby": this.element.uniqueId().attr( "id" )
+                       } );
+               }
+       },
+
+       _createTitlebar: function() {
+               var uiDialogTitle;
+
+               this.uiDialogTitlebar = $( "<div>" );
+               this._addClass( this.uiDialogTitlebar,
+                       "ui-dialog-titlebar", "ui-widget-header ui-helper-clearfix" );
+               this._on( this.uiDialogTitlebar, {
+                       mousedown: function( event ) {
+
+                               // Don't prevent click on close button (#8838)
+                               // Focusing a dialog that is partially scrolled out of view
+                               // causes the browser to scroll it into view, preventing the click event
+                               if ( !$( event.target ).closest( ".ui-dialog-titlebar-close" ) ) {
+
+                                       // Dialog isn't getting focus when dragging (#8063)
+                                       this.uiDialog.trigger( "focus" );
+                               }
+                       }
+               } );
+
+               // Support: IE
+               // Use type="button" to prevent enter keypresses in textboxes from closing the
+               // dialog in IE (#9312)
+               this.uiDialogTitlebarClose = $( "<button type='button'></button>" )
+                       .button( {
+                               label: $( "<a>" ).text( this.options.closeText ).html(),
+                               icon: "ui-icon-closethick",
+                               showLabel: false
+                       } )
+                       .appendTo( this.uiDialogTitlebar );
+
+               this._addClass( this.uiDialogTitlebarClose, "ui-dialog-titlebar-close" );
+               this._on( this.uiDialogTitlebarClose, {
+                       click: function( event ) {
+                               event.preventDefault();
+                               this.close( event );
+                       }
+               } );
+
+               uiDialogTitle = $( "<span>" ).uniqueId().prependTo( this.uiDialogTitlebar );
+               this._addClass( uiDialogTitle, "ui-dialog-title" );
+               this._title( uiDialogTitle );
+
+               this.uiDialogTitlebar.prependTo( this.uiDialog );
+
+               this.uiDialog.attr( {
+                       "aria-labelledby": uiDialogTitle.attr( "id" )
+               } );
+       },
+
+       _title: function( title ) {
+               if ( this.options.title ) {
+                       title.text( this.options.title );
+               } else {
+                       title.html( "&#160;" );
+               }
+       },
+
+       _createButtonPane: function() {
+               this.uiDialogButtonPane = $( "<div>" );
+               this._addClass( this.uiDialogButtonPane, "ui-dialog-buttonpane",
+                       "ui-widget-content ui-helper-clearfix" );
+
+               this.uiButtonSet = $( "<div>" )
+                       .appendTo( this.uiDialogButtonPane );
+               this._addClass( this.uiButtonSet, "ui-dialog-buttonset" );
+
+               this._createButtons();
+       },
+
+       _createButtons: function() {
+               var that = this,
+                       buttons = this.options.buttons;
+
+               // If we already have a button pane, remove it
+               this.uiDialogButtonPane.remove();
+               this.uiButtonSet.empty();
+
+               if ( $.isEmptyObject( buttons ) || ( $.isArray( buttons ) && !buttons.length ) ) {
+                       this._removeClass( this.uiDialog, "ui-dialog-buttons" );
+                       return;
+               }
+
+               $.each( buttons, function( name, props ) {
+                       var click, buttonOptions;
+                       props = $.isFunction( props ) ?
+                               { click: props, text: name } :
+                               props;
+
+                       // Default to a non-submitting button
+                       props = $.extend( { type: "button" }, props );
+
+                       // Change the context for the click callback to be the main element
+                       click = props.click;
+                       buttonOptions = {
+                               icon: props.icon,
+                               iconPosition: props.iconPosition,
+                               showLabel: props.showLabel,
+
+                               // Deprecated options
+                               icons: props.icons,
+                               text: props.text
+                       };
+
+                       delete props.click;
+                       delete props.icon;
+                       delete props.iconPosition;
+                       delete props.showLabel;
+
+                       // Deprecated options
+                       delete props.icons;
+                       if ( typeof props.text === "boolean" ) {
+                               delete props.text;
+                       }
+
+                       $( "<button></button>", props )
+                               .button( buttonOptions )
+                               .appendTo( that.uiButtonSet )
+                               .on( "click", function() {
+                                       click.apply( that.element[ 0 ], arguments );
+                               } );
+               } );
+               this._addClass( this.uiDialog, "ui-dialog-buttons" );
+               this.uiDialogButtonPane.appendTo( this.uiDialog );
+       },
+
+       _makeDraggable: function() {
+               var that = this,
+                       options = this.options;
+
+               function filteredUi( ui ) {
+                       return {
+                               position: ui.position,
+                               offset: ui.offset
+                       };
+               }
+
+               this.uiDialog.draggable( {
+                       cancel: ".ui-dialog-content, .ui-dialog-titlebar-close",
+                       handle: ".ui-dialog-titlebar",
+                       containment: "document",
+                       start: function( event, ui ) {
+                               that._addClass( $( this ), "ui-dialog-dragging" );
+                               that._blockFrames();
+                               that._trigger( "dragStart", event, filteredUi( ui ) );
+                       },
+                       drag: function( event, ui ) {
+                               that._trigger( "drag", event, filteredUi( ui ) );
+                       },
+                       stop: function( event, ui ) {
+                               var left = ui.offset.left - that.document.scrollLeft(),
+                                       top = ui.offset.top - that.document.scrollTop();
+
+                               options.position = {
+                                       my: "left top",
+                                       at: "left" + ( left >= 0 ? "+" : "" ) + left + " " +
+                                               "top" + ( top >= 0 ? "+" : "" ) + top,
+                                       of: that.window
+                               };
+                               that._removeClass( $( this ), "ui-dialog-dragging" );
+                               that._unblockFrames();
+                               that._trigger( "dragStop", event, filteredUi( ui ) );
+                       }
+               } );
+       },
+
+       _makeResizable: function() {
+               var that = this,
+                       options = this.options,
+                       handles = options.resizable,
+
+                       // .ui-resizable has position: relative defined in the stylesheet
+                       // but dialogs have to use absolute or fixed positioning
+                       position = this.uiDialog.css( "position" ),
+                       resizeHandles = typeof handles === "string" ?
+                               handles :
+                               "n,e,s,w,se,sw,ne,nw";
+
+               function filteredUi( ui ) {
+                       return {
+                               originalPosition: ui.originalPosition,
+                               originalSize: ui.originalSize,
+                               position: ui.position,
+                               size: ui.size
+                       };
+               }
+
+               this.uiDialog.resizable( {
+                       cancel: ".ui-dialog-content",
+                       containment: "document",
+                       alsoResize: this.element,
+                       maxWidth: options.maxWidth,
+                       maxHeight: options.maxHeight,
+                       minWidth: options.minWidth,
+                       minHeight: this._minHeight(),
+                       handles: resizeHandles,
+                       start: function( event, ui ) {
+                               that._addClass( $( this ), "ui-dialog-resizing" );
+                               that._blockFrames();
+                               that._trigger( "resizeStart", event, filteredUi( ui ) );
+                       },
+                       resize: function( event, ui ) {
+                               that._trigger( "resize", event, filteredUi( ui ) );
+                       },
+                       stop: function( event, ui ) {
+                               var offset = that.uiDialog.offset(),
+                                       left = offset.left - that.document.scrollLeft(),
+                                       top = offset.top - that.document.scrollTop();
+
+                               options.height = that.uiDialog.height();
+                               options.width = that.uiDialog.width();
+                               options.position = {
+                                       my: "left top",
+                                       at: "left" + ( left >= 0 ? "+" : "" ) + left + " " +
+                                               "top" + ( top >= 0 ? "+" : "" ) + top,
+                                       of: that.window
+                               };
+                               that._removeClass( $( this ), "ui-dialog-resizing" );
+                               that._unblockFrames();
+                               that._trigger( "resizeStop", event, filteredUi( ui ) );
+                       }
+               } )
+                       .css( "position", position );
+       },
+
+       _trackFocus: function() {
+               this._on( this.widget(), {
+                       focusin: function( event ) {
+                               this._makeFocusTarget();
+                               this._focusedElement = $( event.target );
+                       }
+               } );
+       },
+
+       _makeFocusTarget: function() {
+               this._untrackInstance();
+               this._trackingInstances().unshift( this );
+       },
+
+       _untrackInstance: function() {
+               var instances = this._trackingInstances(),
+                       exists = $.inArray( this, instances );
+               if ( exists !== -1 ) {
+                       instances.splice( exists, 1 );
+               }
+       },
+
+       _trackingInstances: function() {
+               var instances = this.document.data( "ui-dialog-instances" );
+               if ( !instances ) {
+                       instances = [];
+                       this.document.data( "ui-dialog-instances", instances );
+               }
+               return instances;
+       },
+
+       _minHeight: function() {
+               var options = this.options;
+
+               return options.height === "auto" ?
+                       options.minHeight :
+                       Math.min( options.minHeight, options.height );
+       },
+
+       _position: function() {
+
+               // Need to show the dialog to get the actual offset in the position plugin
+               var isVisible = this.uiDialog.is( ":visible" );
+               if ( !isVisible ) {
+                       this.uiDialog.show();
+               }
+               this.uiDialog.position( this.options.position );
+               if ( !isVisible ) {
+                       this.uiDialog.hide();
+               }
+       },
+
+       _setOptions: function( options ) {
+               var that = this,
+                       resize = false,
+                       resizableOptions = {};
+
+               $.each( options, function( key, value ) {
+                       that._setOption( key, value );
+
+                       if ( key in that.sizeRelatedOptions ) {
+                               resize = true;
+                       }
+                       if ( key in that.resizableRelatedOptions ) {
+                               resizableOptions[ key ] = value;
+                       }
+               } );
+
+               if ( resize ) {
+                       this._size();
+                       this._position();
+               }
+               if ( this.uiDialog.is( ":data(ui-resizable)" ) ) {
+                       this.uiDialog.resizable( "option", resizableOptions );
+               }
+       },
+
+       _setOption: function( key, value ) {
+               var isDraggable, isResizable,
+                       uiDialog = this.uiDialog;
+
+               if ( key === "disabled" ) {
+                       return;
+               }
+
+               this._super( key, value );
+
+               if ( key === "appendTo" ) {
+                       this.uiDialog.appendTo( this._appendTo() );
+               }
+
+               if ( key === "buttons" ) {
+                       this._createButtons();
+               }
+
+               if ( key === "closeText" ) {
+                       this.uiDialogTitlebarClose.button( {
+
+                               // Ensure that we always pass a string
+                               label: $( "<a>" ).text( "" + this.options.closeText ).html()
+                       } );
+               }
+
+               if ( key === "draggable" ) {
+                       isDraggable = uiDialog.is( ":data(ui-draggable)" );
+                       if ( isDraggable && !value ) {
+                               uiDialog.draggable( "destroy" );
+                       }
+
+                       if ( !isDraggable && value ) {
+                               this._makeDraggable();
+                       }
+               }
+
+               if ( key === "position" ) {
+                       this._position();
+               }
+
+               if ( key === "resizable" ) {
+
+                       // currently resizable, becoming non-resizable
+                       isResizable = uiDialog.is( ":data(ui-resizable)" );
+                       if ( isResizable && !value ) {
+                               uiDialog.resizable( "destroy" );
+                       }
+
+                       // Currently resizable, changing handles
+                       if ( isResizable && typeof value === "string" ) {
+                               uiDialog.resizable( "option", "handles", value );
+                       }
+
+                       // Currently non-resizable, becoming resizable
+                       if ( !isResizable && value !== false ) {
+                               this._makeResizable();
+                       }
+               }
+
+               if ( key === "title" ) {
+                       this._title( this.uiDialogTitlebar.find( ".ui-dialog-title" ) );
+               }
+       },
+
+       _size: function() {
+
+               // If the user has resized the dialog, the .ui-dialog and .ui-dialog-content
+               // divs will both have width and height set, so we need to reset them
+               var nonContentHeight, minContentHeight, maxContentHeight,
+                       options = this.options;
+
+               // Reset content sizing
+               this.element.show().css( {
+                       width: "auto",
+                       minHeight: 0,
+                       maxHeight: "none",
+                       height: 0
+               } );
+
+               if ( options.minWidth > options.width ) {
+                       options.width = options.minWidth;
+               }
+
+               // Reset wrapper sizing
+               // determine the height of all the non-content elements
+               nonContentHeight = this.uiDialog.css( {
+                       height: "auto",
+                       width: options.width
+               } )
+                       .outerHeight();
+               minContentHeight = Math.max( 0, options.minHeight - nonContentHeight );
+               maxContentHeight = typeof options.maxHeight === "number" ?
+                       Math.max( 0, options.maxHeight - nonContentHeight ) :
+                       "none";
+
+               if ( options.height === "auto" ) {
+                       this.element.css( {
+                               minHeight: minContentHeight,
+                               maxHeight: maxContentHeight,
+                               height: "auto"
+                       } );
+               } else {
+                       this.element.height( Math.max( 0, options.height - nonContentHeight ) );
+               }
+
+               if ( this.uiDialog.is( ":data(ui-resizable)" ) ) {
+                       this.uiDialog.resizable( "option", "minHeight", this._minHeight() );
+               }
+       },
+
+       _blockFrames: function() {
+               this.iframeBlocks = this.document.find( "iframe" ).map( function() {
+                       var iframe = $( this );
+
+                       return $( "<div>" )
+                               .css( {
+                                       position: "absolute",
+                                       width: iframe.outerWidth(),
+                                       height: iframe.outerHeight()
+                               } )
+                               .appendTo( iframe.parent() )
+                               .offset( iframe.offset() )[ 0 ];
+               } );
+       },
+
+       _unblockFrames: function() {
+               if ( this.iframeBlocks ) {
+                       this.iframeBlocks.remove();
+                       delete this.iframeBlocks;
+               }
+       },
+
+       _allowInteraction: function( event ) {
+               if ( $( event.target ).closest( ".ui-dialog" ).length ) {
+                       return true;
+               }
+
+               // TODO: Remove hack when datepicker implements
+               // the .ui-front logic (#8989)
+               return !!$( event.target ).closest( ".ui-datepicker" ).length;
+       },
+
+       _createOverlay: function() {
+               if ( !this.options.modal ) {
+                       return;
+               }
+
+               // We use a delay in case the overlay is created from an
+               // event that we're going to be cancelling (#2804)
+               var isOpening = true;
+               this._delay( function() {
+                       isOpening = false;
+               } );
+
+               if ( !this.document.data( "ui-dialog-overlays" ) ) {
+
+                       // Prevent use of anchors and inputs
+                       // Using _on() for an event handler shared across many instances is
+                       // safe because the dialogs stack and must be closed in reverse order
+                       this._on( this.document, {
+                               focusin: function( event ) {
+                                       if ( isOpening ) {
+                                               return;
+                                       }
+
+                                       if ( !this._allowInteraction( event ) ) {
+                                               event.preventDefault();
+                                               this._trackingInstances()[ 0 ]._focusTabbable();
+                                       }
+                               }
+                       } );
+               }
+
+               this.overlay = $( "<div>" )
+                       .appendTo( this._appendTo() );
+
+               this._addClass( this.overlay, null, "ui-widget-overlay ui-front" );
+               this._on( this.overlay, {
+                       mousedown: "_keepFocus"
+               } );
+               this.document.data( "ui-dialog-overlays",
+                       ( this.document.data( "ui-dialog-overlays" ) || 0 ) + 1 );
+       },
+
+       _destroyOverlay: function() {
+               if ( !this.options.modal ) {
+                       return;
+               }
+
+               if ( this.overlay ) {
+                       var overlays = this.document.data( "ui-dialog-overlays" ) - 1;
+
+                       if ( !overlays ) {
+                               this._off( this.document, "focusin" );
+                               this.document.removeData( "ui-dialog-overlays" );
+                       } else {
+                               this.document.data( "ui-dialog-overlays", overlays );
+                       }
+
+                       this.overlay.remove();
+                       this.overlay = null;
+               }
+       }
+} );
+
+// DEPRECATED
+// TODO: switch return back to widget declaration at top of file when this is removed
+if ( $.uiBackCompat !== false ) {
+
+       // Backcompat for dialogClass option
+       $.widget( "ui.dialog", $.ui.dialog, {
+               options: {
+                       dialogClass: ""
+               },
+               _createWrapper: function() {
+                       this._super();
+                       this.uiDialog.addClass( this.options.dialogClass );
+               },
+               _setOption: function( key, value ) {
+                       if ( key === "dialogClass" ) {
+                               this.uiDialog
+                                       .removeClass( this.options.dialogClass )
+                                       .addClass( value );
+                       }
+                       this._superApply( arguments );
+               }
+       } );
+}
+
+var widgetsDialog = $.ui.dialog;
+
+
+/*!
+ * jQuery UI Progressbar 1.12.1
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ */
+
+//>>label: Progressbar
+//>>group: Widgets
+// jscs:disable maximumLineLength
+//>>description: Displays a status indicator for loading state, standard percentage, and other progress indicators.
+// jscs:enable maximumLineLength
+//>>docs: http://api.jqueryui.com/progressbar/
+//>>demos: http://jqueryui.com/progressbar/
+//>>css.structure: ../../themes/base/core.css
+//>>css.structure: ../../themes/base/progressbar.css
+//>>css.theme: ../../themes/base/theme.css
+
+
+
+var widgetsProgressbar = $.widget( "ui.progressbar", {
+       version: "1.12.1",
+       options: {
+               classes: {
+                       "ui-progressbar": "ui-corner-all",
+                       "ui-progressbar-value": "ui-corner-left",
+                       "ui-progressbar-complete": "ui-corner-right"
+               },
+               max: 100,
+               value: 0,
+
+               change: null,
+               complete: null
+       },
+
+       min: 0,
+
+       _create: function() {
+
+               // Constrain initial value
+               this.oldValue = this.options.value = this._constrainedValue();
+
+               this.element.attr( {
+
+                       // Only set static values; aria-valuenow and aria-valuemax are
+                       // set inside _refreshValue()
+                       role: "progressbar",
+                       "aria-valuemin": this.min
+               } );
+               this._addClass( "ui-progressbar", "ui-widget ui-widget-content" );
+
+               this.valueDiv = $( "<div>" ).appendTo( this.element );
+               this._addClass( this.valueDiv, "ui-progressbar-value", "ui-widget-header" );
+               this._refreshValue();
+       },
+
+       _destroy: function() {
+               this.element.removeAttr( "role aria-valuemin aria-valuemax aria-valuenow" );
+
+               this.valueDiv.remove();
+       },
+
+       value: function( newValue ) {
+               if ( newValue === undefined ) {
+                       return this.options.value;
+               }
+
+               this.options.value = this._constrainedValue( newValue );
+               this._refreshValue();
+       },
+
+       _constrainedValue: function( newValue ) {
+               if ( newValue === undefined ) {
+                       newValue = this.options.value;
+               }
+
+               this.indeterminate = newValue === false;
+
+               // Sanitize value
+               if ( typeof newValue !== "number" ) {
+                       newValue = 0;
+               }
+
+               return this.indeterminate ? false :
+                       Math.min( this.options.max, Math.max( this.min, newValue ) );
+       },
+
+       _setOptions: function( options ) {
+
+               // Ensure "value" option is set after other values (like max)
+               var value = options.value;
+               delete options.value;
+
+               this._super( options );
+
+               this.options.value = this._constrainedValue( value );
+               this._refreshValue();
+       },
+
+       _setOption: function( key, value ) {
+               if ( key === "max" ) {
+
+                       // Don't allow a max less than min
+                       value = Math.max( this.min, value );
+               }
+               this._super( key, value );
+       },
+
+       _setOptionDisabled: function( value ) {
+               this._super( value );
+
+               this.element.attr( "aria-disabled", value );
+               this._toggleClass( null, "ui-state-disabled", !!value );
+       },
+
+       _percentage: function() {
+               return this.indeterminate ?
+                       100 :
+                       100 * ( this.options.value - this.min ) / ( this.options.max - this.min );
+       },
+
+       _refreshValue: function() {
+               var value = this.options.value,
+                       percentage = this._percentage();
+
+               this.valueDiv
+                       .toggle( this.indeterminate || value > this.min )
+                       .width( percentage.toFixed( 0 ) + "%" );
+
+               this
+                       ._toggleClass( this.valueDiv, "ui-progressbar-complete", null,
+                               value === this.options.max )
+                       ._toggleClass( "ui-progressbar-indeterminate", null, this.indeterminate );
+
+               if ( this.indeterminate ) {
+                       this.element.removeAttr( "aria-valuenow" );
+                       if ( !this.overlayDiv ) {
+                               this.overlayDiv = $( "<div>" ).appendTo( this.valueDiv );
+                               this._addClass( this.overlayDiv, "ui-progressbar-overlay" );
+                       }
+               } else {
+                       this.element.attr( {
+                               "aria-valuemax": this.options.max,
+                               "aria-valuenow": value
+                       } );
+                       if ( this.overlayDiv ) {
+                               this.overlayDiv.remove();
+                               this.overlayDiv = null;
+                       }
+               }
+
+               if ( this.oldValue !== value ) {
+                       this.oldValue = value;
+                       this._trigger( "change" );
+               }
+               if ( value === this.options.max ) {
+                       this._trigger( "complete" );
+               }
+       }
+} );
+
+
+/*!
+ * jQuery UI Selectmenu 1.12.1
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ */
+
+//>>label: Selectmenu
+//>>group: Widgets
+// jscs:disable maximumLineLength
+//>>description: Duplicates and extends the functionality of a native HTML select element, allowing it to be customizable in behavior and appearance far beyond the limitations of a native select.
+// jscs:enable maximumLineLength
+//>>docs: http://api.jqueryui.com/selectmenu/
+//>>demos: http://jqueryui.com/selectmenu/
+//>>css.structure: ../../themes/base/core.css
+//>>css.structure: ../../themes/base/selectmenu.css, ../../themes/base/button.css
+//>>css.theme: ../../themes/base/theme.css
+
+
+
+var widgetsSelectmenu = $.widget( "ui.selectmenu", [ $.ui.formResetMixin, {
+       version: "1.12.1",
+       defaultElement: "<select>",
+       options: {
+               appendTo: null,
+               classes: {
+                       "ui-selectmenu-button-open": "ui-corner-top",
+                       "ui-selectmenu-button-closed": "ui-corner-all"
+               },
+               disabled: null,
+               icons: {
+                       button: "ui-icon-triangle-1-s"
+               },
+               position: {
+                       my: "left top",
+                       at: "left bottom",
+                       collision: "none"
+               },
+               width: false,
+
+               // Callbacks
+               change: null,
+               close: null,
+               focus: null,
+               open: null,
+               select: null
+       },
+
+       _create: function() {
+               var selectmenuId = this.element.uniqueId().attr( "id" );
+               this.ids = {
+                       element: selectmenuId,
+                       button: selectmenuId + "-button",
+                       menu: selectmenuId + "-menu"
+               };
+
+               this._drawButton();
+               this._drawMenu();
+               this._bindFormResetHandler();
+
+               this._rendered = false;
+               this.menuItems = $();
+       },
+
+       _drawButton: function() {
+               var icon,
+                       that = this,
+                       item = this._parseOption(
+                               this.element.find( "option:selected" ),
+                               this.element[ 0 ].selectedIndex
+                       );
+
+               // Associate existing label with the new button
+               this.labels = this.element.labels().attr( "for", this.ids.button );
+               this._on( this.labels, {
+                       click: function( event ) {
+                               this.button.focus();
+                               event.preventDefault();
+                       }
+               } );
+
+               // Hide original select element
+               this.element.hide();
+
+               // Create button
+               this.button = $( "<span>", {
+                       tabindex: this.options.disabled ? -1 : 0,
+                       id: this.ids.button,
+                       role: "combobox",
+                       "aria-expanded": "false",
+                       "aria-autocomplete": "list",
+                       "aria-owns": this.ids.menu,
+                       "aria-haspopup": "true",
+                       title: this.element.attr( "title" )
+               } )
+                       .insertAfter( this.element );
+
+               this._addClass( this.button, "ui-selectmenu-button ui-selectmenu-button-closed",
+                       "ui-button ui-widget" );
+
+               icon = $( "<span>" ).appendTo( this.button );
+               this._addClass( icon, "ui-selectmenu-icon", "ui-icon " + this.options.icons.button );
+               this.buttonItem = this._renderButtonItem( item )
+                       .appendTo( this.button );
+
+               if ( this.options.width !== false ) {
+                       this._resizeButton();
+               }
+
+               this._on( this.button, this._buttonEvents );
+               this.button.one( "focusin", function() {
+
+                       // Delay rendering the menu items until the button receives focus.
+                       // The menu may have already been rendered via a programmatic open.
+                       if ( !that._rendered ) {
+                               that._refreshMenu();
+                       }
+               } );
+       },
+
+       _drawMenu: function() {
+               var that = this;
+
+               // Create menu
+               this.menu = $( "<ul>", {
+                       "aria-hidden": "true",
+                       "aria-labelledby": this.ids.button,
+                       id: this.ids.menu
+               } );
+
+               // Wrap menu
+               this.menuWrap = $( "<div>" ).append( this.menu );
+               this._addClass( this.menuWrap, "ui-selectmenu-menu", "ui-front" );
+               this.menuWrap.appendTo( this._appendTo() );
+
+               // Initialize menu widget
+               this.menuInstance = this.menu
+                       .menu( {
+                               classes: {
+                                       "ui-menu": "ui-corner-bottom"
+                               },
+                               role: "listbox",
+                               select: function( event, ui ) {
+                                       event.preventDefault();
+
+                                       // Support: IE8
+                                       // If the item was selected via a click, the text selection
+                                       // will be destroyed in IE
+                                       that._setSelection();
+
+                                       that._select( ui.item.data( "ui-selectmenu-item" ), event );
+                               },
+                               focus: function( event, ui ) {
+                                       var item = ui.item.data( "ui-selectmenu-item" );
+
+                                       // Prevent inital focus from firing and check if its a newly focused item
+                                       if ( that.focusIndex != null && item.index !== that.focusIndex ) {
+                                               that._trigger( "focus", event, { item: item } );
+                                               if ( !that.isOpen ) {
+                                                       that._select( item, event );
+                                               }
+                                       }
+                                       that.focusIndex = item.index;
+
+                                       that.button.attr( "aria-activedescendant",
+                                               that.menuItems.eq( item.index ).attr( "id" ) );
+                               }
+                       } )
+                       .menu( "instance" );
+
+               // Don't close the menu on mouseleave
+               this.menuInstance._off( this.menu, "mouseleave" );
+
+               // Cancel the menu's collapseAll on document click
+               this.menuInstance._closeOnDocumentClick = function() {
+                       return false;
+               };
+
+               // Selects often contain empty items, but never contain dividers
+               this.menuInstance._isDivider = function() {
+                       return false;
+               };
+       },
+
+       refresh: function() {
+               this._refreshMenu();
+               this.buttonItem.replaceWith(
+                       this.buttonItem = this._renderButtonItem(
+
+                               // Fall back to an empty object in case there are no options
+                               this._getSelectedItem().data( "ui-selectmenu-item" ) || {}
+                       )
+               );
+               if ( this.options.width === null ) {
+                       this._resizeButton();
+               }
+       },
+
+       _refreshMenu: function() {
+               var item,
+                       options = this.element.find( "option" );
+
+               this.menu.empty();
+
+               this._parseOptions( options );
+               this._renderMenu( this.menu, this.items );
+
+               this.menuInstance.refresh();
+               this.menuItems = this.menu.find( "li" )
+                       .not( ".ui-selectmenu-optgroup" )
+                               .find( ".ui-menu-item-wrapper" );
+
+               this._rendered = true;
+
+               if ( !options.length ) {
+                       return;
+               }
+
+               item = this._getSelectedItem();
+
+               // Update the menu to have the correct item focused
+               this.menuInstance.focus( null, item );
+               this._setAria( item.data( "ui-selectmenu-item" ) );
+
+               // Set disabled state
+               this._setOption( "disabled", this.element.prop( "disabled" ) );
+       },
+
+       open: function( event ) {
+               if ( this.options.disabled ) {
+                       return;
+               }
+
+               // If this is the first time the menu is being opened, render the items
+               if ( !this._rendered ) {
+                       this._refreshMenu();
+               } else {
+
+                       // Menu clears focus on close, reset focus to selected item
+                       this._removeClass( this.menu.find( ".ui-state-active" ), null, "ui-state-active" );
+                       this.menuInstance.focus( null, this._getSelectedItem() );
+               }
+
+               // If there are no options, don't open the menu
+               if ( !this.menuItems.length ) {
+                       return;
+               }
+
+               this.isOpen = true;
+               this._toggleAttr();
+               this._resizeMenu();
+               this._position();
+
+               this._on( this.document, this._documentClick );
+
+               this._trigger( "open", event );
+       },
+
+       _position: function() {
+               this.menuWrap.position( $.extend( { of: this.button }, this.options.position ) );
+       },
+
+       close: function( event ) {
+               if ( !this.isOpen ) {
+                       return;
+               }
+
+               this.isOpen = false;
+               this._toggleAttr();
+
+               this.range = null;
+               this._off( this.document );
+
+               this._trigger( "close", event );
+       },
+
+       widget: function() {
+               return this.button;
+       },
+
+       menuWidget: function() {
+               return this.menu;
+       },
+
+       _renderButtonItem: function( item ) {
+               var buttonItem = $( "<span>" );
+
+               this._setText( buttonItem, item.label );
+               this._addClass( buttonItem, "ui-selectmenu-text" );
+
+               return buttonItem;
+       },
+
+       _renderMenu: function( ul, items ) {
+               var that = this,
+                       currentOptgroup = "";
+
+               $.each( items, function( index, item ) {
+                       var li;
+
+                       if ( item.optgroup !== currentOptgroup ) {
+                               li = $( "<li>", {
+                                       text: item.optgroup
+                               } );
+                               that._addClass( li, "ui-selectmenu-optgroup", "ui-menu-divider" +
+                                       ( item.element.parent( "optgroup" ).prop( "disabled" ) ?
+                                               " ui-state-disabled" :
+                                               "" ) );
+
+                               li.appendTo( ul );
+
+                               currentOptgroup = item.optgroup;
+                       }
+
+                       that._renderItemData( ul, item );
+               } );
+       },
+
+       _renderItemData: function( ul, item ) {
+               return this._renderItem( ul, item ).data( "ui-selectmenu-item", item );
+       },
+
+       _renderItem: function( ul, item ) {
+               var li = $( "<li>" ),
+                       wrapper = $( "<div>", {
+                               title: item.element.attr( "title" )
+                       } );
+
+               if ( item.disabled ) {
+                       this._addClass( li, null, "ui-state-disabled" );
+               }
+               this._setText( wrapper, item.label );
+
+               return li.append( wrapper ).appendTo( ul );
+       },
+
+       _setText: function( element, value ) {
+               if ( value ) {
+                       element.text( value );
+               } else {
+                       element.html( "&#160;" );
+               }
+       },
+
+       _move: function( direction, event ) {
+               var item, next,
+                       filter = ".ui-menu-item";
+
+               if ( this.isOpen ) {
+                       item = this.menuItems.eq( this.focusIndex ).parent( "li" );
+               } else {
+                       item = this.menuItems.eq( this.element[ 0 ].selectedIndex ).parent( "li" );
+                       filter += ":not(.ui-state-disabled)";
+               }
+
+               if ( direction === "first" || direction === "last" ) {
+                       next = item[ direction === "first" ? "prevAll" : "nextAll" ]( filter ).eq( -1 );
+               } else {
+                       next = item[ direction + "All" ]( filter ).eq( 0 );
+               }
+
+               if ( next.length ) {
+                       this.menuInstance.focus( event, next );
+               }
+       },
+
+       _getSelectedItem: function() {
+               return this.menuItems.eq( this.element[ 0 ].selectedIndex ).parent( "li" );
+       },
+
+       _toggle: function( event ) {
+               this[ this.isOpen ? "close" : "open" ]( event );
+       },
+
+       _setSelection: function() {
+               var selection;
+
+               if ( !this.range ) {
+                       return;
+               }
+
+               if ( window.getSelection ) {
+                       selection = window.getSelection();
+                       selection.removeAllRanges();
+                       selection.addRange( this.range );
+
+               // Support: IE8
+               } else {
+                       this.range.select();
+               }
+
+               // Support: IE
+               // Setting the text selection kills the button focus in IE, but
+               // restoring the focus doesn't kill the selection.
+               this.button.focus();
+       },
+
+       _documentClick: {
+               mousedown: function( event ) {
+                       if ( !this.isOpen ) {
+                               return;
+                       }
+
+                       if ( !$( event.target ).closest( ".ui-selectmenu-menu, #" +
+                                       $.ui.escapeSelector( this.ids.button ) ).length ) {
+                               this.close( event );
+                       }
+               }
+       },
+
+       _buttonEvents: {
+
+               // Prevent text selection from being reset when interacting with the selectmenu (#10144)
+               mousedown: function() {
+                       var selection;
+
+                       if ( window.getSelection ) {
+                               selection = window.getSelection();
+                               if ( selection.rangeCount ) {
+                                       this.range = selection.getRangeAt( 0 );
+                               }
+
+                       // Support: IE8
+                       } else {
+                               this.range = document.selection.createRange();
+                       }
+               },
+
+               click: function( event ) {
+                       this._setSelection();
+                       this._toggle( event );
+               },
+
+               keydown: function( event ) {
+                       var preventDefault = true;
+                       switch ( event.keyCode ) {
+                       case $.ui.keyCode.TAB:
+                       case $.ui.keyCode.ESCAPE:
+                               this.close( event );
+                               preventDefault = false;
+                               break;
+                       case $.ui.keyCode.ENTER:
+                               if ( this.isOpen ) {
+                                       this._selectFocusedItem( event );
+                               }
+                               break;
+                       case $.ui.keyCode.UP:
+                               if ( event.altKey ) {
+                                       this._toggle( event );
+                               } else {
+                                       this._move( "prev", event );
+                               }
+                               break;
+                       case $.ui.keyCode.DOWN:
+                               if ( event.altKey ) {
+                                       this._toggle( event );
+                               } else {
+                                       this._move( "next", event );
+                               }
+                               break;
+                       case $.ui.keyCode.SPACE:
+                               if ( this.isOpen ) {
+                                       this._selectFocusedItem( event );
+                               } else {
+                                       this._toggle( event );
+                               }
+                               break;
+                       case $.ui.keyCode.LEFT:
+                               this._move( "prev", event );
+                               break;
+                       case $.ui.keyCode.RIGHT:
+                               this._move( "next", event );
+                               break;
+                       case $.ui.keyCode.HOME:
+                       case $.ui.keyCode.PAGE_UP:
+                               this._move( "first", event );
+                               break;
+                       case $.ui.keyCode.END:
+                       case $.ui.keyCode.PAGE_DOWN:
+                               this._move( "last", event );
+                               break;
+                       default:
+                               this.menu.trigger( event );
+                               preventDefault = false;
+                       }
+
+                       if ( preventDefault ) {
+                               event.preventDefault();
+                       }
+               }
+       },
+
+       _selectFocusedItem: function( event ) {
+               var item = this.menuItems.eq( this.focusIndex ).parent( "li" );
+               if ( !item.hasClass( "ui-state-disabled" ) ) {
+                       this._select( item.data( "ui-selectmenu-item" ), event );
+               }
+       },
+
+       _select: function( item, event ) {
+               var oldIndex = this.element[ 0 ].selectedIndex;
+
+               // Change native select element
+               this.element[ 0 ].selectedIndex = item.index;
+               this.buttonItem.replaceWith( this.buttonItem = this._renderButtonItem( item ) );
+               this._setAria( item );
+               this._trigger( "select", event, { item: item } );
+
+               if ( item.index !== oldIndex ) {
+                       this._trigger( "change", event, { item: item } );
+               }
+
+               this.close( event );
+       },
+
+       _setAria: function( item ) {
+               var id = this.menuItems.eq( item.index ).attr( "id" );
+
+               this.button.attr( {
+                       "aria-labelledby": id,
+                       "aria-activedescendant": id
+               } );
+               this.menu.attr( "aria-activedescendant", id );
+       },
+
+       _setOption: function( key, value ) {
+               if ( key === "icons" ) {
+                       var icon = this.button.find( "span.ui-icon" );
+                       this._removeClass( icon, null, this.options.icons.button )
+                               ._addClass( icon, null, value.button );
+               }
+
+               this._super( key, value );
+
+               if ( key === "appendTo" ) {
+                       this.menuWrap.appendTo( this._appendTo() );
+               }
+
+               if ( key === "width" ) {
+                       this._resizeButton();
+               }
+       },
+
+       _setOptionDisabled: function( value ) {
+               this._super( value );
+
+               this.menuInstance.option( "disabled", value );
+               this.button.attr( "aria-disabled", value );
+               this._toggleClass( this.button, null, "ui-state-disabled", value );
+
+               this.element.prop( "disabled", value );
+               if ( value ) {
+                       this.button.attr( "tabindex", -1 );
+                       this.close();
+               } else {
+                       this.button.attr( "tabindex", 0 );
+               }
+       },
+
+       _appendTo: function() {
+               var element = this.options.appendTo;
+
+               if ( element ) {
+                       element = element.jquery || element.nodeType ?
+                               $( element ) :
+                               this.document.find( element ).eq( 0 );
+               }
+
+               if ( !element || !element[ 0 ] ) {
+                       element = this.element.closest( ".ui-front, dialog" );
+               }
+
+               if ( !element.length ) {
+                       element = this.document[ 0 ].body;
+               }
+
+               return element;
+       },
+
+       _toggleAttr: function() {
+               this.button.attr( "aria-expanded", this.isOpen );
+
+               // We can't use two _toggleClass() calls here, because we need to make sure
+               // we always remove classes first and add them second, otherwise if both classes have the
+               // same theme class, it will be removed after we add it.
+               this._removeClass( this.button, "ui-selectmenu-button-" +
+                       ( this.isOpen ? "closed" : "open" ) )
+                       ._addClass( this.button, "ui-selectmenu-button-" +
+                               ( this.isOpen ? "open" : "closed" ) )
+                       ._toggleClass( this.menuWrap, "ui-selectmenu-open", null, this.isOpen );
+
+               this.menu.attr( "aria-hidden", !this.isOpen );
+       },
+
+       _resizeButton: function() {
+               var width = this.options.width;
+
+               // For `width: false`, just remove inline style and stop
+               if ( width === false ) {
+                       this.button.css( "width", "" );
+                       return;
+               }
+
+               // For `width: null`, match the width of the original element
+               if ( width === null ) {
+                       width = this.element.show().outerWidth();
+                       this.element.hide();
+               }
+
+               this.button.outerWidth( width );
+       },
+
+       _resizeMenu: function() {
+               this.menu.outerWidth( Math.max(
+                       this.button.outerWidth(),
+
+                       // Support: IE10
+                       // IE10 wraps long text (possibly a rounding bug)
+                       // so we add 1px to avoid the wrapping
+                       this.menu.width( "" ).outerWidth() + 1
+               ) );
+       },
+
+       _getCreateOptions: function() {
+               var options = this._super();
+
+               options.disabled = this.element.prop( "disabled" );
+
+               return options;
+       },
+
+       _parseOptions: function( options ) {
+               var that = this,
+                       data = [];
+               options.each( function( index, item ) {
+                       data.push( that._parseOption( $( item ), index ) );
+               } );
+               this.items = data;
+       },
+
+       _parseOption: function( option, index ) {
+               var optgroup = option.parent( "optgroup" );
+
+               return {
+                       element: option,
+                       index: index,
+                       value: option.val(),
+                       label: option.text(),
+                       optgroup: optgroup.attr( "label" ) || "",
+                       disabled: optgroup.prop( "disabled" ) || option.prop( "disabled" )
+               };
+       },
+
+       _destroy: function() {
+               this._unbindFormResetHandler();
+               this.menuWrap.remove();
+               this.button.remove();
+               this.element.show();
+               this.element.removeUniqueId();
+               this.labels.attr( "for", this.ids.element );
+       }
+} ] );
+
+
+/*!
+ * jQuery UI Slider 1.12.1
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ */
+
+//>>label: Slider
+//>>group: Widgets
+//>>description: Displays a flexible slider with ranges and accessibility via keyboard.
+//>>docs: http://api.jqueryui.com/slider/
+//>>demos: http://jqueryui.com/slider/
+//>>css.structure: ../../themes/base/core.css
+//>>css.structure: ../../themes/base/slider.css
+//>>css.theme: ../../themes/base/theme.css
+
+
+
+var widgetsSlider = $.widget( "ui.slider", $.ui.mouse, {
+       version: "1.12.1",
+       widgetEventPrefix: "slide",
+
+       options: {
+               animate: false,
+               classes: {
+                       "ui-slider": "ui-corner-all",
+                       "ui-slider-handle": "ui-corner-all",
+
+                       // Note: ui-widget-header isn't the most fittingly semantic framework class for this
+                       // element, but worked best visually with a variety of themes
+                       "ui-slider-range": "ui-corner-all ui-widget-header"
+               },
+               distance: 0,
+               max: 100,
+               min: 0,
+               orientation: "horizontal",
+               range: false,
+               step: 1,
+               value: 0,
+               values: null,
+
+               // Callbacks
+               change: null,
+               slide: null,
+               start: null,
+               stop: null
+       },
+
+       // Number of pages in a slider
+       // (how many times can you page up/down to go through the whole range)
+       numPages: 5,
+
+       _create: function() {
+               this._keySliding = false;
+               this._mouseSliding = false;
+               this._animateOff = true;
+               this._handleIndex = null;
+               this._detectOrientation();
+               this._mouseInit();
+               this._calculateNewMax();
+
+               this._addClass( "ui-slider ui-slider-" + this.orientation,
+                       "ui-widget ui-widget-content" );
+
+               this._refresh();
+
+               this._animateOff = false;
+       },
+
+       _refresh: function() {
+               this._createRange();
+               this._createHandles();
+               this._setupEvents();
+               this._refreshValue();
+       },
+
+       _createHandles: function() {
+               var i, handleCount,
+                       options = this.options,
+                       existingHandles = this.element.find( ".ui-slider-handle" ),
+                       handle = "<span tabindex='0'></span>",
+                       handles = [];
+
+               handleCount = ( options.values && options.values.length ) || 1;
+
+               if ( existingHandles.length > handleCount ) {
+                       existingHandles.slice( handleCount ).remove();
+                       existingHandles = existingHandles.slice( 0, handleCount );
+               }
+
+               for ( i = existingHandles.length; i < handleCount; i++ ) {
+                       handles.push( handle );
+               }
+
+               this.handles = existingHandles.add( $( handles.join( "" ) ).appendTo( this.element ) );
+
+               this._addClass( this.handles, "ui-slider-handle", "ui-state-default" );
+
+               this.handle = this.handles.eq( 0 );
+
+               this.handles.each( function( i ) {
+                       $( this )
+                               .data( "ui-slider-handle-index", i )
+                               .attr( "tabIndex", 0 );
+               } );
+       },
+
+       _createRange: function() {
+               var options = this.options;
+
+               if ( options.range ) {
+                       if ( options.range === true ) {
+                               if ( !options.values ) {
+                                       options.values = [ this._valueMin(), this._valueMin() ];
+                               } else if ( options.values.length && options.values.length !== 2 ) {
+                                       options.values = [ options.values[ 0 ], options.values[ 0 ] ];
+                               } else if ( $.isArray( options.values ) ) {
+                                       options.values = options.values.slice( 0 );
+                               }
+                       }
+
+                       if ( !this.range || !this.range.length ) {
+                               this.range = $( "<div>" )
+                                       .appendTo( this.element );
+
+                               this._addClass( this.range, "ui-slider-range" );
+                       } else {
+                               this._removeClass( this.range, "ui-slider-range-min ui-slider-range-max" );
+
+                               // Handle range switching from true to min/max
+                               this.range.css( {
+                                       "left": "",
+                                       "bottom": ""
+                               } );
+                       }
+                       if ( options.range === "min" || options.range === "max" ) {
+                               this._addClass( this.range, "ui-slider-range-" + options.range );
+                       }
+               } else {
+                       if ( this.range ) {
+                               this.range.remove();
+                       }
+                       this.range = null;
+               }
+       },
+
+       _setupEvents: function() {
+               this._off( this.handles );
+               this._on( this.handles, this._handleEvents );
+               this._hoverable( this.handles );
+               this._focusable( this.handles );
+       },
+
+       _destroy: function() {
+               this.handles.remove();
+               if ( this.range ) {
+                       this.range.remove();
+               }
+
+               this._mouseDestroy();
+       },
+
+       _mouseCapture: function( event ) {
+               var position, normValue, distance, closestHandle, index, allowed, offset, mouseOverHandle,
+                       that = this,
+                       o = this.options;
+
+               if ( o.disabled ) {
+                       return false;
+               }
+
+               this.elementSize = {
+                       width: this.element.outerWidth(),
+                       height: this.element.outerHeight()
+               };
+               this.elementOffset = this.element.offset();
+
+               position = { x: event.pageX, y: event.pageY };
+               normValue = this._normValueFromMouse( position );
+               distance = this._valueMax() - this._valueMin() + 1;
+               this.handles.each( function( i ) {
+                       var thisDistance = Math.abs( normValue - that.values( i ) );
+                       if ( ( distance > thisDistance ) ||
+                               ( distance === thisDistance &&
+                                       ( i === that._lastChangedValue || that.values( i ) === o.min ) ) ) {
+                               distance = thisDistance;
+                               closestHandle = $( this );
+                               index = i;
+                       }
+               } );
+
+               allowed = this._start( event, index );
+               if ( allowed === false ) {
+                       return false;
+               }
+               this._mouseSliding = true;
+
+               this._handleIndex = index;
+
+               this._addClass( closestHandle, null, "ui-state-active" );
+               closestHandle.trigger( "focus" );
+
+               offset = closestHandle.offset();
+               mouseOverHandle = !$( event.target ).parents().addBack().is( ".ui-slider-handle" );
+               this._clickOffset = mouseOverHandle ? { left: 0, top: 0 } : {
+                       left: event.pageX - offset.left - ( closestHandle.width() / 2 ),
+                       top: event.pageY - offset.top -
+                               ( closestHandle.height() / 2 ) -
+                               ( parseInt( closestHandle.css( "borderTopWidth" ), 10 ) || 0 ) -
+                               ( parseInt( closestHandle.css( "borderBottomWidth" ), 10 ) || 0 ) +
+                               ( parseInt( closestHandle.css( "marginTop" ), 10 ) || 0 )
+               };
+
+               if ( !this.handles.hasClass( "ui-state-hover" ) ) {
+                       this._slide( event, index, normValue );
+               }
+               this._animateOff = true;
+               return true;
+       },
+
+       _mouseStart: function() {
+               return true;
+       },
+
+       _mouseDrag: function( event ) {
+               var position = { x: event.pageX, y: event.pageY },
+                       normValue = this._normValueFromMouse( position );
+
+               this._slide( event, this._handleIndex, normValue );
+
+               return false;
+       },
+
+       _mouseStop: function( event ) {
+               this._removeClass( this.handles, null, "ui-state-active" );
+               this._mouseSliding = false;
+
+               this._stop( event, this._handleIndex );
+               this._change( event, this._handleIndex );
+
+               this._handleIndex = null;
+               this._clickOffset = null;
+               this._animateOff = false;
+
+               return false;
+       },
+
+       _detectOrientation: function() {
+               this.orientation = ( this.options.orientation === "vertical" ) ? "vertical" : "horizontal";
+       },
+
+       _normValueFromMouse: function( position ) {
+               var pixelTotal,
+                       pixelMouse,
+                       percentMouse,
+                       valueTotal,
+                       valueMouse;
+
+               if ( this.orientation === "horizontal" ) {
+                       pixelTotal = this.elementSize.width;
+                       pixelMouse = position.x - this.elementOffset.left -
+                               ( this._clickOffset ? this._clickOffset.left : 0 );
+               } else {
+                       pixelTotal = this.elementSize.height;
+                       pixelMouse = position.y - this.elementOffset.top -
+                               ( this._clickOffset ? this._clickOffset.top : 0 );
+               }
+
+               percentMouse = ( pixelMouse / pixelTotal );
+               if ( percentMouse > 1 ) {
+                       percentMouse = 1;
+               }
+               if ( percentMouse < 0 ) {
+                       percentMouse = 0;
+               }
+               if ( this.orientation === "vertical" ) {
+                       percentMouse = 1 - percentMouse;
+               }
+
+               valueTotal = this._valueMax() - this._valueMin();
+               valueMouse = this._valueMin() + percentMouse * valueTotal;
+
+               return this._trimAlignValue( valueMouse );
+       },
+
+       _uiHash: function( index, value, values ) {
+               var uiHash = {
+                       handle: this.handles[ index ],
+                       handleIndex: index,
+                       value: value !== undefined ? value : this.value()
+               };
+
+               if ( this._hasMultipleValues() ) {
+                       uiHash.value = value !== undefined ? value : this.values( index );
+                       uiHash.values = values || this.values();
+               }
+
+               return uiHash;
+       },
+
+       _hasMultipleValues: function() {
+               return this.options.values && this.options.values.length;
+       },
+
+       _start: function( event, index ) {
+               return this._trigger( "start", event, this._uiHash( index ) );
+       },
+
+       _slide: function( event, index, newVal ) {
+               var allowed, otherVal,
+                       currentValue = this.value(),
+                       newValues = this.values();
+
+               if ( this._hasMultipleValues() ) {
+                       otherVal = this.values( index ? 0 : 1 );
+                       currentValue = this.values( index );
+
+                       if ( this.options.values.length === 2 && this.options.range === true ) {
+                               newVal =  index === 0 ? Math.min( otherVal, newVal ) : Math.max( otherVal, newVal );
+                       }
+
+                       newValues[ index ] = newVal;
+               }
+
+               if ( newVal === currentValue ) {
+                       return;
+               }
+
+               allowed = this._trigger( "slide", event, this._uiHash( index, newVal, newValues ) );
+
+               // A slide can be canceled by returning false from the slide callback
+               if ( allowed === false ) {
+                       return;
+               }
+
+               if ( this._hasMultipleValues() ) {
+                       this.values( index, newVal );
+               } else {
+                       this.value( newVal );
+               }
+       },
+
+       _stop: function( event, index ) {
+               this._trigger( "stop", event, this._uiHash( index ) );
+       },
+
+       _change: function( event, index ) {
+               if ( !this._keySliding && !this._mouseSliding ) {
+
+                       //store the last changed value index for reference when handles overlap
+                       this._lastChangedValue = index;
+                       this._trigger( "change", event, this._uiHash( index ) );
+               }
+       },
+
+       value: function( newValue ) {
+               if ( arguments.length ) {
+                       this.options.value = this._trimAlignValue( newValue );
+                       this._refreshValue();
+                       this._change( null, 0 );
+                       return;
+               }
+
+               return this._value();
+       },
+
+       values: function( index, newValue ) {
+               var vals,
+                       newValues,
+                       i;
+
+               if ( arguments.length > 1 ) {
+                       this.options.values[ index ] = this._trimAlignValue( newValue );
+                       this._refreshValue();
+                       this._change( null, index );
+                       return;
+               }
+
+               if ( arguments.length ) {
+                       if ( $.isArray( arguments[ 0 ] ) ) {
+                               vals = this.options.values;
+                               newValues = arguments[ 0 ];
+                               for ( i = 0; i < vals.length; i += 1 ) {
+                                       vals[ i ] = this._trimAlignValue( newValues[ i ] );
+                                       this._change( null, i );
+                               }
+                               this._refreshValue();
+                       } else {
+                               if ( this._hasMultipleValues() ) {
+                                       return this._values( index );
+                               } else {
+                                       return this.value();
+                               }
+                       }
+               } else {
+                       return this._values();
+               }
+       },
+
+       _setOption: function( key, value ) {
+               var i,
+                       valsLength = 0;
+
+               if ( key === "range" && this.options.range === true ) {
+                       if ( value === "min" ) {
+                               this.options.value = this._values( 0 );
+                               this.options.values = null;
+                       } else if ( value === "max" ) {
+                               this.options.value = this._values( this.options.values.length - 1 );
+                               this.options.values = null;
+                       }
+               }
+
+               if ( $.isArray( this.options.values ) ) {
+                       valsLength = this.options.values.length;
+               }
+
+               this._super( key, value );
+
+               switch ( key ) {
+                       case "orientation":
+                               this._detectOrientation();
+                               this._removeClass( "ui-slider-horizontal ui-slider-vertical" )
+                                       ._addClass( "ui-slider-" + this.orientation );
+                               this._refreshValue();
+                               if ( this.options.range ) {
+                                       this._refreshRange( value );
+                               }
+
+                               // Reset positioning from previous orientation
+                               this.handles.css( value === "horizontal" ? "bottom" : "left", "" );
+                               break;
+                       case "value":
+                               this._animateOff = true;
+                               this._refreshValue();
+                               this._change( null, 0 );
+                               this._animateOff = false;
+                               break;
+                       case "values":
+                               this._animateOff = true;
+                               this._refreshValue();
+
+                               // Start from the last handle to prevent unreachable handles (#9046)
+                               for ( i = valsLength - 1; i >= 0; i-- ) {
+                                       this._change( null, i );
+                               }
+                               this._animateOff = false;
+                               break;
+                       case "step":
+                       case "min":
+                       case "max":
+                               this._animateOff = true;
+                               this._calculateNewMax();
+                               this._refreshValue();
+                               this._animateOff = false;
+                               break;
+                       case "range":
+                               this._animateOff = true;
+                               this._refresh();
+                               this._animateOff = false;
+                               break;
+               }
+       },
+
+       _setOptionDisabled: function( value ) {
+               this._super( value );
+
+               this._toggleClass( null, "ui-state-disabled", !!value );
+       },
+
+       //internal value getter
+       // _value() returns value trimmed by min and max, aligned by step
+       _value: function() {
+               var val = this.options.value;
+               val = this._trimAlignValue( val );
+
+               return val;
+       },
+
+       //internal values getter
+       // _values() returns array of values trimmed by min and max, aligned by step
+       // _values( index ) returns single value trimmed by min and max, aligned by step
+       _values: function( index ) {
+               var val,
+                       vals,
+                       i;
+
+               if ( arguments.length ) {
+                       val = this.options.values[ index ];
+                       val = this._trimAlignValue( val );
+
+                       return val;
+               } else if ( this._hasMultipleValues() ) {
+
+                       // .slice() creates a copy of the array
+                       // this copy gets trimmed by min and max and then returned
+                       vals = this.options.values.slice();
+                       for ( i = 0; i < vals.length; i += 1 ) {
+                               vals[ i ] = this._trimAlignValue( vals[ i ] );
+                       }
+
+                       return vals;
+               } else {
+                       return [];
+               }
+       },
+
+       // Returns the step-aligned value that val is closest to, between (inclusive) min and max
+       _trimAlignValue: function( val ) {
+               if ( val <= this._valueMin() ) {
+                       return this._valueMin();
+               }
+               if ( val >= this._valueMax() ) {
+                       return this._valueMax();
+               }
+               var step = ( this.options.step > 0 ) ? this.options.step : 1,
+                       valModStep = ( val - this._valueMin() ) % step,
+                       alignValue = val - valModStep;
+
+               if ( Math.abs( valModStep ) * 2 >= step ) {
+                       alignValue += ( valModStep > 0 ) ? step : ( -step );
+               }
+
+               // Since JavaScript has problems with large floats, round
+               // the final value to 5 digits after the decimal point (see #4124)
+               return parseFloat( alignValue.toFixed( 5 ) );
+       },
+
+       _calculateNewMax: function() {
+               var max = this.options.max,
+                       min = this._valueMin(),
+                       step = this.options.step,
+                       aboveMin = Math.round( ( max - min ) / step ) * step;
+               max = aboveMin + min;
+               if ( max > this.options.max ) {
+
+                       //If max is not divisible by step, rounding off may increase its value
+                       max -= step;
+               }
+               this.max = parseFloat( max.toFixed( this._precision() ) );
+       },
+
+       _precision: function() {
+               var precision = this._precisionOf( this.options.step );
+               if ( this.options.min !== null ) {
+                       precision = Math.max( precision, this._precisionOf( this.options.min ) );
+               }
+               return precision;
+       },
+
+       _precisionOf: function( num ) {
+               var str = num.toString(),
+                       decimal = str.indexOf( "." );
+               return decimal === -1 ? 0 : str.length - decimal - 1;
+       },
+
+       _valueMin: function() {
+               return this.options.min;
+       },
+
+       _valueMax: function() {
+               return this.max;
+       },
+
+       _refreshRange: function( orientation ) {
+               if ( orientation === "vertical" ) {
+                       this.range.css( { "width": "", "left": "" } );
+               }
+               if ( orientation === "horizontal" ) {
+                       this.range.css( { "height": "", "bottom": "" } );
+               }
+       },
+
+       _refreshValue: function() {
+               var lastValPercent, valPercent, value, valueMin, valueMax,
+                       oRange = this.options.range,
+                       o = this.options,
+                       that = this,
+                       animate = ( !this._animateOff ) ? o.animate : false,
+                       _set = {};
+
+               if ( this._hasMultipleValues() ) {
+                       this.handles.each( function( i ) {
+                               valPercent = ( that.values( i ) - that._valueMin() ) / ( that._valueMax() -
+                                       that._valueMin() ) * 100;
+                               _set[ that.orientation === "horizontal" ? "left" : "bottom" ] = valPercent + "%";
+                               $( this ).stop( 1, 1 )[ animate ? "animate" : "css" ]( _set, o.animate );
+                               if ( that.options.range === true ) {
+                                       if ( that.orientation === "horizontal" ) {
+                                               if ( i === 0 ) {
+                                                       that.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( {
+                                                               left: valPercent + "%"
+                                                       }, o.animate );
+                                               }
+                                               if ( i === 1 ) {
+                                                       that.range[ animate ? "animate" : "css" ]( {
+                                                               width: ( valPercent - lastValPercent ) + "%"
+                                                       }, {
+                                                               queue: false,
+                                                               duration: o.animate
+                                                       } );
+                                               }
+                                       } else {
+                                               if ( i === 0 ) {
+                                                       that.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( {
+                                                               bottom: ( valPercent ) + "%"
+                                                       }, o.animate );
+                                               }
+                                               if ( i === 1 ) {
+                                                       that.range[ animate ? "animate" : "css" ]( {
+                                                               height: ( valPercent - lastValPercent ) + "%"
+                                                       }, {
+                                                               queue: false,
+                                                               duration: o.animate
+                                                       } );
+                                               }
+                                       }
+                               }
+                               lastValPercent = valPercent;
+                       } );
+               } else {
+                       value = this.value();
+                       valueMin = this._valueMin();
+                       valueMax = this._valueMax();
+                       valPercent = ( valueMax !== valueMin ) ?
+                                       ( value - valueMin ) / ( valueMax - valueMin ) * 100 :
+                                       0;
+                       _set[ this.orientation === "horizontal" ? "left" : "bottom" ] = valPercent + "%";
+                       this.handle.stop( 1, 1 )[ animate ? "animate" : "css" ]( _set, o.animate );
+
+                       if ( oRange === "min" && this.orientation === "horizontal" ) {
+                               this.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( {
+                                       width: valPercent + "%"
+                               }, o.animate );
+                       }
+                       if ( oRange === "max" && this.orientation === "horizontal" ) {
+                               this.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( {
+                                       width: ( 100 - valPercent ) + "%"
+                               }, o.animate );
+                       }
+                       if ( oRange === "min" && this.orientation === "vertical" ) {
+                               this.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( {
+                                       height: valPercent + "%"
+                               }, o.animate );
+                       }
+                       if ( oRange === "max" && this.orientation === "vertical" ) {
+                               this.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( {
+                                       height: ( 100 - valPercent ) + "%"
+                               }, o.animate );
+                       }
+               }
+       },
+
+       _handleEvents: {
+               keydown: function( event ) {
+                       var allowed, curVal, newVal, step,
+                               index = $( event.target ).data( "ui-slider-handle-index" );
+
+                       switch ( event.keyCode ) {
+                               case $.ui.keyCode.HOME:
+                               case $.ui.keyCode.END:
+                               case $.ui.keyCode.PAGE_UP:
+                               case $.ui.keyCode.PAGE_DOWN:
+                               case $.ui.keyCode.UP:
+                               case $.ui.keyCode.RIGHT:
+                               case $.ui.keyCode.DOWN:
+                               case $.ui.keyCode.LEFT:
+                                       event.preventDefault();
+                                       if ( !this._keySliding ) {
+                                               this._keySliding = true;
+                                               this._addClass( $( event.target ), null, "ui-state-active" );
+                                               allowed = this._start( event, index );
+                                               if ( allowed === false ) {
+                                                       return;
+                                               }
+                                       }
+                                       break;
+                       }
+
+                       step = this.options.step;
+                       if ( this._hasMultipleValues() ) {
+                               curVal = newVal = this.values( index );
+                       } else {
+                               curVal = newVal = this.value();
+                       }
+
+                       switch ( event.keyCode ) {
+                               case $.ui.keyCode.HOME:
+                                       newVal = this._valueMin();
+                                       break;
+                               case $.ui.keyCode.END:
+                                       newVal = this._valueMax();
+                                       break;
+                               case $.ui.keyCode.PAGE_UP:
+                                       newVal = this._trimAlignValue(
+                                               curVal + ( ( this._valueMax() - this._valueMin() ) / this.numPages )
+                                       );
+                                       break;
+                               case $.ui.keyCode.PAGE_DOWN:
+                                       newVal = this._trimAlignValue(
+                                               curVal - ( ( this._valueMax() - this._valueMin() ) / this.numPages ) );
+                                       break;
+                               case $.ui.keyCode.UP:
+                               case $.ui.keyCode.RIGHT:
+                                       if ( curVal === this._valueMax() ) {
+                                               return;
+                                       }
+                                       newVal = this._trimAlignValue( curVal + step );
+                                       break;
+                               case $.ui.keyCode.DOWN:
+                               case $.ui.keyCode.LEFT:
+                                       if ( curVal === this._valueMin() ) {
+                                               return;
+                                       }
+                                       newVal = this._trimAlignValue( curVal - step );
+                                       break;
+                       }
+
+                       this._slide( event, index, newVal );
+               },
+               keyup: function( event ) {
+                       var index = $( event.target ).data( "ui-slider-handle-index" );
+
+                       if ( this._keySliding ) {
+                               this._keySliding = false;
+                               this._stop( event, index );
+                               this._change( event, index );
+                               this._removeClass( $( event.target ), null, "ui-state-active" );
+                       }
+               }
+       }
+} );
+
+
+/*!
+ * jQuery UI Spinner 1.12.1
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ */
+
+//>>label: Spinner
+//>>group: Widgets
+//>>description: Displays buttons to easily input numbers via the keyboard or mouse.
+//>>docs: http://api.jqueryui.com/spinner/
+//>>demos: http://jqueryui.com/spinner/
+//>>css.structure: ../../themes/base/core.css
+//>>css.structure: ../../themes/base/spinner.css
+//>>css.theme: ../../themes/base/theme.css
+
+
+
+function spinnerModifer( fn ) {
+       return function() {
+               var previous = this.element.val();
+               fn.apply( this, arguments );
+               this._refresh();
+               if ( previous !== this.element.val() ) {
+                       this._trigger( "change" );
+               }
+       };
+}
+
+$.widget( "ui.spinner", {
+       version: "1.12.1",
+       defaultElement: "<input>",
+       widgetEventPrefix: "spin",
+       options: {
+               classes: {
+                       "ui-spinner": "ui-corner-all",
+                       "ui-spinner-down": "ui-corner-br",
+                       "ui-spinner-up": "ui-corner-tr"
+               },
+               culture: null,
+               icons: {
+                       down: "ui-icon-triangle-1-s",
+                       up: "ui-icon-triangle-1-n"
+               },
+               incremental: true,
+               max: null,
+               min: null,
+               numberFormat: null,
+               page: 10,
+               step: 1,
+
+               change: null,
+               spin: null,
+               start: null,
+               stop: null
+       },
+
+       _create: function() {
+
+               // handle string values that need to be parsed
+               this._setOption( "max", this.options.max );
+               this._setOption( "min", this.options.min );
+               this._setOption( "step", this.options.step );
+
+               // Only format if there is a value, prevents the field from being marked
+               // as invalid in Firefox, see #9573.
+               if ( this.value() !== "" ) {
+
+                       // Format the value, but don't constrain.
+                       this._value( this.element.val(), true );
+               }
+
+               this._draw();
+               this._on( this._events );
+               this._refresh();
+
+               // Turning off autocomplete prevents the browser from remembering the
+               // value when navigating through history, so we re-enable autocomplete
+               // if the page is unloaded before the widget is destroyed. #7790
+               this._on( this.window, {
+                       beforeunload: function() {
+                               this.element.removeAttr( "autocomplete" );
+                       }
+               } );
+       },
+
+       _getCreateOptions: function() {
+               var options = this._super();
+               var element = this.element;
+
+               $.each( [ "min", "max", "step" ], function( i, option ) {
+                       var value = element.attr( option );
+                       if ( value != null && value.length ) {
+                               options[ option ] = value;
+                       }
+               } );
+
+               return options;
+       },
+
+       _events: {
+               keydown: function( event ) {
+                       if ( this._start( event ) && this._keydown( event ) ) {
+                               event.preventDefault();
+                       }
+               },
+               keyup: "_stop",
+               focus: function() {
+                       this.previous = this.element.val();
+               },
+               blur: function( event ) {
+                       if ( this.cancelBlur ) {
+                               delete this.cancelBlur;
+                               return;
+                       }
+
+                       this._stop();
+                       this._refresh();
+                       if ( this.previous !== this.element.val() ) {
+                               this._trigger( "change", event );
+                       }
+               },
+               mousewheel: function( event, delta ) {
+                       if ( !delta ) {
+                               return;
+                       }
+                       if ( !this.spinning && !this._start( event ) ) {
+                               return false;
+                       }
+
+                       this._spin( ( delta > 0 ? 1 : -1 ) * this.options.step, event );
+                       clearTimeout( this.mousewheelTimer );
+                       this.mousewheelTimer = this._delay( function() {
+                               if ( this.spinning ) {
+                                       this._stop( event );
+                               }
+                       }, 100 );
+                       event.preventDefault();
+               },
+               "mousedown .ui-spinner-button": function( event ) {
+                       var previous;
+
+                       // We never want the buttons to have focus; whenever the user is
+                       // interacting with the spinner, the focus should be on the input.
+                       // If the input is focused then this.previous is properly set from
+                       // when the input first received focus. If the input is not focused
+                       // then we need to set this.previous based on the value before spinning.
+                       previous = this.element[ 0 ] === $.ui.safeActiveElement( this.document[ 0 ] ) ?
+                               this.previous : this.element.val();
+                       function checkFocus() {
+                               var isActive = this.element[ 0 ] === $.ui.safeActiveElement( this.document[ 0 ] );
+                               if ( !isActive ) {
+                                       this.element.trigger( "focus" );
+                                       this.previous = previous;
+
+                                       // support: IE
+                                       // IE sets focus asynchronously, so we need to check if focus
+                                       // moved off of the input because the user clicked on the button.
+                                       this._delay( function() {
+                                               this.previous = previous;
+                                       } );
+                               }
+                       }
+
+                       // Ensure focus is on (or stays on) the text field
+                       event.preventDefault();
+                       checkFocus.call( this );
+
+                       // Support: IE
+                       // IE doesn't prevent moving focus even with event.preventDefault()
+                       // so we set a flag to know when we should ignore the blur event
+                       // and check (again) if focus moved off of the input.
+                       this.cancelBlur = true;
+                       this._delay( function() {
+                               delete this.cancelBlur;
+                               checkFocus.call( this );
+                       } );
+
+                       if ( this._start( event ) === false ) {
+                               return;
+                       }
+
+                       this._repeat( null, $( event.currentTarget )
+                               .hasClass( "ui-spinner-up" ) ? 1 : -1, event );
+               },
+               "mouseup .ui-spinner-button": "_stop",
+               "mouseenter .ui-spinner-button": function( event ) {
+
+                       // button will add ui-state-active if mouse was down while mouseleave and kept down
+                       if ( !$( event.currentTarget ).hasClass( "ui-state-active" ) ) {
+                               return;
+                       }
+
+                       if ( this._start( event ) === false ) {
+                               return false;
+                       }
+                       this._repeat( null, $( event.currentTarget )
+                               .hasClass( "ui-spinner-up" ) ? 1 : -1, event );
+               },
+
+               // TODO: do we really want to consider this a stop?
+               // shouldn't we just stop the repeater and wait until mouseup before
+               // we trigger the stop event?
+               "mouseleave .ui-spinner-button": "_stop"
+       },
+
+       // Support mobile enhanced option and make backcompat more sane
+       _enhance: function() {
+               this.uiSpinner = this.element
+                       .attr( "autocomplete", "off" )
+                       .wrap( "<span>" )
+                       .parent()
+
+                               // Add buttons
+                               .append(
+                                       "<a></a><a></a>"
+                               );
+       },
+
+       _draw: function() {
+               this._enhance();
+
+               this._addClass( this.uiSpinner, "ui-spinner", "ui-widget ui-widget-content" );
+               this._addClass( "ui-spinner-input" );
+
+               this.element.attr( "role", "spinbutton" );
+
+               // Button bindings
+               this.buttons = this.uiSpinner.children( "a" )
+                       .attr( "tabIndex", -1 )
+                       .attr( "aria-hidden", true )
+                       .button( {
+                               classes: {
+                                       "ui-button": ""
+                               }
+                       } );
+
+               // TODO: Right now button does not support classes this is already updated in button PR
+               this._removeClass( this.buttons, "ui-corner-all" );
+
+               this._addClass( this.buttons.first(), "ui-spinner-button ui-spinner-up" );
+               this._addClass( this.buttons.last(), "ui-spinner-button ui-spinner-down" );
+               this.buttons.first().button( {
+                       "icon": this.options.icons.up,
+                       "showLabel": false
+               } );
+               this.buttons.last().button( {
+                       "icon": this.options.icons.down,
+                       "showLabel": false
+               } );
+
+               // IE 6 doesn't understand height: 50% for the buttons
+               // unless the wrapper has an explicit height
+               if ( this.buttons.height() > Math.ceil( this.uiSpinner.height() * 0.5 ) &&
+                               this.uiSpinner.height() > 0 ) {
+                       this.uiSpinner.height( this.uiSpinner.height() );
+               }
+       },
+
+       _keydown: function( event ) {
+               var options = this.options,
+                       keyCode = $.ui.keyCode;
+
+               switch ( event.keyCode ) {
+               case keyCode.UP:
+                       this._repeat( null, 1, event );
+                       return true;
+               case keyCode.DOWN:
+                       this._repeat( null, -1, event );
+                       return true;
+               case keyCode.PAGE_UP:
+                       this._repeat( null, options.page, event );
+                       return true;
+               case keyCode.PAGE_DOWN:
+                       this._repeat( null, -options.page, event );
+                       return true;
+               }
+
+               return false;
+       },
+
+       _start: function( event ) {
+               if ( !this.spinning && this._trigger( "start", event ) === false ) {
+                       return false;
+               }
+
+               if ( !this.counter ) {
+                       this.counter = 1;
+               }
+               this.spinning = true;
+               return true;
+       },
+
+       _repeat: function( i, steps, event ) {
+               i = i || 500;
+
+               clearTimeout( this.timer );
+               this.timer = this._delay( function() {
+                       this._repeat( 40, steps, event );
+               }, i );
+
+               this._spin( steps * this.options.step, event );
+       },
+
+       _spin: function( step, event ) {
+               var value = this.value() || 0;
+
+               if ( !this.counter ) {
+                       this.counter = 1;
+               }
+
+               value = this._adjustValue( value + step * this._increment( this.counter ) );
+
+               if ( !this.spinning || this._trigger( "spin", event, { value: value } ) !== false ) {
+                       this._value( value );
+                       this.counter++;
+               }
+       },
+
+       _increment: function( i ) {
+               var incremental = this.options.incremental;
+
+               if ( incremental ) {
+                       return $.isFunction( incremental ) ?
+                               incremental( i ) :
+                               Math.floor( i * i * i / 50000 - i * i / 500 + 17 * i / 200 + 1 );
+               }
+
+               return 1;
+       },
+
+       _precision: function() {
+               var precision = this._precisionOf( this.options.step );
+               if ( this.options.min !== null ) {
+                       precision = Math.max( precision, this._precisionOf( this.options.min ) );
+               }
+               return precision;
+       },
+
+       _precisionOf: function( num ) {
+               var str = num.toString(),
+                       decimal = str.indexOf( "." );
+               return decimal === -1 ? 0 : str.length - decimal - 1;
+       },
+
+       _adjustValue: function( value ) {
+               var base, aboveMin,
+                       options = this.options;
+
+               // Make sure we're at a valid step
+               // - find out where we are relative to the base (min or 0)
+               base = options.min !== null ? options.min : 0;
+               aboveMin = value - base;
+
+               // - round to the nearest step
+               aboveMin = Math.round( aboveMin / options.step ) * options.step;
+
+               // - rounding is based on 0, so adjust back to our base
+               value = base + aboveMin;
+
+               // Fix precision from bad JS floating point math
+               value = parseFloat( value.toFixed( this._precision() ) );
+
+               // Clamp the value
+               if ( options.max !== null && value > options.max ) {
+                       return options.max;
+               }
+               if ( options.min !== null && value < options.min ) {
+                       return options.min;
+               }
+
+               return value;
+       },
+
+       _stop: function( event ) {
+               if ( !this.spinning ) {
+                       return;
+               }
+
+               clearTimeout( this.timer );
+               clearTimeout( this.mousewheelTimer );
+               this.counter = 0;
+               this.spinning = false;
+               this._trigger( "stop", event );
+       },
+
+       _setOption: function( key, value ) {
+               var prevValue, first, last;
+
+               if ( key === "culture" || key === "numberFormat" ) {
+                       prevValue = this._parse( this.element.val() );
+                       this.options[ key ] = value;
+                       this.element.val( this._format( prevValue ) );
+                       return;
+               }
+
+               if ( key === "max" || key === "min" || key === "step" ) {
+                       if ( typeof value === "string" ) {
+                               value = this._parse( value );
+                       }
+               }
+               if ( key === "icons" ) {
+                       first = this.buttons.first().find( ".ui-icon" );
+                       this._removeClass( first, null, this.options.icons.up );
+                       this._addClass( first, null, value.up );
+                       last = this.buttons.last().find( ".ui-icon" );
+                       this._removeClass( last, null, this.options.icons.down );
+                       this._addClass( last, null, value.down );
+               }
+
+               this._super( key, value );
+       },
+
+       _setOptionDisabled: function( value ) {
+               this._super( value );
+
+               this._toggleClass( this.uiSpinner, null, "ui-state-disabled", !!value );
+               this.element.prop( "disabled", !!value );
+               this.buttons.button( value ? "disable" : "enable" );
+       },
+
+       _setOptions: spinnerModifer( function( options ) {
+               this._super( options );
+       } ),
+
+       _parse: function( val ) {
+               if ( typeof val === "string" && val !== "" ) {
+                       val = window.Globalize && this.options.numberFormat ?
+                               Globalize.parseFloat( val, 10, this.options.culture ) : +val;
+               }
+               return val === "" || isNaN( val ) ? null : val;
+       },
+
+       _format: function( value ) {
+               if ( value === "" ) {
+                       return "";
+               }
+               return window.Globalize && this.options.numberFormat ?
+                       Globalize.format( value, this.options.numberFormat, this.options.culture ) :
+                       value;
+       },
+
+       _refresh: function() {
+               this.element.attr( {
+                       "aria-valuemin": this.options.min,
+                       "aria-valuemax": this.options.max,
+
+                       // TODO: what should we do with values that can't be parsed?
+                       "aria-valuenow": this._parse( this.element.val() )
+               } );
+       },
+
+       isValid: function() {
+               var value = this.value();
+
+               // Null is invalid
+               if ( value === null ) {
+                       return false;
+               }
+
+               // If value gets adjusted, it's invalid
+               return value === this._adjustValue( value );
+       },
+
+       // Update the value without triggering change
+       _value: function( value, allowAny ) {
+               var parsed;
+               if ( value !== "" ) {
+                       parsed = this._parse( value );
+                       if ( parsed !== null ) {
+                               if ( !allowAny ) {
+                                       parsed = this._adjustValue( parsed );
+                               }
+                               value = this._format( parsed );
+                       }
+               }
+               this.element.val( value );
+               this._refresh();
+       },
+
+       _destroy: function() {
+               this.element
+                       .prop( "disabled", false )
+                       .removeAttr( "autocomplete role aria-valuemin aria-valuemax aria-valuenow" );
+
+               this.uiSpinner.replaceWith( this.element );
+       },
+
+       stepUp: spinnerModifer( function( steps ) {
+               this._stepUp( steps );
+       } ),
+       _stepUp: function( steps ) {
+               if ( this._start() ) {
+                       this._spin( ( steps || 1 ) * this.options.step );
+                       this._stop();
+               }
+       },
+
+       stepDown: spinnerModifer( function( steps ) {
+               this._stepDown( steps );
+       } ),
+       _stepDown: function( steps ) {
+               if ( this._start() ) {
+                       this._spin( ( steps || 1 ) * -this.options.step );
+                       this._stop();
+               }
+       },
+
+       pageUp: spinnerModifer( function( pages ) {
+               this._stepUp( ( pages || 1 ) * this.options.page );
+       } ),
+
+       pageDown: spinnerModifer( function( pages ) {
+               this._stepDown( ( pages || 1 ) * this.options.page );
+       } ),
+
+       value: function( newVal ) {
+               if ( !arguments.length ) {
+                       return this._parse( this.element.val() );
+               }
+               spinnerModifer( this._value ).call( this, newVal );
+       },
+
+       widget: function() {
+               return this.uiSpinner;
+       }
+} );
+
+// DEPRECATED
+// TODO: switch return back to widget declaration at top of file when this is removed
+if ( $.uiBackCompat !== false ) {
+
+       // Backcompat for spinner html extension points
+       $.widget( "ui.spinner", $.ui.spinner, {
+               _enhance: function() {
+                       this.uiSpinner = this.element
+                               .attr( "autocomplete", "off" )
+                               .wrap( this._uiSpinnerHtml() )
+                               .parent()
+
+                                       // Add buttons
+                                       .append( this._buttonHtml() );
+               },
+               _uiSpinnerHtml: function() {
+                       return "<span>";
+               },
+
+               _buttonHtml: function() {
+                       return "<a></a><a></a>";
+               }
+       } );
+}
+
+var widgetsSpinner = $.ui.spinner;
+
+
+/*!
+ * jQuery UI Tabs 1.12.1
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ */
+
+//>>label: Tabs
+//>>group: Widgets
+//>>description: Transforms a set of container elements into a tab structure.
+//>>docs: http://api.jqueryui.com/tabs/
+//>>demos: http://jqueryui.com/tabs/
+//>>css.structure: ../../themes/base/core.css
+//>>css.structure: ../../themes/base/tabs.css
+//>>css.theme: ../../themes/base/theme.css
+
+
+
+$.widget( "ui.tabs", {
+       version: "1.12.1",
+       delay: 300,
+       options: {
+               active: null,
+               classes: {
+                       "ui-tabs": "ui-corner-all",
+                       "ui-tabs-nav": "ui-corner-all",
+                       "ui-tabs-panel": "ui-corner-bottom",
+                       "ui-tabs-tab": "ui-corner-top"
+               },
+               collapsible: false,
+               event: "click",
+               heightStyle: "content",
+               hide: null,
+               show: null,
+
+               // Callbacks
+               activate: null,
+               beforeActivate: null,
+               beforeLoad: null,
+               load: null
+       },
+
+       _isLocal: ( function() {
+               var rhash = /#.*$/;
+
+               return function( anchor ) {
+                       var anchorUrl, locationUrl;
+
+                       anchorUrl = anchor.href.replace( rhash, "" );
+                       locationUrl = location.href.replace( rhash, "" );
+
+                       // Decoding may throw an error if the URL isn't UTF-8 (#9518)
+                       try {
+                               anchorUrl = decodeURIComponent( anchorUrl );
+                       } catch ( error ) {}
+                       try {
+                               locationUrl = decodeURIComponent( locationUrl );
+                       } catch ( error ) {}
+
+                       return anchor.hash.length > 1 && anchorUrl === locationUrl;
+               };
+       } )(),
+
+       _create: function() {
+               var that = this,
+                       options = this.options;
+
+               this.running = false;
+
+               this._addClass( "ui-tabs", "ui-widget ui-widget-content" );
+               this._toggleClass( "ui-tabs-collapsible", null, options.collapsible );
+
+               this._processTabs();
+               options.active = this._initialActive();
+
+               // Take disabling tabs via class attribute from HTML
+               // into account and update option properly.
+               if ( $.isArray( options.disabled ) ) {
+                       options.disabled = $.unique( options.disabled.concat(
+                               $.map( this.tabs.filter( ".ui-state-disabled" ), function( li ) {
+                                       return that.tabs.index( li );
+                               } )
+                       ) ).sort();
+               }
+
+               // Check for length avoids error when initializing empty list
+               if ( this.options.active !== false && this.anchors.length ) {
+                       this.active = this._findActive( options.active );
+               } else {
+                       this.active = $();
+               }
+
+               this._refresh();
+
+               if ( this.active.length ) {
+                       this.load( options.active );
+               }
+       },
+
+       _initialActive: function() {
+               var active = this.options.active,
+                       collapsible = this.options.collapsible,
+                       locationHash = location.hash.substring( 1 );
+
+               if ( active === null ) {
+
+                       // check the fragment identifier in the URL
+                       if ( locationHash ) {
+                               this.tabs.each( function( i, tab ) {
+                                       if ( $( tab ).attr( "aria-controls" ) === locationHash ) {
+                                               active = i;
+                                               return false;
+                                       }
+                               } );
+                       }
+
+                       // Check for a tab marked active via a class
+                       if ( active === null ) {
+                               active = this.tabs.index( this.tabs.filter( ".ui-tabs-active" ) );
+                       }
+
+                       // No active tab, set to false
+                       if ( active === null || active === -1 ) {
+                               active = this.tabs.length ? 0 : false;
+                       }
+               }
+
+               // Handle numbers: negative, out of range
+               if ( active !== false ) {
+                       active = this.tabs.index( this.tabs.eq( active ) );
+                       if ( active === -1 ) {
+                               active = collapsible ? false : 0;
+                       }
+               }
+
+               // Don't allow collapsible: false and active: false
+               if ( !collapsible && active === false && this.anchors.length ) {
+                       active = 0;
+               }
+
+               return active;
+       },
+
+       _getCreateEventData: function() {
+               return {
+                       tab: this.active,
+                       panel: !this.active.length ? $() : this._getPanelForTab( this.active )
+               };
+       },
+
+       _tabKeydown: function( event ) {
+               var focusedTab = $( $.ui.safeActiveElement( this.document[ 0 ] ) ).closest( "li" ),
+                       selectedIndex = this.tabs.index( focusedTab ),
+                       goingForward = true;
+
+               if ( this._handlePageNav( event ) ) {
+                       return;
+               }
+
+               switch ( event.keyCode ) {
+               case $.ui.keyCode.RIGHT:
+               case $.ui.keyCode.DOWN:
+                       selectedIndex++;
+                       break;
+               case $.ui.keyCode.UP:
+               case $.ui.keyCode.LEFT:
+                       goingForward = false;
+                       selectedIndex--;
+                       break;
+               case $.ui.keyCode.END:
+                       selectedIndex = this.anchors.length - 1;
+                       break;
+               case $.ui.keyCode.HOME:
+                       selectedIndex = 0;
+                       break;
+               case $.ui.keyCode.SPACE:
+
+                       // Activate only, no collapsing
+                       event.preventDefault();
+                       clearTimeout( this.activating );
+                       this._activate( selectedIndex );
+                       return;
+               case $.ui.keyCode.ENTER:
+
+                       // Toggle (cancel delayed activation, allow collapsing)
+                       event.preventDefault();
+                       clearTimeout( this.activating );
+
+                       // Determine if we should collapse or activate
+                       this._activate( selectedIndex === this.options.active ? false : selectedIndex );
+                       return;
+               default:
+                       return;
+               }
+
+               // Focus the appropriate tab, based on which key was pressed
+               event.preventDefault();
+               clearTimeout( this.activating );
+               selectedIndex = this._focusNextTab( selectedIndex, goingForward );
+
+               // Navigating with control/command key will prevent automatic activation
+               if ( !event.ctrlKey && !event.metaKey ) {
+
+                       // Update aria-selected immediately so that AT think the tab is already selected.
+                       // Otherwise AT may confuse the user by stating that they need to activate the tab,
+                       // but the tab will already be activated by the time the announcement finishes.
+                       focusedTab.attr( "aria-selected", "false" );
+                       this.tabs.eq( selectedIndex ).attr( "aria-selected", "true" );
+
+                       this.activating = this._delay( function() {
+                               this.option( "active", selectedIndex );
+                       }, this.delay );
+               }
+       },
+
+       _panelKeydown: function( event ) {
+               if ( this._handlePageNav( event ) ) {
+                       return;
+               }
+
+               // Ctrl+up moves focus to the current tab
+               if ( event.ctrlKey && event.keyCode === $.ui.keyCode.UP ) {
+                       event.preventDefault();
+                       this.active.trigger( "focus" );
+               }
+       },
+
+       // Alt+page up/down moves focus to the previous/next tab (and activates)
+       _handlePageNav: function( event ) {
+               if ( event.altKey && event.keyCode === $.ui.keyCode.PAGE_UP ) {
+                       this._activate( this._focusNextTab( this.options.active - 1, false ) );
+                       return true;
+               }
+               if ( event.altKey && event.keyCode === $.ui.keyCode.PAGE_DOWN ) {
+                       this._activate( this._focusNextTab( this.options.active + 1, true ) );
+                       return true;
+               }
+       },
+
+       _findNextTab: function( index, goingForward ) {
+               var lastTabIndex = this.tabs.length - 1;
+
+               function constrain() {
+                       if ( index > lastTabIndex ) {
+                               index = 0;
+                       }
+                       if ( index < 0 ) {
+                               index = lastTabIndex;
+                       }
+                       return index;
+               }
+
+               while ( $.inArray( constrain(), this.options.disabled ) !== -1 ) {
+                       index = goingForward ? index + 1 : index - 1;
+               }
+
+               return index;
+       },
+
+       _focusNextTab: function( index, goingForward ) {
+               index = this._findNextTab( index, goingForward );
+               this.tabs.eq( index ).trigger( "focus" );
+               return index;
+       },
+
+       _setOption: function( key, value ) {
+               if ( key === "active" ) {
+
+                       // _activate() will handle invalid values and update this.options
+                       this._activate( value );
+                       return;
+               }
+
+               this._super( key, value );
+
+               if ( key === "collapsible" ) {
+                       this._toggleClass( "ui-tabs-collapsible", null, value );
+
+                       // Setting collapsible: false while collapsed; open first panel
+                       if ( !value && this.options.active === false ) {
+                               this._activate( 0 );
+                       }
+               }
+
+               if ( key === "event" ) {
+                       this._setupEvents( value );
+               }
+
+               if ( key === "heightStyle" ) {
+                       this._setupHeightStyle( value );
+               }
+       },
+
+       _sanitizeSelector: function( hash ) {
+               return hash ? hash.replace( /[!"$%&'()*+,.\/:;<=>?@\[\]\^`{|}~]/g, "\\$&" ) : "";
+       },
+
+       refresh: function() {
+               var options = this.options,
+                       lis = this.tablist.children( ":has(a[href])" );
+
+               // Get disabled tabs from class attribute from HTML
+               // this will get converted to a boolean if needed in _refresh()
+               options.disabled = $.map( lis.filter( ".ui-state-disabled" ), function( tab ) {
+                       return lis.index( tab );
+               } );
+
+               this._processTabs();
+
+               // Was collapsed or no tabs
+               if ( options.active === false || !this.anchors.length ) {
+                       options.active = false;
+                       this.active = $();
+
+               // was active, but active tab is gone
+               } else if ( this.active.length && !$.contains( this.tablist[ 0 ], this.active[ 0 ] ) ) {
+
+                       // all remaining tabs are disabled
+                       if ( this.tabs.length === options.disabled.length ) {
+                               options.active = false;
+                               this.active = $();
+
+                       // activate previous tab
+                       } else {
+                               this._activate( this._findNextTab( Math.max( 0, options.active - 1 ), false ) );
+                       }
+
+               // was active, active tab still exists
+               } else {
+
+                       // make sure active index is correct
+                       options.active = this.tabs.index( this.active );
+               }
+
+               this._refresh();
+       },
+
+       _refresh: function() {
+               this._setOptionDisabled( this.options.disabled );
+               this._setupEvents( this.options.event );
+               this._setupHeightStyle( this.options.heightStyle );
+
+               this.tabs.not( this.active ).attr( {
+                       "aria-selected": "false",
+                       "aria-expanded": "false",
+                       tabIndex: -1
+               } );
+               this.panels.not( this._getPanelForTab( this.active ) )
+                       .hide()
+                       .attr( {
+                               "aria-hidden": "true"
+                       } );
+
+               // Make sure one tab is in the tab order
+               if ( !this.active.length ) {
+                       this.tabs.eq( 0 ).attr( "tabIndex", 0 );
+               } else {
+                       this.active
+                               .attr( {
+                                       "aria-selected": "true",
+                                       "aria-expanded": "true",
+                                       tabIndex: 0
+                               } );
+                       this._addClass( this.active, "ui-tabs-active", "ui-state-active" );
+                       this._getPanelForTab( this.active )
+                               .show()
+                               .attr( {
+                                       "aria-hidden": "false"
+                               } );
+               }
+       },
+
+       _processTabs: function() {
+               var that = this,
+                       prevTabs = this.tabs,
+                       prevAnchors = this.anchors,
+                       prevPanels = this.panels;
+
+               this.tablist = this._getList().attr( "role", "tablist" );
+               this._addClass( this.tablist, "ui-tabs-nav",
+                       "ui-helper-reset ui-helper-clearfix ui-widget-header" );
+
+               // Prevent users from focusing disabled tabs via click
+               this.tablist
+                       .on( "mousedown" + this.eventNamespace, "> li", function( event ) {
+                               if ( $( this ).is( ".ui-state-disabled" ) ) {
+                                       event.preventDefault();
+                               }
+                       } )
+
+                       // Support: IE <9
+                       // Preventing the default action in mousedown doesn't prevent IE
+                       // from focusing the element, so if the anchor gets focused, blur.
+                       // We don't have to worry about focusing the previously focused
+                       // element since clicking on a non-focusable element should focus
+                       // the body anyway.
+                       .on( "focus" + this.eventNamespace, ".ui-tabs-anchor", function() {
+                               if ( $( this ).closest( "li" ).is( ".ui-state-disabled" ) ) {
+                                       this.blur();
+                               }
+                       } );
+
+               this.tabs = this.tablist.find( "> li:has(a[href])" )
+                       .attr( {
+                               role: "tab",
+                               tabIndex: -1
+                       } );
+               this._addClass( this.tabs, "ui-tabs-tab", "ui-state-default" );
+
+               this.anchors = this.tabs.map( function() {
+                       return $( "a", this )[ 0 ];
+               } )
+                       .attr( {
+                               role: "presentation",
+                               tabIndex: -1
+                       } );
+               this._addClass( this.anchors, "ui-tabs-anchor" );
+
+               this.panels = $();
+
+               this.anchors.each( function( i, anchor ) {
+                       var selector, panel, panelId,
+                               anchorId = $( anchor ).uniqueId().attr( "id" ),
+                               tab = $( anchor ).closest( "li" ),
+                               originalAriaControls = tab.attr( "aria-controls" );
+
+                       // Inline tab
+                       if ( that._isLocal( anchor ) ) {
+                               selector = anchor.hash;
+                               panelId = selector.substring( 1 );
+                               panel = that.element.find( that._sanitizeSelector( selector ) );
+
+                       // remote tab
+                       } else {
+
+                               // If the tab doesn't already have aria-controls,
+                               // generate an id by using a throw-away element
+                               panelId = tab.attr( "aria-controls" ) || $( {} ).uniqueId()[ 0 ].id;
+                               selector = "#" + panelId;
+                               panel = that.element.find( selector );
+                               if ( !panel.length ) {
+                                       panel = that._createPanel( panelId );
+                                       panel.insertAfter( that.panels[ i - 1 ] || that.tablist );
+                               }
+                               panel.attr( "aria-live", "polite" );
+                       }
+
+                       if ( panel.length ) {
+                               that.panels = that.panels.add( panel );
+                       }
+                       if ( originalAriaControls ) {
+                               tab.data( "ui-tabs-aria-controls", originalAriaControls );
+                       }
+                       tab.attr( {
+                               "aria-controls": panelId,
+                               "aria-labelledby": anchorId
+                       } );
+                       panel.attr( "aria-labelledby", anchorId );
+               } );
+
+               this.panels.attr( "role", "tabpanel" );
+               this._addClass( this.panels, "ui-tabs-panel", "ui-widget-content" );
+
+               // Avoid memory leaks (#10056)
+               if ( prevTabs ) {
+                       this._off( prevTabs.not( this.tabs ) );
+                       this._off( prevAnchors.not( this.anchors ) );
+                       this._off( prevPanels.not( this.panels ) );
+               }
+       },
+
+       // Allow overriding how to find the list for rare usage scenarios (#7715)
+       _getList: function() {
+               return this.tablist || this.element.find( "ol, ul" ).eq( 0 );
+       },
+
+       _createPanel: function( id ) {
+               return $( "<div>" )
+                       .attr( "id", id )
+                       .data( "ui-tabs-destroy", true );
+       },
+
+       _setOptionDisabled: function( disabled ) {
+               var currentItem, li, i;
+
+               if ( $.isArray( disabled ) ) {
+                       if ( !disabled.length ) {
+                               disabled = false;
+                       } else if ( disabled.length === this.anchors.length ) {
+                               disabled = true;
+                       }
+               }
+
+               // Disable tabs
+               for ( i = 0; ( li = this.tabs[ i ] ); i++ ) {
+                       currentItem = $( li );
+                       if ( disabled === true || $.inArray( i, disabled ) !== -1 ) {
+                               currentItem.attr( "aria-disabled", "true" );
+                               this._addClass( currentItem, null, "ui-state-disabled" );
+                       } else {
+                               currentItem.removeAttr( "aria-disabled" );
+                               this._removeClass( currentItem, null, "ui-state-disabled" );
+                       }
+               }
+
+               this.options.disabled = disabled;
+
+               this._toggleClass( this.widget(), this.widgetFullName + "-disabled", null,
+                       disabled === true );
+       },
+
+       _setupEvents: function( event ) {
+               var events = {};
+               if ( event ) {
+                       $.each( event.split( " " ), function( index, eventName ) {
+                               events[ eventName ] = "_eventHandler";
+                       } );
+               }
+
+               this._off( this.anchors.add( this.tabs ).add( this.panels ) );
+
+               // Always prevent the default action, even when disabled
+               this._on( true, this.anchors, {
+                       click: function( event ) {
+                               event.preventDefault();
+                       }
+               } );
+               this._on( this.anchors, events );
+               this._on( this.tabs, { keydown: "_tabKeydown" } );
+               this._on( this.panels, { keydown: "_panelKeydown" } );
+
+               this._focusable( this.tabs );
+               this._hoverable( this.tabs );
+       },
+
+       _setupHeightStyle: function( heightStyle ) {
+               var maxHeight,
+                       parent = this.element.parent();
+
+               if ( heightStyle === "fill" ) {
+                       maxHeight = parent.height();
+                       maxHeight -= this.element.outerHeight() - this.element.height();
+
+                       this.element.siblings( ":visible" ).each( function() {
+                               var elem = $( this ),
+                                       position = elem.css( "position" );
+
+                               if ( position === "absolute" || position === "fixed" ) {
+                                       return;
+                               }
+                               maxHeight -= elem.outerHeight( true );
+                       } );
+
+                       this.element.children().not( this.panels ).each( function() {
+                               maxHeight -= $( this ).outerHeight( true );
+                       } );
+
+                       this.panels.each( function() {
+                               $( this ).height( Math.max( 0, maxHeight -
+                                       $( this ).innerHeight() + $( this ).height() ) );
+                       } )
+                               .css( "overflow", "auto" );
+               } else if ( heightStyle === "auto" ) {
+                       maxHeight = 0;
+                       this.panels.each( function() {
+                               maxHeight = Math.max( maxHeight, $( this ).height( "" ).height() );
+                       } ).height( maxHeight );
+               }
+       },
+
+       _eventHandler: function( event ) {
+               var options = this.options,
+                       active = this.active,
+                       anchor = $( event.currentTarget ),
+                       tab = anchor.closest( "li" ),
+                       clickedIsActive = tab[ 0 ] === active[ 0 ],
+                       collapsing = clickedIsActive && options.collapsible,
+                       toShow = collapsing ? $() : this._getPanelForTab( tab ),
+                       toHide = !active.length ? $() : this._getPanelForTab( active ),
+                       eventData = {
+                               oldTab: active,
+                               oldPanel: toHide,
+                               newTab: collapsing ? $() : tab,
+                               newPanel: toShow
+                       };
+
+               event.preventDefault();
+
+               if ( tab.hasClass( "ui-state-disabled" ) ||
+
+                               // tab is already loading
+                               tab.hasClass( "ui-tabs-loading" ) ||
+
+                               // can't switch durning an animation
+                               this.running ||
+
+                               // click on active header, but not collapsible
+                               ( clickedIsActive && !options.collapsible ) ||
+
+                               // allow canceling activation
+                               ( this._trigger( "beforeActivate", event, eventData ) === false ) ) {
+                       return;
+               }
+
+               options.active = collapsing ? false : this.tabs.index( tab );
+
+               this.active = clickedIsActive ? $() : tab;
+               if ( this.xhr ) {
+                       this.xhr.abort();
+               }
+
+               if ( !toHide.length && !toShow.length ) {
+                       $.error( "jQuery UI Tabs: Mismatching fragment identifier." );
+               }
+
+               if ( toShow.length ) {
+                       this.load( this.tabs.index( tab ), event );
+               }
+               this._toggle( event, eventData );
+       },
+
+       // Handles show/hide for selecting tabs
+       _toggle: function( event, eventData ) {
+               var that = this,
+                       toShow = eventData.newPanel,
+                       toHide = eventData.oldPanel;
+
+               this.running = true;
+
+               function complete() {
+                       that.running = false;
+                       that._trigger( "activate", event, eventData );
+               }
+
+               function show() {
+                       that._addClass( eventData.newTab.closest( "li" ), "ui-tabs-active", "ui-state-active" );
+
+                       if ( toShow.length && that.options.show ) {
+                               that._show( toShow, that.options.show, complete );
+                       } else {
+                               toShow.show();
+                               complete();
+                       }
+               }
+
+               // Start out by hiding, then showing, then completing
+               if ( toHide.length && this.options.hide ) {
+                       this._hide( toHide, this.options.hide, function() {
+                               that._removeClass( eventData.oldTab.closest( "li" ),
+                                       "ui-tabs-active", "ui-state-active" );
+                               show();
+                       } );
+               } else {
+                       this._removeClass( eventData.oldTab.closest( "li" ),
+                               "ui-tabs-active", "ui-state-active" );
+                       toHide.hide();
+                       show();
+               }
+
+               toHide.attr( "aria-hidden", "true" );
+               eventData.oldTab.attr( {
+                       "aria-selected": "false",
+                       "aria-expanded": "false"
+               } );
+
+               // If we're switching tabs, remove the old tab from the tab order.
+               // If we're opening from collapsed state, remove the previous tab from the tab order.
+               // If we're collapsing, then keep the collapsing tab in the tab order.
+               if ( toShow.length && toHide.length ) {
+                       eventData.oldTab.attr( "tabIndex", -1 );
+               } else if ( toShow.length ) {
+                       this.tabs.filter( function() {
+                               return $( this ).attr( "tabIndex" ) === 0;
+                       } )
+                               .attr( "tabIndex", -1 );
+               }
+
+               toShow.attr( "aria-hidden", "false" );
+               eventData.newTab.attr( {
+                       "aria-selected": "true",
+                       "aria-expanded": "true",
+                       tabIndex: 0
+               } );
+       },
+
+       _activate: function( index ) {
+               var anchor,
+                       active = this._findActive( index );
+
+               // Trying to activate the already active panel
+               if ( active[ 0 ] === this.active[ 0 ] ) {
+                       return;
+               }
+
+               // Trying to collapse, simulate a click on the current active header
+               if ( !active.length ) {
+                       active = this.active;
+               }
+
+               anchor = active.find( ".ui-tabs-anchor" )[ 0 ];
+               this._eventHandler( {
+                       target: anchor,
+                       currentTarget: anchor,
+                       preventDefault: $.noop
+               } );
+       },
+
+       _findActive: function( index ) {
+               return index === false ? $() : this.tabs.eq( index );
+       },
+
+       _getIndex: function( index ) {
+
+               // meta-function to give users option to provide a href string instead of a numerical index.
+               if ( typeof index === "string" ) {
+                       index = this.anchors.index( this.anchors.filter( "[href$='" +
+                               $.ui.escapeSelector( index ) + "']" ) );
+               }
+
+               return index;
+       },
+
+       _destroy: function() {
+               if ( this.xhr ) {
+                       this.xhr.abort();
+               }
+
+               this.tablist
+                       .removeAttr( "role" )
+                       .off( this.eventNamespace );
+
+               this.anchors
+                       .removeAttr( "role tabIndex" )
+                       .removeUniqueId();
+
+               this.tabs.add( this.panels ).each( function() {
+                       if ( $.data( this, "ui-tabs-destroy" ) ) {
+                               $( this ).remove();
+                       } else {
+                               $( this ).removeAttr( "role tabIndex " +
+                                       "aria-live aria-busy aria-selected aria-labelledby aria-hidden aria-expanded" );
+                       }
+               } );
+
+               this.tabs.each( function() {
+                       var li = $( this ),
+                               prev = li.data( "ui-tabs-aria-controls" );
+                       if ( prev ) {
+                               li
+                                       .attr( "aria-controls", prev )
+                                       .removeData( "ui-tabs-aria-controls" );
+                       } else {
+                               li.removeAttr( "aria-controls" );
+                       }
+               } );
+
+               this.panels.show();
+
+               if ( this.options.heightStyle !== "content" ) {
+                       this.panels.css( "height", "" );
+               }
+       },
+
+       enable: function( index ) {
+               var disabled = this.options.disabled;
+               if ( disabled === false ) {
+                       return;
+               }
+
+               if ( index === undefined ) {
+                       disabled = false;
+               } else {
+                       index = this._getIndex( index );
+                       if ( $.isArray( disabled ) ) {
+                               disabled = $.map( disabled, function( num ) {
+                                       return num !== index ? num : null;
+                               } );
+                       } else {
+                               disabled = $.map( this.tabs, function( li, num ) {
+                                       return num !== index ? num : null;
+                               } );
+                       }
+               }
+               this._setOptionDisabled( disabled );
+       },
+
+       disable: function( index ) {
+               var disabled = this.options.disabled;
+               if ( disabled === true ) {
+                       return;
+               }
+
+               if ( index === undefined ) {
+                       disabled = true;
+               } else {
+                       index = this._getIndex( index );
+                       if ( $.inArray( index, disabled ) !== -1 ) {
+                               return;
+                       }
+                       if ( $.isArray( disabled ) ) {
+                               disabled = $.merge( [ index ], disabled ).sort();
+                       } else {
+                               disabled = [ index ];
+                       }
+               }
+               this._setOptionDisabled( disabled );
+       },
+
+       load: function( index, event ) {
+               index = this._getIndex( index );
+               var that = this,
+                       tab = this.tabs.eq( index ),
+                       anchor = tab.find( ".ui-tabs-anchor" ),
+                       panel = this._getPanelForTab( tab ),
+                       eventData = {
+                               tab: tab,
+                               panel: panel
+                       },
+                       complete = function( jqXHR, status ) {
+                               if ( status === "abort" ) {
+                                       that.panels.stop( false, true );
+                               }
+
+                               that._removeClass( tab, "ui-tabs-loading" );
+                               panel.removeAttr( "aria-busy" );
+
+                               if ( jqXHR === that.xhr ) {
+                                       delete that.xhr;
+                               }
+                       };
+
+               // Not remote
+               if ( this._isLocal( anchor[ 0 ] ) ) {
+                       return;
+               }
+
+               this.xhr = $.ajax( this._ajaxSettings( anchor, event, eventData ) );
+
+               // Support: jQuery <1.8
+               // jQuery <1.8 returns false if the request is canceled in beforeSend,
+               // but as of 1.8, $.ajax() always returns a jqXHR object.
+               if ( this.xhr && this.xhr.statusText !== "canceled" ) {
+                       this._addClass( tab, "ui-tabs-loading" );
+                       panel.attr( "aria-busy", "true" );
+
+                       this.xhr
+                               .done( function( response, status, jqXHR ) {
+
+                                       // support: jQuery <1.8
+                                       // http://bugs.jquery.com/ticket/11778
+                                       setTimeout( function() {
+                                               panel.html( response );
+                                               that._trigger( "load", event, eventData );
+
+                                               complete( jqXHR, status );
+                                       }, 1 );
+                               } )
+                               .fail( function( jqXHR, status ) {
+
+                                       // support: jQuery <1.8
+                                       // http://bugs.jquery.com/ticket/11778
+                                       setTimeout( function() {
+                                               complete( jqXHR, status );
+                                       }, 1 );
+                               } );
+               }
+       },
+
+       _ajaxSettings: function( anchor, event, eventData ) {
+               var that = this;
+               return {
+
+                       // Support: IE <11 only
+                       // Strip any hash that exists to prevent errors with the Ajax request
+                       url: anchor.attr( "href" ).replace( /#.*$/, "" ),
+                       beforeSend: function( jqXHR, settings ) {
+                               return that._trigger( "beforeLoad", event,
+                                       $.extend( { jqXHR: jqXHR, ajaxSettings: settings }, eventData ) );
+                       }
+               };
+       },
+
+       _getPanelForTab: function( tab ) {
+               var id = $( tab ).attr( "aria-controls" );
+               return this.element.find( this._sanitizeSelector( "#" + id ) );
+       }
+} );
+
+// DEPRECATED
+// TODO: Switch return back to widget declaration at top of file when this is removed
+if ( $.uiBackCompat !== false ) {
+
+       // Backcompat for ui-tab class (now ui-tabs-tab)
+       $.widget( "ui.tabs", $.ui.tabs, {
+               _processTabs: function() {
+                       this._superApply( arguments );
+                       this._addClass( this.tabs, "ui-tab" );
+               }
+       } );
+}
+
+var widgetsTabs = $.ui.tabs;
+
+
+/*!
+ * jQuery UI Tooltip 1.12.1
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ */
+
+//>>label: Tooltip
+//>>group: Widgets
+//>>description: Shows additional information for any element on hover or focus.
+//>>docs: http://api.jqueryui.com/tooltip/
+//>>demos: http://jqueryui.com/tooltip/
+//>>css.structure: ../../themes/base/core.css
+//>>css.structure: ../../themes/base/tooltip.css
+//>>css.theme: ../../themes/base/theme.css
+
+
+
+$.widget( "ui.tooltip", {
+       version: "1.12.1",
+       options: {
+               classes: {
+                       "ui-tooltip": "ui-corner-all ui-widget-shadow"
+               },
+               content: function() {
+
+                       // support: IE<9, Opera in jQuery <1.7
+                       // .text() can't accept undefined, so coerce to a string
+                       var title = $( this ).attr( "title" ) || "";
+
+                       // Escape title, since we're going from an attribute to raw HTML
+                       return $( "<a>" ).text( title ).html();
+               },
+               hide: true,
+
+               // Disabled elements have inconsistent behavior across browsers (#8661)
+               items: "[title]:not([disabled])",
+               position: {
+                       my: "left top+15",
+                       at: "left bottom",
+                       collision: "flipfit flip"
+               },
+               show: true,
+               track: false,
+
+               // Callbacks
+               close: null,
+               open: null
+       },
+
+       _addDescribedBy: function( elem, id ) {
+               var describedby = ( elem.attr( "aria-describedby" ) || "" ).split( /\s+/ );
+               describedby.push( id );
+               elem
+                       .data( "ui-tooltip-id", id )
+                       .attr( "aria-describedby", $.trim( describedby.join( " " ) ) );
+       },
+
+       _removeDescribedBy: function( elem ) {
+               var id = elem.data( "ui-tooltip-id" ),
+                       describedby = ( elem.attr( "aria-describedby" ) || "" ).split( /\s+/ ),
+                       index = $.inArray( id, describedby );
+
+               if ( index !== -1 ) {
+                       describedby.splice( index, 1 );
+               }
+
+               elem.removeData( "ui-tooltip-id" );
+               describedby = $.trim( describedby.join( " " ) );
+               if ( describedby ) {
+                       elem.attr( "aria-describedby", describedby );
+               } else {
+                       elem.removeAttr( "aria-describedby" );
+               }
+       },
+
+       _create: function() {
+               this._on( {
+                       mouseover: "open",
+                       focusin: "open"
+               } );
+
+               // IDs of generated tooltips, needed for destroy
+               this.tooltips = {};
+
+               // IDs of parent tooltips where we removed the title attribute
+               this.parents = {};
+
+               // Append the aria-live region so tooltips announce correctly
+               this.liveRegion = $( "<div>" )
+                       .attr( {
+                               role: "log",
+                               "aria-live": "assertive",
+                               "aria-relevant": "additions"
+                       } )
+                       .appendTo( this.document[ 0 ].body );
+               this._addClass( this.liveRegion, null, "ui-helper-hidden-accessible" );
+
+               this.disabledTitles = $( [] );
+       },
+
+       _setOption: function( key, value ) {
+               var that = this;
+
+               this._super( key, value );
+
+               if ( key === "content" ) {
+                       $.each( this.tooltips, function( id, tooltipData ) {
+                               that._updateContent( tooltipData.element );
+                       } );
+               }
+       },
+
+       _setOptionDisabled: function( value ) {
+               this[ value ? "_disable" : "_enable" ]();
+       },
+
+       _disable: function() {
+               var that = this;
+
+               // Close open tooltips
+               $.each( this.tooltips, function( id, tooltipData ) {
+                       var event = $.Event( "blur" );
+                       event.target = event.currentTarget = tooltipData.element[ 0 ];
+                       that.close( event, true );
+               } );
+
+               // Remove title attributes to prevent native tooltips
+               this.disabledTitles = this.disabledTitles.add(
+                       this.element.find( this.options.items ).addBack()
+                               .filter( function() {
+                                       var element = $( this );
+                                       if ( element.is( "[title]" ) ) {
+                                               return element
+                                                       .data( "ui-tooltip-title", element.attr( "title" ) )
+                                                       .removeAttr( "title" );
+                                       }
+                               } )
+               );
+       },
+
+       _enable: function() {
+
+               // restore title attributes
+               this.disabledTitles.each( function() {
+                       var element = $( this );
+                       if ( element.data( "ui-tooltip-title" ) ) {
+                               element.attr( "title", element.data( "ui-tooltip-title" ) );
+                       }
+               } );
+               this.disabledTitles = $( [] );
+       },
+
+       open: function( event ) {
+               var that = this,
+                       target = $( event ? event.target : this.element )
+
+                               // we need closest here due to mouseover bubbling,
+                               // but always pointing at the same event target
+                               .closest( this.options.items );
+
+               // No element to show a tooltip for or the tooltip is already open
+               if ( !target.length || target.data( "ui-tooltip-id" ) ) {
+                       return;
+               }
+
+               if ( target.attr( "title" ) ) {
+                       target.data( "ui-tooltip-title", target.attr( "title" ) );
+               }
+
+               target.data( "ui-tooltip-open", true );
+
+               // Kill parent tooltips, custom or native, for hover
+               if ( event && event.type === "mouseover" ) {
+                       target.parents().each( function() {
+                               var parent = $( this ),
+                                       blurEvent;
+                               if ( parent.data( "ui-tooltip-open" ) ) {
+                                       blurEvent = $.Event( "blur" );
+                                       blurEvent.target = blurEvent.currentTarget = this;
+                                       that.close( blurEvent, true );
+                               }
+                               if ( parent.attr( "title" ) ) {
+                                       parent.uniqueId();
+                                       that.parents[ this.id ] = {
+                                               element: this,
+                                               title: parent.attr( "title" )
+                                       };
+                                       parent.attr( "title", "" );
+                               }
+                       } );
+               }
+
+               this._registerCloseHandlers( event, target );
+               this._updateContent( target, event );
+       },
+
+       _updateContent: function( target, event ) {
+               var content,
+                       contentOption = this.options.content,
+                       that = this,
+                       eventType = event ? event.type : null;
+
+               if ( typeof contentOption === "string" || contentOption.nodeType ||
+                               contentOption.jquery ) {
+                       return this._open( event, target, contentOption );
+               }
+
+               content = contentOption.call( target[ 0 ], function( response ) {
+
+                       // IE may instantly serve a cached response for ajax requests
+                       // delay this call to _open so the other call to _open runs first
+                       that._delay( function() {
+
+                               // Ignore async response if tooltip was closed already
+                               if ( !target.data( "ui-tooltip-open" ) ) {
+                                       return;
+                               }
+
+                               // JQuery creates a special event for focusin when it doesn't
+                               // exist natively. To improve performance, the native event
+                               // object is reused and the type is changed. Therefore, we can't
+                               // rely on the type being correct after the event finished
+                               // bubbling, so we set it back to the previous value. (#8740)
+                               if ( event ) {
+                                       event.type = eventType;
+                               }
+                               this._open( event, target, response );
+                       } );
+               } );
+               if ( content ) {
+                       this._open( event, target, content );
+               }
+       },
+
+       _open: function( event, target, content ) {
+               var tooltipData, tooltip, delayedShow, a11yContent,
+                       positionOption = $.extend( {}, this.options.position );
+
+               if ( !content ) {
+                       return;
+               }
+
+               // Content can be updated multiple times. If the tooltip already
+               // exists, then just update the content and bail.
+               tooltipData = this._find( target );
+               if ( tooltipData ) {
+                       tooltipData.tooltip.find( ".ui-tooltip-content" ).html( content );
+                       return;
+               }
+
+               // If we have a title, clear it to prevent the native tooltip
+               // we have to check first to avoid defining a title if none exists
+               // (we don't want to cause an element to start matching [title])
+               //
+               // We use removeAttr only for key events, to allow IE to export the correct
+               // accessible attributes. For mouse events, set to empty string to avoid
+               // native tooltip showing up (happens only when removing inside mouseover).
+               if ( target.is( "[title]" ) ) {
+                       if ( event && event.type === "mouseover" ) {
+                               target.attr( "title", "" );
+                       } else {
+                               target.removeAttr( "title" );
+                       }
+               }
+
+               tooltipData = this._tooltip( target );
+               tooltip = tooltipData.tooltip;
+               this._addDescribedBy( target, tooltip.attr( "id" ) );
+               tooltip.find( ".ui-tooltip-content" ).html( content );
+
+               // Support: Voiceover on OS X, JAWS on IE <= 9
+               // JAWS announces deletions even when aria-relevant="additions"
+               // Voiceover will sometimes re-read the entire log region's contents from the beginning
+               this.liveRegion.children().hide();
+               a11yContent = $( "<div>" ).html( tooltip.find( ".ui-tooltip-content" ).html() );
+               a11yContent.removeAttr( "name" ).find( "[name]" ).removeAttr( "name" );
+               a11yContent.removeAttr( "id" ).find( "[id]" ).removeAttr( "id" );
+               a11yContent.appendTo( this.liveRegion );
+
+               function position( event ) {
+                       positionOption.of = event;
+                       if ( tooltip.is( ":hidden" ) ) {
+                               return;
+                       }
+                       tooltip.position( positionOption );
+               }
+               if ( this.options.track && event && /^mouse/.test( event.type ) ) {
+                       this._on( this.document, {
+                               mousemove: position
+                       } );
+
+                       // trigger once to override element-relative positioning
+                       position( event );
+               } else {
+                       tooltip.position( $.extend( {
+                               of: target
+                       }, this.options.position ) );
+               }
+
+               tooltip.hide();
+
+               this._show( tooltip, this.options.show );
+
+               // Handle tracking tooltips that are shown with a delay (#8644). As soon
+               // as the tooltip is visible, position the tooltip using the most recent
+               // event.
+               // Adds the check to add the timers only when both delay and track options are set (#14682)
+               if ( this.options.track && this.options.show && this.options.show.delay ) {
+                       delayedShow = this.delayedShow = setInterval( function() {
+                               if ( tooltip.is( ":visible" ) ) {
+                                       position( positionOption.of );
+                                       clearInterval( delayedShow );
+                               }
+                       }, $.fx.interval );
+               }
+
+               this._trigger( "open", event, { tooltip: tooltip } );
+       },
+
+       _registerCloseHandlers: function( event, target ) {
+               var events = {
+                       keyup: function( event ) {
+                               if ( event.keyCode === $.ui.keyCode.ESCAPE ) {
+                                       var fakeEvent = $.Event( event );
+                                       fakeEvent.currentTarget = target[ 0 ];
+                                       this.close( fakeEvent, true );
+                               }
+                       }
+               };
+
+               // Only bind remove handler for delegated targets. Non-delegated
+               // tooltips will handle this in destroy.
+               if ( target[ 0 ] !== this.element[ 0 ] ) {
+                       events.remove = function() {
+                               this._removeTooltip( this._find( target ).tooltip );
+                       };
+               }
+
+               if ( !event || event.type === "mouseover" ) {
+                       events.mouseleave = "close";
+               }
+               if ( !event || event.type === "focusin" ) {
+                       events.focusout = "close";
+               }
+               this._on( true, target, events );
+       },
+
+       close: function( event ) {
+               var tooltip,
+                       that = this,
+                       target = $( event ? event.currentTarget : this.element ),
+                       tooltipData = this._find( target );
+
+               // The tooltip may already be closed
+               if ( !tooltipData ) {
+
+                       // We set ui-tooltip-open immediately upon open (in open()), but only set the
+                       // additional data once there's actually content to show (in _open()). So even if the
+                       // tooltip doesn't have full data, we always remove ui-tooltip-open in case we're in
+                       // the period between open() and _open().
+                       target.removeData( "ui-tooltip-open" );
+                       return;
+               }
+
+               tooltip = tooltipData.tooltip;
+
+               // Disabling closes the tooltip, so we need to track when we're closing
+               // to avoid an infinite loop in case the tooltip becomes disabled on close
+               if ( tooltipData.closing ) {
+                       return;
+               }
+
+               // Clear the interval for delayed tracking tooltips
+               clearInterval( this.delayedShow );
+
+               // Only set title if we had one before (see comment in _open())
+               // If the title attribute has changed since open(), don't restore
+               if ( target.data( "ui-tooltip-title" ) && !target.attr( "title" ) ) {
+                       target.attr( "title", target.data( "ui-tooltip-title" ) );
+               }
+
+               this._removeDescribedBy( target );
+
+               tooltipData.hiding = true;
+               tooltip.stop( true );
+               this._hide( tooltip, this.options.hide, function() {
+                       that._removeTooltip( $( this ) );
+               } );
+
+               target.removeData( "ui-tooltip-open" );
+               this._off( target, "mouseleave focusout keyup" );
+
+               // Remove 'remove' binding only on delegated targets
+               if ( target[ 0 ] !== this.element[ 0 ] ) {
+                       this._off( target, "remove" );
+               }
+               this._off( this.document, "mousemove" );
+
+               if ( event && event.type === "mouseleave" ) {
+                       $.each( this.parents, function( id, parent ) {
+                               $( parent.element ).attr( "title", parent.title );
+                               delete that.parents[ id ];
+                       } );
+               }
+
+               tooltipData.closing = true;
+               this._trigger( "close", event, { tooltip: tooltip } );
+               if ( !tooltipData.hiding ) {
+                       tooltipData.closing = false;
+               }
+       },
+
+       _tooltip: function( element ) {
+               var tooltip = $( "<div>" ).attr( "role", "tooltip" ),
+                       content = $( "<div>" ).appendTo( tooltip ),
+                       id = tooltip.uniqueId().attr( "id" );
+
+               this._addClass( content, "ui-tooltip-content" );
+               this._addClass( tooltip, "ui-tooltip", "ui-widget ui-widget-content" );
+
+               tooltip.appendTo( this._appendTo( element ) );
+
+               return this.tooltips[ id ] = {
+                       element: element,
+                       tooltip: tooltip
+               };
+       },
+
+       _find: function( target ) {
+               var id = target.data( "ui-tooltip-id" );
+               return id ? this.tooltips[ id ] : null;
+       },
+
+       _removeTooltip: function( tooltip ) {
+               tooltip.remove();
+               delete this.tooltips[ tooltip.attr( "id" ) ];
+       },
+
+       _appendTo: function( target ) {
+               var element = target.closest( ".ui-front, dialog" );
+
+               if ( !element.length ) {
+                       element = this.document[ 0 ].body;
+               }
+
+               return element;
+       },
+
+       _destroy: function() {
+               var that = this;
+
+               // Close open tooltips
+               $.each( this.tooltips, function( id, tooltipData ) {
+
+                       // Delegate to close method to handle common cleanup
+                       var event = $.Event( "blur" ),
+                               element = tooltipData.element;
+                       event.target = event.currentTarget = element[ 0 ];
+                       that.close( event, true );
+
+                       // Remove immediately; destroying an open tooltip doesn't use the
+                       // hide animation
+                       $( "#" + id ).remove();
+
+                       // Restore the title
+                       if ( element.data( "ui-tooltip-title" ) ) {
+
+                               // If the title attribute has changed since open(), don't restore
+                               if ( !element.attr( "title" ) ) {
+                                       element.attr( "title", element.data( "ui-tooltip-title" ) );
+                               }
+                               element.removeData( "ui-tooltip-title" );
+                       }
+               } );
+               this.liveRegion.remove();
+       }
+} );
+
+// DEPRECATED
+// TODO: Switch return back to widget declaration at top of file when this is removed
+if ( $.uiBackCompat !== false ) {
+
+       // Backcompat for tooltipClass option
+       $.widget( "ui.tooltip", $.ui.tooltip, {
+               options: {
+                       tooltipClass: null
+               },
+               _tooltip: function() {
+                       var tooltipData = this._superApply( arguments );
+                       if ( this.options.tooltipClass ) {
+                               tooltipData.tooltip.addClass( this.options.tooltipClass );
+                       }
+                       return tooltipData;
+               }
+       } );
+}
+
+var widgetsTooltip = $.ui.tooltip;
+
+
+/*!
+ * jQuery UI Effects 1.12.1
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ */
+
+//>>label: Effects Core
+//>>group: Effects
+// jscs:disable maximumLineLength
+//>>description: Extends the internal jQuery effects. Includes morphing and easing. Required by all other effects.
+// jscs:enable maximumLineLength
+//>>docs: http://api.jqueryui.com/category/effects-core/
+//>>demos: http://jqueryui.com/effect/
+
+
+
+var dataSpace = "ui-effects-",
+       dataSpaceStyle = "ui-effects-style",
+       dataSpaceAnimated = "ui-effects-animated",
+
+       // Create a local jQuery because jQuery Color relies on it and the
+       // global may not exist with AMD and a custom build (#10199)
+       jQuery = $;
+
+$.effects = {
+       effect: {}
+};
+
+/*!
+ * jQuery Color Animations v2.1.2
+ * https://github.com/jquery/jquery-color
+ *
+ * Copyright 2014 jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * Date: Wed Jan 16 08:47:09 2013 -0600
+ */
+( function( jQuery, undefined ) {
+
+       var stepHooks = "backgroundColor borderBottomColor borderLeftColor borderRightColor " +
+               "borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor",
+
+       // Plusequals test for += 100 -= 100
+       rplusequals = /^([\-+])=\s*(\d+\.?\d*)/,
+
+       // A set of RE's that can match strings and generate color tuples.
+       stringParsers = [ {
+                       re: /rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,
+                       parse: function( execResult ) {
+                               return [
+                                       execResult[ 1 ],
+                                       execResult[ 2 ],
+                                       execResult[ 3 ],
+                                       execResult[ 4 ]
+                               ];
+                       }
+               }, {
+                       re: /rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,
+                       parse: function( execResult ) {
+                               return [
+                                       execResult[ 1 ] * 2.55,
+                                       execResult[ 2 ] * 2.55,
+                                       execResult[ 3 ] * 2.55,
+                                       execResult[ 4 ]
+                               ];
+                       }
+               }, {
+
+                       // This regex ignores A-F because it's compared against an already lowercased string
+                       re: /#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/,
+                       parse: function( execResult ) {
+                               return [
+                                       parseInt( execResult[ 1 ], 16 ),
+                                       parseInt( execResult[ 2 ], 16 ),
+                                       parseInt( execResult[ 3 ], 16 )
+                               ];
+                       }
+               }, {
+
+                       // This regex ignores A-F because it's compared against an already lowercased string
+                       re: /#([a-f0-9])([a-f0-9])([a-f0-9])/,
+                       parse: function( execResult ) {
+                               return [
+                                       parseInt( execResult[ 1 ] + execResult[ 1 ], 16 ),
+                                       parseInt( execResult[ 2 ] + execResult[ 2 ], 16 ),
+                                       parseInt( execResult[ 3 ] + execResult[ 3 ], 16 )
+                               ];
+                       }
+               }, {
+                       re: /hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,
+                       space: "hsla",
+                       parse: function( execResult ) {
+                               return [
+                                       execResult[ 1 ],
+                                       execResult[ 2 ] / 100,
+                                       execResult[ 3 ] / 100,
+                                       execResult[ 4 ]
+                               ];
+                       }
+               } ],
+
+       // JQuery.Color( )
+       color = jQuery.Color = function( color, green, blue, alpha ) {
+               return new jQuery.Color.fn.parse( color, green, blue, alpha );
+       },
+       spaces = {
+               rgba: {
+                       props: {
+                               red: {
+                                       idx: 0,
+                                       type: "byte"
+                               },
+                               green: {
+                                       idx: 1,
+                                       type: "byte"
+                               },
+                               blue: {
+                                       idx: 2,
+                                       type: "byte"
+                               }
+                       }
+               },
+
+               hsla: {
+                       props: {
+                               hue: {
+                                       idx: 0,
+                                       type: "degrees"
+                               },
+                               saturation: {
+                                       idx: 1,
+                                       type: "percent"
+                               },
+                               lightness: {
+                                       idx: 2,
+                                       type: "percent"
+                               }
+                       }
+               }
+       },
+       propTypes = {
+               "byte": {
+                       floor: true,
+                       max: 255
+               },
+               "percent": {
+                       max: 1
+               },
+               "degrees": {
+                       mod: 360,
+                       floor: true
+               }
+       },
+       support = color.support = {},
+
+       // Element for support tests
+       supportElem = jQuery( "<p>" )[ 0 ],
+
+       // Colors = jQuery.Color.names
+       colors,
+
+       // Local aliases of functions called often
+       each = jQuery.each;
+
+// Determine rgba support immediately
+supportElem.style.cssText = "background-color:rgba(1,1,1,.5)";
+support.rgba = supportElem.style.backgroundColor.indexOf( "rgba" ) > -1;
+
+// Define cache name and alpha properties
+// for rgba and hsla spaces
+each( spaces, function( spaceName, space ) {
+       space.cache = "_" + spaceName;
+       space.props.alpha = {
+               idx: 3,
+               type: "percent",
+               def: 1
+       };
+} );
+
+function clamp( value, prop, allowEmpty ) {
+       var type = propTypes[ prop.type ] || {};
+
+       if ( value == null ) {
+               return ( allowEmpty || !prop.def ) ? null : prop.def;
+       }
+
+       // ~~ is an short way of doing floor for positive numbers
+       value = type.floor ? ~~value : parseFloat( value );
+
+       // IE will pass in empty strings as value for alpha,
+       // which will hit this case
+       if ( isNaN( value ) ) {
+               return prop.def;
+       }
+
+       if ( type.mod ) {
+
+               // We add mod before modding to make sure that negatives values
+               // get converted properly: -10 -> 350
+               return ( value + type.mod ) % type.mod;
+       }
+
+       // For now all property types without mod have min and max
+       return 0 > value ? 0 : type.max < value ? type.max : value;
+}
+
+function stringParse( string ) {
+       var inst = color(),
+               rgba = inst._rgba = [];
+
+       string = string.toLowerCase();
+
+       each( stringParsers, function( i, parser ) {
+               var parsed,
+                       match = parser.re.exec( string ),
+                       values = match && parser.parse( match ),
+                       spaceName = parser.space || "rgba";
+
+               if ( values ) {
+                       parsed = inst[ spaceName ]( values );
+
+                       // If this was an rgba parse the assignment might happen twice
+                       // oh well....
+                       inst[ spaces[ spaceName ].cache ] = parsed[ spaces[ spaceName ].cache ];
+                       rgba = inst._rgba = parsed._rgba;
+
+                       // Exit each( stringParsers ) here because we matched
+                       return false;
+               }
+       } );
+
+       // Found a stringParser that handled it
+       if ( rgba.length ) {
+
+               // If this came from a parsed string, force "transparent" when alpha is 0
+               // chrome, (and maybe others) return "transparent" as rgba(0,0,0,0)
+               if ( rgba.join() === "0,0,0,0" ) {
+                       jQuery.extend( rgba, colors.transparent );
+               }
+               return inst;
+       }
+
+       // Named colors
+       return colors[ string ];
+}
+
+color.fn = jQuery.extend( color.prototype, {
+       parse: function( red, green, blue, alpha ) {
+               if ( red === undefined ) {
+                       this._rgba = [ null, null, null, null ];
+                       return this;
+               }
+               if ( red.jquery || red.nodeType ) {
+                       red = jQuery( red ).css( green );
+                       green = undefined;
+               }
+
+               var inst = this,
+                       type = jQuery.type( red ),
+                       rgba = this._rgba = [];
+
+               // More than 1 argument specified - assume ( red, green, blue, alpha )
+               if ( green !== undefined ) {
+                       red = [ red, green, blue, alpha ];
+                       type = "array";
+               }
+
+               if ( type === "string" ) {
+                       return this.parse( stringParse( red ) || colors._default );
+               }
+
+               if ( type === "array" ) {
+                       each( spaces.rgba.props, function( key, prop ) {
+                               rgba[ prop.idx ] = clamp( red[ prop.idx ], prop );
+                       } );
+                       return this;
+               }
+
+               if ( type === "object" ) {
+                       if ( red instanceof color ) {
+                               each( spaces, function( spaceName, space ) {
+                                       if ( red[ space.cache ] ) {
+                                               inst[ space.cache ] = red[ space.cache ].slice();
+                                       }
+                               } );
+                       } else {
+                               each( spaces, function( spaceName, space ) {
+                                       var cache = space.cache;
+                                       each( space.props, function( key, prop ) {
+
+                                               // If the cache doesn't exist, and we know how to convert
+                                               if ( !inst[ cache ] && space.to ) {
+
+                                                       // If the value was null, we don't need to copy it
+                                                       // if the key was alpha, we don't need to copy it either
+                                                       if ( key === "alpha" || red[ key ] == null ) {
+                                                               return;
+                                                       }
+                                                       inst[ cache ] = space.to( inst._rgba );
+                                               }
+
+                                               // This is the only case where we allow nulls for ALL properties.
+                                               // call clamp with alwaysAllowEmpty
+                                               inst[ cache ][ prop.idx ] = clamp( red[ key ], prop, true );
+                                       } );
+
+                                       // Everything defined but alpha?
+                                       if ( inst[ cache ] &&
+                                                       jQuery.inArray( null, inst[ cache ].slice( 0, 3 ) ) < 0 ) {
+
+                                               // Use the default of 1
+                                               inst[ cache ][ 3 ] = 1;
+                                               if ( space.from ) {
+                                                       inst._rgba = space.from( inst[ cache ] );
+                                               }
+                                       }
+                               } );
+                       }
+                       return this;
+               }
+       },
+       is: function( compare ) {
+               var is = color( compare ),
+                       same = true,
+                       inst = this;
+
+               each( spaces, function( _, space ) {
+                       var localCache,
+                               isCache = is[ space.cache ];
+                       if ( isCache ) {
+                               localCache = inst[ space.cache ] || space.to && space.to( inst._rgba ) || [];
+                               each( space.props, function( _, prop ) {
+                                       if ( isCache[ prop.idx ] != null ) {
+                                               same = ( isCache[ prop.idx ] === localCache[ prop.idx ] );
+                                               return same;
+                                       }
+                               } );
+                       }
+                       return same;
+               } );
+               return same;
+       },
+       _space: function() {
+               var used = [],
+                       inst = this;
+               each( spaces, function( spaceName, space ) {
+                       if ( inst[ space.cache ] ) {
+                               used.push( spaceName );
+                       }
+               } );
+               return used.pop();
+       },
+       transition: function( other, distance ) {
+               var end = color( other ),
+                       spaceName = end._space(),
+                       space = spaces[ spaceName ],
+                       startColor = this.alpha() === 0 ? color( "transparent" ) : this,
+                       start = startColor[ space.cache ] || space.to( startColor._rgba ),
+                       result = start.slice();
+
+               end = end[ space.cache ];
+               each( space.props, function( key, prop ) {
+                       var index = prop.idx,
+                               startValue = start[ index ],
+                               endValue = end[ index ],
+                               type = propTypes[ prop.type ] || {};
+
+                       // If null, don't override start value
+                       if ( endValue === null ) {
+                               return;
+                       }
+
+                       // If null - use end
+                       if ( startValue === null ) {
+                               result[ index ] = endValue;
+                       } else {
+                               if ( type.mod ) {
+                                       if ( endValue - startValue > type.mod / 2 ) {
+                                               startValue += type.mod;
+                                       } else if ( startValue - endValue > type.mod / 2 ) {
+                                               startValue -= type.mod;
+                                       }
+                               }
+                               result[ index ] = clamp( ( endValue - startValue ) * distance + startValue, prop );
+                       }
+               } );
+               return this[ spaceName ]( result );
+       },
+       blend: function( opaque ) {
+
+               // If we are already opaque - return ourself
+               if ( this._rgba[ 3 ] === 1 ) {
+                       return this;
+               }
+
+               var rgb = this._rgba.slice(),
+                       a = rgb.pop(),
+                       blend = color( opaque )._rgba;
+
+               return color( jQuery.map( rgb, function( v, i ) {
+                       return ( 1 - a ) * blend[ i ] + a * v;
+               } ) );
+       },
+       toRgbaString: function() {
+               var prefix = "rgba(",
+                       rgba = jQuery.map( this._rgba, function( v, i ) {
+                               return v == null ? ( i > 2 ? 1 : 0 ) : v;
+                       } );
+
+               if ( rgba[ 3 ] === 1 ) {
+                       rgba.pop();
+                       prefix = "rgb(";
+               }
+
+               return prefix + rgba.join() + ")";
+       },
+       toHslaString: function() {
+               var prefix = "hsla(",
+                       hsla = jQuery.map( this.hsla(), function( v, i ) {
+                               if ( v == null ) {
+                                       v = i > 2 ? 1 : 0;
+                               }
+
+                               // Catch 1 and 2
+                               if ( i && i < 3 ) {
+                                       v = Math.round( v * 100 ) + "%";
+                               }
+                               return v;
+                       } );
+
+               if ( hsla[ 3 ] === 1 ) {
+                       hsla.pop();
+                       prefix = "hsl(";
+               }
+               return prefix + hsla.join() + ")";
+       },
+       toHexString: function( includeAlpha ) {
+               var rgba = this._rgba.slice(),
+                       alpha = rgba.pop();
+
+               if ( includeAlpha ) {
+                       rgba.push( ~~( alpha * 255 ) );
+               }
+
+               return "#" + jQuery.map( rgba, function( v ) {
+
+                       // Default to 0 when nulls exist
+                       v = ( v || 0 ).toString( 16 );
+                       return v.length === 1 ? "0" + v : v;
+               } ).join( "" );
+       },
+       toString: function() {
+               return this._rgba[ 3 ] === 0 ? "transparent" : this.toRgbaString();
+       }
+} );
+color.fn.parse.prototype = color.fn;
+
+// Hsla conversions adapted from:
+// https://code.google.com/p/maashaack/source/browse/packages/graphics/trunk/src/graphics/colors/HUE2RGB.as?r=5021
+
+function hue2rgb( p, q, h ) {
+       h = ( h + 1 ) % 1;
+       if ( h * 6 < 1 ) {
+               return p + ( q - p ) * h * 6;
+       }
+       if ( h * 2 < 1 ) {
+               return q;
+       }
+       if ( h * 3 < 2 ) {
+               return p + ( q - p ) * ( ( 2 / 3 ) - h ) * 6;
+       }
+       return p;
+}
+
+spaces.hsla.to = function( rgba ) {
+       if ( rgba[ 0 ] == null || rgba[ 1 ] == null || rgba[ 2 ] == null ) {
+               return [ null, null, null, rgba[ 3 ] ];
+       }
+       var r = rgba[ 0 ] / 255,
+               g = rgba[ 1 ] / 255,
+               b = rgba[ 2 ] / 255,
+               a = rgba[ 3 ],
+               max = Math.max( r, g, b ),
+               min = Math.min( r, g, b ),
+               diff = max - min,
+               add = max + min,
+               l = add * 0.5,
+               h, s;
+
+       if ( min === max ) {
+               h = 0;
+       } else if ( r === max ) {
+               h = ( 60 * ( g - b ) / diff ) + 360;
+       } else if ( g === max ) {
+               h = ( 60 * ( b - r ) / diff ) + 120;
+       } else {
+               h = ( 60 * ( r - g ) / diff ) + 240;
+       }
+
+       // Chroma (diff) == 0 means greyscale which, by definition, saturation = 0%
+       // otherwise, saturation is based on the ratio of chroma (diff) to lightness (add)
+       if ( diff === 0 ) {
+               s = 0;
+       } else if ( l <= 0.5 ) {
+               s = diff / add;
+       } else {
+               s = diff / ( 2 - add );
+       }
+       return [ Math.round( h ) % 360, s, l, a == null ? 1 : a ];
+};
+
+spaces.hsla.from = function( hsla ) {
+       if ( hsla[ 0 ] == null || hsla[ 1 ] == null || hsla[ 2 ] == null ) {
+               return [ null, null, null, hsla[ 3 ] ];
+       }
+       var h = hsla[ 0 ] / 360,
+               s = hsla[ 1 ],
+               l = hsla[ 2 ],
+               a = hsla[ 3 ],
+               q = l <= 0.5 ? l * ( 1 + s ) : l + s - l * s,
+               p = 2 * l - q;
+
+       return [
+               Math.round( hue2rgb( p, q, h + ( 1 / 3 ) ) * 255 ),
+               Math.round( hue2rgb( p, q, h ) * 255 ),
+               Math.round( hue2rgb( p, q, h - ( 1 / 3 ) ) * 255 ),
+               a
+       ];
+};
+
+each( spaces, function( spaceName, space ) {
+       var props = space.props,
+               cache = space.cache,
+               to = space.to,
+               from = space.from;
+
+       // Makes rgba() and hsla()
+       color.fn[ spaceName ] = function( value ) {
+
+               // Generate a cache for this space if it doesn't exist
+               if ( to && !this[ cache ] ) {
+                       this[ cache ] = to( this._rgba );
+               }
+               if ( value === undefined ) {
+                       return this[ cache ].slice();
+               }
+
+               var ret,
+                       type = jQuery.type( value ),
+                       arr = ( type === "array" || type === "object" ) ? value : arguments,
+                       local = this[ cache ].slice();
+
+               each( props, function( key, prop ) {
+                       var val = arr[ type === "object" ? key : prop.idx ];
+                       if ( val == null ) {
+                               val = local[ prop.idx ];
+                       }
+                       local[ prop.idx ] = clamp( val, prop );
+               } );
+
+               if ( from ) {
+                       ret = color( from( local ) );
+                       ret[ cache ] = local;
+                       return ret;
+               } else {
+                       return color( local );
+               }
+       };
+
+       // Makes red() green() blue() alpha() hue() saturation() lightness()
+       each( props, function( key, prop ) {
+
+               // Alpha is included in more than one space
+               if ( color.fn[ key ] ) {
+                       return;
+               }
+               color.fn[ key ] = function( value ) {
+                       var vtype = jQuery.type( value ),
+                               fn = ( key === "alpha" ? ( this._hsla ? "hsla" : "rgba" ) : spaceName ),
+                               local = this[ fn ](),
+                               cur = local[ prop.idx ],
+                               match;
+
+                       if ( vtype === "undefined" ) {
+                               return cur;
+                       }
+
+                       if ( vtype === "function" ) {
+                               value = value.call( this, cur );
+                               vtype = jQuery.type( value );
+                       }
+                       if ( value == null && prop.empty ) {
+                               return this;
+                       }
+                       if ( vtype === "string" ) {
+                               match = rplusequals.exec( value );
+                               if ( match ) {
+                                       value = cur + parseFloat( match[ 2 ] ) * ( match[ 1 ] === "+" ? 1 : -1 );
+                               }
+                       }
+                       local[ prop.idx ] = value;
+                       return this[ fn ]( local );
+               };
+       } );
+} );
+
+// Add cssHook and .fx.step function for each named hook.
+// accept a space separated string of properties
+color.hook = function( hook ) {
+       var hooks = hook.split( " " );
+       each( hooks, function( i, hook ) {
+               jQuery.cssHooks[ hook ] = {
+                       set: function( elem, value ) {
+                               var parsed, curElem,
+                                       backgroundColor = "";
+
+                               if ( value !== "transparent" && ( jQuery.type( value ) !== "string" ||
+                                               ( parsed = stringParse( value ) ) ) ) {
+                                       value = color( parsed || value );
+                                       if ( !support.rgba && value._rgba[ 3 ] !== 1 ) {
+                                               curElem = hook === "backgroundColor" ? elem.parentNode : elem;
+                                               while (
+                                                       ( backgroundColor === "" || backgroundColor === "transparent" ) &&
+                                                       curElem && curElem.style
+                                               ) {
+                                                       try {
+                                                               backgroundColor = jQuery.css( curElem, "backgroundColor" );
+                                                               curElem = curElem.parentNode;
+                                                       } catch ( e ) {
+                                                       }
+                                               }
+
+                                               value = value.blend( backgroundColor && backgroundColor !== "transparent" ?
+                                                       backgroundColor :
+                                                       "_default" );
+                                       }
+
+                                       value = value.toRgbaString();
+                               }
+                               try {
+                                       elem.style[ hook ] = value;
+                               } catch ( e ) {
+
+                                       // Wrapped to prevent IE from throwing errors on "invalid" values like
+                                       // 'auto' or 'inherit'
+                               }
+                       }
+               };
+               jQuery.fx.step[ hook ] = function( fx ) {
+                       if ( !fx.colorInit ) {
+                               fx.start = color( fx.elem, hook );
+                               fx.end = color( fx.end );
+                               fx.colorInit = true;
+                       }
+                       jQuery.cssHooks[ hook ].set( fx.elem, fx.start.transition( fx.end, fx.pos ) );
+               };
+       } );
+
+};
+
+color.hook( stepHooks );
+
+jQuery.cssHooks.borderColor = {
+       expand: function( value ) {
+               var expanded = {};
+
+               each( [ "Top", "Right", "Bottom", "Left" ], function( i, part ) {
+                       expanded[ "border" + part + "Color" ] = value;
+               } );
+               return expanded;
+       }
+};
+
+// Basic color names only.
+// Usage of any of the other color names requires adding yourself or including
+// jquery.color.svg-names.js.
+colors = jQuery.Color.names = {
+
+       // 4.1. Basic color keywords
+       aqua: "#00ffff",
+       black: "#000000",
+       blue: "#0000ff",
+       fuchsia: "#ff00ff",
+       gray: "#808080",
+       green: "#008000",
+       lime: "#00ff00",
+       maroon: "#800000",
+       navy: "#000080",
+       olive: "#808000",
+       purple: "#800080",
+       red: "#ff0000",
+       silver: "#c0c0c0",
+       teal: "#008080",
+       white: "#ffffff",
+       yellow: "#ffff00",
+
+       // 4.2.3. "transparent" color keyword
+       transparent: [ null, null, null, 0 ],
+
+       _default: "#ffffff"
+};
+
+} )( jQuery );
+
+/******************************************************************************/
+/****************************** CLASS ANIMATIONS ******************************/
+/******************************************************************************/
+( function() {
+
+var classAnimationActions = [ "add", "remove", "toggle" ],
+       shorthandStyles = {
+               border: 1,
+               borderBottom: 1,
+               borderColor: 1,
+               borderLeft: 1,
+               borderRight: 1,
+               borderTop: 1,
+               borderWidth: 1,
+               margin: 1,
+               padding: 1
+       };
+
+$.each(
+       [ "borderLeftStyle", "borderRightStyle", "borderBottomStyle", "borderTopStyle" ],
+       function( _, prop ) {
+               $.fx.step[ prop ] = function( fx ) {
+                       if ( fx.end !== "none" && !fx.setAttr || fx.pos === 1 && !fx.setAttr ) {
+                               jQuery.style( fx.elem, prop, fx.end );
+                               fx.setAttr = true;
+                       }
+               };
+       }
+);
+
+function getElementStyles( elem ) {
+       var key, len,
+               style = elem.ownerDocument.defaultView ?
+                       elem.ownerDocument.defaultView.getComputedStyle( elem, null ) :
+                       elem.currentStyle,
+               styles = {};
+
+       if ( style && style.length && style[ 0 ] && style[ style[ 0 ] ] ) {
+               len = style.length;
+               while ( len-- ) {
+                       key = style[ len ];
+                       if ( typeof style[ key ] === "string" ) {
+                               styles[ $.camelCase( key ) ] = style[ key ];
+                       }
+               }
+
+       // Support: Opera, IE <9
+       } else {
+               for ( key in style ) {
+                       if ( typeof style[ key ] === "string" ) {
+                               styles[ key ] = style[ key ];
+                       }
+               }
+       }
+
+       return styles;
+}
+
+function styleDifference( oldStyle, newStyle ) {
+       var diff = {},
+               name, value;
+
+       for ( name in newStyle ) {
+               value = newStyle[ name ];
+               if ( oldStyle[ name ] !== value ) {
+                       if ( !shorthandStyles[ name ] ) {
+                               if ( $.fx.step[ name ] || !isNaN( parseFloat( value ) ) ) {
+                                       diff[ name ] = value;
+                               }
+                       }
+               }
+       }
+
+       return diff;
+}
+
+// Support: jQuery <1.8
+if ( !$.fn.addBack ) {
+       $.fn.addBack = function( selector ) {
+               return this.add( selector == null ?
+                       this.prevObject : this.prevObject.filter( selector )
+               );
+       };
+}
+
+$.effects.animateClass = function( value, duration, easing, callback ) {
+       var o = $.speed( duration, easing, callback );
+
+       return this.queue( function() {
+               var animated = $( this ),
+                       baseClass = animated.attr( "class" ) || "",
+                       applyClassChange,
+                       allAnimations = o.children ? animated.find( "*" ).addBack() : animated;
+
+               // Map the animated objects to store the original styles.
+               allAnimations = allAnimations.map( function() {
+                       var el = $( this );
+                       return {
+                               el: el,
+                               start: getElementStyles( this )
+                       };
+               } );
+
+               // Apply class change
+               applyClassChange = function() {
+                       $.each( classAnimationActions, function( i, action ) {
+                               if ( value[ action ] ) {
+                                       animated[ action + "Class" ]( value[ action ] );
+                               }
+                       } );
+               };
+               applyClassChange();
+
+               // Map all animated objects again - calculate new styles and diff
+               allAnimations = allAnimations.map( function() {
+                       this.end = getElementStyles( this.el[ 0 ] );
+                       this.diff = styleDifference( this.start, this.end );
+                       return this;
+               } );
+
+               // Apply original class
+               animated.attr( "class", baseClass );
+
+               // Map all animated objects again - this time collecting a promise
+               allAnimations = allAnimations.map( function() {
+                       var styleInfo = this,
+                               dfd = $.Deferred(),
+                               opts = $.extend( {}, o, {
+                                       queue: false,
+                                       complete: function() {
+                                               dfd.resolve( styleInfo );
+                                       }
+                               } );
+
+                       this.el.animate( this.diff, opts );
+                       return dfd.promise();
+               } );
+
+               // Once all animations have completed:
+               $.when.apply( $, allAnimations.get() ).done( function() {
+
+                       // Set the final class
+                       applyClassChange();
+
+                       // For each animated element,
+                       // clear all css properties that were animated
+                       $.each( arguments, function() {
+                               var el = this.el;
+                               $.each( this.diff, function( key ) {
+                                       el.css( key, "" );
+                               } );
+                       } );
+
+                       // This is guarnteed to be there if you use jQuery.speed()
+                       // it also handles dequeuing the next anim...
+                       o.complete.call( animated[ 0 ] );
+               } );
+       } );
+};
+
+$.fn.extend( {
+       addClass: ( function( orig ) {
+               return function( classNames, speed, easing, callback ) {
+                       return speed ?
+                               $.effects.animateClass.call( this,
+                                       { add: classNames }, speed, easing, callback ) :
+                               orig.apply( this, arguments );
+               };
+       } )( $.fn.addClass ),
+
+       removeClass: ( function( orig ) {
+               return function( classNames, speed, easing, callback ) {
+                       return arguments.length > 1 ?
+                               $.effects.animateClass.call( this,
+                                       { remove: classNames }, speed, easing, callback ) :
+                               orig.apply( this, arguments );
+               };
+       } )( $.fn.removeClass ),
+
+       toggleClass: ( function( orig ) {
+               return function( classNames, force, speed, easing, callback ) {
+                       if ( typeof force === "boolean" || force === undefined ) {
+                               if ( !speed ) {
+
+                                       // Without speed parameter
+                                       return orig.apply( this, arguments );
+                               } else {
+                                       return $.effects.animateClass.call( this,
+                                               ( force ? { add: classNames } : { remove: classNames } ),
+                                               speed, easing, callback );
+                               }
+                       } else {
+
+                               // Without force parameter
+                               return $.effects.animateClass.call( this,
+                                       { toggle: classNames }, force, speed, easing );
+                       }
+               };
+       } )( $.fn.toggleClass ),
+
+       switchClass: function( remove, add, speed, easing, callback ) {
+               return $.effects.animateClass.call( this, {
+                       add: add,
+                       remove: remove
+               }, speed, easing, callback );
+       }
+} );
+
+} )();
+
+/******************************************************************************/
+/*********************************** EFFECTS **********************************/
+/******************************************************************************/
+
+( function() {
+
+if ( $.expr && $.expr.filters && $.expr.filters.animated ) {
+       $.expr.filters.animated = ( function( orig ) {
+               return function( elem ) {
+                       return !!$( elem ).data( dataSpaceAnimated ) || orig( elem );
+               };
+       } )( $.expr.filters.animated );
+}
+
+if ( $.uiBackCompat !== false ) {
+       $.extend( $.effects, {
+
+               // Saves a set of properties in a data storage
+               save: function( element, set ) {
+                       var i = 0, length = set.length;
+                       for ( ; i < length; i++ ) {
+                               if ( set[ i ] !== null ) {
+                                       element.data( dataSpace + set[ i ], element[ 0 ].style[ set[ i ] ] );
+                               }
+                       }
+               },
+
+               // Restores a set of previously saved properties from a data storage
+               restore: function( element, set ) {
+                       var val, i = 0, length = set.length;
+                       for ( ; i < length; i++ ) {
+                               if ( set[ i ] !== null ) {
+                                       val = element.data( dataSpace + set[ i ] );
+                                       element.css( set[ i ], val );
+                               }
+                       }
+               },
+
+               setMode: function( el, mode ) {
+                       if ( mode === "toggle" ) {
+                               mode = el.is( ":hidden" ) ? "show" : "hide";
+                       }
+                       return mode;
+               },
+
+               // Wraps the element around a wrapper that copies position properties
+               createWrapper: function( element ) {
+
+                       // If the element is already wrapped, return it
+                       if ( element.parent().is( ".ui-effects-wrapper" ) ) {
+                               return element.parent();
+                       }
+
+                       // Wrap the element
+                       var props = {
+                                       width: element.outerWidth( true ),
+                                       height: element.outerHeight( true ),
+                                       "float": element.css( "float" )
+                               },
+                               wrapper = $( "<div></div>" )
+                                       .addClass( "ui-effects-wrapper" )
+                                       .css( {
+                                               fontSize: "100%",
+                                               background: "transparent",
+                                               border: "none",
+                                               margin: 0,
+                                               padding: 0
+                                       } ),
+
+                               // Store the size in case width/height are defined in % - Fixes #5245
+                               size = {
+                                       width: element.width(),
+                                       height: element.height()
+                               },
+                               active = document.activeElement;
+
+                       // Support: Firefox
+                       // Firefox incorrectly exposes anonymous content
+                       // https://bugzilla.mozilla.org/show_bug.cgi?id=561664
+                       try {
+                               active.id;
+                       } catch ( e ) {
+                               active = document.body;
+                       }
+
+                       element.wrap( wrapper );
+
+                       // Fixes #7595 - Elements lose focus when wrapped.
+                       if ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) {
+                               $( active ).trigger( "focus" );
+                       }
+
+                       // Hotfix for jQuery 1.4 since some change in wrap() seems to actually
+                       // lose the reference to the wrapped element
+                       wrapper = element.parent();
+
+                       // Transfer positioning properties to the wrapper
+                       if ( element.css( "position" ) === "static" ) {
+                               wrapper.css( { position: "relative" } );
+                               element.css( { position: "relative" } );
+                       } else {
+                               $.extend( props, {
+                                       position: element.css( "position" ),
+                                       zIndex: element.css( "z-index" )
+                               } );
+                               $.each( [ "top", "left", "bottom", "right" ], function( i, pos ) {
+                                       props[ pos ] = element.css( pos );
+                                       if ( isNaN( parseInt( props[ pos ], 10 ) ) ) {
+                                               props[ pos ] = "auto";
+                                       }
+                               } );
+                               element.css( {
+                                       position: "relative",
+                                       top: 0,
+                                       left: 0,
+                                       right: "auto",
+                                       bottom: "auto"
+                               } );
+                       }
+                       element.css( size );
+
+                       return wrapper.css( props ).show();
+               },
+
+               removeWrapper: function( element ) {
+                       var active = document.activeElement;
+
+                       if ( element.parent().is( ".ui-effects-wrapper" ) ) {
+                               element.parent().replaceWith( element );
+
+                               // Fixes #7595 - Elements lose focus when wrapped.
+                               if ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) {
+                                       $( active ).trigger( "focus" );
+                               }
+                       }
+
+                       return element;
+               }
+       } );
+}
+
+$.extend( $.effects, {
+       version: "1.12.1",
+
+       define: function( name, mode, effect ) {
+               if ( !effect ) {
+                       effect = mode;
+                       mode = "effect";
+               }
+
+               $.effects.effect[ name ] = effect;
+               $.effects.effect[ name ].mode = mode;
+
+               return effect;
+       },
+
+       scaledDimensions: function( element, percent, direction ) {
+               if ( percent === 0 ) {
+                       return {
+                               height: 0,
+                               width: 0,
+                               outerHeight: 0,
+                               outerWidth: 0
+                       };
+               }
+
+               var x = direction !== "horizontal" ? ( ( percent || 100 ) / 100 ) : 1,
+                       y = direction !== "vertical" ? ( ( percent || 100 ) / 100 ) : 1;
+
+               return {
+                       height: element.height() * y,
+                       width: element.width() * x,
+                       outerHeight: element.outerHeight() * y,
+                       outerWidth: element.outerWidth() * x
+               };
+
+       },
+
+       clipToBox: function( animation ) {
+               return {
+                       width: animation.clip.right - animation.clip.left,
+                       height: animation.clip.bottom - animation.clip.top,
+                       left: animation.clip.left,
+                       top: animation.clip.top
+               };
+       },
+
+       // Injects recently queued functions to be first in line (after "inprogress")
+       unshift: function( element, queueLength, count ) {
+               var queue = element.queue();
+
+               if ( queueLength > 1 ) {
+                       queue.splice.apply( queue,
+                               [ 1, 0 ].concat( queue.splice( queueLength, count ) ) );
+               }
+               element.dequeue();
+       },
+
+       saveStyle: function( element ) {
+               element.data( dataSpaceStyle, element[ 0 ].style.cssText );
+       },
+
+       restoreStyle: function( element ) {
+               element[ 0 ].style.cssText = element.data( dataSpaceStyle ) || "";
+               element.removeData( dataSpaceStyle );
+       },
+
+       mode: function( element, mode ) {
+               var hidden = element.is( ":hidden" );
+
+               if ( mode === "toggle" ) {
+                       mode = hidden ? "show" : "hide";
+               }
+               if ( hidden ? mode === "hide" : mode === "show" ) {
+                       mode = "none";
+               }
+               return mode;
+       },
+
+       // Translates a [top,left] array into a baseline value
+       getBaseline: function( origin, original ) {
+               var y, x;
+
+               switch ( origin[ 0 ] ) {
+               case "top":
+                       y = 0;
+                       break;
+               case "middle":
+                       y = 0.5;
+                       break;
+               case "bottom":
+                       y = 1;
+                       break;
+               default:
+                       y = origin[ 0 ] / original.height;
+               }
+
+               switch ( origin[ 1 ] ) {
+               case "left":
+                       x = 0;
+                       break;
+               case "center":
+                       x = 0.5;
+                       break;
+               case "right":
+                       x = 1;
+                       break;
+               default:
+                       x = origin[ 1 ] / original.width;
+               }
+
+               return {
+                       x: x,
+                       y: y
+               };
+       },
+
+       // Creates a placeholder element so that the original element can be made absolute
+       createPlaceholder: function( element ) {
+               var placeholder,
+                       cssPosition = element.css( "position" ),
+                       position = element.position();
+
+               // Lock in margins first to account for form elements, which
+               // will change margin if you explicitly set height
+               // see: http://jsfiddle.net/JZSMt/3/ https://bugs.webkit.org/show_bug.cgi?id=107380
+               // Support: Safari
+               element.css( {
+                       marginTop: element.css( "marginTop" ),
+                       marginBottom: element.css( "marginBottom" ),
+                       marginLeft: element.css( "marginLeft" ),
+                       marginRight: element.css( "marginRight" )
+               } )
+               .outerWidth( element.outerWidth() )
+               .outerHeight( element.outerHeight() );
+
+               if ( /^(static|relative)/.test( cssPosition ) ) {
+                       cssPosition = "absolute";
+
+                       placeholder = $( "<" + element[ 0 ].nodeName + ">" ).insertAfter( element ).css( {
+
+                               // Convert inline to inline block to account for inline elements
+                               // that turn to inline block based on content (like img)
+                               display: /^(inline|ruby)/.test( element.css( "display" ) ) ?
+                                       "inline-block" :
+                                       "block",
+                               visibility: "hidden",
+
+                               // Margins need to be set to account for margin collapse
+                               marginTop: element.css( "marginTop" ),
+                               marginBottom: element.css( "marginBottom" ),
+                               marginLeft: element.css( "marginLeft" ),
+                               marginRight: element.css( "marginRight" ),
+                               "float": element.css( "float" )
+                       } )
+                       .outerWidth( element.outerWidth() )
+                       .outerHeight( element.outerHeight() )
+                       .addClass( "ui-effects-placeholder" );
+
+                       element.data( dataSpace + "placeholder", placeholder );
+               }
+
+               element.css( {
+                       position: cssPosition,
+                       left: position.left,
+                       top: position.top
+               } );
+
+               return placeholder;
+       },
+
+       removePlaceholder: function( element ) {
+               var dataKey = dataSpace + "placeholder",
+                               placeholder = element.data( dataKey );
+
+               if ( placeholder ) {
+                       placeholder.remove();
+                       element.removeData( dataKey );
+               }
+       },
+
+       // Removes a placeholder if it exists and restores
+       // properties that were modified during placeholder creation
+       cleanUp: function( element ) {
+               $.effects.restoreStyle( element );
+               $.effects.removePlaceholder( element );
+       },
+
+       setTransition: function( element, list, factor, value ) {
+               value = value || {};
+               $.each( list, function( i, x ) {
+                       var unit = element.cssUnit( x );
+                       if ( unit[ 0 ] > 0 ) {
+                               value[ x ] = unit[ 0 ] * factor + unit[ 1 ];
+                       }
+               } );
+               return value;
+       }
+} );
+
+// Return an effect options object for the given parameters:
+function _normalizeArguments( effect, options, speed, callback ) {
+
+       // Allow passing all options as the first parameter
+       if ( $.isPlainObject( effect ) ) {
+               options = effect;
+               effect = effect.effect;
+       }
+
+       // Convert to an object
+       effect = { effect: effect };
+
+       // Catch (effect, null, ...)
+       if ( options == null ) {
+               options = {};
+       }
+
+       // Catch (effect, callback)
+       if ( $.isFunction( options ) ) {
+               callback = options;
+               speed = null;
+               options = {};
+       }
+
+       // Catch (effect, speed, ?)
+       if ( typeof options === "number" || $.fx.speeds[ options ] ) {
+               callback = speed;
+               speed = options;
+               options = {};
+       }
+
+       // Catch (effect, options, callback)
+       if ( $.isFunction( speed ) ) {
+               callback = speed;
+               speed = null;
+       }
+
+       // Add options to effect
+       if ( options ) {
+               $.extend( effect, options );
+       }
+
+       speed = speed || options.duration;
+       effect.duration = $.fx.off ? 0 :
+               typeof speed === "number" ? speed :
+               speed in $.fx.speeds ? $.fx.speeds[ speed ] :
+               $.fx.speeds._default;
+
+       effect.complete = callback || options.complete;
+
+       return effect;
+}
+
+function standardAnimationOption( option ) {
+
+       // Valid standard speeds (nothing, number, named speed)
+       if ( !option || typeof option === "number" || $.fx.speeds[ option ] ) {
+               return true;
+       }
+
+       // Invalid strings - treat as "normal" speed
+       if ( typeof option === "string" && !$.effects.effect[ option ] ) {
+               return true;
+       }
+
+       // Complete callback
+       if ( $.isFunction( option ) ) {
+               return true;
+       }
+
+       // Options hash (but not naming an effect)
+       if ( typeof option === "object" && !option.effect ) {
+               return true;
+       }
+
+       // Didn't match any standard API
+       return false;
+}
+
+$.fn.extend( {
+       effect: function( /* effect, options, speed, callback */ ) {
+               var args = _normalizeArguments.apply( this, arguments ),
+                       effectMethod = $.effects.effect[ args.effect ],
+                       defaultMode = effectMethod.mode,
+                       queue = args.queue,
+                       queueName = queue || "fx",
+                       complete = args.complete,
+                       mode = args.mode,
+                       modes = [],
+                       prefilter = function( next ) {
+                               var el = $( this ),
+                                       normalizedMode = $.effects.mode( el, mode ) || defaultMode;
+
+                               // Sentinel for duck-punching the :animated psuedo-selector
+                               el.data( dataSpaceAnimated, true );
+
+                               // Save effect mode for later use,
+                               // we can't just call $.effects.mode again later,
+                               // as the .show() below destroys the initial state
+                               modes.push( normalizedMode );
+
+                               // See $.uiBackCompat inside of run() for removal of defaultMode in 1.13
+                               if ( defaultMode && ( normalizedMode === "show" ||
+                                               ( normalizedMode === defaultMode && normalizedMode === "hide" ) ) ) {
+                                       el.show();
+                               }
+
+                               if ( !defaultMode || normalizedMode !== "none" ) {
+                                       $.effects.saveStyle( el );
+                               }
+
+                               if ( $.isFunction( next ) ) {
+                                       next();
+                               }
+                       };
+
+               if ( $.fx.off || !effectMethod ) {
+
+                       // Delegate to the original method (e.g., .show()) if possible
+                       if ( mode ) {
+                               return this[ mode ]( args.duration, complete );
+                       } else {
+                               return this.each( function() {
+                                       if ( complete ) {
+                                               complete.call( this );
+                                       }
+                               } );
+                       }
+               }
+
+               function run( next ) {
+                       var elem = $( this );
+
+                       function cleanup() {
+                               elem.removeData( dataSpaceAnimated );
+
+                               $.effects.cleanUp( elem );
+
+                               if ( args.mode === "hide" ) {
+                                       elem.hide();
+                               }
+
+                               done();
+                       }
+
+                       function done() {
+                               if ( $.isFunction( complete ) ) {
+                                       complete.call( elem[ 0 ] );
+                               }
+
+                               if ( $.isFunction( next ) ) {
+                                       next();
+                               }
+                       }
+
+                       // Override mode option on a per element basis,
+                       // as toggle can be either show or hide depending on element state
+                       args.mode = modes.shift();
+
+                       if ( $.uiBackCompat !== false && !defaultMode ) {
+                               if ( elem.is( ":hidden" ) ? mode === "hide" : mode === "show" ) {
+
+                                       // Call the core method to track "olddisplay" properly
+                                       elem[ mode ]();
+                                       done();
+                               } else {
+                                       effectMethod.call( elem[ 0 ], args, done );
+                               }
+                       } else {
+                               if ( args.mode === "none" ) {
+
+                                       // Call the core method to track "olddisplay" properly
+                                       elem[ mode ]();
+                                       done();
+                               } else {
+                                       effectMethod.call( elem[ 0 ], args, cleanup );
+                               }
+                       }
+               }
+
+               // Run prefilter on all elements first to ensure that
+               // any showing or hiding happens before placeholder creation,
+               // which ensures that any layout changes are correctly captured.
+               return queue === false ?
+                       this.each( prefilter ).each( run ) :
+                       this.queue( queueName, prefilter ).queue( queueName, run );
+       },
+
+       show: ( function( orig ) {
+               return function( option ) {
+                       if ( standardAnimationOption( option ) ) {
+                               return orig.apply( this, arguments );
+                       } else {
+                               var args = _normalizeArguments.apply( this, arguments );
+                               args.mode = "show";
+                               return this.effect.call( this, args );
+                       }
+               };
+       } )( $.fn.show ),
+
+       hide: ( function( orig ) {
+               return function( option ) {
+                       if ( standardAnimationOption( option ) ) {
+                               return orig.apply( this, arguments );
+                       } else {
+                               var args = _normalizeArguments.apply( this, arguments );
+                               args.mode = "hide";
+                               return this.effect.call( this, args );
+                       }
+               };
+       } )( $.fn.hide ),
+
+       toggle: ( function( orig ) {
+               return function( option ) {
+                       if ( standardAnimationOption( option ) || typeof option === "boolean" ) {
+                               return orig.apply( this, arguments );
+                       } else {
+                               var args = _normalizeArguments.apply( this, arguments );
+                               args.mode = "toggle";
+                               return this.effect.call( this, args );
+                       }
+               };
+       } )( $.fn.toggle ),
+
+       cssUnit: function( key ) {
+               var style = this.css( key ),
+                       val = [];
+
+               $.each( [ "em", "px", "%", "pt" ], function( i, unit ) {
+                       if ( style.indexOf( unit ) > 0 ) {
+                               val = [ parseFloat( style ), unit ];
+                       }
+               } );
+               return val;
+       },
+
+       cssClip: function( clipObj ) {
+               if ( clipObj ) {
+                       return this.css( "clip", "rect(" + clipObj.top + "px " + clipObj.right + "px " +
+                               clipObj.bottom + "px " + clipObj.left + "px)" );
+               }
+               return parseClip( this.css( "clip" ), this );
+       },
+
+       transfer: function( options, done ) {
+               var element = $( this ),
+                       target = $( options.to ),
+                       targetFixed = target.css( "position" ) === "fixed",
+                       body = $( "body" ),
+                       fixTop = targetFixed ? body.scrollTop() : 0,
+                       fixLeft = targetFixed ? body.scrollLeft() : 0,
+                       endPosition = target.offset(),
+                       animation = {
+                               top: endPosition.top - fixTop,
+                               left: endPosition.left - fixLeft,
+                               height: target.innerHeight(),
+                               width: target.innerWidth()
+                       },
+                       startPosition = element.offset(),
+                       transfer = $( "<div class='ui-effects-transfer'></div>" )
+                               .appendTo( "body" )
+                               .addClass( options.className )
+                               .css( {
+                                       top: startPosition.top - fixTop,
+                                       left: startPosition.left - fixLeft,
+                                       height: element.innerHeight(),
+                                       width: element.innerWidth(),
+                                       position: targetFixed ? "fixed" : "absolute"
+                               } )
+                               .animate( animation, options.duration, options.easing, function() {
+                                       transfer.remove();
+                                       if ( $.isFunction( done ) ) {
+                                               done();
+                                       }
+                               } );
+       }
+} );
+
+function parseClip( str, element ) {
+               var outerWidth = element.outerWidth(),
+                       outerHeight = element.outerHeight(),
+                       clipRegex = /^rect\((-?\d*\.?\d*px|-?\d+%|auto),?\s*(-?\d*\.?\d*px|-?\d+%|auto),?\s*(-?\d*\.?\d*px|-?\d+%|auto),?\s*(-?\d*\.?\d*px|-?\d+%|auto)\)$/,
+                       values = clipRegex.exec( str ) || [ "", 0, outerWidth, outerHeight, 0 ];
+
+               return {
+                       top: parseFloat( values[ 1 ] ) || 0,
+                       right: values[ 2 ] === "auto" ? outerWidth : parseFloat( values[ 2 ] ),
+                       bottom: values[ 3 ] === "auto" ? outerHeight : parseFloat( values[ 3 ] ),
+                       left: parseFloat( values[ 4 ] ) || 0
+               };
+}
+
+$.fx.step.clip = function( fx ) {
+       if ( !fx.clipInit ) {
+               fx.start = $( fx.elem ).cssClip();
+               if ( typeof fx.end === "string" ) {
+                       fx.end = parseClip( fx.end, fx.elem );
+               }
+               fx.clipInit = true;
+       }
+
+       $( fx.elem ).cssClip( {
+               top: fx.pos * ( fx.end.top - fx.start.top ) + fx.start.top,
+               right: fx.pos * ( fx.end.right - fx.start.right ) + fx.start.right,
+               bottom: fx.pos * ( fx.end.bottom - fx.start.bottom ) + fx.start.bottom,
+               left: fx.pos * ( fx.end.left - fx.start.left ) + fx.start.left
+       } );
+};
+
+} )();
+
+/******************************************************************************/
+/*********************************** EASING ***********************************/
+/******************************************************************************/
+
+( function() {
+
+// Based on easing equations from Robert Penner (http://www.robertpenner.com/easing)
+
+var baseEasings = {};
+
+$.each( [ "Quad", "Cubic", "Quart", "Quint", "Expo" ], function( i, name ) {
+       baseEasings[ name ] = function( p ) {
+               return Math.pow( p, i + 2 );
+       };
+} );
+
+$.extend( baseEasings, {
+       Sine: function( p ) {
+               return 1 - Math.cos( p * Math.PI / 2 );
+       },
+       Circ: function( p ) {
+               return 1 - Math.sqrt( 1 - p * p );
+       },
+       Elastic: function( p ) {
+               return p === 0 || p === 1 ? p :
+                       -Math.pow( 2, 8 * ( p - 1 ) ) * Math.sin( ( ( p - 1 ) * 80 - 7.5 ) * Math.PI / 15 );
+       },
+       Back: function( p ) {
+               return p * p * ( 3 * p - 2 );
+       },
+       Bounce: function( p ) {
+               var pow2,
+                       bounce = 4;
+
+               while ( p < ( ( pow2 = Math.pow( 2, --bounce ) ) - 1 ) / 11 ) {}
+               return 1 / Math.pow( 4, 3 - bounce ) - 7.5625 * Math.pow( ( pow2 * 3 - 2 ) / 22 - p, 2 );
+       }
+} );
+
+$.each( baseEasings, function( name, easeIn ) {
+       $.easing[ "easeIn" + name ] = easeIn;
+       $.easing[ "easeOut" + name ] = function( p ) {
+               return 1 - easeIn( 1 - p );
+       };
+       $.easing[ "easeInOut" + name ] = function( p ) {
+               return p < 0.5 ?
+                       easeIn( p * 2 ) / 2 :
+                       1 - easeIn( p * -2 + 2 ) / 2;
+       };
+} );
+
+} )();
+
+var effect = $.effects;
+
+
+/*!
+ * jQuery UI Effects Blind 1.12.1
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ */
+
+//>>label: Blind Effect
+//>>group: Effects
+//>>description: Blinds the element.
+//>>docs: http://api.jqueryui.com/blind-effect/
+//>>demos: http://jqueryui.com/effect/
+
+
+
+var effectsEffectBlind = $.effects.define( "blind", "hide", function( options, done ) {
+       var map = {
+                       up: [ "bottom", "top" ],
+                       vertical: [ "bottom", "top" ],
+                       down: [ "top", "bottom" ],
+                       left: [ "right", "left" ],
+                       horizontal: [ "right", "left" ],
+                       right: [ "left", "right" ]
+               },
+               element = $( this ),
+               direction = options.direction || "up",
+               start = element.cssClip(),
+               animate = { clip: $.extend( {}, start ) },
+               placeholder = $.effects.createPlaceholder( element );
+
+       animate.clip[ map[ direction ][ 0 ] ] = animate.clip[ map[ direction ][ 1 ] ];
+
+       if ( options.mode === "show" ) {
+               element.cssClip( animate.clip );
+               if ( placeholder ) {
+                       placeholder.css( $.effects.clipToBox( animate ) );
+               }
+
+               animate.clip = start;
+       }
+
+       if ( placeholder ) {
+               placeholder.animate( $.effects.clipToBox( animate ), options.duration, options.easing );
+       }
+
+       element.animate( animate, {
+               queue: false,
+               duration: options.duration,
+               easing: options.easing,
+               complete: done
+       } );
+} );
+
+
+/*!
+ * jQuery UI Effects Bounce 1.12.1
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ */
+
+//>>label: Bounce Effect
+//>>group: Effects
+//>>description: Bounces an element horizontally or vertically n times.
+//>>docs: http://api.jqueryui.com/bounce-effect/
+//>>demos: http://jqueryui.com/effect/
+
+
+
+var effectsEffectBounce = $.effects.define( "bounce", function( options, done ) {
+       var upAnim, downAnim, refValue,
+               element = $( this ),
+
+               // Defaults:
+               mode = options.mode,
+               hide = mode === "hide",
+               show = mode === "show",
+               direction = options.direction || "up",
+               distance = options.distance,
+               times = options.times || 5,
+
+               // Number of internal animations
+               anims = times * 2 + ( show || hide ? 1 : 0 ),
+               speed = options.duration / anims,
+               easing = options.easing,
+
+               // Utility:
+               ref = ( direction === "up" || direction === "down" ) ? "top" : "left",
+               motion = ( direction === "up" || direction === "left" ),
+               i = 0,
+
+               queuelen = element.queue().length;
+
+       $.effects.createPlaceholder( element );
+
+       refValue = element.css( ref );
+
+       // Default distance for the BIGGEST bounce is the outer Distance / 3
+       if ( !distance ) {
+               distance = element[ ref === "top" ? "outerHeight" : "outerWidth" ]() / 3;
+       }
+
+       if ( show ) {
+               downAnim = { opacity: 1 };
+               downAnim[ ref ] = refValue;
+
+               // If we are showing, force opacity 0 and set the initial position
+               // then do the "first" animation
+               element
+                       .css( "opacity", 0 )
+                       .css( ref, motion ? -distance * 2 : distance * 2 )
+                       .animate( downAnim, speed, easing );
+       }
+
+       // Start at the smallest distance if we are hiding
+       if ( hide ) {
+               distance = distance / Math.pow( 2, times - 1 );
+       }
+
+       downAnim = {};
+       downAnim[ ref ] = refValue;
+
+       // Bounces up/down/left/right then back to 0 -- times * 2 animations happen here
+       for ( ; i < times; i++ ) {
+               upAnim = {};
+               upAnim[ ref ] = ( motion ? "-=" : "+=" ) + distance;
+
+               element
+                       .animate( upAnim, speed, easing )
+                       .animate( downAnim, speed, easing );
+
+               distance = hide ? distance * 2 : distance / 2;
+       }
+
+       // Last Bounce when Hiding
+       if ( hide ) {
+               upAnim = { opacity: 0 };
+               upAnim[ ref ] = ( motion ? "-=" : "+=" ) + distance;
+
+               element.animate( upAnim, speed, easing );
+       }
+
+       element.queue( done );
+
+       $.effects.unshift( element, queuelen, anims + 1 );
+} );
+
+
+/*!
+ * jQuery UI Effects Clip 1.12.1
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ */
+
+//>>label: Clip Effect
+//>>group: Effects
+//>>description: Clips the element on and off like an old TV.
+//>>docs: http://api.jqueryui.com/clip-effect/
+//>>demos: http://jqueryui.com/effect/
+
+
+
+var effectsEffectClip = $.effects.define( "clip", "hide", function( options, done ) {
+       var start,
+               animate = {},
+               element = $( this ),
+               direction = options.direction || "vertical",
+               both = direction === "both",
+               horizontal = both || direction === "horizontal",
+               vertical = both || direction === "vertical";
+
+       start = element.cssClip();
+       animate.clip = {
+               top: vertical ? ( start.bottom - start.top ) / 2 : start.top,
+               right: horizontal ? ( start.right - start.left ) / 2 : start.right,
+               bottom: vertical ? ( start.bottom - start.top ) / 2 : start.bottom,
+               left: horizontal ? ( start.right - start.left ) / 2 : start.left
+       };
+
+       $.effects.createPlaceholder( element );
+
+       if ( options.mode === "show" ) {
+               element.cssClip( animate.clip );
+               animate.clip = start;
+       }
+
+       element.animate( animate, {
+               queue: false,
+               duration: options.duration,
+               easing: options.easing,
+               complete: done
+       } );
+
+} );
+
+
+/*!
+ * jQuery UI Effects Drop 1.12.1
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ */
+
+//>>label: Drop Effect
+//>>group: Effects
+//>>description: Moves an element in one direction and hides it at the same time.
+//>>docs: http://api.jqueryui.com/drop-effect/
+//>>demos: http://jqueryui.com/effect/
+
+
+
+var effectsEffectDrop = $.effects.define( "drop", "hide", function( options, done ) {
+
+       var distance,
+               element = $( this ),
+               mode = options.mode,
+               show = mode === "show",
+               direction = options.direction || "left",
+               ref = ( direction === "up" || direction === "down" ) ? "top" : "left",
+               motion = ( direction === "up" || direction === "left" ) ? "-=" : "+=",
+               oppositeMotion = ( motion === "+=" ) ? "-=" : "+=",
+               animation = {
+                       opacity: 0
+               };
+
+       $.effects.createPlaceholder( element );
+
+       distance = options.distance ||
+               element[ ref === "top" ? "outerHeight" : "outerWidth" ]( true ) / 2;
+
+       animation[ ref ] = motion + distance;
+
+       if ( show ) {
+               element.css( animation );
+
+               animation[ ref ] = oppositeMotion + distance;
+               animation.opacity = 1;
+       }
+
+       // Animate
+       element.animate( animation, {
+               queue: false,
+               duration: options.duration,
+               easing: options.easing,
+               complete: done
+       } );
+} );
+
+
+/*!
+ * jQuery UI Effects Explode 1.12.1
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ */
+
+//>>label: Explode Effect
+//>>group: Effects
+// jscs:disable maximumLineLength
+//>>description: Explodes an element in all directions into n pieces. Implodes an element to its original wholeness.
+// jscs:enable maximumLineLength
+//>>docs: http://api.jqueryui.com/explode-effect/
+//>>demos: http://jqueryui.com/effect/
+
+
+
+var effectsEffectExplode = $.effects.define( "explode", "hide", function( options, done ) {
+
+       var i, j, left, top, mx, my,
+               rows = options.pieces ? Math.round( Math.sqrt( options.pieces ) ) : 3,
+               cells = rows,
+               element = $( this ),
+               mode = options.mode,
+               show = mode === "show",
+
+               // Show and then visibility:hidden the element before calculating offset
+               offset = element.show().css( "visibility", "hidden" ).offset(),
+
+               // Width and height of a piece
+               width = Math.ceil( element.outerWidth() / cells ),
+               height = Math.ceil( element.outerHeight() / rows ),
+               pieces = [];
+
+       // Children animate complete:
+       function childComplete() {
+               pieces.push( this );
+               if ( pieces.length === rows * cells ) {
+                       animComplete();
+               }
+       }
+
+       // Clone the element for each row and cell.
+       for ( i = 0; i < rows; i++ ) { // ===>
+               top = offset.top + i * height;
+               my = i - ( rows - 1 ) / 2;
+
+               for ( j = 0; j < cells; j++ ) { // |||
+                       left = offset.left + j * width;
+                       mx = j - ( cells - 1 ) / 2;
+
+                       // Create a clone of the now hidden main element that will be absolute positioned
+                       // within a wrapper div off the -left and -top equal to size of our pieces
+                       element
+                               .clone()
+                               .appendTo( "body" )
+                               .wrap( "<div></div>" )
+                               .css( {
+                                       position: "absolute",
+                                       visibility: "visible",
+                                       left: -j * width,
+                                       top: -i * height
+                               } )
+
+                               // Select the wrapper - make it overflow: hidden and absolute positioned based on
+                               // where the original was located +left and +top equal to the size of pieces
+                               .parent()
+                                       .addClass( "ui-effects-explode" )
+                                       .css( {
+                                               position: "absolute",
+                                               overflow: "hidden",
+                                               width: width,
+                                               height: height,
+                                               left: left + ( show ? mx * width : 0 ),
+                                               top: top + ( show ? my * height : 0 ),
+                                               opacity: show ? 0 : 1
+                                       } )
+                                       .animate( {
+                                               left: left + ( show ? 0 : mx * width ),
+                                               top: top + ( show ? 0 : my * height ),
+                                               opacity: show ? 1 : 0
+                                       }, options.duration || 500, options.easing, childComplete );
+               }
+       }
+
+       function animComplete() {
+               element.css( {
+                       visibility: "visible"
+               } );
+               $( pieces ).remove();
+               done();
+       }
+} );
+
+
+/*!
+ * jQuery UI Effects Fade 1.12.1
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ */
+
+//>>label: Fade Effect
+//>>group: Effects
+//>>description: Fades the element.
+//>>docs: http://api.jqueryui.com/fade-effect/
+//>>demos: http://jqueryui.com/effect/
+
+
+
+var effectsEffectFade = $.effects.define( "fade", "toggle", function( options, done ) {
+       var show = options.mode === "show";
+
+       $( this )
+               .css( "opacity", show ? 0 : 1 )
+               .animate( {
+                       opacity: show ? 1 : 0
+               }, {
+                       queue: false,
+                       duration: options.duration,
+                       easing: options.easing,
+                       complete: done
+               } );
+} );
+
+
+/*!
+ * jQuery UI Effects Fold 1.12.1
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ */
+
+//>>label: Fold Effect
+//>>group: Effects
+//>>description: Folds an element first horizontally and then vertically.
+//>>docs: http://api.jqueryui.com/fold-effect/
+//>>demos: http://jqueryui.com/effect/
+
+
+
+var effectsEffectFold = $.effects.define( "fold", "hide", function( options, done ) {
+
+       // Create element
+       var element = $( this ),
+               mode = options.mode,
+               show = mode === "show",
+               hide = mode === "hide",
+               size = options.size || 15,
+               percent = /([0-9]+)%/.exec( size ),
+               horizFirst = !!options.horizFirst,
+               ref = horizFirst ? [ "right", "bottom" ] : [ "bottom", "right" ],
+               duration = options.duration / 2,
+
+               placeholder = $.effects.createPlaceholder( element ),
+
+               start = element.cssClip(),
+               animation1 = { clip: $.extend( {}, start ) },
+               animation2 = { clip: $.extend( {}, start ) },
+
+               distance = [ start[ ref[ 0 ] ], start[ ref[ 1 ] ] ],
+
+               queuelen = element.queue().length;
+
+       if ( percent ) {
+               size = parseInt( percent[ 1 ], 10 ) / 100 * distance[ hide ? 0 : 1 ];
+       }
+       animation1.clip[ ref[ 0 ] ] = size;
+       animation2.clip[ ref[ 0 ] ] = size;
+       animation2.clip[ ref[ 1 ] ] = 0;
+
+       if ( show ) {
+               element.cssClip( animation2.clip );
+               if ( placeholder ) {
+                       placeholder.css( $.effects.clipToBox( animation2 ) );
+               }
+
+               animation2.clip = start;
+       }
+
+       // Animate
+       element
+               .queue( function( next ) {
+                       if ( placeholder ) {
+                               placeholder
+                                       .animate( $.effects.clipToBox( animation1 ), duration, options.easing )
+                                       .animate( $.effects.clipToBox( animation2 ), duration, options.easing );
+                       }
+
+                       next();
+               } )
+               .animate( animation1, duration, options.easing )
+               .animate( animation2, duration, options.easing )
+               .queue( done );
+
+       $.effects.unshift( element, queuelen, 4 );
+} );
+
+
+/*!
+ * jQuery UI Effects Highlight 1.12.1
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ */
+
+//>>label: Highlight Effect
+//>>group: Effects
+//>>description: Highlights the background of an element in a defined color for a custom duration.
+//>>docs: http://api.jqueryui.com/highlight-effect/
+//>>demos: http://jqueryui.com/effect/
+
+
+
+var effectsEffectHighlight = $.effects.define( "highlight", "show", function( options, done ) {
+       var element = $( this ),
+               animation = {
+                       backgroundColor: element.css( "backgroundColor" )
+               };
+
+       if ( options.mode === "hide" ) {
+               animation.opacity = 0;
+       }
+
+       $.effects.saveStyle( element );
+
+       element
+               .css( {
+                       backgroundImage: "none",
+                       backgroundColor: options.color || "#ffff99"
+               } )
+               .animate( animation, {
+                       queue: false,
+                       duration: options.duration,
+                       easing: options.easing,
+                       complete: done
+               } );
+} );
+
+
+/*!
+ * jQuery UI Effects Size 1.12.1
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ */
+
+//>>label: Size Effect
+//>>group: Effects
+//>>description: Resize an element to a specified width and height.
+//>>docs: http://api.jqueryui.com/size-effect/
+//>>demos: http://jqueryui.com/effect/
+
+
+
+var effectsEffectSize = $.effects.define( "size", function( options, done ) {
+
+       // Create element
+       var baseline, factor, temp,
+               element = $( this ),
+
+               // Copy for children
+               cProps = [ "fontSize" ],
+               vProps = [ "borderTopWidth", "borderBottomWidth", "paddingTop", "paddingBottom" ],
+               hProps = [ "borderLeftWidth", "borderRightWidth", "paddingLeft", "paddingRight" ],
+
+               // Set options
+               mode = options.mode,
+               restore = mode !== "effect",
+               scale = options.scale || "both",
+               origin = options.origin || [ "middle", "center" ],
+               position = element.css( "position" ),
+               pos = element.position(),
+               original = $.effects.scaledDimensions( element ),
+               from = options.from || original,
+               to = options.to || $.effects.scaledDimensions( element, 0 );
+
+       $.effects.createPlaceholder( element );
+
+       if ( mode === "show" ) {
+               temp = from;
+               from = to;
+               to = temp;
+       }
+
+       // Set scaling factor
+       factor = {
+               from: {
+                       y: from.height / original.height,
+                       x: from.width / original.width
+               },
+               to: {
+                       y: to.height / original.height,
+                       x: to.width / original.width
+               }
+       };
+
+       // Scale the css box
+       if ( scale === "box" || scale === "both" ) {
+
+               // Vertical props scaling
+               if ( factor.from.y !== factor.to.y ) {
+                       from = $.effects.setTransition( element, vProps, factor.from.y, from );
+                       to = $.effects.setTransition( element, vProps, factor.to.y, to );
+               }
+
+               // Horizontal props scaling
+               if ( factor.from.x !== factor.to.x ) {
+                       from = $.effects.setTransition( element, hProps, factor.from.x, from );
+                       to = $.effects.setTransition( element, hProps, factor.to.x, to );
+               }
+       }
+
+       // Scale the content
+       if ( scale === "content" || scale === "both" ) {
+
+               // Vertical props scaling
+               if ( factor.from.y !== factor.to.y ) {
+                       from = $.effects.setTransition( element, cProps, factor.from.y, from );
+                       to = $.effects.setTransition( element, cProps, factor.to.y, to );
+               }
+       }
+
+       // Adjust the position properties based on the provided origin points
+       if ( origin ) {
+               baseline = $.effects.getBaseline( origin, original );
+               from.top = ( original.outerHeight - from.outerHeight ) * baseline.y + pos.top;
+               from.left = ( original.outerWidth - from.outerWidth ) * baseline.x + pos.left;
+               to.top = ( original.outerHeight - to.outerHeight ) * baseline.y + pos.top;
+               to.left = ( original.outerWidth - to.outerWidth ) * baseline.x + pos.left;
+       }
+       element.css( from );
+
+       // Animate the children if desired
+       if ( scale === "content" || scale === "both" ) {
+
+               vProps = vProps.concat( [ "marginTop", "marginBottom" ] ).concat( cProps );
+               hProps = hProps.concat( [ "marginLeft", "marginRight" ] );
+
+               // Only animate children with width attributes specified
+               // TODO: is this right? should we include anything with css width specified as well
+               element.find( "*[width]" ).each( function() {
+                       var child = $( this ),
+                               childOriginal = $.effects.scaledDimensions( child ),
+                               childFrom = {
+                                       height: childOriginal.height * factor.from.y,
+                                       width: childOriginal.width * factor.from.x,
+                                       outerHeight: childOriginal.outerHeight * factor.from.y,
+                                       outerWidth: childOriginal.outerWidth * factor.from.x
+                               },
+                               childTo = {
+                                       height: childOriginal.height * factor.to.y,
+                                       width: childOriginal.width * factor.to.x,
+                                       outerHeight: childOriginal.height * factor.to.y,
+                                       outerWidth: childOriginal.width * factor.to.x
+                               };
+
+                       // Vertical props scaling
+                       if ( factor.from.y !== factor.to.y ) {
+                               childFrom = $.effects.setTransition( child, vProps, factor.from.y, childFrom );
+                               childTo = $.effects.setTransition( child, vProps, factor.to.y, childTo );
+                       }
+
+                       // Horizontal props scaling
+                       if ( factor.from.x !== factor.to.x ) {
+                               childFrom = $.effects.setTransition( child, hProps, factor.from.x, childFrom );
+                               childTo = $.effects.setTransition( child, hProps, factor.to.x, childTo );
+                       }
+
+                       if ( restore ) {
+                               $.effects.saveStyle( child );
+                       }
+
+                       // Animate children
+                       child.css( childFrom );
+                       child.animate( childTo, options.duration, options.easing, function() {
+
+                               // Restore children
+                               if ( restore ) {
+                                       $.effects.restoreStyle( child );
+                               }
+                       } );
+               } );
+       }
+
+       // Animate
+       element.animate( to, {
+               queue: false,
+               duration: options.duration,
+               easing: options.easing,
+               complete: function() {
+
+                       var offset = element.offset();
+
+                       if ( to.opacity === 0 ) {
+                               element.css( "opacity", from.opacity );
+                       }
+
+                       if ( !restore ) {
+                               element
+                                       .css( "position", position === "static" ? "relative" : position )
+                                       .offset( offset );
+
+                               // Need to save style here so that automatic style restoration
+                               // doesn't restore to the original styles from before the animation.
+                               $.effects.saveStyle( element );
+                       }
+
+                       done();
+               }
+       } );
+
+} );
+
+
+/*!
+ * jQuery UI Effects Scale 1.12.1
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ */
+
+//>>label: Scale Effect
+//>>group: Effects
+//>>description: Grows or shrinks an element and its content.
+//>>docs: http://api.jqueryui.com/scale-effect/
+//>>demos: http://jqueryui.com/effect/
+
+
+
+var effectsEffectScale = $.effects.define( "scale", function( options, done ) {
+
+       // Create element
+       var el = $( this ),
+               mode = options.mode,
+               percent = parseInt( options.percent, 10 ) ||
+                       ( parseInt( options.percent, 10 ) === 0 ? 0 : ( mode !== "effect" ? 0 : 100 ) ),
+
+               newOptions = $.extend( true, {
+                       from: $.effects.scaledDimensions( el ),
+                       to: $.effects.scaledDimensions( el, percent, options.direction || "both" ),
+                       origin: options.origin || [ "middle", "center" ]
+               }, options );
+
+       // Fade option to support puff
+       if ( options.fade ) {
+               newOptions.from.opacity = 1;
+               newOptions.to.opacity = 0;
+       }
+
+       $.effects.effect.size.call( this, newOptions, done );
+} );
+
+
+/*!
+ * jQuery UI Effects Puff 1.12.1
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ */
+
+//>>label: Puff Effect
+//>>group: Effects
+//>>description: Creates a puff effect by scaling the element up and hiding it at the same time.
+//>>docs: http://api.jqueryui.com/puff-effect/
+//>>demos: http://jqueryui.com/effect/
+
+
+
+var effectsEffectPuff = $.effects.define( "puff", "hide", function( options, done ) {
+       var newOptions = $.extend( true, {}, options, {
+               fade: true,
+               percent: parseInt( options.percent, 10 ) || 150
+       } );
+
+       $.effects.effect.scale.call( this, newOptions, done );
+} );
+
+
+/*!
+ * jQuery UI Effects Pulsate 1.12.1
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ */
+
+//>>label: Pulsate Effect
+//>>group: Effects
+//>>description: Pulsates an element n times by changing the opacity to zero and back.
+//>>docs: http://api.jqueryui.com/pulsate-effect/
+//>>demos: http://jqueryui.com/effect/
+
+
+
+var effectsEffectPulsate = $.effects.define( "pulsate", "show", function( options, done ) {
+       var element = $( this ),
+               mode = options.mode,
+               show = mode === "show",
+               hide = mode === "hide",
+               showhide = show || hide,
+
+               // Showing or hiding leaves off the "last" animation
+               anims = ( ( options.times || 5 ) * 2 ) + ( showhide ? 1 : 0 ),
+               duration = options.duration / anims,
+               animateTo = 0,
+               i = 1,
+               queuelen = element.queue().length;
+
+       if ( show || !element.is( ":visible" ) ) {
+               element.css( "opacity", 0 ).show();
+               animateTo = 1;
+       }
+
+       // Anims - 1 opacity "toggles"
+       for ( ; i < anims; i++ ) {
+               element.animate( { opacity: animateTo }, duration, options.easing );
+               animateTo = 1 - animateTo;
+       }
+
+       element.animate( { opacity: animateTo }, duration, options.easing );
+
+       element.queue( done );
+
+       $.effects.unshift( element, queuelen, anims + 1 );
+} );
+
+
+/*!
+ * jQuery UI Effects Shake 1.12.1
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ */
+
+//>>label: Shake Effect
+//>>group: Effects
+//>>description: Shakes an element horizontally or vertically n times.
+//>>docs: http://api.jqueryui.com/shake-effect/
+//>>demos: http://jqueryui.com/effect/
+
+
+
+var effectsEffectShake = $.effects.define( "shake", function( options, done ) {
+
+       var i = 1,
+               element = $( this ),
+               direction = options.direction || "left",
+               distance = options.distance || 20,
+               times = options.times || 3,
+               anims = times * 2 + 1,
+               speed = Math.round( options.duration / anims ),
+               ref = ( direction === "up" || direction === "down" ) ? "top" : "left",
+               positiveMotion = ( direction === "up" || direction === "left" ),
+               animation = {},
+               animation1 = {},
+               animation2 = {},
+
+               queuelen = element.queue().length;
+
+       $.effects.createPlaceholder( element );
+
+       // Animation
+       animation[ ref ] = ( positiveMotion ? "-=" : "+=" ) + distance;
+       animation1[ ref ] = ( positiveMotion ? "+=" : "-=" ) + distance * 2;
+       animation2[ ref ] = ( positiveMotion ? "-=" : "+=" ) + distance * 2;
+
+       // Animate
+       element.animate( animation, speed, options.easing );
+
+       // Shakes
+       for ( ; i < times; i++ ) {
+               element
+                       .animate( animation1, speed, options.easing )
+                       .animate( animation2, speed, options.easing );
+       }
+
+       element
+               .animate( animation1, speed, options.easing )
+               .animate( animation, speed / 2, options.easing )
+               .queue( done );
+
+       $.effects.unshift( element, queuelen, anims + 1 );
+} );
+
+
+/*!
+ * jQuery UI Effects Slide 1.12.1
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ */
+
+//>>label: Slide Effect
+//>>group: Effects
+//>>description: Slides an element in and out of the viewport.
+//>>docs: http://api.jqueryui.com/slide-effect/
+//>>demos: http://jqueryui.com/effect/
+
+
+
+var effectsEffectSlide = $.effects.define( "slide", "show", function( options, done ) {
+       var startClip, startRef,
+               element = $( this ),
+               map = {
+                       up: [ "bottom", "top" ],
+                       down: [ "top", "bottom" ],
+                       left: [ "right", "left" ],
+                       right: [ "left", "right" ]
+               },
+               mode = options.mode,
+               direction = options.direction || "left",
+               ref = ( direction === "up" || direction === "down" ) ? "top" : "left",
+               positiveMotion = ( direction === "up" || direction === "left" ),
+               distance = options.distance ||
+                       element[ ref === "top" ? "outerHeight" : "outerWidth" ]( true ),
+               animation = {};
+
+       $.effects.createPlaceholder( element );
+
+       startClip = element.cssClip();
+       startRef = element.position()[ ref ];
+
+       // Define hide animation
+       animation[ ref ] = ( positiveMotion ? -1 : 1 ) * distance + startRef;
+       animation.clip = element.cssClip();
+       animation.clip[ map[ direction ][ 1 ] ] = animation.clip[ map[ direction ][ 0 ] ];
+
+       // Reverse the animation if we're showing
+       if ( mode === "show" ) {
+               element.cssClip( animation.clip );
+               element.css( ref, animation[ ref ] );
+               animation.clip = startClip;
+               animation[ ref ] = startRef;
+       }
+
+       // Actually animate
+       element.animate( animation, {
+               queue: false,
+               duration: options.duration,
+               easing: options.easing,
+               complete: done
+       } );
+} );
+
+
+/*!
+ * jQuery UI Effects Transfer 1.12.1
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ */
+
+//>>label: Transfer Effect
+//>>group: Effects
+//>>description: Displays a transfer effect from one element to another.
+//>>docs: http://api.jqueryui.com/transfer-effect/
+//>>demos: http://jqueryui.com/effect/
+
+
+
+var effect;
+if ( $.uiBackCompat !== false ) {
+       effect = $.effects.define( "transfer", function( options, done ) {
+               $( this ).transfer( options, done );
+       } );
+}
+var effectsEffectTransfer = effect;
+
+
+
+
+}));
\ No newline at end of file
diff --git a/htdocs/cgi-bin/wsrc/jquery-ui.structure.css b/htdocs/cgi-bin/wsrc/jquery-ui.structure.css
new file mode 100644 (file)
index 0000000..3bf8aa0
--- /dev/null
@@ -0,0 +1,886 @@
+/*!
+ * jQuery UI CSS Framework 1.12.1
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/category/theming/
+ */
+.ui-draggable-handle {
+       -ms-touch-action: none;
+       touch-action: none;
+}
+/* Layout helpers
+----------------------------------*/
+.ui-helper-hidden {
+       display: none;
+}
+.ui-helper-hidden-accessible {
+       border: 0;
+       clip: rect(0 0 0 0);
+       height: 1px;
+       margin: -1px;
+       overflow: hidden;
+       padding: 0;
+       position: absolute;
+       width: 1px;
+}
+.ui-helper-reset {
+       margin: 0;
+       padding: 0;
+       border: 0;
+       outline: 0;
+       line-height: 1.3;
+       text-decoration: none;
+       font-size: 100%;
+       list-style: none;
+}
+.ui-helper-clearfix:before,
+.ui-helper-clearfix:after {
+       content: "";
+       display: table;
+       border-collapse: collapse;
+}
+.ui-helper-clearfix:after {
+       clear: both;
+}
+.ui-helper-zfix {
+       width: 100%;
+       height: 100%;
+       top: 0;
+       left: 0;
+       position: absolute;
+       opacity: 0;
+       filter:Alpha(Opacity=0); /* support: IE8 */
+}
+
+.ui-front {
+       z-index: 100;
+}
+
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-disabled {
+       cursor: default !important;
+       pointer-events: none;
+}
+
+
+/* Icons
+----------------------------------*/
+.ui-icon {
+       display: inline-block;
+       vertical-align: middle;
+       margin-top: -.25em;
+       position: relative;
+       text-indent: -99999px;
+       overflow: hidden;
+       background-repeat: no-repeat;
+}
+
+.ui-widget-icon-block {
+       left: 50%;
+       margin-left: -8px;
+       display: block;
+}
+
+/* Misc visuals
+----------------------------------*/
+
+/* Overlays */
+.ui-widget-overlay {
+       position: fixed;
+       top: 0;
+       left: 0;
+       width: 100%;
+       height: 100%;
+}
+.ui-resizable {
+       position: relative;
+}
+.ui-resizable-handle {
+       position: absolute;
+       font-size: 0.1px;
+       display: block;
+       -ms-touch-action: none;
+       touch-action: none;
+}
+.ui-resizable-disabled .ui-resizable-handle,
+.ui-resizable-autohide .ui-resizable-handle {
+       display: none;
+}
+.ui-resizable-n {
+       cursor: n-resize;
+       height: 7px;
+       width: 100%;
+       top: -5px;
+       left: 0;
+}
+.ui-resizable-s {
+       cursor: s-resize;
+       height: 7px;
+       width: 100%;
+       bottom: -5px;
+       left: 0;
+}
+.ui-resizable-e {
+       cursor: e-resize;
+       width: 7px;
+       right: -5px;
+       top: 0;
+       height: 100%;
+}
+.ui-resizable-w {
+       cursor: w-resize;
+       width: 7px;
+       left: -5px;
+       top: 0;
+       height: 100%;
+}
+.ui-resizable-se {
+       cursor: se-resize;
+       width: 12px;
+       height: 12px;
+       right: 1px;
+       bottom: 1px;
+}
+.ui-resizable-sw {
+       cursor: sw-resize;
+       width: 9px;
+       height: 9px;
+       left: -5px;
+       bottom: -5px;
+}
+.ui-resizable-nw {
+       cursor: nw-resize;
+       width: 9px;
+       height: 9px;
+       left: -5px;
+       top: -5px;
+}
+.ui-resizable-ne {
+       cursor: ne-resize;
+       width: 9px;
+       height: 9px;
+       right: -5px;
+       top: -5px;
+}
+.ui-selectable {
+       -ms-touch-action: none;
+       touch-action: none;
+}
+.ui-selectable-helper {
+       position: absolute;
+       z-index: 100;
+       border: 1px dotted black;
+}
+.ui-sortable-handle {
+       -ms-touch-action: none;
+       touch-action: none;
+}
+.ui-accordion .ui-accordion-header {
+       display: block;
+       cursor: pointer;
+       position: relative;
+       margin: 2px 0 0 0;
+       padding: .5em .5em .5em .7em;
+       font-size: 100%;
+}
+.ui-accordion .ui-accordion-content {
+       padding: 1em 2.2em;
+       border-top: 0;
+       overflow: auto;
+}
+.ui-autocomplete {
+       position: absolute;
+       top: 0;
+       left: 0;
+       cursor: default;
+}
+.ui-menu {
+       list-style: none;
+       padding: 0;
+       margin: 0;
+       display: block;
+       outline: 0;
+}
+.ui-menu .ui-menu {
+       position: absolute;
+}
+.ui-menu .ui-menu-item {
+       margin: 0;
+       cursor: pointer;
+       /* support: IE10, see #8844 */
+       list-style-image: url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7");
+}
+.ui-menu .ui-menu-item-wrapper {
+       position: relative;
+       padding: 3px 1em 3px .4em;
+}
+.ui-menu .ui-menu-divider {
+       margin: 5px 0;
+       height: 0;
+       font-size: 0;
+       line-height: 0;
+       border-width: 1px 0 0 0;
+}
+.ui-menu .ui-state-focus,
+.ui-menu .ui-state-active {
+       margin: -1px;
+}
+
+/* icon support */
+.ui-menu-icons {
+       position: relative;
+}
+.ui-menu-icons .ui-menu-item-wrapper {
+       padding-left: 2em;
+}
+
+/* left-aligned */
+.ui-menu .ui-icon {
+       position: absolute;
+       top: 0;
+       bottom: 0;
+       left: .2em;
+       margin: auto 0;
+}
+
+/* right-aligned */
+.ui-menu .ui-menu-icon {
+       left: auto;
+       right: 0;
+}
+.ui-button {
+       padding: .4em 1em;
+       display: inline-block;
+       position: relative;
+       line-height: normal;
+       margin-right: .1em;
+       cursor: pointer;
+       vertical-align: middle;
+       text-align: center;
+       -webkit-user-select: none;
+       -moz-user-select: none;
+       -ms-user-select: none;
+       user-select: none;
+
+       /* Support: IE <= 11 */
+       overflow: visible;
+}
+
+.ui-button,
+.ui-button:link,
+.ui-button:visited,
+.ui-button:hover,
+.ui-button:active {
+       text-decoration: none;
+}
+
+/* to make room for the icon, a width needs to be set here */
+.ui-button-icon-only {
+       width: 2em;
+       box-sizing: border-box;
+       text-indent: -9999px;
+       white-space: nowrap;
+}
+
+/* no icon support for input elements */
+input.ui-button.ui-button-icon-only {
+       text-indent: 0;
+}
+
+/* button icon element(s) */
+.ui-button-icon-only .ui-icon {
+       position: absolute;
+       top: 50%;
+       left: 50%;
+       margin-top: -8px;
+       margin-left: -8px;
+}
+
+.ui-button.ui-icon-notext .ui-icon {
+       padding: 0;
+       width: 2.1em;
+       height: 2.1em;
+       text-indent: -9999px;
+       white-space: nowrap;
+
+}
+
+input.ui-button.ui-icon-notext .ui-icon {
+       width: auto;
+       height: auto;
+       text-indent: 0;
+       white-space: normal;
+       padding: .4em 1em;
+}
+
+/* workarounds */
+/* Support: Firefox 5 - 40 */
+input.ui-button::-moz-focus-inner,
+button.ui-button::-moz-focus-inner {
+       border: 0;
+       padding: 0;
+}
+.ui-controlgroup {
+       vertical-align: middle;
+       display: inline-block;
+}
+.ui-controlgroup > .ui-controlgroup-item {
+       float: left;
+       margin-left: 0;
+       margin-right: 0;
+}
+.ui-controlgroup > .ui-controlgroup-item:focus,
+.ui-controlgroup > .ui-controlgroup-item.ui-visual-focus {
+       z-index: 9999;
+}
+.ui-controlgroup-vertical > .ui-controlgroup-item {
+       display: block;
+       float: none;
+       width: 100%;
+       margin-top: 0;
+       margin-bottom: 0;
+       text-align: left;
+}
+.ui-controlgroup-vertical .ui-controlgroup-item {
+       box-sizing: border-box;
+}
+.ui-controlgroup .ui-controlgroup-label {
+       padding: .4em 1em;
+}
+.ui-controlgroup .ui-controlgroup-label span {
+       font-size: 80%;
+}
+.ui-controlgroup-horizontal .ui-controlgroup-label + .ui-controlgroup-item {
+       border-left: none;
+}
+.ui-controlgroup-vertical .ui-controlgroup-label + .ui-controlgroup-item {
+       border-top: none;
+}
+.ui-controlgroup-horizontal .ui-controlgroup-label.ui-widget-content {
+       border-right: none;
+}
+.ui-controlgroup-vertical .ui-controlgroup-label.ui-widget-content {
+       border-bottom: none;
+}
+
+/* Spinner specific style fixes */
+.ui-controlgroup-vertical .ui-spinner-input {
+
+       /* Support: IE8 only, Android < 4.4 only */
+       width: 75%;
+       width: calc( 100% - 2.4em );
+}
+.ui-controlgroup-vertical .ui-spinner .ui-spinner-up {
+       border-top-style: solid;
+}
+
+.ui-checkboxradio-label .ui-icon-background {
+       box-shadow: inset 1px 1px 1px #ccc;
+       border-radius: .12em;
+       border: none;
+}
+.ui-checkboxradio-radio-label .ui-icon-background {
+       width: 16px;
+       height: 16px;
+       border-radius: 1em;
+       overflow: visible;
+       border: none;
+}
+.ui-checkboxradio-radio-label.ui-checkboxradio-checked .ui-icon,
+.ui-checkboxradio-radio-label.ui-checkboxradio-checked:hover .ui-icon {
+       background-image: none;
+       width: 8px;
+       height: 8px;
+       border-width: 4px;
+       border-style: solid;
+}
+.ui-checkboxradio-disabled {
+       pointer-events: none;
+}
+.ui-datepicker {
+       width: 17em;
+       padding: .2em .2em 0;
+       display: none;
+}
+.ui-datepicker .ui-datepicker-header {
+       position: relative;
+       padding: .2em 0;
+}
+.ui-datepicker .ui-datepicker-prev,
+.ui-datepicker .ui-datepicker-next {
+       position: absolute;
+       top: 2px;
+       width: 1.8em;
+       height: 1.8em;
+}
+.ui-datepicker .ui-datepicker-prev-hover,
+.ui-datepicker .ui-datepicker-next-hover {
+       top: 1px;
+}
+.ui-datepicker .ui-datepicker-prev {
+       left: 2px;
+}
+.ui-datepicker .ui-datepicker-next {
+       right: 2px;
+}
+.ui-datepicker .ui-datepicker-prev-hover {
+       left: 1px;
+}
+.ui-datepicker .ui-datepicker-next-hover {
+       right: 1px;
+}
+.ui-datepicker .ui-datepicker-prev span,
+.ui-datepicker .ui-datepicker-next span {
+       display: block;
+       position: absolute;
+       left: 50%;
+       margin-left: -8px;
+       top: 50%;
+       margin-top: -8px;
+}
+.ui-datepicker .ui-datepicker-title {
+       margin: 0 2.3em;
+       line-height: 1.8em;
+       text-align: center;
+}
+.ui-datepicker .ui-datepicker-title select {
+       font-size: 1em;
+       margin: 1px 0;
+}
+.ui-datepicker select.ui-datepicker-month,
+.ui-datepicker select.ui-datepicker-year {
+       width: 45%;
+}
+.ui-datepicker table {
+       width: 100%;
+       font-size: .9em;
+       border-collapse: collapse;
+       margin: 0 0 .4em;
+}
+.ui-datepicker th {
+       padding: .7em .3em;
+       text-align: center;
+       font-weight: bold;
+       border: 0;
+}
+.ui-datepicker td {
+       border: 0;
+       padding: 1px;
+}
+.ui-datepicker td span,
+.ui-datepicker td a {
+       display: block;
+       padding: .2em;
+       text-align: right;
+       text-decoration: none;
+}
+.ui-datepicker .ui-datepicker-buttonpane {
+       background-image: none;
+       margin: .7em 0 0 0;
+       padding: 0 .2em;
+       border-left: 0;
+       border-right: 0;
+       border-bottom: 0;
+}
+.ui-datepicker .ui-datepicker-buttonpane button {
+       float: right;
+       margin: .5em .2em .4em;
+       cursor: pointer;
+       padding: .2em .6em .3em .6em;
+       width: auto;
+       overflow: visible;
+}
+.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current {
+       float: left;
+}
+
+/* with multiple calendars */
+.ui-datepicker.ui-datepicker-multi {
+       width: auto;
+}
+.ui-datepicker-multi .ui-datepicker-group {
+       float: left;
+}
+.ui-datepicker-multi .ui-datepicker-group table {
+       width: 95%;
+       margin: 0 auto .4em;
+}
+.ui-datepicker-multi-2 .ui-datepicker-group {
+       width: 50%;
+}
+.ui-datepicker-multi-3 .ui-datepicker-group {
+       width: 33.3%;
+}
+.ui-datepicker-multi-4 .ui-datepicker-group {
+       width: 25%;
+}
+.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,
+.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header {
+       border-left-width: 0;
+}
+.ui-datepicker-multi .ui-datepicker-buttonpane {
+       clear: left;
+}
+.ui-datepicker-row-break {
+       clear: both;
+       width: 100%;
+       font-size: 0;
+}
+
+/* RTL support */
+.ui-datepicker-rtl {
+       direction: rtl;
+}
+.ui-datepicker-rtl .ui-datepicker-prev {
+       right: 2px;
+       left: auto;
+}
+.ui-datepicker-rtl .ui-datepicker-next {
+       left: 2px;
+       right: auto;
+}
+.ui-datepicker-rtl .ui-datepicker-prev:hover {
+       right: 1px;
+       left: auto;
+}
+.ui-datepicker-rtl .ui-datepicker-next:hover {
+       left: 1px;
+       right: auto;
+}
+.ui-datepicker-rtl .ui-datepicker-buttonpane {
+       clear: right;
+}
+.ui-datepicker-rtl .ui-datepicker-buttonpane button {
+       float: left;
+}
+.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,
+.ui-datepicker-rtl .ui-datepicker-group {
+       float: right;
+}
+.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,
+.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header {
+       border-right-width: 0;
+       border-left-width: 1px;
+}
+
+/* Icons */
+.ui-datepicker .ui-icon {
+       display: block;
+       text-indent: -99999px;
+       overflow: hidden;
+       background-repeat: no-repeat;
+       left: .5em;
+       top: .3em;
+}
+.ui-dialog {
+       position: absolute;
+       top: 0;
+       left: 0;
+       padding: .2em;
+       outline: 0;
+}
+.ui-dialog .ui-dialog-titlebar {
+       padding: .4em 1em;
+       position: relative;
+}
+.ui-dialog .ui-dialog-title {
+       float: left;
+       margin: .1em 0;
+       white-space: nowrap;
+       width: 90%;
+       overflow: hidden;
+       text-overflow: ellipsis;
+}
+.ui-dialog .ui-dialog-titlebar-close {
+       position: absolute;
+       right: .3em;
+       top: 50%;
+       width: 20px;
+       margin: -10px 0 0 0;
+       padding: 1px;
+       height: 20px;
+}
+.ui-dialog .ui-dialog-content {
+       position: relative;
+       border: 0;
+       padding: .5em 1em;
+       background: none;
+       overflow: auto;
+}
+.ui-dialog .ui-dialog-buttonpane {
+       text-align: left;
+       border-width: 1px 0 0 0;
+       background-image: none;
+       margin-top: .5em;
+       padding: .3em 1em .5em .4em;
+}
+.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset {
+       float: right;
+}
+.ui-dialog .ui-dialog-buttonpane button {
+       margin: .5em .4em .5em 0;
+       cursor: pointer;
+}
+.ui-dialog .ui-resizable-n {
+       height: 2px;
+       top: 0;
+}
+.ui-dialog .ui-resizable-e {
+       width: 2px;
+       right: 0;
+}
+.ui-dialog .ui-resizable-s {
+       height: 2px;
+       bottom: 0;
+}
+.ui-dialog .ui-resizable-w {
+       width: 2px;
+       left: 0;
+}
+.ui-dialog .ui-resizable-se,
+.ui-dialog .ui-resizable-sw,
+.ui-dialog .ui-resizable-ne,
+.ui-dialog .ui-resizable-nw {
+       width: 7px;
+       height: 7px;
+}
+.ui-dialog .ui-resizable-se {
+       right: 0;
+       bottom: 0;
+}
+.ui-dialog .ui-resizable-sw {
+       left: 0;
+       bottom: 0;
+}
+.ui-dialog .ui-resizable-ne {
+       right: 0;
+       top: 0;
+}
+.ui-dialog .ui-resizable-nw {
+       left: 0;
+       top: 0;
+}
+.ui-draggable .ui-dialog-titlebar {
+       cursor: move;
+}
+.ui-progressbar {
+       height: 2em;
+       text-align: left;
+       overflow: hidden;
+}
+.ui-progressbar .ui-progressbar-value {
+       margin: -1px;
+       height: 100%;
+}
+.ui-progressbar .ui-progressbar-overlay {
+       background: url("data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw==");
+       height: 100%;
+       filter: alpha(opacity=25); /* support: IE8 */
+       opacity: 0.25;
+}
+.ui-progressbar-indeterminate .ui-progressbar-value {
+       background-image: none;
+}
+.ui-selectmenu-menu {
+       padding: 0;
+       margin: 0;
+       position: absolute;
+       top: 0;
+       left: 0;
+       display: none;
+}
+.ui-selectmenu-menu .ui-menu {
+       overflow: auto;
+       overflow-x: hidden;
+       padding-bottom: 1px;
+}
+.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup {
+       font-size: 1em;
+       font-weight: bold;
+       line-height: 1.5;
+       padding: 2px 0.4em;
+       margin: 0.5em 0 0 0;
+       height: auto;
+       border: 0;
+}
+.ui-selectmenu-open {
+       display: block;
+}
+.ui-selectmenu-text {
+       display: block;
+       margin-right: 20px;
+       overflow: hidden;
+       text-overflow: ellipsis;
+}
+.ui-selectmenu-button.ui-button {
+       text-align: left;
+       white-space: nowrap;
+       width: 14em;
+}
+.ui-selectmenu-icon.ui-icon {
+       float: right;
+       margin-top: 0;
+}
+.ui-slider {
+       position: relative;
+       text-align: left;
+}
+.ui-slider .ui-slider-handle {
+       position: absolute;
+       z-index: 2;
+       width: 1.2em;
+       height: 1.2em;
+       cursor: default;
+       -ms-touch-action: none;
+       touch-action: none;
+}
+.ui-slider .ui-slider-range {
+       position: absolute;
+       z-index: 1;
+       font-size: .7em;
+       display: block;
+       border: 0;
+       background-position: 0 0;
+}
+
+/* support: IE8 - See #6727 */
+.ui-slider.ui-state-disabled .ui-slider-handle,
+.ui-slider.ui-state-disabled .ui-slider-range {
+       filter: inherit;
+}
+
+.ui-slider-horizontal {
+       height: .8em;
+}
+.ui-slider-horizontal .ui-slider-handle {
+       top: -.3em;
+       margin-left: -.6em;
+}
+.ui-slider-horizontal .ui-slider-range {
+       top: 0;
+       height: 100%;
+}
+.ui-slider-horizontal .ui-slider-range-min {
+       left: 0;
+}
+.ui-slider-horizontal .ui-slider-range-max {
+       right: 0;
+}
+
+.ui-slider-vertical {
+       width: .8em;
+       height: 100px;
+}
+.ui-slider-vertical .ui-slider-handle {
+       left: -.3em;
+       margin-left: 0;
+       margin-bottom: -.6em;
+}
+.ui-slider-vertical .ui-slider-range {
+       left: 0;
+       width: 100%;
+}
+.ui-slider-vertical .ui-slider-range-min {
+       bottom: 0;
+}
+.ui-slider-vertical .ui-slider-range-max {
+       top: 0;
+}
+.ui-spinner {
+       position: relative;
+       display: inline-block;
+       overflow: hidden;
+       padding: 0;
+       vertical-align: middle;
+}
+.ui-spinner-input {
+       border: none;
+       background: none;
+       color: inherit;
+       padding: .222em 0;
+       margin: .2em 0;
+       vertical-align: middle;
+       margin-left: .4em;
+       margin-right: 2em;
+}
+.ui-spinner-button {
+       width: 1.6em;
+       height: 50%;
+       font-size: .5em;
+       padding: 0;
+       margin: 0;
+       text-align: center;
+       position: absolute;
+       cursor: default;
+       display: block;
+       overflow: hidden;
+       right: 0;
+}
+/* more specificity required here to override default borders */
+.ui-spinner a.ui-spinner-button {
+       border-top-style: none;
+       border-bottom-style: none;
+       border-right-style: none;
+}
+.ui-spinner-up {
+       top: 0;
+}
+.ui-spinner-down {
+       bottom: 0;
+}
+.ui-tabs {
+       position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
+       padding: .2em;
+}
+.ui-tabs .ui-tabs-nav {
+       margin: 0;
+       padding: .2em .2em 0;
+}
+.ui-tabs .ui-tabs-nav li {
+       list-style: none;
+       float: left;
+       position: relative;
+       top: 0;
+       margin: 1px .2em 0 0;
+       border-bottom-width: 0;
+       padding: 0;
+       white-space: nowrap;
+}
+.ui-tabs .ui-tabs-nav .ui-tabs-anchor {
+       float: left;
+       padding: .5em 1em;
+       text-decoration: none;
+}
+.ui-tabs .ui-tabs-nav li.ui-tabs-active {
+       margin-bottom: -1px;
+       padding-bottom: 1px;
+}
+.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,
+.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,
+.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor {
+       cursor: text;
+}
+.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor {
+       cursor: pointer;
+}
+.ui-tabs .ui-tabs-panel {
+       display: block;
+       border-width: 0;
+       padding: 1em 1.4em;
+       background: none;
+}
+.ui-tooltip {
+       padding: 8px;
+       position: absolute;
+       z-index: 9999;
+       max-width: 300px;
+}
+body .ui-tooltip {
+       border-width: 2px;
+}
diff --git a/htdocs/cgi-bin/wsrc/jquery-ui.theme.css b/htdocs/cgi-bin/wsrc/jquery-ui.theme.css
new file mode 100644 (file)
index 0000000..660d9a4
--- /dev/null
@@ -0,0 +1,1021 @@
+/*!
+ * jQuery UI CSS Framework 1.12.1
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/category/theming/
+ *
+ * To view and modify this theme, visit http://jqueryui.com/themeroller/?scope=&folderName=cupertino&cornerRadiusShadow=8px&offsetLeftShadow=-7px&offsetTopShadow=-7px&thicknessShadow=7px&opacityShadow=30&bgImgOpacityShadow=70&bgTextureShadow=highlight_hard&bgColorShadow=000000&opacityOverlay=80&bgImgOpacityOverlay=90&bgTextureOverlay=diagonals_thick&bgColorOverlay=eeeeee&iconColorError=ffffff&fcError=ffffff&borderColorError=cd0a0a&bgImgOpacityError=15&bgTextureError=flat&bgColorError=cd0a0a&iconColorHighlight=2e83ff&fcHighlight=363636&borderColorHighlight=f9dd34&bgImgOpacityHighlight=25&bgTextureHighlight=highlight_soft&bgColorHighlight=ffef8f&iconColorActive=ffffff&fcActive=ffffff&borderColorActive=2694e8&bgImgOpacityActive=50&bgTextureActive=glass&bgColorActive=3baae3&iconColorHover=2694e8&fcHover=0070a3&borderColorHover=74b2e2&bgImgOpacityHover=100&bgTextureHover=glass&bgColorHover=e4f1fb&iconColorDefault=3d80b3&fcDefault=2779aa&borderColorDefault=aed0ea&bgImgOpacityDefault=80&bgTextureDefault=glass&bgColorDefault=d7ebf9&iconColorContent=72a7cf&fcContent=362b36&borderColorContent=dddddd&bgImgOpacityContent=100&bgTextureContent=highlight_hard&bgColorContent=f2f5f7&iconColorHeader=72a7cf&fcHeader=222222&borderColorHeader=aed0ea&bgImgOpacityHeader=100&bgTextureHeader=highlight_soft&bgColorHeader=deedf7&cornerRadius=6px&fsDefault=1.1em&fwDefault=bold&ffDefault=Lucida%20Grande%2CLucida%20Sans%2CArial%2Csans-serif
+ */
+
+
+/* Component containers
+----------------------------------*/
+
+.ui-widget {
+    font-family: Lucida Grande, Lucida Sans, Arial, sans-serif;
+    font-size: 1.1em;
+}
+
+.ui-widget .ui-widget {
+    font-size: 1em;
+}
+
+.ui-widget input,
+.ui-widget select,
+.ui-widget textarea,
+.ui-widget button {
+    font-family: Lucida Grande, Lucida Sans, Arial, sans-serif;
+    font-size: 1em;
+}
+
+.ui-widget.ui-widget-content {
+    border: 1px solid #aed0ea;
+}
+
+.ui-widget-content {
+    border: 1px solid #dddddd;
+    background: #c8fff8 url("images/ui-bg_highlight-hard_100_f2f5f7_1x100.png") 50% top repeat-x;
+    color: #362b36;
+}
+
+.ui-widget-content a {
+    color: #362b36;
+}
+
+.ui-widget-header {
+    border: 1px solid #aed0ea;
+    background: #c8fff8 url("images/ui-bg_highlight-soft_100_deedf7_1x100.png") 50% 50% repeat-x;
+    color: #222222;
+    font-weight: bold;
+}
+
+.ui-widget-header a {
+    color: #222222;
+}
+
+
+/* Interaction states
+----------------------------------*/
+
+.ui-state-default,
+.ui-widget-content .ui-state-default,
+.ui-widget-header .ui-state-default,
+.ui-button,
+
+/* We use html here because we need a greater specificity to make sure disabled
+works properly when clicked or hovered */
+
+html .ui-button.ui-state-disabled:hover,
+html .ui-button.ui-state-disabled:active {
+    border: 1px solid #aed0ea;
+    background: #d7ebf9 url("images/ui-bg_glass_80_d7ebf9_1x400.png") 50% 50% repeat-x;
+    font-weight: bold;
+    color: #2779aa;
+}
+
+.ui-state-default a,
+.ui-state-default a:link,
+.ui-state-default a:visited,
+a.ui-button,
+a:link.ui-button,
+a:visited.ui-button,
+.ui-button {
+    color: #2779aa;
+    text-decoration: none;
+}
+
+.ui-state-hover,
+.ui-widget-content .ui-state-hover,
+.ui-widget-header .ui-state-hover,
+.ui-state-focus,
+.ui-widget-content .ui-state-focus,
+.ui-widget-header .ui-state-focus,
+.ui-button:hover,
+.ui-button:focus {
+    border: 1px solid #74b2e2;
+    background: #e4f1fb url("images/ui-bg_glass_100_e4f1fb_1x400.png") 50% 50% repeat-x;
+    font-weight: bold;
+    color: #0070a3;
+}
+
+.ui-state-hover a,
+.ui-state-hover a:hover,
+.ui-state-hover a:link,
+.ui-state-hover a:visited,
+.ui-state-focus a,
+.ui-state-focus a:hover,
+.ui-state-focus a:link,
+.ui-state-focus a:visited,
+a.ui-button:hover,
+a.ui-button:focus {
+    color: #0070a3;
+    text-decoration: none;
+}
+
+.ui-visual-focus {
+    box-shadow: 0 0 3px 1px rgb(94, 158, 214);
+}
+
+.ui-state-active,
+.ui-widget-content .ui-state-active,
+.ui-widget-header .ui-state-active,
+a.ui-button:active,
+.ui-button:active,
+.ui-button.ui-state-active:hover {
+    border: 1px solid #2694e8;
+    background: #3baae3 url("images/ui-bg_glass_50_3baae3_1x400.png") 50% 50% repeat-x;
+    font-weight: bold;
+    color: #ffffff;
+}
+
+.ui-icon-background,
+.ui-state-active .ui-icon-background {
+    border: #2694e8;
+    background-color: #ffffff;
+}
+
+.ui-state-active a,
+.ui-state-active a:link,
+.ui-state-active a:visited {
+    color: #ffffff;
+    text-decoration: none;
+}
+
+
+/* Interaction Cues
+----------------------------------*/
+
+.ui-state-highlight,
+.ui-widget-content .ui-state-highlight,
+.ui-widget-header .ui-state-highlight {
+    border: 1px solid #f9dd34;
+    background: #ffef8f url("images/ui-bg_highlight-soft_25_ffef8f_1x100.png") 50% top repeat-x;
+    color: #363636;
+}
+
+.ui-state-checked {
+    border: 1px solid #f9dd34;
+    background: #ffef8f;
+}
+
+.ui-state-highlight a,
+.ui-widget-content .ui-state-highlight a,
+.ui-widget-header .ui-state-highlight a {
+    color: #363636;
+}
+
+.ui-state-error,
+.ui-widget-content .ui-state-error,
+.ui-widget-header .ui-state-error {
+    border: 1px solid #cd0a0a;
+    background: #cd0a0a;
+    color: #ffffff;
+}
+
+.ui-state-error a,
+.ui-widget-content .ui-state-error a,
+.ui-widget-header .ui-state-error a {
+    color: #ffffff;
+}
+
+.ui-state-error-text,
+.ui-widget-content .ui-state-error-text,
+.ui-widget-header .ui-state-error-text {
+    color: #ffffff;
+}
+
+.ui-priority-primary,
+.ui-widget-content .ui-priority-primary,
+.ui-widget-header .ui-priority-primary {
+    font-weight: bold;
+}
+
+.ui-priority-secondary,
+.ui-widget-content .ui-priority-secondary,
+.ui-widget-header .ui-priority-secondary {
+    opacity: .7;
+    filter: Alpha(Opacity=70);
+    /* support: IE8 */
+    font-weight: normal;
+}
+
+.ui-state-disabled,
+.ui-widget-content .ui-state-disabled,
+.ui-widget-header .ui-state-disabled {
+    opacity: .35;
+    filter: Alpha(Opacity=35);
+    /* support: IE8 */
+    background-image: none;
+}
+
+.ui-state-disabled .ui-icon {
+    filter: Alpha(Opacity=35);
+    /* support: IE8 - See #6059 */
+}
+
+
+/* Icons
+----------------------------------*/
+
+
+/* states and images */
+
+.ui-icon {
+    width: 16px;
+    height: 16px;
+}
+
+.ui-icon,
+.ui-widget-content .ui-icon {
+    background-image: url("images/ui-icons_72a7cf_256x240.png");
+}
+
+.ui-widget-header .ui-icon {
+    background-image: url("images/ui-icons_72a7cf_256x240.png");
+}
+
+.ui-state-hover .ui-icon,
+.ui-state-focus .ui-icon,
+.ui-button:hover .ui-icon,
+.ui-button:focus .ui-icon {
+    background-image: url("images/ui-icons_2694e8_256x240.png");
+}
+
+.ui-state-active .ui-icon,
+.ui-button:active .ui-icon {
+    background-image: url("images/ui-icons_ffffff_256x240.png");
+}
+
+.ui-state-highlight .ui-icon,
+.ui-button .ui-state-highlight.ui-icon {
+    background-image: url("images/ui-icons_2e83ff_256x240.png");
+}
+
+.ui-state-error .ui-icon,
+.ui-state-error-text .ui-icon {
+    background-image: url("images/ui-icons_ffffff_256x240.png");
+}
+
+.ui-button .ui-icon {
+    background-image: url("images/ui-icons_3d80b3_256x240.png");
+}
+
+
+/* positioning */
+
+.ui-icon-blank {
+    background-position: 16px 16px;
+}
+
+.ui-icon-caret-1-n {
+    background-position: 0 0;
+}
+
+.ui-icon-caret-1-ne {
+    background-position: -16px 0;
+}
+
+.ui-icon-caret-1-e {
+    background-position: -32px 0;
+}
+
+.ui-icon-caret-1-se {
+    background-position: -48px 0;
+}
+
+.ui-icon-caret-1-s {
+    background-position: -65px 0;
+}
+
+.ui-icon-caret-1-sw {
+    background-position: -80px 0;
+}
+
+.ui-icon-caret-1-w {
+    background-position: -96px 0;
+}
+
+.ui-icon-caret-1-nw {
+    background-position: -112px 0;
+}
+
+.ui-icon-caret-2-n-s {
+    background-position: -128px 0;
+}
+
+.ui-icon-caret-2-e-w {
+    background-position: -144px 0;
+}
+
+.ui-icon-triangle-1-n {
+    background-position: 0 -16px;
+}
+
+.ui-icon-triangle-1-ne {
+    background-position: -16px -16px;
+}
+
+.ui-icon-triangle-1-e {
+    background-position: -32px -16px;
+}
+
+.ui-icon-triangle-1-se {
+    background-position: -48px -16px;
+}
+
+.ui-icon-triangle-1-s {
+    background-position: -65px -16px;
+}
+
+.ui-icon-triangle-1-sw {
+    background-position: -80px -16px;
+}
+
+.ui-icon-triangle-1-w {
+    background-position: -96px -16px;
+}
+
+.ui-icon-triangle-1-nw {
+    background-position: -112px -16px;
+}
+
+.ui-icon-triangle-2-n-s {
+    background-position: -128px -16px;
+}
+
+.ui-icon-triangle-2-e-w {
+    background-position: -144px -16px;
+}
+
+.ui-icon-arrow-1-n {
+    background-position: 0 -32px;
+}
+
+.ui-icon-arrow-1-ne {
+    background-position: -16px -32px;
+}
+
+.ui-icon-arrow-1-e {
+    background-position: -32px -32px;
+}
+
+.ui-icon-arrow-1-se {
+    background-position: -48px -32px;
+}
+
+.ui-icon-arrow-1-s {
+    background-position: -65px -32px;
+}
+
+.ui-icon-arrow-1-sw {
+    background-position: -80px -32px;
+}
+
+.ui-icon-arrow-1-w {
+    background-position: -96px -32px;
+}
+
+.ui-icon-arrow-1-nw {
+    background-position: -112px -32px;
+}
+
+.ui-icon-arrow-2-n-s {
+    background-position: -128px -32px;
+}
+
+.ui-icon-arrow-2-ne-sw {
+    background-position: -144px -32px;
+}
+
+.ui-icon-arrow-2-e-w {
+    background-position: -160px -32px;
+}
+
+.ui-icon-arrow-2-se-nw {
+    background-position: -176px -32px;
+}
+
+.ui-icon-arrowstop-1-n {
+    background-position: -192px -32px;
+}
+
+.ui-icon-arrowstop-1-e {
+    background-position: -208px -32px;
+}
+
+.ui-icon-arrowstop-1-s {
+    background-position: -224px -32px;
+}
+
+.ui-icon-arrowstop-1-w {
+    background-position: -240px -32px;
+}
+
+.ui-icon-arrowthick-1-n {
+    background-position: 1px -48px;
+}
+
+.ui-icon-arrowthick-1-ne {
+    background-position: -16px -48px;
+}
+
+.ui-icon-arrowthick-1-e {
+    background-position: -32px -48px;
+}
+
+.ui-icon-arrowthick-1-se {
+    background-position: -48px -48px;
+}
+
+.ui-icon-arrowthick-1-s {
+    background-position: -64px -48px;
+}
+
+.ui-icon-arrowthick-1-sw {
+    background-position: -80px -48px;
+}
+
+.ui-icon-arrowthick-1-w {
+    background-position: -96px -48px;
+}
+
+.ui-icon-arrowthick-1-nw {
+    background-position: -112px -48px;
+}
+
+.ui-icon-arrowthick-2-n-s {
+    background-position: -128px -48px;
+}
+
+.ui-icon-arrowthick-2-ne-sw {
+    background-position: -144px -48px;
+}
+
+.ui-icon-arrowthick-2-e-w {
+    background-position: -160px -48px;
+}
+
+.ui-icon-arrowthick-2-se-nw {
+    background-position: -176px -48px;
+}
+
+.ui-icon-arrowthickstop-1-n {
+    background-position: -192px -48px;
+}
+
+.ui-icon-arrowthickstop-1-e {
+    background-position: -208px -48px;
+}
+
+.ui-icon-arrowthickstop-1-s {
+    background-position: -224px -48px;
+}
+
+.ui-icon-arrowthickstop-1-w {
+    background-position: -240px -48px;
+}
+
+.ui-icon-arrowreturnthick-1-w {
+    background-position: 0 -64px;
+}
+
+.ui-icon-arrowreturnthick-1-n {
+    background-position: -16px -64px;
+}
+
+.ui-icon-arrowreturnthick-1-e {
+    background-position: -32px -64px;
+}
+
+.ui-icon-arrowreturnthick-1-s {
+    background-position: -48px -64px;
+}
+
+.ui-icon-arrowreturn-1-w {
+    background-position: -64px -64px;
+}
+
+.ui-icon-arrowreturn-1-n {
+    background-position: -80px -64px;
+}
+
+.ui-icon-arrowreturn-1-e {
+    background-position: -96px -64px;
+}
+
+.ui-icon-arrowreturn-1-s {
+    background-position: -112px -64px;
+}
+
+.ui-icon-arrowrefresh-1-w {
+    background-position: -128px -64px;
+}
+
+.ui-icon-arrowrefresh-1-n {
+    background-position: -144px -64px;
+}
+
+.ui-icon-arrowrefresh-1-e {
+    background-position: -160px -64px;
+}
+
+.ui-icon-arrowrefresh-1-s {
+    background-position: -176px -64px;
+}
+
+.ui-icon-arrow-4 {
+    background-position: 0 -80px;
+}
+
+.ui-icon-arrow-4-diag {
+    background-position: -16px -80px;
+}
+
+.ui-icon-extlink {
+    background-position: -32px -80px;
+}
+
+.ui-icon-newwin {
+    background-position: -48px -80px;
+}
+
+.ui-icon-refresh {
+    background-position: -64px -80px;
+}
+
+.ui-icon-shuffle {
+    background-position: -80px -80px;
+}
+
+.ui-icon-transfer-e-w {
+    background-position: -96px -80px;
+}
+
+.ui-icon-transferthick-e-w {
+    background-position: -112px -80px;
+}
+
+.ui-icon-folder-collapsed {
+    background-position: 0 -96px;
+}
+
+.ui-icon-folder-open {
+    background-position: -16px -96px;
+}
+
+.ui-icon-document {
+    background-position: -32px -96px;
+}
+
+.ui-icon-document-b {
+    background-position: -48px -96px;
+}
+
+.ui-icon-note {
+    background-position: -64px -96px;
+}
+
+.ui-icon-mail-closed {
+    background-position: -80px -96px;
+}
+
+.ui-icon-mail-open {
+    background-position: -96px -96px;
+}
+
+.ui-icon-suitcase {
+    background-position: -112px -96px;
+}
+
+.ui-icon-comment {
+    background-position: -128px -96px;
+}
+
+.ui-icon-person {
+    background-position: -144px -96px;
+}
+
+.ui-icon-print {
+    background-position: -160px -96px;
+}
+
+.ui-icon-trash {
+    background-position: -176px -96px;
+}
+
+.ui-icon-locked {
+    background-position: -192px -96px;
+}
+
+.ui-icon-unlocked {
+    background-position: -208px -96px;
+}
+
+.ui-icon-bookmark {
+    background-position: -224px -96px;
+}
+
+.ui-icon-tag {
+    background-position: -240px -96px;
+}
+
+.ui-icon-home {
+    background-position: 0 -112px;
+}
+
+.ui-icon-flag {
+    background-position: -16px -112px;
+}
+
+.ui-icon-calendar {
+    background-position: -32px -112px;
+}
+
+.ui-icon-cart {
+    background-position: -48px -112px;
+}
+
+.ui-icon-pencil {
+    background-position: -64px -112px;
+}
+
+.ui-icon-clock {
+    background-position: -80px -112px;
+}
+
+.ui-icon-disk {
+    background-position: -96px -112px;
+}
+
+.ui-icon-calculator {
+    background-position: -112px -112px;
+}
+
+.ui-icon-zoomin {
+    background-position: -128px -112px;
+}
+
+.ui-icon-zoomout {
+    background-position: -144px -112px;
+}
+
+.ui-icon-search {
+    background-position: -160px -112px;
+}
+
+.ui-icon-wrench {
+    background-position: -176px -112px;
+}
+
+.ui-icon-gear {
+    background-position: -192px -112px;
+}
+
+.ui-icon-heart {
+    background-position: -208px -112px;
+}
+
+.ui-icon-star {
+    background-position: -224px -112px;
+}
+
+.ui-icon-link {
+    background-position: -240px -112px;
+}
+
+.ui-icon-cancel {
+    background-position: 0 -128px;
+}
+
+.ui-icon-plus {
+    background-position: -16px -128px;
+}
+
+.ui-icon-plusthick {
+    background-position: -32px -128px;
+}
+
+.ui-icon-minus {
+    background-position: -48px -128px;
+}
+
+.ui-icon-minusthick {
+    background-position: -64px -128px;
+}
+
+.ui-icon-close {
+    background-position: -80px -128px;
+}
+
+.ui-icon-closethick {
+    background-position: -96px -128px;
+}
+
+.ui-icon-key {
+    background-position: -112px -128px;
+}
+
+.ui-icon-lightbulb {
+    background-position: -128px -128px;
+}
+
+.ui-icon-scissors {
+    background-position: -144px -128px;
+}
+
+.ui-icon-clipboard {
+    background-position: -160px -128px;
+}
+
+.ui-icon-copy {
+    background-position: -176px -128px;
+}
+
+.ui-icon-contact {
+    background-position: -192px -128px;
+}
+
+.ui-icon-image {
+    background-position: -208px -128px;
+}
+
+.ui-icon-video {
+    background-position: -224px -128px;
+}
+
+.ui-icon-script {
+    background-position: -240px -128px;
+}
+
+.ui-icon-alert {
+    background-position: 0 -144px;
+}
+
+.ui-icon-info {
+    background-position: -16px -144px;
+}
+
+.ui-icon-notice {
+    background-position: -32px -144px;
+}
+
+.ui-icon-help {
+    background-position: -48px -144px;
+}
+
+.ui-icon-check {
+    background-position: -64px -144px;
+}
+
+.ui-icon-bullet {
+    background-position: -80px -144px;
+}
+
+.ui-icon-radio-on {
+    background-position: -96px -144px;
+}
+
+.ui-icon-radio-off {
+    background-position: -112px -144px;
+}
+
+.ui-icon-pin-w {
+    background-position: -128px -144px;
+}
+
+.ui-icon-pin-s {
+    background-position: -144px -144px;
+}
+
+.ui-icon-play {
+    background-position: 0 -160px;
+}
+
+.ui-icon-pause {
+    background-position: -16px -160px;
+}
+
+.ui-icon-seek-next {
+    background-position: -32px -160px;
+}
+
+.ui-icon-seek-prev {
+    background-position: -48px -160px;
+}
+
+.ui-icon-seek-end {
+    background-position: -64px -160px;
+}
+
+.ui-icon-seek-start {
+    background-position: -80px -160px;
+}
+
+
+/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
+
+.ui-icon-seek-first {
+    background-position: -80px -160px;
+}
+
+.ui-icon-stop {
+    background-position: -96px -160px;
+}
+
+.ui-icon-eject {
+    background-position: -112px -160px;
+}
+
+.ui-icon-volume-off {
+    background-position: -128px -160px;
+}
+
+.ui-icon-volume-on {
+    background-position: -144px -160px;
+}
+
+.ui-icon-power {
+    background-position: 0 -176px;
+}
+
+.ui-icon-signal-diag {
+    background-position: -16px -176px;
+}
+
+.ui-icon-signal {
+    background-position: -32px -176px;
+}
+
+.ui-icon-battery-0 {
+    background-position: -48px -176px;
+}
+
+.ui-icon-battery-1 {
+    background-position: -64px -176px;
+}
+
+.ui-icon-battery-2 {
+    background-position: -80px -176px;
+}
+
+.ui-icon-battery-3 {
+    background-position: -96px -176px;
+}
+
+.ui-icon-circle-plus {
+    background-position: 0 -192px;
+}
+
+.ui-icon-circle-minus {
+    background-position: -16px -192px;
+}
+
+.ui-icon-circle-close {
+    background-position: -32px -192px;
+}
+
+.ui-icon-circle-triangle-e {
+    background-position: -48px -192px;
+}
+
+.ui-icon-circle-triangle-s {
+    background-position: -64px -192px;
+}
+
+.ui-icon-circle-triangle-w {
+    background-position: -80px -192px;
+}
+
+.ui-icon-circle-triangle-n {
+    background-position: -96px -192px;
+}
+
+.ui-icon-circle-arrow-e {
+    background-position: -112px -192px;
+}
+
+.ui-icon-circle-arrow-s {
+    background-position: -128px -192px;
+}
+
+.ui-icon-circle-arrow-w {
+    background-position: -144px -192px;
+}
+
+.ui-icon-circle-arrow-n {
+    background-position: -160px -192px;
+}
+
+.ui-icon-circle-zoomin {
+    background-position: -176px -192px;
+}
+
+.ui-icon-circle-zoomout {
+    background-position: -192px -192px;
+}
+
+.ui-icon-circle-check {
+    background-position: -208px -192px;
+}
+
+.ui-icon-circlesmall-plus {
+    background-position: 0 -208px;
+}
+
+.ui-icon-circlesmall-minus {
+    background-position: -16px -208px;
+}
+
+.ui-icon-circlesmall-close {
+    background-position: -32px -208px;
+}
+
+.ui-icon-squaresmall-plus {
+    background-position: -48px -208px;
+}
+
+.ui-icon-squaresmall-minus {
+    background-position: -64px -208px;
+}
+
+.ui-icon-squaresmall-close {
+    background-position: -80px -208px;
+}
+
+.ui-icon-grip-dotted-vertical {
+    background-position: 0 -224px;
+}
+
+.ui-icon-grip-dotted-horizontal {
+    background-position: -16px -224px;
+}
+
+.ui-icon-grip-solid-vertical {
+    background-position: -32px -224px;
+}
+
+.ui-icon-grip-solid-horizontal {
+    background-position: -48px -224px;
+}
+
+.ui-icon-gripsmall-diagonal-se {
+    background-position: -64px -224px;
+}
+
+.ui-icon-grip-diagonal-se {
+    background-position: -80px -224px;
+}
+
+
+/* Misc visuals
+----------------------------------*/
+
+
+/* Corner radius */
+
+.ui-corner-all,
+.ui-corner-top,
+.ui-corner-left,
+.ui-corner-tl {
+    border-top-left-radius: 6px;
+}
+
+.ui-corner-all,
+.ui-corner-top,
+.ui-corner-right,
+.ui-corner-tr {
+    border-top-right-radius: 6px;
+}
+
+.ui-corner-all,
+.ui-corner-bottom,
+.ui-corner-left,
+.ui-corner-bl {
+    border-bottom-left-radius: 6px;
+}
+
+.ui-corner-all,
+.ui-corner-bottom,
+.ui-corner-right,
+.ui-corner-br {
+    border-bottom-right-radius: 6px;
+}
+
+
+/* Overlays */
+
+.ui-widget-overlay {
+    background: #eeeeee url("images/ui-bg_diagonals-thick_90_eeeeee_40x40.png") 50% 50% repeat;
+    opacity: .8;
+    filter: Alpha(Opacity=80);
+    /* support: IE8 */
+}
+
+.ui-widget-shadow {
+    -webkit-box-shadow: -7px -7px 7px #000000;
+    box-shadow: -7px -7px 7px #000000;
+}
\ No newline at end of file
diff --git a/htdocs/cgi-bin/wsrc/jquery.js b/htdocs/cgi-bin/wsrc/jquery.js
new file mode 100644 (file)
index 0000000..7fc60fc
--- /dev/null
@@ -0,0 +1,11008 @@
+/*!
+ * jQuery JavaScript Library v1.12.4
+ * http://jquery.com/
+ *
+ * Includes Sizzle.js
+ * http://sizzlejs.com/
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license
+ * http://jquery.org/license
+ *
+ * Date: 2016-05-20T17:17Z
+ */
+
+(function( global, factory ) {
+
+       if ( typeof module === "object" && typeof module.exports === "object" ) {
+               // For CommonJS and CommonJS-like environments where a proper `window`
+               // is present, execute the factory and get jQuery.
+               // For environments that do not have a `window` with a `document`
+               // (such as Node.js), expose a factory as module.exports.
+               // This accentuates the need for the creation of a real `window`.
+               // e.g. var jQuery = require("jquery")(window);
+               // See ticket #14549 for more info.
+               module.exports = global.document ?
+                       factory( global, true ) :
+                       function( w ) {
+                               if ( !w.document ) {
+                                       throw new Error( "jQuery requires a window with a document" );
+                               }
+                               return factory( w );
+                       };
+       } else {
+               factory( global );
+       }
+
+// Pass this if window is not defined yet
+}(typeof window !== "undefined" ? window : this, function( window, noGlobal ) {
+
+// Support: Firefox 18+
+// Can't be in strict mode, several libs including ASP.NET trace
+// the stack via arguments.caller.callee and Firefox dies if
+// you try to trace through "use strict" call chains. (#13335)
+//"use strict";
+var deletedIds = [];
+
+var document = window.document;
+
+var slice = deletedIds.slice;
+
+var concat = deletedIds.concat;
+
+var push = deletedIds.push;
+
+var indexOf = deletedIds.indexOf;
+
+var class2type = {};
+
+var toString = class2type.toString;
+
+var hasOwn = class2type.hasOwnProperty;
+
+var support = {};
+
+
+
+var
+       version = "1.12.4",
+
+       // Define a local copy of jQuery
+       jQuery = function( selector, context ) {
+
+               // The jQuery object is actually just the init constructor 'enhanced'
+               // Need init if jQuery is called (just allow error to be thrown if not included)
+               return new jQuery.fn.init( selector, context );
+       },
+
+       // Support: Android<4.1, IE<9
+       // Make sure we trim BOM and NBSP
+       rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,
+
+       // Matches dashed string for camelizing
+       rmsPrefix = /^-ms-/,
+       rdashAlpha = /-([\da-z])/gi,
+
+       // Used by jQuery.camelCase as callback to replace()
+       fcamelCase = function( all, letter ) {
+               return letter.toUpperCase();
+       };
+
+jQuery.fn = jQuery.prototype = {
+
+       // The current version of jQuery being used
+       jquery: version,
+
+       constructor: jQuery,
+
+       // Start with an empty selector
+       selector: "",
+
+       // The default length of a jQuery object is 0
+       length: 0,
+
+       toArray: function() {
+               return slice.call( this );
+       },
+
+       // Get the Nth element in the matched element set OR
+       // Get the whole matched element set as a clean array
+       get: function( num ) {
+               return num != null ?
+
+                       // Return just the one element from the set
+                       ( num < 0 ? this[ num + this.length ] : this[ num ] ) :
+
+                       // Return all the elements in a clean array
+                       slice.call( this );
+       },
+
+       // Take an array of elements and push it onto the stack
+       // (returning the new matched element set)
+       pushStack: function( elems ) {
+
+               // Build a new jQuery matched element set
+               var ret = jQuery.merge( this.constructor(), elems );
+
+               // Add the old object onto the stack (as a reference)
+               ret.prevObject = this;
+               ret.context = this.context;
+
+               // Return the newly-formed element set
+               return ret;
+       },
+
+       // Execute a callback for every element in the matched set.
+       each: function( callback ) {
+               return jQuery.each( this, callback );
+       },
+
+       map: function( callback ) {
+               return this.pushStack( jQuery.map( this, function( elem, i ) {
+                       return callback.call( elem, i, elem );
+               } ) );
+       },
+
+       slice: function() {
+               return this.pushStack( slice.apply( this, arguments ) );
+       },
+
+       first: function() {
+               return this.eq( 0 );
+       },
+
+       last: function() {
+               return this.eq( -1 );
+       },
+
+       eq: function( i ) {
+               var len = this.length,
+                       j = +i + ( i < 0 ? len : 0 );
+               return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );
+       },
+
+       end: function() {
+               return this.prevObject || this.constructor();
+       },
+
+       // For internal use only.
+       // Behaves like an Array's method, not like a jQuery method.
+       push: push,
+       sort: deletedIds.sort,
+       splice: deletedIds.splice
+};
+
+jQuery.extend = jQuery.fn.extend = function() {
+       var src, copyIsArray, copy, name, options, clone,
+               target = arguments[ 0 ] || {},
+               i = 1,
+               length = arguments.length,
+               deep = false;
+
+       // Handle a deep copy situation
+       if ( typeof target === "boolean" ) {
+               deep = target;
+
+               // skip the boolean and the target
+               target = arguments[ i ] || {};
+               i++;
+       }
+
+       // Handle case when target is a string or something (possible in deep copy)
+       if ( typeof target !== "object" && !jQuery.isFunction( target ) ) {
+               target = {};
+       }
+
+       // extend jQuery itself if only one argument is passed
+       if ( i === length ) {
+               target = this;
+               i--;
+       }
+
+       for ( ; i < length; i++ ) {
+
+               // Only deal with non-null/undefined values
+               if ( ( options = arguments[ i ] ) != null ) {
+
+                       // Extend the base object
+                       for ( name in options ) {
+                               src = target[ name ];
+                               copy = options[ name ];
+
+                               // Prevent never-ending loop
+                               if ( target === copy ) {
+                                       continue;
+                               }
+
+                               // Recurse if we're merging plain objects or arrays
+                               if ( deep && copy && ( jQuery.isPlainObject( copy ) ||
+                                       ( copyIsArray = jQuery.isArray( copy ) ) ) ) {
+
+                                       if ( copyIsArray ) {
+                                               copyIsArray = false;
+                                               clone = src && jQuery.isArray( src ) ? src : [];
+
+                                       } else {
+                                               clone = src && jQuery.isPlainObject( src ) ? src : {};
+                                       }
+
+                                       // Never move original objects, clone them
+                                       target[ name ] = jQuery.extend( deep, clone, copy );
+
+                               // Don't bring in undefined values
+                               } else if ( copy !== undefined ) {
+                                       target[ name ] = copy;
+                               }
+                       }
+               }
+       }
+
+       // Return the modified object
+       return target;
+};
+
+jQuery.extend( {
+
+       // Unique for each copy of jQuery on the page
+       expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ),
+
+       // Assume jQuery is ready without the ready module
+       isReady: true,
+
+       error: function( msg ) {
+               throw new Error( msg );
+       },
+
+       noop: function() {},
+
+       // See test/unit/core.js for details concerning isFunction.
+       // Since version 1.3, DOM methods and functions like alert
+       // aren't supported. They return false on IE (#2968).
+       isFunction: function( obj ) {
+               return jQuery.type( obj ) === "function";
+       },
+
+       isArray: Array.isArray || function( obj ) {
+               return jQuery.type( obj ) === "array";
+       },
+
+       isWindow: function( obj ) {
+               /* jshint eqeqeq: false */
+               return obj != null && obj == obj.window;
+       },
+
+       isNumeric: function( obj ) {
+
+               // parseFloat NaNs numeric-cast false positives (null|true|false|"")
+               // ...but misinterprets leading-number strings, particularly hex literals ("0x...")
+               // subtraction forces infinities to NaN
+               // adding 1 corrects loss of precision from parseFloat (#15100)
+               var realStringObj = obj && obj.toString();
+               return !jQuery.isArray( obj ) && ( realStringObj - parseFloat( realStringObj ) + 1 ) >= 0;
+       },
+
+       isEmptyObject: function( obj ) {
+               var name;
+               for ( name in obj ) {
+                       return false;
+               }
+               return true;
+       },
+
+       isPlainObject: function( obj ) {
+               var key;
+
+               // Must be an Object.
+               // Because of IE, we also have to check the presence of the constructor property.
+               // Make sure that DOM nodes and window objects don't pass through, as well
+               if ( !obj || jQuery.type( obj ) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
+                       return false;
+               }
+
+               try {
+
+                       // Not own constructor property must be Object
+                       if ( obj.constructor &&
+                               !hasOwn.call( obj, "constructor" ) &&
+                               !hasOwn.call( obj.constructor.prototype, "isPrototypeOf" ) ) {
+                               return false;
+                       }
+               } catch ( e ) {
+
+                       // IE8,9 Will throw exceptions on certain host objects #9897
+                       return false;
+               }
+
+               // Support: IE<9
+               // Handle iteration over inherited properties before own properties.
+               if ( !support.ownFirst ) {
+                       for ( key in obj ) {
+                               return hasOwn.call( obj, key );
+                       }
+               }
+
+               // Own properties are enumerated firstly, so to speed up,
+               // if last one is own, then all properties are own.
+               for ( key in obj ) {}
+
+               return key === undefined || hasOwn.call( obj, key );
+       },
+
+       type: function( obj ) {
+               if ( obj == null ) {
+                       return obj + "";
+               }
+               return typeof obj === "object" || typeof obj === "function" ?
+                       class2type[ toString.call( obj ) ] || "object" :
+                       typeof obj;
+       },
+
+       // Workarounds based on findings by Jim Driscoll
+       // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context
+       globalEval: function( data ) {
+               if ( data && jQuery.trim( data ) ) {
+
+                       // We use execScript on Internet Explorer
+                       // We use an anonymous function so that context is window
+                       // rather than jQuery in Firefox
+                       ( window.execScript || function( data ) {
+                               window[ "eval" ].call( window, data ); // jscs:ignore requireDotNotation
+                       } )( data );
+               }
+       },
+
+       // Convert dashed to camelCase; used by the css and data modules
+       // Microsoft forgot to hump their vendor prefix (#9572)
+       camelCase: function( string ) {
+               return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
+       },
+
+       nodeName: function( elem, name ) {
+               return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
+       },
+
+       each: function( obj, callback ) {
+               var length, i = 0;
+
+               if ( isArrayLike( obj ) ) {
+                       length = obj.length;
+                       for ( ; i < length; i++ ) {
+                               if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
+                                       break;
+                               }
+                       }
+               } else {
+                       for ( i in obj ) {
+                               if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
+                                       break;
+                               }
+                       }
+               }
+
+               return obj;
+       },
+
+       // Support: Android<4.1, IE<9
+       trim: function( text ) {
+               return text == null ?
+                       "" :
+                       ( text + "" ).replace( rtrim, "" );
+       },
+
+       // results is for internal usage only
+       makeArray: function( arr, results ) {
+               var ret = results || [];
+
+               if ( arr != null ) {
+                       if ( isArrayLike( Object( arr ) ) ) {
+                               jQuery.merge( ret,
+                                       typeof arr === "string" ?
+                                       [ arr ] : arr
+                               );
+                       } else {
+                               push.call( ret, arr );
+                       }
+               }
+
+               return ret;
+       },
+
+       inArray: function( elem, arr, i ) {
+               var len;
+
+               if ( arr ) {
+                       if ( indexOf ) {
+                               return indexOf.call( arr, elem, i );
+                       }
+
+                       len = arr.length;
+                       i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;
+
+                       for ( ; i < len; i++ ) {
+
+                               // Skip accessing in sparse arrays
+                               if ( i in arr && arr[ i ] === elem ) {
+                                       return i;
+                               }
+                       }
+               }
+
+               return -1;
+       },
+
+       merge: function( first, second ) {
+               var len = +second.length,
+                       j = 0,
+                       i = first.length;
+
+               while ( j < len ) {
+                       first[ i++ ] = second[ j++ ];
+               }
+
+               // Support: IE<9
+               // Workaround casting of .length to NaN on otherwise arraylike objects (e.g., NodeLists)
+               if ( len !== len ) {
+                       while ( second[ j ] !== undefined ) {
+                               first[ i++ ] = second[ j++ ];
+                       }
+               }
+
+               first.length = i;
+
+               return first;
+       },
+
+       grep: function( elems, callback, invert ) {
+               var callbackInverse,
+                       matches = [],
+                       i = 0,
+                       length = elems.length,
+                       callbackExpect = !invert;
+
+               // Go through the array, only saving the items
+               // that pass the validator function
+               for ( ; i < length; i++ ) {
+                       callbackInverse = !callback( elems[ i ], i );
+                       if ( callbackInverse !== callbackExpect ) {
+                               matches.push( elems[ i ] );
+                       }
+               }
+
+               return matches;
+       },
+
+       // arg is for internal usage only
+       map: function( elems, callback, arg ) {
+               var length, value,
+                       i = 0,
+                       ret = [];
+
+               // Go through the array, translating each of the items to their new values
+               if ( isArrayLike( elems ) ) {
+                       length = elems.length;
+                       for ( ; i < length; i++ ) {
+                               value = callback( elems[ i ], i, arg );
+
+                               if ( value != null ) {
+                                       ret.push( value );
+                               }
+                       }
+
+               // Go through every key on the object,
+               } else {
+                       for ( i in elems ) {
+                               value = callback( elems[ i ], i, arg );
+
+                               if ( value != null ) {
+                                       ret.push( value );
+                               }
+                       }
+               }
+
+               // Flatten any nested arrays
+               return concat.apply( [], ret );
+       },
+
+       // A global GUID counter for objects
+       guid: 1,
+
+       // Bind a function to a context, optionally partially applying any
+       // arguments.
+       proxy: function( fn, context ) {
+               var args, proxy, tmp;
+
+               if ( typeof context === "string" ) {
+                       tmp = fn[ context ];
+                       context = fn;
+                       fn = tmp;
+               }
+
+               // Quick check to determine if target is callable, in the spec
+               // this throws a TypeError, but we will just return undefined.
+               if ( !jQuery.isFunction( fn ) ) {
+                       return undefined;
+               }
+
+               // Simulated bind
+               args = slice.call( arguments, 2 );
+               proxy = function() {
+                       return fn.apply( context || this, args.concat( slice.call( arguments ) ) );
+               };
+
+               // Set the guid of unique handler to the same of original handler, so it can be removed
+               proxy.guid = fn.guid = fn.guid || jQuery.guid++;
+
+               return proxy;
+       },
+
+       now: function() {
+               return +( new Date() );
+       },
+
+       // jQuery.support is not used in Core but other projects attach their
+       // properties to it so it needs to exist.
+       support: support
+} );
+
+// JSHint would error on this code due to the Symbol not being defined in ES5.
+// Defining this global in .jshintrc would create a danger of using the global
+// unguarded in another place, it seems safer to just disable JSHint for these
+// three lines.
+/* jshint ignore: start */
+if ( typeof Symbol === "function" ) {
+       jQuery.fn[ Symbol.iterator ] = deletedIds[ Symbol.iterator ];
+}
+/* jshint ignore: end */
+
+// Populate the class2type map
+jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ),
+function( i, name ) {
+       class2type[ "[object " + name + "]" ] = name.toLowerCase();
+} );
+
+function isArrayLike( obj ) {
+
+       // Support: iOS 8.2 (not reproducible in simulator)
+       // `in` check used to prevent JIT error (gh-2145)
+       // hasOwn isn't used here due to false negatives
+       // regarding Nodelist length in IE
+       var length = !!obj && "length" in obj && obj.length,
+               type = jQuery.type( obj );
+
+       if ( type === "function" || jQuery.isWindow( obj ) ) {
+               return false;
+       }
+
+       return type === "array" || length === 0 ||
+               typeof length === "number" && length > 0 && ( length - 1 ) in obj;
+}
+var Sizzle =
+/*!
+ * Sizzle CSS Selector Engine v2.2.1
+ * http://sizzlejs.com/
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license
+ * http://jquery.org/license
+ *
+ * Date: 2015-10-17
+ */
+(function( window ) {
+
+var i,
+       support,
+       Expr,
+       getText,
+       isXML,
+       tokenize,
+       compile,
+       select,
+       outermostContext,
+       sortInput,
+       hasDuplicate,
+
+       // Local document vars
+       setDocument,
+       document,
+       docElem,
+       documentIsHTML,
+       rbuggyQSA,
+       rbuggyMatches,
+       matches,
+       contains,
+
+       // Instance-specific data
+       expando = "sizzle" + 1 * new Date(),
+       preferredDoc = window.document,
+       dirruns = 0,
+       done = 0,
+       classCache = createCache(),
+       tokenCache = createCache(),
+       compilerCache = createCache(),
+       sortOrder = function( a, b ) {
+               if ( a === b ) {
+                       hasDuplicate = true;
+               }
+               return 0;
+       },
+
+       // General-purpose constants
+       MAX_NEGATIVE = 1 << 31,
+
+       // Instance methods
+       hasOwn = ({}).hasOwnProperty,
+       arr = [],
+       pop = arr.pop,
+       push_native = arr.push,
+       push = arr.push,
+       slice = arr.slice,
+       // Use a stripped-down indexOf as it's faster than native
+       // http://jsperf.com/thor-indexof-vs-for/5
+       indexOf = function( list, elem ) {
+               var i = 0,
+                       len = list.length;
+               for ( ; i < len; i++ ) {
+                       if ( list[i] === elem ) {
+                               return i;
+                       }
+               }
+               return -1;
+       },
+
+       booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",
+
+       // Regular expressions
+
+       // http://www.w3.org/TR/css3-selectors/#whitespace
+       whitespace = "[\\x20\\t\\r\\n\\f]",
+
+       // http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier
+       identifier = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",
+
+       // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors
+       attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace +
+               // Operator (capture 2)
+               "*([*^$|!~]?=)" + whitespace +
+               // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]"
+               "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace +
+               "*\\]",
+
+       pseudos = ":(" + identifier + ")(?:\\((" +
+               // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:
+               // 1. quoted (capture 3; capture 4 or capture 5)
+               "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" +
+               // 2. simple (capture 6)
+               "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" +
+               // 3. anything else (capture 2)
+               ".*" +
+               ")\\)|)",
+
+       // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
+       rwhitespace = new RegExp( whitespace + "+", "g" ),
+       rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ),
+
+       rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
+       rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ),
+
+       rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ),
+
+       rpseudo = new RegExp( pseudos ),
+       ridentifier = new RegExp( "^" + identifier + "$" ),
+
+       matchExpr = {
+               "ID": new RegExp( "^#(" + identifier + ")" ),
+               "CLASS": new RegExp( "^\\.(" + identifier + ")" ),
+               "TAG": new RegExp( "^(" + identifier + "|[*])" ),
+               "ATTR": new RegExp( "^" + attributes ),
+               "PSEUDO": new RegExp( "^" + pseudos ),
+               "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace +
+                       "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace +
+                       "*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
+               "bool": new RegExp( "^(?:" + booleans + ")$", "i" ),
+               // For use in libraries implementing .is()
+               // We use this for POS matching in `select`
+               "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" +
+                       whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
+       },
+
+       rinputs = /^(?:input|select|textarea|button)$/i,
+       rheader = /^h\d$/i,
+
+       rnative = /^[^{]+\{\s*\[native \w/,
+
+       // Easily-parseable/retrievable ID or TAG or CLASS selectors
+       rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
+
+       rsibling = /[+~]/,
+       rescape = /'|\\/g,
+
+       // CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
+       runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ),
+       funescape = function( _, escaped, escapedWhitespace ) {
+               var high = "0x" + escaped - 0x10000;
+               // NaN means non-codepoint
+               // Support: Firefox<24
+               // Workaround erroneous numeric interpretation of +"0x"
+               return high !== high || escapedWhitespace ?
+                       escaped :
+                       high < 0 ?
+                               // BMP codepoint
+                               String.fromCharCode( high + 0x10000 ) :
+                               // Supplemental Plane codepoint (surrogate pair)
+                               String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
+       },
+
+       // Used for iframes
+       // See setDocument()
+       // Removing the function wrapper causes a "Permission Denied"
+       // error in IE
+       unloadHandler = function() {
+               setDocument();
+       };
+
+// Optimize for push.apply( _, NodeList )
+try {
+       push.apply(
+               (arr = slice.call( preferredDoc.childNodes )),
+               preferredDoc.childNodes
+       );
+       // Support: Android<4.0
+       // Detect silently failing push.apply
+       arr[ preferredDoc.childNodes.length ].nodeType;
+} catch ( e ) {
+       push = { apply: arr.length ?
+
+               // Leverage slice if possible
+               function( target, els ) {
+                       push_native.apply( target, slice.call(els) );
+               } :
+
+               // Support: IE<9
+               // Otherwise append directly
+               function( target, els ) {
+                       var j = target.length,
+                               i = 0;
+                       // Can't trust NodeList.length
+                       while ( (target[j++] = els[i++]) ) {}
+                       target.length = j - 1;
+               }
+       };
+}
+
+function Sizzle( selector, context, results, seed ) {
+       var m, i, elem, nid, nidselect, match, groups, newSelector,
+               newContext = context && context.ownerDocument,
+
+               // nodeType defaults to 9, since context defaults to document
+               nodeType = context ? context.nodeType : 9;
+
+       results = results || [];
+
+       // Return early from calls with invalid selector or context
+       if ( typeof selector !== "string" || !selector ||
+               nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {
+
+               return results;
+       }
+
+       // Try to shortcut find operations (as opposed to filters) in HTML documents
+       if ( !seed ) {
+
+               if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {
+                       setDocument( context );
+               }
+               context = context || document;
+
+               if ( documentIsHTML ) {
+
+                       // If the selector is sufficiently simple, try using a "get*By*" DOM method
+                       // (excepting DocumentFragment context, where the methods don't exist)
+                       if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {
+
+                               // ID selector
+                               if ( (m = match[1]) ) {
+
+                                       // Document context
+                                       if ( nodeType === 9 ) {
+                                               if ( (elem = context.getElementById( m )) ) {
+
+                                                       // Support: IE, Opera, Webkit
+                                                       // TODO: identify versions
+                                                       // getElementById can match elements by name instead of ID
+                                                       if ( elem.id === m ) {
+                                                               results.push( elem );
+                                                               return results;
+                                                       }
+                                               } else {
+                                                       return results;
+                                               }
+
+                                       // Element context
+                                       } else {
+
+                                               // Support: IE, Opera, Webkit
+                                               // TODO: identify versions
+                                               // getElementById can match elements by name instead of ID
+                                               if ( newContext && (elem = newContext.getElementById( m )) &&
+                                                       contains( context, elem ) &&
+                                                       elem.id === m ) {
+
+                                                       results.push( elem );
+                                                       return results;
+                                               }
+                                       }
+
+                               // Type selector
+                               } else if ( match[2] ) {
+                                       push.apply( results, context.getElementsByTagName( selector ) );
+                                       return results;
+
+                               // Class selector
+                               } else if ( (m = match[3]) && support.getElementsByClassName &&
+                                       context.getElementsByClassName ) {
+
+                                       push.apply( results, context.getElementsByClassName( m ) );
+                                       return results;
+                               }
+                       }
+
+                       // Take advantage of querySelectorAll
+                       if ( support.qsa &&
+                               !compilerCache[ selector + " " ] &&
+                               (!rbuggyQSA || !rbuggyQSA.test( selector )) ) {
+
+                               if ( nodeType !== 1 ) {
+                                       newContext = context;
+                                       newSelector = selector;
+
+                               // qSA looks outside Element context, which is not what we want
+                               // Thanks to Andrew Dupont for this workaround technique
+                               // Support: IE <=8
+                               // Exclude object elements
+                               } else if ( context.nodeName.toLowerCase() !== "object" ) {
+
+                                       // Capture the context ID, setting it first if necessary
+                                       if ( (nid = context.getAttribute( "id" )) ) {
+                                               nid = nid.replace( rescape, "\\$&" );
+                                       } else {
+                                               context.setAttribute( "id", (nid = expando) );
+                                       }
+
+                                       // Prefix every selector in the list
+                                       groups = tokenize( selector );
+                                       i = groups.length;
+                                       nidselect = ridentifier.test( nid ) ? "#" + nid : "[id='" + nid + "']";
+                                       while ( i-- ) {
+                                               groups[i] = nidselect + " " + toSelector( groups[i] );
+                                       }
+                                       newSelector = groups.join( "," );
+
+                                       // Expand context for sibling selectors
+                                       newContext = rsibling.test( selector ) && testContext( context.parentNode ) ||
+                                               context;
+                               }
+
+                               if ( newSelector ) {
+                                       try {
+                                               push.apply( results,
+                                                       newContext.querySelectorAll( newSelector )
+                                               );
+                                               return results;
+                                       } catch ( qsaError ) {
+                                       } finally {
+                                               if ( nid === expando ) {
+                                                       context.removeAttribute( "id" );
+                                               }
+                                       }
+                               }
+                       }
+               }
+       }
+
+       // All others
+       return select( selector.replace( rtrim, "$1" ), context, results, seed );
+}
+
+/**
+ * Create key-value caches of limited size
+ * @returns {function(string, object)} Returns the Object data after storing it on itself with
+ *     property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
+ *     deleting the oldest entry
+ */
+function createCache() {
+       var keys = [];
+
+       function cache( key, value ) {
+               // Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
+               if ( keys.push( key + " " ) > Expr.cacheLength ) {
+                       // Only keep the most recent entries
+                       delete cache[ keys.shift() ];
+               }
+               return (cache[ key + " " ] = value);
+       }
+       return cache;
+}
+
+/**
+ * Mark a function for special use by Sizzle
+ * @param {Function} fn The function to mark
+ */
+function markFunction( fn ) {
+       fn[ expando ] = true;
+       return fn;
+}
+
+/**
+ * Support testing using an element
+ * @param {Function} fn Passed the created div and expects a boolean result
+ */
+function assert( fn ) {
+       var div = document.createElement("div");
+
+       try {
+               return !!fn( div );
+       } catch (e) {
+               return false;
+       } finally {
+               // Remove from its parent by default
+               if ( div.parentNode ) {
+                       div.parentNode.removeChild( div );
+               }
+               // release memory in IE
+               div = null;
+       }
+}
+
+/**
+ * Adds the same handler for all of the specified attrs
+ * @param {String} attrs Pipe-separated list of attributes
+ * @param {Function} handler The method that will be applied
+ */
+function addHandle( attrs, handler ) {
+       var arr = attrs.split("|"),
+               i = arr.length;
+
+       while ( i-- ) {
+               Expr.attrHandle[ arr[i] ] = handler;
+       }
+}
+
+/**
+ * Checks document order of two siblings
+ * @param {Element} a
+ * @param {Element} b
+ * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b
+ */
+function siblingCheck( a, b ) {
+       var cur = b && a,
+               diff = cur && a.nodeType === 1 && b.nodeType === 1 &&
+                       ( ~b.sourceIndex || MAX_NEGATIVE ) -
+                       ( ~a.sourceIndex || MAX_NEGATIVE );
+
+       // Use IE sourceIndex if available on both nodes
+       if ( diff ) {
+               return diff;
+       }
+
+       // Check if b follows a
+       if ( cur ) {
+               while ( (cur = cur.nextSibling) ) {
+                       if ( cur === b ) {
+                               return -1;
+                       }
+               }
+       }
+
+       return a ? 1 : -1;
+}
+
+/**
+ * Returns a function to use in pseudos for input types
+ * @param {String} type
+ */
+function createInputPseudo( type ) {
+       return function( elem ) {
+               var name = elem.nodeName.toLowerCase();
+               return name === "input" && elem.type === type;
+       };
+}
+
+/**
+ * Returns a function to use in pseudos for buttons
+ * @param {String} type
+ */
+function createButtonPseudo( type ) {
+       return function( elem ) {
+               var name = elem.nodeName.toLowerCase();
+               return (name === "input" || name === "button") && elem.type === type;
+       };
+}
+
+/**
+ * Returns a function to use in pseudos for positionals
+ * @param {Function} fn
+ */
+function createPositionalPseudo( fn ) {
+       return markFunction(function( argument ) {
+               argument = +argument;
+               return markFunction(function( seed, matches ) {
+                       var j,
+                               matchIndexes = fn( [], seed.length, argument ),
+                               i = matchIndexes.length;
+
+                       // Match elements found at the specified indexes
+                       while ( i-- ) {
+                               if ( seed[ (j = matchIndexes[i]) ] ) {
+                                       seed[j] = !(matches[j] = seed[j]);
+                               }
+                       }
+               });
+       });
+}
+
+/**
+ * Checks a node for validity as a Sizzle context
+ * @param {Element|Object=} context
+ * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value
+ */
+function testContext( context ) {
+       return context && typeof context.getElementsByTagName !== "undefined" && context;
+}
+
+// Expose support vars for convenience
+support = Sizzle.support = {};
+
+/**
+ * Detects XML nodes
+ * @param {Element|Object} elem An element or a document
+ * @returns {Boolean} True iff elem is a non-HTML XML node
+ */
+isXML = Sizzle.isXML = function( elem ) {
+       // documentElement is verified for cases where it doesn't yet exist
+       // (such as loading iframes in IE - #4833)
+       var documentElement = elem && (elem.ownerDocument || elem).documentElement;
+       return documentElement ? documentElement.nodeName !== "HTML" : false;
+};
+
+/**
+ * Sets document-related variables once based on the current document
+ * @param {Element|Object} [doc] An element or document object to use to set the document
+ * @returns {Object} Returns the current document
+ */
+setDocument = Sizzle.setDocument = function( node ) {
+       var hasCompare, parent,
+               doc = node ? node.ownerDocument || node : preferredDoc;
+
+       // Return early if doc is invalid or already selected
+       if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {
+               return document;
+       }
+
+       // Update global variables
+       document = doc;
+       docElem = document.documentElement;
+       documentIsHTML = !isXML( document );
+
+       // Support: IE 9-11, Edge
+       // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936)
+       if ( (parent = document.defaultView) && parent.top !== parent ) {
+               // Support: IE 11
+               if ( parent.addEventListener ) {
+                       parent.addEventListener( "unload", unloadHandler, false );
+
+               // Support: IE 9 - 10 only
+               } else if ( parent.attachEvent ) {
+                       parent.attachEvent( "onunload", unloadHandler );
+               }
+       }
+
+       /* Attributes
+       ---------------------------------------------------------------------- */
+
+       // Support: IE<8
+       // Verify that getAttribute really returns attributes and not properties
+       // (excepting IE8 booleans)
+       support.attributes = assert(function( div ) {
+               div.className = "i";
+               return !div.getAttribute("className");
+       });
+
+       /* getElement(s)By*
+       ---------------------------------------------------------------------- */
+
+       // Check if getElementsByTagName("*") returns only elements
+       support.getElementsByTagName = assert(function( div ) {
+               div.appendChild( document.createComment("") );
+               return !div.getElementsByTagName("*").length;
+       });
+
+       // Support: IE<9
+       support.getElementsByClassName = rnative.test( document.getElementsByClassName );
+
+       // Support: IE<10
+       // Check if getElementById returns elements by name
+       // The broken getElementById methods don't pick up programatically-set names,
+       // so use a roundabout getElementsByName test
+       support.getById = assert(function( div ) {
+               docElem.appendChild( div ).id = expando;
+               return !document.getElementsByName || !document.getElementsByName( expando ).length;
+       });
+
+       // ID find and filter
+       if ( support.getById ) {
+               Expr.find["ID"] = function( id, context ) {
+                       if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
+                               var m = context.getElementById( id );
+                               return m ? [ m ] : [];
+                       }
+               };
+               Expr.filter["ID"] = function( id ) {
+                       var attrId = id.replace( runescape, funescape );
+                       return function( elem ) {
+                               return elem.getAttribute("id") === attrId;
+                       };
+               };
+       } else {
+               // Support: IE6/7
+               // getElementById is not reliable as a find shortcut
+               delete Expr.find["ID"];
+
+               Expr.filter["ID"] =  function( id ) {
+                       var attrId = id.replace( runescape, funescape );
+                       return function( elem ) {
+                               var node = typeof elem.getAttributeNode !== "undefined" &&
+                                       elem.getAttributeNode("id");
+                               return node && node.value === attrId;
+                       };
+               };
+       }
+
+       // Tag
+       Expr.find["TAG"] = support.getElementsByTagName ?
+               function( tag, context ) {
+                       if ( typeof context.getElementsByTagName !== "undefined" ) {
+                               return context.getElementsByTagName( tag );
+
+                       // DocumentFragment nodes don't have gEBTN
+                       } else if ( support.qsa ) {
+                               return context.querySelectorAll( tag );
+                       }
+               } :
+
+               function( tag, context ) {
+                       var elem,
+                               tmp = [],
+                               i = 0,
+                               // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too
+                               results = context.getElementsByTagName( tag );
+
+                       // Filter out possible comments
+                       if ( tag === "*" ) {
+                               while ( (elem = results[i++]) ) {
+                                       if ( elem.nodeType === 1 ) {
+                                               tmp.push( elem );
+                                       }
+                               }
+
+                               return tmp;
+                       }
+                       return results;
+               };
+
+       // Class
+       Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) {
+               if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) {
+                       return context.getElementsByClassName( className );
+               }
+       };
+
+       /* QSA/matchesSelector
+       ---------------------------------------------------------------------- */
+
+       // QSA and matchesSelector support
+
+       // matchesSelector(:active) reports false when true (IE9/Opera 11.5)
+       rbuggyMatches = [];
+
+       // qSa(:focus) reports false when true (Chrome 21)
+       // We allow this because of a bug in IE8/9 that throws an error
+       // whenever `document.activeElement` is accessed on an iframe
+       // So, we allow :focus to pass through QSA all the time to avoid the IE error
+       // See http://bugs.jquery.com/ticket/13378
+       rbuggyQSA = [];
+
+       if ( (support.qsa = rnative.test( document.querySelectorAll )) ) {
+               // Build QSA regex
+               // Regex strategy adopted from Diego Perini
+               assert(function( div ) {
+                       // Select is set to empty string on purpose
+                       // This is to test IE's treatment of not explicitly
+                       // setting a boolean content attribute,
+                       // since its presence should be enough
+                       // http://bugs.jquery.com/ticket/12359
+                       docElem.appendChild( div ).innerHTML = "<a id='" + expando + "'></a>" +
+                               "<select id='" + expando + "-\r\\' msallowcapture=''>" +
+                               "<option selected=''></option></select>";
+
+                       // Support: IE8, Opera 11-12.16
+                       // Nothing should be selected when empty strings follow ^= or $= or *=
+                       // The test attribute must be unknown in Opera but "safe" for WinRT
+                       // http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section
+                       if ( div.querySelectorAll("[msallowcapture^='']").length ) {
+                               rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" );
+                       }
+
+                       // Support: IE8
+                       // Boolean attributes and "value" are not treated correctly
+                       if ( !div.querySelectorAll("[selected]").length ) {
+                               rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" );
+                       }
+
+                       // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+
+                       if ( !div.querySelectorAll( "[id~=" + expando + "-]" ).length ) {
+                               rbuggyQSA.push("~=");
+                       }
+
+                       // Webkit/Opera - :checked should return selected option elements
+                       // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
+                       // IE8 throws error here and will not see later tests
+                       if ( !div.querySelectorAll(":checked").length ) {
+                               rbuggyQSA.push(":checked");
+                       }
+
+                       // Support: Safari 8+, iOS 8+
+                       // https://bugs.webkit.org/show_bug.cgi?id=136851
+                       // In-page `selector#id sibing-combinator selector` fails
+                       if ( !div.querySelectorAll( "a#" + expando + "+*" ).length ) {
+                               rbuggyQSA.push(".#.+[+~]");
+                       }
+               });
+
+               assert(function( div ) {
+                       // Support: Windows 8 Native Apps
+                       // The type and name attributes are restricted during .innerHTML assignment
+                       var input = document.createElement("input");
+                       input.setAttribute( "type", "hidden" );
+                       div.appendChild( input ).setAttribute( "name", "D" );
+
+                       // Support: IE8
+                       // Enforce case-sensitivity of name attribute
+                       if ( div.querySelectorAll("[name=d]").length ) {
+                               rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" );
+                       }
+
+                       // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)
+                       // IE8 throws error here and will not see later tests
+                       if ( !div.querySelectorAll(":enabled").length ) {
+                               rbuggyQSA.push( ":enabled", ":disabled" );
+                       }
+
+                       // Opera 10-11 does not throw on post-comma invalid pseudos
+                       div.querySelectorAll("*,:x");
+                       rbuggyQSA.push(",.*:");
+               });
+       }
+
+       if ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||
+               docElem.webkitMatchesSelector ||
+               docElem.mozMatchesSelector ||
+               docElem.oMatchesSelector ||
+               docElem.msMatchesSelector) )) ) {
+
+               assert(function( div ) {
+                       // Check to see if it's possible to do matchesSelector
+                       // on a disconnected node (IE 9)
+                       support.disconnectedMatch = matches.call( div, "div" );
+
+                       // This should fail with an exception
+                       // Gecko does not error, returns false instead
+                       matches.call( div, "[s!='']:x" );
+                       rbuggyMatches.push( "!=", pseudos );
+               });
+       }
+
+       rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") );
+       rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") );
+
+       /* Contains
+       ---------------------------------------------------------------------- */
+       hasCompare = rnative.test( docElem.compareDocumentPosition );
+
+       // Element contains another
+       // Purposefully self-exclusive
+       // As in, an element does not contain itself
+       contains = hasCompare || rnative.test( docElem.contains ) ?
+               function( a, b ) {
+                       var adown = a.nodeType === 9 ? a.documentElement : a,
+                               bup = b && b.parentNode;
+                       return a === bup || !!( bup && bup.nodeType === 1 && (
+                               adown.contains ?
+                                       adown.contains( bup ) :
+                                       a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16
+                       ));
+               } :
+               function( a, b ) {
+                       if ( b ) {
+                               while ( (b = b.parentNode) ) {
+                                       if ( b === a ) {
+                                               return true;
+                                       }
+                               }
+                       }
+                       return false;
+               };
+
+       /* Sorting
+       ---------------------------------------------------------------------- */
+
+       // Document order sorting
+       sortOrder = hasCompare ?
+       function( a, b ) {
+
+               // Flag for duplicate removal
+               if ( a === b ) {
+                       hasDuplicate = true;
+                       return 0;
+               }
+
+               // Sort on method existence if only one input has compareDocumentPosition
+               var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;
+               if ( compare ) {
+                       return compare;
+               }
+
+               // Calculate position if both inputs belong to the same document
+               compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?
+                       a.compareDocumentPosition( b ) :
+
+                       // Otherwise we know they are disconnected
+                       1;
+
+               // Disconnected nodes
+               if ( compare & 1 ||
+                       (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {
+
+                       // Choose the first element that is related to our preferred document
+                       if ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {
+                               return -1;
+                       }
+                       if ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {
+                               return 1;
+                       }
+
+                       // Maintain original order
+                       return sortInput ?
+                               ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
+                               0;
+               }
+
+               return compare & 4 ? -1 : 1;
+       } :
+       function( a, b ) {
+               // Exit early if the nodes are identical
+               if ( a === b ) {
+                       hasDuplicate = true;
+                       return 0;
+               }
+
+               var cur,
+                       i = 0,
+                       aup = a.parentNode,
+                       bup = b.parentNode,
+                       ap = [ a ],
+                       bp = [ b ];
+
+               // Parentless nodes are either documents or disconnected
+               if ( !aup || !bup ) {
+                       return a === document ? -1 :
+                               b === document ? 1 :
+                               aup ? -1 :
+                               bup ? 1 :
+                               sortInput ?
+                               ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
+                               0;
+
+               // If the nodes are siblings, we can do a quick check
+               } else if ( aup === bup ) {
+                       return siblingCheck( a, b );
+               }
+
+               // Otherwise we need full lists of their ancestors for comparison
+               cur = a;
+               while ( (cur = cur.parentNode) ) {
+                       ap.unshift( cur );
+               }
+               cur = b;
+               while ( (cur = cur.parentNode) ) {
+                       bp.unshift( cur );
+               }
+
+               // Walk down the tree looking for a discrepancy
+               while ( ap[i] === bp[i] ) {
+                       i++;
+               }
+
+               return i ?
+                       // Do a sibling check if the nodes have a common ancestor
+                       siblingCheck( ap[i], bp[i] ) :
+
+                       // Otherwise nodes in our document sort first
+                       ap[i] === preferredDoc ? -1 :
+                       bp[i] === preferredDoc ? 1 :
+                       0;
+       };
+
+       return document;
+};
+
+Sizzle.matches = function( expr, elements ) {
+       return Sizzle( expr, null, null, elements );
+};
+
+Sizzle.matchesSelector = function( elem, expr ) {
+       // Set document vars if needed
+       if ( ( elem.ownerDocument || elem ) !== document ) {
+               setDocument( elem );
+       }
+
+       // Make sure that attribute selectors are quoted
+       expr = expr.replace( rattributeQuotes, "='$1']" );
+
+       if ( support.matchesSelector && documentIsHTML &&
+               !compilerCache[ expr + " " ] &&
+               ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&
+               ( !rbuggyQSA     || !rbuggyQSA.test( expr ) ) ) {
+
+               try {
+                       var ret = matches.call( elem, expr );
+
+                       // IE 9's matchesSelector returns false on disconnected nodes
+                       if ( ret || support.disconnectedMatch ||
+                                       // As well, disconnected nodes are said to be in a document
+                                       // fragment in IE 9
+                                       elem.document && elem.document.nodeType !== 11 ) {
+                               return ret;
+                       }
+               } catch (e) {}
+       }
+
+       return Sizzle( expr, document, null, [ elem ] ).length > 0;
+};
+
+Sizzle.contains = function( context, elem ) {
+       // Set document vars if needed
+       if ( ( context.ownerDocument || context ) !== document ) {
+               setDocument( context );
+       }
+       return contains( context, elem );
+};
+
+Sizzle.attr = function( elem, name ) {
+       // Set document vars if needed
+       if ( ( elem.ownerDocument || elem ) !== document ) {
+               setDocument( elem );
+       }
+
+       var fn = Expr.attrHandle[ name.toLowerCase() ],
+               // Don't get fooled by Object.prototype properties (jQuery #13807)
+               val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?
+                       fn( elem, name, !documentIsHTML ) :
+                       undefined;
+
+       return val !== undefined ?
+               val :
+               support.attributes || !documentIsHTML ?
+                       elem.getAttribute( name ) :
+                       (val = elem.getAttributeNode(name)) && val.specified ?
+                               val.value :
+                               null;
+};
+
+Sizzle.error = function( msg ) {
+       throw new Error( "Syntax error, unrecognized expression: " + msg );
+};
+
+/**
+ * Document sorting and removing duplicates
+ * @param {ArrayLike} results
+ */
+Sizzle.uniqueSort = function( results ) {
+       var elem,
+               duplicates = [],
+               j = 0,
+               i = 0;
+
+       // Unless we *know* we can detect duplicates, assume their presence
+       hasDuplicate = !support.detectDuplicates;
+       sortInput = !support.sortStable && results.slice( 0 );
+       results.sort( sortOrder );
+
+       if ( hasDuplicate ) {
+               while ( (elem = results[i++]) ) {
+                       if ( elem === results[ i ] ) {
+                               j = duplicates.push( i );
+                       }
+               }
+               while ( j-- ) {
+                       results.splice( duplicates[ j ], 1 );
+               }
+       }
+
+       // Clear input after sorting to release objects
+       // See https://github.com/jquery/sizzle/pull/225
+       sortInput = null;
+
+       return results;
+};
+
+/**
+ * Utility function for retrieving the text value of an array of DOM nodes
+ * @param {Array|Element} elem
+ */
+getText = Sizzle.getText = function( elem ) {
+       var node,
+               ret = "",
+               i = 0,
+               nodeType = elem.nodeType;
+
+       if ( !nodeType ) {
+               // If no nodeType, this is expected to be an array
+               while ( (node = elem[i++]) ) {
+                       // Do not traverse comment nodes
+                       ret += getText( node );
+               }
+       } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
+               // Use textContent for elements
+               // innerText usage removed for consistency of new lines (jQuery #11153)
+               if ( typeof elem.textContent === "string" ) {
+                       return elem.textContent;
+               } else {
+                       // Traverse its children
+                       for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
+                               ret += getText( elem );
+                       }
+               }
+       } else if ( nodeType === 3 || nodeType === 4 ) {
+               return elem.nodeValue;
+       }
+       // Do not include comment or processing instruction nodes
+
+       return ret;
+};
+
+Expr = Sizzle.selectors = {
+
+       // Can be adjusted by the user
+       cacheLength: 50,
+
+       createPseudo: markFunction,
+
+       match: matchExpr,
+
+       attrHandle: {},
+
+       find: {},
+
+       relative: {
+               ">": { dir: "parentNode", first: true },
+               " ": { dir: "parentNode" },
+               "+": { dir: "previousSibling", first: true },
+               "~": { dir: "previousSibling" }
+       },
+
+       preFilter: {
+               "ATTR": function( match ) {
+                       match[1] = match[1].replace( runescape, funescape );
+
+                       // Move the given value to match[3] whether quoted or unquoted
+                       match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape );
+
+                       if ( match[2] === "~=" ) {
+                               match[3] = " " + match[3] + " ";
+                       }
+
+                       return match.slice( 0, 4 );
+               },
+
+               "CHILD": function( match ) {
+                       /* matches from matchExpr["CHILD"]
+                               1 type (only|nth|...)
+                               2 what (child|of-type)
+                               3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
+                               4 xn-component of xn+y argument ([+-]?\d*n|)
+                               5 sign of xn-component
+                               6 x of xn-component
+                               7 sign of y-component
+                               8 y of y-component
+                       */
+                       match[1] = match[1].toLowerCase();
+
+                       if ( match[1].slice( 0, 3 ) === "nth" ) {
+                               // nth-* requires argument
+                               if ( !match[3] ) {
+                                       Sizzle.error( match[0] );
+                               }
+
+                               // numeric x and y parameters for Expr.filter.CHILD
+                               // remember that false/true cast respectively to 0/1
+                               match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) );
+                               match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" );
+
+                       // other types prohibit arguments
+                       } else if ( match[3] ) {
+                               Sizzle.error( match[0] );
+                       }
+
+                       return match;
+               },
+
+               "PSEUDO": function( match ) {
+                       var excess,
+                               unquoted = !match[6] && match[2];
+
+                       if ( matchExpr["CHILD"].test( match[0] ) ) {
+                               return null;
+                       }
+
+                       // Accept quoted arguments as-is
+                       if ( match[3] ) {
+                               match[2] = match[4] || match[5] || "";
+
+                       // Strip excess characters from unquoted arguments
+                       } else if ( unquoted && rpseudo.test( unquoted ) &&
+                               // Get excess from tokenize (recursively)
+                               (excess = tokenize( unquoted, true )) &&
+                               // advance to the next closing parenthesis
+                               (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) {
+
+                               // excess is a negative index
+                               match[0] = match[0].slice( 0, excess );
+                               match[2] = unquoted.slice( 0, excess );
+                       }
+
+                       // Return only captures needed by the pseudo filter method (type and argument)
+                       return match.slice( 0, 3 );
+               }
+       },
+
+       filter: {
+
+               "TAG": function( nodeNameSelector ) {
+                       var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();
+                       return nodeNameSelector === "*" ?
+                               function() { return true; } :
+                               function( elem ) {
+                                       return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
+                               };
+               },
+
+               "CLASS": function( className ) {
+                       var pattern = classCache[ className + " " ];
+
+                       return pattern ||
+                               (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) &&
+                               classCache( className, function( elem ) {
+                                       return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" );
+                               });
+               },
+
+               "ATTR": function( name, operator, check ) {
+                       return function( elem ) {
+                               var result = Sizzle.attr( elem, name );
+
+                               if ( result == null ) {
+                                       return operator === "!=";
+                               }
+                               if ( !operator ) {
+                                       return true;
+                               }
+
+                               result += "";
+
+                               return operator === "=" ? result === check :
+                                       operator === "!=" ? result !== check :
+                                       operator === "^=" ? check && result.indexOf( check ) === 0 :
+                                       operator === "*=" ? check && result.indexOf( check ) > -1 :
+                                       operator === "$=" ? check && result.slice( -check.length ) === check :
+                                       operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 :
+                                       operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" :
+                                       false;
+                       };
+               },
+
+               "CHILD": function( type, what, argument, first, last ) {
+                       var simple = type.slice( 0, 3 ) !== "nth",
+                               forward = type.slice( -4 ) !== "last",
+                               ofType = what === "of-type";
+
+                       return first === 1 && last === 0 ?
+
+                               // Shortcut for :nth-*(n)
+                               function( elem ) {
+                                       return !!elem.parentNode;
+                               } :
+
+                               function( elem, context, xml ) {
+                                       var cache, uniqueCache, outerCache, node, nodeIndex, start,
+                                               dir = simple !== forward ? "nextSibling" : "previousSibling",
+                                               parent = elem.parentNode,
+                                               name = ofType && elem.nodeName.toLowerCase(),
+                                               useCache = !xml && !ofType,
+                                               diff = false;
+
+                                       if ( parent ) {
+
+                                               // :(first|last|only)-(child|of-type)
+                                               if ( simple ) {
+                                                       while ( dir ) {
+                                                               node = elem;
+                                                               while ( (node = node[ dir ]) ) {
+                                                                       if ( ofType ?
+                                                                               node.nodeName.toLowerCase() === name :
+                                                                               node.nodeType === 1 ) {
+
+                                                                               return false;
+                                                                       }
+                                                               }
+                                                               // Reverse direction for :only-* (if we haven't yet done so)
+                                                               start = dir = type === "only" && !start && "nextSibling";
+                                                       }
+                                                       return true;
+                                               }
+
+                                               start = [ forward ? parent.firstChild : parent.lastChild ];
+
+                                               // non-xml :nth-child(...) stores cache data on `parent`
+                                               if ( forward && useCache ) {
+
+                                                       // Seek `elem` from a previously-cached index
+
+                                                       // ...in a gzip-friendly way
+                                                       node = parent;
+                                                       outerCache = node[ expando ] || (node[ expando ] = {});
+
+                                                       // Support: IE <9 only
+                                                       // Defend against cloned attroperties (jQuery gh-1709)
+                                                       uniqueCache = outerCache[ node.uniqueID ] ||
+                                                               (outerCache[ node.uniqueID ] = {});
+
+                                                       cache = uniqueCache[ type ] || [];
+                                                       nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
+                                                       diff = nodeIndex && cache[ 2 ];
+                                                       node = nodeIndex && parent.childNodes[ nodeIndex ];
+
+                                                       while ( (node = ++nodeIndex && node && node[ dir ] ||
+
+                                                               // Fallback to seeking `elem` from the start
+                                                               (diff = nodeIndex = 0) || start.pop()) ) {
+
+                                                               // When found, cache indexes on `parent` and break
+                                                               if ( node.nodeType === 1 && ++diff && node === elem ) {
+                                                                       uniqueCache[ type ] = [ dirruns, nodeIndex, diff ];
+                                                                       break;
+                                                               }
+                                                       }
+
+                                               } else {
+                                                       // Use previously-cached element index if available
+                                                       if ( useCache ) {
+                                                               // ...in a gzip-friendly way
+                                                               node = elem;
+                                                               outerCache = node[ expando ] || (node[ expando ] = {});
+
+                                                               // Support: IE <9 only
+                                                               // Defend against cloned attroperties (jQuery gh-1709)
+                                                               uniqueCache = outerCache[ node.uniqueID ] ||
+                                                                       (outerCache[ node.uniqueID ] = {});
+
+                                                               cache = uniqueCache[ type ] || [];
+                                                               nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
+                                                               diff = nodeIndex;
+                                                       }
+
+                                                       // xml :nth-child(...)
+                                                       // or :nth-last-child(...) or :nth(-last)?-of-type(...)
+                                                       if ( diff === false ) {
+                                                               // Use the same loop as above to seek `elem` from the start
+                                                               while ( (node = ++nodeIndex && node && node[ dir ] ||
+                                                                       (diff = nodeIndex = 0) || start.pop()) ) {
+
+                                                                       if ( ( ofType ?
+                                                                               node.nodeName.toLowerCase() === name :
+                                                                               node.nodeType === 1 ) &&
+                                                                               ++diff ) {
+
+                                                                               // Cache the index of each encountered element
+                                                                               if ( useCache ) {
+                                                                                       outerCache = node[ expando ] || (node[ expando ] = {});
+
+                                                                                       // Support: IE <9 only
+                                                                                       // Defend against cloned attroperties (jQuery gh-1709)
+                                                                                       uniqueCache = outerCache[ node.uniqueID ] ||
+                                                                                               (outerCache[ node.uniqueID ] = {});
+
+                                                                                       uniqueCache[ type ] = [ dirruns, diff ];
+                                                                               }
+
+                                                                               if ( node === elem ) {
+                                                                                       break;
+                                                                               }
+                                                                       }
+                                                               }
+                                                       }
+                                               }
+
+                                               // Incorporate the offset, then check against cycle size
+                                               diff -= last;
+                                               return diff === first || ( diff % first === 0 && diff / first >= 0 );
+                                       }
+                               };
+               },
+
+               "PSEUDO": function( pseudo, argument ) {
+                       // pseudo-class names are case-insensitive
+                       // http://www.w3.org/TR/selectors/#pseudo-classes
+                       // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
+                       // Remember that setFilters inherits from pseudos
+                       var args,
+                               fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||
+                                       Sizzle.error( "unsupported pseudo: " + pseudo );
+
+                       // The user may use createPseudo to indicate that
+                       // arguments are needed to create the filter function
+                       // just as Sizzle does
+                       if ( fn[ expando ] ) {
+                               return fn( argument );
+                       }
+
+                       // But maintain support for old signatures
+                       if ( fn.length > 1 ) {
+                               args = [ pseudo, pseudo, "", argument ];
+                               return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?
+                                       markFunction(function( seed, matches ) {
+                                               var idx,
+                                                       matched = fn( seed, argument ),
+                                                       i = matched.length;
+                                               while ( i-- ) {
+                                                       idx = indexOf( seed, matched[i] );
+                                                       seed[ idx ] = !( matches[ idx ] = matched[i] );
+                                               }
+                                       }) :
+                                       function( elem ) {
+                                               return fn( elem, 0, args );
+                                       };
+                       }
+
+                       return fn;
+               }
+       },
+
+       pseudos: {
+               // Potentially complex pseudos
+               "not": markFunction(function( selector ) {
+                       // Trim the selector passed to compile
+                       // to avoid treating leading and trailing
+                       // spaces as combinators
+                       var input = [],
+                               results = [],
+                               matcher = compile( selector.replace( rtrim, "$1" ) );
+
+                       return matcher[ expando ] ?
+                               markFunction(function( seed, matches, context, xml ) {
+                                       var elem,
+                                               unmatched = matcher( seed, null, xml, [] ),
+                                               i = seed.length;
+
+                                       // Match elements unmatched by `matcher`
+                                       while ( i-- ) {
+                                               if ( (elem = unmatched[i]) ) {
+                                                       seed[i] = !(matches[i] = elem);
+                                               }
+                                       }
+                               }) :
+                               function( elem, context, xml ) {
+                                       input[0] = elem;
+                                       matcher( input, null, xml, results );
+                                       // Don't keep the element (issue #299)
+                                       input[0] = null;
+                                       return !results.pop();
+                               };
+               }),
+
+               "has": markFunction(function( selector ) {
+                       return function( elem ) {
+                               return Sizzle( selector, elem ).length > 0;
+                       };
+               }),
+
+               "contains": markFunction(function( text ) {
+                       text = text.replace( runescape, funescape );
+                       return function( elem ) {
+                               return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;
+                       };
+               }),
+
+               // "Whether an element is represented by a :lang() selector
+               // is based solely on the element's language value
+               // being equal to the identifier C,
+               // or beginning with the identifier C immediately followed by "-".
+               // The matching of C against the element's language value is performed case-insensitively.
+               // The identifier C does not have to be a valid language name."
+               // http://www.w3.org/TR/selectors/#lang-pseudo
+               "lang": markFunction( function( lang ) {
+                       // lang value must be a valid identifier
+                       if ( !ridentifier.test(lang || "") ) {
+                               Sizzle.error( "unsupported lang: " + lang );
+                       }
+                       lang = lang.replace( runescape, funescape ).toLowerCase();
+                       return function( elem ) {
+                               var elemLang;
+                               do {
+                                       if ( (elemLang = documentIsHTML ?
+                                               elem.lang :
+                                               elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) {
+
+                                               elemLang = elemLang.toLowerCase();
+                                               return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0;
+                                       }
+                               } while ( (elem = elem.parentNode) && elem.nodeType === 1 );
+                               return false;
+                       };
+               }),
+
+               // Miscellaneous
+               "target": function( elem ) {
+                       var hash = window.location && window.location.hash;
+                       return hash && hash.slice( 1 ) === elem.id;
+               },
+
+               "root": function( elem ) {
+                       return elem === docElem;
+               },
+
+               "focus": function( elem ) {
+                       return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);
+               },
+
+               // Boolean properties
+               "enabled": function( elem ) {
+                       return elem.disabled === false;
+               },
+
+               "disabled": function( elem ) {
+                       return elem.disabled === true;
+               },
+
+               "checked": function( elem ) {
+                       // In CSS3, :checked should return both checked and selected elements
+                       // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
+                       var nodeName = elem.nodeName.toLowerCase();
+                       return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected);
+               },
+
+               "selected": function( elem ) {
+                       // Accessing this property makes selected-by-default
+                       // options in Safari work properly
+                       if ( elem.parentNode ) {
+                               elem.parentNode.selectedIndex;
+                       }
+
+                       return elem.selected === true;
+               },
+
+               // Contents
+               "empty": function( elem ) {
+                       // http://www.w3.org/TR/selectors/#empty-pseudo
+                       // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),
+                       //   but not by others (comment: 8; processing instruction: 7; etc.)
+                       // nodeType < 6 works because attributes (2) do not appear as children
+                       for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
+                               if ( elem.nodeType < 6 ) {
+                                       return false;
+                               }
+                       }
+                       return true;
+               },
+
+               "parent": function( elem ) {
+                       return !Expr.pseudos["empty"]( elem );
+               },
+
+               // Element/input types
+               "header": function( elem ) {
+                       return rheader.test( elem.nodeName );
+               },
+
+               "input": function( elem ) {
+                       return rinputs.test( elem.nodeName );
+               },
+
+               "button": function( elem ) {
+                       var name = elem.nodeName.toLowerCase();
+                       return name === "input" && elem.type === "button" || name === "button";
+               },
+
+               "text": function( elem ) {
+                       var attr;
+                       return elem.nodeName.toLowerCase() === "input" &&
+                               elem.type === "text" &&
+
+                               // Support: IE<8
+                               // New HTML5 attribute values (e.g., "search") appear with elem.type === "text"
+                               ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" );
+               },
+
+               // Position-in-collection
+               "first": createPositionalPseudo(function() {
+                       return [ 0 ];
+               }),
+
+               "last": createPositionalPseudo(function( matchIndexes, length ) {
+                       return [ length - 1 ];
+               }),
+
+               "eq": createPositionalPseudo(function( matchIndexes, length, argument ) {
+                       return [ argument < 0 ? argument + length : argument ];
+               }),
+
+               "even": createPositionalPseudo(function( matchIndexes, length ) {
+                       var i = 0;
+                       for ( ; i < length; i += 2 ) {
+                               matchIndexes.push( i );
+                       }
+                       return matchIndexes;
+               }),
+
+               "odd": createPositionalPseudo(function( matchIndexes, length ) {
+                       var i = 1;
+                       for ( ; i < length; i += 2 ) {
+                               matchIndexes.push( i );
+                       }
+                       return matchIndexes;
+               }),
+
+               "lt": createPositionalPseudo(function( matchIndexes, length, argument ) {
+                       var i = argument < 0 ? argument + length : argument;
+                       for ( ; --i >= 0; ) {
+                               matchIndexes.push( i );
+                       }
+                       return matchIndexes;
+               }),
+
+               "gt": createPositionalPseudo(function( matchIndexes, length, argument ) {
+                       var i = argument < 0 ? argument + length : argument;
+                       for ( ; ++i < length; ) {
+                               matchIndexes.push( i );
+                       }
+                       return matchIndexes;
+               })
+       }
+};
+
+Expr.pseudos["nth"] = Expr.pseudos["eq"];
+
+// Add button/input type pseudos
+for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {
+       Expr.pseudos[ i ] = createInputPseudo( i );
+}
+for ( i in { submit: true, reset: true } ) {
+       Expr.pseudos[ i ] = createButtonPseudo( i );
+}
+
+// Easy API for creating new setFilters
+function setFilters() {}
+setFilters.prototype = Expr.filters = Expr.pseudos;
+Expr.setFilters = new setFilters();
+
+tokenize = Sizzle.tokenize = function( selector, parseOnly ) {
+       var matched, match, tokens, type,
+               soFar, groups, preFilters,
+               cached = tokenCache[ selector + " " ];
+
+       if ( cached ) {
+               return parseOnly ? 0 : cached.slice( 0 );
+       }
+
+       soFar = selector;
+       groups = [];
+       preFilters = Expr.preFilter;
+
+       while ( soFar ) {
+
+               // Comma and first run
+               if ( !matched || (match = rcomma.exec( soFar )) ) {
+                       if ( match ) {
+                               // Don't consume trailing commas as valid
+                               soFar = soFar.slice( match[0].length ) || soFar;
+                       }
+                       groups.push( (tokens = []) );
+               }
+
+               matched = false;
+
+               // Combinators
+               if ( (match = rcombinators.exec( soFar )) ) {
+                       matched = match.shift();
+                       tokens.push({
+                               value: matched,
+                               // Cast descendant combinators to space
+                               type: match[0].replace( rtrim, " " )
+                       });
+                       soFar = soFar.slice( matched.length );
+               }
+
+               // Filters
+               for ( type in Expr.filter ) {
+                       if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||
+                               (match = preFilters[ type ]( match ))) ) {
+                               matched = match.shift();
+                               tokens.push({
+                                       value: matched,
+                                       type: type,
+                                       matches: match
+                               });
+                               soFar = soFar.slice( matched.length );
+                       }
+               }
+
+               if ( !matched ) {
+                       break;
+               }
+       }
+
+       // Return the length of the invalid excess
+       // if we're just parsing
+       // Otherwise, throw an error or return tokens
+       return parseOnly ?
+               soFar.length :
+               soFar ?
+                       Sizzle.error( selector ) :
+                       // Cache the tokens
+                       tokenCache( selector, groups ).slice( 0 );
+};
+
+function toSelector( tokens ) {
+       var i = 0,
+               len = tokens.length,
+               selector = "";
+       for ( ; i < len; i++ ) {
+               selector += tokens[i].value;
+       }
+       return selector;
+}
+
+function addCombinator( matcher, combinator, base ) {
+       var dir = combinator.dir,
+               checkNonElements = base && dir === "parentNode",
+               doneName = done++;
+
+       return combinator.first ?
+               // Check against closest ancestor/preceding element
+               function( elem, context, xml ) {
+                       while ( (elem = elem[ dir ]) ) {
+                               if ( elem.nodeType === 1 || checkNonElements ) {
+                                       return matcher( elem, context, xml );
+                               }
+                       }
+               } :
+
+               // Check against all ancestor/preceding elements
+               function( elem, context, xml ) {
+                       var oldCache, uniqueCache, outerCache,
+                               newCache = [ dirruns, doneName ];
+
+                       // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching
+                       if ( xml ) {
+                               while ( (elem = elem[ dir ]) ) {
+                                       if ( elem.nodeType === 1 || checkNonElements ) {
+                                               if ( matcher( elem, context, xml ) ) {
+                                                       return true;
+                                               }
+                                       }
+                               }
+                       } else {
+                               while ( (elem = elem[ dir ]) ) {
+                                       if ( elem.nodeType === 1 || checkNonElements ) {
+                                               outerCache = elem[ expando ] || (elem[ expando ] = {});
+
+                                               // Support: IE <9 only
+                                               // Defend against cloned attroperties (jQuery gh-1709)
+                                               uniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {});
+
+                                               if ( (oldCache = uniqueCache[ dir ]) &&
+                                                       oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {
+
+                                                       // Assign to newCache so results back-propagate to previous elements
+                                                       return (newCache[ 2 ] = oldCache[ 2 ]);
+                                               } else {
+                                                       // Reuse newcache so results back-propagate to previous elements
+                                                       uniqueCache[ dir ] = newCache;
+
+                                                       // A match means we're done; a fail means we have to keep checking
+                                                       if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {
+                                                               return true;
+                                                       }
+                                               }
+                                       }
+                               }
+                       }
+               };
+}
+
+function elementMatcher( matchers ) {
+       return matchers.length > 1 ?
+               function( elem, context, xml ) {
+                       var i = matchers.length;
+                       while ( i-- ) {
+                               if ( !matchers[i]( elem, context, xml ) ) {
+                                       return false;
+                               }
+                       }
+                       return true;
+               } :
+               matchers[0];
+}
+
+function multipleContexts( selector, contexts, results ) {
+       var i = 0,
+               len = contexts.length;
+       for ( ; i < len; i++ ) {
+               Sizzle( selector, contexts[i], results );
+       }
+       return results;
+}
+
+function condense( unmatched, map, filter, context, xml ) {
+       var elem,
+               newUnmatched = [],
+               i = 0,
+               len = unmatched.length,
+               mapped = map != null;
+
+       for ( ; i < len; i++ ) {
+               if ( (elem = unmatched[i]) ) {
+                       if ( !filter || filter( elem, context, xml ) ) {
+                               newUnmatched.push( elem );
+                               if ( mapped ) {
+                                       map.push( i );
+                               }
+                       }
+               }
+       }
+
+       return newUnmatched;
+}
+
+function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {
+       if ( postFilter && !postFilter[ expando ] ) {
+               postFilter = setMatcher( postFilter );
+       }
+       if ( postFinder && !postFinder[ expando ] ) {
+               postFinder = setMatcher( postFinder, postSelector );
+       }
+       return markFunction(function( seed, results, context, xml ) {
+               var temp, i, elem,
+                       preMap = [],
+                       postMap = [],
+                       preexisting = results.length,
+
+                       // Get initial elements from seed or context
+                       elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ),
+
+                       // Prefilter to get matcher input, preserving a map for seed-results synchronization
+                       matcherIn = preFilter && ( seed || !selector ) ?
+                               condense( elems, preMap, preFilter, context, xml ) :
+                               elems,
+
+                       matcherOut = matcher ?
+                               // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,
+                               postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
+
+                                       // ...intermediate processing is necessary
+                                       [] :
+
+                                       // ...otherwise use results directly
+                                       results :
+                               matcherIn;
+
+               // Find primary matches
+               if ( matcher ) {
+                       matcher( matcherIn, matcherOut, context, xml );
+               }
+
+               // Apply postFilter
+               if ( postFilter ) {
+                       temp = condense( matcherOut, postMap );
+                       postFilter( temp, [], context, xml );
+
+                       // Un-match failing elements by moving them back to matcherIn
+                       i = temp.length;
+                       while ( i-- ) {
+                               if ( (elem = temp[i]) ) {
+                                       matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);
+                               }
+                       }
+               }
+
+               if ( seed ) {
+                       if ( postFinder || preFilter ) {
+                               if ( postFinder ) {
+                                       // Get the final matcherOut by condensing this intermediate into postFinder contexts
+                                       temp = [];
+                                       i = matcherOut.length;
+                                       while ( i-- ) {
+                                               if ( (elem = matcherOut[i]) ) {
+                                                       // Restore matcherIn since elem is not yet a final match
+                                                       temp.push( (matcherIn[i] = elem) );
+                                               }
+                                       }
+                                       postFinder( null, (matcherOut = []), temp, xml );
+                               }
+
+                               // Move matched elements from seed to results to keep them synchronized
+                               i = matcherOut.length;
+                               while ( i-- ) {
+                                       if ( (elem = matcherOut[i]) &&
+                                               (temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {
+
+                                               seed[temp] = !(results[temp] = elem);
+                                       }
+                               }
+                       }
+
+               // Add elements to results, through postFinder if defined
+               } else {
+                       matcherOut = condense(
+                               matcherOut === results ?
+                                       matcherOut.splice( preexisting, matcherOut.length ) :
+                                       matcherOut
+                       );
+                       if ( postFinder ) {
+                               postFinder( null, results, matcherOut, xml );
+                       } else {
+                               push.apply( results, matcherOut );
+                       }
+               }
+       });
+}
+
+function matcherFromTokens( tokens ) {
+       var checkContext, matcher, j,
+               len = tokens.length,
+               leadingRelative = Expr.relative[ tokens[0].type ],
+               implicitRelative = leadingRelative || Expr.relative[" "],
+               i = leadingRelative ? 1 : 0,
+
+               // The foundational matcher ensures that elements are reachable from top-level context(s)
+               matchContext = addCombinator( function( elem ) {
+                       return elem === checkContext;
+               }, implicitRelative, true ),
+               matchAnyContext = addCombinator( function( elem ) {
+                       return indexOf( checkContext, elem ) > -1;
+               }, implicitRelative, true ),
+               matchers = [ function( elem, context, xml ) {
+                       var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
+                               (checkContext = context).nodeType ?
+                                       matchContext( elem, context, xml ) :
+                                       matchAnyContext( elem, context, xml ) );
+                       // Avoid hanging onto element (issue #299)
+                       checkContext = null;
+                       return ret;
+               } ];
+
+       for ( ; i < len; i++ ) {
+               if ( (matcher = Expr.relative[ tokens[i].type ]) ) {
+                       matchers = [ addCombinator(elementMatcher( matchers ), matcher) ];
+               } else {
+                       matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );
+
+                       // Return special upon seeing a positional matcher
+                       if ( matcher[ expando ] ) {
+                               // Find the next relative operator (if any) for proper handling
+                               j = ++i;
+                               for ( ; j < len; j++ ) {
+                                       if ( Expr.relative[ tokens[j].type ] ) {
+                                               break;
+                                       }
+                               }
+                               return setMatcher(
+                                       i > 1 && elementMatcher( matchers ),
+                                       i > 1 && toSelector(
+                                               // If the preceding token was a descendant combinator, insert an implicit any-element `*`
+                                               tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" })
+                                       ).replace( rtrim, "$1" ),
+                                       matcher,
+                                       i < j && matcherFromTokens( tokens.slice( i, j ) ),
+                                       j < len && matcherFromTokens( (tokens = tokens.slice( j )) ),
+                                       j < len && toSelector( tokens )
+                               );
+                       }
+                       matchers.push( matcher );
+               }
+       }
+
+       return elementMatcher( matchers );
+}
+
+function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
+       var bySet = setMatchers.length > 0,
+               byElement = elementMatchers.length > 0,
+               superMatcher = function( seed, context, xml, results, outermost ) {
+                       var elem, j, matcher,
+                               matchedCount = 0,
+                               i = "0",
+                               unmatched = seed && [],
+                               setMatched = [],
+                               contextBackup = outermostContext,
+                               // We must always have either seed elements or outermost context
+                               elems = seed || byElement && Expr.find["TAG"]( "*", outermost ),
+                               // Use integer dirruns iff this is the outermost matcher
+                               dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),
+                               len = elems.length;
+
+                       if ( outermost ) {
+                               outermostContext = context === document || context || outermost;
+                       }
+
+                       // Add elements passing elementMatchers directly to results
+                       // Support: IE<9, Safari
+                       // Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id
+                       for ( ; i !== len && (elem = elems[i]) != null; i++ ) {
+                               if ( byElement && elem ) {
+                                       j = 0;
+                                       if ( !context && elem.ownerDocument !== document ) {
+                                               setDocument( elem );
+                                               xml = !documentIsHTML;
+                                       }
+                                       while ( (matcher = elementMatchers[j++]) ) {
+                                               if ( matcher( elem, context || document, xml) ) {
+                                                       results.push( elem );
+                                                       break;
+                                               }
+                                       }
+                                       if ( outermost ) {
+                                               dirruns = dirrunsUnique;
+                                       }
+                               }
+
+                               // Track unmatched elements for set filters
+                               if ( bySet ) {
+                                       // They will have gone through all possible matchers
+                                       if ( (elem = !matcher && elem) ) {
+                                               matchedCount--;
+                                       }
+
+                                       // Lengthen the array for every element, matched or not
+                                       if ( seed ) {
+                                               unmatched.push( elem );
+                                       }
+                               }
+                       }
+
+                       // `i` is now the count of elements visited above, and adding it to `matchedCount`
+                       // makes the latter nonnegative.
+                       matchedCount += i;
+
+                       // Apply set filters to unmatched elements
+                       // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`
+                       // equals `i`), unless we didn't visit _any_ elements in the above loop because we have
+                       // no element matchers and no seed.
+                       // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that
+                       // case, which will result in a "00" `matchedCount` that differs from `i` but is also
+                       // numerically zero.
+                       if ( bySet && i !== matchedCount ) {
+                               j = 0;
+                               while ( (matcher = setMatchers[j++]) ) {
+                                       matcher( unmatched, setMatched, context, xml );
+                               }
+
+                               if ( seed ) {
+                                       // Reintegrate element matches to eliminate the need for sorting
+                                       if ( matchedCount > 0 ) {
+                                               while ( i-- ) {
+                                                       if ( !(unmatched[i] || setMatched[i]) ) {
+                                                               setMatched[i] = pop.call( results );
+                                                       }
+                                               }
+                                       }
+
+                                       // Discard index placeholder values to get only actual matches
+                                       setMatched = condense( setMatched );
+                               }
+
+                               // Add matches to results
+                               push.apply( results, setMatched );
+
+                               // Seedless set matches succeeding multiple successful matchers stipulate sorting
+                               if ( outermost && !seed && setMatched.length > 0 &&
+                                       ( matchedCount + setMatchers.length ) > 1 ) {
+
+                                       Sizzle.uniqueSort( results );
+                               }
+                       }
+
+                       // Override manipulation of globals by nested matchers
+                       if ( outermost ) {
+                               dirruns = dirrunsUnique;
+                               outermostContext = contextBackup;
+                       }
+
+                       return unmatched;
+               };
+
+       return bySet ?
+               markFunction( superMatcher ) :
+               superMatcher;
+}
+
+compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {
+       var i,
+               setMatchers = [],
+               elementMatchers = [],
+               cached = compilerCache[ selector + " " ];
+
+       if ( !cached ) {
+               // Generate a function of recursive functions that can be used to check each element
+               if ( !match ) {
+                       match = tokenize( selector );
+               }
+               i = match.length;
+               while ( i-- ) {
+                       cached = matcherFromTokens( match[i] );
+                       if ( cached[ expando ] ) {
+                               setMatchers.push( cached );
+                       } else {
+                               elementMatchers.push( cached );
+                       }
+               }
+
+               // Cache the compiled function
+               cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );
+
+               // Save selector and tokenization
+               cached.selector = selector;
+       }
+       return cached;
+};
+
+/**
+ * A low-level selection function that works with Sizzle's compiled
+ *  selector functions
+ * @param {String|Function} selector A selector or a pre-compiled
+ *  selector function built with Sizzle.compile
+ * @param {Element} context
+ * @param {Array} [results]
+ * @param {Array} [seed] A set of elements to match against
+ */
+select = Sizzle.select = function( selector, context, results, seed ) {
+       var i, tokens, token, type, find,
+               compiled = typeof selector === "function" && selector,
+               match = !seed && tokenize( (selector = compiled.selector || selector) );
+
+       results = results || [];
+
+       // Try to minimize operations if there is only one selector in the list and no seed
+       // (the latter of which guarantees us context)
+       if ( match.length === 1 ) {
+
+               // Reduce context if the leading compound selector is an ID
+               tokens = match[0] = match[0].slice( 0 );
+               if ( tokens.length > 2 && (token = tokens[0]).type === "ID" &&
+                               support.getById && context.nodeType === 9 && documentIsHTML &&
+                               Expr.relative[ tokens[1].type ] ) {
+
+                       context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];
+                       if ( !context ) {
+                               return results;
+
+                       // Precompiled matchers will still verify ancestry, so step up a level
+                       } else if ( compiled ) {
+                               context = context.parentNode;
+                       }
+
+                       selector = selector.slice( tokens.shift().value.length );
+               }
+
+               // Fetch a seed set for right-to-left matching
+               i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length;
+               while ( i-- ) {
+                       token = tokens[i];
+
+                       // Abort if we hit a combinator
+                       if ( Expr.relative[ (type = token.type) ] ) {
+                               break;
+                       }
+                       if ( (find = Expr.find[ type ]) ) {
+                               // Search, expanding context for leading sibling combinators
+                               if ( (seed = find(
+                                       token.matches[0].replace( runescape, funescape ),
+                                       rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context
+                               )) ) {
+
+                                       // If seed is empty or no tokens remain, we can return early
+                                       tokens.splice( i, 1 );
+                                       selector = seed.length && toSelector( tokens );
+                                       if ( !selector ) {
+                                               push.apply( results, seed );
+                                               return results;
+                                       }
+
+                                       break;
+                               }
+                       }
+               }
+       }
+
+       // Compile and execute a filtering function if one is not provided
+       // Provide `match` to avoid retokenization if we modified the selector above
+       ( compiled || compile( selector, match ) )(
+               seed,
+               context,
+               !documentIsHTML,
+               results,
+               !context || rsibling.test( selector ) && testContext( context.parentNode ) || context
+       );
+       return results;
+};
+
+// One-time assignments
+
+// Sort stability
+support.sortStable = expando.split("").sort( sortOrder ).join("") === expando;
+
+// Support: Chrome 14-35+
+// Always assume duplicates if they aren't passed to the comparison function
+support.detectDuplicates = !!hasDuplicate;
+
+// Initialize against the default document
+setDocument();
+
+// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)
+// Detached nodes confoundingly follow *each other*
+support.sortDetached = assert(function( div1 ) {
+       // Should return 1, but returns 4 (following)
+       return div1.compareDocumentPosition( document.createElement("div") ) & 1;
+});
+
+// Support: IE<8
+// Prevent attribute/property "interpolation"
+// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
+if ( !assert(function( div ) {
+       div.innerHTML = "<a href='#'></a>";
+       return div.firstChild.getAttribute("href") === "#" ;
+}) ) {
+       addHandle( "type|href|height|width", function( elem, name, isXML ) {
+               if ( !isXML ) {
+                       return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 );
+               }
+       });
+}
+
+// Support: IE<9
+// Use defaultValue in place of getAttribute("value")
+if ( !support.attributes || !assert(function( div ) {
+       div.innerHTML = "<input/>";
+       div.firstChild.setAttribute( "value", "" );
+       return div.firstChild.getAttribute( "value" ) === "";
+}) ) {
+       addHandle( "value", function( elem, name, isXML ) {
+               if ( !isXML && elem.nodeName.toLowerCase() === "input" ) {
+                       return elem.defaultValue;
+               }
+       });
+}
+
+// Support: IE<9
+// Use getAttributeNode to fetch booleans when getAttribute lies
+if ( !assert(function( div ) {
+       return div.getAttribute("disabled") == null;
+}) ) {
+       addHandle( booleans, function( elem, name, isXML ) {
+               var val;
+               if ( !isXML ) {
+                       return elem[ name ] === true ? name.toLowerCase() :
+                                       (val = elem.getAttributeNode( name )) && val.specified ?
+                                       val.value :
+                               null;
+               }
+       });
+}
+
+return Sizzle;
+
+})( window );
+
+
+
+jQuery.find = Sizzle;
+jQuery.expr = Sizzle.selectors;
+jQuery.expr[ ":" ] = jQuery.expr.pseudos;
+jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;
+jQuery.text = Sizzle.getText;
+jQuery.isXMLDoc = Sizzle.isXML;
+jQuery.contains = Sizzle.contains;
+
+
+
+var dir = function( elem, dir, until ) {
+       var matched = [],
+               truncate = until !== undefined;
+
+       while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {
+               if ( elem.nodeType === 1 ) {
+                       if ( truncate && jQuery( elem ).is( until ) ) {
+                               break;
+                       }
+                       matched.push( elem );
+               }
+       }
+       return matched;
+};
+
+
+var siblings = function( n, elem ) {
+       var matched = [];
+
+       for ( ; n; n = n.nextSibling ) {
+               if ( n.nodeType === 1 && n !== elem ) {
+                       matched.push( n );
+               }
+       }
+
+       return matched;
+};
+
+
+var rneedsContext = jQuery.expr.match.needsContext;
+
+var rsingleTag = ( /^<([\w-]+)\s*\/?>(?:<\/\1>|)$/ );
+
+
+
+var risSimple = /^.[^:#\[\.,]*$/;
+
+// Implement the identical functionality for filter and not
+function winnow( elements, qualifier, not ) {
+       if ( jQuery.isFunction( qualifier ) ) {
+               return jQuery.grep( elements, function( elem, i ) {
+                       /* jshint -W018 */
+                       return !!qualifier.call( elem, i, elem ) !== not;
+               } );
+
+       }
+
+       if ( qualifier.nodeType ) {
+               return jQuery.grep( elements, function( elem ) {
+                       return ( elem === qualifier ) !== not;
+               } );
+
+       }
+
+       if ( typeof qualifier === "string" ) {
+               if ( risSimple.test( qualifier ) ) {
+                       return jQuery.filter( qualifier, elements, not );
+               }
+
+               qualifier = jQuery.filter( qualifier, elements );
+       }
+
+       return jQuery.grep( elements, function( elem ) {
+               return ( jQuery.inArray( elem, qualifier ) > -1 ) !== not;
+       } );
+}
+
+jQuery.filter = function( expr, elems, not ) {
+       var elem = elems[ 0 ];
+
+       if ( not ) {
+               expr = ":not(" + expr + ")";
+       }
+
+       return elems.length === 1 && elem.nodeType === 1 ?
+               jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] :
+               jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {
+                       return elem.nodeType === 1;
+               } ) );
+};
+
+jQuery.fn.extend( {
+       find: function( selector ) {
+               var i,
+                       ret = [],
+                       self = this,
+                       len = self.length;
+
+               if ( typeof selector !== "string" ) {
+                       return this.pushStack( jQuery( selector ).filter( function() {
+                               for ( i = 0; i < len; i++ ) {
+                                       if ( jQuery.contains( self[ i ], this ) ) {
+                                               return true;
+                                       }
+                               }
+                       } ) );
+               }
+
+               for ( i = 0; i < len; i++ ) {
+                       jQuery.find( selector, self[ i ], ret );
+               }
+
+               // Needed because $( selector, context ) becomes $( context ).find( selector )
+               ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret );
+               ret.selector = this.selector ? this.selector + " " + selector : selector;
+               return ret;
+       },
+       filter: function( selector ) {
+               return this.pushStack( winnow( this, selector || [], false ) );
+       },
+       not: function( selector ) {
+               return this.pushStack( winnow( this, selector || [], true ) );
+       },
+       is: function( selector ) {
+               return !!winnow(
+                       this,
+
+                       // If this is a positional/relative selector, check membership in the returned set
+                       // so $("p:first").is("p:last") won't return true for a doc with two "p".
+                       typeof selector === "string" && rneedsContext.test( selector ) ?
+                               jQuery( selector ) :
+                               selector || [],
+                       false
+               ).length;
+       }
+} );
+
+
+// Initialize a jQuery object
+
+
+// A central reference to the root jQuery(document)
+var rootjQuery,
+
+       // A simple way to check for HTML strings
+       // Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
+       // Strict HTML recognition (#11290: must start with <)
+       rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,
+
+       init = jQuery.fn.init = function( selector, context, root ) {
+               var match, elem;
+
+               // HANDLE: $(""), $(null), $(undefined), $(false)
+               if ( !selector ) {
+                       return this;
+               }
+
+               // init accepts an alternate rootjQuery
+               // so migrate can support jQuery.sub (gh-2101)
+               root = root || rootjQuery;
+
+               // Handle HTML strings
+               if ( typeof selector === "string" ) {
+                       if ( selector.charAt( 0 ) === "<" &&
+                               selector.charAt( selector.length - 1 ) === ">" &&
+                               selector.length >= 3 ) {
+
+                               // Assume that strings that start and end with <> are HTML and skip the regex check
+                               match = [ null, selector, null ];
+
+                       } else {
+                               match = rquickExpr.exec( selector );
+                       }
+
+                       // Match html or make sure no context is specified for #id
+                       if ( match && ( match[ 1 ] || !context ) ) {
+
+                               // HANDLE: $(html) -> $(array)
+                               if ( match[ 1 ] ) {
+                                       context = context instanceof jQuery ? context[ 0 ] : context;
+
+                                       // scripts is true for back-compat
+                                       // Intentionally let the error be thrown if parseHTML is not present
+                                       jQuery.merge( this, jQuery.parseHTML(
+                                               match[ 1 ],
+                                               context && context.nodeType ? context.ownerDocument || context : document,
+                                               true
+                                       ) );
+
+                                       // HANDLE: $(html, props)
+                                       if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {
+                                               for ( match in context ) {
+
+                                                       // Properties of context are called as methods if possible
+                                                       if ( jQuery.isFunction( this[ match ] ) ) {
+                                                               this[ match ]( context[ match ] );
+
+                                                       // ...and otherwise set as attributes
+                                                       } else {
+                                                               this.attr( match, context[ match ] );
+                                                       }
+                                               }
+                                       }
+
+                                       return this;
+
+                               // HANDLE: $(#id)
+                               } else {
+                                       elem = document.getElementById( match[ 2 ] );
+
+                                       // Check parentNode to catch when Blackberry 4.6 returns
+                                       // nodes that are no longer in the document #6963
+                                       if ( elem && elem.parentNode ) {
+
+                                               // Handle the case where IE and Opera return items
+                                               // by name instead of ID
+                                               if ( elem.id !== match[ 2 ] ) {
+                                                       return rootjQuery.find( selector );
+                                               }
+
+                                               // Otherwise, we inject the element directly into the jQuery object
+                                               this.length = 1;
+                                               this[ 0 ] = elem;
+                                       }
+
+                                       this.context = document;
+                                       this.selector = selector;
+                                       return this;
+                               }
+
+                       // HANDLE: $(expr, $(...))
+                       } else if ( !context || context.jquery ) {
+                               return ( context || root ).find( selector );
+
+                       // HANDLE: $(expr, context)
+                       // (which is just equivalent to: $(context).find(expr)
+                       } else {
+                               return this.constructor( context ).find( selector );
+                       }
+
+               // HANDLE: $(DOMElement)
+               } else if ( selector.nodeType ) {
+                       this.context = this[ 0 ] = selector;
+                       this.length = 1;
+                       return this;
+
+               // HANDLE: $(function)
+               // Shortcut for document ready
+               } else if ( jQuery.isFunction( selector ) ) {
+                       return typeof root.ready !== "undefined" ?
+                               root.ready( selector ) :
+
+                               // Execute immediately if ready is not present
+                               selector( jQuery );
+               }
+
+               if ( selector.selector !== undefined ) {
+                       this.selector = selector.selector;
+                       this.context = selector.context;
+               }
+
+               return jQuery.makeArray( selector, this );
+       };
+
+// Give the init function the jQuery prototype for later instantiation
+init.prototype = jQuery.fn;
+
+// Initialize central reference
+rootjQuery = jQuery( document );
+
+
+var rparentsprev = /^(?:parents|prev(?:Until|All))/,
+
+       // methods guaranteed to produce a unique set when starting from a unique set
+       guaranteedUnique = {
+               children: true,
+               contents: true,
+               next: true,
+               prev: true
+       };
+
+jQuery.fn.extend( {
+       has: function( target ) {
+               var i,
+                       targets = jQuery( target, this ),
+                       len = targets.length;
+
+               return this.filter( function() {
+                       for ( i = 0; i < len; i++ ) {
+                               if ( jQuery.contains( this, targets[ i ] ) ) {
+                                       return true;
+                               }
+                       }
+               } );
+       },
+
+       closest: function( selectors, context ) {
+               var cur,
+                       i = 0,
+                       l = this.length,
+                       matched = [],
+                       pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ?
+                               jQuery( selectors, context || this.context ) :
+                               0;
+
+               for ( ; i < l; i++ ) {
+                       for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {
+
+                               // Always skip document fragments
+                               if ( cur.nodeType < 11 && ( pos ?
+                                       pos.index( cur ) > -1 :
+
+                                       // Don't pass non-elements to Sizzle
+                                       cur.nodeType === 1 &&
+                                               jQuery.find.matchesSelector( cur, selectors ) ) ) {
+
+                                       matched.push( cur );
+                                       break;
+                               }
+                       }
+               }
+
+               return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );
+       },
+
+       // Determine the position of an element within
+       // the matched set of elements
+       index: function( elem ) {
+
+               // No argument, return index in parent
+               if ( !elem ) {
+                       return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;
+               }
+
+               // index in selector
+               if ( typeof elem === "string" ) {
+                       return jQuery.inArray( this[ 0 ], jQuery( elem ) );
+               }
+
+               // Locate the position of the desired element
+               return jQuery.inArray(
+
+                       // If it receives a jQuery object, the first element is used
+                       elem.jquery ? elem[ 0 ] : elem, this );
+       },
+
+       add: function( selector, context ) {
+               return this.pushStack(
+                       jQuery.uniqueSort(
+                               jQuery.merge( this.get(), jQuery( selector, context ) )
+                       )
+               );
+       },
+
+       addBack: function( selector ) {
+               return this.add( selector == null ?
+                       this.prevObject : this.prevObject.filter( selector )
+               );
+       }
+} );
+
+function sibling( cur, dir ) {
+       do {
+               cur = cur[ dir ];
+       } while ( cur && cur.nodeType !== 1 );
+
+       return cur;
+}
+
+jQuery.each( {
+       parent: function( elem ) {
+               var parent = elem.parentNode;
+               return parent && parent.nodeType !== 11 ? parent : null;
+       },
+       parents: function( elem ) {
+               return dir( elem, "parentNode" );
+       },
+       parentsUntil: function( elem, i, until ) {
+               return dir( elem, "parentNode", until );
+       },
+       next: function( elem ) {
+               return sibling( elem, "nextSibling" );
+       },
+       prev: function( elem ) {
+               return sibling( elem, "previousSibling" );
+       },
+       nextAll: function( elem ) {
+               return dir( elem, "nextSibling" );
+       },
+       prevAll: function( elem ) {
+               return dir( elem, "previousSibling" );
+       },
+       nextUntil: function( elem, i, until ) {
+               return dir( elem, "nextSibling", until );
+       },
+       prevUntil: function( elem, i, until ) {
+               return dir( elem, "previousSibling", until );
+       },
+       siblings: function( elem ) {
+               return siblings( ( elem.parentNode || {} ).firstChild, elem );
+       },
+       children: function( elem ) {
+               return siblings( elem.firstChild );
+       },
+       contents: function( elem ) {
+               return jQuery.nodeName( elem, "iframe" ) ?
+                       elem.contentDocument || elem.contentWindow.document :
+                       jQuery.merge( [], elem.childNodes );
+       }
+}, function( name, fn ) {
+       jQuery.fn[ name ] = function( until, selector ) {
+               var ret = jQuery.map( this, fn, until );
+
+               if ( name.slice( -5 ) !== "Until" ) {
+                       selector = until;
+               }
+
+               if ( selector && typeof selector === "string" ) {
+                       ret = jQuery.filter( selector, ret );
+               }
+
+               if ( this.length > 1 ) {
+
+                       // Remove duplicates
+                       if ( !guaranteedUnique[ name ] ) {
+                               ret = jQuery.uniqueSort( ret );
+                       }
+
+                       // Reverse order for parents* and prev-derivatives
+                       if ( rparentsprev.test( name ) ) {
+                               ret = ret.reverse();
+                       }
+               }
+
+               return this.pushStack( ret );
+       };
+} );
+var rnotwhite = ( /\S+/g );
+
+
+
+// Convert String-formatted options into Object-formatted ones
+function createOptions( options ) {
+       var object = {};
+       jQuery.each( options.match( rnotwhite ) || [], function( _, flag ) {
+               object[ flag ] = true;
+       } );
+       return object;
+}
+
+/*
+ * Create a callback list using the following parameters:
+ *
+ *     options: an optional list of space-separated options that will change how
+ *                     the callback list behaves or a more traditional option object
+ *
+ * By default a callback list will act like an event callback list and can be
+ * "fired" multiple times.
+ *
+ * Possible options:
+ *
+ *     once:                   will ensure the callback list can only be fired once (like a Deferred)
+ *
+ *     memory:                 will keep track of previous values and will call any callback added
+ *                                     after the list has been fired right away with the latest "memorized"
+ *                                     values (like a Deferred)
+ *
+ *     unique:                 will ensure a callback can only be added once (no duplicate in the list)
+ *
+ *     stopOnFalse:    interrupt callings when a callback returns false
+ *
+ */
+jQuery.Callbacks = function( options ) {
+
+       // Convert options from String-formatted to Object-formatted if needed
+       // (we check in cache first)
+       options = typeof options === "string" ?
+               createOptions( options ) :
+               jQuery.extend( {}, options );
+
+       var // Flag to know if list is currently firing
+               firing,
+
+               // Last fire value for non-forgettable lists
+               memory,
+
+               // Flag to know if list was already fired
+               fired,
+
+               // Flag to prevent firing
+               locked,
+
+               // Actual callback list
+               list = [],
+
+               // Queue of execution data for repeatable lists
+               queue = [],
+
+               // Index of currently firing callback (modified by add/remove as needed)
+               firingIndex = -1,
+
+               // Fire callbacks
+               fire = function() {
+
+                       // Enforce single-firing
+                       locked = options.once;
+
+                       // Execute callbacks for all pending executions,
+                       // respecting firingIndex overrides and runtime changes
+                       fired = firing = true;
+                       for ( ; queue.length; firingIndex = -1 ) {
+                               memory = queue.shift();
+                               while ( ++firingIndex < list.length ) {
+
+                                       // Run callback and check for early termination
+                                       if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&
+                                               options.stopOnFalse ) {
+
+                                               // Jump to end and forget the data so .add doesn't re-fire
+                                               firingIndex = list.length;
+                                               memory = false;
+                                       }
+                               }
+                       }
+
+                       // Forget the data if we're done with it
+                       if ( !options.memory ) {
+                               memory = false;
+                       }
+
+                       firing = false;
+
+                       // Clean up if we're done firing for good
+                       if ( locked ) {
+
+                               // Keep an empty list if we have data for future add calls
+                               if ( memory ) {
+                                       list = [];
+
+                               // Otherwise, this object is spent
+                               } else {
+                                       list = "";
+                               }
+                       }
+               },
+
+               // Actual Callbacks object
+               self = {
+
+                       // Add a callback or a collection of callbacks to the list
+                       add: function() {
+                               if ( list ) {
+
+                                       // If we have memory from a past run, we should fire after adding
+                                       if ( memory && !firing ) {
+                                               firingIndex = list.length - 1;
+                                               queue.push( memory );
+                                       }
+
+                                       ( function add( args ) {
+                                               jQuery.each( args, function( _, arg ) {
+                                                       if ( jQuery.isFunction( arg ) ) {
+                                                               if ( !options.unique || !self.has( arg ) ) {
+                                                                       list.push( arg );
+                                                               }
+                                                       } else if ( arg && arg.length && jQuery.type( arg ) !== "string" ) {
+
+                                                               // Inspect recursively
+                                                               add( arg );
+                                                       }
+                                               } );
+                                       } )( arguments );
+
+                                       if ( memory && !firing ) {
+                                               fire();
+                                       }
+                               }
+                               return this;
+                       },
+
+                       // Remove a callback from the list
+                       remove: function() {
+                               jQuery.each( arguments, function( _, arg ) {
+                                       var index;
+                                       while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
+                                               list.splice( index, 1 );
+
+                                               // Handle firing indexes
+                                               if ( index <= firingIndex ) {
+                                                       firingIndex--;
+                                               }
+                                       }
+                               } );
+                               return this;
+                       },
+
+                       // Check if a given callback is in the list.
+                       // If no argument is given, return whether or not list has callbacks attached.
+                       has: function( fn ) {
+                               return fn ?
+                                       jQuery.inArray( fn, list ) > -1 :
+                                       list.length > 0;
+                       },
+
+                       // Remove all callbacks from the list
+                       empty: function() {
+                               if ( list ) {
+                                       list = [];
+                               }
+                               return this;
+                       },
+
+                       // Disable .fire and .add
+                       // Abort any current/pending executions
+                       // Clear all callbacks and values
+                       disable: function() {
+                               locked = queue = [];
+                               list = memory = "";
+                               return this;
+                       },
+                       disabled: function() {
+                               return !list;
+                       },
+
+                       // Disable .fire
+                       // Also disable .add unless we have memory (since it would have no effect)
+                       // Abort any pending executions
+                       lock: function() {
+                               locked = true;
+                               if ( !memory ) {
+                                       self.disable();
+                               }
+                               return this;
+                       },
+                       locked: function() {
+                               return !!locked;
+                       },
+
+                       // Call all callbacks with the given context and arguments
+                       fireWith: function( context, args ) {
+                               if ( !locked ) {
+                                       args = args || [];
+                                       args = [ context, args.slice ? args.slice() : args ];
+                                       queue.push( args );
+                                       if ( !firing ) {
+                                               fire();
+                                       }
+                               }
+                               return this;
+                       },
+
+                       // Call all the callbacks with the given arguments
+                       fire: function() {
+                               self.fireWith( this, arguments );
+                               return this;
+                       },
+
+                       // To know if the callbacks have already been called at least once
+                       fired: function() {
+                               return !!fired;
+                       }
+               };
+
+       return self;
+};
+
+
+jQuery.extend( {
+
+       Deferred: function( func ) {
+               var tuples = [
+
+                               // action, add listener, listener list, final state
+                               [ "resolve", "done", jQuery.Callbacks( "once memory" ), "resolved" ],
+                               [ "reject", "fail", jQuery.Callbacks( "once memory" ), "rejected" ],
+                               [ "notify", "progress", jQuery.Callbacks( "memory" ) ]
+                       ],
+                       state = "pending",
+                       promise = {
+                               state: function() {
+                                       return state;
+                               },
+                               always: function() {
+                                       deferred.done( arguments ).fail( arguments );
+                                       return this;
+                               },
+                               then: function( /* fnDone, fnFail, fnProgress */ ) {
+                                       var fns = arguments;
+                                       return jQuery.Deferred( function( newDefer ) {
+                                               jQuery.each( tuples, function( i, tuple ) {
+                                                       var fn = jQuery.isFunction( fns[ i ] ) && fns[ i ];
+
+                                                       // deferred[ done | fail | progress ] for forwarding actions to newDefer
+                                                       deferred[ tuple[ 1 ] ]( function() {
+                                                               var returned = fn && fn.apply( this, arguments );
+                                                               if ( returned && jQuery.isFunction( returned.promise ) ) {
+                                                                       returned.promise()
+                                                                               .progress( newDefer.notify )
+                                                                               .done( newDefer.resolve )
+                                                                               .fail( newDefer.reject );
+                                                               } else {
+                                                                       newDefer[ tuple[ 0 ] + "With" ](
+                                                                               this === promise ? newDefer.promise() : this,
+                                                                               fn ? [ returned ] : arguments
+                                                                       );
+                                                               }
+                                                       } );
+                                               } );
+                                               fns = null;
+                                       } ).promise();
+                               },
+
+                               // Get a promise for this deferred
+                               // If obj is provided, the promise aspect is added to the object
+                               promise: function( obj ) {
+                                       return obj != null ? jQuery.extend( obj, promise ) : promise;
+                               }
+                       },
+                       deferred = {};
+
+               // Keep pipe for back-compat
+               promise.pipe = promise.then;
+
+               // Add list-specific methods
+               jQuery.each( tuples, function( i, tuple ) {
+                       var list = tuple[ 2 ],
+                               stateString = tuple[ 3 ];
+
+                       // promise[ done | fail | progress ] = list.add
+                       promise[ tuple[ 1 ] ] = list.add;
+
+                       // Handle state
+                       if ( stateString ) {
+                               list.add( function() {
+
+                                       // state = [ resolved | rejected ]
+                                       state = stateString;
+
+                               // [ reject_list | resolve_list ].disable; progress_list.lock
+                               }, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );
+                       }
+
+                       // deferred[ resolve | reject | notify ]
+                       deferred[ tuple[ 0 ] ] = function() {
+                               deferred[ tuple[ 0 ] + "With" ]( this === deferred ? promise : this, arguments );
+                               return this;
+                       };
+                       deferred[ tuple[ 0 ] + "With" ] = list.fireWith;
+               } );
+
+               // Make the deferred a promise
+               promise.promise( deferred );
+
+               // Call given func if any
+               if ( func ) {
+                       func.call( deferred, deferred );
+               }
+
+               // All done!
+               return deferred;
+       },
+
+       // Deferred helper
+       when: function( subordinate /* , ..., subordinateN */ ) {
+               var i = 0,
+                       resolveValues = slice.call( arguments ),
+                       length = resolveValues.length,
+
+                       // the count of uncompleted subordinates
+                       remaining = length !== 1 ||
+                               ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,
+
+                       // the master Deferred.
+                       // If resolveValues consist of only a single Deferred, just use that.
+                       deferred = remaining === 1 ? subordinate : jQuery.Deferred(),
+
+                       // Update function for both resolve and progress values
+                       updateFunc = function( i, contexts, values ) {
+                               return function( value ) {
+                                       contexts[ i ] = this;
+                                       values[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;
+                                       if ( values === progressValues ) {
+                                               deferred.notifyWith( contexts, values );
+
+                                       } else if ( !( --remaining ) ) {
+                                               deferred.resolveWith( contexts, values );
+                                       }
+                               };
+                       },
+
+                       progressValues, progressContexts, resolveContexts;
+
+               // add listeners to Deferred subordinates; treat others as resolved
+               if ( length > 1 ) {
+                       progressValues = new Array( length );
+                       progressContexts = new Array( length );
+                       resolveContexts = new Array( length );
+                       for ( ; i < length; i++ ) {
+                               if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) {
+                                       resolveValues[ i ].promise()
+                                               .progress( updateFunc( i, progressContexts, progressValues ) )
+                                               .done( updateFunc( i, resolveContexts, resolveValues ) )
+                                               .fail( deferred.reject );
+                               } else {
+                                       --remaining;
+                               }
+                       }
+               }
+
+               // if we're not waiting on anything, resolve the master
+               if ( !remaining ) {
+                       deferred.resolveWith( resolveContexts, resolveValues );
+               }
+
+               return deferred.promise();
+       }
+} );
+
+
+// The deferred used on DOM ready
+var readyList;
+
+jQuery.fn.ready = function( fn ) {
+
+       // Add the callback
+       jQuery.ready.promise().done( fn );
+
+       return this;
+};
+
+jQuery.extend( {
+
+       // Is the DOM ready to be used? Set to true once it occurs.
+       isReady: false,
+
+       // A counter to track how many items to wait for before
+       // the ready event fires. See #6781
+       readyWait: 1,
+
+       // Hold (or release) the ready event
+       holdReady: function( hold ) {
+               if ( hold ) {
+                       jQuery.readyWait++;
+               } else {
+                       jQuery.ready( true );
+               }
+       },
+
+       // Handle when the DOM is ready
+       ready: function( wait ) {
+
+               // Abort if there are pending holds or we're already ready
+               if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
+                       return;
+               }
+
+               // Remember that the DOM is ready
+               jQuery.isReady = true;
+
+               // If a normal DOM Ready event fired, decrement, and wait if need be
+               if ( wait !== true && --jQuery.readyWait > 0 ) {
+                       return;
+               }
+
+               // If there are functions bound, to execute
+               readyList.resolveWith( document, [ jQuery ] );
+
+               // Trigger any bound ready events
+               if ( jQuery.fn.triggerHandler ) {
+                       jQuery( document ).triggerHandler( "ready" );
+                       jQuery( document ).off( "ready" );
+               }
+       }
+} );
+
+/**
+ * Clean-up method for dom ready events
+ */
+function detach() {
+       if ( document.addEventListener ) {
+               document.removeEventListener( "DOMContentLoaded", completed );
+               window.removeEventListener( "load", completed );
+
+       } else {
+               document.detachEvent( "onreadystatechange", completed );
+               window.detachEvent( "onload", completed );
+       }
+}
+
+/**
+ * The ready event handler and self cleanup method
+ */
+function completed() {
+
+       // readyState === "complete" is good enough for us to call the dom ready in oldIE
+       if ( document.addEventListener ||
+               window.event.type === "load" ||
+               document.readyState === "complete" ) {
+
+               detach();
+               jQuery.ready();
+       }
+}
+
+jQuery.ready.promise = function( obj ) {
+       if ( !readyList ) {
+
+               readyList = jQuery.Deferred();
+
+               // Catch cases where $(document).ready() is called
+               // after the browser event has already occurred.
+               // Support: IE6-10
+               // Older IE sometimes signals "interactive" too soon
+               if ( document.readyState === "complete" ||
+                       ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) {
+
+                       // Handle it asynchronously to allow scripts the opportunity to delay ready
+                       window.setTimeout( jQuery.ready );
+
+               // Standards-based browsers support DOMContentLoaded
+               } else if ( document.addEventListener ) {
+
+                       // Use the handy event callback
+                       document.addEventListener( "DOMContentLoaded", completed );
+
+                       // A fallback to window.onload, that will always work
+                       window.addEventListener( "load", completed );
+
+               // If IE event model is used
+               } else {
+
+                       // Ensure firing before onload, maybe late but safe also for iframes
+                       document.attachEvent( "onreadystatechange", completed );
+
+                       // A fallback to window.onload, that will always work
+                       window.attachEvent( "onload", completed );
+
+                       // If IE and not a frame
+                       // continually check to see if the document is ready
+                       var top = false;
+
+                       try {
+                               top = window.frameElement == null && document.documentElement;
+                       } catch ( e ) {}
+
+                       if ( top && top.doScroll ) {
+                               ( function doScrollCheck() {
+                                       if ( !jQuery.isReady ) {
+
+                                               try {
+
+                                                       // Use the trick by Diego Perini
+                                                       // http://javascript.nwbox.com/IEContentLoaded/
+                                                       top.doScroll( "left" );
+                                               } catch ( e ) {
+                                                       return window.setTimeout( doScrollCheck, 50 );
+                                               }
+
+                                               // detach all dom ready events
+                                               detach();
+
+                                               // and execute any waiting functions
+                                               jQuery.ready();
+                                       }
+                               } )();
+                       }
+               }
+       }
+       return readyList.promise( obj );
+};
+
+// Kick off the DOM ready check even if the user does not
+jQuery.ready.promise();
+
+
+
+
+// Support: IE<9
+// Iteration over object's inherited properties before its own
+var i;
+for ( i in jQuery( support ) ) {
+       break;
+}
+support.ownFirst = i === "0";
+
+// Note: most support tests are defined in their respective modules.
+// false until the test is run
+support.inlineBlockNeedsLayout = false;
+
+// Execute ASAP in case we need to set body.style.zoom
+jQuery( function() {
+
+       // Minified: var a,b,c,d
+       var val, div, body, container;
+
+       body = document.getElementsByTagName( "body" )[ 0 ];
+       if ( !body || !body.style ) {
+
+               // Return for frameset docs that don't have a body
+               return;
+       }
+
+       // Setup
+       div = document.createElement( "div" );
+       container = document.createElement( "div" );
+       container.style.cssText = "position:absolute;border:0;width:0;height:0;top:0;left:-9999px";
+       body.appendChild( container ).appendChild( div );
+
+       if ( typeof div.style.zoom !== "undefined" ) {
+
+               // Support: IE<8
+               // Check if natively block-level elements act like inline-block
+               // elements when setting their display to 'inline' and giving
+               // them layout
+               div.style.cssText = "display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1";
+
+               support.inlineBlockNeedsLayout = val = div.offsetWidth === 3;
+               if ( val ) {
+
+                       // Prevent IE 6 from affecting layout for positioned elements #11048
+                       // Prevent IE from shrinking the body in IE 7 mode #12869
+                       // Support: IE<8
+                       body.style.zoom = 1;
+               }
+       }
+
+       body.removeChild( container );
+} );
+
+
+( function() {
+       var div = document.createElement( "div" );
+
+       // Support: IE<9
+       support.deleteExpando = true;
+       try {
+               delete div.test;
+       } catch ( e ) {
+               support.deleteExpando = false;
+       }
+
+       // Null elements to avoid leaks in IE.
+       div = null;
+} )();
+var acceptData = function( elem ) {
+       var noData = jQuery.noData[ ( elem.nodeName + " " ).toLowerCase() ],
+               nodeType = +elem.nodeType || 1;
+
+       // Do not set data on non-element DOM nodes because it will not be cleared (#8335).
+       return nodeType !== 1 && nodeType !== 9 ?
+               false :
+
+               // Nodes accept data unless otherwise specified; rejection can be conditional
+               !noData || noData !== true && elem.getAttribute( "classid" ) === noData;
+};
+
+
+
+
+var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
+       rmultiDash = /([A-Z])/g;
+
+function dataAttr( elem, key, data ) {
+
+       // If nothing was found internally, try to fetch any
+       // data from the HTML5 data-* attribute
+       if ( data === undefined && elem.nodeType === 1 ) {
+
+               var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase();
+
+               data = elem.getAttribute( name );
+
+               if ( typeof data === "string" ) {
+                       try {
+                               data = data === "true" ? true :
+                                       data === "false" ? false :
+                                       data === "null" ? null :
+
+                                       // Only convert to a number if it doesn't change the string
+                                       +data + "" === data ? +data :
+                                       rbrace.test( data ) ? jQuery.parseJSON( data ) :
+                                       data;
+                       } catch ( e ) {}
+
+                       // Make sure we set the data so it isn't changed later
+                       jQuery.data( elem, key, data );
+
+               } else {
+                       data = undefined;
+               }
+       }
+
+       return data;
+}
+
+// checks a cache object for emptiness
+function isEmptyDataObject( obj ) {
+       var name;
+       for ( name in obj ) {
+
+               // if the public data object is empty, the private is still empty
+               if ( name === "data" && jQuery.isEmptyObject( obj[ name ] ) ) {
+                       continue;
+               }
+               if ( name !== "toJSON" ) {
+                       return false;
+               }
+       }
+
+       return true;
+}
+
+function internalData( elem, name, data, pvt /* Internal Use Only */ ) {
+       if ( !acceptData( elem ) ) {
+               return;
+       }
+
+       var ret, thisCache,
+               internalKey = jQuery.expando,
+
+               // We have to handle DOM nodes and JS objects differently because IE6-7
+               // can't GC object references properly across the DOM-JS boundary
+               isNode = elem.nodeType,
+
+               // Only DOM nodes need the global jQuery cache; JS object data is
+               // attached directly to the object so GC can occur automatically
+               cache = isNode ? jQuery.cache : elem,
+
+               // Only defining an ID for JS objects if its cache already exists allows
+               // the code to shortcut on the same path as a DOM node with no cache
+               id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey;
+
+       // Avoid doing any more work than we need to when trying to get data on an
+       // object that has no data at all
+       if ( ( !id || !cache[ id ] || ( !pvt && !cache[ id ].data ) ) &&
+               data === undefined && typeof name === "string" ) {
+               return;
+       }
+
+       if ( !id ) {
+
+               // Only DOM nodes need a new unique ID for each element since their data
+               // ends up in the global cache
+               if ( isNode ) {
+                       id = elem[ internalKey ] = deletedIds.pop() || jQuery.guid++;
+               } else {
+                       id = internalKey;
+               }
+       }
+
+       if ( !cache[ id ] ) {
+
+               // Avoid exposing jQuery metadata on plain JS objects when the object
+               // is serialized using JSON.stringify
+               cache[ id ] = isNode ? {} : { toJSON: jQuery.noop };
+       }
+
+       // An object can be passed to jQuery.data instead of a key/value pair; this gets
+       // shallow copied over onto the existing cache
+       if ( typeof name === "object" || typeof name === "function" ) {
+               if ( pvt ) {
+                       cache[ id ] = jQuery.extend( cache[ id ], name );
+               } else {
+                       cache[ id ].data = jQuery.extend( cache[ id ].data, name );
+               }
+       }
+
+       thisCache = cache[ id ];
+
+       // jQuery data() is stored in a separate object inside the object's internal data
+       // cache in order to avoid key collisions between internal data and user-defined
+       // data.
+       if ( !pvt ) {
+               if ( !thisCache.data ) {
+                       thisCache.data = {};
+               }
+
+               thisCache = thisCache.data;
+       }
+
+       if ( data !== undefined ) {
+               thisCache[ jQuery.camelCase( name ) ] = data;
+       }
+
+       // Check for both converted-to-camel and non-converted data property names
+       // If a data property was specified
+       if ( typeof name === "string" ) {
+
+               // First Try to find as-is property data
+               ret = thisCache[ name ];
+
+               // Test for null|undefined property data
+               if ( ret == null ) {
+
+                       // Try to find the camelCased property
+                       ret = thisCache[ jQuery.camelCase( name ) ];
+               }
+       } else {
+               ret = thisCache;
+       }
+
+       return ret;
+}
+
+function internalRemoveData( elem, name, pvt ) {
+       if ( !acceptData( elem ) ) {
+               return;
+       }
+
+       var thisCache, i,
+               isNode = elem.nodeType,
+
+               // See jQuery.data for more information
+               cache = isNode ? jQuery.cache : elem,
+               id = isNode ? elem[ jQuery.expando ] : jQuery.expando;
+
+       // If there is already no cache entry for this object, there is no
+       // purpose in continuing
+       if ( !cache[ id ] ) {
+               return;
+       }
+
+       if ( name ) {
+
+               thisCache = pvt ? cache[ id ] : cache[ id ].data;
+
+               if ( thisCache ) {
+
+                       // Support array or space separated string names for data keys
+                       if ( !jQuery.isArray( name ) ) {
+
+                               // try the string as a key before any manipulation
+                               if ( name in thisCache ) {
+                                       name = [ name ];
+                               } else {
+
+                                       // split the camel cased version by spaces unless a key with the spaces exists
+                                       name = jQuery.camelCase( name );
+                                       if ( name in thisCache ) {
+                                               name = [ name ];
+                                       } else {
+                                               name = name.split( " " );
+                                       }
+                               }
+                       } else {
+
+                               // If "name" is an array of keys...
+                               // When data is initially created, via ("key", "val") signature,
+                               // keys will be converted to camelCase.
+                               // Since there is no way to tell _how_ a key was added, remove
+                               // both plain key and camelCase key. #12786
+                               // This will only penalize the array argument path.
+                               name = name.concat( jQuery.map( name, jQuery.camelCase ) );
+                       }
+
+                       i = name.length;
+                       while ( i-- ) {
+                               delete thisCache[ name[ i ] ];
+                       }
+
+                       // If there is no data left in the cache, we want to continue
+                       // and let the cache object itself get destroyed
+                       if ( pvt ? !isEmptyDataObject( thisCache ) : !jQuery.isEmptyObject( thisCache ) ) {
+                               return;
+                       }
+               }
+       }
+
+       // See jQuery.data for more information
+       if ( !pvt ) {
+               delete cache[ id ].data;
+
+               // Don't destroy the parent cache unless the internal data object
+               // had been the only thing left in it
+               if ( !isEmptyDataObject( cache[ id ] ) ) {
+                       return;
+               }
+       }
+
+       // Destroy the cache
+       if ( isNode ) {
+               jQuery.cleanData( [ elem ], true );
+
+       // Use delete when supported for expandos or `cache` is not a window per isWindow (#10080)
+       /* jshint eqeqeq: false */
+       } else if ( support.deleteExpando || cache != cache.window ) {
+               /* jshint eqeqeq: true */
+               delete cache[ id ];
+
+       // When all else fails, undefined
+       } else {
+               cache[ id ] = undefined;
+       }
+}
+
+jQuery.extend( {
+       cache: {},
+
+       // The following elements (space-suffixed to avoid Object.prototype collisions)
+       // throw uncatchable exceptions if you attempt to set expando properties
+       noData: {
+               "applet ": true,
+               "embed ": true,
+
+               // ...but Flash objects (which have this classid) *can* handle expandos
+               "object ": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
+       },
+
+       hasData: function( elem ) {
+               elem = elem.nodeType ? jQuery.cache[ elem[ jQuery.expando ] ] : elem[ jQuery.expando ];
+               return !!elem && !isEmptyDataObject( elem );
+       },
+
+       data: function( elem, name, data ) {
+               return internalData( elem, name, data );
+       },
+
+       removeData: function( elem, name ) {
+               return internalRemoveData( elem, name );
+       },
+
+       // For internal use only.
+       _data: function( elem, name, data ) {
+               return internalData( elem, name, data, true );
+       },
+
+       _removeData: function( elem, name ) {
+               return internalRemoveData( elem, name, true );
+       }
+} );
+
+jQuery.fn.extend( {
+       data: function( key, value ) {
+               var i, name, data,
+                       elem = this[ 0 ],
+                       attrs = elem && elem.attributes;
+
+               // Special expections of .data basically thwart jQuery.access,
+               // so implement the relevant behavior ourselves
+
+               // Gets all values
+               if ( key === undefined ) {
+                       if ( this.length ) {
+                               data = jQuery.data( elem );
+
+                               if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) {
+                                       i = attrs.length;
+                                       while ( i-- ) {
+
+                                               // Support: IE11+
+                                               // The attrs elements can be null (#14894)
+                                               if ( attrs[ i ] ) {
+                                                       name = attrs[ i ].name;
+                                                       if ( name.indexOf( "data-" ) === 0 ) {
+                                                               name = jQuery.camelCase( name.slice( 5 ) );
+                                                               dataAttr( elem, name, data[ name ] );
+                                                       }
+                                               }
+                                       }
+                                       jQuery._data( elem, "parsedAttrs", true );
+                               }
+                       }
+
+                       return data;
+               }
+
+               // Sets multiple values
+               if ( typeof key === "object" ) {
+                       return this.each( function() {
+                               jQuery.data( this, key );
+                       } );
+               }
+
+               return arguments.length > 1 ?
+
+                       // Sets one value
+                       this.each( function() {
+                               jQuery.data( this, key, value );
+                       } ) :
+
+                       // Gets one value
+                       // Try to fetch any internally stored data first
+                       elem ? dataAttr( elem, key, jQuery.data( elem, key ) ) : undefined;
+       },
+
+       removeData: function( key ) {
+               return this.each( function() {
+                       jQuery.removeData( this, key );
+               } );
+       }
+} );
+
+
+jQuery.extend( {
+       queue: function( elem, type, data ) {
+               var queue;
+
+               if ( elem ) {
+                       type = ( type || "fx" ) + "queue";
+                       queue = jQuery._data( elem, type );
+
+                       // Speed up dequeue by getting out quickly if this is just a lookup
+                       if ( data ) {
+                               if ( !queue || jQuery.isArray( data ) ) {
+                                       queue = jQuery._data( elem, type, jQuery.makeArray( data ) );
+                               } else {
+                                       queue.push( data );
+                               }
+                       }
+                       return queue || [];
+               }
+       },
+
+       dequeue: function( elem, type ) {
+               type = type || "fx";
+
+               var queue = jQuery.queue( elem, type ),
+                       startLength = queue.length,
+                       fn = queue.shift(),
+                       hooks = jQuery._queueHooks( elem, type ),
+                       next = function() {
+                               jQuery.dequeue( elem, type );
+                       };
+
+               // If the fx queue is dequeued, always remove the progress sentinel
+               if ( fn === "inprogress" ) {
+                       fn = queue.shift();
+                       startLength--;
+               }
+
+               if ( fn ) {
+
+                       // Add a progress sentinel to prevent the fx queue from being
+                       // automatically dequeued
+                       if ( type === "fx" ) {
+                               queue.unshift( "inprogress" );
+                       }
+
+                       // clear up the last queue stop function
+                       delete hooks.stop;
+                       fn.call( elem, next, hooks );
+               }
+
+               if ( !startLength && hooks ) {
+                       hooks.empty.fire();
+               }
+       },
+
+       // not intended for public consumption - generates a queueHooks object,
+       // or returns the current one
+       _queueHooks: function( elem, type ) {
+               var key = type + "queueHooks";
+               return jQuery._data( elem, key ) || jQuery._data( elem, key, {
+                       empty: jQuery.Callbacks( "once memory" ).add( function() {
+                               jQuery._removeData( elem, type + "queue" );
+                               jQuery._removeData( elem, key );
+                       } )
+               } );
+       }
+} );
+
+jQuery.fn.extend( {
+       queue: function( type, data ) {
+               var setter = 2;
+
+               if ( typeof type !== "string" ) {
+                       data = type;
+                       type = "fx";
+                       setter--;
+               }
+
+               if ( arguments.length < setter ) {
+                       return jQuery.queue( this[ 0 ], type );
+               }
+
+               return data === undefined ?
+                       this :
+                       this.each( function() {
+                               var queue = jQuery.queue( this, type, data );
+
+                               // ensure a hooks for this queue
+                               jQuery._queueHooks( this, type );
+
+                               if ( type === "fx" && queue[ 0 ] !== "inprogress" ) {
+                                       jQuery.dequeue( this, type );
+                               }
+                       } );
+       },
+       dequeue: function( type ) {
+               return this.each( function() {
+                       jQuery.dequeue( this, type );
+               } );
+       },
+       clearQueue: function( type ) {
+               return this.queue( type || "fx", [] );
+       },
+
+       // Get a promise resolved when queues of a certain type
+       // are emptied (fx is the type by default)
+       promise: function( type, obj ) {
+               var tmp,
+                       count = 1,
+                       defer = jQuery.Deferred(),
+                       elements = this,
+                       i = this.length,
+                       resolve = function() {
+                               if ( !( --count ) ) {
+                                       defer.resolveWith( elements, [ elements ] );
+                               }
+                       };
+
+               if ( typeof type !== "string" ) {
+                       obj = type;
+                       type = undefined;
+               }
+               type = type || "fx";
+
+               while ( i-- ) {
+                       tmp = jQuery._data( elements[ i ], type + "queueHooks" );
+                       if ( tmp && tmp.empty ) {
+                               count++;
+                               tmp.empty.add( resolve );
+                       }
+               }
+               resolve();
+               return defer.promise( obj );
+       }
+} );
+
+
+( function() {
+       var shrinkWrapBlocksVal;
+
+       support.shrinkWrapBlocks = function() {
+               if ( shrinkWrapBlocksVal != null ) {
+                       return shrinkWrapBlocksVal;
+               }
+
+               // Will be changed later if needed.
+               shrinkWrapBlocksVal = false;
+
+               // Minified: var b,c,d
+               var div, body, container;
+
+               body = document.getElementsByTagName( "body" )[ 0 ];
+               if ( !body || !body.style ) {
+
+                       // Test fired too early or in an unsupported environment, exit.
+                       return;
+               }
+
+               // Setup
+               div = document.createElement( "div" );
+               container = document.createElement( "div" );
+               container.style.cssText = "position:absolute;border:0;width:0;height:0;top:0;left:-9999px";
+               body.appendChild( container ).appendChild( div );
+
+               // Support: IE6
+               // Check if elements with layout shrink-wrap their children
+               if ( typeof div.style.zoom !== "undefined" ) {
+
+                       // Reset CSS: box-sizing; display; margin; border
+                       div.style.cssText =
+
+                               // Support: Firefox<29, Android 2.3
+                               // Vendor-prefix box-sizing
+                               "-webkit-box-sizing:content-box;-moz-box-sizing:content-box;" +
+                               "box-sizing:content-box;display:block;margin:0;border:0;" +
+                               "padding:1px;width:1px;zoom:1";
+                       div.appendChild( document.createElement( "div" ) ).style.width = "5px";
+                       shrinkWrapBlocksVal = div.offsetWidth !== 3;
+               }
+
+               body.removeChild( container );
+
+               return shrinkWrapBlocksVal;
+       };
+
+} )();
+var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source;
+
+var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" );
+
+
+var cssExpand = [ "Top", "Right", "Bottom", "Left" ];
+
+var isHidden = function( elem, el ) {
+
+               // isHidden might be called from jQuery#filter function;
+               // in that case, element will be second argument
+               elem = el || elem;
+               return jQuery.css( elem, "display" ) === "none" ||
+                       !jQuery.contains( elem.ownerDocument, elem );
+       };
+
+
+
+function adjustCSS( elem, prop, valueParts, tween ) {
+       var adjusted,
+               scale = 1,
+               maxIterations = 20,
+               currentValue = tween ?
+                       function() { return tween.cur(); } :
+                       function() { return jQuery.css( elem, prop, "" ); },
+               initial = currentValue(),
+               unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ),
+
+               // Starting value computation is required for potential unit mismatches
+               initialInUnit = ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) &&
+                       rcssNum.exec( jQuery.css( elem, prop ) );
+
+       if ( initialInUnit && initialInUnit[ 3 ] !== unit ) {
+
+               // Trust units reported by jQuery.css
+               unit = unit || initialInUnit[ 3 ];
+
+               // Make sure we update the tween properties later on
+               valueParts = valueParts || [];
+
+               // Iteratively approximate from a nonzero starting point
+               initialInUnit = +initial || 1;
+
+               do {
+
+                       // If previous iteration zeroed out, double until we get *something*.
+                       // Use string for doubling so we don't accidentally see scale as unchanged below
+                       scale = scale || ".5";
+
+                       // Adjust and apply
+                       initialInUnit = initialInUnit / scale;
+                       jQuery.style( elem, prop, initialInUnit + unit );
+
+               // Update scale, tolerating zero or NaN from tween.cur()
+               // Break the loop if scale is unchanged or perfect, or if we've just had enough.
+               } while (
+                       scale !== ( scale = currentValue() / initial ) && scale !== 1 && --maxIterations
+               );
+       }
+
+       if ( valueParts ) {
+               initialInUnit = +initialInUnit || +initial || 0;
+
+               // Apply relative offset (+=/-=) if specified
+               adjusted = valueParts[ 1 ] ?
+                       initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :
+                       +valueParts[ 2 ];
+               if ( tween ) {
+                       tween.unit = unit;
+                       tween.start = initialInUnit;
+                       tween.end = adjusted;
+               }
+       }
+       return adjusted;
+}
+
+
+// Multifunctional method to get and set values of a collection
+// The value/s can optionally be executed if it's a function
+var access = function( elems, fn, key, value, chainable, emptyGet, raw ) {
+       var i = 0,
+               length = elems.length,
+               bulk = key == null;
+
+       // Sets many values
+       if ( jQuery.type( key ) === "object" ) {
+               chainable = true;
+               for ( i in key ) {
+                       access( elems, fn, i, key[ i ], true, emptyGet, raw );
+               }
+
+       // Sets one value
+       } else if ( value !== undefined ) {
+               chainable = true;
+
+               if ( !jQuery.isFunction( value ) ) {
+                       raw = true;
+               }
+
+               if ( bulk ) {
+
+                       // Bulk operations run against the entire set
+                       if ( raw ) {
+                               fn.call( elems, value );
+                               fn = null;
+
+                       // ...except when executing function values
+                       } else {
+                               bulk = fn;
+                               fn = function( elem, key, value ) {
+                                       return bulk.call( jQuery( elem ), value );
+                               };
+                       }
+               }
+
+               if ( fn ) {
+                       for ( ; i < length; i++ ) {
+                               fn(
+                                       elems[ i ],
+                                       key,
+                                       raw ? value : value.call( elems[ i ], i, fn( elems[ i ], key ) )
+                               );
+                       }
+               }
+       }
+
+       return chainable ?
+               elems :
+
+               // Gets
+               bulk ?
+                       fn.call( elems ) :
+                       length ? fn( elems[ 0 ], key ) : emptyGet;
+};
+var rcheckableType = ( /^(?:checkbox|radio)$/i );
+
+var rtagName = ( /<([\w:-]+)/ );
+
+var rscriptType = ( /^$|\/(?:java|ecma)script/i );
+
+var rleadingWhitespace = ( /^\s+/ );
+
+var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|" +
+               "details|dialog|figcaption|figure|footer|header|hgroup|main|" +
+               "mark|meter|nav|output|picture|progress|section|summary|template|time|video";
+
+
+
+function createSafeFragment( document ) {
+       var list = nodeNames.split( "|" ),
+               safeFrag = document.createDocumentFragment();
+
+       if ( safeFrag.createElement ) {
+               while ( list.length ) {
+                       safeFrag.createElement(
+                               list.pop()
+                       );
+               }
+       }
+       return safeFrag;
+}
+
+
+( function() {
+       var div = document.createElement( "div" ),
+               fragment = document.createDocumentFragment(),
+               input = document.createElement( "input" );
+
+       // Setup
+       div.innerHTML = "  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>";
+
+       // IE strips leading whitespace when .innerHTML is used
+       support.leadingWhitespace = div.firstChild.nodeType === 3;
+
+       // Make sure that tbody elements aren't automatically inserted
+       // IE will insert them into empty tables
+       support.tbody = !div.getElementsByTagName( "tbody" ).length;
+
+       // Make sure that link elements get serialized correctly by innerHTML
+       // This requires a wrapper element in IE
+       support.htmlSerialize = !!div.getElementsByTagName( "link" ).length;
+
+       // Makes sure cloning an html5 element does not cause problems
+       // Where outerHTML is undefined, this still works
+       support.html5Clone =
+               document.createElement( "nav" ).cloneNode( true ).outerHTML !== "<:nav></:nav>";
+
+       // Check if a disconnected checkbox will retain its checked
+       // value of true after appended to the DOM (IE6/7)
+       input.type = "checkbox";
+       input.checked = true;
+       fragment.appendChild( input );
+       support.appendChecked = input.checked;
+
+       // Make sure textarea (and checkbox) defaultValue is properly cloned
+       // Support: IE6-IE11+
+       div.innerHTML = "<textarea>x</textarea>";
+       support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;
+
+       // #11217 - WebKit loses check when the name is after the checked attribute
+       fragment.appendChild( div );
+
+       // Support: Windows Web Apps (WWA)
+       // `name` and `type` must use .setAttribute for WWA (#14901)
+       input = document.createElement( "input" );
+       input.setAttribute( "type", "radio" );
+       input.setAttribute( "checked", "checked" );
+       input.setAttribute( "name", "t" );
+
+       div.appendChild( input );
+
+       // Support: Safari 5.1, iOS 5.1, Android 4.x, Android 2.3
+       // old WebKit doesn't clone checked state correctly in fragments
+       support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;
+
+       // Support: IE<9
+       // Cloned elements keep attachEvent handlers, we use addEventListener on IE9+
+       support.noCloneEvent = !!div.addEventListener;
+
+       // Support: IE<9
+       // Since attributes and properties are the same in IE,
+       // cleanData must set properties to undefined rather than use removeAttribute
+       div[ jQuery.expando ] = 1;
+       support.attributes = !div.getAttribute( jQuery.expando );
+} )();
+
+
+// We have to close these tags to support XHTML (#13200)
+var wrapMap = {
+       option: [ 1, "<select multiple='multiple'>", "</select>" ],
+       legend: [ 1, "<fieldset>", "</fieldset>" ],
+       area: [ 1, "<map>", "</map>" ],
+
+       // Support: IE8
+       param: [ 1, "<object>", "</object>" ],
+       thead: [ 1, "<table>", "</table>" ],
+       tr: [ 2, "<table><tbody>", "</tbody></table>" ],
+       col: [ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ],
+       td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
+
+       // IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags,
+       // unless wrapped in a div with non-breaking characters in front of it.
+       _default: support.htmlSerialize ? [ 0, "", "" ] : [ 1, "X<div>", "</div>" ]
+};
+
+// Support: IE8-IE9
+wrapMap.optgroup = wrapMap.option;
+
+wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
+wrapMap.th = wrapMap.td;
+
+
+function getAll( context, tag ) {
+       var elems, elem,
+               i = 0,
+               found = typeof context.getElementsByTagName !== "undefined" ?
+                       context.getElementsByTagName( tag || "*" ) :
+                       typeof context.querySelectorAll !== "undefined" ?
+                               context.querySelectorAll( tag || "*" ) :
+                               undefined;
+
+       if ( !found ) {
+               for ( found = [], elems = context.childNodes || context;
+                       ( elem = elems[ i ] ) != null;
+                       i++
+               ) {
+                       if ( !tag || jQuery.nodeName( elem, tag ) ) {
+                               found.push( elem );
+                       } else {
+                               jQuery.merge( found, getAll( elem, tag ) );
+                       }
+               }
+       }
+
+       return tag === undefined || tag && jQuery.nodeName( context, tag ) ?
+               jQuery.merge( [ context ], found ) :
+               found;
+}
+
+
+// Mark scripts as having already been evaluated
+function setGlobalEval( elems, refElements ) {
+       var elem,
+               i = 0;
+       for ( ; ( elem = elems[ i ] ) != null; i++ ) {
+               jQuery._data(
+                       elem,
+                       "globalEval",
+                       !refElements || jQuery._data( refElements[ i ], "globalEval" )
+               );
+       }
+}
+
+
+var rhtml = /<|&#?\w+;/,
+       rtbody = /<tbody/i;
+
+function fixDefaultChecked( elem ) {
+       if ( rcheckableType.test( elem.type ) ) {
+               elem.defaultChecked = elem.checked;
+       }
+}
+
+function buildFragment( elems, context, scripts, selection, ignored ) {
+       var j, elem, contains,
+               tmp, tag, tbody, wrap,
+               l = elems.length,
+
+               // Ensure a safe fragment
+               safe = createSafeFragment( context ),
+
+               nodes = [],
+               i = 0;
+
+       for ( ; i < l; i++ ) {
+               elem = elems[ i ];
+
+               if ( elem || elem === 0 ) {
+
+                       // Add nodes directly
+                       if ( jQuery.type( elem ) === "object" ) {
+                               jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );
+
+                       // Convert non-html into a text node
+                       } else if ( !rhtml.test( elem ) ) {
+                               nodes.push( context.createTextNode( elem ) );
+
+                       // Convert html into DOM nodes
+                       } else {
+                               tmp = tmp || safe.appendChild( context.createElement( "div" ) );
+
+                               // Deserialize a standard representation
+                               tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase();
+                               wrap = wrapMap[ tag ] || wrapMap._default;
+
+                               tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];
+
+                               // Descend through wrappers to the right content
+                               j = wrap[ 0 ];
+                               while ( j-- ) {
+                                       tmp = tmp.lastChild;
+                               }
+
+                               // Manually add leading whitespace removed by IE
+                               if ( !support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {
+                                       nodes.push( context.createTextNode( rleadingWhitespace.exec( elem )[ 0 ] ) );
+                               }
+
+                               // Remove IE's autoinserted <tbody> from table fragments
+                               if ( !support.tbody ) {
+
+                                       // String was a <table>, *may* have spurious <tbody>
+                                       elem = tag === "table" && !rtbody.test( elem ) ?
+                                               tmp.firstChild :
+
+                                               // String was a bare <thead> or <tfoot>
+                                               wrap[ 1 ] === "<table>" && !rtbody.test( elem ) ?
+                                                       tmp :
+                                                       0;
+
+                                       j = elem && elem.childNodes.length;
+                                       while ( j-- ) {
+                                               if ( jQuery.nodeName( ( tbody = elem.childNodes[ j ] ), "tbody" ) &&
+                                                       !tbody.childNodes.length ) {
+
+                                                       elem.removeChild( tbody );
+                                               }
+                                       }
+                               }
+
+                               jQuery.merge( nodes, tmp.childNodes );
+
+                               // Fix #12392 for WebKit and IE > 9
+                               tmp.textContent = "";
+
+                               // Fix #12392 for oldIE
+                               while ( tmp.firstChild ) {
+                                       tmp.removeChild( tmp.firstChild );
+                               }
+
+                               // Remember the top-level container for proper cleanup
+                               tmp = safe.lastChild;
+                       }
+               }
+       }
+
+       // Fix #11356: Clear elements from fragment
+       if ( tmp ) {
+               safe.removeChild( tmp );
+       }
+
+       // Reset defaultChecked for any radios and checkboxes
+       // about to be appended to the DOM in IE 6/7 (#8060)
+       if ( !support.appendChecked ) {
+               jQuery.grep( getAll( nodes, "input" ), fixDefaultChecked );
+       }
+
+       i = 0;
+       while ( ( elem = nodes[ i++ ] ) ) {
+
+               // Skip elements already in the context collection (trac-4087)
+               if ( selection && jQuery.inArray( elem, selection ) > -1 ) {
+                       if ( ignored ) {
+                               ignored.push( elem );
+                       }
+
+                       continue;
+               }
+
+               contains = jQuery.contains( elem.ownerDocument, elem );
+
+               // Append to fragment
+               tmp = getAll( safe.appendChild( elem ), "script" );
+
+               // Preserve script evaluation history
+               if ( contains ) {
+                       setGlobalEval( tmp );
+               }
+
+               // Capture executables
+               if ( scripts ) {
+                       j = 0;
+                       while ( ( elem = tmp[ j++ ] ) ) {
+                               if ( rscriptType.test( elem.type || "" ) ) {
+                                       scripts.push( elem );
+                               }
+                       }
+               }
+       }
+
+       tmp = null;
+
+       return safe;
+}
+
+
+( function() {
+       var i, eventName,
+               div = document.createElement( "div" );
+
+       // Support: IE<9 (lack submit/change bubble), Firefox (lack focus(in | out) events)
+       for ( i in { submit: true, change: true, focusin: true } ) {
+               eventName = "on" + i;
+
+               if ( !( support[ i ] = eventName in window ) ) {
+
+                       // Beware of CSP restrictions (https://developer.mozilla.org/en/Security/CSP)
+                       div.setAttribute( eventName, "t" );
+                       support[ i ] = div.attributes[ eventName ].expando === false;
+               }
+       }
+
+       // Null elements to avoid leaks in IE.
+       div = null;
+} )();
+
+
+var rformElems = /^(?:input|select|textarea)$/i,
+       rkeyEvent = /^key/,
+       rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,
+       rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,
+       rtypenamespace = /^([^.]*)(?:\.(.+)|)/;
+
+function returnTrue() {
+       return true;
+}
+
+function returnFalse() {
+       return false;
+}
+
+// Support: IE9
+// See #13393 for more info
+function safeActiveElement() {
+       try {
+               return document.activeElement;
+       } catch ( err ) { }
+}
+
+function on( elem, types, selector, data, fn, one ) {
+       var origFn, type;
+
+       // Types can be a map of types/handlers
+       if ( typeof types === "object" ) {
+
+               // ( types-Object, selector, data )
+               if ( typeof selector !== "string" ) {
+
+                       // ( types-Object, data )
+                       data = data || selector;
+                       selector = undefined;
+               }
+               for ( type in types ) {
+                       on( elem, type, selector, data, types[ type ], one );
+               }
+               return elem;
+       }
+
+       if ( data == null && fn == null ) {
+
+               // ( types, fn )
+               fn = selector;
+               data = selector = undefined;
+       } else if ( fn == null ) {
+               if ( typeof selector === "string" ) {
+
+                       // ( types, selector, fn )
+                       fn = data;
+                       data = undefined;
+               } else {
+
+                       // ( types, data, fn )
+                       fn = data;
+                       data = selector;
+                       selector = undefined;
+               }
+       }
+       if ( fn === false ) {
+               fn = returnFalse;
+       } else if ( !fn ) {
+               return elem;
+       }
+
+       if ( one === 1 ) {
+               origFn = fn;
+               fn = function( event ) {
+
+                       // Can use an empty set, since event contains the info
+                       jQuery().off( event );
+                       return origFn.apply( this, arguments );
+               };
+
+               // Use same guid so caller can remove using origFn
+               fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
+       }
+       return elem.each( function() {
+               jQuery.event.add( this, types, fn, data, selector );
+       } );
+}
+
+/*
+ * Helper functions for managing events -- not part of the public interface.
+ * Props to Dean Edwards' addEvent library for many of the ideas.
+ */
+jQuery.event = {
+
+       global: {},
+
+       add: function( elem, types, handler, data, selector ) {
+               var tmp, events, t, handleObjIn,
+                       special, eventHandle, handleObj,
+                       handlers, type, namespaces, origType,
+                       elemData = jQuery._data( elem );
+
+               // Don't attach events to noData or text/comment nodes (but allow plain objects)
+               if ( !elemData ) {
+                       return;
+               }
+
+               // Caller can pass in an object of custom data in lieu of the handler
+               if ( handler.handler ) {
+                       handleObjIn = handler;
+                       handler = handleObjIn.handler;
+                       selector = handleObjIn.selector;
+               }
+
+               // Make sure that the handler has a unique ID, used to find/remove it later
+               if ( !handler.guid ) {
+                       handler.guid = jQuery.guid++;
+               }
+
+               // Init the element's event structure and main handler, if this is the first
+               if ( !( events = elemData.events ) ) {
+                       events = elemData.events = {};
+               }
+               if ( !( eventHandle = elemData.handle ) ) {
+                       eventHandle = elemData.handle = function( e ) {
+
+                               // Discard the second event of a jQuery.event.trigger() and
+                               // when an event is called after a page has unloaded
+                               return typeof jQuery !== "undefined" &&
+                                       ( !e || jQuery.event.triggered !== e.type ) ?
+                                       jQuery.event.dispatch.apply( eventHandle.elem, arguments ) :
+                                       undefined;
+                       };
+
+                       // Add elem as a property of the handle fn to prevent a memory leak
+                       // with IE non-native events
+                       eventHandle.elem = elem;
+               }
+
+               // Handle multiple events separated by a space
+               types = ( types || "" ).match( rnotwhite ) || [ "" ];
+               t = types.length;
+               while ( t-- ) {
+                       tmp = rtypenamespace.exec( types[ t ] ) || [];
+                       type = origType = tmp[ 1 ];
+                       namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
+
+                       // There *must* be a type, no attaching namespace-only handlers
+                       if ( !type ) {
+                               continue;
+                       }
+
+                       // If event changes its type, use the special event handlers for the changed type
+                       special = jQuery.event.special[ type ] || {};
+
+                       // If selector defined, determine special event api type, otherwise given type
+                       type = ( selector ? special.delegateType : special.bindType ) || type;
+
+                       // Update special based on newly reset type
+                       special = jQuery.event.special[ type ] || {};
+
+                       // handleObj is passed to all event handlers
+                       handleObj = jQuery.extend( {
+                               type: type,
+                               origType: origType,
+                               data: data,
+                               handler: handler,
+                               guid: handler.guid,
+                               selector: selector,
+                               needsContext: selector && jQuery.expr.match.needsContext.test( selector ),
+                               namespace: namespaces.join( "." )
+                       }, handleObjIn );
+
+                       // Init the event handler queue if we're the first
+                       if ( !( handlers = events[ type ] ) ) {
+                               handlers = events[ type ] = [];
+                               handlers.delegateCount = 0;
+
+                               // Only use addEventListener/attachEvent if the special events handler returns false
+                               if ( !special.setup ||
+                                       special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
+
+                                       // Bind the global event handler to the element
+                                       if ( elem.addEventListener ) {
+                                               elem.addEventListener( type, eventHandle, false );
+
+                                       } else if ( elem.attachEvent ) {
+                                               elem.attachEvent( "on" + type, eventHandle );
+                                       }
+                               }
+                       }
+
+                       if ( special.add ) {
+                               special.add.call( elem, handleObj );
+
+                               if ( !handleObj.handler.guid ) {
+                                       handleObj.handler.guid = handler.guid;
+                               }
+                       }
+
+                       // Add to the element's handler list, delegates in front
+                       if ( selector ) {
+                               handlers.splice( handlers.delegateCount++, 0, handleObj );
+                       } else {
+                               handlers.push( handleObj );
+                       }
+
+                       // Keep track of which events have ever been used, for event optimization
+                       jQuery.event.global[ type ] = true;
+               }
+
+               // Nullify elem to prevent memory leaks in IE
+               elem = null;
+       },
+
+       // Detach an event or set of events from an element
+       remove: function( elem, types, handler, selector, mappedTypes ) {
+               var j, handleObj, tmp,
+                       origCount, t, events,
+                       special, handlers, type,
+                       namespaces, origType,
+                       elemData = jQuery.hasData( elem ) && jQuery._data( elem );
+
+               if ( !elemData || !( events = elemData.events ) ) {
+                       return;
+               }
+
+               // Once for each type.namespace in types; type may be omitted
+               types = ( types || "" ).match( rnotwhite ) || [ "" ];
+               t = types.length;
+               while ( t-- ) {
+                       tmp = rtypenamespace.exec( types[ t ] ) || [];
+                       type = origType = tmp[ 1 ];
+                       namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
+
+                       // Unbind all events (on this namespace, if provided) for the element
+                       if ( !type ) {
+                               for ( type in events ) {
+                                       jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
+                               }
+                               continue;
+                       }
+
+                       special = jQuery.event.special[ type ] || {};
+                       type = ( selector ? special.delegateType : special.bindType ) || type;
+                       handlers = events[ type ] || [];
+                       tmp = tmp[ 2 ] &&
+                               new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" );
+
+                       // Remove matching events
+                       origCount = j = handlers.length;
+                       while ( j-- ) {
+                               handleObj = handlers[ j ];
+
+                               if ( ( mappedTypes || origType === handleObj.origType ) &&
+                                       ( !handler || handler.guid === handleObj.guid ) &&
+                                       ( !tmp || tmp.test( handleObj.namespace ) ) &&
+                                       ( !selector || selector === handleObj.selector ||
+                                               selector === "**" && handleObj.selector ) ) {
+                                       handlers.splice( j, 1 );
+
+                                       if ( handleObj.selector ) {
+                                               handlers.delegateCount--;
+                                       }
+                                       if ( special.remove ) {
+                                               special.remove.call( elem, handleObj );
+                                       }
+                               }
+                       }
+
+                       // Remove generic event handler if we removed something and no more handlers exist
+                       // (avoids potential for endless recursion during removal of special event handlers)
+                       if ( origCount && !handlers.length ) {
+                               if ( !special.teardown ||
+                                       special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
+
+                                       jQuery.removeEvent( elem, type, elemData.handle );
+                               }
+
+                               delete events[ type ];
+                       }
+               }
+
+               // Remove the expando if it's no longer used
+               if ( jQuery.isEmptyObject( events ) ) {
+                       delete elemData.handle;
+
+                       // removeData also checks for emptiness and clears the expando if empty
+                       // so use it instead of delete
+                       jQuery._removeData( elem, "events" );
+               }
+       },
+
+       trigger: function( event, data, elem, onlyHandlers ) {
+               var handle, ontype, cur,
+                       bubbleType, special, tmp, i,
+                       eventPath = [ elem || document ],
+                       type = hasOwn.call( event, "type" ) ? event.type : event,
+                       namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : [];
+
+               cur = tmp = elem = elem || document;
+
+               // Don't do events on text and comment nodes
+               if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
+                       return;
+               }
+
+               // focus/blur morphs to focusin/out; ensure we're not firing them right now
+               if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
+                       return;
+               }
+
+               if ( type.indexOf( "." ) > -1 ) {
+
+                       // Namespaced trigger; create a regexp to match event type in handle()
+                       namespaces = type.split( "." );
+                       type = namespaces.shift();
+                       namespaces.sort();
+               }
+               ontype = type.indexOf( ":" ) < 0 && "on" + type;
+
+               // Caller can pass in a jQuery.Event object, Object, or just an event type string
+               event = event[ jQuery.expando ] ?
+                       event :
+                       new jQuery.Event( type, typeof event === "object" && event );
+
+               // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)
+               event.isTrigger = onlyHandlers ? 2 : 3;
+               event.namespace = namespaces.join( "." );
+               event.rnamespace = event.namespace ?
+                       new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) :
+                       null;
+
+               // Clean up the event in case it is being reused
+               event.result = undefined;
+               if ( !event.target ) {
+                       event.target = elem;
+               }
+
+               // Clone any incoming data and prepend the event, creating the handler arg list
+               data = data == null ?
+                       [ event ] :
+                       jQuery.makeArray( data, [ event ] );
+
+               // Allow special events to draw outside the lines
+               special = jQuery.event.special[ type ] || {};
+               if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {
+                       return;
+               }
+
+               // Determine event propagation path in advance, per W3C events spec (#9951)
+               // Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
+               if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {
+
+                       bubbleType = special.delegateType || type;
+                       if ( !rfocusMorph.test( bubbleType + type ) ) {
+                               cur = cur.parentNode;
+                       }
+                       for ( ; cur; cur = cur.parentNode ) {
+                               eventPath.push( cur );
+                               tmp = cur;
+                       }
+
+                       // Only add window if we got to document (e.g., not plain obj or detached DOM)
+                       if ( tmp === ( elem.ownerDocument || document ) ) {
+                               eventPath.push( tmp.defaultView || tmp.parentWindow || window );
+                       }
+               }
+
+               // Fire handlers on the event path
+               i = 0;
+               while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {
+
+                       event.type = i > 1 ?
+                               bubbleType :
+                               special.bindType || type;
+
+                       // jQuery handler
+                       handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] &&
+                               jQuery._data( cur, "handle" );
+
+                       if ( handle ) {
+                               handle.apply( cur, data );
+                       }
+
+                       // Native handler
+                       handle = ontype && cur[ ontype ];
+                       if ( handle && handle.apply && acceptData( cur ) ) {
+                               event.result = handle.apply( cur, data );
+                               if ( event.result === false ) {
+                                       event.preventDefault();
+                               }
+                       }
+               }
+               event.type = type;
+
+               // If nobody prevented the default action, do it now
+               if ( !onlyHandlers && !event.isDefaultPrevented() ) {
+
+                       if (
+                               ( !special._default ||
+                                special._default.apply( eventPath.pop(), data ) === false
+                               ) && acceptData( elem )
+                       ) {
+
+                               // Call a native DOM method on the target with the same name name as the event.
+                               // Can't use an .isFunction() check here because IE6/7 fails that test.
+                               // Don't do default actions on window, that's where global variables be (#6170)
+                               if ( ontype && elem[ type ] && !jQuery.isWindow( elem ) ) {
+
+                                       // Don't re-trigger an onFOO event when we call its FOO() method
+                                       tmp = elem[ ontype ];
+
+                                       if ( tmp ) {
+                                               elem[ ontype ] = null;
+                                       }
+
+                                       // Prevent re-triggering of the same event, since we already bubbled it above
+                                       jQuery.event.triggered = type;
+                                       try {
+                                               elem[ type ]();
+                                       } catch ( e ) {
+
+                                               // IE<9 dies on focus/blur to hidden element (#1486,#12518)
+                                               // only reproducible on winXP IE8 native, not IE9 in IE8 mode
+                                       }
+                                       jQuery.event.triggered = undefined;
+
+                                       if ( tmp ) {
+                                               elem[ ontype ] = tmp;
+                                       }
+                               }
+                       }
+               }
+
+               return event.result;
+       },
+
+       dispatch: function( event ) {
+
+               // Make a writable jQuery.Event from the native event object
+               event = jQuery.event.fix( event );
+
+               var i, j, ret, matched, handleObj,
+                       handlerQueue = [],
+                       args = slice.call( arguments ),
+                       handlers = ( jQuery._data( this, "events" ) || {} )[ event.type ] || [],
+                       special = jQuery.event.special[ event.type ] || {};
+
+               // Use the fix-ed jQuery.Event rather than the (read-only) native event
+               args[ 0 ] = event;
+               event.delegateTarget = this;
+
+               // Call the preDispatch hook for the mapped type, and let it bail if desired
+               if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
+                       return;
+               }
+
+               // Determine handlers
+               handlerQueue = jQuery.event.handlers.call( this, event, handlers );
+
+               // Run delegates first; they may want to stop propagation beneath us
+               i = 0;
+               while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {
+                       event.currentTarget = matched.elem;
+
+                       j = 0;
+                       while ( ( handleObj = matched.handlers[ j++ ] ) &&
+                               !event.isImmediatePropagationStopped() ) {
+
+                               // Triggered event must either 1) have no namespace, or 2) have namespace(s)
+                               // a subset or equal to those in the bound event (both can have no namespace).
+                               if ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) {
+
+                                       event.handleObj = handleObj;
+                                       event.data = handleObj.data;
+
+                                       ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||
+                                               handleObj.handler ).apply( matched.elem, args );
+
+                                       if ( ret !== undefined ) {
+                                               if ( ( event.result = ret ) === false ) {
+                                                       event.preventDefault();
+                                                       event.stopPropagation();
+                                               }
+                                       }
+                               }
+                       }
+               }
+
+               // Call the postDispatch hook for the mapped type
+               if ( special.postDispatch ) {
+                       special.postDispatch.call( this, event );
+               }
+
+               return event.result;
+       },
+
+       handlers: function( event, handlers ) {
+               var i, matches, sel, handleObj,
+                       handlerQueue = [],
+                       delegateCount = handlers.delegateCount,
+                       cur = event.target;
+
+               // Support (at least): Chrome, IE9
+               // Find delegate handlers
+               // Black-hole SVG <use> instance trees (#13180)
+               //
+               // Support: Firefox<=42+
+               // Avoid non-left-click in FF but don't block IE radio events (#3861, gh-2343)
+               if ( delegateCount && cur.nodeType &&
+                       ( event.type !== "click" || isNaN( event.button ) || event.button < 1 ) ) {
+
+                       /* jshint eqeqeq: false */
+                       for ( ; cur != this; cur = cur.parentNode || this ) {
+                               /* jshint eqeqeq: true */
+
+                               // Don't check non-elements (#13208)
+                               // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)
+                               if ( cur.nodeType === 1 && ( cur.disabled !== true || event.type !== "click" ) ) {
+                                       matches = [];
+                                       for ( i = 0; i < delegateCount; i++ ) {
+                                               handleObj = handlers[ i ];
+
+                                               // Don't conflict with Object.prototype properties (#13203)
+                                               sel = handleObj.selector + " ";
+
+                                               if ( matches[ sel ] === undefined ) {
+                                                       matches[ sel ] = handleObj.needsContext ?
+                                                               jQuery( sel, this ).index( cur ) > -1 :
+                                                               jQuery.find( sel, this, null, [ cur ] ).length;
+                                               }
+                                               if ( matches[ sel ] ) {
+                                                       matches.push( handleObj );
+                                               }
+                                       }
+                                       if ( matches.length ) {
+                                               handlerQueue.push( { elem: cur, handlers: matches } );
+                                       }
+                               }
+                       }
+               }
+
+               // Add the remaining (directly-bound) handlers
+               if ( delegateCount < handlers.length ) {
+                       handlerQueue.push( { elem: this, handlers: handlers.slice( delegateCount ) } );
+               }
+
+               return handlerQueue;
+       },
+
+       fix: function( event ) {
+               if ( event[ jQuery.expando ] ) {
+                       return event;
+               }
+
+               // Create a writable copy of the event object and normalize some properties
+               var i, prop, copy,
+                       type = event.type,
+                       originalEvent = event,
+                       fixHook = this.fixHooks[ type ];
+
+               if ( !fixHook ) {
+                       this.fixHooks[ type ] = fixHook =
+                               rmouseEvent.test( type ) ? this.mouseHooks :
+                               rkeyEvent.test( type ) ? this.keyHooks :
+                               {};
+               }
+               copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;
+
+               event = new jQuery.Event( originalEvent );
+
+               i = copy.length;
+               while ( i-- ) {
+                       prop = copy[ i ];
+                       event[ prop ] = originalEvent[ prop ];
+               }
+
+               // Support: IE<9
+               // Fix target property (#1925)
+               if ( !event.target ) {
+                       event.target = originalEvent.srcElement || document;
+               }
+
+               // Support: Safari 6-8+
+               // Target should not be a text node (#504, #13143)
+               if ( event.target.nodeType === 3 ) {
+                       event.target = event.target.parentNode;
+               }
+
+               // Support: IE<9
+               // For mouse/key events, metaKey==false if it's undefined (#3368, #11328)
+               event.metaKey = !!event.metaKey;
+
+               return fixHook.filter ? fixHook.filter( event, originalEvent ) : event;
+       },
+
+       // Includes some event props shared by KeyEvent and MouseEvent
+       props: ( "altKey bubbles cancelable ctrlKey currentTarget detail eventPhase " +
+               "metaKey relatedTarget shiftKey target timeStamp view which" ).split( " " ),
+
+       fixHooks: {},
+
+       keyHooks: {
+               props: "char charCode key keyCode".split( " " ),
+               filter: function( event, original ) {
+
+                       // Add which for key events
+                       if ( event.which == null ) {
+                               event.which = original.charCode != null ? original.charCode : original.keyCode;
+                       }
+
+                       return event;
+               }
+       },
+
+       mouseHooks: {
+               props: ( "button buttons clientX clientY fromElement offsetX offsetY " +
+                       "pageX pageY screenX screenY toElement" ).split( " " ),
+               filter: function( event, original ) {
+                       var body, eventDoc, doc,
+                               button = original.button,
+                               fromElement = original.fromElement;
+
+                       // Calculate pageX/Y if missing and clientX/Y available
+                       if ( event.pageX == null && original.clientX != null ) {
+                               eventDoc = event.target.ownerDocument || document;
+                               doc = eventDoc.documentElement;
+                               body = eventDoc.body;
+
+                               event.pageX = original.clientX +
+                                       ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) -
+                                       ( doc && doc.clientLeft || body && body.clientLeft || 0 );
+                               event.pageY = original.clientY +
+                                       ( doc && doc.scrollTop  || body && body.scrollTop  || 0 ) -
+                                       ( doc && doc.clientTop  || body && body.clientTop  || 0 );
+                       }
+
+                       // Add relatedTarget, if necessary
+                       if ( !event.relatedTarget && fromElement ) {
+                               event.relatedTarget = fromElement === event.target ?
+                                       original.toElement :
+                                       fromElement;
+                       }
+
+                       // Add which for click: 1 === left; 2 === middle; 3 === right
+                       // Note: button is not normalized, so don't use it
+                       if ( !event.which && button !== undefined ) {
+                               event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );
+                       }
+
+                       return event;
+               }
+       },
+
+       special: {
+               load: {
+
+                       // Prevent triggered image.load events from bubbling to window.load
+                       noBubble: true
+               },
+               focus: {
+
+                       // Fire native event if possible so blur/focus sequence is correct
+                       trigger: function() {
+                               if ( this !== safeActiveElement() && this.focus ) {
+                                       try {
+                                               this.focus();
+                                               return false;
+                                       } catch ( e ) {
+
+                                               // Support: IE<9
+                                               // If we error on focus to hidden element (#1486, #12518),
+                                               // let .trigger() run the handlers
+                                       }
+                               }
+                       },
+                       delegateType: "focusin"
+               },
+               blur: {
+                       trigger: function() {
+                               if ( this === safeActiveElement() && this.blur ) {
+                                       this.blur();
+                                       return false;
+                               }
+                       },
+                       delegateType: "focusout"
+               },
+               click: {
+
+                       // For checkbox, fire native event so checked state will be right
+                       trigger: function() {
+                               if ( jQuery.nodeName( this, "input" ) && this.type === "checkbox" && this.click ) {
+                                       this.click();
+                                       return false;
+                               }
+                       },
+
+                       // For cross-browser consistency, don't fire native .click() on links
+                       _default: function( event ) {
+                               return jQuery.nodeName( event.target, "a" );
+                       }
+               },
+
+               beforeunload: {
+                       postDispatch: function( event ) {
+
+                               // Support: Firefox 20+
+                               // Firefox doesn't alert if the returnValue field is not set.
+                               if ( event.result !== undefined && event.originalEvent ) {
+                                       event.originalEvent.returnValue = event.result;
+                               }
+                       }
+               }
+       },
+
+       // Piggyback on a donor event to simulate a different one
+       simulate: function( type, elem, event ) {
+               var e = jQuery.extend(
+                       new jQuery.Event(),
+                       event,
+                       {
+                               type: type,
+                               isSimulated: true
+
+                               // Previously, `originalEvent: {}` was set here, so stopPropagation call
+                               // would not be triggered on donor event, since in our own
+                               // jQuery.event.stopPropagation function we had a check for existence of
+                               // originalEvent.stopPropagation method, so, consequently it would be a noop.
+                               //
+                               // Guard for simulated events was moved to jQuery.event.stopPropagation function
+                               // since `originalEvent` should point to the original event for the
+                               // constancy with other events and for more focused logic
+                       }
+               );
+
+               jQuery.event.trigger( e, null, elem );
+
+               if ( e.isDefaultPrevented() ) {
+                       event.preventDefault();
+               }
+       }
+};
+
+jQuery.removeEvent = document.removeEventListener ?
+       function( elem, type, handle ) {
+
+               // This "if" is needed for plain objects
+               if ( elem.removeEventListener ) {
+                       elem.removeEventListener( type, handle );
+               }
+       } :
+       function( elem, type, handle ) {
+               var name = "on" + type;
+
+               if ( elem.detachEvent ) {
+
+                       // #8545, #7054, preventing memory leaks for custom events in IE6-8
+                       // detachEvent needed property on element, by name of that event,
+                       // to properly expose it to GC
+                       if ( typeof elem[ name ] === "undefined" ) {
+                               elem[ name ] = null;
+                       }
+
+                       elem.detachEvent( name, handle );
+               }
+       };
+
+jQuery.Event = function( src, props ) {
+
+       // Allow instantiation without the 'new' keyword
+       if ( !( this instanceof jQuery.Event ) ) {
+               return new jQuery.Event( src, props );
+       }
+
+       // Event object
+       if ( src && src.type ) {
+               this.originalEvent = src;
+               this.type = src.type;
+
+               // Events bubbling up the document may have been marked as prevented
+               // by a handler lower down the tree; reflect the correct value.
+               this.isDefaultPrevented = src.defaultPrevented ||
+                               src.defaultPrevented === undefined &&
+
+                               // Support: IE < 9, Android < 4.0
+                               src.returnValue === false ?
+                       returnTrue :
+                       returnFalse;
+
+       // Event type
+       } else {
+               this.type = src;
+       }
+
+       // Put explicitly provided properties onto the event object
+       if ( props ) {
+               jQuery.extend( this, props );
+       }
+
+       // Create a timestamp if incoming event doesn't have one
+       this.timeStamp = src && src.timeStamp || jQuery.now();
+
+       // Mark it as fixed
+       this[ jQuery.expando ] = true;
+};
+
+// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
+// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
+jQuery.Event.prototype = {
+       constructor: jQuery.Event,
+       isDefaultPrevented: returnFalse,
+       isPropagationStopped: returnFalse,
+       isImmediatePropagationStopped: returnFalse,
+
+       preventDefault: function() {
+               var e = this.originalEvent;
+
+               this.isDefaultPrevented = returnTrue;
+               if ( !e ) {
+                       return;
+               }
+
+               // If preventDefault exists, run it on the original event
+               if ( e.preventDefault ) {
+                       e.preventDefault();
+
+               // Support: IE
+               // Otherwise set the returnValue property of the original event to false
+               } else {
+                       e.returnValue = false;
+               }
+       },
+       stopPropagation: function() {
+               var e = this.originalEvent;
+
+               this.isPropagationStopped = returnTrue;
+
+               if ( !e || this.isSimulated ) {
+                       return;
+               }
+
+               // If stopPropagation exists, run it on the original event
+               if ( e.stopPropagation ) {
+                       e.stopPropagation();
+               }
+
+               // Support: IE
+               // Set the cancelBubble property of the original event to true
+               e.cancelBubble = true;
+       },
+       stopImmediatePropagation: function() {
+               var e = this.originalEvent;
+
+               this.isImmediatePropagationStopped = returnTrue;
+
+               if ( e && e.stopImmediatePropagation ) {
+                       e.stopImmediatePropagation();
+               }
+
+               this.stopPropagation();
+       }
+};
+
+// Create mouseenter/leave events using mouseover/out and event-time checks
+// so that event delegation works in jQuery.
+// Do the same for pointerenter/pointerleave and pointerover/pointerout
+//
+// Support: Safari 7 only
+// Safari sends mouseenter too often; see:
+// https://code.google.com/p/chromium/issues/detail?id=470258
+// for the description of the bug (it existed in older Chrome versions as well).
+jQuery.each( {
+       mouseenter: "mouseover",
+       mouseleave: "mouseout",
+       pointerenter: "pointerover",
+       pointerleave: "pointerout"
+}, function( orig, fix ) {
+       jQuery.event.special[ orig ] = {
+               delegateType: fix,
+               bindType: fix,
+
+               handle: function( event ) {
+                       var ret,
+                               target = this,
+                               related = event.relatedTarget,
+                               handleObj = event.handleObj;
+
+                       // For mouseenter/leave call the handler if related is outside the target.
+                       // NB: No relatedTarget if the mouse left/entered the browser window
+                       if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {
+                               event.type = handleObj.origType;
+                               ret = handleObj.handler.apply( this, arguments );
+                               event.type = fix;
+                       }
+                       return ret;
+               }
+       };
+} );
+
+// IE submit delegation
+if ( !support.submit ) {
+
+       jQuery.event.special.submit = {
+               setup: function() {
+
+                       // Only need this for delegated form submit events
+                       if ( jQuery.nodeName( this, "form" ) ) {
+                               return false;
+                       }
+
+                       // Lazy-add a submit handler when a descendant form may potentially be submitted
+                       jQuery.event.add( this, "click._submit keypress._submit", function( e ) {
+
+                               // Node name check avoids a VML-related crash in IE (#9807)
+                               var elem = e.target,
+                                       form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ?
+
+                                               // Support: IE <=8
+                                               // We use jQuery.prop instead of elem.form
+                                               // to allow fixing the IE8 delegated submit issue (gh-2332)
+                                               // by 3rd party polyfills/workarounds.
+                                               jQuery.prop( elem, "form" ) :
+                                               undefined;
+
+                               if ( form && !jQuery._data( form, "submit" ) ) {
+                                       jQuery.event.add( form, "submit._submit", function( event ) {
+                                               event._submitBubble = true;
+                                       } );
+                                       jQuery._data( form, "submit", true );
+                               }
+                       } );
+
+                       // return undefined since we don't need an event listener
+               },
+
+               postDispatch: function( event ) {
+
+                       // If form was submitted by the user, bubble the event up the tree
+                       if ( event._submitBubble ) {
+                               delete event._submitBubble;
+                               if ( this.parentNode && !event.isTrigger ) {
+                                       jQuery.event.simulate( "submit", this.parentNode, event );
+                               }
+                       }
+               },
+
+               teardown: function() {
+
+                       // Only need this for delegated form submit events
+                       if ( jQuery.nodeName( this, "form" ) ) {
+                               return false;
+                       }
+
+                       // Remove delegated handlers; cleanData eventually reaps submit handlers attached above
+                       jQuery.event.remove( this, "._submit" );
+               }
+       };
+}
+
+// IE change delegation and checkbox/radio fix
+if ( !support.change ) {
+
+       jQuery.event.special.change = {
+
+               setup: function() {
+
+                       if ( rformElems.test( this.nodeName ) ) {
+
+                               // IE doesn't fire change on a check/radio until blur; trigger it on click
+                               // after a propertychange. Eat the blur-change in special.change.handle.
+                               // This still fires onchange a second time for check/radio after blur.
+                               if ( this.type === "checkbox" || this.type === "radio" ) {
+                                       jQuery.event.add( this, "propertychange._change", function( event ) {
+                                               if ( event.originalEvent.propertyName === "checked" ) {
+                                                       this._justChanged = true;
+                                               }
+                                       } );
+                                       jQuery.event.add( this, "click._change", function( event ) {
+                                               if ( this._justChanged && !event.isTrigger ) {
+                                                       this._justChanged = false;
+                                               }
+
+                                               // Allow triggered, simulated change events (#11500)
+                                               jQuery.event.simulate( "change", this, event );
+                                       } );
+                               }
+                               return false;
+                       }
+
+                       // Delegated event; lazy-add a change handler on descendant inputs
+                       jQuery.event.add( this, "beforeactivate._change", function( e ) {
+                               var elem = e.target;
+
+                               if ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, "change" ) ) {
+                                       jQuery.event.add( elem, "change._change", function( event ) {
+                                               if ( this.parentNode && !event.isSimulated && !event.isTrigger ) {
+                                                       jQuery.event.simulate( "change", this.parentNode, event );
+                                               }
+                                       } );
+                                       jQuery._data( elem, "change", true );
+                               }
+                       } );
+               },
+
+               handle: function( event ) {
+                       var elem = event.target;
+
+                       // Swallow native change events from checkbox/radio, we already triggered them above
+                       if ( this !== elem || event.isSimulated || event.isTrigger ||
+                               ( elem.type !== "radio" && elem.type !== "checkbox" ) ) {
+
+                               return event.handleObj.handler.apply( this, arguments );
+                       }
+               },
+
+               teardown: function() {
+                       jQuery.event.remove( this, "._change" );
+
+                       return !rformElems.test( this.nodeName );
+               }
+       };
+}
+
+// Support: Firefox
+// Firefox doesn't have focus(in | out) events
+// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787
+//
+// Support: Chrome, Safari
+// focus(in | out) events fire after focus & blur events,
+// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order
+// Related ticket - https://code.google.com/p/chromium/issues/detail?id=449857
+if ( !support.focusin ) {
+       jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) {
+
+               // Attach a single capturing handler on the document while someone wants focusin/focusout
+               var handler = function( event ) {
+                       jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );
+               };
+
+               jQuery.event.special[ fix ] = {
+                       setup: function() {
+                               var doc = this.ownerDocument || this,
+                                       attaches = jQuery._data( doc, fix );
+
+                               if ( !attaches ) {
+                                       doc.addEventListener( orig, handler, true );
+                               }
+                               jQuery._data( doc, fix, ( attaches || 0 ) + 1 );
+                       },
+                       teardown: function() {
+                               var doc = this.ownerDocument || this,
+                                       attaches = jQuery._data( doc, fix ) - 1;
+
+                               if ( !attaches ) {
+                                       doc.removeEventListener( orig, handler, true );
+                                       jQuery._removeData( doc, fix );
+                               } else {
+                                       jQuery._data( doc, fix, attaches );
+                               }
+                       }
+               };
+       } );
+}
+
+jQuery.fn.extend( {
+
+       on: function( types, selector, data, fn ) {
+               return on( this, types, selector, data, fn );
+       },
+       one: function( types, selector, data, fn ) {
+               return on( this, types, selector, data, fn, 1 );
+       },
+       off: function( types, selector, fn ) {
+               var handleObj, type;
+               if ( types && types.preventDefault && types.handleObj ) {
+
+                       // ( event )  dispatched jQuery.Event
+                       handleObj = types.handleObj;
+                       jQuery( types.delegateTarget ).off(
+                               handleObj.namespace ?
+                                       handleObj.origType + "." + handleObj.namespace :
+                                       handleObj.origType,
+                               handleObj.selector,
+                               handleObj.handler
+                       );
+                       return this;
+               }
+               if ( typeof types === "object" ) {
+
+                       // ( types-object [, selector] )
+                       for ( type in types ) {
+                               this.off( type, selector, types[ type ] );
+                       }
+                       return this;
+               }
+               if ( selector === false || typeof selector === "function" ) {
+
+                       // ( types [, fn] )
+                       fn = selector;
+                       selector = undefined;
+               }
+               if ( fn === false ) {
+                       fn = returnFalse;
+               }
+               return this.each( function() {
+                       jQuery.event.remove( this, types, fn, selector );
+               } );
+       },
+
+       trigger: function( type, data ) {
+               return this.each( function() {
+                       jQuery.event.trigger( type, data, this );
+               } );
+       },
+       triggerHandler: function( type, data ) {
+               var elem = this[ 0 ];
+               if ( elem ) {
+                       return jQuery.event.trigger( type, data, elem, true );
+               }
+       }
+} );
+
+
+var rinlinejQuery = / jQuery\d+="(?:null|\d+)"/g,
+       rnoshimcache = new RegExp( "<(?:" + nodeNames + ")[\\s/>]", "i" ),
+       rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi,
+
+       // Support: IE 10-11, Edge 10240+
+       // In IE/Edge using regex groups here causes severe slowdowns.
+       // See https://connect.microsoft.com/IE/feedback/details/1736512/
+       rnoInnerhtml = /<script|<style|<link/i,
+
+       // checked="checked" or checked
+       rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
+       rscriptTypeMasked = /^true\/(.*)/,
+       rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,
+       safeFragment = createSafeFragment( document ),
+       fragmentDiv = safeFragment.appendChild( document.createElement( "div" ) );
+
+// Support: IE<8
+// Manipulating tables requires a tbody
+function manipulationTarget( elem, content ) {
+       return jQuery.nodeName( elem, "table" ) &&
+               jQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ?
+
+               elem.getElementsByTagName( "tbody" )[ 0 ] ||
+                       elem.appendChild( elem.ownerDocument.createElement( "tbody" ) ) :
+               elem;
+}
+
+// Replace/restore the type attribute of script elements for safe DOM manipulation
+function disableScript( elem ) {
+       elem.type = ( jQuery.find.attr( elem, "type" ) !== null ) + "/" + elem.type;
+       return elem;
+}
+function restoreScript( elem ) {
+       var match = rscriptTypeMasked.exec( elem.type );
+       if ( match ) {
+               elem.type = match[ 1 ];
+       } else {
+               elem.removeAttribute( "type" );
+       }
+       return elem;
+}
+
+function cloneCopyEvent( src, dest ) {
+       if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) {
+               return;
+       }
+
+       var type, i, l,
+               oldData = jQuery._data( src ),
+               curData = jQuery._data( dest, oldData ),
+               events = oldData.events;
+
+       if ( events ) {
+               delete curData.handle;
+               curData.events = {};
+
+               for ( type in events ) {
+                       for ( i = 0, l = events[ type ].length; i < l; i++ ) {
+                               jQuery.event.add( dest, type, events[ type ][ i ] );
+                       }
+               }
+       }
+
+       // make the cloned public data object a copy from the original
+       if ( curData.data ) {
+               curData.data = jQuery.extend( {}, curData.data );
+       }
+}
+
+function fixCloneNodeIssues( src, dest ) {
+       var nodeName, e, data;
+
+       // We do not need to do anything for non-Elements
+       if ( dest.nodeType !== 1 ) {
+               return;
+       }
+
+       nodeName = dest.nodeName.toLowerCase();
+
+       // IE6-8 copies events bound via attachEvent when using cloneNode.
+       if ( !support.noCloneEvent && dest[ jQuery.expando ] ) {
+               data = jQuery._data( dest );
+
+               for ( e in data.events ) {
+                       jQuery.removeEvent( dest, e, data.handle );
+               }
+
+               // Event data gets referenced instead of copied if the expando gets copied too
+               dest.removeAttribute( jQuery.expando );
+       }
+
+       // IE blanks contents when cloning scripts, and tries to evaluate newly-set text
+       if ( nodeName === "script" && dest.text !== src.text ) {
+               disableScript( dest ).text = src.text;
+               restoreScript( dest );
+
+       // IE6-10 improperly clones children of object elements using classid.
+       // IE10 throws NoModificationAllowedError if parent is null, #12132.
+       } else if ( nodeName === "object" ) {
+               if ( dest.parentNode ) {
+                       dest.outerHTML = src.outerHTML;
+               }
+
+               // This path appears unavoidable for IE9. When cloning an object
+               // element in IE9, the outerHTML strategy above is not sufficient.
+               // If the src has innerHTML and the destination does not,
+               // copy the src.innerHTML into the dest.innerHTML. #10324
+               if ( support.html5Clone && ( src.innerHTML && !jQuery.trim( dest.innerHTML ) ) ) {
+                       dest.innerHTML = src.innerHTML;
+               }
+
+       } else if ( nodeName === "input" && rcheckableType.test( src.type ) ) {
+
+               // IE6-8 fails to persist the checked state of a cloned checkbox
+               // or radio button. Worse, IE6-7 fail to give the cloned element
+               // a checked appearance if the defaultChecked value isn't also set
+
+               dest.defaultChecked = dest.checked = src.checked;
+
+               // IE6-7 get confused and end up setting the value of a cloned
+               // checkbox/radio button to an empty string instead of "on"
+               if ( dest.value !== src.value ) {
+                       dest.value = src.value;
+               }
+
+       // IE6-8 fails to return the selected option to the default selected
+       // state when cloning options
+       } else if ( nodeName === "option" ) {
+               dest.defaultSelected = dest.selected = src.defaultSelected;
+
+       // IE6-8 fails to set the defaultValue to the correct value when
+       // cloning other types of input fields
+       } else if ( nodeName === "input" || nodeName === "textarea" ) {
+               dest.defaultValue = src.defaultValue;
+       }
+}
+
+function domManip( collection, args, callback, ignored ) {
+
+       // Flatten any nested arrays
+       args = concat.apply( [], args );
+
+       var first, node, hasScripts,
+               scripts, doc, fragment,
+               i = 0,
+               l = collection.length,
+               iNoClone = l - 1,
+               value = args[ 0 ],
+               isFunction = jQuery.isFunction( value );
+
+       // We can't cloneNode fragments that contain checked, in WebKit
+       if ( isFunction ||
+                       ( l > 1 && typeof value === "string" &&
+                               !support.checkClone && rchecked.test( value ) ) ) {
+               return collection.each( function( index ) {
+                       var self = collection.eq( index );
+                       if ( isFunction ) {
+                               args[ 0 ] = value.call( this, index, self.html() );
+                       }
+                       domManip( self, args, callback, ignored );
+               } );
+       }
+
+       if ( l ) {
+               fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );
+               first = fragment.firstChild;
+
+               if ( fragment.childNodes.length === 1 ) {
+                       fragment = first;
+               }
+
+               // Require either new content or an interest in ignored elements to invoke the callback
+               if ( first || ignored ) {
+                       scripts = jQuery.map( getAll( fragment, "script" ), disableScript );
+                       hasScripts = scripts.length;
+
+                       // Use the original fragment for the last item
+                       // instead of the first because it can end up
+                       // being emptied incorrectly in certain situations (#8070).
+                       for ( ; i < l; i++ ) {
+                               node = fragment;
+
+                               if ( i !== iNoClone ) {
+                                       node = jQuery.clone( node, true, true );
+
+                                       // Keep references to cloned scripts for later restoration
+                                       if ( hasScripts ) {
+
+                                               // Support: Android<4.1, PhantomJS<2
+                                               // push.apply(_, arraylike) throws on ancient WebKit
+                                               jQuery.merge( scripts, getAll( node, "script" ) );
+                                       }
+                               }
+
+                               callback.call( collection[ i ], node, i );
+                       }
+
+                       if ( hasScripts ) {
+                               doc = scripts[ scripts.length - 1 ].ownerDocument;
+
+                               // Reenable scripts
+                               jQuery.map( scripts, restoreScript );
+
+                               // Evaluate executable scripts on first document insertion
+                               for ( i = 0; i < hasScripts; i++ ) {
+                                       node = scripts[ i ];
+                                       if ( rscriptType.test( node.type || "" ) &&
+                                               !jQuery._data( node, "globalEval" ) &&
+                                               jQuery.contains( doc, node ) ) {
+
+                                               if ( node.src ) {
+
+                                                       // Optional AJAX dependency, but won't run scripts if not present
+                                                       if ( jQuery._evalUrl ) {
+                                                               jQuery._evalUrl( node.src );
+                                                       }
+                                               } else {
+                                                       jQuery.globalEval(
+                                                               ( node.text || node.textContent || node.innerHTML || "" )
+                                                                       .replace( rcleanScript, "" )
+                                                       );
+                                               }
+                                       }
+                               }
+                       }
+
+                       // Fix #11809: Avoid leaking memory
+                       fragment = first = null;
+               }
+       }
+
+       return collection;
+}
+
+function remove( elem, selector, keepData ) {
+       var node,
+               elems = selector ? jQuery.filter( selector, elem ) : elem,
+               i = 0;
+
+       for ( ; ( node = elems[ i ] ) != null; i++ ) {
+
+               if ( !keepData && node.nodeType === 1 ) {
+                       jQuery.cleanData( getAll( node ) );
+               }
+
+               if ( node.parentNode ) {
+                       if ( keepData && jQuery.contains( node.ownerDocument, node ) ) {
+                               setGlobalEval( getAll( node, "script" ) );
+                       }
+                       node.parentNode.removeChild( node );
+               }
+       }
+
+       return elem;
+}
+
+jQuery.extend( {
+       htmlPrefilter: function( html ) {
+               return html.replace( rxhtmlTag, "<$1></$2>" );
+       },
+
+       clone: function( elem, dataAndEvents, deepDataAndEvents ) {
+               var destElements, node, clone, i, srcElements,
+                       inPage = jQuery.contains( elem.ownerDocument, elem );
+
+               if ( support.html5Clone || jQuery.isXMLDoc( elem ) ||
+                       !rnoshimcache.test( "<" + elem.nodeName + ">" ) ) {
+
+                       clone = elem.cloneNode( true );
+
+               // IE<=8 does not properly clone detached, unknown element nodes
+               } else {
+                       fragmentDiv.innerHTML = elem.outerHTML;
+                       fragmentDiv.removeChild( clone = fragmentDiv.firstChild );
+               }
+
+               if ( ( !support.noCloneEvent || !support.noCloneChecked ) &&
+                               ( elem.nodeType === 1 || elem.nodeType === 11 ) && !jQuery.isXMLDoc( elem ) ) {
+
+                       // We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2
+                       destElements = getAll( clone );
+                       srcElements = getAll( elem );
+
+                       // Fix all IE cloning issues
+                       for ( i = 0; ( node = srcElements[ i ] ) != null; ++i ) {
+
+                               // Ensure that the destination node is not null; Fixes #9587
+                               if ( destElements[ i ] ) {
+                                       fixCloneNodeIssues( node, destElements[ i ] );
+                               }
+                       }
+               }
+
+               // Copy the events from the original to the clone
+               if ( dataAndEvents ) {
+                       if ( deepDataAndEvents ) {
+                               srcElements = srcElements || getAll( elem );
+                               destElements = destElements || getAll( clone );
+
+                               for ( i = 0; ( node = srcElements[ i ] ) != null; i++ ) {
+                                       cloneCopyEvent( node, destElements[ i ] );
+                               }
+                       } else {
+                               cloneCopyEvent( elem, clone );
+                       }
+               }
+
+               // Preserve script evaluation history
+               destElements = getAll( clone, "script" );
+               if ( destElements.length > 0 ) {
+                       setGlobalEval( destElements, !inPage && getAll( elem, "script" ) );
+               }
+
+               destElements = srcElements = node = null;
+
+               // Return the cloned set
+               return clone;
+       },
+
+       cleanData: function( elems, /* internal */ forceAcceptData ) {
+               var elem, type, id, data,
+                       i = 0,
+                       internalKey = jQuery.expando,
+                       cache = jQuery.cache,
+                       attributes = support.attributes,
+                       special = jQuery.event.special;
+
+               for ( ; ( elem = elems[ i ] ) != null; i++ ) {
+                       if ( forceAcceptData || acceptData( elem ) ) {
+
+                               id = elem[ internalKey ];
+                               data = id && cache[ id ];
+
+                               if ( data ) {
+                                       if ( data.events ) {
+                                               for ( type in data.events ) {
+                                                       if ( special[ type ] ) {
+                                                               jQuery.event.remove( elem, type );
+
+                                                       // This is a shortcut to avoid jQuery.event.remove's overhead
+                                                       } else {
+                                                               jQuery.removeEvent( elem, type, data.handle );
+                                                       }
+                                               }
+                                       }
+
+                                       // Remove cache only if it was not already removed by jQuery.event.remove
+                                       if ( cache[ id ] ) {
+
+                                               delete cache[ id ];
+
+                                               // Support: IE<9
+                                               // IE does not allow us to delete expando properties from nodes
+                                               // IE creates expando attributes along with the property
+                                               // IE does not have a removeAttribute function on Document nodes
+                                               if ( !attributes && typeof elem.removeAttribute !== "undefined" ) {
+                                                       elem.removeAttribute( internalKey );
+
+                                               // Webkit & Blink performance suffers when deleting properties
+                                               // from DOM nodes, so set to undefined instead
+                                               // https://code.google.com/p/chromium/issues/detail?id=378607
+                                               } else {
+                                                       elem[ internalKey ] = undefined;
+                                               }
+
+                                               deletedIds.push( id );
+                                       }
+                               }
+                       }
+               }
+       }
+} );
+
+jQuery.fn.extend( {
+
+       // Keep domManip exposed until 3.0 (gh-2225)
+       domManip: domManip,
+
+       detach: function( selector ) {
+               return remove( this, selector, true );
+       },
+
+       remove: function( selector ) {
+               return remove( this, selector );
+       },
+
+       text: function( value ) {
+               return access( this, function( value ) {
+                       return value === undefined ?
+                               jQuery.text( this ) :
+                               this.empty().append(
+                                       ( this[ 0 ] && this[ 0 ].ownerDocument || document ).createTextNode( value )
+                               );
+               }, null, value, arguments.length );
+       },
+
+       append: function() {
+               return domManip( this, arguments, function( elem ) {
+                       if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
+                               var target = manipulationTarget( this, elem );
+                               target.appendChild( elem );
+                       }
+               } );
+       },
+
+       prepend: function() {
+               return domManip( this, arguments, function( elem ) {
+                       if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
+                               var target = manipulationTarget( this, elem );
+                               target.insertBefore( elem, target.firstChild );
+                       }
+               } );
+       },
+
+       before: function() {
+               return domManip( this, arguments, function( elem ) {
+                       if ( this.parentNode ) {
+                               this.parentNode.insertBefore( elem, this );
+                       }
+               } );
+       },
+
+       after: function() {
+               return domManip( this, arguments, function( elem ) {
+                       if ( this.parentNode ) {
+                               this.parentNode.insertBefore( elem, this.nextSibling );
+                       }
+               } );
+       },
+
+       empty: function() {
+               var elem,
+                       i = 0;
+
+               for ( ; ( elem = this[ i ] ) != null; i++ ) {
+
+                       // Remove element nodes and prevent memory leaks
+                       if ( elem.nodeType === 1 ) {
+                               jQuery.cleanData( getAll( elem, false ) );
+                       }
+
+                       // Remove any remaining nodes
+                       while ( elem.firstChild ) {
+                               elem.removeChild( elem.firstChild );
+                       }
+
+                       // If this is a select, ensure that it displays empty (#12336)
+                       // Support: IE<9
+                       if ( elem.options && jQuery.nodeName( elem, "select" ) ) {
+                               elem.options.length = 0;
+                       }
+               }
+
+               return this;
+       },
+
+       clone: function( dataAndEvents, deepDataAndEvents ) {
+               dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
+               deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
+
+               return this.map( function() {
+                       return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
+               } );
+       },
+
+       html: function( value ) {
+               return access( this, function( value ) {
+                       var elem = this[ 0 ] || {},
+                               i = 0,
+                               l = this.length;
+
+                       if ( value === undefined ) {
+                               return elem.nodeType === 1 ?
+                                       elem.innerHTML.replace( rinlinejQuery, "" ) :
+                                       undefined;
+                       }
+
+                       // See if we can take a shortcut and just use innerHTML
+                       if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
+                               ( support.htmlSerialize || !rnoshimcache.test( value )  ) &&
+                               ( support.leadingWhitespace || !rleadingWhitespace.test( value ) ) &&
+                               !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) {
+
+                               value = jQuery.htmlPrefilter( value );
+
+                               try {
+                                       for ( ; i < l; i++ ) {
+
+                                               // Remove element nodes and prevent memory leaks
+                                               elem = this[ i ] || {};
+                                               if ( elem.nodeType === 1 ) {
+                                                       jQuery.cleanData( getAll( elem, false ) );
+                                                       elem.innerHTML = value;
+                                               }
+                                       }
+
+                                       elem = 0;
+
+                               // If using innerHTML throws an exception, use the fallback method
+                               } catch ( e ) {}
+                       }
+
+                       if ( elem ) {
+                               this.empty().append( value );
+                       }
+               }, null, value, arguments.length );
+       },
+
+       replaceWith: function() {
+               var ignored = [];
+
+               // Make the changes, replacing each non-ignored context element with the new content
+               return domManip( this, arguments, function( elem ) {
+                       var parent = this.parentNode;
+
+                       if ( jQuery.inArray( this, ignored ) < 0 ) {
+                               jQuery.cleanData( getAll( this ) );
+                               if ( parent ) {
+                                       parent.replaceChild( elem, this );
+                               }
+                       }
+
+               // Force callback invocation
+               }, ignored );
+       }
+} );
+
+jQuery.each( {
+       appendTo: "append",
+       prependTo: "prepend",
+       insertBefore: "before",
+       insertAfter: "after",
+       replaceAll: "replaceWith"
+}, function( name, original ) {
+       jQuery.fn[ name ] = function( selector ) {
+               var elems,
+                       i = 0,
+                       ret = [],
+                       insert = jQuery( selector ),
+                       last = insert.length - 1;
+
+               for ( ; i <= last; i++ ) {
+                       elems = i === last ? this : this.clone( true );
+                       jQuery( insert[ i ] )[ original ]( elems );
+
+                       // Modern browsers can apply jQuery collections as arrays, but oldIE needs a .get()
+                       push.apply( ret, elems.get() );
+               }
+
+               return this.pushStack( ret );
+       };
+} );
+
+
+var iframe,
+       elemdisplay = {
+
+               // Support: Firefox
+               // We have to pre-define these values for FF (#10227)
+               HTML: "block",
+               BODY: "block"
+       };
+
+/**
+ * Retrieve the actual display of a element
+ * @param {String} name nodeName of the element
+ * @param {Object} doc Document object
+ */
+
+// Called only from within defaultDisplay
+function actualDisplay( name, doc ) {
+       var elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ),
+
+               display = jQuery.css( elem[ 0 ], "display" );
+
+       // We don't have any data stored on the element,
+       // so use "detach" method as fast way to get rid of the element
+       elem.detach();
+
+       return display;
+}
+
+/**
+ * Try to determine the default display value of an element
+ * @param {String} nodeName
+ */
+function defaultDisplay( nodeName ) {
+       var doc = document,
+               display = elemdisplay[ nodeName ];
+
+       if ( !display ) {
+               display = actualDisplay( nodeName, doc );
+
+               // If the simple way fails, read from inside an iframe
+               if ( display === "none" || !display ) {
+
+                       // Use the already-created iframe if possible
+                       iframe = ( iframe || jQuery( "<iframe frameborder='0' width='0' height='0'/>" ) )
+                               .appendTo( doc.documentElement );
+
+                       // Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse
+                       doc = ( iframe[ 0 ].contentWindow || iframe[ 0 ].contentDocument ).document;
+
+                       // Support: IE
+                       doc.write();
+                       doc.close();
+
+                       display = actualDisplay( nodeName, doc );
+                       iframe.detach();
+               }
+
+               // Store the correct default display
+               elemdisplay[ nodeName ] = display;
+       }
+
+       return display;
+}
+var rmargin = ( /^margin/ );
+
+var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" );
+
+var swap = function( elem, options, callback, args ) {
+       var ret, name,
+               old = {};
+
+       // Remember the old values, and insert the new ones
+       for ( name in options ) {
+               old[ name ] = elem.style[ name ];
+               elem.style[ name ] = options[ name ];
+       }
+
+       ret = callback.apply( elem, args || [] );
+
+       // Revert the old values
+       for ( name in options ) {
+               elem.style[ name ] = old[ name ];
+       }
+
+       return ret;
+};
+
+
+var documentElement = document.documentElement;
+
+
+
+( function() {
+       var pixelPositionVal, pixelMarginRightVal, boxSizingReliableVal,
+               reliableHiddenOffsetsVal, reliableMarginRightVal, reliableMarginLeftVal,
+               container = document.createElement( "div" ),
+               div = document.createElement( "div" );
+
+       // Finish early in limited (non-browser) environments
+       if ( !div.style ) {
+               return;
+       }
+
+       div.style.cssText = "float:left;opacity:.5";
+
+       // Support: IE<9
+       // Make sure that element opacity exists (as opposed to filter)
+       support.opacity = div.style.opacity === "0.5";
+
+       // Verify style float existence
+       // (IE uses styleFloat instead of cssFloat)
+       support.cssFloat = !!div.style.cssFloat;
+
+       div.style.backgroundClip = "content-box";
+       div.cloneNode( true ).style.backgroundClip = "";
+       support.clearCloneStyle = div.style.backgroundClip === "content-box";
+
+       container = document.createElement( "div" );
+       container.style.cssText = "border:0;width:8px;height:0;top:0;left:-9999px;" +
+               "padding:0;margin-top:1px;position:absolute";
+       div.innerHTML = "";
+       container.appendChild( div );
+
+       // Support: Firefox<29, Android 2.3
+       // Vendor-prefix box-sizing
+       support.boxSizing = div.style.boxSizing === "" || div.style.MozBoxSizing === "" ||
+               div.style.WebkitBoxSizing === "";
+
+       jQuery.extend( support, {
+               reliableHiddenOffsets: function() {
+                       if ( pixelPositionVal == null ) {
+                               computeStyleTests();
+                       }
+                       return reliableHiddenOffsetsVal;
+               },
+
+               boxSizingReliable: function() {
+
+                       // We're checking for pixelPositionVal here instead of boxSizingReliableVal
+                       // since that compresses better and they're computed together anyway.
+                       if ( pixelPositionVal == null ) {
+                               computeStyleTests();
+                       }
+                       return boxSizingReliableVal;
+               },
+
+               pixelMarginRight: function() {
+
+                       // Support: Android 4.0-4.3
+                       if ( pixelPositionVal == null ) {
+                               computeStyleTests();
+                       }
+                       return pixelMarginRightVal;
+               },
+
+               pixelPosition: function() {
+                       if ( pixelPositionVal == null ) {
+                               computeStyleTests();
+                       }
+                       return pixelPositionVal;
+               },
+
+               reliableMarginRight: function() {
+
+                       // Support: Android 2.3
+                       if ( pixelPositionVal == null ) {
+                               computeStyleTests();
+                       }
+                       return reliableMarginRightVal;
+               },
+
+               reliableMarginLeft: function() {
+
+                       // Support: IE <=8 only, Android 4.0 - 4.3 only, Firefox <=3 - 37
+                       if ( pixelPositionVal == null ) {
+                               computeStyleTests();
+                       }
+                       return reliableMarginLeftVal;
+               }
+       } );
+
+       function computeStyleTests() {
+               var contents, divStyle,
+                       documentElement = document.documentElement;
+
+               // Setup
+               documentElement.appendChild( container );
+
+               div.style.cssText =
+
+                       // Support: Android 2.3
+                       // Vendor-prefix box-sizing
+                       "-webkit-box-sizing:border-box;box-sizing:border-box;" +
+                       "position:relative;display:block;" +
+                       "margin:auto;border:1px;padding:1px;" +
+                       "top:1%;width:50%";
+
+               // Support: IE<9
+               // Assume reasonable values in the absence of getComputedStyle
+               pixelPositionVal = boxSizingReliableVal = reliableMarginLeftVal = false;
+               pixelMarginRightVal = reliableMarginRightVal = true;
+
+               // Check for getComputedStyle so that this code is not run in IE<9.
+               if ( window.getComputedStyle ) {
+                       divStyle = window.getComputedStyle( div );
+                       pixelPositionVal = ( divStyle || {} ).top !== "1%";
+                       reliableMarginLeftVal = ( divStyle || {} ).marginLeft === "2px";
+                       boxSizingReliableVal = ( divStyle || { width: "4px" } ).width === "4px";
+
+                       // Support: Android 4.0 - 4.3 only
+                       // Some styles come back with percentage values, even though they shouldn't
+                       div.style.marginRight = "50%";
+                       pixelMarginRightVal = ( divStyle || { marginRight: "4px" } ).marginRight === "4px";
+
+                       // Support: Android 2.3 only
+                       // Div with explicit width and no margin-right incorrectly
+                       // gets computed margin-right based on width of container (#3333)
+                       // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
+                       contents = div.appendChild( document.createElement( "div" ) );
+
+                       // Reset CSS: box-sizing; display; margin; border; padding
+                       contents.style.cssText = div.style.cssText =
+
+                               // Support: Android 2.3
+                               // Vendor-prefix box-sizing
+                               "-webkit-box-sizing:content-box;-moz-box-sizing:content-box;" +
+                               "box-sizing:content-box;display:block;margin:0;border:0;padding:0";
+                       contents.style.marginRight = contents.style.width = "0";
+                       div.style.width = "1px";
+
+                       reliableMarginRightVal =
+                               !parseFloat( ( window.getComputedStyle( contents ) || {} ).marginRight );
+
+                       div.removeChild( contents );
+               }
+
+               // Support: IE6-8
+               // First check that getClientRects works as expected
+               // Check if table cells still have offsetWidth/Height when they are set
+               // to display:none and there are still other visible table cells in a
+               // table row; if so, offsetWidth/Height are not reliable for use when
+               // determining if an element has been hidden directly using
+               // display:none (it is still safe to use offsets if a parent element is
+               // hidden; don safety goggles and see bug #4512 for more information).
+               div.style.display = "none";
+               reliableHiddenOffsetsVal = div.getClientRects().length === 0;
+               if ( reliableHiddenOffsetsVal ) {
+                       div.style.display = "";
+                       div.innerHTML = "<table><tr><td></td><td>t</td></tr></table>";
+                       div.childNodes[ 0 ].style.borderCollapse = "separate";
+                       contents = div.getElementsByTagName( "td" );
+                       contents[ 0 ].style.cssText = "margin:0;border:0;padding:0;display:none";
+                       reliableHiddenOffsetsVal = contents[ 0 ].offsetHeight === 0;
+                       if ( reliableHiddenOffsetsVal ) {
+                               contents[ 0 ].style.display = "";
+                               contents[ 1 ].style.display = "none";
+                               reliableHiddenOffsetsVal = contents[ 0 ].offsetHeight === 0;
+                       }
+               }
+
+               // Teardown
+               documentElement.removeChild( container );
+       }
+
+} )();
+
+
+var getStyles, curCSS,
+       rposition = /^(top|right|bottom|left)$/;
+
+if ( window.getComputedStyle ) {
+       getStyles = function( elem ) {
+
+               // Support: IE<=11+, Firefox<=30+ (#15098, #14150)
+               // IE throws on elements created in popups
+               // FF meanwhile throws on frame elements through "defaultView.getComputedStyle"
+               var view = elem.ownerDocument.defaultView;
+
+               if ( !view || !view.opener ) {
+                       view = window;
+               }
+
+               return view.getComputedStyle( elem );
+       };
+
+       curCSS = function( elem, name, computed ) {
+               var width, minWidth, maxWidth, ret,
+                       style = elem.style;
+
+               computed = computed || getStyles( elem );
+
+               // getPropertyValue is only needed for .css('filter') in IE9, see #12537
+               ret = computed ? computed.getPropertyValue( name ) || computed[ name ] : undefined;
+
+               // Support: Opera 12.1x only
+               // Fall back to style even without computed
+               // computed is undefined for elems on document fragments
+               if ( ( ret === "" || ret === undefined ) && !jQuery.contains( elem.ownerDocument, elem ) ) {
+                       ret = jQuery.style( elem, name );
+               }
+
+               if ( computed ) {
+
+                       // A tribute to the "awesome hack by Dean Edwards"
+                       // Chrome < 17 and Safari 5.0 uses "computed value"
+                       // instead of "used value" for margin-right
+                       // Safari 5.1.7 (at least) returns percentage for a larger set of values,
+                       // but width seems to be reliably pixels
+                       // this is against the CSSOM draft spec:
+                       // http://dev.w3.org/csswg/cssom/#resolved-values
+                       if ( !support.pixelMarginRight() && rnumnonpx.test( ret ) && rmargin.test( name ) ) {
+
+                               // Remember the original values
+                               width = style.width;
+                               minWidth = style.minWidth;
+                               maxWidth = style.maxWidth;
+
+                               // Put in the new values to get a computed value out
+                               style.minWidth = style.maxWidth = style.width = ret;
+                               ret = computed.width;
+
+                               // Revert the changed values
+                               style.width = width;
+                               style.minWidth = minWidth;
+                               style.maxWidth = maxWidth;
+                       }
+               }
+
+               // Support: IE
+               // IE returns zIndex value as an integer.
+               return ret === undefined ?
+                       ret :
+                       ret + "";
+       };
+} else if ( documentElement.currentStyle ) {
+       getStyles = function( elem ) {
+               return elem.currentStyle;
+       };
+
+       curCSS = function( elem, name, computed ) {
+               var left, rs, rsLeft, ret,
+                       style = elem.style;
+
+               computed = computed || getStyles( elem );
+               ret = computed ? computed[ name ] : undefined;
+
+               // Avoid setting ret to empty string here
+               // so we don't default to auto
+               if ( ret == null && style && style[ name ] ) {
+                       ret = style[ name ];
+               }
+
+               // From the awesome hack by Dean Edwards
+               // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291
+
+               // If we're not dealing with a regular pixel number
+               // but a number that has a weird ending, we need to convert it to pixels
+               // but not position css attributes, as those are
+               // proportional to the parent element instead
+               // and we can't measure the parent instead because it
+               // might trigger a "stacking dolls" problem
+               if ( rnumnonpx.test( ret ) && !rposition.test( name ) ) {
+
+                       // Remember the original values
+                       left = style.left;
+                       rs = elem.runtimeStyle;
+                       rsLeft = rs && rs.left;
+
+                       // Put in the new values to get a computed value out
+                       if ( rsLeft ) {
+                               rs.left = elem.currentStyle.left;
+                       }
+                       style.left = name === "fontSize" ? "1em" : ret;
+                       ret = style.pixelLeft + "px";
+
+                       // Revert the changed values
+                       style.left = left;
+                       if ( rsLeft ) {
+                               rs.left = rsLeft;
+                       }
+               }
+
+               // Support: IE
+               // IE returns zIndex value as an integer.
+               return ret === undefined ?
+                       ret :
+                       ret + "" || "auto";
+       };
+}
+
+
+
+
+function addGetHookIf( conditionFn, hookFn ) {
+
+       // Define the hook, we'll check on the first run if it's really needed.
+       return {
+               get: function() {
+                       if ( conditionFn() ) {
+
+                               // Hook not needed (or it's not possible to use it due
+                               // to missing dependency), remove it.
+                               delete this.get;
+                               return;
+                       }
+
+                       // Hook needed; redefine it so that the support test is not executed again.
+                       return ( this.get = hookFn ).apply( this, arguments );
+               }
+       };
+}
+
+
+var
+
+               ralpha = /alpha\([^)]*\)/i,
+       ropacity = /opacity\s*=\s*([^)]*)/i,
+
+       // swappable if display is none or starts with table except
+       // "table", "table-cell", or "table-caption"
+       // see here for display values:
+       // https://developer.mozilla.org/en-US/docs/CSS/display
+       rdisplayswap = /^(none|table(?!-c[ea]).+)/,
+       rnumsplit = new RegExp( "^(" + pnum + ")(.*)$", "i" ),
+
+       cssShow = { position: "absolute", visibility: "hidden", display: "block" },
+       cssNormalTransform = {
+               letterSpacing: "0",
+               fontWeight: "400"
+       },
+
+       cssPrefixes = [ "Webkit", "O", "Moz", "ms" ],
+       emptyStyle = document.createElement( "div" ).style;
+
+
+// return a css property mapped to a potentially vendor prefixed property
+function vendorPropName( name ) {
+
+       // shortcut for names that are not vendor prefixed
+       if ( name in emptyStyle ) {
+               return name;
+       }
+
+       // check for vendor prefixed names
+       var capName = name.charAt( 0 ).toUpperCase() + name.slice( 1 ),
+               i = cssPrefixes.length;
+
+       while ( i-- ) {
+               name = cssPrefixes[ i ] + capName;
+               if ( name in emptyStyle ) {
+                       return name;
+               }
+       }
+}
+
+function showHide( elements, show ) {
+       var display, elem, hidden,
+               values = [],
+               index = 0,
+               length = elements.length;
+
+       for ( ; index < length; index++ ) {
+               elem = elements[ index ];
+               if ( !elem.style ) {
+                       continue;
+               }
+
+               values[ index ] = jQuery._data( elem, "olddisplay" );
+               display = elem.style.display;
+               if ( show ) {
+
+                       // Reset the inline display of this element to learn if it is
+                       // being hidden by cascaded rules or not
+                       if ( !values[ index ] && display === "none" ) {
+                               elem.style.display = "";
+                       }
+
+                       // Set elements which have been overridden with display: none
+                       // in a stylesheet to whatever the default browser style is
+                       // for such an element
+                       if ( elem.style.display === "" && isHidden( elem ) ) {
+                               values[ index ] =
+                                       jQuery._data( elem, "olddisplay", defaultDisplay( elem.nodeName ) );
+                       }
+               } else {
+                       hidden = isHidden( elem );
+
+                       if ( display && display !== "none" || !hidden ) {
+                               jQuery._data(
+                                       elem,
+                                       "olddisplay",
+                                       hidden ? display : jQuery.css( elem, "display" )
+                               );
+                       }
+               }
+       }
+
+       // Set the display of most of the elements in a second loop
+       // to avoid the constant reflow
+       for ( index = 0; index < length; index++ ) {
+               elem = elements[ index ];
+               if ( !elem.style ) {
+                       continue;
+               }
+               if ( !show || elem.style.display === "none" || elem.style.display === "" ) {
+                       elem.style.display = show ? values[ index ] || "" : "none";
+               }
+       }
+
+       return elements;
+}
+
+function setPositiveNumber( elem, value, subtract ) {
+       var matches = rnumsplit.exec( value );
+       return matches ?
+
+               // Guard against undefined "subtract", e.g., when used as in cssHooks
+               Math.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || "px" ) :
+               value;
+}
+
+function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {
+       var i = extra === ( isBorderBox ? "border" : "content" ) ?
+
+               // If we already have the right measurement, avoid augmentation
+               4 :
+
+               // Otherwise initialize for horizontal or vertical properties
+               name === "width" ? 1 : 0,
+
+               val = 0;
+
+       for ( ; i < 4; i += 2 ) {
+
+               // both box models exclude margin, so add it if we want it
+               if ( extra === "margin" ) {
+                       val += jQuery.css( elem, extra + cssExpand[ i ], true, styles );
+               }
+
+               if ( isBorderBox ) {
+
+                       // border-box includes padding, so remove it if we want content
+                       if ( extra === "content" ) {
+                               val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
+                       }
+
+                       // at this point, extra isn't border nor margin, so remove border
+                       if ( extra !== "margin" ) {
+                               val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
+                       }
+               } else {
+
+                       // at this point, extra isn't content, so add padding
+                       val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
+
+                       // at this point, extra isn't content nor padding, so add border
+                       if ( extra !== "padding" ) {
+                               val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
+                       }
+               }
+       }
+
+       return val;
+}
+
+function getWidthOrHeight( elem, name, extra ) {
+
+       // Start with offset property, which is equivalent to the border-box value
+       var valueIsBorderBox = true,
+               val = name === "width" ? elem.offsetWidth : elem.offsetHeight,
+               styles = getStyles( elem ),
+               isBorderBox = support.boxSizing &&
+                       jQuery.css( elem, "boxSizing", false, styles ) === "border-box";
+
+       // some non-html elements return undefined for offsetWidth, so check for null/undefined
+       // svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285
+       // MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668
+       if ( val <= 0 || val == null ) {
+
+               // Fall back to computed then uncomputed css if necessary
+               val = curCSS( elem, name, styles );
+               if ( val < 0 || val == null ) {
+                       val = elem.style[ name ];
+               }
+
+               // Computed unit is not pixels. Stop here and return.
+               if ( rnumnonpx.test( val ) ) {
+                       return val;
+               }
+
+               // we need the check for style in case a browser which returns unreliable values
+               // for getComputedStyle silently falls back to the reliable elem.style
+               valueIsBorderBox = isBorderBox &&
+                       ( support.boxSizingReliable() || val === elem.style[ name ] );
+
+               // Normalize "", auto, and prepare for extra
+               val = parseFloat( val ) || 0;
+       }
+
+       // use the active box-sizing model to add/subtract irrelevant styles
+       return ( val +
+               augmentWidthOrHeight(
+                       elem,
+                       name,
+                       extra || ( isBorderBox ? "border" : "content" ),
+                       valueIsBorderBox,
+                       styles
+               )
+       ) + "px";
+}
+
+jQuery.extend( {
+
+       // Add in style property hooks for overriding the default
+       // behavior of getting and setting a style property
+       cssHooks: {
+               opacity: {
+                       get: function( elem, computed ) {
+                               if ( computed ) {
+
+                                       // We should always get a number back from opacity
+                                       var ret = curCSS( elem, "opacity" );
+                                       return ret === "" ? "1" : ret;
+                               }
+                       }
+               }
+       },
+
+       // Don't automatically add "px" to these possibly-unitless properties
+       cssNumber: {
+               "animationIterationCount": true,
+               "columnCount": true,
+               "fillOpacity": true,
+               "flexGrow": true,
+               "flexShrink": true,
+               "fontWeight": true,
+               "lineHeight": true,
+               "opacity": true,
+               "order": true,
+               "orphans": true,
+               "widows": true,
+               "zIndex": true,
+               "zoom": true
+       },
+
+       // Add in properties whose names you wish to fix before
+       // setting or getting the value
+       cssProps: {
+
+               // normalize float css property
+               "float": support.cssFloat ? "cssFloat" : "styleFloat"
+       },
+
+       // Get and set the style property on a DOM Node
+       style: function( elem, name, value, extra ) {
+
+               // Don't set styles on text and comment nodes
+               if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
+                       return;
+               }
+
+               // Make sure that we're working with the right name
+               var ret, type, hooks,
+                       origName = jQuery.camelCase( name ),
+                       style = elem.style;
+
+               name = jQuery.cssProps[ origName ] ||
+                       ( jQuery.cssProps[ origName ] = vendorPropName( origName ) || origName );
+
+               // gets hook for the prefixed version
+               // followed by the unprefixed version
+               hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
+
+               // Check if we're setting a value
+               if ( value !== undefined ) {
+                       type = typeof value;
+
+                       // Convert "+=" or "-=" to relative numbers (#7345)
+                       if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {
+                               value = adjustCSS( elem, name, ret );
+
+                               // Fixes bug #9237
+                               type = "number";
+                       }
+
+                       // Make sure that null and NaN values aren't set. See: #7116
+                       if ( value == null || value !== value ) {
+                               return;
+                       }
+
+                       // If a number was passed in, add the unit (except for certain CSS properties)
+                       if ( type === "number" ) {
+                               value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" );
+                       }
+
+                       // Fixes #8908, it can be done more correctly by specifing setters in cssHooks,
+                       // but it would mean to define eight
+                       // (for every problematic property) identical functions
+                       if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) {
+                               style[ name ] = "inherit";
+                       }
+
+                       // If a hook was provided, use that value, otherwise just set the specified value
+                       if ( !hooks || !( "set" in hooks ) ||
+                               ( value = hooks.set( elem, value, extra ) ) !== undefined ) {
+
+                               // Support: IE
+                               // Swallow errors from 'invalid' CSS values (#5509)
+                               try {
+                                       style[ name ] = value;
+                               } catch ( e ) {}
+                       }
+
+               } else {
+
+                       // If a hook was provided get the non-computed value from there
+                       if ( hooks && "get" in hooks &&
+                               ( ret = hooks.get( elem, false, extra ) ) !== undefined ) {
+
+                               return ret;
+                       }
+
+                       // Otherwise just get the value from the style object
+                       return style[ name ];
+               }
+       },
+
+       css: function( elem, name, extra, styles ) {
+               var num, val, hooks,
+                       origName = jQuery.camelCase( name );
+
+               // Make sure that we're working with the right name
+               name = jQuery.cssProps[ origName ] ||
+                       ( jQuery.cssProps[ origName ] = vendorPropName( origName ) || origName );
+
+               // gets hook for the prefixed version
+               // followed by the unprefixed version
+               hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
+
+               // If a hook was provided get the computed value from there
+               if ( hooks && "get" in hooks ) {
+                       val = hooks.get( elem, true, extra );
+               }
+
+               // Otherwise, if a way to get the computed value exists, use that
+               if ( val === undefined ) {
+                       val = curCSS( elem, name, styles );
+               }
+
+               //convert "normal" to computed value
+               if ( val === "normal" && name in cssNormalTransform ) {
+                       val = cssNormalTransform[ name ];
+               }
+
+               // Return, converting to number if forced or a qualifier was provided and val looks numeric
+               if ( extra === "" || extra ) {
+                       num = parseFloat( val );
+                       return extra === true || isFinite( num ) ? num || 0 : val;
+               }
+               return val;
+       }
+} );
+
+jQuery.each( [ "height", "width" ], function( i, name ) {
+       jQuery.cssHooks[ name ] = {
+               get: function( elem, computed, extra ) {
+                       if ( computed ) {
+
+                               // certain elements can have dimension info if we invisibly show them
+                               // however, it must have a current display style that would benefit from this
+                               return rdisplayswap.test( jQuery.css( elem, "display" ) ) &&
+                                       elem.offsetWidth === 0 ?
+                                               swap( elem, cssShow, function() {
+                                                       return getWidthOrHeight( elem, name, extra );
+                                               } ) :
+                                               getWidthOrHeight( elem, name, extra );
+                       }
+               },
+
+               set: function( elem, value, extra ) {
+                       var styles = extra && getStyles( elem );
+                       return setPositiveNumber( elem, value, extra ?
+                               augmentWidthOrHeight(
+                                       elem,
+                                       name,
+                                       extra,
+                                       support.boxSizing &&
+                                               jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
+                                       styles
+                               ) : 0
+                       );
+               }
+       };
+} );
+
+if ( !support.opacity ) {
+       jQuery.cssHooks.opacity = {
+               get: function( elem, computed ) {
+
+                       // IE uses filters for opacity
+                       return ropacity.test( ( computed && elem.currentStyle ?
+                               elem.currentStyle.filter :
+                               elem.style.filter ) || "" ) ?
+                                       ( 0.01 * parseFloat( RegExp.$1 ) ) + "" :
+                                       computed ? "1" : "";
+               },
+
+               set: function( elem, value ) {
+                       var style = elem.style,
+                               currentStyle = elem.currentStyle,
+                               opacity = jQuery.isNumeric( value ) ? "alpha(opacity=" + value * 100 + ")" : "",
+                               filter = currentStyle && currentStyle.filter || style.filter || "";
+
+                       // IE has trouble with opacity if it does not have layout
+                       // Force it by setting the zoom level
+                       style.zoom = 1;
+
+                       // if setting opacity to 1, and no other filters exist -
+                       // attempt to remove filter attribute #6652
+                       // if value === "", then remove inline opacity #12685
+                       if ( ( value >= 1 || value === "" ) &&
+                                       jQuery.trim( filter.replace( ralpha, "" ) ) === "" &&
+                                       style.removeAttribute ) {
+
+                               // Setting style.filter to null, "" & " " still leave "filter:" in the cssText
+                               // if "filter:" is present at all, clearType is disabled, we want to avoid this
+                               // style.removeAttribute is IE Only, but so apparently is this code path...
+                               style.removeAttribute( "filter" );
+
+                               // if there is no filter style applied in a css rule
+                               // or unset inline opacity, we are done
+                               if ( value === "" || currentStyle && !currentStyle.filter ) {
+                                       return;
+                               }
+                       }
+
+                       // otherwise, set new filter values
+                       style.filter = ralpha.test( filter ) ?
+                               filter.replace( ralpha, opacity ) :
+                               filter + " " + opacity;
+               }
+       };
+}
+
+jQuery.cssHooks.marginRight = addGetHookIf( support.reliableMarginRight,
+       function( elem, computed ) {
+               if ( computed ) {
+                       return swap( elem, { "display": "inline-block" },
+                               curCSS, [ elem, "marginRight" ] );
+               }
+       }
+);
+
+jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,
+       function( elem, computed ) {
+               if ( computed ) {
+                       return (
+                               parseFloat( curCSS( elem, "marginLeft" ) ) ||
+
+                               // Support: IE<=11+
+                               // Running getBoundingClientRect on a disconnected node in IE throws an error
+                               // Support: IE8 only
+                               // getClientRects() errors on disconnected elems
+                               ( jQuery.contains( elem.ownerDocument, elem ) ?
+                                       elem.getBoundingClientRect().left -
+                                               swap( elem, { marginLeft: 0 }, function() {
+                                                       return elem.getBoundingClientRect().left;
+                                               } ) :
+                                       0
+                               )
+                       ) + "px";
+               }
+       }
+);
+
+// These hooks are used by animate to expand properties
+jQuery.each( {
+       margin: "",
+       padding: "",
+       border: "Width"
+}, function( prefix, suffix ) {
+       jQuery.cssHooks[ prefix + suffix ] = {
+               expand: function( value ) {
+                       var i = 0,
+                               expanded = {},
+
+                               // assumes a single number if not a string
+                               parts = typeof value === "string" ? value.split( " " ) : [ value ];
+
+                       for ( ; i < 4; i++ ) {
+                               expanded[ prefix + cssExpand[ i ] + suffix ] =
+                                       parts[ i ] || parts[ i - 2 ] || parts[ 0 ];
+                       }
+
+                       return expanded;
+               }
+       };
+
+       if ( !rmargin.test( prefix ) ) {
+               jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;
+       }
+} );
+
+jQuery.fn.extend( {
+       css: function( name, value ) {
+               return access( this, function( elem, name, value ) {
+                       var styles, len,
+                               map = {},
+                               i = 0;
+
+                       if ( jQuery.isArray( name ) ) {
+                               styles = getStyles( elem );
+                               len = name.length;
+
+                               for ( ; i < len; i++ ) {
+                                       map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );
+                               }
+
+                               return map;
+                       }
+
+                       return value !== undefined ?
+                               jQuery.style( elem, name, value ) :
+                               jQuery.css( elem, name );
+               }, name, value, arguments.length > 1 );
+       },
+       show: function() {
+               return showHide( this, true );
+       },
+       hide: function() {
+               return showHide( this );
+       },
+       toggle: function( state ) {
+               if ( typeof state === "boolean" ) {
+                       return state ? this.show() : this.hide();
+               }
+
+               return this.each( function() {
+                       if ( isHidden( this ) ) {
+                               jQuery( this ).show();
+                       } else {
+                               jQuery( this ).hide();
+                       }
+               } );
+       }
+} );
+
+
+function Tween( elem, options, prop, end, easing ) {
+       return new Tween.prototype.init( elem, options, prop, end, easing );
+}
+jQuery.Tween = Tween;
+
+Tween.prototype = {
+       constructor: Tween,
+       init: function( elem, options, prop, end, easing, unit ) {
+               this.elem = elem;
+               this.prop = prop;
+               this.easing = easing || jQuery.easing._default;
+               this.options = options;
+               this.start = this.now = this.cur();
+               this.end = end;
+               this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" );
+       },
+       cur: function() {
+               var hooks = Tween.propHooks[ this.prop ];
+
+               return hooks && hooks.get ?
+                       hooks.get( this ) :
+                       Tween.propHooks._default.get( this );
+       },
+       run: function( percent ) {
+               var eased,
+                       hooks = Tween.propHooks[ this.prop ];
+
+               if ( this.options.duration ) {
+                       this.pos = eased = jQuery.easing[ this.easing ](
+                               percent, this.options.duration * percent, 0, 1, this.options.duration
+                       );
+               } else {
+                       this.pos = eased = percent;
+               }
+               this.now = ( this.end - this.start ) * eased + this.start;
+
+               if ( this.options.step ) {
+                       this.options.step.call( this.elem, this.now, this );
+               }
+
+               if ( hooks && hooks.set ) {
+                       hooks.set( this );
+               } else {
+                       Tween.propHooks._default.set( this );
+               }
+               return this;
+       }
+};
+
+Tween.prototype.init.prototype = Tween.prototype;
+
+Tween.propHooks = {
+       _default: {
+               get: function( tween ) {
+                       var result;
+
+                       // Use a property on the element directly when it is not a DOM element,
+                       // or when there is no matching style property that exists.
+                       if ( tween.elem.nodeType !== 1 ||
+                               tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {
+                               return tween.elem[ tween.prop ];
+                       }
+
+                       // passing an empty string as a 3rd parameter to .css will automatically
+                       // attempt a parseFloat and fallback to a string if the parse fails
+                       // so, simple values such as "10px" are parsed to Float.
+                       // complex values such as "rotate(1rad)" are returned as is.
+                       result = jQuery.css( tween.elem, tween.prop, "" );
+
+                       // Empty strings, null, undefined and "auto" are converted to 0.
+                       return !result || result === "auto" ? 0 : result;
+               },
+               set: function( tween ) {
+
+                       // use step hook for back compat - use cssHook if its there - use .style if its
+                       // available and use plain properties where available
+                       if ( jQuery.fx.step[ tween.prop ] ) {
+                               jQuery.fx.step[ tween.prop ]( tween );
+                       } else if ( tween.elem.nodeType === 1 &&
+                               ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null ||
+                                       jQuery.cssHooks[ tween.prop ] ) ) {
+                               jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );
+                       } else {
+                               tween.elem[ tween.prop ] = tween.now;
+                       }
+               }
+       }
+};
+
+// Support: IE <=9
+// Panic based approach to setting things on disconnected nodes
+
+Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
+       set: function( tween ) {
+               if ( tween.elem.nodeType && tween.elem.parentNode ) {
+                       tween.elem[ tween.prop ] = tween.now;
+               }
+       }
+};
+
+jQuery.easing = {
+       linear: function( p ) {
+               return p;
+       },
+       swing: function( p ) {
+               return 0.5 - Math.cos( p * Math.PI ) / 2;
+       },
+       _default: "swing"
+};
+
+jQuery.fx = Tween.prototype.init;
+
+// Back Compat <1.8 extension point
+jQuery.fx.step = {};
+
+
+
+
+var
+       fxNow, timerId,
+       rfxtypes = /^(?:toggle|show|hide)$/,
+       rrun = /queueHooks$/;
+
+// Animations created synchronously will run synchronously
+function createFxNow() {
+       window.setTimeout( function() {
+               fxNow = undefined;
+       } );
+       return ( fxNow = jQuery.now() );
+}
+
+// Generate parameters to create a standard animation
+function genFx( type, includeWidth ) {
+       var which,
+               attrs = { height: type },
+               i = 0;
+
+       // if we include width, step value is 1 to do all cssExpand values,
+       // if we don't include width, step value is 2 to skip over Left and Right
+       includeWidth = includeWidth ? 1 : 0;
+       for ( ; i < 4 ; i += 2 - includeWidth ) {
+               which = cssExpand[ i ];
+               attrs[ "margin" + which ] = attrs[ "padding" + which ] = type;
+       }
+
+       if ( includeWidth ) {
+               attrs.opacity = attrs.width = type;
+       }
+
+       return attrs;
+}
+
+function createTween( value, prop, animation ) {
+       var tween,
+               collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ),
+               index = 0,
+               length = collection.length;
+       for ( ; index < length; index++ ) {
+               if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {
+
+                       // we're done with this property
+                       return tween;
+               }
+       }
+}
+
+function defaultPrefilter( elem, props, opts ) {
+       /* jshint validthis: true */
+       var prop, value, toggle, tween, hooks, oldfire, display, checkDisplay,
+               anim = this,
+               orig = {},
+               style = elem.style,
+               hidden = elem.nodeType && isHidden( elem ),
+               dataShow = jQuery._data( elem, "fxshow" );
+
+       // handle queue: false promises
+       if ( !opts.queue ) {
+               hooks = jQuery._queueHooks( elem, "fx" );
+               if ( hooks.unqueued == null ) {
+                       hooks.unqueued = 0;
+                       oldfire = hooks.empty.fire;
+                       hooks.empty.fire = function() {
+                               if ( !hooks.unqueued ) {
+                                       oldfire();
+                               }
+                       };
+               }
+               hooks.unqueued++;
+
+               anim.always( function() {
+
+                       // doing this makes sure that the complete handler will be called
+                       // before this completes
+                       anim.always( function() {
+                               hooks.unqueued--;
+                               if ( !jQuery.queue( elem, "fx" ).length ) {
+                                       hooks.empty.fire();
+                               }
+                       } );
+               } );
+       }
+
+       // height/width overflow pass
+       if ( elem.nodeType === 1 && ( "height" in props || "width" in props ) ) {
+
+               // Make sure that nothing sneaks out
+               // Record all 3 overflow attributes because IE does not
+               // change the overflow attribute when overflowX and
+               // overflowY are set to the same value
+               opts.overflow = [ style.overflow, style.overflowX, style.overflowY ];
+
+               // Set display property to inline-block for height/width
+               // animations on inline elements that are having width/height animated
+               display = jQuery.css( elem, "display" );
+
+               // Test default display if display is currently "none"
+               checkDisplay = display === "none" ?
+                       jQuery._data( elem, "olddisplay" ) || defaultDisplay( elem.nodeName ) : display;
+
+               if ( checkDisplay === "inline" && jQuery.css( elem, "float" ) === "none" ) {
+
+                       // inline-level elements accept inline-block;
+                       // block-level elements need to be inline with layout
+                       if ( !support.inlineBlockNeedsLayout || defaultDisplay( elem.nodeName ) === "inline" ) {
+                               style.display = "inline-block";
+                       } else {
+                               style.zoom = 1;
+                       }
+               }
+       }
+
+       if ( opts.overflow ) {
+               style.overflow = "hidden";
+               if ( !support.shrinkWrapBlocks() ) {
+                       anim.always( function() {
+                               style.overflow = opts.overflow[ 0 ];
+                               style.overflowX = opts.overflow[ 1 ];
+                               style.overflowY = opts.overflow[ 2 ];
+                       } );
+               }
+       }
+
+       // show/hide pass
+       for ( prop in props ) {
+               value = props[ prop ];
+               if ( rfxtypes.exec( value ) ) {
+                       delete props[ prop ];
+                       toggle = toggle || value === "toggle";
+                       if ( value === ( hidden ? "hide" : "show" ) ) {
+
+                               // If there is dataShow left over from a stopped hide or show
+                               // and we are going to proceed with show, we should pretend to be hidden
+                               if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) {
+                                       hidden = true;
+                               } else {
+                                       continue;
+                               }
+                       }
+                       orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );
+
+               // Any non-fx value stops us from restoring the original display value
+               } else {
+                       display = undefined;
+               }
+       }
+
+       if ( !jQuery.isEmptyObject( orig ) ) {
+               if ( dataShow ) {
+                       if ( "hidden" in dataShow ) {
+                               hidden = dataShow.hidden;
+                       }
+               } else {
+                       dataShow = jQuery._data( elem, "fxshow", {} );
+               }
+
+               // store state if its toggle - enables .stop().toggle() to "reverse"
+               if ( toggle ) {
+                       dataShow.hidden = !hidden;
+               }
+               if ( hidden ) {
+                       jQuery( elem ).show();
+               } else {
+                       anim.done( function() {
+                               jQuery( elem ).hide();
+                       } );
+               }
+               anim.done( function() {
+                       var prop;
+                       jQuery._removeData( elem, "fxshow" );
+                       for ( prop in orig ) {
+                               jQuery.style( elem, prop, orig[ prop ] );
+                       }
+               } );
+               for ( prop in orig ) {
+                       tween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );
+
+                       if ( !( prop in dataShow ) ) {
+                               dataShow[ prop ] = tween.start;
+                               if ( hidden ) {
+                                       tween.end = tween.start;
+                                       tween.start = prop === "width" || prop === "height" ? 1 : 0;
+                               }
+                       }
+               }
+
+       // If this is a noop like .hide().hide(), restore an overwritten display value
+       } else if ( ( display === "none" ? defaultDisplay( elem.nodeName ) : display ) === "inline" ) {
+               style.display = display;
+       }
+}
+
+function propFilter( props, specialEasing ) {
+       var index, name, easing, value, hooks;
+
+       // camelCase, specialEasing and expand cssHook pass
+       for ( index in props ) {
+               name = jQuery.camelCase( index );
+               easing = specialEasing[ name ];
+               value = props[ index ];
+               if ( jQuery.isArray( value ) ) {
+                       easing = value[ 1 ];
+                       value = props[ index ] = value[ 0 ];
+               }
+
+               if ( index !== name ) {
+                       props[ name ] = value;
+                       delete props[ index ];
+               }
+
+               hooks = jQuery.cssHooks[ name ];
+               if ( hooks && "expand" in hooks ) {
+                       value = hooks.expand( value );
+                       delete props[ name ];
+
+                       // not quite $.extend, this wont overwrite keys already present.
+                       // also - reusing 'index' from above because we have the correct "name"
+                       for ( index in value ) {
+                               if ( !( index in props ) ) {
+                                       props[ index ] = value[ index ];
+                                       specialEasing[ index ] = easing;
+                               }
+                       }
+               } else {
+                       specialEasing[ name ] = easing;
+               }
+       }
+}
+
+function Animation( elem, properties, options ) {
+       var result,
+               stopped,
+               index = 0,
+               length = Animation.prefilters.length,
+               deferred = jQuery.Deferred().always( function() {
+
+                       // don't match elem in the :animated selector
+                       delete tick.elem;
+               } ),
+               tick = function() {
+                       if ( stopped ) {
+                               return false;
+                       }
+                       var currentTime = fxNow || createFxNow(),
+                               remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
+
+                               // Support: Android 2.3
+                               // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)
+                               temp = remaining / animation.duration || 0,
+                               percent = 1 - temp,
+                               index = 0,
+                               length = animation.tweens.length;
+
+                       for ( ; index < length ; index++ ) {
+                               animation.tweens[ index ].run( percent );
+                       }
+
+                       deferred.notifyWith( elem, [ animation, percent, remaining ] );
+
+                       if ( percent < 1 && length ) {
+                               return remaining;
+                       } else {
+                               deferred.resolveWith( elem, [ animation ] );
+                               return false;
+                       }
+               },
+               animation = deferred.promise( {
+                       elem: elem,
+                       props: jQuery.extend( {}, properties ),
+                       opts: jQuery.extend( true, {
+                               specialEasing: {},
+                               easing: jQuery.easing._default
+                       }, options ),
+                       originalProperties: properties,
+                       originalOptions: options,
+                       startTime: fxNow || createFxNow(),
+                       duration: options.duration,
+                       tweens: [],
+                       createTween: function( prop, end ) {
+                               var tween = jQuery.Tween( elem, animation.opts, prop, end,
+                                               animation.opts.specialEasing[ prop ] || animation.opts.easing );
+                               animation.tweens.push( tween );
+                               return tween;
+                       },
+                       stop: function( gotoEnd ) {
+                               var index = 0,
+
+                                       // if we are going to the end, we want to run all the tweens
+                                       // otherwise we skip this part
+                                       length = gotoEnd ? animation.tweens.length : 0;
+                               if ( stopped ) {
+                                       return this;
+                               }
+                               stopped = true;
+                               for ( ; index < length ; index++ ) {
+                                       animation.tweens[ index ].run( 1 );
+                               }
+
+                               // resolve when we played the last frame
+                               // otherwise, reject
+                               if ( gotoEnd ) {
+                                       deferred.notifyWith( elem, [ animation, 1, 0 ] );
+                                       deferred.resolveWith( elem, [ animation, gotoEnd ] );
+                               } else {
+                                       deferred.rejectWith( elem, [ animation, gotoEnd ] );
+                               }
+                               return this;
+                       }
+               } ),
+               props = animation.props;
+
+       propFilter( props, animation.opts.specialEasing );
+
+       for ( ; index < length ; index++ ) {
+               result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );
+               if ( result ) {
+                       if ( jQuery.isFunction( result.stop ) ) {
+                               jQuery._queueHooks( animation.elem, animation.opts.queue ).stop =
+                                       jQuery.proxy( result.stop, result );
+                       }
+                       return result;
+               }
+       }
+
+       jQuery.map( props, createTween, animation );
+
+       if ( jQuery.isFunction( animation.opts.start ) ) {
+               animation.opts.start.call( elem, animation );
+       }
+
+       jQuery.fx.timer(
+               jQuery.extend( tick, {
+                       elem: elem,
+                       anim: animation,
+                       queue: animation.opts.queue
+               } )
+       );
+
+       // attach callbacks from options
+       return animation.progress( animation.opts.progress )
+               .done( animation.opts.done, animation.opts.complete )
+               .fail( animation.opts.fail )
+               .always( animation.opts.always );
+}
+
+jQuery.Animation = jQuery.extend( Animation, {
+
+       tweeners: {
+               "*": [ function( prop, value ) {
+                       var tween = this.createTween( prop, value );
+                       adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );
+                       return tween;
+               } ]
+       },
+
+       tweener: function( props, callback ) {
+               if ( jQuery.isFunction( props ) ) {
+                       callback = props;
+                       props = [ "*" ];
+               } else {
+                       props = props.match( rnotwhite );
+               }
+
+               var prop,
+                       index = 0,
+                       length = props.length;
+
+               for ( ; index < length ; index++ ) {
+                       prop = props[ index ];
+                       Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];
+                       Animation.tweeners[ prop ].unshift( callback );
+               }
+       },
+
+       prefilters: [ defaultPrefilter ],
+
+       prefilter: function( callback, prepend ) {
+               if ( prepend ) {
+                       Animation.prefilters.unshift( callback );
+               } else {
+                       Animation.prefilters.push( callback );
+               }
+       }
+} );
+
+jQuery.speed = function( speed, easing, fn ) {
+       var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
+               complete: fn || !fn && easing ||
+                       jQuery.isFunction( speed ) && speed,
+               duration: speed,
+               easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing
+       };
+
+       opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :
+               opt.duration in jQuery.fx.speeds ?
+                       jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;
+
+       // normalize opt.queue - true/undefined/null -> "fx"
+       if ( opt.queue == null || opt.queue === true ) {
+               opt.queue = "fx";
+       }
+
+       // Queueing
+       opt.old = opt.complete;
+
+       opt.complete = function() {
+               if ( jQuery.isFunction( opt.old ) ) {
+                       opt.old.call( this );
+               }
+
+               if ( opt.queue ) {
+                       jQuery.dequeue( this, opt.queue );
+               }
+       };
+
+       return opt;
+};
+
+jQuery.fn.extend( {
+       fadeTo: function( speed, to, easing, callback ) {
+
+               // show any hidden elements after setting opacity to 0
+               return this.filter( isHidden ).css( "opacity", 0 ).show()
+
+                       // animate to the value specified
+                       .end().animate( { opacity: to }, speed, easing, callback );
+       },
+       animate: function( prop, speed, easing, callback ) {
+               var empty = jQuery.isEmptyObject( prop ),
+                       optall = jQuery.speed( speed, easing, callback ),
+                       doAnimation = function() {
+
+                               // Operate on a copy of prop so per-property easing won't be lost
+                               var anim = Animation( this, jQuery.extend( {}, prop ), optall );
+
+                               // Empty animations, or finishing resolves immediately
+                               if ( empty || jQuery._data( this, "finish" ) ) {
+                                       anim.stop( true );
+                               }
+                       };
+                       doAnimation.finish = doAnimation;
+
+               return empty || optall.queue === false ?
+                       this.each( doAnimation ) :
+                       this.queue( optall.queue, doAnimation );
+       },
+       stop: function( type, clearQueue, gotoEnd ) {
+               var stopQueue = function( hooks ) {
+                       var stop = hooks.stop;
+                       delete hooks.stop;
+                       stop( gotoEnd );
+               };
+
+               if ( typeof type !== "string" ) {
+                       gotoEnd = clearQueue;
+                       clearQueue = type;
+                       type = undefined;
+               }
+               if ( clearQueue && type !== false ) {
+                       this.queue( type || "fx", [] );
+               }
+
+               return this.each( function() {
+                       var dequeue = true,
+                               index = type != null && type + "queueHooks",
+                               timers = jQuery.timers,
+                               data = jQuery._data( this );
+
+                       if ( index ) {
+                               if ( data[ index ] && data[ index ].stop ) {
+                                       stopQueue( data[ index ] );
+                               }
+                       } else {
+                               for ( index in data ) {
+                                       if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {
+                                               stopQueue( data[ index ] );
+                                       }
+                               }
+                       }
+
+                       for ( index = timers.length; index--; ) {
+                               if ( timers[ index ].elem === this &&
+                                       ( type == null || timers[ index ].queue === type ) ) {
+
+                                       timers[ index ].anim.stop( gotoEnd );
+                                       dequeue = false;
+                                       timers.splice( index, 1 );
+                               }
+                       }
+
+                       // start the next in the queue if the last step wasn't forced
+                       // timers currently will call their complete callbacks, which will dequeue
+                       // but only if they were gotoEnd
+                       if ( dequeue || !gotoEnd ) {
+                               jQuery.dequeue( this, type );
+                       }
+               } );
+       },
+       finish: function( type ) {
+               if ( type !== false ) {
+                       type = type || "fx";
+               }
+               return this.each( function() {
+                       var index,
+                               data = jQuery._data( this ),
+                               queue = data[ type + "queue" ],
+                               hooks = data[ type + "queueHooks" ],
+                               timers = jQuery.timers,
+                               length = queue ? queue.length : 0;
+
+                       // enable finishing flag on private data
+                       data.finish = true;
+
+                       // empty the queue first
+                       jQuery.queue( this, type, [] );
+
+                       if ( hooks && hooks.stop ) {
+                               hooks.stop.call( this, true );
+                       }
+
+                       // look for any active animations, and finish them
+                       for ( index = timers.length; index--; ) {
+                               if ( timers[ index ].elem === this && timers[ index ].queue === type ) {
+                                       timers[ index ].anim.stop( true );
+                                       timers.splice( index, 1 );
+                               }
+                       }
+
+                       // look for any animations in the old queue and finish them
+                       for ( index = 0; index < length; index++ ) {
+                               if ( queue[ index ] && queue[ index ].finish ) {
+                                       queue[ index ].finish.call( this );
+                               }
+                       }
+
+                       // turn off finishing flag
+                       delete data.finish;
+               } );
+       }
+} );
+
+jQuery.each( [ "toggle", "show", "hide" ], function( i, name ) {
+       var cssFn = jQuery.fn[ name ];
+       jQuery.fn[ name ] = function( speed, easing, callback ) {
+               return speed == null || typeof speed === "boolean" ?
+                       cssFn.apply( this, arguments ) :
+                       this.animate( genFx( name, true ), speed, easing, callback );
+       };
+} );
+
+// Generate shortcuts for custom animations
+jQuery.each( {
+       slideDown: genFx( "show" ),
+       slideUp: genFx( "hide" ),
+       slideToggle: genFx( "toggle" ),
+       fadeIn: { opacity: "show" },
+       fadeOut: { opacity: "hide" },
+       fadeToggle: { opacity: "toggle" }
+}, function( name, props ) {
+       jQuery.fn[ name ] = function( speed, easing, callback ) {
+               return this.animate( props, speed, easing, callback );
+       };
+} );
+
+jQuery.timers = [];
+jQuery.fx.tick = function() {
+       var timer,
+               timers = jQuery.timers,
+               i = 0;
+
+       fxNow = jQuery.now();
+
+       for ( ; i < timers.length; i++ ) {
+               timer = timers[ i ];
+
+               // Checks the timer has not already been removed
+               if ( !timer() && timers[ i ] === timer ) {
+                       timers.splice( i--, 1 );
+               }
+       }
+
+       if ( !timers.length ) {
+               jQuery.fx.stop();
+       }
+       fxNow = undefined;
+};
+
+jQuery.fx.timer = function( timer ) {
+       jQuery.timers.push( timer );
+       if ( timer() ) {
+               jQuery.fx.start();
+       } else {
+               jQuery.timers.pop();
+       }
+};
+
+jQuery.fx.interval = 13;
+
+jQuery.fx.start = function() {
+       if ( !timerId ) {
+               timerId = window.setInterval( jQuery.fx.tick, jQuery.fx.interval );
+       }
+};
+
+jQuery.fx.stop = function() {
+       window.clearInterval( timerId );
+       timerId = null;
+};
+
+jQuery.fx.speeds = {
+       slow: 600,
+       fast: 200,
+
+       // Default speed
+       _default: 400
+};
+
+
+// Based off of the plugin by Clint Helfers, with permission.
+// http://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/
+jQuery.fn.delay = function( time, type ) {
+       time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
+       type = type || "fx";
+
+       return this.queue( type, function( next, hooks ) {
+               var timeout = window.setTimeout( next, time );
+               hooks.stop = function() {
+                       window.clearTimeout( timeout );
+               };
+       } );
+};
+
+
+( function() {
+       var a,
+               input = document.createElement( "input" ),
+               div = document.createElement( "div" ),
+               select = document.createElement( "select" ),
+               opt = select.appendChild( document.createElement( "option" ) );
+
+       // Setup
+       div = document.createElement( "div" );
+       div.setAttribute( "className", "t" );
+       div.innerHTML = "  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>";
+       a = div.getElementsByTagName( "a" )[ 0 ];
+
+       // Support: Windows Web Apps (WWA)
+       // `type` must use .setAttribute for WWA (#14901)
+       input.setAttribute( "type", "checkbox" );
+       div.appendChild( input );
+
+       a = div.getElementsByTagName( "a" )[ 0 ];
+
+       // First batch of tests.
+       a.style.cssText = "top:1px";
+
+       // Test setAttribute on camelCase class.
+       // If it works, we need attrFixes when doing get/setAttribute (ie6/7)
+       support.getSetAttribute = div.className !== "t";
+
+       // Get the style information from getAttribute
+       // (IE uses .cssText instead)
+       support.style = /top/.test( a.getAttribute( "style" ) );
+
+       // Make sure that URLs aren't manipulated
+       // (IE normalizes it by default)
+       support.hrefNormalized = a.getAttribute( "href" ) === "/a";
+
+       // Check the default checkbox/radio value ("" on WebKit; "on" elsewhere)
+       support.checkOn = !!input.value;
+
+       // Make sure that a selected-by-default option has a working selected property.
+       // (WebKit defaults to false instead of true, IE too, if it's in an optgroup)
+       support.optSelected = opt.selected;
+
+       // Tests for enctype support on a form (#6743)
+       support.enctype = !!document.createElement( "form" ).enctype;
+
+       // Make sure that the options inside disabled selects aren't marked as disabled
+       // (WebKit marks them as disabled)
+       select.disabled = true;
+       support.optDisabled = !opt.disabled;
+
+       // Support: IE8 only
+       // Check if we can trust getAttribute("value")
+       input = document.createElement( "input" );
+       input.setAttribute( "value", "" );
+       support.input = input.getAttribute( "value" ) === "";
+
+       // Check if an input maintains its value after becoming a radio
+       input.value = "t";
+       input.setAttribute( "type", "radio" );
+       support.radioValue = input.value === "t";
+} )();
+
+
+var rreturn = /\r/g,
+       rspaces = /[\x20\t\r\n\f]+/g;
+
+jQuery.fn.extend( {
+       val: function( value ) {
+               var hooks, ret, isFunction,
+                       elem = this[ 0 ];
+
+               if ( !arguments.length ) {
+                       if ( elem ) {
+                               hooks = jQuery.valHooks[ elem.type ] ||
+                                       jQuery.valHooks[ elem.nodeName.toLowerCase() ];
+
+                               if (
+                                       hooks &&
+                                       "get" in hooks &&
+                                       ( ret = hooks.get( elem, "value" ) ) !== undefined
+                               ) {
+                                       return ret;
+                               }
+
+                               ret = elem.value;
+
+                               return typeof ret === "string" ?
+
+                                       // handle most common string cases
+                                       ret.replace( rreturn, "" ) :
+
+                                       // handle cases where value is null/undef or number
+                                       ret == null ? "" : ret;
+                       }
+
+                       return;
+               }
+
+               isFunction = jQuery.isFunction( value );
+
+               return this.each( function( i ) {
+                       var val;
+
+                       if ( this.nodeType !== 1 ) {
+                               return;
+                       }
+
+                       if ( isFunction ) {
+                               val = value.call( this, i, jQuery( this ).val() );
+                       } else {
+                               val = value;
+                       }
+
+                       // Treat null/undefined as ""; convert numbers to string
+                       if ( val == null ) {
+                               val = "";
+                       } else if ( typeof val === "number" ) {
+                               val += "";
+                       } else if ( jQuery.isArray( val ) ) {
+                               val = jQuery.map( val, function( value ) {
+                                       return value == null ? "" : value + "";
+                               } );
+                       }
+
+                       hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
+
+                       // If set returns undefined, fall back to normal setting
+                       if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) {
+                               this.value = val;
+                       }
+               } );
+       }
+} );
+
+jQuery.extend( {
+       valHooks: {
+               option: {
+                       get: function( elem ) {
+                               var val = jQuery.find.attr( elem, "value" );
+                               return val != null ?
+                                       val :
+
+                                       // Support: IE10-11+
+                                       // option.text throws exceptions (#14686, #14858)
+                                       // Strip and collapse whitespace
+                                       // https://html.spec.whatwg.org/#strip-and-collapse-whitespace
+                                       jQuery.trim( jQuery.text( elem ) ).replace( rspaces, " " );
+                       }
+               },
+               select: {
+                       get: function( elem ) {
+                               var value, option,
+                                       options = elem.options,
+                                       index = elem.selectedIndex,
+                                       one = elem.type === "select-one" || index < 0,
+                                       values = one ? null : [],
+                                       max = one ? index + 1 : options.length,
+                                       i = index < 0 ?
+                                               max :
+                                               one ? index : 0;
+
+                               // Loop through all the selected options
+                               for ( ; i < max; i++ ) {
+                                       option = options[ i ];
+
+                                       // oldIE doesn't update selected after form reset (#2551)
+                                       if ( ( option.selected || i === index ) &&
+
+                                                       // Don't return options that are disabled or in a disabled optgroup
+                                                       ( support.optDisabled ?
+                                                               !option.disabled :
+                                                               option.getAttribute( "disabled" ) === null ) &&
+                                                       ( !option.parentNode.disabled ||
+                                                               !jQuery.nodeName( option.parentNode, "optgroup" ) ) ) {
+
+                                               // Get the specific value for the option
+                                               value = jQuery( option ).val();
+
+                                               // We don't need an array for one selects
+                                               if ( one ) {
+                                                       return value;
+                                               }
+
+                                               // Multi-Selects return an array
+                                               values.push( value );
+                                       }
+                               }
+
+                               return values;
+                       },
+
+                       set: function( elem, value ) {
+                               var optionSet, option,
+                                       options = elem.options,
+                                       values = jQuery.makeArray( value ),
+                                       i = options.length;
+
+                               while ( i-- ) {
+                                       option = options[ i ];
+
+                                       if ( jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 ) {
+
+                                               // Support: IE6
+                                               // When new option element is added to select box we need to
+                                               // force reflow of newly added node in order to workaround delay
+                                               // of initialization properties
+                                               try {
+                                                       option.selected = optionSet = true;
+
+                                               } catch ( _ ) {
+
+                                                       // Will be executed only in IE6
+                                                       option.scrollHeight;
+                                               }
+
+                                       } else {
+                                               option.selected = false;
+                                       }
+                               }
+
+                               // Force browsers to behave consistently when non-matching value is set
+                               if ( !optionSet ) {
+                                       elem.selectedIndex = -1;
+                               }
+
+                               return options;
+                       }
+               }
+       }
+} );
+
+// Radios and checkboxes getter/setter
+jQuery.each( [ "radio", "checkbox" ], function() {
+       jQuery.valHooks[ this ] = {
+               set: function( elem, value ) {
+                       if ( jQuery.isArray( value ) ) {
+                               return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );
+                       }
+               }
+       };
+       if ( !support.checkOn ) {
+               jQuery.valHooks[ this ].get = function( elem ) {
+                       return elem.getAttribute( "value" ) === null ? "on" : elem.value;
+               };
+       }
+} );
+
+
+
+
+var nodeHook, boolHook,
+       attrHandle = jQuery.expr.attrHandle,
+       ruseDefault = /^(?:checked|selected)$/i,
+       getSetAttribute = support.getSetAttribute,
+       getSetInput = support.input;
+
+jQuery.fn.extend( {
+       attr: function( name, value ) {
+               return access( this, jQuery.attr, name, value, arguments.length > 1 );
+       },
+
+       removeAttr: function( name ) {
+               return this.each( function() {
+                       jQuery.removeAttr( this, name );
+               } );
+       }
+} );
+
+jQuery.extend( {
+       attr: function( elem, name, value ) {
+               var ret, hooks,
+                       nType = elem.nodeType;
+
+               // Don't get/set attributes on text, comment and attribute nodes
+               if ( nType === 3 || nType === 8 || nType === 2 ) {
+                       return;
+               }
+
+               // Fallback to prop when attributes are not supported
+               if ( typeof elem.getAttribute === "undefined" ) {
+                       return jQuery.prop( elem, name, value );
+               }
+
+               // All attributes are lowercase
+               // Grab necessary hook if one is defined
+               if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
+                       name = name.toLowerCase();
+                       hooks = jQuery.attrHooks[ name ] ||
+                               ( jQuery.expr.match.bool.test( name ) ? boolHook : nodeHook );
+               }
+
+               if ( value !== undefined ) {
+                       if ( value === null ) {
+                               jQuery.removeAttr( elem, name );
+                               return;
+                       }
+
+                       if ( hooks && "set" in hooks &&
+                               ( ret = hooks.set( elem, value, name ) ) !== undefined ) {
+                               return ret;
+                       }
+
+                       elem.setAttribute( name, value + "" );
+                       return value;
+               }
+
+               if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
+                       return ret;
+               }
+
+               ret = jQuery.find.attr( elem, name );
+
+               // Non-existent attributes return null, we normalize to undefined
+               return ret == null ? undefined : ret;
+       },
+
+       attrHooks: {
+               type: {
+                       set: function( elem, value ) {
+                               if ( !support.radioValue && value === "radio" &&
+                                       jQuery.nodeName( elem, "input" ) ) {
+
+                                       // Setting the type on a radio button after the value resets the value in IE8-9
+                                       // Reset value to default in case type is set after value during creation
+                                       var val = elem.value;
+                                       elem.setAttribute( "type", value );
+                                       if ( val ) {
+                                               elem.value = val;
+                                       }
+                                       return value;
+                               }
+                       }
+               }
+       },
+
+       removeAttr: function( elem, value ) {
+               var name, propName,
+                       i = 0,
+                       attrNames = value && value.match( rnotwhite );
+
+               if ( attrNames && elem.nodeType === 1 ) {
+                       while ( ( name = attrNames[ i++ ] ) ) {
+                               propName = jQuery.propFix[ name ] || name;
+
+                               // Boolean attributes get special treatment (#10870)
+                               if ( jQuery.expr.match.bool.test( name ) ) {
+
+                                       // Set corresponding property to false
+                                       if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) {
+                                               elem[ propName ] = false;
+
+                                       // Support: IE<9
+                                       // Also clear defaultChecked/defaultSelected (if appropriate)
+                                       } else {
+                                               elem[ jQuery.camelCase( "default-" + name ) ] =
+                                                       elem[ propName ] = false;
+                                       }
+
+                               // See #9699 for explanation of this approach (setting first, then removal)
+                               } else {
+                                       jQuery.attr( elem, name, "" );
+                               }
+
+                               elem.removeAttribute( getSetAttribute ? name : propName );
+                       }
+               }
+       }
+} );
+
+// Hooks for boolean attributes
+boolHook = {
+       set: function( elem, value, name ) {
+               if ( value === false ) {
+
+                       // Remove boolean attributes when set to false
+                       jQuery.removeAttr( elem, name );
+               } else if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) {
+
+                       // IE<8 needs the *property* name
+                       elem.setAttribute( !getSetAttribute && jQuery.propFix[ name ] || name, name );
+
+               } else {
+
+                       // Support: IE<9
+                       // Use defaultChecked and defaultSelected for oldIE
+                       elem[ jQuery.camelCase( "default-" + name ) ] = elem[ name ] = true;
+               }
+               return name;
+       }
+};
+
+jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) {
+       var getter = attrHandle[ name ] || jQuery.find.attr;
+
+       if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) {
+               attrHandle[ name ] = function( elem, name, isXML ) {
+                       var ret, handle;
+                       if ( !isXML ) {
+
+                               // Avoid an infinite loop by temporarily removing this function from the getter
+                               handle = attrHandle[ name ];
+                               attrHandle[ name ] = ret;
+                               ret = getter( elem, name, isXML ) != null ?
+                                       name.toLowerCase() :
+                                       null;
+                               attrHandle[ name ] = handle;
+                       }
+                       return ret;
+               };
+       } else {
+               attrHandle[ name ] = function( elem, name, isXML ) {
+                       if ( !isXML ) {
+                               return elem[ jQuery.camelCase( "default-" + name ) ] ?
+                                       name.toLowerCase() :
+                                       null;
+                       }
+               };
+       }
+} );
+
+// fix oldIE attroperties
+if ( !getSetInput || !getSetAttribute ) {
+       jQuery.attrHooks.value = {
+               set: function( elem, value, name ) {
+                       if ( jQuery.nodeName( elem, "input" ) ) {
+
+                               // Does not return so that setAttribute is also used
+                               elem.defaultValue = value;
+                       } else {
+
+                               // Use nodeHook if defined (#1954); otherwise setAttribute is fine
+                               return nodeHook && nodeHook.set( elem, value, name );
+                       }
+               }
+       };
+}
+
+// IE6/7 do not support getting/setting some attributes with get/setAttribute
+if ( !getSetAttribute ) {
+
+       // Use this for any attribute in IE6/7
+       // This fixes almost every IE6/7 issue
+       nodeHook = {
+               set: function( elem, value, name ) {
+
+                       // Set the existing or create a new attribute node
+                       var ret = elem.getAttributeNode( name );
+                       if ( !ret ) {
+                               elem.setAttributeNode(
+                                       ( ret = elem.ownerDocument.createAttribute( name ) )
+                               );
+                       }
+
+                       ret.value = value += "";
+
+                       // Break association with cloned elements by also using setAttribute (#9646)
+                       if ( name === "value" || value === elem.getAttribute( name ) ) {
+                               return value;
+                       }
+               }
+       };
+
+       // Some attributes are constructed with empty-string values when not defined
+       attrHandle.id = attrHandle.name = attrHandle.coords =
+               function( elem, name, isXML ) {
+                       var ret;
+                       if ( !isXML ) {
+                               return ( ret = elem.getAttributeNode( name ) ) && ret.value !== "" ?
+                                       ret.value :
+                                       null;
+                       }
+               };
+
+       // Fixing value retrieval on a button requires this module
+       jQuery.valHooks.button = {
+               get: function( elem, name ) {
+                       var ret = elem.getAttributeNode( name );
+                       if ( ret && ret.specified ) {
+                               return ret.value;
+                       }
+               },
+               set: nodeHook.set
+       };
+
+       // Set contenteditable to false on removals(#10429)
+       // Setting to empty string throws an error as an invalid value
+       jQuery.attrHooks.contenteditable = {
+               set: function( elem, value, name ) {
+                       nodeHook.set( elem, value === "" ? false : value, name );
+               }
+       };
+
+       // Set width and height to auto instead of 0 on empty string( Bug #8150 )
+       // This is for removals
+       jQuery.each( [ "width", "height" ], function( i, name ) {
+               jQuery.attrHooks[ name ] = {
+                       set: function( elem, value ) {
+                               if ( value === "" ) {
+                                       elem.setAttribute( name, "auto" );
+                                       return value;
+                               }
+                       }
+               };
+       } );
+}
+
+if ( !support.style ) {
+       jQuery.attrHooks.style = {
+               get: function( elem ) {
+
+                       // Return undefined in the case of empty string
+                       // Note: IE uppercases css property names, but if we were to .toLowerCase()
+                       // .cssText, that would destroy case sensitivity in URL's, like in "background"
+                       return elem.style.cssText || undefined;
+               },
+               set: function( elem, value ) {
+                       return ( elem.style.cssText = value + "" );
+               }
+       };
+}
+
+
+
+
+var rfocusable = /^(?:input|select|textarea|button|object)$/i,
+       rclickable = /^(?:a|area)$/i;
+
+jQuery.fn.extend( {
+       prop: function( name, value ) {
+               return access( this, jQuery.prop, name, value, arguments.length > 1 );
+       },
+
+       removeProp: function( name ) {
+               name = jQuery.propFix[ name ] || name;
+               return this.each( function() {
+
+                       // try/catch handles cases where IE balks (such as removing a property on window)
+                       try {
+                               this[ name ] = undefined;
+                               delete this[ name ];
+                       } catch ( e ) {}
+               } );
+       }
+} );
+
+jQuery.extend( {
+       prop: function( elem, name, value ) {
+               var ret, hooks,
+                       nType = elem.nodeType;
+
+               // Don't get/set properties on text, comment and attribute nodes
+               if ( nType === 3 || nType === 8 || nType === 2 ) {
+                       return;
+               }
+
+               if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
+
+                       // Fix name and attach hooks
+                       name = jQuery.propFix[ name ] || name;
+                       hooks = jQuery.propHooks[ name ];
+               }
+
+               if ( value !== undefined ) {
+                       if ( hooks && "set" in hooks &&
+                               ( ret = hooks.set( elem, value, name ) ) !== undefined ) {
+                               return ret;
+                       }
+
+                       return ( elem[ name ] = value );
+               }
+
+               if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
+                       return ret;
+               }
+
+               return elem[ name ];
+       },
+
+       propHooks: {
+               tabIndex: {
+                       get: function( elem ) {
+
+                               // elem.tabIndex doesn't always return the
+                               // correct value when it hasn't been explicitly set
+                               // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
+                               // Use proper attribute retrieval(#12072)
+                               var tabindex = jQuery.find.attr( elem, "tabindex" );
+
+                               return tabindex ?
+                                       parseInt( tabindex, 10 ) :
+                                       rfocusable.test( elem.nodeName ) ||
+                                               rclickable.test( elem.nodeName ) && elem.href ?
+                                                       0 :
+                                                       -1;
+                       }
+               }
+       },
+
+       propFix: {
+               "for": "htmlFor",
+               "class": "className"
+       }
+} );
+
+// Some attributes require a special call on IE
+// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
+if ( !support.hrefNormalized ) {
+
+       // href/src property should get the full normalized URL (#10299/#12915)
+       jQuery.each( [ "href", "src" ], function( i, name ) {
+               jQuery.propHooks[ name ] = {
+                       get: function( elem ) {
+                               return elem.getAttribute( name, 4 );
+                       }
+               };
+       } );
+}
+
+// Support: Safari, IE9+
+// Accessing the selectedIndex property
+// forces the browser to respect setting selected
+// on the option
+// The getter ensures a default option is selected
+// when in an optgroup
+if ( !support.optSelected ) {
+       jQuery.propHooks.selected = {
+               get: function( elem ) {
+                       var parent = elem.parentNode;
+
+                       if ( parent ) {
+                               parent.selectedIndex;
+
+                               // Make sure that it also works with optgroups, see #5701
+                               if ( parent.parentNode ) {
+                                       parent.parentNode.selectedIndex;
+                               }
+                       }
+                       return null;
+               },
+               set: function( elem ) {
+                       var parent = elem.parentNode;
+                       if ( parent ) {
+                               parent.selectedIndex;
+
+                               if ( parent.parentNode ) {
+                                       parent.parentNode.selectedIndex;
+                               }
+                       }
+               }
+       };
+}
+
+jQuery.each( [
+       "tabIndex",
+       "readOnly",
+       "maxLength",
+       "cellSpacing",
+       "cellPadding",
+       "rowSpan",
+       "colSpan",
+       "useMap",
+       "frameBorder",
+       "contentEditable"
+], function() {
+       jQuery.propFix[ this.toLowerCase() ] = this;
+} );
+
+// IE6/7 call enctype encoding
+if ( !support.enctype ) {
+       jQuery.propFix.enctype = "encoding";
+}
+
+
+
+
+var rclass = /[\t\r\n\f]/g;
+
+function getClass( elem ) {
+       return jQuery.attr( elem, "class" ) || "";
+}
+
+jQuery.fn.extend( {
+       addClass: function( value ) {
+               var classes, elem, cur, curValue, clazz, j, finalValue,
+                       i = 0;
+
+               if ( jQuery.isFunction( value ) ) {
+                       return this.each( function( j ) {
+                               jQuery( this ).addClass( value.call( this, j, getClass( this ) ) );
+                       } );
+               }
+
+               if ( typeof value === "string" && value ) {
+                       classes = value.match( rnotwhite ) || [];
+
+                       while ( ( elem = this[ i++ ] ) ) {
+                               curValue = getClass( elem );
+                               cur = elem.nodeType === 1 &&
+                                       ( " " + curValue + " " ).replace( rclass, " " );
+
+                               if ( cur ) {
+                                       j = 0;
+                                       while ( ( clazz = classes[ j++ ] ) ) {
+                                               if ( cur.indexOf( " " + clazz + " " ) < 0 ) {
+                                                       cur += clazz + " ";
+                                               }
+                                       }
+
+                                       // only assign if different to avoid unneeded rendering.
+                                       finalValue = jQuery.trim( cur );
+                                       if ( curValue !== finalValue ) {
+                                               jQuery.attr( elem, "class", finalValue );
+                                       }
+                               }
+                       }
+               }
+
+               return this;
+       },
+
+       removeClass: function( value ) {
+               var classes, elem, cur, curValue, clazz, j, finalValue,
+                       i = 0;
+
+               if ( jQuery.isFunction( value ) ) {
+                       return this.each( function( j ) {
+                               jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );
+                       } );
+               }
+
+               if ( !arguments.length ) {
+                       return this.attr( "class", "" );
+               }
+
+               if ( typeof value === "string" && value ) {
+                       classes = value.match( rnotwhite ) || [];
+
+                       while ( ( elem = this[ i++ ] ) ) {
+                               curValue = getClass( elem );
+
+                               // This expression is here for better compressibility (see addClass)
+                               cur = elem.nodeType === 1 &&
+                                       ( " " + curValue + " " ).replace( rclass, " " );
+
+                               if ( cur ) {
+                                       j = 0;
+                                       while ( ( clazz = classes[ j++ ] ) ) {
+
+                                               // Remove *all* instances
+                                               while ( cur.indexOf( " " + clazz + " " ) > -1 ) {
+                                                       cur = cur.replace( " " + clazz + " ", " " );
+                                               }
+                                       }
+
+                                       // Only assign if different to avoid unneeded rendering.
+                                       finalValue = jQuery.trim( cur );
+                                       if ( curValue !== finalValue ) {
+                                               jQuery.attr( elem, "class", finalValue );
+                                       }
+                               }
+                       }
+               }
+
+               return this;
+       },
+
+       toggleClass: function( value, stateVal ) {
+               var type = typeof value;
+
+               if ( typeof stateVal === "boolean" && type === "string" ) {
+                       return stateVal ? this.addClass( value ) : this.removeClass( value );
+               }
+
+               if ( jQuery.isFunction( value ) ) {
+                       return this.each( function( i ) {
+                               jQuery( this ).toggleClass(
+                                       value.call( this, i, getClass( this ), stateVal ),
+                                       stateVal
+                               );
+                       } );
+               }
+
+               return this.each( function() {
+                       var className, i, self, classNames;
+
+                       if ( type === "string" ) {
+
+                               // Toggle individual class names
+                               i = 0;
+                               self = jQuery( this );
+                               classNames = value.match( rnotwhite ) || [];
+
+                               while ( ( className = classNames[ i++ ] ) ) {
+
+                                       // Check each className given, space separated list
+                                       if ( self.hasClass( className ) ) {
+                                               self.removeClass( className );
+                                       } else {
+                                               self.addClass( className );
+                                       }
+                               }
+
+                       // Toggle whole class name
+                       } else if ( value === undefined || type === "boolean" ) {
+                               className = getClass( this );
+                               if ( className ) {
+
+                                       // store className if set
+                                       jQuery._data( this, "__className__", className );
+                               }
+
+                               // If the element has a class name or if we're passed "false",
+                               // then remove the whole classname (if there was one, the above saved it).
+                               // Otherwise bring back whatever was previously saved (if anything),
+                               // falling back to the empty string if nothing was stored.
+                               jQuery.attr( this, "class",
+                                       className || value === false ?
+                                       "" :
+                                       jQuery._data( this, "__className__" ) || ""
+                               );
+                       }
+               } );
+       },
+
+       hasClass: function( selector ) {
+               var className, elem,
+                       i = 0;
+
+               className = " " + selector + " ";
+               while ( ( elem = this[ i++ ] ) ) {
+                       if ( elem.nodeType === 1 &&
+                               ( " " + getClass( elem ) + " " ).replace( rclass, " " )
+                                       .indexOf( className ) > -1
+                       ) {
+                               return true;
+                       }
+               }
+
+               return false;
+       }
+} );
+
+
+
+
+// Return jQuery for attributes-only inclusion
+
+
+jQuery.each( ( "blur focus focusin focusout load resize scroll unload click dblclick " +
+       "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
+       "change select submit keydown keypress keyup error contextmenu" ).split( " " ),
+       function( i, name ) {
+
+       // Handle event binding
+       jQuery.fn[ name ] = function( data, fn ) {
+               return arguments.length > 0 ?
+                       this.on( name, null, data, fn ) :
+                       this.trigger( name );
+       };
+} );
+
+jQuery.fn.extend( {
+       hover: function( fnOver, fnOut ) {
+               return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
+       }
+} );
+
+
+var location = window.location;
+
+var nonce = jQuery.now();
+
+var rquery = ( /\?/ );
+
+
+
+var rvalidtokens = /(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;
+
+jQuery.parseJSON = function( data ) {
+
+       // Attempt to parse using the native JSON parser first
+       if ( window.JSON && window.JSON.parse ) {
+
+               // Support: Android 2.3
+               // Workaround failure to string-cast null input
+               return window.JSON.parse( data + "" );
+       }
+
+       var requireNonComma,
+               depth = null,
+               str = jQuery.trim( data + "" );
+
+       // Guard against invalid (and possibly dangerous) input by ensuring that nothing remains
+       // after removing valid tokens
+       return str && !jQuery.trim( str.replace( rvalidtokens, function( token, comma, open, close ) {
+
+               // Force termination if we see a misplaced comma
+               if ( requireNonComma && comma ) {
+                       depth = 0;
+               }
+
+               // Perform no more replacements after returning to outermost depth
+               if ( depth === 0 ) {
+                       return token;
+               }
+
+               // Commas must not follow "[", "{", or ","
+               requireNonComma = open || comma;
+
+               // Determine new depth
+               // array/object open ("[" or "{"): depth += true - false (increment)
+               // array/object close ("]" or "}"): depth += false - true (decrement)
+               // other cases ("," or primitive): depth += true - true (numeric cast)
+               depth += !close - !open;
+
+               // Remove this token
+               return "";
+       } ) ) ?
+               ( Function( "return " + str ) )() :
+               jQuery.error( "Invalid JSON: " + data );
+};
+
+
+// Cross-browser xml parsing
+jQuery.parseXML = function( data ) {
+       var xml, tmp;
+       if ( !data || typeof data !== "string" ) {
+               return null;
+       }
+       try {
+               if ( window.DOMParser ) { // Standard
+                       tmp = new window.DOMParser();
+                       xml = tmp.parseFromString( data, "text/xml" );
+               } else { // IE
+                       xml = new window.ActiveXObject( "Microsoft.XMLDOM" );
+                       xml.async = "false";
+                       xml.loadXML( data );
+               }
+       } catch ( e ) {
+               xml = undefined;
+       }
+       if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) {
+               jQuery.error( "Invalid XML: " + data );
+       }
+       return xml;
+};
+
+
+var
+       rhash = /#.*$/,
+       rts = /([?&])_=[^&]*/,
+
+       // IE leaves an \r character at EOL
+       rheaders = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg,
+
+       // #7653, #8125, #8152: local protocol detection
+       rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
+       rnoContent = /^(?:GET|HEAD)$/,
+       rprotocol = /^\/\//,
+       rurl = /^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,
+
+       /* Prefilters
+        * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
+        * 2) These are called:
+        *    - BEFORE asking for a transport
+        *    - AFTER param serialization (s.data is a string if s.processData is true)
+        * 3) key is the dataType
+        * 4) the catchall symbol "*" can be used
+        * 5) execution will start with transport dataType and THEN continue down to "*" if needed
+        */
+       prefilters = {},
+
+       /* Transports bindings
+        * 1) key is the dataType
+        * 2) the catchall symbol "*" can be used
+        * 3) selection will start with transport dataType and THEN go to "*" if needed
+        */
+       transports = {},
+
+       // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
+       allTypes = "*/".concat( "*" ),
+
+       // Document location
+       ajaxLocation = location.href,
+
+       // Segment location into parts
+       ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];
+
+// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
+function addToPrefiltersOrTransports( structure ) {
+
+       // dataTypeExpression is optional and defaults to "*"
+       return function( dataTypeExpression, func ) {
+
+               if ( typeof dataTypeExpression !== "string" ) {
+                       func = dataTypeExpression;
+                       dataTypeExpression = "*";
+               }
+
+               var dataType,
+                       i = 0,
+                       dataTypes = dataTypeExpression.toLowerCase().match( rnotwhite ) || [];
+
+               if ( jQuery.isFunction( func ) ) {
+
+                       // For each dataType in the dataTypeExpression
+                       while ( ( dataType = dataTypes[ i++ ] ) ) {
+
+                               // Prepend if requested
+                               if ( dataType.charAt( 0 ) === "+" ) {
+                                       dataType = dataType.slice( 1 ) || "*";
+                                       ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );
+
+                               // Otherwise append
+                               } else {
+                                       ( structure[ dataType ] = structure[ dataType ] || [] ).push( func );
+                               }
+                       }
+               }
+       };
+}
+
+// Base inspection function for prefilters and transports
+function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {
+
+       var inspected = {},
+               seekingTransport = ( structure === transports );
+
+       function inspect( dataType ) {
+               var selected;
+               inspected[ dataType ] = true;
+               jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {
+                       var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );
+                       if ( typeof dataTypeOrTransport === "string" &&
+                               !seekingTransport && !inspected[ dataTypeOrTransport ] ) {
+
+                               options.dataTypes.unshift( dataTypeOrTransport );
+                               inspect( dataTypeOrTransport );
+                               return false;
+                       } else if ( seekingTransport ) {
+                               return !( selected = dataTypeOrTransport );
+                       }
+               } );
+               return selected;
+       }
+
+       return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" );
+}
+
+// A special extend for ajax options
+// that takes "flat" options (not to be deep extended)
+// Fixes #9887
+function ajaxExtend( target, src ) {
+       var deep, key,
+               flatOptions = jQuery.ajaxSettings.flatOptions || {};
+
+       for ( key in src ) {
+               if ( src[ key ] !== undefined ) {
+                       ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];
+               }
+       }
+       if ( deep ) {
+               jQuery.extend( true, target, deep );
+       }
+
+       return target;
+}
+
+/* Handles responses to an ajax request:
+ * - finds the right dataType (mediates between content-type and expected dataType)
+ * - returns the corresponding response
+ */
+function ajaxHandleResponses( s, jqXHR, responses ) {
+       var firstDataType, ct, finalDataType, type,
+               contents = s.contents,
+               dataTypes = s.dataTypes;
+
+       // Remove auto dataType and get content-type in the process
+       while ( dataTypes[ 0 ] === "*" ) {
+               dataTypes.shift();
+               if ( ct === undefined ) {
+                       ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" );
+               }
+       }
+
+       // Check if we're dealing with a known content-type
+       if ( ct ) {
+               for ( type in contents ) {
+                       if ( contents[ type ] && contents[ type ].test( ct ) ) {
+                               dataTypes.unshift( type );
+                               break;
+                       }
+               }
+       }
+
+       // Check to see if we have a response for the expected dataType
+       if ( dataTypes[ 0 ] in responses ) {
+               finalDataType = dataTypes[ 0 ];
+       } else {
+
+               // Try convertible dataTypes
+               for ( type in responses ) {
+                       if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) {
+                               finalDataType = type;
+                               break;
+                       }
+                       if ( !firstDataType ) {
+                               firstDataType = type;
+                       }
+               }
+
+               // Or just use first one
+               finalDataType = finalDataType || firstDataType;
+       }
+
+       // If we found a dataType
+       // We add the dataType to the list if needed
+       // and return the corresponding response
+       if ( finalDataType ) {
+               if ( finalDataType !== dataTypes[ 0 ] ) {
+                       dataTypes.unshift( finalDataType );
+               }
+               return responses[ finalDataType ];
+       }
+}
+
+/* Chain conversions given the request and the original response
+ * Also sets the responseXXX fields on the jqXHR instance
+ */
+function ajaxConvert( s, response, jqXHR, isSuccess ) {
+       var conv2, current, conv, tmp, prev,
+               converters = {},
+
+               // Work with a copy of dataTypes in case we need to modify it for conversion
+               dataTypes = s.dataTypes.slice();
+
+       // Create converters map with lowercased keys
+       if ( dataTypes[ 1 ] ) {
+               for ( conv in s.converters ) {
+                       converters[ conv.toLowerCase() ] = s.converters[ conv ];
+               }
+       }
+
+       current = dataTypes.shift();
+
+       // Convert to each sequential dataType
+       while ( current ) {
+
+               if ( s.responseFields[ current ] ) {
+                       jqXHR[ s.responseFields[ current ] ] = response;
+               }
+
+               // Apply the dataFilter if provided
+               if ( !prev && isSuccess && s.dataFilter ) {
+                       response = s.dataFilter( response, s.dataType );
+               }
+
+               prev = current;
+               current = dataTypes.shift();
+
+               if ( current ) {
+
+                       // There's only work to do if current dataType is non-auto
+                       if ( current === "*" ) {
+
+                               current = prev;
+
+                       // Convert response if prev dataType is non-auto and differs from current
+                       } else if ( prev !== "*" && prev !== current ) {
+
+                               // Seek a direct converter
+                               conv = converters[ prev + " " + current ] || converters[ "* " + current ];
+
+                               // If none found, seek a pair
+                               if ( !conv ) {
+                                       for ( conv2 in converters ) {
+
+                                               // If conv2 outputs current
+                                               tmp = conv2.split( " " );
+                                               if ( tmp[ 1 ] === current ) {
+
+                                                       // If prev can be converted to accepted input
+                                                       conv = converters[ prev + " " + tmp[ 0 ] ] ||
+                                                               converters[ "* " + tmp[ 0 ] ];
+                                                       if ( conv ) {
+
+                                                               // Condense equivalence converters
+                                                               if ( conv === true ) {
+                                                                       conv = converters[ conv2 ];
+
+                                                               // Otherwise, insert the intermediate dataType
+                                                               } else if ( converters[ conv2 ] !== true ) {
+                                                                       current = tmp[ 0 ];
+                                                                       dataTypes.unshift( tmp[ 1 ] );
+                                                               }
+                                                               break;
+                                                       }
+                                               }
+                                       }
+                               }
+
+                               // Apply converter (if not an equivalence)
+                               if ( conv !== true ) {
+
+                                       // Unless errors are allowed to bubble, catch and return them
+                                       if ( conv && s[ "throws" ] ) { // jscs:ignore requireDotNotation
+                                               response = conv( response );
+                                       } else {
+                                               try {
+                                                       response = conv( response );
+                                               } catch ( e ) {
+                                                       return {
+                                                               state: "parsererror",
+                                                               error: conv ? e : "No conversion from " + prev + " to " + current
+                                                       };
+                                               }
+                                       }
+                               }
+                       }
+               }
+       }
+
+       return { state: "success", data: response };
+}
+
+jQuery.extend( {
+
+       // Counter for holding the number of active queries
+       active: 0,
+
+       // Last-Modified header cache for next request
+       lastModified: {},
+       etag: {},
+
+       ajaxSettings: {
+               url: ajaxLocation,
+               type: "GET",
+               isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),
+               global: true,
+               processData: true,
+               async: true,
+               contentType: "application/x-www-form-urlencoded; charset=UTF-8",
+               /*
+               timeout: 0,
+               data: null,
+               dataType: null,
+               username: null,
+               password: null,
+               cache: null,
+               throws: false,
+               traditional: false,
+               headers: {},
+               */
+
+               accepts: {
+                       "*": allTypes,
+                       text: "text/plain",
+                       html: "text/html",
+                       xml: "application/xml, text/xml",
+                       json: "application/json, text/javascript"
+               },
+
+               contents: {
+                       xml: /\bxml\b/,
+                       html: /\bhtml/,
+                       json: /\bjson\b/
+               },
+
+               responseFields: {
+                       xml: "responseXML",
+                       text: "responseText",
+                       json: "responseJSON"
+               },
+
+               // Data converters
+               // Keys separate source (or catchall "*") and destination types with a single space
+               converters: {
+
+                       // Convert anything to text
+                       "* text": String,
+
+                       // Text to html (true = no transformation)
+                       "text html": true,
+
+                       // Evaluate text as a json expression
+                       "text json": jQuery.parseJSON,
+
+                       // Parse text as xml
+                       "text xml": jQuery.parseXML
+               },
+
+               // For options that shouldn't be deep extended:
+               // you can add your own custom options here if
+               // and when you create one that shouldn't be
+               // deep extended (see ajaxExtend)
+               flatOptions: {
+                       url: true,
+                       context: true
+               }
+       },
+
+       // Creates a full fledged settings object into target
+       // with both ajaxSettings and settings fields.
+       // If target is omitted, writes into ajaxSettings.
+       ajaxSetup: function( target, settings ) {
+               return settings ?
+
+                       // Building a settings object
+                       ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :
+
+                       // Extending ajaxSettings
+                       ajaxExtend( jQuery.ajaxSettings, target );
+       },
+
+       ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
+       ajaxTransport: addToPrefiltersOrTransports( transports ),
+
+       // Main method
+       ajax: function( url, options ) {
+
+               // If url is an object, simulate pre-1.5 signature
+               if ( typeof url === "object" ) {
+                       options = url;
+                       url = undefined;
+               }
+
+               // Force options to be an object
+               options = options || {};
+
+               var
+
+                       // Cross-domain detection vars
+                       parts,
+
+                       // Loop variable
+                       i,
+
+                       // URL without anti-cache param
+                       cacheURL,
+
+                       // Response headers as string
+                       responseHeadersString,
+
+                       // timeout handle
+                       timeoutTimer,
+
+                       // To know if global events are to be dispatched
+                       fireGlobals,
+
+                       transport,
+
+                       // Response headers
+                       responseHeaders,
+
+                       // Create the final options object
+                       s = jQuery.ajaxSetup( {}, options ),
+
+                       // Callbacks context
+                       callbackContext = s.context || s,
+
+                       // Context for global events is callbackContext if it is a DOM node or jQuery collection
+                       globalEventContext = s.context &&
+                               ( callbackContext.nodeType || callbackContext.jquery ) ?
+                                       jQuery( callbackContext ) :
+                                       jQuery.event,
+
+                       // Deferreds
+                       deferred = jQuery.Deferred(),
+                       completeDeferred = jQuery.Callbacks( "once memory" ),
+
+                       // Status-dependent callbacks
+                       statusCode = s.statusCode || {},
+
+                       // Headers (they are sent all at once)
+                       requestHeaders = {},
+                       requestHeadersNames = {},
+
+                       // The jqXHR state
+                       state = 0,
+
+                       // Default abort message
+                       strAbort = "canceled",
+
+                       // Fake xhr
+                       jqXHR = {
+                               readyState: 0,
+
+                               // Builds headers hashtable if needed
+                               getResponseHeader: function( key ) {
+                                       var match;
+                                       if ( state === 2 ) {
+                                               if ( !responseHeaders ) {
+                                                       responseHeaders = {};
+                                                       while ( ( match = rheaders.exec( responseHeadersString ) ) ) {
+                                                               responseHeaders[ match[ 1 ].toLowerCase() ] = match[ 2 ];
+                                                       }
+                                               }
+                                               match = responseHeaders[ key.toLowerCase() ];
+                                       }
+                                       return match == null ? null : match;
+                               },
+
+                               // Raw string
+                               getAllResponseHeaders: function() {
+                                       return state === 2 ? responseHeadersString : null;
+                               },
+
+                               // Caches the header
+                               setRequestHeader: function( name, value ) {
+                                       var lname = name.toLowerCase();
+                                       if ( !state ) {
+                                               name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;
+                                               requestHeaders[ name ] = value;
+                                       }
+                                       return this;
+                               },
+
+                               // Overrides response content-type header
+                               overrideMimeType: function( type ) {
+                                       if ( !state ) {
+                                               s.mimeType = type;
+                                       }
+                                       return this;
+                               },
+
+                               // Status-dependent callbacks
+                               statusCode: function( map ) {
+                                       var code;
+                                       if ( map ) {
+                                               if ( state < 2 ) {
+                                                       for ( code in map ) {
+
+                                                               // Lazy-add the new callback in a way that preserves old ones
+                                                               statusCode[ code ] = [ statusCode[ code ], map[ code ] ];
+                                                       }
+                                               } else {
+
+                                                       // Execute the appropriate callbacks
+                                                       jqXHR.always( map[ jqXHR.status ] );
+                                               }
+                                       }
+                                       return this;
+                               },
+
+                               // Cancel the request
+                               abort: function( statusText ) {
+                                       var finalText = statusText || strAbort;
+                                       if ( transport ) {
+                                               transport.abort( finalText );
+                                       }
+                                       done( 0, finalText );
+                                       return this;
+                               }
+                       };
+
+               // Attach deferreds
+               deferred.promise( jqXHR ).complete = completeDeferred.add;
+               jqXHR.success = jqXHR.done;
+               jqXHR.error = jqXHR.fail;
+
+               // Remove hash character (#7531: and string promotion)
+               // Add protocol if not provided (#5866: IE7 issue with protocol-less urls)
+               // Handle falsy url in the settings object (#10093: consistency with old signature)
+               // We also use the url parameter if available
+               s.url = ( ( url || s.url || ajaxLocation ) + "" )
+                       .replace( rhash, "" )
+                       .replace( rprotocol, ajaxLocParts[ 1 ] + "//" );
+
+               // Alias method option to type as per ticket #12004
+               s.type = options.method || options.type || s.method || s.type;
+
+               // Extract dataTypes list
+               s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().match( rnotwhite ) || [ "" ];
+
+               // A cross-domain request is in order when we have a protocol:host:port mismatch
+               if ( s.crossDomain == null ) {
+                       parts = rurl.exec( s.url.toLowerCase() );
+                       s.crossDomain = !!( parts &&
+                               ( parts[ 1 ] !== ajaxLocParts[ 1 ] || parts[ 2 ] !== ajaxLocParts[ 2 ] ||
+                                       ( parts[ 3 ] || ( parts[ 1 ] === "http:" ? "80" : "443" ) ) !==
+                                               ( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? "80" : "443" ) ) )
+                       );
+               }
+
+               // Convert data if not already a string
+               if ( s.data && s.processData && typeof s.data !== "string" ) {
+                       s.data = jQuery.param( s.data, s.traditional );
+               }
+
+               // Apply prefilters
+               inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
+
+               // If request was aborted inside a prefilter, stop there
+               if ( state === 2 ) {
+                       return jqXHR;
+               }
+
+               // We can fire global events as of now if asked to
+               // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)
+               fireGlobals = jQuery.event && s.global;
+
+               // Watch for a new set of requests
+               if ( fireGlobals && jQuery.active++ === 0 ) {
+                       jQuery.event.trigger( "ajaxStart" );
+               }
+
+               // Uppercase the type
+               s.type = s.type.toUpperCase();
+
+               // Determine if request has content
+               s.hasContent = !rnoContent.test( s.type );
+
+               // Save the URL in case we're toying with the If-Modified-Since
+               // and/or If-None-Match header later on
+               cacheURL = s.url;
+
+               // More options handling for requests with no content
+               if ( !s.hasContent ) {
+
+                       // If data is available, append data to url
+                       if ( s.data ) {
+                               cacheURL = ( s.url += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data );
+
+                               // #9682: remove data so that it's not used in an eventual retry
+                               delete s.data;
+                       }
+
+                       // Add anti-cache in url if needed
+                       if ( s.cache === false ) {
+                               s.url = rts.test( cacheURL ) ?
+
+                                       // If there is already a '_' parameter, set its value
+                                       cacheURL.replace( rts, "$1_=" + nonce++ ) :
+
+                                       // Otherwise add one to the end
+                                       cacheURL + ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + nonce++;
+                       }
+               }
+
+               // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+               if ( s.ifModified ) {
+                       if ( jQuery.lastModified[ cacheURL ] ) {
+                               jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] );
+                       }
+                       if ( jQuery.etag[ cacheURL ] ) {
+                               jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] );
+                       }
+               }
+
+               // Set the correct header, if data is being sent
+               if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
+                       jqXHR.setRequestHeader( "Content-Type", s.contentType );
+               }
+
+               // Set the Accepts header for the server, depending on the dataType
+               jqXHR.setRequestHeader(
+                       "Accept",
+                       s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?
+                               s.accepts[ s.dataTypes[ 0 ] ] +
+                                       ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
+                               s.accepts[ "*" ]
+               );
+
+               // Check for headers option
+               for ( i in s.headers ) {
+                       jqXHR.setRequestHeader( i, s.headers[ i ] );
+               }
+
+               // Allow custom headers/mimetypes and early abort
+               if ( s.beforeSend &&
+                       ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {
+
+                       // Abort if not done already and return
+                       return jqXHR.abort();
+               }
+
+               // aborting is no longer a cancellation
+               strAbort = "abort";
+
+               // Install callbacks on deferreds
+               for ( i in { success: 1, error: 1, complete: 1 } ) {
+                       jqXHR[ i ]( s[ i ] );
+               }
+
+               // Get transport
+               transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
+
+               // If no transport, we auto-abort
+               if ( !transport ) {
+                       done( -1, "No Transport" );
+               } else {
+                       jqXHR.readyState = 1;
+
+                       // Send global event
+                       if ( fireGlobals ) {
+                               globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
+                       }
+
+                       // If request was aborted inside ajaxSend, stop there
+                       if ( state === 2 ) {
+                               return jqXHR;
+                       }
+
+                       // Timeout
+                       if ( s.async && s.timeout > 0 ) {
+                               timeoutTimer = window.setTimeout( function() {
+                                       jqXHR.abort( "timeout" );
+                               }, s.timeout );
+                       }
+
+                       try {
+                               state = 1;
+                               transport.send( requestHeaders, done );
+                       } catch ( e ) {
+
+                               // Propagate exception as error if not done
+                               if ( state < 2 ) {
+                                       done( -1, e );
+
+                               // Simply rethrow otherwise
+                               } else {
+                                       throw e;
+                               }
+                       }
+               }
+
+               // Callback for when everything is done
+               function done( status, nativeStatusText, responses, headers ) {
+                       var isSuccess, success, error, response, modified,
+                               statusText = nativeStatusText;
+
+                       // Called once
+                       if ( state === 2 ) {
+                               return;
+                       }
+
+                       // State is "done" now
+                       state = 2;
+
+                       // Clear timeout if it exists
+                       if ( timeoutTimer ) {
+                               window.clearTimeout( timeoutTimer );
+                       }
+
+                       // Dereference transport for early garbage collection
+                       // (no matter how long the jqXHR object will be used)
+                       transport = undefined;
+
+                       // Cache response headers
+                       responseHeadersString = headers || "";
+
+                       // Set readyState
+                       jqXHR.readyState = status > 0 ? 4 : 0;
+
+                       // Determine if successful
+                       isSuccess = status >= 200 && status < 300 || status === 304;
+
+                       // Get response data
+                       if ( responses ) {
+                               response = ajaxHandleResponses( s, jqXHR, responses );
+                       }
+
+                       // Convert no matter what (that way responseXXX fields are always set)
+                       response = ajaxConvert( s, response, jqXHR, isSuccess );
+
+                       // If successful, handle type chaining
+                       if ( isSuccess ) {
+
+                               // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+                               if ( s.ifModified ) {
+                                       modified = jqXHR.getResponseHeader( "Last-Modified" );
+                                       if ( modified ) {
+                                               jQuery.lastModified[ cacheURL ] = modified;
+                                       }
+                                       modified = jqXHR.getResponseHeader( "etag" );
+                                       if ( modified ) {
+                                               jQuery.etag[ cacheURL ] = modified;
+                                       }
+                               }
+
+                               // if no content
+                               if ( status === 204 || s.type === "HEAD" ) {
+                                       statusText = "nocontent";
+
+                               // if not modified
+                               } else if ( status === 304 ) {
+                                       statusText = "notmodified";
+
+                               // If we have data, let's convert it
+                               } else {
+                                       statusText = response.state;
+                                       success = response.data;
+                                       error = response.error;
+                                       isSuccess = !error;
+                               }
+                       } else {
+
+                               // We extract error from statusText
+                               // then normalize statusText and status for non-aborts
+                               error = statusText;
+                               if ( status || !statusText ) {
+                                       statusText = "error";
+                                       if ( status < 0 ) {
+                                               status = 0;
+                                       }
+                               }
+                       }
+
+                       // Set data for the fake xhr object
+                       jqXHR.status = status;
+                       jqXHR.statusText = ( nativeStatusText || statusText ) + "";
+
+                       // Success/Error
+                       if ( isSuccess ) {
+                               deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
+                       } else {
+                               deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
+                       }
+
+                       // Status-dependent callbacks
+                       jqXHR.statusCode( statusCode );
+                       statusCode = undefined;
+
+                       if ( fireGlobals ) {
+                               globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError",
+                                       [ jqXHR, s, isSuccess ? success : error ] );
+                       }
+
+                       // Complete
+                       completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
+
+                       if ( fireGlobals ) {
+                               globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
+
+                               // Handle the global AJAX counter
+                               if ( !( --jQuery.active ) ) {
+                                       jQuery.event.trigger( "ajaxStop" );
+                               }
+                       }
+               }
+
+               return jqXHR;
+       },
+
+       getJSON: function( url, data, callback ) {
+               return jQuery.get( url, data, callback, "json" );
+       },
+
+       getScript: function( url, callback ) {
+               return jQuery.get( url, undefined, callback, "script" );
+       }
+} );
+
+jQuery.each( [ "get", "post" ], function( i, method ) {
+       jQuery[ method ] = function( url, data, callback, type ) {
+
+               // shift arguments if data argument was omitted
+               if ( jQuery.isFunction( data ) ) {
+                       type = type || callback;
+                       callback = data;
+                       data = undefined;
+               }
+
+               // The url can be an options object (which then must have .url)
+               return jQuery.ajax( jQuery.extend( {
+                       url: url,
+                       type: method,
+                       dataType: type,
+                       data: data,
+                       success: callback
+               }, jQuery.isPlainObject( url ) && url ) );
+       };
+} );
+
+
+jQuery._evalUrl = function( url ) {
+       return jQuery.ajax( {
+               url: url,
+
+               // Make this explicit, since user can override this through ajaxSetup (#11264)
+               type: "GET",
+               dataType: "script",
+               cache: true,
+               async: false,
+               global: false,
+               "throws": true
+       } );
+};
+
+
+jQuery.fn.extend( {
+       wrapAll: function( html ) {
+               if ( jQuery.isFunction( html ) ) {
+                       return this.each( function( i ) {
+                               jQuery( this ).wrapAll( html.call( this, i ) );
+                       } );
+               }
+
+               if ( this[ 0 ] ) {
+
+                       // The elements to wrap the target around
+                       var wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );
+
+                       if ( this[ 0 ].parentNode ) {
+                               wrap.insertBefore( this[ 0 ] );
+                       }
+
+                       wrap.map( function() {
+                               var elem = this;
+
+                               while ( elem.firstChild && elem.firstChild.nodeType === 1 ) {
+                                       elem = elem.firstChild;
+                               }
+
+                               return elem;
+                       } ).append( this );
+               }
+
+               return this;
+       },
+
+       wrapInner: function( html ) {
+               if ( jQuery.isFunction( html ) ) {
+                       return this.each( function( i ) {
+                               jQuery( this ).wrapInner( html.call( this, i ) );
+                       } );
+               }
+
+               return this.each( function() {
+                       var self = jQuery( this ),
+                               contents = self.contents();
+
+                       if ( contents.length ) {
+                               contents.wrapAll( html );
+
+                       } else {
+                               self.append( html );
+                       }
+               } );
+       },
+
+       wrap: function( html ) {
+               var isFunction = jQuery.isFunction( html );
+
+               return this.each( function( i ) {
+                       jQuery( this ).wrapAll( isFunction ? html.call( this, i ) : html );
+               } );
+       },
+
+       unwrap: function() {
+               return this.parent().each( function() {
+                       if ( !jQuery.nodeName( this, "body" ) ) {
+                               jQuery( this ).replaceWith( this.childNodes );
+                       }
+               } ).end();
+       }
+} );
+
+
+function getDisplay( elem ) {
+       return elem.style && elem.style.display || jQuery.css( elem, "display" );
+}
+
+function filterHidden( elem ) {
+
+       // Disconnected elements are considered hidden
+       if ( !jQuery.contains( elem.ownerDocument || document, elem ) ) {
+               return true;
+       }
+       while ( elem && elem.nodeType === 1 ) {
+               if ( getDisplay( elem ) === "none" || elem.type === "hidden" ) {
+                       return true;
+               }
+               elem = elem.parentNode;
+       }
+       return false;
+}
+
+jQuery.expr.filters.hidden = function( elem ) {
+
+       // Support: Opera <= 12.12
+       // Opera reports offsetWidths and offsetHeights less than zero on some elements
+       return support.reliableHiddenOffsets() ?
+               ( elem.offsetWidth <= 0 && elem.offsetHeight <= 0 &&
+                       !elem.getClientRects().length ) :
+                       filterHidden( elem );
+};
+
+jQuery.expr.filters.visible = function( elem ) {
+       return !jQuery.expr.filters.hidden( elem );
+};
+
+
+
+
+var r20 = /%20/g,
+       rbracket = /\[\]$/,
+       rCRLF = /\r?\n/g,
+       rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
+       rsubmittable = /^(?:input|select|textarea|keygen)/i;
+
+function buildParams( prefix, obj, traditional, add ) {
+       var name;
+
+       if ( jQuery.isArray( obj ) ) {
+
+               // Serialize array item.
+               jQuery.each( obj, function( i, v ) {
+                       if ( traditional || rbracket.test( prefix ) ) {
+
+                               // Treat each array item as a scalar.
+                               add( prefix, v );
+
+                       } else {
+
+                               // Item is non-scalar (array or object), encode its numeric index.
+                               buildParams(
+                                       prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]",
+                                       v,
+                                       traditional,
+                                       add
+                               );
+                       }
+               } );
+
+       } else if ( !traditional && jQuery.type( obj ) === "object" ) {
+
+               // Serialize object item.
+               for ( name in obj ) {
+                       buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
+               }
+
+       } else {
+
+               // Serialize scalar item.
+               add( prefix, obj );
+       }
+}
+
+// Serialize an array of form elements or a set of
+// key/values into a query string
+jQuery.param = function( a, traditional ) {
+       var prefix,
+               s = [],
+               add = function( key, value ) {
+
+                       // If value is a function, invoke it and return its value
+                       value = jQuery.isFunction( value ) ? value() : ( value == null ? "" : value );
+                       s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value );
+               };
+
+       // Set traditional to true for jQuery <= 1.3.2 behavior.
+       if ( traditional === undefined ) {
+               traditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;
+       }
+
+       // If an array was passed in, assume that it is an array of form elements.
+       if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
+
+               // Serialize the form elements
+               jQuery.each( a, function() {
+                       add( this.name, this.value );
+               } );
+
+       } else {
+
+               // If traditional, encode the "old" way (the way 1.3.2 or older
+               // did it), otherwise encode params recursively.
+               for ( prefix in a ) {
+                       buildParams( prefix, a[ prefix ], traditional, add );
+               }
+       }
+
+       // Return the resulting serialization
+       return s.join( "&" ).replace( r20, "+" );
+};
+
+jQuery.fn.extend( {
+       serialize: function() {
+               return jQuery.param( this.serializeArray() );
+       },
+       serializeArray: function() {
+               return this.map( function() {
+
+                       // Can add propHook for "elements" to filter or add form elements
+                       var elements = jQuery.prop( this, "elements" );
+                       return elements ? jQuery.makeArray( elements ) : this;
+               } )
+               .filter( function() {
+                       var type = this.type;
+
+                       // Use .is(":disabled") so that fieldset[disabled] works
+                       return this.name && !jQuery( this ).is( ":disabled" ) &&
+                               rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&
+                               ( this.checked || !rcheckableType.test( type ) );
+               } )
+               .map( function( i, elem ) {
+                       var val = jQuery( this ).val();
+
+                       return val == null ?
+                               null :
+                               jQuery.isArray( val ) ?
+                                       jQuery.map( val, function( val ) {
+                                               return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
+                                       } ) :
+                                       { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
+               } ).get();
+       }
+} );
+
+
+// Create the request object
+// (This is still attached to ajaxSettings for backward compatibility)
+jQuery.ajaxSettings.xhr = window.ActiveXObject !== undefined ?
+
+       // Support: IE6-IE8
+       function() {
+
+               // XHR cannot access local files, always use ActiveX for that case
+               if ( this.isLocal ) {
+                       return createActiveXHR();
+               }
+
+               // Support: IE 9-11
+               // IE seems to error on cross-domain PATCH requests when ActiveX XHR
+               // is used. In IE 9+ always use the native XHR.
+               // Note: this condition won't catch Edge as it doesn't define
+               // document.documentMode but it also doesn't support ActiveX so it won't
+               // reach this code.
+               if ( document.documentMode > 8 ) {
+                       return createStandardXHR();
+               }
+
+               // Support: IE<9
+               // oldIE XHR does not support non-RFC2616 methods (#13240)
+               // See http://msdn.microsoft.com/en-us/library/ie/ms536648(v=vs.85).aspx
+               // and http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9
+               // Although this check for six methods instead of eight
+               // since IE also does not support "trace" and "connect"
+               return /^(get|post|head|put|delete|options)$/i.test( this.type ) &&
+                       createStandardXHR() || createActiveXHR();
+       } :
+
+       // For all other browsers, use the standard XMLHttpRequest object
+       createStandardXHR;
+
+var xhrId = 0,
+       xhrCallbacks = {},
+       xhrSupported = jQuery.ajaxSettings.xhr();
+
+// Support: IE<10
+// Open requests must be manually aborted on unload (#5280)
+// See https://support.microsoft.com/kb/2856746 for more info
+if ( window.attachEvent ) {
+       window.attachEvent( "onunload", function() {
+               for ( var key in xhrCallbacks ) {
+                       xhrCallbacks[ key ]( undefined, true );
+               }
+       } );
+}
+
+// Determine support properties
+support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );
+xhrSupported = support.ajax = !!xhrSupported;
+
+// Create transport if the browser can provide an xhr
+if ( xhrSupported ) {
+
+       jQuery.ajaxTransport( function( options ) {
+
+               // Cross domain only allowed if supported through XMLHttpRequest
+               if ( !options.crossDomain || support.cors ) {
+
+                       var callback;
+
+                       return {
+                               send: function( headers, complete ) {
+                                       var i,
+                                               xhr = options.xhr(),
+                                               id = ++xhrId;
+
+                                       // Open the socket
+                                       xhr.open(
+                                               options.type,
+                                               options.url,
+                                               options.async,
+                                               options.username,
+                                               options.password
+                                       );
+
+                                       // Apply custom fields if provided
+                                       if ( options.xhrFields ) {
+                                               for ( i in options.xhrFields ) {
+                                                       xhr[ i ] = options.xhrFields[ i ];
+                                               }
+                                       }
+
+                                       // Override mime type if needed
+                                       if ( options.mimeType && xhr.overrideMimeType ) {
+                                               xhr.overrideMimeType( options.mimeType );
+                                       }
+
+                                       // X-Requested-With header
+                                       // For cross-domain requests, seeing as conditions for a preflight are
+                                       // akin to a jigsaw puzzle, we simply never set it to be sure.
+                                       // (it can always be set on a per-request basis or even using ajaxSetup)
+                                       // For same-domain requests, won't change header if already provided.
+                                       if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) {
+                                               headers[ "X-Requested-With" ] = "XMLHttpRequest";
+                                       }
+
+                                       // Set headers
+                                       for ( i in headers ) {
+
+                                               // Support: IE<9
+                                               // IE's ActiveXObject throws a 'Type Mismatch' exception when setting
+                                               // request header to a null-value.
+                                               //
+                                               // To keep consistent with other XHR implementations, cast the value
+                                               // to string and ignore `undefined`.
+                                               if ( headers[ i ] !== undefined ) {
+                                                       xhr.setRequestHeader( i, headers[ i ] + "" );
+                                               }
+                                       }
+
+                                       // Do send the request
+                                       // This may raise an exception which is actually
+                                       // handled in jQuery.ajax (so no try/catch here)
+                                       xhr.send( ( options.hasContent && options.data ) || null );
+
+                                       // Listener
+                                       callback = function( _, isAbort ) {
+                                               var status, statusText, responses;
+
+                                               // Was never called and is aborted or complete
+                                               if ( callback && ( isAbort || xhr.readyState === 4 ) ) {
+
+                                                       // Clean up
+                                                       delete xhrCallbacks[ id ];
+                                                       callback = undefined;
+                                                       xhr.onreadystatechange = jQuery.noop;
+
+                                                       // Abort manually if needed
+                                                       if ( isAbort ) {
+                                                               if ( xhr.readyState !== 4 ) {
+                                                                       xhr.abort();
+                                                               }
+                                                       } else {
+                                                               responses = {};
+                                                               status = xhr.status;
+
+                                                               // Support: IE<10
+                                                               // Accessing binary-data responseText throws an exception
+                                                               // (#11426)
+                                                               if ( typeof xhr.responseText === "string" ) {
+                                                                       responses.text = xhr.responseText;
+                                                               }
+
+                                                               // Firefox throws an exception when accessing
+                                                               // statusText for faulty cross-domain requests
+                                                               try {
+                                                                       statusText = xhr.statusText;
+                                                               } catch ( e ) {
+
+                                                                       // We normalize with Webkit giving an empty statusText
+                                                                       statusText = "";
+                                                               }
+
+                                                               // Filter status for non standard behaviors
+
+                                                               // If the request is local and we have data: assume a success
+                                                               // (success with no data won't get notified, that's the best we
+                                                               // can do given current implementations)
+                                                               if ( !status && options.isLocal && !options.crossDomain ) {
+                                                                       status = responses.text ? 200 : 404;
+
+                                                               // IE - #1450: sometimes returns 1223 when it should be 204
+                                                               } else if ( status === 1223 ) {
+                                                                       status = 204;
+                                                               }
+                                                       }
+                                               }
+
+                                               // Call complete if needed
+                                               if ( responses ) {
+                                                       complete( status, statusText, responses, xhr.getAllResponseHeaders() );
+                                               }
+                                       };
+
+                                       // Do send the request
+                                       // `xhr.send` may raise an exception, but it will be
+                                       // handled in jQuery.ajax (so no try/catch here)
+                                       if ( !options.async ) {
+
+                                               // If we're in sync mode we fire the callback
+                                               callback();
+                                       } else if ( xhr.readyState === 4 ) {
+
+                                               // (IE6 & IE7) if it's in cache and has been
+                                               // retrieved directly we need to fire the callback
+                                               window.setTimeout( callback );
+                                       } else {
+
+                                               // Register the callback, but delay it in case `xhr.send` throws
+                                               // Add to the list of active xhr callbacks
+                                               xhr.onreadystatechange = xhrCallbacks[ id ] = callback;
+                                       }
+                               },
+
+                               abort: function() {
+                                       if ( callback ) {
+                                               callback( undefined, true );
+                                       }
+                               }
+                       };
+               }
+       } );
+}
+
+// Functions to create xhrs
+function createStandardXHR() {
+       try {
+               return new window.XMLHttpRequest();
+       } catch ( e ) {}
+}
+
+function createActiveXHR() {
+       try {
+               return new window.ActiveXObject( "Microsoft.XMLHTTP" );
+       } catch ( e ) {}
+}
+
+
+
+
+// Install script dataType
+jQuery.ajaxSetup( {
+       accepts: {
+               script: "text/javascript, application/javascript, " +
+                       "application/ecmascript, application/x-ecmascript"
+       },
+       contents: {
+               script: /\b(?:java|ecma)script\b/
+       },
+       converters: {
+               "text script": function( text ) {
+                       jQuery.globalEval( text );
+                       return text;
+               }
+       }
+} );
+
+// Handle cache's special case and global
+jQuery.ajaxPrefilter( "script", function( s ) {
+       if ( s.cache === undefined ) {
+               s.cache = false;
+       }
+       if ( s.crossDomain ) {
+               s.type = "GET";
+               s.global = false;
+       }
+} );
+
+// Bind script tag hack transport
+jQuery.ajaxTransport( "script", function( s ) {
+
+       // This transport only deals with cross domain requests
+       if ( s.crossDomain ) {
+
+               var script,
+                       head = document.head || jQuery( "head" )[ 0 ] || document.documentElement;
+
+               return {
+
+                       send: function( _, callback ) {
+
+                               script = document.createElement( "script" );
+
+                               script.async = true;
+
+                               if ( s.scriptCharset ) {
+                                       script.charset = s.scriptCharset;
+                               }
+
+                               script.src = s.url;
+
+                               // Attach handlers for all browsers
+                               script.onload = script.onreadystatechange = function( _, isAbort ) {
+
+                                       if ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) {
+
+                                               // Handle memory leak in IE
+                                               script.onload = script.onreadystatechange = null;
+
+                                               // Remove the script
+                                               if ( script.parentNode ) {
+                                                       script.parentNode.removeChild( script );
+                                               }
+
+                                               // Dereference the script
+                                               script = null;
+
+                                               // Callback if not abort
+                                               if ( !isAbort ) {
+                                                       callback( 200, "success" );
+                                               }
+                                       }
+                               };
+
+                               // Circumvent IE6 bugs with base elements (#2709 and #4378) by prepending
+                               // Use native DOM manipulation to avoid our domManip AJAX trickery
+                               head.insertBefore( script, head.firstChild );
+                       },
+
+                       abort: function() {
+                               if ( script ) {
+                                       script.onload( undefined, true );
+                               }
+                       }
+               };
+       }
+} );
+
+
+
+
+var oldCallbacks = [],
+       rjsonp = /(=)\?(?=&|$)|\?\?/;
+
+// Default jsonp settings
+jQuery.ajaxSetup( {
+       jsonp: "callback",
+       jsonpCallback: function() {
+               var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) );
+               this[ callback ] = true;
+               return callback;
+       }
+} );
+
+// Detect, normalize options and install callbacks for jsonp requests
+jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
+
+       var callbackName, overwritten, responseContainer,
+               jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?
+                       "url" :
+                       typeof s.data === "string" &&
+                               ( s.contentType || "" )
+                                       .indexOf( "application/x-www-form-urlencoded" ) === 0 &&
+                               rjsonp.test( s.data ) && "data"
+               );
+
+       // Handle iff the expected data type is "jsonp" or we have a parameter to set
+       if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) {
+
+               // Get callback name, remembering preexisting value associated with it
+               callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?
+                       s.jsonpCallback() :
+                       s.jsonpCallback;
+
+               // Insert callback into url or form data
+               if ( jsonProp ) {
+                       s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName );
+               } else if ( s.jsonp !== false ) {
+                       s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;
+               }
+
+               // Use data converter to retrieve json after script execution
+               s.converters[ "script json" ] = function() {
+                       if ( !responseContainer ) {
+                               jQuery.error( callbackName + " was not called" );
+                       }
+                       return responseContainer[ 0 ];
+               };
+
+               // force json dataType
+               s.dataTypes[ 0 ] = "json";
+
+               // Install callback
+               overwritten = window[ callbackName ];
+               window[ callbackName ] = function() {
+                       responseContainer = arguments;
+               };
+
+               // Clean-up function (fires after converters)
+               jqXHR.always( function() {
+
+                       // If previous value didn't exist - remove it
+                       if ( overwritten === undefined ) {
+                               jQuery( window ).removeProp( callbackName );
+
+                       // Otherwise restore preexisting value
+                       } else {
+                               window[ callbackName ] = overwritten;
+                       }
+
+                       // Save back as free
+                       if ( s[ callbackName ] ) {
+
+                               // make sure that re-using the options doesn't screw things around
+                               s.jsonpCallback = originalSettings.jsonpCallback;
+
+                               // save the callback name for future use
+                               oldCallbacks.push( callbackName );
+                       }
+
+                       // Call if it was a function and we have a response
+                       if ( responseContainer && jQuery.isFunction( overwritten ) ) {
+                               overwritten( responseContainer[ 0 ] );
+                       }
+
+                       responseContainer = overwritten = undefined;
+               } );
+
+               // Delegate to script
+               return "script";
+       }
+} );
+
+
+
+
+// data: string of html
+// context (optional): If specified, the fragment will be created in this context,
+// defaults to document
+// keepScripts (optional): If true, will include scripts passed in the html string
+jQuery.parseHTML = function( data, context, keepScripts ) {
+       if ( !data || typeof data !== "string" ) {
+               return null;
+       }
+       if ( typeof context === "boolean" ) {
+               keepScripts = context;
+               context = false;
+       }
+       context = context || document;
+
+       var parsed = rsingleTag.exec( data ),
+               scripts = !keepScripts && [];
+
+       // Single tag
+       if ( parsed ) {
+               return [ context.createElement( parsed[ 1 ] ) ];
+       }
+
+       parsed = buildFragment( [ data ], context, scripts );
+
+       if ( scripts && scripts.length ) {
+               jQuery( scripts ).remove();
+       }
+
+       return jQuery.merge( [], parsed.childNodes );
+};
+
+
+// Keep a copy of the old load method
+var _load = jQuery.fn.load;
+
+/**
+ * Load a url into a page
+ */
+jQuery.fn.load = function( url, params, callback ) {
+       if ( typeof url !== "string" && _load ) {
+               return _load.apply( this, arguments );
+       }
+
+       var selector, type, response,
+               self = this,
+               off = url.indexOf( " " );
+
+       if ( off > -1 ) {
+               selector = jQuery.trim( url.slice( off, url.length ) );
+               url = url.slice( 0, off );
+       }
+
+       // If it's a function
+       if ( jQuery.isFunction( params ) ) {
+
+               // We assume that it's the callback
+               callback = params;
+               params = undefined;
+
+       // Otherwise, build a param string
+       } else if ( params && typeof params === "object" ) {
+               type = "POST";
+       }
+
+       // If we have elements to modify, make the request
+       if ( self.length > 0 ) {
+               jQuery.ajax( {
+                       url: url,
+
+                       // If "type" variable is undefined, then "GET" method will be used.
+                       // Make value of this field explicit since
+                       // user can override it through ajaxSetup method
+                       type: type || "GET",
+                       dataType: "html",
+                       data: params
+               } ).done( function( responseText ) {
+
+                       // Save response for use in complete callback
+                       response = arguments;
+
+                       self.html( selector ?
+
+                               // If a selector was specified, locate the right elements in a dummy div
+                               // Exclude scripts to avoid IE 'Permission Denied' errors
+                               jQuery( "<div>" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :
+
+                               // Otherwise use the full result
+                               responseText );
+
+               // If the request succeeds, this function gets "data", "status", "jqXHR"
+               // but they are ignored because response was set above.
+               // If it fails, this function gets "jqXHR", "status", "error"
+               } ).always( callback && function( jqXHR, status ) {
+                       self.each( function() {
+                               callback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );
+                       } );
+               } );
+       }
+
+       return this;
+};
+
+
+
+
+// Attach a bunch of functions for handling common AJAX events
+jQuery.each( [
+       "ajaxStart",
+       "ajaxStop",
+       "ajaxComplete",
+       "ajaxError",
+       "ajaxSuccess",
+       "ajaxSend"
+], function( i, type ) {
+       jQuery.fn[ type ] = function( fn ) {
+               return this.on( type, fn );
+       };
+} );
+
+
+
+
+jQuery.expr.filters.animated = function( elem ) {
+       return jQuery.grep( jQuery.timers, function( fn ) {
+               return elem === fn.elem;
+       } ).length;
+};
+
+
+
+
+
+/**
+ * Gets a window from an element
+ */
+function getWindow( elem ) {
+       return jQuery.isWindow( elem ) ?
+               elem :
+               elem.nodeType === 9 ?
+                       elem.defaultView || elem.parentWindow :
+                       false;
+}
+
+jQuery.offset = {
+       setOffset: function( elem, options, i ) {
+               var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,
+                       position = jQuery.css( elem, "position" ),
+                       curElem = jQuery( elem ),
+                       props = {};
+
+               // set position first, in-case top/left are set even on static elem
+               if ( position === "static" ) {
+                       elem.style.position = "relative";
+               }
+
+               curOffset = curElem.offset();
+               curCSSTop = jQuery.css( elem, "top" );
+               curCSSLeft = jQuery.css( elem, "left" );
+               calculatePosition = ( position === "absolute" || position === "fixed" ) &&
+                       jQuery.inArray( "auto", [ curCSSTop, curCSSLeft ] ) > -1;
+
+               // need to be able to calculate position if either top or left
+               // is auto and position is either absolute or fixed
+               if ( calculatePosition ) {
+                       curPosition = curElem.position();
+                       curTop = curPosition.top;
+                       curLeft = curPosition.left;
+               } else {
+                       curTop = parseFloat( curCSSTop ) || 0;
+                       curLeft = parseFloat( curCSSLeft ) || 0;
+               }
+
+               if ( jQuery.isFunction( options ) ) {
+
+                       // Use jQuery.extend here to allow modification of coordinates argument (gh-1848)
+                       options = options.call( elem, i, jQuery.extend( {}, curOffset ) );
+               }
+
+               if ( options.top != null ) {
+                       props.top = ( options.top - curOffset.top ) + curTop;
+               }
+               if ( options.left != null ) {
+                       props.left = ( options.left - curOffset.left ) + curLeft;
+               }
+
+               if ( "using" in options ) {
+                       options.using.call( elem, props );
+               } else {
+                       curElem.css( props );
+               }
+       }
+};
+
+jQuery.fn.extend( {
+       offset: function( options ) {
+               if ( arguments.length ) {
+                       return options === undefined ?
+                               this :
+                               this.each( function( i ) {
+                                       jQuery.offset.setOffset( this, options, i );
+                               } );
+               }
+
+               var docElem, win,
+                       box = { top: 0, left: 0 },
+                       elem = this[ 0 ],
+                       doc = elem && elem.ownerDocument;
+
+               if ( !doc ) {
+                       return;
+               }
+
+               docElem = doc.documentElement;
+
+               // Make sure it's not a disconnected DOM node
+               if ( !jQuery.contains( docElem, elem ) ) {
+                       return box;
+               }
+
+               // If we don't have gBCR, just use 0,0 rather than error
+               // BlackBerry 5, iOS 3 (original iPhone)
+               if ( typeof elem.getBoundingClientRect !== "undefined" ) {
+                       box = elem.getBoundingClientRect();
+               }
+               win = getWindow( doc );
+               return {
+                       top: box.top  + ( win.pageYOffset || docElem.scrollTop )  - ( docElem.clientTop  || 0 ),
+                       left: box.left + ( win.pageXOffset || docElem.scrollLeft ) - ( docElem.clientLeft || 0 )
+               };
+       },
+
+       position: function() {
+               if ( !this[ 0 ] ) {
+                       return;
+               }
+
+               var offsetParent, offset,
+                       parentOffset = { top: 0, left: 0 },
+                       elem = this[ 0 ];
+
+               // Fixed elements are offset from window (parentOffset = {top:0, left: 0},
+               // because it is its only offset parent
+               if ( jQuery.css( elem, "position" ) === "fixed" ) {
+
+                       // we assume that getBoundingClientRect is available when computed position is fixed
+                       offset = elem.getBoundingClientRect();
+               } else {
+
+                       // Get *real* offsetParent
+                       offsetParent = this.offsetParent();
+
+                       // Get correct offsets
+                       offset = this.offset();
+                       if ( !jQuery.nodeName( offsetParent[ 0 ], "html" ) ) {
+                               parentOffset = offsetParent.offset();
+                       }
+
+                       // Add offsetParent borders
+                       parentOffset.top  += jQuery.css( offsetParent[ 0 ], "borderTopWidth", true );
+                       parentOffset.left += jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true );
+               }
+
+               // Subtract parent offsets and element margins
+               // note: when an element has margin: auto the offsetLeft and marginLeft
+               // are the same in Safari causing offset.left to incorrectly be 0
+               return {
+                       top:  offset.top  - parentOffset.top - jQuery.css( elem, "marginTop", true ),
+                       left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true )
+               };
+       },
+
+       offsetParent: function() {
+               return this.map( function() {
+                       var offsetParent = this.offsetParent;
+
+                       while ( offsetParent && ( !jQuery.nodeName( offsetParent, "html" ) &&
+                               jQuery.css( offsetParent, "position" ) === "static" ) ) {
+                               offsetParent = offsetParent.offsetParent;
+                       }
+                       return offsetParent || documentElement;
+               } );
+       }
+} );
+
+// Create scrollLeft and scrollTop methods
+jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) {
+       var top = /Y/.test( prop );
+
+       jQuery.fn[ method ] = function( val ) {
+               return access( this, function( elem, method, val ) {
+                       var win = getWindow( elem );
+
+                       if ( val === undefined ) {
+                               return win ? ( prop in win ) ? win[ prop ] :
+                                       win.document.documentElement[ method ] :
+                                       elem[ method ];
+                       }
+
+                       if ( win ) {
+                               win.scrollTo(
+                                       !top ? val : jQuery( win ).scrollLeft(),
+                                       top ? val : jQuery( win ).scrollTop()
+                               );
+
+                       } else {
+                               elem[ method ] = val;
+                       }
+               }, method, val, arguments.length, null );
+       };
+} );
+
+// Support: Safari<7-8+, Chrome<37-44+
+// Add the top/left cssHooks using jQuery.fn.position
+// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
+// getComputedStyle returns percent when specified for top/left/bottom/right
+// rather than make the css module depend on the offset module, we just check for it here
+jQuery.each( [ "top", "left" ], function( i, prop ) {
+       jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,
+               function( elem, computed ) {
+                       if ( computed ) {
+                               computed = curCSS( elem, prop );
+
+                               // if curCSS returns percentage, fallback to offset
+                               return rnumnonpx.test( computed ) ?
+                                       jQuery( elem ).position()[ prop ] + "px" :
+                                       computed;
+                       }
+               }
+       );
+} );
+
+
+// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
+jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
+       jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name },
+       function( defaultExtra, funcName ) {
+
+               // margin is only for outerHeight, outerWidth
+               jQuery.fn[ funcName ] = function( margin, value ) {
+                       var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),
+                               extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );
+
+                       return access( this, function( elem, type, value ) {
+                               var doc;
+
+                               if ( jQuery.isWindow( elem ) ) {
+
+                                       // As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there
+                                       // isn't a whole lot we can do. See pull request at this URL for discussion:
+                                       // https://github.com/jquery/jquery/pull/764
+                                       return elem.document.documentElement[ "client" + name ];
+                               }
+
+                               // Get document width or height
+                               if ( elem.nodeType === 9 ) {
+                                       doc = elem.documentElement;
+
+                                       // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],
+                                       // whichever is greatest
+                                       // unfortunately, this causes bug #3838 in IE6/8 only,
+                                       // but there is currently no good, small way to fix it.
+                                       return Math.max(
+                                               elem.body[ "scroll" + name ], doc[ "scroll" + name ],
+                                               elem.body[ "offset" + name ], doc[ "offset" + name ],
+                                               doc[ "client" + name ]
+                                       );
+                               }
+
+                               return value === undefined ?
+
+                                       // Get width or height on the element, requesting but not forcing parseFloat
+                                       jQuery.css( elem, type, extra ) :
+
+                                       // Set width or height on the element
+                                       jQuery.style( elem, type, value, extra );
+                       }, type, chainable ? margin : undefined, chainable, null );
+               };
+       } );
+} );
+
+
+jQuery.fn.extend( {
+
+       bind: function( types, data, fn ) {
+               return this.on( types, null, data, fn );
+       },
+       unbind: function( types, fn ) {
+               return this.off( types, null, fn );
+       },
+
+       delegate: function( selector, types, data, fn ) {
+               return this.on( types, selector, data, fn );
+       },
+       undelegate: function( selector, types, fn ) {
+
+               // ( namespace ) or ( selector, types [, fn] )
+               return arguments.length === 1 ?
+                       this.off( selector, "**" ) :
+                       this.off( types, selector || "**", fn );
+       }
+} );
+
+// The number of elements contained in the matched element set
+jQuery.fn.size = function() {
+       return this.length;
+};
+
+jQuery.fn.andSelf = jQuery.fn.addBack;
+
+
+
+
+// Register as a named AMD module, since jQuery can be concatenated with other
+// files that may use define, but not via a proper concatenation script that
+// understands anonymous AMD modules. A named AMD is safest and most robust
+// way to register. Lowercase jquery is used because AMD module names are
+// derived from file names, and jQuery is normally delivered in a lowercase
+// file name. Do this after creating the global so that if an AMD module wants
+// to call noConflict to hide this version of jQuery, it will work.
+
+// Note that for maximum portability, libraries that are not jQuery should
+// declare themselves as anonymous modules, and avoid setting a global if an
+// AMD loader is present. jQuery is a special case. For more information, see
+// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon
+
+if ( typeof define === "function" && define.amd ) {
+       define( "jquery", [], function() {
+               return jQuery;
+       } );
+}
+
+
+
+var
+
+       // Map over jQuery in case of overwrite
+       _jQuery = window.jQuery,
+
+       // Map over the $ in case of overwrite
+       _$ = window.$;
+
+jQuery.noConflict = function( deep ) {
+       if ( window.$ === jQuery ) {
+               window.$ = _$;
+       }
+
+       if ( deep && window.jQuery === jQuery ) {
+               window.jQuery = _jQuery;
+       }
+
+       return jQuery;
+};
+
+// Expose jQuery and $ identifiers, even in
+// AMD (#7102#comment:10, https://github.com/jquery/jquery/pull/557)
+// and CommonJS for browser emulators (#13566)
+if ( !noGlobal ) {
+       window.jQuery = window.$ = jQuery;
+}
+
+return jQuery;
+}));
diff --git a/htdocs/cgi-bin/wsrc/jquery.poshytip.js b/htdocs/cgi-bin/wsrc/jquery.poshytip.js
new file mode 100644 (file)
index 0000000..019e876
--- /dev/null
@@ -0,0 +1,505 @@
+/*
+ * Poshy Tip jQuery plugin v1.2
+ * http://vadikom.com/tools/poshy-tip-jquery-plugin-for-stylish-tooltips/
+ * Copyright 2010-2013, Vasil Dinkov, http://vadikom.com/
+ */
+
+(function($) {
+
+       var tips = [],
+               reBgImage = /^url\(["']?([^"'\)]*)["']?\);?$/i,
+               rePNG = /\.png$/i,
+               ie6 = !!window.createPopup && document.documentElement.currentStyle.minWidth == 'undefined';
+
+       // make sure the tips' position is updated on resize
+       function handleWindowResize() {
+               $.each(tips, function() {
+                       this.refresh(true);
+               });
+       }
+       $(window).resize(handleWindowResize);
+
+       $.Poshytip = function(elm, options) {
+               this.$elm = $(elm);
+               this.opts = $.extend({}, $.fn.poshytip.defaults, options);
+               this.$tip = $(['<div class="',this.opts.className,'">',
+                               '<div class="tip-inner tip-bg-image"></div>',
+                               '<div class="tip-arrow tip-arrow-top tip-arrow-right tip-arrow-bottom tip-arrow-left"></div>',
+                       '</div>'].join('')).appendTo(document.body);
+               this.$arrow = this.$tip.find('div.tip-arrow');
+               this.$inner = this.$tip.find('div.tip-inner');
+               this.disabled = false;
+               this.content = null;
+               this.init();
+       };
+
+       $.Poshytip.prototype = {
+               init: function() {
+                       tips.push(this);
+
+                       // save the original title and a reference to the Poshytip object
+                       var title = this.$elm.attr('title');
+                       this.$elm.data('title.poshytip', title !== undefined ? title : null)
+                               .data('poshytip', this);
+
+                       // hook element events
+                       if (this.opts.showOn != 'none') {
+                               this.$elm.bind({
+                                       'mouseenter.poshytip': $.proxy(this.mouseenter, this),
+                                       'mouseleave.poshytip': $.proxy(this.mouseleave, this)
+                               });
+                               switch (this.opts.showOn) {
+                                       case 'hover':
+                                               if (this.opts.alignTo == 'cursor')
+                                                       this.$elm.bind('mousemove.poshytip', $.proxy(this.mousemove, this));
+                                               if (this.opts.allowTipHover)
+                                                       this.$tip.hover($.proxy(this.clearTimeouts, this), $.proxy(this.mouseleave, this));
+                                               break;
+                                       case 'focus':
+                                               this.$elm.bind({
+                                                       'focus.poshytip': $.proxy(this.showDelayed, this),
+                                                       'blur.poshytip': $.proxy(this.hideDelayed, this)
+                                               });
+                                               break;
+                               }
+                       }
+               },
+               mouseenter: function(e) {
+                       if (this.disabled)
+                               return true;
+
+                       this.$elm.attr('title', '');
+                       if (this.opts.showOn == 'focus')
+                               return true;
+
+                       this.showDelayed();
+               },
+               mouseleave: function(e) {
+                       if (this.disabled || this.asyncAnimating && (this.$tip[0] === e.relatedTarget || jQuery.contains(this.$tip[0], e.relatedTarget)))
+                               return true;
+
+                       if (!this.$tip.data('active')) {
+                               var title = this.$elm.data('title.poshytip');
+                               if (title !== null)
+                                       this.$elm.attr('title', title);
+                       }
+                       if (this.opts.showOn == 'focus')
+                               return true;
+
+                       this.hideDelayed();
+               },
+               mousemove: function(e) {
+                       if (this.disabled)
+                               return true;
+
+                       this.eventX = e.pageX;
+                       this.eventY = e.pageY;
+                       if (this.opts.followCursor && this.$tip.data('active')) {
+                               this.calcPos();
+                               this.$tip.css({left: this.pos.l, top: this.pos.t});
+                               if (this.pos.arrow)
+                                       this.$arrow[0].className = 'tip-arrow tip-arrow-' + this.pos.arrow;
+                       }
+               },
+               show: function() {
+                       if (this.disabled || this.$tip.data('active'))
+                               return;
+
+                       this.reset();
+                       this.update();
+
+                       // don't proceed if we didn't get any content in update() (e.g. the element has an empty title attribute)
+                       if (!this.content)
+                               return;
+
+                       this.display();
+                       if (this.opts.timeOnScreen)
+                               this.hideDelayed(this.opts.timeOnScreen);
+               },
+               showDelayed: function(timeout) {
+                       this.clearTimeouts();
+                       this.showTimeout = setTimeout($.proxy(this.show, this), typeof timeout == 'number' ? timeout : this.opts.showTimeout);
+               },
+               hide: function() {
+                       if (this.disabled || !this.$tip.data('active'))
+                               return;
+
+                       this.display(true);
+               },
+               hideDelayed: function(timeout) {
+                       this.clearTimeouts();
+                       this.hideTimeout = setTimeout($.proxy(this.hide, this), typeof timeout == 'number' ? timeout : this.opts.hideTimeout);
+               },
+               reset: function() {
+                       this.$tip.queue([]).detach().css('visibility', 'hidden').data('active', false);
+                       this.$inner.find('*').poshytip('hide');
+                       if (this.opts.fade)
+                               this.$tip.css('opacity', this.opacity);
+                       this.$arrow[0].className = 'tip-arrow tip-arrow-top tip-arrow-right tip-arrow-bottom tip-arrow-left';
+                       this.asyncAnimating = false;
+               },
+               update: function(content, dontOverwriteOption) {
+                       if (this.disabled)
+                               return;
+
+                       var async = content !== undefined;
+                       if (async) {
+                               if (!dontOverwriteOption)
+                                       this.opts.content = content;
+                               if (!this.$tip.data('active'))
+                                       return;
+                       } else {
+                               content = this.opts.content;
+                       }
+
+                       // update content only if it has been changed since last time
+                       var self = this,
+                               newContent = typeof content == 'function' ?
+                                       content.call(this.$elm[0], function(newContent) {
+                                               self.update(newContent);
+                                       }) :
+                                       content == '[title]' ? this.$elm.data('title.poshytip') : content;
+                       if (this.content !== newContent) {
+                               this.$inner.empty().append(newContent);
+                               this.content = newContent;
+                       }
+
+                       this.refresh(async);
+               },
+               refresh: function(async) {
+                       if (this.disabled)
+                               return;
+
+                       if (async) {
+                               if (!this.$tip.data('active'))
+                                       return;
+                               // save current position as we will need to animate
+                               var currPos = {left: this.$tip.css('left'), top: this.$tip.css('top')};
+                       }
+
+                       // reset position to avoid text wrapping, etc.
+                       this.$tip.css({left: 0, top: 0}).appendTo(document.body);
+
+                       // save default opacity
+                       if (this.opacity === undefined)
+                               this.opacity = this.$tip.css('opacity');
+
+                       // check for images - this code is here (i.e. executed each time we show the tip and not on init) due to some browser inconsistencies
+                       var bgImage = this.$tip.css('background-image').match(reBgImage),
+                               arrow = this.$arrow.css('background-image').match(reBgImage);
+
+                       if (bgImage) {
+                               var bgImagePNG = rePNG.test(bgImage[1]);
+                               // fallback to background-color/padding/border in IE6 if a PNG is used
+                               if (ie6 && bgImagePNG) {
+                                       this.$tip.css('background-image', 'none');
+                                       this.$inner.css({margin: 0, border: 0, padding: 0});
+                                       bgImage = bgImagePNG = false;
+                               } else {
+                                       this.$tip.prepend('<table class="tip-table" border="0" cellpadding="0" cellspacing="0"><tr><td class="tip-top tip-bg-image" colspan="2"><span></span></td><td class="tip-right tip-bg-image" rowspan="2"><span></span></td></tr><tr><td class="tip-left tip-bg-image" rowspan="2"><span></span></td><td></td></tr><tr><td class="tip-bottom tip-bg-image" colspan="2"><span></span></td></tr></table>')
+                                               .css({border: 0, padding: 0, 'background-image': 'none', 'background-color': 'transparent'})
+                                               .find('.tip-bg-image').css('background-image', 'url("' + bgImage[1] +'")').end()
+                                               .find('td').eq(3).append(this.$inner);
+                               }
+                               // disable fade effect in IE due to Alpha filter + translucent PNG issue
+                               if (bgImagePNG && !$.support.opacity)
+                                       this.opts.fade = false;
+                       }
+                       // IE arrow fixes
+                       if (arrow && !$.support.opacity) {
+                               // disable arrow in IE6 if using a PNG
+                               if (ie6 && rePNG.test(arrow[1])) {
+                                       arrow = false;
+                                       this.$arrow.css('background-image', 'none');
+                               }
+                               // disable fade effect in IE due to Alpha filter + translucent PNG issue
+                               this.opts.fade = false;
+                       }
+
+                       var $table = this.$tip.find('> table.tip-table');
+                       if (ie6) {
+                               // fix min/max-width in IE6
+                               this.$tip[0].style.width = '';
+                               $table.width('auto').find('td').eq(3).width('auto');
+                               var tipW = this.$tip.width(),
+                                       minW = parseInt(this.$tip.css('min-width')),
+                                       maxW = parseInt(this.$tip.css('max-width'));
+                               if (!isNaN(minW) && tipW < minW)
+                                       tipW = minW;
+                               else if (!isNaN(maxW) && tipW > maxW)
+                                       tipW = maxW;
+                               this.$tip.add($table).width(tipW).eq(0).find('td').eq(3).width('100%');
+                       } else if ($table[0]) {
+                               // fix the table width if we are using a background image
+                               // IE9, FF4 use float numbers for width/height so use getComputedStyle for them to avoid text wrapping
+                               // for details look at: http://vadikom.com/dailies/offsetwidth-offsetheight-useless-in-ie9-firefox4/
+                               $table.width('auto').find('td').eq(3).width('auto').end().end().width(document.defaultView && document.defaultView.getComputedStyle && parseFloat(document.defaultView.getComputedStyle(this.$tip[0], null).width) || this.$tip.width()).find('td').eq(3).width('100%');
+                       }
+                       this.tipOuterW = this.$tip.outerWidth();
+                       this.tipOuterH = this.$tip.outerHeight();
+
+                       this.calcPos();
+
+                       // position and show the arrow image
+                       if (arrow && this.pos.arrow) {
+                               this.$arrow[0].className = 'tip-arrow tip-arrow-' + this.pos.arrow;
+                               this.$arrow.css('visibility', 'inherit');
+                       }
+
+                       if (async && this.opts.refreshAniDuration) {
+                               this.asyncAnimating = true;
+                               var self = this;
+                               this.$tip.css(currPos).animate({left: this.pos.l, top: this.pos.t}, this.opts.refreshAniDuration, function() { self.asyncAnimating = false; });
+                       } else {
+                               this.$tip.css({left: this.pos.l, top: this.pos.t});
+                       }
+               },
+               display: function(hide) {
+                       var active = this.$tip.data('active');
+                       if (active && !hide || !active && hide)
+                               return;
+
+                       this.$tip.stop();
+                       if ((this.opts.slide && this.pos.arrow || this.opts.fade) && (hide && this.opts.hideAniDuration || !hide && this.opts.showAniDuration)) {
+                               var from = {}, to = {};
+                               // this.pos.arrow is only undefined when alignX == alignY == 'center' and we don't need to slide in that rare case
+                               if (this.opts.slide && this.pos.arrow) {
+                                       var prop, arr;
+                                       if (this.pos.arrow == 'bottom' || this.pos.arrow == 'top') {
+                                               prop = 'top';
+                                               arr = 'bottom';
+                                       } else {
+                                               prop = 'left';
+                                               arr = 'right';
+                                       }
+                                       var val = parseInt(this.$tip.css(prop));
+                                       from[prop] = val + (hide ? 0 : (this.pos.arrow == arr ? -this.opts.slideOffset : this.opts.slideOffset));
+                                       to[prop] = val + (hide ? (this.pos.arrow == arr ? this.opts.slideOffset : -this.opts.slideOffset) : 0) + 'px';
+                               }
+                               if (this.opts.fade) {
+                                       from.opacity = hide ? this.$tip.css('opacity') : 0;
+                                       to.opacity = hide ? 0 : this.opacity;
+                               }
+                               this.$tip.css(from).animate(to, this.opts[hide ? 'hideAniDuration' : 'showAniDuration']);
+                       }
+                       hide ? this.$tip.queue($.proxy(this.reset, this)) : this.$tip.css('visibility', 'inherit');
+                       if (active) {
+                               var title = this.$elm.data('title.poshytip');
+                               if (title !== null)
+                                       this.$elm.attr('title', title);
+                       }
+                       this.$tip.data('active', !active);
+               },
+               disable: function() {
+                       this.reset();
+                       this.disabled = true;
+               },
+               enable: function() {
+                       this.disabled = false;
+               },
+               destroy: function() {
+                       this.reset();
+                       this.$tip.remove();
+                       delete this.$tip;
+                       this.content = null;
+                       this.$elm.unbind('.poshytip').removeData('title.poshytip').removeData('poshytip');
+                       tips.splice($.inArray(this, tips), 1);
+               },
+               clearTimeouts: function() {
+                       if (this.showTimeout) {
+                               clearTimeout(this.showTimeout);
+                               this.showTimeout = 0;
+                       }
+                       if (this.hideTimeout) {
+                               clearTimeout(this.hideTimeout);
+                               this.hideTimeout = 0;
+                       }
+               },
+               calcPos: function() {
+                       var pos = {l: 0, t: 0, arrow: ''},
+                               $win = $(window),
+                               win = {
+                                       l: $win.scrollLeft(),
+                                       t: $win.scrollTop(),
+                                       w: $win.width(),
+                                       h: $win.height()
+                               }, xL, xC, xR, yT, yC, yB;
+                       if (this.opts.alignTo == 'cursor') {
+                               xL = xC = xR = this.eventX;
+                               yT = yC = yB = this.eventY;
+                       } else { // this.opts.alignTo == 'target'
+                               var elmOffset = this.$elm.offset(),
+                                       elm = {
+                                               l: elmOffset.left,
+                                               t: elmOffset.top,
+                                               w: this.$elm.outerWidth(),
+                                               h: this.$elm.outerHeight()
+                                       };
+                               xL = elm.l + (this.opts.alignX != 'inner-right' ? 0 : elm.w);   // left edge
+                               xC = xL + Math.floor(elm.w / 2);                                // h center
+                               xR = xL + (this.opts.alignX != 'inner-left' ? elm.w : 0);       // right edge
+                               yT = elm.t + (this.opts.alignY != 'inner-bottom' ? 0 : elm.h);  // top edge
+                               yC = yT + Math.floor(elm.h / 2);                                // v center
+                               yB = yT + (this.opts.alignY != 'inner-top' ? elm.h : 0);        // bottom edge
+                       }
+
+                       // keep in viewport and calc arrow position
+                       switch (this.opts.alignX) {
+                               case 'right':
+                               case 'inner-left':
+                                       pos.l = xR + this.opts.offsetX;
+                                       if (this.opts.keepInViewport && pos.l + this.tipOuterW > win.l + win.w)
+                                               pos.l = win.l + win.w - this.tipOuterW;
+                                       if (this.opts.alignX == 'right' || this.opts.alignY == 'center')
+                                               pos.arrow = 'left';
+                                       break;
+                               case 'center':
+                                       pos.l = xC - Math.floor(this.tipOuterW / 2);
+                                       if (this.opts.keepInViewport) {
+                                               if (pos.l + this.tipOuterW > win.l + win.w)
+                                                       pos.l = win.l + win.w - this.tipOuterW;
+                                               else if (pos.l < win.l)
+                                                       pos.l = win.l;
+                                       }
+                                       break;
+                               default: // 'left' || 'inner-right'
+                                       pos.l = xL - this.tipOuterW - this.opts.offsetX;
+                                       if (this.opts.keepInViewport && pos.l < win.l)
+                                               pos.l = win.l;
+                                       if (this.opts.alignX == 'left' || this.opts.alignY == 'center')
+                                               pos.arrow = 'right';
+                       }
+                       switch (this.opts.alignY) {
+                               case 'bottom':
+                               case 'inner-top':
+                                       pos.t = yB + this.opts.offsetY;
+                                       // 'left' and 'right' need priority for 'target'
+                                       if (!pos.arrow || this.opts.alignTo == 'cursor')
+                                               pos.arrow = 'top';
+                                       if (this.opts.keepInViewport && pos.t + this.tipOuterH > win.t + win.h) {
+                                               pos.t = yT - this.tipOuterH - this.opts.offsetY;
+                                               if (pos.arrow == 'top')
+                                                       pos.arrow = 'bottom';
+                                       }
+                                       break;
+                               case 'center':
+                                       pos.t = yC - Math.floor(this.tipOuterH / 2);
+                                       if (this.opts.keepInViewport) {
+                                               if (pos.t + this.tipOuterH > win.t + win.h)
+                                                       pos.t = win.t + win.h - this.tipOuterH;
+                                               else if (pos.t < win.t)
+                                                       pos.t = win.t;
+                                       }
+                                       break;
+                               default: // 'top' || 'inner-bottom'
+                                       pos.t = yT - this.tipOuterH - this.opts.offsetY;
+                                       // 'left' and 'right' need priority for 'target'
+                                       if (!pos.arrow || this.opts.alignTo == 'cursor')
+                                               pos.arrow = 'bottom';
+                                       if (this.opts.keepInViewport && pos.t < win.t) {
+                                               pos.t = yB + this.opts.offsetY;
+                                               if (pos.arrow == 'bottom')
+                                                       pos.arrow = 'top';
+                                       }
+                       }
+                       this.pos = pos;
+               }
+       };
+
+       $.fn.poshytip = function(options) {
+               if (typeof options == 'string') {
+                       var args = arguments,
+                               method = options;
+                       Array.prototype.shift.call(args);
+                       // unhook live events if 'destroy' is called
+                       if (method == 'destroy') {
+                               this.die ?
+                                       this.die('mouseenter.poshytip').die('focus.poshytip') :
+                                       $(document).undelegate(this.selector, 'mouseenter.poshytip').undelegate(this.selector, 'focus.poshytip');
+                       }
+                       return this.each(function() {
+                               var poshytip = $(this).data('poshytip');
+                               if (poshytip && poshytip[method])
+                                       poshytip[method].apply(poshytip, args);
+                       });
+               }
+
+               var opts = $.extend({}, $.fn.poshytip.defaults, options);
+
+               // generate CSS for this tip class if not already generated
+               if (!$('#poshytip-css-' + opts.className)[0])
+                       $(['<style id="poshytip-css-',opts.className,'" type="text/css">',
+                               'div.',opts.className,'{visibility:hidden;position:absolute;top:0;left:0;}',
+                               'div.',opts.className,' table.tip-table, div.',opts.className,' table.tip-table td{margin:0;font-family:inherit;font-size:inherit;font-weight:inherit;font-style:inherit;font-variant:inherit;vertical-align:middle;}',
+                               'div.',opts.className,' td.tip-bg-image span{display:block;font:1px/1px sans-serif;height:',opts.bgImageFrameSize,'px;width:',opts.bgImageFrameSize,'px;overflow:hidden;}',
+                               'div.',opts.className,' td.tip-right{background-position:100% 0;}',
+                               'div.',opts.className,' td.tip-bottom{background-position:100% 100%;}',
+                               'div.',opts.className,' td.tip-left{background-position:0 100%;}',
+                               'div.',opts.className,' div.tip-inner{background-position:-',opts.bgImageFrameSize,'px -',opts.bgImageFrameSize,'px;}',
+                               'div.',opts.className,' div.tip-arrow{visibility:hidden;position:absolute;overflow:hidden;font:1px/1px sans-serif;}',
+                       '</style>'].join('')).appendTo('head');
+
+               // check if we need to hook live events
+               if (opts.liveEvents && opts.showOn != 'none') {
+                       var handler,
+                               deadOpts = $.extend({}, opts, { liveEvents: false });
+                       switch (opts.showOn) {
+                               case 'hover':
+                                       handler = function() {
+                                               var $this = $(this);
+                                               if (!$this.data('poshytip'))
+                                                       $this.poshytip(deadOpts).poshytip('mouseenter');
+                                       };
+                                       // support 1.4.2+ & 1.9+
+                                       this.live ?
+                                               this.live('mouseenter.poshytip', handler) :
+                                               $(document).delegate(this.selector, 'mouseenter.poshytip', handler);
+                                       break;
+                               case 'focus':
+                                       handler = function() {
+                                               var $this = $(this);
+                                               if (!$this.data('poshytip'))
+                                                       $this.poshytip(deadOpts).poshytip('showDelayed');
+                                       };
+                                       this.live ?
+                                               this.live('focus.poshytip', handler) :
+                                               $(document).delegate(this.selector, 'focus.poshytip', handler);
+                                       break;
+                       }
+                       return this;
+               }
+
+               return this.each(function() {
+                       new $.Poshytip(this, opts);
+               });
+       }
+
+       // default settings
+       $.fn.poshytip.defaults = {
+               content:                '[title]',      // content to display ('[title]', 'string', element, function(updateCallback){...}, jQuery)
+               className:              'tip-yellow',   // class for the tips
+               bgImageFrameSize:       10,             // size in pixels for the background-image (if set in CSS) frame around the inner content of the tip
+               showTimeout:            500,            // timeout before showing the tip (in milliseconds 1000 == 1 second)
+               hideTimeout:            100,            // timeout before hiding the tip
+               timeOnScreen:           0,              // timeout before automatically hiding the tip after showing it (set to > 0 in order to activate)
+               showOn:                 'hover',        // handler for showing the tip ('hover', 'focus', 'none') - use 'none' to trigger it manually
+               liveEvents:             false,          // use live events
+               alignTo:                'cursor',       // align/position the tip relative to ('cursor', 'target')
+               alignX:                 'right',        // horizontal alignment for the tip relative to the mouse cursor or the target element
+                                                       // ('right', 'center', 'left', 'inner-left', 'inner-right') - 'inner-*' matter if alignTo:'target'
+               alignY:                 'top',          // vertical alignment for the tip relative to the mouse cursor or the target element
+                                                       // ('bottom', 'center', 'top', 'inner-bottom', 'inner-top') - 'inner-*' matter if alignTo:'target'
+               offsetX:                -22,            // offset X pixels from the default position - doesn't matter if alignX:'center'
+               offsetY:                18,             // offset Y pixels from the default position - doesn't matter if alignY:'center'
+               keepInViewport:         true,           // reposition the tooltip if needed to make sure it always appears inside the viewport
+               allowTipHover:          true,           // allow hovering the tip without hiding it onmouseout of the target - matters only if showOn:'hover'
+               followCursor:           false,          // if the tip should follow the cursor - matters only if showOn:'hover' and alignTo:'cursor'
+               fade:                   true,           // use fade animation
+               slide:                  true,           // use slide animation
+               slideOffset:            8,              // slide animation offset
+               showAniDuration:        300,            // show animation duration - set to 0 if you don't want show animation
+               hideAniDuration:        300,            // hide animation duration - set to 0 if you don't want hide animation
+               refreshAniDuration:     200             // refresh animation duration - set to 0 if you don't want animation when updating the tooltip asynchronously
+       };
+
+})(jQuery);
\ No newline at end of file
diff --git a/htdocs/cgi-bin/wsrc/jquery.sweet-dropdown.css b/htdocs/cgi-bin/wsrc/jquery.sweet-dropdown.css
new file mode 100644 (file)
index 0000000..17b9374
--- /dev/null
@@ -0,0 +1,413 @@
+.dropdown-menu {
+ position:absolute;
+ z-index:9999999;
+ display:none;
+ opacity:0;
+ top:0;
+ left:0;
+ -webkit-transition:opacity 0.2s, -webkit-transform 0.2s;
+ transition:opacity 0.2s, transform 0.2s;
+ -webkit-transform:translateY(-20px) scale(0.93);
+ transform:translateY(-20px) scale(0.93);
+ border-radius:3px
+}
+.dropdown-menu.dropdown-opened {
+ opacity:1;
+ -webkit-transform:none !important;
+ transform:none !important
+}
+.dropdown-menu.fixed {
+ position:fixed
+}
+.dropdown-menu.dropdown-anchor-left-top,
+.dropdown-menu.dropdown-anchor-left-center,
+.dropdown-menu.dropdown-anchor-left-bottom {
+ -webkit-transform:translateX(-20px) scale(0.93);
+ transform:translateX(-20px) scale(0.93)
+}
+.dropdown-menu.dropdown-anchor-right-top,
+.dropdown-menu.dropdown-anchor-right-center,
+.dropdown-menu.dropdown-anchor-right-bottom {
+ -webkit-transform:translateX(20px) scale(0.93);
+ transform:translateX(20px) scale(0.93)
+}
+.dropdown-menu .dropdown-anchor {
+ border:7px solid #2fa6ca
+}
+.dropdown-menu .dropdown-anchor,
+.dropdown-menu .dropdown-anchor::after {
+ position:absolute;
+ content:'';
+ display:inline-block
+}
+.dropdown-menu .dropdown-anchor::after {
+ before-border:6px solid #fff
+}
+.dropdown-menu.dark .dropdown-anchor,
+.dropdown-menu.dark .dropdown-anchor::after {
+ border-color:#32363F
+}
+.dropdown-menu.grey-anchor .dropdown-anchor,
+.dropdown-menu.grey-anchor .dropdown-anchor::after {
+ border-color:#f6f6f6
+}
+.dropdown-menu.accent-anchor .dropdown-anchor,
+.dropdown-menu.accent-anchor .dropdown-anchor::after {
+ border-color:#F57C00
+}
+.dropdown-menu.dropdown-anchor-top-left:not(.dropdown-overlay-trigger),
+.dropdown-menu.dropdown-anchor-top-center:not(.dropdown-overlay-trigger),
+.dropdown-menu.dropdown-anchor-top-right:not(.dropdown-overlay-trigger) {
+ margin-top:10px
+}
+.dropdown-menu.dropdown-anchor-top-left .dropdown-anchor,
+.dropdown-menu.dropdown-anchor-top-center .dropdown-anchor,
+.dropdown-menu.dropdown-anchor-top-right .dropdown-anchor {
+ border-top-color:transparent;
+ border-right-color:transparent;
+ border-left-color:transparent;
+ top:-14px
+}
+.dropdown-menu.dropdown-anchor-top-left .dropdown-anchor::after,
+.dropdown-menu.dropdown-anchor-top-center .dropdown-anchor::after,
+.dropdown-menu.dropdown-anchor-top-right .dropdown-anchor::after {
+ border-top-color:transparent;
+ border-right-color:transparent;
+ border-left-color:transparent;
+ margin-top:-5px;
+ margin-left:-6px
+}
+.dropdown-menu.dropdown-anchor-top-left.dropdown-anchor-top-left .dropdown-anchor,
+.dropdown-menu.dropdown-anchor-top-center.dropdown-anchor-top-left .dropdown-anchor,
+.dropdown-menu.dropdown-anchor-top-right.dropdown-anchor-top-left .dropdown-anchor {
+ left:15px
+}
+.dropdown-menu.dropdown-anchor-top-left.dropdown-anchor-top-center .dropdown-anchor,
+.dropdown-menu.dropdown-anchor-top-center.dropdown-anchor-top-center .dropdown-anchor,
+.dropdown-menu.dropdown-anchor-top-right.dropdown-anchor-top-center .dropdown-anchor {
+ left:calc(50% - 7px)
+}
+.dropdown-menu.dropdown-anchor-top-left.dropdown-anchor-top-right .dropdown-anchor,
+.dropdown-menu.dropdown-anchor-top-center.dropdown-anchor-top-right .dropdown-anchor,
+.dropdown-menu.dropdown-anchor-top-right.dropdown-anchor-top-right .dropdown-anchor {
+ left:calc(100% - 28px)
+}
+.dropdown-menu.dropdown-anchor-right-top:not(.dropdown-overlay-trigger),
+.dropdown-menu.dropdown-anchor-right-center:not(.dropdown-overlay-trigger),
+.dropdown-menu.dropdown-anchor-right-bottom:not(.dropdown-overlay-trigger) {
+ margin-left:-10px
+}
+.dropdown-menu.dropdown-anchor-right-top .dropdown-anchor,
+.dropdown-menu.dropdown-anchor-right-center .dropdown-anchor,
+.dropdown-menu.dropdown-anchor-right-bottom .dropdown-anchor {
+ border-top-color:transparent;
+ border-right-color:transparent;
+ border-bottom-color:transparent;
+ left:100%
+}
+.dropdown-menu.dropdown-anchor-right-top .dropdown-anchor::after,
+.dropdown-menu.dropdown-anchor-right-center .dropdown-anchor::after,
+.dropdown-menu.dropdown-anchor-right-bottom .dropdown-anchor::after {
+ border-top-color:transparent;
+ border-right-color:transparent;
+ border-bottom-color:transparent;
+ margin-left:-7px;
+ margin-top:-6px
+}
+.dropdown-menu.dropdown-anchor-right-top.dropdown-anchor-right-top .dropdown-anchor,
+.dropdown-menu.dropdown-anchor-right-center.dropdown-anchor-right-top .dropdown-anchor,
+.dropdown-menu.dropdown-anchor-right-bottom.dropdown-anchor-right-top .dropdown-anchor {
+ top:11px
+}
+.dropdown-menu.dropdown-anchor-right-top.dropdown-anchor-right-center .dropdown-anchor,
+.dropdown-menu.dropdown-anchor-right-center.dropdown-anchor-right-center .dropdown-anchor,
+.dropdown-menu.dropdown-anchor-right-bottom.dropdown-anchor-right-center .dropdown-anchor {
+ top:calc(50% - 7px)
+}
+.dropdown-menu.dropdown-anchor-right-top.dropdown-anchor-right-bottom .dropdown-anchor,
+.dropdown-menu.dropdown-anchor-right-center.dropdown-anchor-right-bottom .dropdown-anchor,
+.dropdown-menu.dropdown-anchor-right-bottom.dropdown-anchor-right-bottom .dropdown-anchor {
+ top:calc(100% - 26px)
+}
+.dropdown-menu.dropdown-anchor-bottom-left:not(.dropdown-overlay-trigger),
+.dropdown-menu.dropdown-anchor-bottom-center:not(.dropdown-overlay-trigger),
+.dropdown-menu.dropdown-anchor-bottom-right:not(.dropdown-overlay-trigger) {
+ margin-top:-10px
+}
+.dropdown-menu.dropdown-anchor-bottom-left .dropdown-anchor,
+.dropdown-menu.dropdown-anchor-bottom-center .dropdown-anchor,
+.dropdown-menu.dropdown-anchor-bottom-right .dropdown-anchor {
+ border-right-color:transparent;
+ border-bottom-color:transparent;
+ border-left-color:transparent;
+ top:100%
+}
+.dropdown-menu.dropdown-anchor-bottom-left .dropdown-anchor::after,
+.dropdown-menu.dropdown-anchor-bottom-center .dropdown-anchor::after,
+.dropdown-menu.dropdown-anchor-bottom-right .dropdown-anchor::after {
+ border-right-color:transparent;
+ border-bottom-color:transparent;
+ border-left-color:transparent;
+ margin-top:-7px;
+ margin-left:-6px
+}
+.dropdown-menu.dropdown-anchor-bottom-left.dropdown-anchor-bottom-left .dropdown-anchor,
+.dropdown-menu.dropdown-anchor-bottom-center.dropdown-anchor-bottom-left .dropdown-anchor,
+.dropdown-menu.dropdown-anchor-bottom-right.dropdown-anchor-bottom-left .dropdown-anchor {
+ left:15px
+}
+.dropdown-menu.dropdown-anchor-bottom-left.dropdown-anchor-bottom-center .dropdown-anchor,
+.dropdown-menu.dropdown-anchor-bottom-center.dropdown-anchor-bottom-center .dropdown-anchor,
+.dropdown-menu.dropdown-anchor-bottom-right.dropdown-anchor-bottom-center .dropdown-anchor {
+ left:calc(50% - 7px)
+}
+.dropdown-menu.dropdown-anchor-bottom-left.dropdown-anchor-bottom-right .dropdown-anchor,
+.dropdown-menu.dropdown-anchor-bottom-center.dropdown-anchor-bottom-right .dropdown-anchor,
+.dropdown-menu.dropdown-anchor-bottom-right.dropdown-anchor-bottom-right .dropdown-anchor {
+ left:calc(100% - 28px)
+}
+.dropdown-menu.dropdown-anchor-left-top:not(.dropdown-overlay-trigger),
+.dropdown-menu.dropdown-anchor-left-center:not(.dropdown-overlay-trigger),
+.dropdown-menu.dropdown-anchor-left-bottom:not(.dropdown-overlay-trigger) {
+ margin-left:10px
+}
+.dropdown-menu.dropdown-anchor-left-top .dropdown-anchor,
+.dropdown-menu.dropdown-anchor-left-center .dropdown-anchor,
+.dropdown-menu.dropdown-anchor-left-bottom .dropdown-anchor {
+ border-top-color:transparent;
+ border-bottom-color:transparent;
+ border-left-color:transparent;
+ left:-14px
+}
+.dropdown-menu.dropdown-anchor-left-top .dropdown-anchor::after,
+.dropdown-menu.dropdown-anchor-left-center .dropdown-anchor::after,
+.dropdown-menu.dropdown-anchor-left-bottom .dropdown-anchor::after {
+ border-top-color:transparent;
+ border-bottom-color:transparent;
+ border-left-color:transparent;
+ margin-left:-5px;
+ margin-top:-6px
+}
+.dropdown-menu.dropdown-anchor-left-top.dropdown-anchor-left-top .dropdown-anchor,
+.dropdown-menu.dropdown-anchor-left-center.dropdown-anchor-left-top .dropdown-anchor,
+.dropdown-menu.dropdown-anchor-left-bottom.dropdown-anchor-left-top .dropdown-anchor {
+ top:11px
+}
+.dropdown-menu.dropdown-anchor-left-top.dropdown-anchor-left-center .dropdown-anchor,
+.dropdown-menu.dropdown-anchor-left-center.dropdown-anchor-left-center .dropdown-anchor,
+.dropdown-menu.dropdown-anchor-left-bottom.dropdown-anchor-left-center .dropdown-anchor {
+ top:calc(50% - 7px)
+}
+.dropdown-menu.dropdown-anchor-left-top.dropdown-anchor-left-bottom .dropdown-anchor,
+.dropdown-menu.dropdown-anchor-left-center.dropdown-anchor-left-bottom .dropdown-anchor,
+.dropdown-menu.dropdown-anchor-left-bottom.dropdown-anchor-left-bottom .dropdown-anchor {
+ top:calc(100% - 26px)
+}
+.dropdown-menu.max-height ul {
+ max-height:184px
+}
+.dropdown-menu table td{
+    color:#555;
+    background: #e4f1fb url("images/ui-bg_glass_100_e4f1fb_1x400.png") 50% 50% repeat-x;
+    border-radius: 2pt;
+    padding:0px;
+    margin:2px;
+     text-align: left;
+ vertical-align: text-top;
+}
+.dropdown-menu tr td ul {
+ min-width:140px;
+ list-style:none;
+ background: #d7ebf9 url("images/ui-bg_glass_80_d7ebf9_1x400.png") 50% 50% repeat-x;
+ box-shadow:0 3px 5px rgba(0,0,0,0.1);
+ padding:0;
+ margin:1px;
+}
+.dropdown-menu ul li {
+ list-style:none;
+ padding:0;
+ margin:0;
+ line-height:18px;
+}
+.dropdown-menu ul li>a,
+.dropdown-menu ul li label {
+ display:block;
+ color:#000;
+ text-decoration:none;
+ line-height:18px;
+ padding:5px 15px;
+ white-space:nowrap;
+ transition:all 0.1s;
+}
+.dropdown-menu ul li>a svg,
+.dropdown-menu ul li label svg {
+ height:14px;
+ width:18px;
+ vertical-align:middle;
+ margin-left:-2px;
+ margin-right:4px;
+ margin-top:-3px
+}
+.dropdown-menu ul li>a svg path,
+.dropdown-menu ul li>a svg polygon,
+.dropdown-menu ul li label svg path,
+.dropdown-menu ul li label svg polygon {
+ transition:fill 0.1s;
+ fill:#0b0b0b
+}
+.dropdown-menu ul li>a span.greenSVG svg path,
+.dropdown-menu ul li>a span.greenSVG svg polygon,
+.dropdown-menu ul li label span.greenSVG svg path,
+.dropdown-menu ul li label span.greenSVG svg polygon {
+ fill:#B7D968
+}
+.dropdown-menu ul li>a .flag,
+.dropdown-menu ul li label .flag {
+ padding-bottom:1px
+}
+.dropdown-menu ul li>a:not(.grey):hover,
+.dropdown-menu ul li>a:hover,
+.dropdown-menu ul li label:not(.grey):hover,
+.dropdown-menu ul li label:hover {
+ background-color:#436581;
+ color:#FFF;
+ cursor:pointer
+}
+.dropdown-menu ul li>a:not(.grey):hover svg path,
+.dropdown-menu ul li>a:not(.grey):hover svg polygon,
+.dropdown-menu ul li>a:hover svg path,
+.dropdown-menu ul li>a:hover svg polygon,
+.dropdown-menu ul li label:not(.grey):hover svg path,
+.dropdown-menu ul li label:not(.grey):hover svg polygon,
+.dropdown-menu ul li label:hover svg path,
+.dropdown-menu ul li label:hover svg polygon {
+ fill:#e4f1fb url("images/ui-bg_glass_100_e4f1fb_1x400.png") 50% 50% repeat-x;
+}
+.dropdown-menu ul li>a.active,
+.dropdown-menu ul li label.active {
+ -webkit-user-select:none;
+ -moz-user-select:none;
+ user-select:none;
+ cursor:default;
+ pointer-events:none;
+ color:#999;
+ background:#745cfc
+}
+.dropdown-menu ul li>a.grey:hover,
+.dropdown-menu ul li label.grey:hover {
+ cursor:default
+}
+.dropdown-menu ul li>a.disabled,
+.dropdown-menu ul li>a.disabled:hover,
+.dropdown-menu ul li>a.disabled:active,
+.dropdown-menu ul li label.disabled,
+.dropdown-menu ul li label.disabled:hover,
+.dropdown-menu ul li label.disabled:active {
+ -webkit-user-select:none;
+ -moz-user-select:none;
+ user-select:none;
+ cursor:default;
+ pointer-events:none;
+ cursor:default;
+ color:#999
+}
+.dropdown-menu ul li.title {
+ padding:7.5px 15px;
+ background:#f6f6f6;
+ color:#999;
+ font-family:"Roboto","Open Sans",sans-serif;
+ font-size:12px;
+ text-transform:uppercase;
+ border:0;
+ border-top-left-radius:3px;
+ border-top-right-radius:3px
+}
+.dropdown-menu ul li.title.grey {
+ background:#999;
+ color:#F57C00
+}
+.dropdown-menu ul li.title.light {
+ background:#f6f6f6;
+ color:#fccfa2
+}
+.dropdown-menu ul li.title.accent {
+ background:#F57C00;
+ color:#fccfa2
+}
+.dropdown-menu ul li>a:hover small.grey {
+ opacity:0.75;
+ color:#fff
+}
+.dropdown-menu ul li:first-child.divider {
+ display:none
+}
+.dropdown-menu.right-aligned {
+ text-align:right
+}
+.dropdown-menu.right-aligned ul li a svg {
+ margin-right:0;
+ margin-left:4px
+}
+.dropdown-menu .divider {
+ height:1px;
+ border:6px solid #e4f1fb url("images/ui-bg_glass_100_e4f1fb_1x400.png") 50% 50% repeat-x;
+ margin:5px 1px;
+ overflow:hidden
+}
+.dropdown-menu.dark.assign-dropdown ul li a {
+ color:#fff
+}
+.dropdown-menu.dark.assign-dropdown ul li a:hover {
+ background:#F57C00;
+ color:#fff
+}
+.dropdown-menu.dark ul {
+ background:#32363F
+}
+.dropdown-menu.dark ul li>a,
+.dropdown-menu.dark ul li label {
+ color:#939aaa
+}
+.dropdown-menu.dark ul li>a svg path,
+.dropdown-menu.dark ul li>a svg polygon,
+.dropdown-menu.dark ul li label svg path,
+.dropdown-menu.dark ul li label svg polygon {
+ fill:#778093
+}
+.dropdown-menu.dark ul li>a.active,
+.dropdown-menu.dark ul li label.active {
+ color:#7f889a;
+ background:#393d48
+}
+.dropdown-menu.dark ul li>a.active.green,
+.dropdown-menu.dark ul li label.active.green {
+ background:#B7D968;
+ color:#fff
+}
+.dropdown-menu.dark ul li>a.active.green svg path,
+.dropdown-menu.dark ul li>a.active.green svg polygon,
+.dropdown-menu.dark ul li label.active.green svg path,
+.dropdown-menu.dark ul li label.active.green svg polygon {
+ fill:#fff
+}
+.dropdown-menu.dark ul li>a.active.accent,
+.dropdown-menu.dark ul li label.active.accent {
+ background:#F57C00;
+ color:#fff
+}
+.dropdown-menu.dark ul li>a.active.accent svg path,
+.dropdown-menu.dark ul li>a.active.accent svg polygon,
+.dropdown-menu.dark ul li label.active.accent svg path,
+.dropdown-menu.dark ul li label.active.accent svg polygon {
+ fill:#fff
+}
+.dropdown-menu.dark ul .divider {
+ background:rgba(255,255,255,0.08)
+}
+@media screen and (max-width: 420px) {
+ .dropdown-menu ul li>a {
+  line-height:32px;
+  padding-left:24px;
+  padding-right:24px
+ }
+}
diff --git a/htdocs/cgi-bin/wsrc/jquery.sweet-dropdown.js b/htdocs/cgi-bin/wsrc/jquery.sweet-dropdown.js
new file mode 100644 (file)
index 0000000..53927a0
--- /dev/null
@@ -0,0 +1,11 @@
+/*!
+ * SweetDropdown: Sweet and versatile dropdowns
+ * v1.0.0, 2017-04-09
+ * http://github.com/adeptoas/sweet-dropdown
+ *
+ * Copyright (c) 2016 Adepto.as AS · Oslo, Norway
+ * Dual licensed under the MIT and GPL licenses.
+ *
+ * See LICENSE-MIT.txt and LICENSE-GPL.txt
+ */
+!function($){var showDropdown;return $.fn.sweetDropdown=function(method,data){switch(method){case"attach":return $(this).attr("data-dropdown",data);case"detach":return $(this).removeAttr("data-dropdown");case"show":return $(this).click();case"hide":return $.sweetDropdown.hideAll(),$(this);case"enable":return $(this).removeClass("dropdown-disabled");case"disable":return $(this).addClass("dropdown-disabled")}},$.sweetDropdown=function(){},$.sweetDropdown.attachAll=function(){return $("body").off("click.dropdown").on("click.dropdown","[data-dropdown]",showDropdown),$("[data-dropdown]").off("click.dropdown").on("click.dropdown",showDropdown),$("html, .sweet-modal-content").off("click.dropdown").on("click.dropdown",$.sweetDropdown.hideAll),$(window).off("resize.dropdown").on("resize.dropdown",$.sweetDropdown.hideAll),!0},$.sweetDropdown.hideAll=function(e,hideException){var animTimeout,el,hideExceptionID,targetGroup,trigger;return null==e&&(e=null),null==hideException&&(hideException=null),targetGroup=e?$(e.target).parents().addBack():null,targetGroup&&targetGroup.hasClass("dropdown-menu")&&!targetGroup.is("A")?void 0:(el=".dropdown-menu",trigger="[data-dropdown]",hideExceptionID="",hideException&&(hideExceptionID=$(hideException).attr("id"),$('[data-dropdown="#'+hideExceptionID+'"]').hasClass("dropdown-open")||(el=".dropdown-menu:not(#"+hideExceptionID+")",trigger='[data-dropdown!="#'+hideExceptionID+'"]')),$("body").find(el).removeClass("dropdown-opened").end().find(trigger).removeClass("dropdown-open"),animTimeout=window.setTimeout(function(){return $("body").find(el).hide().end()},200),!0)},$.sweetDropdown.ANCHOR_POSITIONS=["top-left","top-center","top-right","right-top","right-center","right-bottom","bottom-left","bottom-center","bottom-right","left-top","left-center","left-bottom"],$.sweetDropdown.defaults={anchorPosition:"center"},showDropdown=function(e){var $anchor,$dropdown,$trigger,addAnchorX,addAnchorY,addX,addY,anchorPosition,anchorSide,bottomTrigger,hasAnchor,heightDropdown,heightTrigger,i,isDisabled,isOpen,left,leftTrigger,len,position,positionParts,ref,rightTrigger,top,topTrigger,widthDropdown,widthTrigger;if(null==e&&(e=null),$trigger=$(this),$dropdown=$($trigger.data("dropdown")),$anchor=$dropdown.find(".dropdown-anchor"),hasAnchor=$dropdown.hasClass("dropdown-has-anchor"),isOpen=$trigger.hasClass("dropdown-open"),isDisabled=$trigger.hasClass("dropdown-disabled"),widthDropdown=$dropdown.outerWidth(),widthTrigger=$trigger.outerWidth(),heightDropdown=$dropdown.outerHeight(),heightTrigger=$trigger.outerHeight(),topTrigger=$trigger.position().top,leftTrigger=$trigger.position().left,$trigger.hasClass("dropdown-use-offset")&&(topTrigger=$trigger.offset().top,leftTrigger=$trigger.offset().left),bottomTrigger=topTrigger+heightTrigger,rightTrigger=leftTrigger+widthTrigger,$dropdown.length<1)return console.error("[SweetDropdown] Could not find dropdown: "+$(this).data("dropdown"));if($anchor.length<1&&hasAnchor&&($anchor=$('<div class="dropdown-anchor"></div>'),$dropdown.prepend($anchor)),void 0!==e&&(e.preventDefault(),e.stopPropagation()),isOpen||isDisabled)return!1;for($.sweetDropdown.hideAll(null,$trigger.data("dropdown")),anchorPosition=$.sweetDropdown.defaults.anchorPosition,ref=$.sweetDropdown.ANCHOR_POSITIONS,i=0,len=ref.length;len>i;i++)position=ref[i],$dropdown.hasClass("dropdown-anchor-"+position)&&(anchorPosition=position);if(top=0,left=0,positionParts=anchorPosition.split("-"),anchorSide=positionParts[0],anchorPosition=positionParts[1],"top"===anchorSide||"bottom"===anchorSide)switch(anchorPosition){case"left":left=leftTrigger;break;case"center":left=leftTrigger-widthDropdown/2+widthTrigger/2;break;case"right":left=rightTrigger-widthDropdown}if("left"===anchorSide||"right"===anchorSide)switch(anchorPosition){case"top":top=topTrigger;break;case"center":top=topTrigger-heightDropdown/2+heightTrigger/2;break;case"bottom":top=topTrigger+heightTrigger-heightDropdown}switch(anchorSide){case"top":top=topTrigger+heightTrigger;break;case"right":left=leftTrigger-widthDropdown;break;case"bottom":top=topTrigger-heightDropdown;break;case"left":left=leftTrigger+widthTrigger}return addX=parseInt($dropdown.data("add-x")),addY=parseInt($dropdown.data("add-y")),isNaN(addX)||(left+=addX),isNaN(addY)||(top+=addY),addAnchorX=parseInt($trigger.data("add-anchor-x")),addAnchorY=parseInt($trigger.data("add-anchor-y")),isNaN(addAnchorX)||$anchor.css({marginLeft:addAnchorX}),isNaN(addAnchorY)||$anchor.css({marginTop:addAnchorY}),$dropdown.css({top:top,left:left,display:"block"}),window.setTimeout(function(){return $dropdown.addClass("dropdown-opened")},0),$trigger.addClass("dropdown-open"),$trigger},$(function(){return $.sweetDropdown.attachAll()})}(jQuery);
\ No newline at end of file
diff --git a/htdocs/cgi-bin/wsrc/jquery.transit.js b/htdocs/cgi-bin/wsrc/jquery.transit.js
new file mode 100644 (file)
index 0000000..a2b47b8
--- /dev/null
@@ -0,0 +1,745 @@
+/*!
+ * jQuery Transit - CSS3 transitions and transformations
+ * (c) 2011-2014 Rico Sta. Cruz
+ * MIT Licensed.
+ *
+ * http://ricostacruz.com/jquery.transit
+ * http://github.com/rstacruz/jquery.transit
+ */
+
+/* jshint expr: true */
+
+;(function (root, factory) {
+
+  if (typeof define === 'function' && define.amd) {
+    define(['jquery'], factory);
+  } else if (typeof exports === 'object') {
+    module.exports = factory(require('jquery'));
+  } else {
+    factory(root.jQuery);
+  }
+
+}(this, function($) {
+
+  $.transit = {
+    version: "0.9.12",
+
+    // Map of $.css() keys to values for 'transitionProperty'.
+    // See https://developer.mozilla.org/en/CSS/CSS_transitions#Properties_that_can_be_animated
+    propertyMap: {
+      marginLeft    : 'margin',
+      marginRight   : 'margin',
+      marginBottom  : 'margin',
+      marginTop     : 'margin',
+      paddingLeft   : 'padding',
+      paddingRight  : 'padding',
+      paddingBottom : 'padding',
+      paddingTop    : 'padding'
+    },
+
+    // Will simply transition "instantly" if false
+    enabled: true,
+
+    // Set this to false if you don't want to use the transition end property.
+    useTransitionEnd: false
+  };
+
+  var div = document.createElement('div');
+  var support = {};
+
+  // Helper function to get the proper vendor property name.
+  // (`transition` => `WebkitTransition`)
+  function getVendorPropertyName(prop) {
+    // Handle unprefixed versions (FF16+, for example)
+    if (prop in div.style) return prop;
+
+    var prefixes = ['Moz', 'Webkit', 'O', 'ms'];
+    var prop_ = prop.charAt(0).toUpperCase() + prop.substr(1);
+
+    for (var i=0; i<prefixes.length; ++i) {
+      var vendorProp = prefixes[i] + prop_;
+      if (vendorProp in div.style) { return vendorProp; }
+    }
+  }
+
+  // Helper function to check if transform3D is supported.
+  // Should return true for Webkits and Firefox 10+.
+  function checkTransform3dSupport() {
+    div.style[support.transform] = '';
+    div.style[support.transform] = 'rotateY(90deg)';
+    return div.style[support.transform] !== '';
+  }
+
+  var isChrome = navigator.userAgent.toLowerCase().indexOf('chrome') > -1;
+
+  // Check for the browser's transitions support.
+  support.transition      = getVendorPropertyName('transition');
+  support.transitionDelay = getVendorPropertyName('transitionDelay');
+  support.transform       = getVendorPropertyName('transform');
+  support.transformOrigin = getVendorPropertyName('transformOrigin');
+  support.filter          = getVendorPropertyName('Filter');
+  support.transform3d     = checkTransform3dSupport();
+
+  var eventNames = {
+    'transition':       'transitionend',
+    'MozTransition':    'transitionend',
+    'OTransition':      'oTransitionEnd',
+    'WebkitTransition': 'webkitTransitionEnd',
+    'msTransition':     'MSTransitionEnd'
+  };
+
+  // Detect the 'transitionend' event needed.
+  var transitionEnd = support.transitionEnd = eventNames[support.transition] || null;
+
+  // Populate jQuery's `$.support` with the vendor prefixes we know.
+  // As per [jQuery's cssHooks documentation](http://api.jquery.com/jQuery.cssHooks/),
+  // we set $.support.transition to a string of the actual property name used.
+  for (var key in support) {
+    if (support.hasOwnProperty(key) && typeof $.support[key] === 'undefined') {
+      $.support[key] = support[key];
+    }
+  }
+
+  // Avoid memory leak in IE.
+  div = null;
+
+  // ## $.cssEase
+  // List of easing aliases that you can use with `$.fn.transition`.
+  $.cssEase = {
+    '_default':       'ease',
+    'in':             'ease-in',
+    'out':            'ease-out',
+    'in-out':         'ease-in-out',
+    'snap':           'cubic-bezier(0,1,.5,1)',
+    // Penner equations
+    'easeInCubic':    'cubic-bezier(.550,.055,.675,.190)',
+    'easeOutCubic':   'cubic-bezier(.215,.61,.355,1)',
+    'easeInOutCubic': 'cubic-bezier(.645,.045,.355,1)',
+    'easeInCirc':     'cubic-bezier(.6,.04,.98,.335)',
+    'easeOutCirc':    'cubic-bezier(.075,.82,.165,1)',
+    'easeInOutCirc':  'cubic-bezier(.785,.135,.15,.86)',
+    'easeInExpo':     'cubic-bezier(.95,.05,.795,.035)',
+    'easeOutExpo':    'cubic-bezier(.19,1,.22,1)',
+    'easeInOutExpo':  'cubic-bezier(1,0,0,1)',
+    'easeInQuad':     'cubic-bezier(.55,.085,.68,.53)',
+    'easeOutQuad':    'cubic-bezier(.25,.46,.45,.94)',
+    'easeInOutQuad':  'cubic-bezier(.455,.03,.515,.955)',
+    'easeInQuart':    'cubic-bezier(.895,.03,.685,.22)',
+    'easeOutQuart':   'cubic-bezier(.165,.84,.44,1)',
+    'easeInOutQuart': 'cubic-bezier(.77,0,.175,1)',
+    'easeInQuint':    'cubic-bezier(.755,.05,.855,.06)',
+    'easeOutQuint':   'cubic-bezier(.23,1,.32,1)',
+    'easeInOutQuint': 'cubic-bezier(.86,0,.07,1)',
+    'easeInSine':     'cubic-bezier(.47,0,.745,.715)',
+    'easeOutSine':    'cubic-bezier(.39,.575,.565,1)',
+    'easeInOutSine':  'cubic-bezier(.445,.05,.55,.95)',
+    'easeInBack':     'cubic-bezier(.6,-.28,.735,.045)',
+    'easeOutBack':    'cubic-bezier(.175, .885,.32,1.275)',
+    'easeInOutBack':  'cubic-bezier(.68,-.55,.265,1.55)'
+  };
+
+  // ## 'transform' CSS hook
+  // Allows you to use the `transform` property in CSS.
+  //
+  //     $("#hello").css({ transform: "rotate(90deg)" });
+  //
+  //     $("#hello").css('transform');
+  //     //=> { rotate: '90deg' }
+  //
+  $.cssHooks['transit:transform'] = {
+    // The getter returns a `Transform` object.
+    get: function(elem) {
+      return $(elem).data('transform') || new Transform();
+    },
+
+    // The setter accepts a `Transform` object or a string.
+    set: function(elem, v) {
+      var value = v;
+
+      if (!(value instanceof Transform)) {
+        value = new Transform(value);
+      }
+
+      // We've seen the 3D version of Scale() not work in Chrome when the
+      // element being scaled extends outside of the viewport.  Thus, we're
+      // forcing Chrome to not use the 3d transforms as well.  Not sure if
+      // translate is affectede, but not risking it.  Detection code from
+      // http://davidwalsh.name/detecting-google-chrome-javascript
+      if (support.transform === 'WebkitTransform' && !isChrome) {
+        elem.style[support.transform] = value.toString(true);
+      } else {
+        elem.style[support.transform] = value.toString();
+      }
+
+      $(elem).data('transform', value);
+    }
+  };
+
+  // Add a CSS hook for `.css({ transform: '...' })`.
+  // In jQuery 1.8+, this will intentionally override the default `transform`
+  // CSS hook so it'll play well with Transit. (see issue #62)
+  $.cssHooks.transform = {
+    set: $.cssHooks['transit:transform'].set
+  };
+
+  // ## 'filter' CSS hook
+  // Allows you to use the `filter` property in CSS.
+  //
+  //     $("#hello").css({ filter: 'blur(10px)' });
+  //
+  $.cssHooks.filter = {
+    get: function(elem) {
+      return elem.style[support.filter];
+    },
+    set: function(elem, value) {
+      elem.style[support.filter] = value;
+    }
+  };
+
+  // jQuery 1.8+ supports prefix-free transitions, so these polyfills will not
+  // be necessary.
+  if ($.fn.jquery < "1.8") {
+    // ## 'transformOrigin' CSS hook
+    // Allows the use for `transformOrigin` to define where scaling and rotation
+    // is pivoted.
+    //
+    //     $("#hello").css({ transformOrigin: '0 0' });
+    //
+    $.cssHooks.transformOrigin = {
+      get: function(elem) {
+        return elem.style[support.transformOrigin];
+      },
+      set: function(elem, value) {
+        elem.style[support.transformOrigin] = value;
+      }
+    };
+
+    // ## 'transition' CSS hook
+    // Allows you to use the `transition` property in CSS.
+    //
+    //     $("#hello").css({ transition: 'all 0 ease 0' });
+    //
+    $.cssHooks.transition = {
+      get: function(elem) {
+        return elem.style[support.transition];
+      },
+      set: function(elem, value) {
+        elem.style[support.transition] = value;
+      }
+    };
+  }
+
+  // ## Other CSS hooks
+  // Allows you to rotate, scale and translate.
+  registerCssHook('scale');
+  registerCssHook('scaleX');
+  registerCssHook('scaleY');
+  registerCssHook('translate');
+  registerCssHook('rotate');
+  registerCssHook('rotateX');
+  registerCssHook('rotateY');
+  registerCssHook('rotate3d');
+  registerCssHook('perspective');
+  registerCssHook('skewX');
+  registerCssHook('skewY');
+  registerCssHook('x', true);
+  registerCssHook('y', true);
+
+  // ## Transform class
+  // This is the main class of a transformation property that powers
+  // `$.fn.css({ transform: '...' })`.
+  //
+  // This is, in essence, a dictionary object with key/values as `-transform`
+  // properties.
+  //
+  //     var t = new Transform("rotate(90) scale(4)");
+  //
+  //     t.rotate             //=> "90deg"
+  //     t.scale              //=> "4,4"
+  //
+  // Setters are accounted for.
+  //
+  //     t.set('rotate', 4)
+  //     t.rotate             //=> "4deg"
+  //
+  // Convert it to a CSS string using the `toString()` and `toString(true)` (for WebKit)
+  // functions.
+  //
+  //     t.toString()         //=> "rotate(90deg) scale(4,4)"
+  //     t.toString(true)     //=> "rotate(90deg) scale3d(4,4,0)" (WebKit version)
+  //
+  function Transform(str) {
+    if (typeof str === 'string') { this.parse(str); }
+    return this;
+  }
+
+  Transform.prototype = {
+    // ### setFromString()
+    // Sets a property from a string.
+    //
+    //     t.setFromString('scale', '2,4');
+    //     // Same as set('scale', '2', '4');
+    //
+    setFromString: function(prop, val) {
+      var args =
+        (typeof val === 'string')  ? val.split(',') :
+        (val.constructor === Array) ? val :
+        [ val ];
+
+      args.unshift(prop);
+
+      Transform.prototype.set.apply(this, args);
+    },
+
+    // ### set()
+    // Sets a property.
+    //
+    //     t.set('scale', 2, 4);
+    //
+    set: function(prop) {
+      var args = Array.prototype.slice.apply(arguments, [1]);
+      if (this.setter[prop]) {
+        this.setter[prop].apply(this, args);
+      } else {
+        this[prop] = args.join(',');
+      }
+    },
+
+    get: function(prop) {
+      if (this.getter[prop]) {
+        return this.getter[prop].apply(this);
+      } else {
+        return this[prop] || 0;
+      }
+    },
+
+    setter: {
+      // ### rotate
+      //
+      //     .css({ rotate: 30 })
+      //     .css({ rotate: "30" })
+      //     .css({ rotate: "30deg" })
+      //     .css({ rotate: "30deg" })
+      //
+      rotate: function(theta) {
+        this.rotate = unit(theta, 'deg');
+      },
+
+      rotateX: function(theta) {
+        this.rotateX = unit(theta, 'deg');
+      },
+
+      rotateY: function(theta) {
+        this.rotateY = unit(theta, 'deg');
+      },
+
+      // ### scale
+      //
+      //     .css({ scale: 9 })      //=> "scale(9,9)"
+      //     .css({ scale: '3,2' })  //=> "scale(3,2)"
+      //
+      scale: function(x, y) {
+        if (y === undefined) { y = x; }
+        this.scale = x + "," + y;
+      },
+
+      // ### skewX + skewY
+      skewX: function(x) {
+        this.skewX = unit(x, 'deg');
+      },
+
+      skewY: function(y) {
+        this.skewY = unit(y, 'deg');
+      },
+
+      // ### perspectvie
+      perspective: function(dist) {
+        this.perspective = unit(dist, 'px');
+      },
+
+      // ### x / y
+      // Translations. Notice how this keeps the other value.
+      //
+      //     .css({ x: 4 })       //=> "translate(4px, 0)"
+      //     .css({ y: 10 })      //=> "translate(4px, 10px)"
+      //
+      x: function(x) {
+        this.set('translate', x, null);
+      },
+
+      y: function(y) {
+        this.set('translate', null, y);
+      },
+
+      // ### translate
+      // Notice how this keeps the other value.
+      //
+      //     .css({ translate: '2, 5' })    //=> "translate(2px, 5px)"
+      //
+      translate: function(x, y) {
+        if (this._translateX === undefined) { this._translateX = 0; }
+        if (this._translateY === undefined) { this._translateY = 0; }
+
+        if (x !== null && x !== undefined) { this._translateX = unit(x, 'px'); }
+        if (y !== null && y !== undefined) { this._translateY = unit(y, 'px'); }
+
+        this.translate = this._translateX + "," + this._translateY;
+      }
+    },
+
+    getter: {
+      x: function() {
+        return this._translateX || 0;
+      },
+
+      y: function() {
+        return this._translateY || 0;
+      },
+
+      scale: function() {
+        var s = (this.scale || "1,1").split(',');
+        if (s[0]) { s[0] = parseFloat(s[0]); }
+        if (s[1]) { s[1] = parseFloat(s[1]); }
+
+        // "2.5,2.5" => 2.5
+        // "2.5,1" => [2.5,1]
+        return (s[0] === s[1]) ? s[0] : s;
+      },
+
+      rotate3d: function() {
+        var s = (this.rotate3d || "0,0,0,0deg").split(',');
+        for (var i=0; i<=3; ++i) {
+          if (s[i]) { s[i] = parseFloat(s[i]); }
+        }
+        if (s[3]) { s[3] = unit(s[3], 'deg'); }
+
+        return s;
+      }
+    },
+
+    // ### parse()
+    // Parses from a string. Called on constructor.
+    parse: function(str) {
+      var self = this;
+      str.replace(/([a-zA-Z0-9]+)\((.*?)\)/g, function(x, prop, val) {
+        self.setFromString(prop, val);
+      });
+    },
+
+    // ### toString()
+    // Converts to a `transition` CSS property string. If `use3d` is given,
+    // it converts to a `-webkit-transition` CSS property string instead.
+    toString: function(use3d) {
+      var re = [];
+
+      for (var i in this) {
+        if (this.hasOwnProperty(i)) {
+          // Don't use 3D transformations if the browser can't support it.
+          if ((!support.transform3d) && (
+            (i === 'rotateX') ||
+            (i === 'rotateY') ||
+            (i === 'perspective') ||
+            (i === 'transformOrigin'))) { continue; }
+
+          if (i[0] !== '_') {
+            if (use3d && (i === 'scale')) {
+              re.push(i + "3d(" + this[i] + ",1)");
+            } else if (use3d && (i === 'translate')) {
+              re.push(i + "3d(" + this[i] + ",0)");
+            } else {
+              re.push(i + "(" + this[i] + ")");
+            }
+          }
+        }
+      }
+
+      return re.join(" ");
+    }
+  };
+
+  function callOrQueue(self, queue, fn) {
+    if (queue === true) {
+      self.queue(fn);
+    } else if (queue) {
+      self.queue(queue, fn);
+    } else {
+      self.each(function () {
+                fn.call(this);
+            });
+    }
+  }
+
+  // ### getProperties(dict)
+  // Returns properties (for `transition-property`) for dictionary `props`. The
+  // value of `props` is what you would expect in `$.css(...)`.
+  function getProperties(props) {
+    var re = [];
+
+    $.each(props, function(key) {
+      key = $.camelCase(key); // Convert "text-align" => "textAlign"
+      key = $.transit.propertyMap[key] || $.cssProps[key] || key;
+      key = uncamel(key); // Convert back to dasherized
+
+      // Get vendor specify propertie
+      if (support[key])
+        key = uncamel(support[key]);
+
+      if ($.inArray(key, re) === -1) { re.push(key); }
+    });
+
+    return re;
+  }
+
+  // ### getTransition()
+  // Returns the transition string to be used for the `transition` CSS property.
+  //
+  // Example:
+  //
+  //     getTransition({ opacity: 1, rotate: 30 }, 500, 'ease');
+  //     //=> 'opacity 500ms ease, -webkit-transform 500ms ease'
+  //
+  function getTransition(properties, duration, easing, delay) {
+    // Get the CSS properties needed.
+    var props = getProperties(properties);
+
+    // Account for aliases (`in` => `ease-in`).
+    if ($.cssEase[easing]) { easing = $.cssEase[easing]; }
+
+    // Build the duration/easing/delay attributes for it.
+    var attribs = '' + toMS(duration) + ' ' + easing;
+    if (parseInt(delay, 10) > 0) { attribs += ' ' + toMS(delay); }
+
+    // For more properties, add them this way:
+    // "margin 200ms ease, padding 200ms ease, ..."
+    var transitions = [];
+    $.each(props, function(i, name) {
+      transitions.push(name + ' ' + attribs);
+    });
+
+    return transitions.join(', ');
+  }
+
+  // ## $.fn.transition
+  // Works like $.fn.animate(), but uses CSS transitions.
+  //
+  //     $("...").transition({ opacity: 0.1, scale: 0.3 });
+  //
+  //     // Specific duration
+  //     $("...").transition({ opacity: 0.1, scale: 0.3 }, 500);
+  //
+  //     // With duration and easing
+  //     $("...").transition({ opacity: 0.1, scale: 0.3 }, 500, 'in');
+  //
+  //     // With callback
+  //     $("...").transition({ opacity: 0.1, scale: 0.3 }, function() { ... });
+  //
+  //     // With everything
+  //     $("...").transition({ opacity: 0.1, scale: 0.3 }, 500, 'in', function() { ... });
+  //
+  //     // Alternate syntax
+  //     $("...").transition({
+  //       opacity: 0.1,
+  //       duration: 200,
+  //       delay: 40,
+  //       easing: 'in',
+  //       complete: function() { /* ... */ }
+  //      });
+  //
+  $.fn.transition = $.fn.transit = function(properties, duration, easing, callback) {
+    var self  = this;
+    var delay = 0;
+    var queue = true;
+
+    var theseProperties = $.extend(true, {}, properties);
+
+    // Account for `.transition(properties, callback)`.
+    if (typeof duration === 'function') {
+      callback = duration;
+      duration = undefined;
+    }
+
+    // Account for `.transition(properties, options)`.
+    if (typeof duration === 'object') {
+      easing = duration.easing;
+      delay = duration.delay || 0;
+      queue = typeof duration.queue === "undefined" ? true : duration.queue;
+      callback = duration.complete;
+      duration = duration.duration;
+    }
+
+    // Account for `.transition(properties, duration, callback)`.
+    if (typeof easing === 'function') {
+      callback = easing;
+      easing = undefined;
+    }
+
+    // Alternate syntax.
+    if (typeof theseProperties.easing !== 'undefined') {
+      easing = theseProperties.easing;
+      delete theseProperties.easing;
+    }
+
+    if (typeof theseProperties.duration !== 'undefined') {
+      duration = theseProperties.duration;
+      delete theseProperties.duration;
+    }
+
+    if (typeof theseProperties.complete !== 'undefined') {
+      callback = theseProperties.complete;
+      delete theseProperties.complete;
+    }
+
+    if (typeof theseProperties.queue !== 'undefined') {
+      queue = theseProperties.queue;
+      delete theseProperties.queue;
+    }
+
+    if (typeof theseProperties.delay !== 'undefined') {
+      delay = theseProperties.delay;
+      delete theseProperties.delay;
+    }
+
+    // Set defaults. (`400` duration, `ease` easing)
+    if (typeof duration === 'undefined') { duration = $.fx.speeds._default; }
+    if (typeof easing === 'undefined')   { easing = $.cssEase._default; }
+
+    duration = toMS(duration);
+
+    // Build the `transition` property.
+    var transitionValue = getTransition(theseProperties, duration, easing, delay);
+
+    // Compute delay until callback.
+    // If this becomes 0, don't bother setting the transition property.
+    var work = $.transit.enabled && support.transition;
+    var i = work ? (parseInt(duration, 10) + parseInt(delay, 10)) : 0;
+
+    // If there's nothing to do...
+    if (i === 0) {
+      var fn = function(next) {
+        self.css(theseProperties);
+        if (callback) { callback.apply(self); }
+        if (next) { next(); }
+      };
+
+      callOrQueue(self, queue, fn);
+      return self;
+    }
+
+    // Save the old transitions of each element so we can restore it later.
+    var oldTransitions = {};
+
+    var run = function(nextCall) {
+      var bound = false;
+
+      // Prepare the callback.
+      var cb = function() {
+        if (bound) { self.unbind(transitionEnd, cb); }
+
+        if (i > 0) {
+          self.each(function() {
+            this.style[support.transition] = (oldTransitions[this] || null);
+          });
+        }
+
+        if (typeof callback === 'function') { callback.apply(self); }
+        if (typeof nextCall === 'function') { nextCall(); }
+      };
+
+      if ((i > 0) && (transitionEnd) && ($.transit.useTransitionEnd)) {
+        // Use the 'transitionend' event if it's available.
+        bound = true;
+        self.bind(transitionEnd, cb);
+      } else {
+        // Fallback to timers if the 'transitionend' event isn't supported.
+        window.setTimeout(cb, i);
+      }
+
+      // Apply transitions.
+      self.each(function() {
+        if (i > 0) {
+          this.style[support.transition] = transitionValue;
+        }
+        $(this).css(theseProperties);
+      });
+    };
+
+    // Defer running. This allows the browser to paint any pending CSS it hasn't
+    // painted yet before doing the transitions.
+    var deferredRun = function(next) {
+        this.offsetWidth = this.offsetWidth; // force a repaint
+        run(next);
+    };
+
+    // Use jQuery's fx queue.
+    callOrQueue(self, queue, deferredRun);
+
+    // Chainability.
+    return this;
+  };
+
+  function registerCssHook(prop, isPixels) {
+    // For certain properties, the 'px' should not be implied.
+    if (!isPixels) { $.cssNumber[prop] = true; }
+
+    $.transit.propertyMap[prop] = support.transform;
+
+    $.cssHooks[prop] = {
+      get: function(elem) {
+        var t = $(elem).css('transit:transform');
+        return t.get(prop);
+      },
+
+      set: function(elem, value) {
+        var t = $(elem).css('transit:transform');
+        t.setFromString(prop, value);
+
+        $(elem).css({ 'transit:transform': t });
+      }
+    };
+
+  }
+
+  // ### uncamel(str)
+  // Converts a camelcase string to a dasherized string.
+  // (`marginLeft` => `margin-left`)
+  function uncamel(str) {
+    return str.replace(/([A-Z])/g, function(letter) { return '-' + letter.toLowerCase(); });
+  }
+
+  // ### unit(number, unit)
+  // Ensures that number `number` has a unit. If no unit is found, assume the
+  // default is `unit`.
+  //
+  //     unit(2, 'px')          //=> "2px"
+  //     unit("30deg", 'rad')   //=> "30deg"
+  //
+  function unit(i, units) {
+    if ((typeof i === "string") && (!i.match(/^[\-0-9\.]+$/))) {
+      return i;
+    } else {
+      return "" + i + units;
+    }
+  }
+
+  // ### toMS(duration)
+  // Converts given `duration` to a millisecond string.
+  //
+  // toMS('fast') => $.fx.speeds[i] => "200ms"
+  // toMS('normal') //=> $.fx.speeds._default => "400ms"
+  // toMS(10) //=> '10ms'
+  // toMS('100ms') //=> '100ms'  
+  //
+  function toMS(duration) {
+    var i = duration;
+
+    // Allow string durations like 'fast' and 'slow', without overriding numeric values.
+    if (typeof i === 'string' && (!i.match(/^[\-0-9\.]+/))) { i = $.fx.speeds[i] || $.fx.speeds._default; }
+
+    return unit(i, 'ms');
+  }
+
+  // Export some functions for testable-ness.
+  $.transit.getTransitionValue = getTransition;
+
+  return $;
+}));
diff --git a/htdocs/cgi-bin/wsrc/jscolor.js b/htdocs/cgi-bin/wsrc/jscolor.js
new file mode 100644 (file)
index 0000000..5c77177
--- /dev/null
@@ -0,0 +1,1855 @@
+/**\r
+ * jscolor - JavaScript Color Picker\r
+ *\r
+ * @link    http://jscolor.com\r
+ * @license For open source use: GPLv3\r
+ *          For commercial use: JSColor Commercial License\r
+ * @author  Jan Odvarko\r
+ * @version 2.0.5\r
+ *\r
+ * See usage examples at http://jscolor.com/examples/\r
+ */\r
+\r
+\r
+"use strict";\r
+\r
+\r
+if (!window.jscolor) { window.jscolor = (function () {\r
+\r
+\r
+var jsc = {\r
+\r
+\r
+       register : function () {\r
+               jsc.attachDOMReadyEvent(jsc.init);\r
+               jsc.attachEvent(document, 'mousedown', jsc.onDocumentMouseDown);\r
+               jsc.attachEvent(document, 'touchstart', jsc.onDocumentTouchStart);\r
+               jsc.attachEvent(window, 'resize', jsc.onWindowResize);\r
+       },\r
+\r
+\r
+       init : function () {\r
+               if (jsc.jscolor.lookupClass) {\r
+                       jsc.jscolor.installByClassName(jsc.jscolor.lookupClass);\r
+               }\r
+       },\r
+\r
+\r
+       tryInstallOnElements : function (elms, className) {\r
+               var matchClass = new RegExp('(^|\\s)(' + className + ')(\\s*(\\{[^}]*\\})|\\s|$)', 'i');\r
+\r
+               for (var i = 0; i < elms.length; i += 1) {\r
+                       if (elms[i].type !== undefined && elms[i].type.toLowerCase() == 'color') {\r
+                               if (jsc.isColorAttrSupported) {\r
+                                       // skip inputs of type 'color' if supported by the browser\r
+                                       continue;\r
+                               }\r
+                       }\r
+                       var m;\r
+                       if (!elms[i].jscolor && elms[i].className && (m = elms[i].className.match(matchClass))) {\r
+                               var targetElm = elms[i];\r
+                               var optsStr = null;\r
+\r
+                               var dataOptions = jsc.getDataAttr(targetElm, 'jscolor');\r
+                               if (dataOptions !== null) {\r
+                                       optsStr = dataOptions;\r
+                               } else if (m[4]) {\r
+                                       optsStr = m[4];\r
+                               }\r
+\r
+                               var opts = {};\r
+                               if (optsStr) {\r
+                                       try {\r
+                                               opts = (new Function ('return (' + optsStr + ')'))();\r
+                                       } catch(eParseError) {\r
+                                               jsc.warn('Error parsing jscolor options: ' + eParseError + ':\n' + optsStr);\r
+                                       }\r
+                               }\r
+                               targetElm.jscolor = new jsc.jscolor(targetElm, opts);\r
+                       }\r
+               }\r
+       },\r
+\r
+\r
+       isColorAttrSupported : (function () {\r
+               var elm = document.createElement('input');\r
+               if (elm.setAttribute) {\r
+                       elm.setAttribute('type', 'color');\r
+                       if (elm.type.toLowerCase() == 'color') {\r
+                               return true;\r
+                       }\r
+               }\r
+               return false;\r
+       })(),\r
+\r
+\r
+       isCanvasSupported : (function () {\r
+               var elm = document.createElement('canvas');\r
+               return !!(elm.getContext && elm.getContext('2d'));\r
+       })(),\r
+\r
+\r
+       fetchElement : function (mixed) {\r
+               return typeof mixed === 'string' ? document.getElementById(mixed) : mixed;\r
+       },\r
+\r
+\r
+       isElementType : function (elm, type) {\r
+               return elm.nodeName.toLowerCase() === type.toLowerCase();\r
+       },\r
+\r
+\r
+       getDataAttr : function (el, name) {\r
+               var attrName = 'data-' + name;\r
+               var attrValue = el.getAttribute(attrName);\r
+               if (attrValue !== null) {\r
+                       return attrValue;\r
+               }\r
+               return null;\r
+       },\r
+\r
+\r
+       attachEvent : function (el, evnt, func) {\r
+               if (el.addEventListener) {\r
+                       el.addEventListener(evnt, func, false);\r
+               } else if (el.attachEvent) {\r
+                       el.attachEvent('on' + evnt, func);\r
+               }\r
+       },\r
+\r
+\r
+       detachEvent : function (el, evnt, func) {\r
+               if (el.removeEventListener) {\r
+                       el.removeEventListener(evnt, func, false);\r
+               } else if (el.detachEvent) {\r
+                       el.detachEvent('on' + evnt, func);\r
+               }\r
+       },\r
+\r
+\r
+       _attachedGroupEvents : {},\r
+\r
+\r
+       attachGroupEvent : function (groupName, el, evnt, func) {\r
+               if (!jsc._attachedGroupEvents.hasOwnProperty(groupName)) {\r
+                       jsc._attachedGroupEvents[groupName] = [];\r
+               }\r
+               jsc._attachedGroupEvents[groupName].push([el, evnt, func]);\r
+               jsc.attachEvent(el, evnt, func);\r
+       },\r
+\r
+\r
+       detachGroupEvents : function (groupName) {\r
+               if (jsc._attachedGroupEvents.hasOwnProperty(groupName)) {\r
+                       for (var i = 0; i < jsc._attachedGroupEvents[groupName].length; i += 1) {\r
+                               var evt = jsc._attachedGroupEvents[groupName][i];\r
+                               jsc.detachEvent(evt[0], evt[1], evt[2]);\r
+                       }\r
+                       delete jsc._attachedGroupEvents[groupName];\r
+               }\r
+       },\r
+\r
+\r
+       attachDOMReadyEvent : function (func) {\r
+               var fired = false;\r
+               var fireOnce = function () {\r
+                       if (!fired) {\r
+                               fired = true;\r
+                               func();\r
+                       }\r
+               };\r
+\r
+               if (document.readyState === 'complete') {\r
+                       setTimeout(fireOnce, 1); // async\r
+                       return;\r
+               }\r
+\r
+               if (document.addEventListener) {\r
+                       document.addEventListener('DOMContentLoaded', fireOnce, false);\r
+\r
+                       // Fallback\r
+                       window.addEventListener('load', fireOnce, false);\r
+\r
+               } else if (document.attachEvent) {\r
+                       // IE\r
+                       document.attachEvent('onreadystatechange', function () {\r
+                               if (document.readyState === 'complete') {\r
+                                       document.detachEvent('onreadystatechange', arguments.callee);\r
+                                       fireOnce();\r
+                               }\r
+                       })\r
+\r
+                       // Fallback\r
+                       window.attachEvent('onload', fireOnce);\r
+\r
+                       // IE7/8\r
+                       if (document.documentElement.doScroll && window == window.top) {\r
+                               var tryScroll = function () {\r
+                                       if (!document.body) { return; }\r
+                                       try {\r
+                                               document.documentElement.doScroll('left');\r
+                                               fireOnce();\r
+                                       } catch (e) {\r
+                                               setTimeout(tryScroll, 1);\r
+                                       }\r
+                               };\r
+                               tryScroll();\r
+                       }\r
+               }\r
+       },\r
+\r
+\r
+       warn : function (msg) {\r
+               if (window.console && window.console.warn) {\r
+                       window.console.warn(msg);\r
+               }\r
+       },\r
+\r
+\r
+       preventDefault : function (e) {\r
+               if (e.preventDefault) { e.preventDefault(); }\r
+               e.returnValue = false;\r
+       },\r
+\r
+\r
+       captureTarget : function (target) {\r
+               // IE\r
+               if (target.setCapture) {\r
+                       jsc._capturedTarget = target;\r
+                       jsc._capturedTarget.setCapture();\r
+               }\r
+       },\r
+\r
+\r
+       releaseTarget : function () {\r
+               // IE\r
+               if (jsc._capturedTarget) {\r
+                       jsc._capturedTarget.releaseCapture();\r
+                       jsc._capturedTarget = null;\r
+               }\r
+       },\r
+\r
+\r
+       fireEvent : function (el, evnt) {\r
+               if (!el) {\r
+                       return;\r
+               }\r
+               if (document.createEvent) {\r
+                       var ev = document.createEvent('HTMLEvents');\r
+                       ev.initEvent(evnt, true, true);\r
+                       el.dispatchEvent(ev);\r
+               } else if (document.createEventObject) {\r
+                       var ev = document.createEventObject();\r
+                       el.fireEvent('on' + evnt, ev);\r
+               } else if (el['on' + evnt]) { // alternatively use the traditional event model\r
+                       el['on' + evnt]();\r
+               }\r
+       },\r
+\r
+\r
+       classNameToList : function (className) {\r
+               return className.replace(/^\s+|\s+$/g, '').split(/\s+/);\r
+       },\r
+\r
+\r
+       // The className parameter (str) can only contain a single class name\r
+       hasClass : function (elm, className) {\r
+               if (!className) {\r
+                       return false;\r
+               }\r
+               return -1 != (' ' + elm.className.replace(/\s+/g, ' ') + ' ').indexOf(' ' + className + ' ');\r
+       },\r
+\r
+\r
+       // The className parameter (str) can contain multiple class names separated by whitespace\r
+       setClass : function (elm, className) {\r
+               var classList = jsc.classNameToList(className);\r
+               for (var i = 0; i < classList.length; i += 1) {\r
+                       if (!jsc.hasClass(elm, classList[i])) {\r
+                               elm.className += (elm.className ? ' ' : '') + classList[i];\r
+                       }\r
+               }\r
+       },\r
+\r
+\r
+       // The className parameter (str) can contain multiple class names separated by whitespace\r
+       unsetClass : function (elm, className) {\r
+               var classList = jsc.classNameToList(className);\r
+               for (var i = 0; i < classList.length; i += 1) {\r
+                       var repl = new RegExp(\r
+                               '^\\s*' + classList[i] + '\\s*|' +\r
+                               '\\s*' + classList[i] + '\\s*$|' +\r
+                               '\\s+' + classList[i] + '(\\s+)',\r
+                               'g'\r
+                       );\r
+                       elm.className = elm.className.replace(repl, '$1');\r
+               }\r
+       },\r
+\r
+\r
+       getStyle : function (elm) {\r
+               return window.getComputedStyle ? window.getComputedStyle(elm) : elm.currentStyle;\r
+       },\r
+\r
+\r
+       setStyle : (function () {\r
+               var helper = document.createElement('div');\r
+               var getSupportedProp = function (names) {\r
+                       for (var i = 0; i < names.length; i += 1) {\r
+                               if (names[i] in helper.style) {\r
+                                       return names[i];\r
+                               }\r
+                       }\r
+               };\r
+               var props = {\r
+                       borderRadius: getSupportedProp(['borderRadius', 'MozBorderRadius', 'webkitBorderRadius']),\r
+                       boxShadow: getSupportedProp(['boxShadow', 'MozBoxShadow', 'webkitBoxShadow'])\r
+               };\r
+               return function (elm, prop, value) {\r
+                       switch (prop.toLowerCase()) {\r
+                       case 'opacity':\r
+                               var alphaOpacity = Math.round(parseFloat(value) * 100);\r
+                               elm.style.opacity = value;\r
+                               elm.style.filter = 'alpha(opacity=' + alphaOpacity + ')';\r
+                               break;\r
+                       default:\r
+                               elm.style[props[prop]] = value;\r
+                               break;\r
+                       }\r
+               };\r
+       })(),\r
+\r
+\r
+       setBorderRadius : function (elm, value) {\r
+               jsc.setStyle(elm, 'borderRadius', value || '0');\r
+       },\r
+\r
+\r
+       setBoxShadow : function (elm, value) {\r
+               jsc.setStyle(elm, 'boxShadow', value || 'none');\r
+       },\r
+\r
+\r
+       getElementPos : function (e, relativeToViewport) {\r
+               var x=0, y=0;\r
+               var rect = e.getBoundingClientRect();\r
+               x = rect.left;\r
+               y = rect.top;\r
+               if (!relativeToViewport) {\r
+                       var viewPos = jsc.getViewPos();\r
+                       x += viewPos[0];\r
+                       y += viewPos[1];\r
+               }\r
+               return [x, y];\r
+       },\r
+\r
+\r
+       getElementSize : function (e) {\r
+               return [e.offsetWidth, e.offsetHeight];\r
+       },\r
+\r
+\r
+       // get pointer's X/Y coordinates relative to viewport\r
+       getAbsPointerPos : function (e) {\r
+               if (!e) { e = window.event; }\r
+               var x = 0, y = 0;\r
+               if (typeof e.changedTouches !== 'undefined' && e.changedTouches.length) {\r
+                       // touch devices\r
+                       x = e.changedTouches[0].clientX;\r
+                       y = e.changedTouches[0].clientY;\r
+               } else if (typeof e.clientX === 'number') {\r
+                       x = e.clientX;\r
+                       y = e.clientY;\r
+               }\r
+               return { x: x, y: y };\r
+       },\r
+\r
+\r
+       // get pointer's X/Y coordinates relative to target element\r
+       getRelPointerPos : function (e) {\r
+               if (!e) { e = window.event; }\r
+               var target = e.target || e.srcElement;\r
+               var targetRect = target.getBoundingClientRect();\r
+\r
+               var x = 0, y = 0;\r
+\r
+               var clientX = 0, clientY = 0;\r
+               if (typeof e.changedTouches !== 'undefined' && e.changedTouches.length) {\r
+                       // touch devices\r
+                       clientX = e.changedTouches[0].clientX;\r
+                       clientY = e.changedTouches[0].clientY;\r
+               } else if (typeof e.clientX === 'number') {\r
+                       clientX = e.clientX;\r
+                       clientY = e.clientY;\r
+               }\r
+\r
+               x = clientX - targetRect.left;\r
+               y = clientY - targetRect.top;\r
+               return { x: x, y: y };\r
+       },\r
+\r
+\r
+       getViewPos : function () {\r
+               var doc = document.documentElement;\r
+               return [\r
+                       (window.pageXOffset || doc.scrollLeft) - (doc.clientLeft || 0),\r
+                       (window.pageYOffset || doc.scrollTop) - (doc.clientTop || 0)\r
+               ];\r
+       },\r
+\r
+\r
+       getViewSize : function () {\r
+               var doc = document.documentElement;\r
+               return [\r
+                       (window.innerWidth || doc.clientWidth),\r
+                       (window.innerHeight || doc.clientHeight),\r
+               ];\r
+       },\r
+\r
+\r
+       redrawPosition : function () {\r
+\r
+               if (jsc.picker && jsc.picker.owner) {\r
+                       var thisObj = jsc.picker.owner;\r
+\r
+                       var tp, vp;\r
+\r
+                       if (thisObj.fixed) {\r
+                               // Fixed elements are positioned relative to viewport,\r
+                               // therefore we can ignore the scroll offset\r
+                               tp = jsc.getElementPos(thisObj.targetElement, true); // target pos\r
+                               vp = [0, 0]; // view pos\r
+                       } else {\r
+                               tp = jsc.getElementPos(thisObj.targetElement); // target pos\r
+                               vp = jsc.getViewPos(); // view pos\r
+                       }\r
+\r
+                       var ts = jsc.getElementSize(thisObj.targetElement); // target size\r
+                       var vs = jsc.getViewSize(); // view size\r
+                       var ps = jsc.getPickerOuterDims(thisObj); // picker size\r
+                       var a, b, c;\r
+                       switch (thisObj.position.toLowerCase()) {\r
+                               case 'left': a=1; b=0; c=-1; break;\r
+                               case 'right':a=1; b=0; c=1; break;\r
+                               case 'top':  a=0; b=1; c=-1; break;\r
+                               default:     a=0; b=1; c=1; break;\r
+                       }\r
+                       var l = (ts[b]+ps[b])/2;\r
+\r
+                       // compute picker position\r
+                       if (!thisObj.smartPosition) {\r
+                               var pp = [\r
+                                       tp[a],\r
+                                       tp[b]+ts[b]-l+l*c\r
+                               ];\r
+                       } else {\r
+                               var pp = [\r
+                                       -vp[a]+tp[a]+ps[a] > vs[a] ?\r
+                                               (-vp[a]+tp[a]+ts[a]/2 > vs[a]/2 && tp[a]+ts[a]-ps[a] >= 0 ? tp[a]+ts[a]-ps[a] : tp[a]) :\r
+                                               tp[a],\r
+                                       -vp[b]+tp[b]+ts[b]+ps[b]-l+l*c > vs[b] ?\r
+                                               (-vp[b]+tp[b]+ts[b]/2 > vs[b]/2 && tp[b]+ts[b]-l-l*c >= 0 ? tp[b]+ts[b]-l-l*c : tp[b]+ts[b]-l+l*c) :\r
+                                               (tp[b]+ts[b]-l+l*c >= 0 ? tp[b]+ts[b]-l+l*c : tp[b]+ts[b]-l-l*c)\r
+                               ];\r
+                       }\r
+\r
+                       var x = pp[a];\r
+                       var y = pp[b];\r
+                       var positionValue = thisObj.fixed ? 'fixed' : 'absolute';\r
+                       var contractShadow =\r
+                               (pp[0] + ps[0] > tp[0] || pp[0] < tp[0] + ts[0]) &&\r
+                               (pp[1] + ps[1] < tp[1] + ts[1]);\r
+\r
+                       jsc._drawPosition(thisObj, x, y, positionValue, contractShadow);\r
+               }\r
+       },\r
+\r
+\r
+       _drawPosition : function (thisObj, x, y, positionValue, contractShadow) {\r
+               var vShadow = contractShadow ? 0 : thisObj.shadowBlur; // px\r
+\r
+               jsc.picker.wrap.style.position = positionValue;\r
+               jsc.picker.wrap.style.left = x + 'px';\r
+               jsc.picker.wrap.style.top = y + 'px';\r
+\r
+               jsc.setBoxShadow(\r
+                       jsc.picker.boxS,\r
+                       thisObj.shadow ?\r
+                               new jsc.BoxShadow(0, vShadow, thisObj.shadowBlur, 0, thisObj.shadowColor) :\r
+                               null);\r
+       },\r
+\r
+\r
+       getPickerDims : function (thisObj) {\r
+               var displaySlider = !!jsc.getSliderComponent(thisObj);\r
+               var dims = [\r
+                       2 * thisObj.insetWidth + 2 * thisObj.padding + thisObj.width +\r
+                               (displaySlider ? 2 * thisObj.insetWidth + jsc.getPadToSliderPadding(thisObj) + thisObj.sliderSize : 0),\r
+                       2 * thisObj.insetWidth + 2 * thisObj.padding + thisObj.height +\r
+                               (thisObj.closable ? 2 * thisObj.insetWidth + thisObj.padding + thisObj.buttonHeight : 0)\r
+               ];\r
+               return dims;\r
+       },\r
+\r
+\r
+       getPickerOuterDims : function (thisObj) {\r
+               var dims = jsc.getPickerDims(thisObj);\r
+               return [\r
+                       dims[0] + 2 * thisObj.borderWidth,\r
+                       dims[1] + 2 * thisObj.borderWidth\r
+               ];\r
+       },\r
+\r
+\r
+       getPadToSliderPadding : function (thisObj) {\r
+               return Math.max(thisObj.padding, 1.5 * (2 * thisObj.pointerBorderWidth + thisObj.pointerThickness));\r
+       },\r
+\r
+\r
+       getPadYComponent : function (thisObj) {\r
+               switch (thisObj.mode.charAt(1).toLowerCase()) {\r
+                       case 'v': return 'v'; break;\r
+               }\r
+               return 's';\r
+       },\r
+\r
+\r
+       getSliderComponent : function (thisObj) {\r
+               if (thisObj.mode.length > 2) {\r
+                       switch (thisObj.mode.charAt(2).toLowerCase()) {\r
+                               case 's': return 's'; break;\r
+                               case 'v': return 'v'; break;\r
+                       }\r
+               }\r
+               return null;\r
+       },\r
+\r
+\r
+       onDocumentMouseDown : function (e) {\r
+               if (!e) { e = window.event; }\r
+               var target = e.target || e.srcElement;\r
+\r
+               if (target._jscLinkedInstance) {\r
+                       if (target._jscLinkedInstance.showOnClick) {\r
+                               target._jscLinkedInstance.show();\r
+                       }\r
+               } else if (target._jscControlName) {\r
+                       jsc.onControlPointerStart(e, target, target._jscControlName, 'mouse');\r
+               } else {\r
+                       // Mouse is outside the picker controls -> hide the color picker!\r
+                       if (jsc.picker && jsc.picker.owner) {\r
+                               jsc.picker.owner.hide();\r
+                       }\r
+               }\r
+       },\r
+\r
+\r
+       onDocumentTouchStart : function (e) {\r
+               if (!e) { e = window.event; }\r
+               var target = e.target || e.srcElement;\r
+\r
+               if (target._jscLinkedInstance) {\r
+                       if (target._jscLinkedInstance.showOnClick) {\r
+                               target._jscLinkedInstance.show();\r
+                       }\r
+               } else if (target._jscControlName) {\r
+                       jsc.onControlPointerStart(e, target, target._jscControlName, 'touch');\r
+               } else {\r
+                       if (jsc.picker && jsc.picker.owner) {\r
+                               jsc.picker.owner.hide();\r
+                       }\r
+               }\r
+       },\r
+\r
+\r
+       onWindowResize : function (e) {\r
+               jsc.redrawPosition();\r
+       },\r
+\r
+\r
+       onParentScroll : function (e) {\r
+               // hide the picker when one of the parent elements is scrolled\r
+               if (jsc.picker && jsc.picker.owner) {\r
+                       jsc.picker.owner.hide();\r
+               }\r
+       },\r
+\r
+\r
+       _pointerMoveEvent : {\r
+               mouse: 'mousemove',\r
+               touch: 'touchmove'\r
+       },\r
+       _pointerEndEvent : {\r
+               mouse: 'mouseup',\r
+               touch: 'touchend'\r
+       },\r
+\r
+\r
+       _pointerOrigin : null,\r
+       _capturedTarget : null,\r
+\r
+\r
+       onControlPointerStart : function (e, target, controlName, pointerType) {\r
+               var thisObj = target._jscInstance;\r
+\r
+               jsc.preventDefault(e);\r
+               jsc.captureTarget(target);\r
+\r
+               var registerDragEvents = function (doc, offset) {\r
+                       jsc.attachGroupEvent('drag', doc, jsc._pointerMoveEvent[pointerType],\r
+                               jsc.onDocumentPointerMove(e, target, controlName, pointerType, offset));\r
+                       jsc.attachGroupEvent('drag', doc, jsc._pointerEndEvent[pointerType],\r
+                               jsc.onDocumentPointerEnd(e, target, controlName, pointerType));\r
+               };\r
+\r
+               registerDragEvents(document, [0, 0]);\r
+\r
+               if (window.parent && window.frameElement) {\r
+                       var rect = window.frameElement.getBoundingClientRect();\r
+                       var ofs = [-rect.left, -rect.top];\r
+                       registerDragEvents(window.parent.window.document, ofs);\r
+               }\r
+\r
+               var abs = jsc.getAbsPointerPos(e);\r
+               var rel = jsc.getRelPointerPos(e);\r
+               jsc._pointerOrigin = {\r
+                       x: abs.x - rel.x,\r
+                       y: abs.y - rel.y\r
+               };\r
+\r
+               switch (controlName) {\r
+               case 'pad':\r
+                       // if the slider is at the bottom, move it up\r
+                       switch (jsc.getSliderComponent(thisObj)) {\r
+                       case 's': if (thisObj.hsv[1] === 0) { thisObj.fromHSV(null, 100, null); }; break;\r
+                       case 'v': if (thisObj.hsv[2] === 0) { thisObj.fromHSV(null, null, 100); }; break;\r
+                       }\r
+                       jsc.setPad(thisObj, e, 0, 0);\r
+                       break;\r
+\r
+               case 'sld':\r
+                       jsc.setSld(thisObj, e, 0);\r
+                       break;\r
+               }\r
+\r
+               jsc.dispatchFineChange(thisObj);\r
+       },\r
+\r
+\r
+       onDocumentPointerMove : function (e, target, controlName, pointerType, offset) {\r
+               return function (e) {\r
+                       var thisObj = target._jscInstance;\r
+                       switch (controlName) {\r
+                       case 'pad':\r
+                               if (!e) { e = window.event; }\r
+                               jsc.setPad(thisObj, e, offset[0], offset[1]);\r
+                               jsc.dispatchFineChange(thisObj);\r
+                               break;\r
+\r
+                       case 'sld':\r
+                               if (!e) { e = window.event; }\r
+                               jsc.setSld(thisObj, e, offset[1]);\r
+                               jsc.dispatchFineChange(thisObj);\r
+                               break;\r
+                       }\r
+               }\r
+       },\r
+\r
+\r
+       onDocumentPointerEnd : function (e, target, controlName, pointerType) {\r
+               return function (e) {\r
+                       var thisObj = target._jscInstance;\r
+                       jsc.detachGroupEvents('drag');\r
+                       jsc.releaseTarget();\r
+                       // Always dispatch changes after detaching outstanding mouse handlers,\r
+                       // in case some user interaction will occur in user's onchange callback\r
+                       // that would intrude with current mouse events\r
+                       jsc.dispatchChange(thisObj);\r
+               };\r
+       },\r
+\r
+\r
+       dispatchChange : function (thisObj) {\r
+               if (thisObj.valueElement) {\r
+                       if (jsc.isElementType(thisObj.valueElement, 'input')) {\r
+                               jsc.fireEvent(thisObj.valueElement, 'change');\r
+                       }\r
+               }\r
+       },\r
+\r
+\r
+       dispatchFineChange : function (thisObj) {\r
+               if (thisObj.onFineChange) {\r
+                       var callback;\r
+                       if (typeof thisObj.onFineChange === 'string') {\r
+                               callback = new Function (thisObj.onFineChange);\r
+                       } else {\r
+                               callback = thisObj.onFineChange;\r
+                       }\r
+                       callback.call(thisObj);\r
+               }\r
+       },\r
+\r
+\r
+       setPad : function (thisObj, e, ofsX, ofsY) {\r
+               var pointerAbs = jsc.getAbsPointerPos(e);\r
+               var x = ofsX + pointerAbs.x - jsc._pointerOrigin.x - thisObj.padding - thisObj.insetWidth;\r
+               var y = ofsY + pointerAbs.y - jsc._pointerOrigin.y - thisObj.padding - thisObj.insetWidth;\r
+\r
+               var xVal = x * (360 / (thisObj.width - 1));\r
+               var yVal = 100 - (y * (100 / (thisObj.height - 1)));\r
+\r
+               switch (jsc.getPadYComponent(thisObj)) {\r
+               case 's': thisObj.fromHSV(xVal, yVal, null, jsc.leaveSld); break;\r
+               case 'v': thisObj.fromHSV(xVal, null, yVal, jsc.leaveSld); break;\r
+               }\r
+       },\r
+\r
+\r
+       setSld : function (thisObj, e, ofsY) {\r
+               var pointerAbs = jsc.getAbsPointerPos(e);\r
+               var y = ofsY + pointerAbs.y - jsc._pointerOrigin.y - thisObj.padding - thisObj.insetWidth;\r
+\r
+               var yVal = 100 - (y * (100 / (thisObj.height - 1)));\r
+\r
+               switch (jsc.getSliderComponent(thisObj)) {\r
+               case 's': thisObj.fromHSV(null, yVal, null, jsc.leavePad); break;\r
+               case 'v': thisObj.fromHSV(null, null, yVal, jsc.leavePad); break;\r
+               }\r
+       },\r
+\r
+\r
+       _vmlNS : 'jsc_vml_',\r
+       _vmlCSS : 'jsc_vml_css_',\r
+       _vmlReady : false,\r
+\r
+\r
+       initVML : function () {\r
+               if (!jsc._vmlReady) {\r
+                       // init VML namespace\r
+                       var doc = document;\r
+                       if (!doc.namespaces[jsc._vmlNS]) {\r
+                               doc.namespaces.add(jsc._vmlNS, 'urn:schemas-microsoft-com:vml');\r
+                       }\r
+                       if (!doc.styleSheets[jsc._vmlCSS]) {\r
+                               var tags = ['shape', 'shapetype', 'group', 'background', 'path', 'formulas', 'handles', 'fill', 'stroke', 'shadow', 'textbox', 'textpath', 'imagedata', 'line', 'polyline', 'curve', 'rect', 'roundrect', 'oval', 'arc', 'image'];\r
+                               var ss = doc.createStyleSheet();\r
+                               ss.owningElement.id = jsc._vmlCSS;\r
+                               for (var i = 0; i < tags.length; i += 1) {\r
+                                       ss.addRule(jsc._vmlNS + '\\:' + tags[i], 'behavior:url(#default#VML);');\r
+                               }\r
+                       }\r
+                       jsc._vmlReady = true;\r
+               }\r
+       },\r
+\r
+\r
+       createPalette : function () {\r
+\r
+               var paletteObj = {\r
+                       elm: null,\r
+                       draw: null\r
+               };\r
+\r
+               if (jsc.isCanvasSupported) {\r
+                       // Canvas implementation for modern browsers\r
+\r
+                       var canvas = document.createElement('canvas');\r
+                       var ctx = canvas.getContext('2d');\r
+\r
+                       var drawFunc = function (width, height, type) {\r
+                               canvas.width = width;\r
+                               canvas.height = height;\r
+\r
+                               ctx.clearRect(0, 0, canvas.width, canvas.height);\r
+\r
+                               var hGrad = ctx.createLinearGradient(0, 0, canvas.width, 0);\r
+                               hGrad.addColorStop(0 / 6, '#F00');\r
+                               hGrad.addColorStop(1 / 6, '#FF0');\r
+                               hGrad.addColorStop(2 / 6, '#0F0');\r
+                               hGrad.addColorStop(3 / 6, '#0FF');\r
+                               hGrad.addColorStop(4 / 6, '#00F');\r
+                               hGrad.addColorStop(5 / 6, '#F0F');\r
+                               hGrad.addColorStop(6 / 6, '#F00');\r
+\r
+                               ctx.fillStyle = hGrad;\r
+                               ctx.fillRect(0, 0, canvas.width, canvas.height);\r
+\r
+                               var vGrad = ctx.createLinearGradient(0, 0, 0, canvas.height);\r
+                               switch (type.toLowerCase()) {\r
+                               case 's':\r
+                                       vGrad.addColorStop(0, 'rgba(255,255,255,0)');\r
+                                       vGrad.addColorStop(1, 'rgba(255,255,255,1)');\r
+                                       break;\r
+                               case 'v':\r
+                                       vGrad.addColorStop(0, 'rgba(0,0,0,0)');\r
+                                       vGrad.addColorStop(1, 'rgba(0,0,0,1)');\r
+                                       break;\r
+                               }\r
+                               ctx.fillStyle = vGrad;\r
+                               ctx.fillRect(0, 0, canvas.width, canvas.height);\r
+                       };\r
+\r
+                       paletteObj.elm = canvas;\r
+                       paletteObj.draw = drawFunc;\r
+\r
+               } else {\r
+                       // VML fallback for IE 7 and 8\r
+\r
+                       jsc.initVML();\r
+\r
+                       var vmlContainer = document.createElement('div');\r
+                       vmlContainer.style.position = 'relative';\r
+                       vmlContainer.style.overflow = 'hidden';\r
+\r
+                       var hGrad = document.createElement(jsc._vmlNS + ':fill');\r
+                       hGrad.type = 'gradient';\r
+                       hGrad.method = 'linear';\r
+                       hGrad.angle = '90';\r
+                       hGrad.colors = '16.67% #F0F, 33.33% #00F, 50% #0FF, 66.67% #0F0, 83.33% #FF0'\r
+\r
+                       var hRect = document.createElement(jsc._vmlNS + ':rect');\r
+                       hRect.style.position = 'absolute';\r
+                       hRect.style.left = -1 + 'px';\r
+                       hRect.style.top = -1 + 'px';\r
+                       hRect.stroked = false;\r
+                       hRect.appendChild(hGrad);\r
+                       vmlContainer.appendChild(hRect);\r
+\r
+                       var vGrad = document.createElement(jsc._vmlNS + ':fill');\r
+                       vGrad.type = 'gradient';\r
+                       vGrad.method = 'linear';\r
+                       vGrad.angle = '180';\r
+                       vGrad.opacity = '0';\r
+\r
+                       var vRect = document.createElement(jsc._vmlNS + ':rect');\r
+                       vRect.style.position = 'absolute';\r
+                       vRect.style.left = -1 + 'px';\r
+                       vRect.style.top = -1 + 'px';\r
+                       vRect.stroked = false;\r
+                       vRect.appendChild(vGrad);\r
+                       vmlContainer.appendChild(vRect);\r
+\r
+                       var drawFunc = function (width, height, type) {\r
+                               vmlContainer.style.width = width + 'px';\r
+                               vmlContainer.style.height = height + 'px';\r
+\r
+                               hRect.style.width =\r
+                               vRect.style.width =\r
+                                       (width + 1) + 'px';\r
+                               hRect.style.height =\r
+                               vRect.style.height =\r
+                                       (height + 1) + 'px';\r
+\r
+                               // Colors must be specified during every redraw, otherwise IE won't display\r
+                               // a full gradient during a subsequential redraw\r
+                               hGrad.color = '#F00';\r
+                               hGrad.color2 = '#F00';\r
+\r
+                               switch (type.toLowerCase()) {\r
+                               case 's':\r
+                                       vGrad.color = vGrad.color2 = '#FFF';\r
+                                       break;\r
+                               case 'v':\r
+                                       vGrad.color = vGrad.color2 = '#000';\r
+                                       break;\r
+                               }\r
+                       };\r
+                       \r
+                       paletteObj.elm = vmlContainer;\r
+                       paletteObj.draw = drawFunc;\r
+               }\r
+\r
+               return paletteObj;\r
+       },\r
+\r
+\r
+       createSliderGradient : function () {\r
+\r
+               var sliderObj = {\r
+                       elm: null,\r
+                       draw: null\r
+               };\r
+\r
+               if (jsc.isCanvasSupported) {\r
+                       // Canvas implementation for modern browsers\r
+\r
+                       var canvas = document.createElement('canvas');\r
+                       var ctx = canvas.getContext('2d');\r
+\r
+                       var drawFunc = function (width, height, color1, color2) {\r
+                               canvas.width = width;\r
+                               canvas.height = height;\r
+\r
+                               ctx.clearRect(0, 0, canvas.width, canvas.height);\r
+\r
+                               var grad = ctx.createLinearGradient(0, 0, 0, canvas.height);\r
+                               grad.addColorStop(0, color1);\r
+                               grad.addColorStop(1, color2);\r
+\r
+                               ctx.fillStyle = grad;\r
+                               ctx.fillRect(0, 0, canvas.width, canvas.height);\r
+                       };\r
+\r
+                       sliderObj.elm = canvas;\r
+                       sliderObj.draw = drawFunc;\r
+\r
+               } else {\r
+                       // VML fallback for IE 7 and 8\r
+\r
+                       jsc.initVML();\r
+\r
+                       var vmlContainer = document.createElement('div');\r
+                       vmlContainer.style.position = 'relative';\r
+                       vmlContainer.style.overflow = 'hidden';\r
+\r
+                       var grad = document.createElement(jsc._vmlNS + ':fill');\r
+                       grad.type = 'gradient';\r
+                       grad.method = 'linear';\r
+                       grad.angle = '180';\r
+\r
+                       var rect = document.createElement(jsc._vmlNS + ':rect');\r
+                       rect.style.position = 'absolute';\r
+                       rect.style.left = -1 + 'px';\r
+                       rect.style.top = -1 + 'px';\r
+                       rect.stroked = false;\r
+                       rect.appendChild(grad);\r
+                       vmlContainer.appendChild(rect);\r
+\r
+                       var drawFunc = function (width, height, color1, color2) {\r
+                               vmlContainer.style.width = width + 'px';\r
+                               vmlContainer.style.height = height + 'px';\r
+\r
+                               rect.style.width = (width + 1) + 'px';\r
+                               rect.style.height = (height + 1) + 'px';\r
+\r
+                               grad.color = color1;\r
+                               grad.color2 = color2;\r
+                       };\r
+                       \r
+                       sliderObj.elm = vmlContainer;\r
+                       sliderObj.draw = drawFunc;\r
+               }\r
+\r
+               return sliderObj;\r
+       },\r
+\r
+\r
+       leaveValue : 1<<0,\r
+       leaveStyle : 1<<1,\r
+       leavePad : 1<<2,\r
+       leaveSld : 1<<3,\r
+\r
+\r
+       BoxShadow : (function () {\r
+               var BoxShadow = function (hShadow, vShadow, blur, spread, color, inset) {\r
+                       this.hShadow = hShadow;\r
+                       this.vShadow = vShadow;\r
+                       this.blur = blur;\r
+                       this.spread = spread;\r
+                       this.color = color;\r
+                       this.inset = !!inset;\r
+               };\r
+\r
+               BoxShadow.prototype.toString = function () {\r
+                       var vals = [\r
+                               Math.round(this.hShadow) + 'px',\r
+                               Math.round(this.vShadow) + 'px',\r
+                               Math.round(this.blur) + 'px',\r
+                               Math.round(this.spread) + 'px',\r
+                               this.color\r
+                       ];\r
+                       if (this.inset) {\r
+                               vals.push('inset');\r
+                       }\r
+                       return vals.join(' ');\r
+               };\r
+\r
+               return BoxShadow;\r
+       })(),\r
+\r
+\r
+       //\r
+       // Usage:\r
+       // var myColor = new jscolor(<targetElement> [, <options>])\r
+       //\r
+\r
+       jscolor : function (targetElement, options) {\r
+\r
+               // General options\r
+               //\r
+               this.value = null; // initial HEX color. To change it later, use methods fromString(), fromHSV() and fromRGB()\r
+               this.valueElement = targetElement; // element that will be used to display and input the color code\r
+               this.styleElement = targetElement; // element that will preview the picked color using CSS backgroundColor\r
+               this.required = true; // whether the associated text <input> can be left empty\r
+               this.refine = true; // whether to refine the entered color code (e.g. uppercase it and remove whitespace)\r
+               this.hash = false; // whether to prefix the HEX color code with # symbol\r
+               this.uppercase = true; // whether to show the color code in upper case\r
+               this.onFineChange = null; // called instantly every time the color changes (value can be either a function or a string with javascript code)\r
+               this.activeClass = 'jscolor-active'; // class to be set to the target element when a picker window is open on it\r
+               this.overwriteImportant = false; // whether to overwrite colors of styleElement using !important\r
+               this.minS = 0; // min allowed saturation (0 - 100)\r
+               this.maxS = 100; // max allowed saturation (0 - 100)\r
+               this.minV = 0; // min allowed value (brightness) (0 - 100)\r
+               this.maxV = 100; // max allowed value (brightness) (0 - 100)\r
+\r
+               // Accessing the picked color\r
+               //\r
+               this.hsv = [0, 0, 100]; // read-only  [0-360, 0-100, 0-100]\r
+               this.rgb = [255, 255, 255]; // read-only  [0-255, 0-255, 0-255]\r
+\r
+               // Color Picker options\r
+               //\r
+               this.width = 181; // width of color palette (in px)\r
+               this.height = 101; // height of color palette (in px)\r
+               this.showOnClick = true; // whether to display the color picker when user clicks on its target element\r
+               this.mode = 'HSV'; // HSV | HVS | HS | HV - layout of the color picker controls\r
+               this.position = 'bottom'; // left | right | top | bottom - position relative to the target element\r
+               this.smartPosition = true; // automatically change picker position when there is not enough space for it\r
+               this.sliderSize = 16; // px\r
+               this.crossSize = 8; // px\r
+               this.closable = false; // whether to display the Close button\r
+               this.closeText = 'Close';\r
+               this.buttonColor = '#000000'; // CSS color\r
+               this.buttonHeight = 18; // px\r
+               this.padding = 12; // px\r
+               this.backgroundColor = '#FFFFFF'; // CSS color\r
+               this.borderWidth = 1; // px\r
+               this.borderColor = '#BBBBBB'; // CSS color\r
+               this.borderRadius = 8; // px\r
+               this.insetWidth = 1; // px\r
+               this.insetColor = '#BBBBBB'; // CSS color\r
+               this.shadow = true; // whether to display shadow\r
+               this.shadowBlur = 15; // px\r
+               this.shadowColor = 'rgba(0,0,0,0.2)'; // CSS color\r
+               this.pointerColor = '#4C4C4C'; // px\r
+               this.pointerBorderColor = '#FFFFFF'; // px\r
+        this.pointerBorderWidth = 1; // px\r
+        this.pointerThickness = 2; // px\r
+               this.zIndex = 1000;\r
+               this.container = null; // where to append the color picker (BODY element by default)\r
+\r
+\r
+               for (var opt in options) {\r
+                       if (options.hasOwnProperty(opt)) {\r
+                               this[opt] = options[opt];\r
+                       }\r
+               }\r
+\r
+\r
+               this.hide = function () {\r
+                       if (isPickerOwner()) {\r
+                               detachPicker();\r
+                       }\r
+               };\r
+\r
+\r
+               this.show = function () {\r
+                       drawPicker();\r
+               };\r
+\r
+\r
+               this.redraw = function () {\r
+                       if (isPickerOwner()) {\r
+                               drawPicker();\r
+                       }\r
+               };\r
+\r
+\r
+               this.importColor = function () {\r
+                       if (!this.valueElement) {\r
+                               this.exportColor();\r
+                       } else {\r
+                               if (jsc.isElementType(this.valueElement, 'input')) {\r
+                                       if (!this.refine) {\r
+                                               if (!this.fromString(this.valueElement.value, jsc.leaveValue)) {\r
+                                                       if (this.styleElement) {\r
+                                                               this.styleElement.style.backgroundImage = this.styleElement._jscOrigStyle.backgroundImage;\r
+                                                               this.styleElement.style.backgroundColor = this.styleElement._jscOrigStyle.backgroundColor;\r
+                                                               this.styleElement.style.color = this.styleElement._jscOrigStyle.color;\r
+                                                       }\r
+                                                       this.exportColor(jsc.leaveValue | jsc.leaveStyle);\r
+                                               }\r
+                                       } else if (!this.required && /^\s*$/.test(this.valueElement.value)) {\r
+                                               this.valueElement.value = '';\r
+                                               if (this.styleElement) {\r
+                                                       this.styleElement.style.backgroundImage = this.styleElement._jscOrigStyle.backgroundImage;\r
+                                                       this.styleElement.style.backgroundColor = this.styleElement._jscOrigStyle.backgroundColor;\r
+                                                       this.styleElement.style.color = this.styleElement._jscOrigStyle.color;\r
+                                               }\r
+                                               this.exportColor(jsc.leaveValue | jsc.leaveStyle);\r
+\r
+                                       } else if (this.fromString(this.valueElement.value)) {\r
+                                               // managed to import color successfully from the value -> OK, don't do anything\r
+                                       } else {\r
+                                               this.exportColor();\r
+                                       }\r
+                               } else {\r
+                                       // not an input element -> doesn't have any value\r
+                                       this.exportColor();\r
+                               }\r
+                       }\r
+               };\r
+\r
+\r
+               this.exportColor = function (flags) {\r
+                       if (!(flags & jsc.leaveValue) && this.valueElement) {\r
+                               var value = this.toString();\r
+                               if (this.uppercase) { value = value.toUpperCase(); }\r
+                               if (this.hash) { value = '#' + value; }\r
+\r
+                               if (jsc.isElementType(this.valueElement, 'input')) {\r
+                                       this.valueElement.value = value;\r
+                               } else {\r
+                                       this.valueElement.innerHTML = value;\r
+                               }\r
+                       }\r
+                       if (!(flags & jsc.leaveStyle)) {\r
+                               if (this.styleElement) {\r
+                                       var bgColor = '#' + this.toString();\r
+                                       var fgColor = this.isLight() ? '#000' : '#FFF';\r
+\r
+                                       this.styleElement.style.backgroundImage = 'none';\r
+                                       this.styleElement.style.backgroundColor = bgColor;\r
+                                       this.styleElement.style.color = fgColor;\r
+\r
+                                       if (this.overwriteImportant) {\r
+                                               this.styleElement.setAttribute('style',\r
+                                                       'background: ' + bgColor + ' !important; ' +\r
+                                                       'color: ' + fgColor + ' !important;'\r
+                                               );\r
+                                       }\r
+                               }\r
+                       }\r
+                       if (!(flags & jsc.leavePad) && isPickerOwner()) {\r
+                               redrawPad();\r
+                       }\r
+                       if (!(flags & jsc.leaveSld) && isPickerOwner()) {\r
+                               redrawSld();\r
+                       }\r
+               };\r
+\r
+\r
+               // h: 0-360\r
+               // s: 0-100\r
+               // v: 0-100\r
+               //\r
+               this.fromHSV = function (h, s, v, flags) { // null = don't change\r
+                       if (h !== null) {\r
+                               if (isNaN(h)) { return false; }\r
+                               h = Math.max(0, Math.min(360, h));\r
+                       }\r
+                       if (s !== null) {\r
+                               if (isNaN(s)) { return false; }\r
+                               s = Math.max(0, Math.min(100, this.maxS, s), this.minS);\r
+                       }\r
+                       if (v !== null) {\r
+                               if (isNaN(v)) { return false; }\r
+                               v = Math.max(0, Math.min(100, this.maxV, v), this.minV);\r
+                       }\r
+\r
+                       this.rgb = HSV_RGB(\r
+                               h===null ? this.hsv[0] : (this.hsv[0]=h),\r
+                               s===null ? this.hsv[1] : (this.hsv[1]=s),\r
+                               v===null ? this.hsv[2] : (this.hsv[2]=v)\r
+                       );\r
+\r
+                       this.exportColor(flags);\r
+               };\r
+\r
+\r
+               // r: 0-255\r
+               // g: 0-255\r
+               // b: 0-255\r
+               //\r
+               this.fromRGB = function (r, g, b, flags) { // null = don't change\r
+                       if (r !== null) {\r
+                               if (isNaN(r)) { return false; }\r
+                               r = Math.max(0, Math.min(255, r));\r
+                       }\r
+                       if (g !== null) {\r
+                               if (isNaN(g)) { return false; }\r
+                               g = Math.max(0, Math.min(255, g));\r
+                       }\r
+                       if (b !== null) {\r
+                               if (isNaN(b)) { return false; }\r
+                               b = Math.max(0, Math.min(255, b));\r
+                       }\r
+\r
+                       var hsv = RGB_HSV(\r
+                               r===null ? this.rgb[0] : r,\r
+                               g===null ? this.rgb[1] : g,\r
+                               b===null ? this.rgb[2] : b\r
+                       );\r
+                       if (hsv[0] !== null) {\r
+                               this.hsv[0] = Math.max(0, Math.min(360, hsv[0]));\r
+                       }\r
+                       if (hsv[2] !== 0) {\r
+                               this.hsv[1] = hsv[1]===null ? null : Math.max(0, this.minS, Math.min(100, this.maxS, hsv[1]));\r
+                       }\r
+                       this.hsv[2] = hsv[2]===null ? null : Math.max(0, this.minV, Math.min(100, this.maxV, hsv[2]));\r
+\r
+                       // update RGB according to final HSV, as some values might be trimmed\r
+                       var rgb = HSV_RGB(this.hsv[0], this.hsv[1], this.hsv[2]);\r
+                       this.rgb[0] = rgb[0];\r
+                       this.rgb[1] = rgb[1];\r
+                       this.rgb[2] = rgb[2];\r
+\r
+                       this.exportColor(flags);\r
+               };\r
+\r
+\r
+               this.fromString = function (str, flags) {\r
+                       var m;\r
+                       if (m = str.match(/^\W*([0-9A-F]{3}([0-9A-F]{3})?)\W*$/i)) {\r
+                               // HEX notation\r
+                               //\r
+\r
+                               if (m[1].length === 6) {\r
+                                       // 6-char notation\r
+                                       this.fromRGB(\r
+                                               parseInt(m[1].substr(0,2),16),\r
+                                               parseInt(m[1].substr(2,2),16),\r
+                                               parseInt(m[1].substr(4,2),16),\r
+                                               flags\r
+                                       );\r
+                               } else {\r
+                                       // 3-char notation\r
+                                       this.fromRGB(\r
+                                               parseInt(m[1].charAt(0) + m[1].charAt(0),16),\r
+                                               parseInt(m[1].charAt(1) + m[1].charAt(1),16),\r
+                                               parseInt(m[1].charAt(2) + m[1].charAt(2),16),\r
+                                               flags\r
+                                       );\r
+                               }\r
+                               return true;\r
+\r
+                       } else if (m = str.match(/^\W*rgba?\(([^)]*)\)\W*$/i)) {\r
+                               var params = m[1].split(',');\r
+                               var re = /^\s*(\d*)(\.\d+)?\s*$/;\r
+                               var mR, mG, mB;\r
+                               if (\r
+                                       params.length >= 3 &&\r
+                                       (mR = params[0].match(re)) &&\r
+                                       (mG = params[1].match(re)) &&\r
+                                       (mB = params[2].match(re))\r
+                               ) {\r
+                                       var r = parseFloat((mR[1] || '0') + (mR[2] || ''));\r
+                                       var g = parseFloat((mG[1] || '0') + (mG[2] || ''));\r
+                                       var b = parseFloat((mB[1] || '0') + (mB[2] || ''));\r
+                                       this.fromRGB(r, g, b, flags);\r
+                                       return true;\r
+                               }\r
+                       }\r
+                       return false;\r
+               };\r
+\r
+\r
+               this.toString = function () {\r
+                       return (\r
+                               (0x100 | Math.round(this.rgb[0])).toString(16).substr(1) +\r
+                               (0x100 | Math.round(this.rgb[1])).toString(16).substr(1) +\r
+                               (0x100 | Math.round(this.rgb[2])).toString(16).substr(1)\r
+                       );\r
+               };\r
+\r
+\r
+               this.toHEXString = function () {\r
+                       return '#' + this.toString().toUpperCase();\r
+               };\r
+\r
+\r
+               this.toRGBString = function () {\r
+                       return ('rgb(' +\r
+                               Math.round(this.rgb[0]) + ',' +\r
+                               Math.round(this.rgb[1]) + ',' +\r
+                               Math.round(this.rgb[2]) + ')'\r
+                       );\r
+               };\r
+\r
+\r
+               this.isLight = function () {\r
+                       return (\r
+                               0.213 * this.rgb[0] +\r
+                               0.715 * this.rgb[1] +\r
+                               0.072 * this.rgb[2] >\r
+                               255 / 2\r
+                       );\r
+               };\r
+\r
+\r
+               this._processParentElementsInDOM = function () {\r
+                       if (this._linkedElementsProcessed) { return; }\r
+                       this._linkedElementsProcessed = true;\r
+\r
+                       var elm = this.targetElement;\r
+                       do {\r
+                               // If the target element or one of its parent nodes has fixed position,\r
+                               // then use fixed positioning instead\r
+                               //\r
+                               // Note: In Firefox, getComputedStyle returns null in a hidden iframe,\r
+                               // that's why we need to check if the returned style object is non-empty\r
+                               var currStyle = jsc.getStyle(elm);\r
+                               if (currStyle && currStyle.position.toLowerCase() === 'fixed') {\r
+                                       this.fixed = true;\r
+                               }\r
+\r
+                               if (elm !== this.targetElement) {\r
+                                       // Ensure to attach onParentScroll only once to each parent element\r
+                                       // (multiple targetElements can share the same parent nodes)\r
+                                       //\r
+                                       // Note: It's not just offsetParents that can be scrollable,\r
+                                       // that's why we loop through all parent nodes\r
+                                       if (!elm._jscEventsAttached) {\r
+                                               jsc.attachEvent(elm, 'scroll', jsc.onParentScroll);\r
+                                               elm._jscEventsAttached = true;\r
+                                       }\r
+                               }\r
+                       } while ((elm = elm.parentNode) && !jsc.isElementType(elm, 'body'));\r
+               };\r
+\r
+\r
+               // r: 0-255\r
+               // g: 0-255\r
+               // b: 0-255\r
+               //\r
+               // returns: [ 0-360, 0-100, 0-100 ]\r
+               //\r
+               function RGB_HSV (r, g, b) {\r
+                       r /= 255;\r
+                       g /= 255;\r
+                       b /= 255;\r
+                       var n = Math.min(Math.min(r,g),b);\r
+                       var v = Math.max(Math.max(r,g),b);\r
+                       var m = v - n;\r
+                       if (m === 0) { return [ null, 0, 100 * v ]; }\r
+                       var h = r===n ? 3+(b-g)/m : (g===n ? 5+(r-b)/m : 1+(g-r)/m);\r
+                       return [\r
+                               60 * (h===6?0:h),\r
+                               100 * (m/v),\r
+                               100 * v\r
+                       ];\r
+               }\r
+\r
+\r
+               // h: 0-360\r
+               // s: 0-100\r
+               // v: 0-100\r
+               //\r
+               // returns: [ 0-255, 0-255, 0-255 ]\r
+               //\r
+               function HSV_RGB (h, s, v) {\r
+                       var u = 255 * (v / 100);\r
+\r
+                       if (h === null) {\r
+                               return [ u, u, u ];\r
+                       }\r
+\r
+                       h /= 60;\r
+                       s /= 100;\r
+\r
+                       var i = Math.floor(h);\r
+                       var f = i%2 ? h-i : 1-(h-i);\r
+                       var m = u * (1 - s);\r
+                       var n = u * (1 - s * f);\r
+                       switch (i) {\r
+                               case 6:\r
+                               case 0: return [u,n,m];\r
+                               case 1: return [n,u,m];\r
+                               case 2: return [m,u,n];\r
+                               case 3: return [m,n,u];\r
+                               case 4: return [n,m,u];\r
+                               case 5: return [u,m,n];\r
+                       }\r
+               }\r
+\r
+\r
+               function detachPicker () {\r
+                       jsc.unsetClass(THIS.targetElement, THIS.activeClass);\r
+                       jsc.picker.wrap.parentNode.removeChild(jsc.picker.wrap);\r
+                       delete jsc.picker.owner;\r
+               }\r
+\r
+\r
+               function drawPicker () {\r
+\r
+                       // At this point, when drawing the picker, we know what the parent elements are\r
+                       // and we can do all related DOM operations, such as registering events on them\r
+                       // or checking their positioning\r
+                       THIS._processParentElementsInDOM();\r
+\r
+                       if (!jsc.picker) {\r
+                               jsc.picker = {\r
+                                       owner: null,\r
+                                       wrap : document.createElement('div'),\r
+                                       box : document.createElement('div'),\r
+                                       boxS : document.createElement('div'), // shadow area\r
+                                       boxB : document.createElement('div'), // border\r
+                                       pad : document.createElement('div'),\r
+                                       padB : document.createElement('div'), // border\r
+                                       padM : document.createElement('div'), // mouse/touch area\r
+                                       padPal : jsc.createPalette(),\r
+                                       cross : document.createElement('div'),\r
+                                       crossBY : document.createElement('div'), // border Y\r
+                                       crossBX : document.createElement('div'), // border X\r
+                                       crossLY : document.createElement('div'), // line Y\r
+                                       crossLX : document.createElement('div'), // line X\r
+                                       sld : document.createElement('div'),\r
+                                       sldB : document.createElement('div'), // border\r
+                                       sldM : document.createElement('div'), // mouse/touch area\r
+                                       sldGrad : jsc.createSliderGradient(),\r
+                                       sldPtrS : document.createElement('div'), // slider pointer spacer\r
+                                       sldPtrIB : document.createElement('div'), // slider pointer inner border\r
+                                       sldPtrMB : document.createElement('div'), // slider pointer middle border\r
+                                       sldPtrOB : document.createElement('div'), // slider pointer outer border\r
+                                       btn : document.createElement('div'),\r
+                                       btnT : document.createElement('span') // text\r
+                               };\r
+\r
+                               jsc.picker.pad.appendChild(jsc.picker.padPal.elm);\r
+                               jsc.picker.padB.appendChild(jsc.picker.pad);\r
+                               jsc.picker.cross.appendChild(jsc.picker.crossBY);\r
+                               jsc.picker.cross.appendChild(jsc.picker.crossBX);\r
+                               jsc.picker.cross.appendChild(jsc.picker.crossLY);\r
+                               jsc.picker.cross.appendChild(jsc.picker.crossLX);\r
+                               jsc.picker.padB.appendChild(jsc.picker.cross);\r
+                               jsc.picker.box.appendChild(jsc.picker.padB);\r
+                               jsc.picker.box.appendChild(jsc.picker.padM);\r
+\r
+                               jsc.picker.sld.appendChild(jsc.picker.sldGrad.elm);\r
+                               jsc.picker.sldB.appendChild(jsc.picker.sld);\r
+                               jsc.picker.sldB.appendChild(jsc.picker.sldPtrOB);\r
+                               jsc.picker.sldPtrOB.appendChild(jsc.picker.sldPtrMB);\r
+                               jsc.picker.sldPtrMB.appendChild(jsc.picker.sldPtrIB);\r
+                               jsc.picker.sldPtrIB.appendChild(jsc.picker.sldPtrS);\r
+                               jsc.picker.box.appendChild(jsc.picker.sldB);\r
+                               jsc.picker.box.appendChild(jsc.picker.sldM);\r
+\r
+                               jsc.picker.btn.appendChild(jsc.picker.btnT);\r
+                               jsc.picker.box.appendChild(jsc.picker.btn);\r
+\r
+                               jsc.picker.boxB.appendChild(jsc.picker.box);\r
+                               jsc.picker.wrap.appendChild(jsc.picker.boxS);\r
+                               jsc.picker.wrap.appendChild(jsc.picker.boxB);\r
+                       }\r
+\r
+                       var p = jsc.picker;\r
+\r
+                       var displaySlider = !!jsc.getSliderComponent(THIS);\r
+                       var dims = jsc.getPickerDims(THIS);\r
+                       var crossOuterSize = (2 * THIS.pointerBorderWidth + THIS.pointerThickness + 2 * THIS.crossSize);\r
+                       var padToSliderPadding = jsc.getPadToSliderPadding(THIS);\r
+                       var borderRadius = Math.min(\r
+                               THIS.borderRadius,\r
+                               Math.round(THIS.padding * Math.PI)); // px\r
+                       var padCursor = 'crosshair';\r
+\r
+                       // wrap\r
+                       p.wrap.style.clear = 'both';\r
+                       p.wrap.style.width = (dims[0] + 2 * THIS.borderWidth) + 'px';\r
+                       p.wrap.style.height = (dims[1] + 2 * THIS.borderWidth) + 'px';\r
+                       p.wrap.style.zIndex = THIS.zIndex;\r
+\r
+                       // picker\r
+                       p.box.style.width = dims[0] + 'px';\r
+                       p.box.style.height = dims[1] + 'px';\r
+\r
+                       p.boxS.style.position = 'absolute';\r
+                       p.boxS.style.left = '0';\r
+                       p.boxS.style.top = '0';\r
+                       p.boxS.style.width = '100%';\r
+                       p.boxS.style.height = '100%';\r
+                       jsc.setBorderRadius(p.boxS, borderRadius + 'px');\r
+\r
+                       // picker border\r
+                       p.boxB.style.position = 'relative';\r
+                       p.boxB.style.border = THIS.borderWidth + 'px solid';\r
+                       p.boxB.style.borderColor = THIS.borderColor;\r
+                       p.boxB.style.background = THIS.backgroundColor;\r
+                       jsc.setBorderRadius(p.boxB, borderRadius + 'px');\r
+\r
+                       // IE hack:\r
+                       // If the element is transparent, IE will trigger the event on the elements under it,\r
+                       // e.g. on Canvas or on elements with border\r
+                       p.padM.style.background =\r
+                       p.sldM.style.background =\r
+                               '#FFF';\r
+                       jsc.setStyle(p.padM, 'opacity', '0');\r
+                       jsc.setStyle(p.sldM, 'opacity', '0');\r
+\r
+                       // pad\r
+                       p.pad.style.position = 'relative';\r
+                       p.pad.style.width = THIS.width + 'px';\r
+                       p.pad.style.height = THIS.height + 'px';\r
+\r
+                       // pad palettes (HSV and HVS)\r
+                       p.padPal.draw(THIS.width, THIS.height, jsc.getPadYComponent(THIS));\r
+\r
+                       // pad border\r
+                       p.padB.style.position = 'absolute';\r
+                       p.padB.style.left = THIS.padding + 'px';\r
+                       p.padB.style.top = THIS.padding + 'px';\r
+                       p.padB.style.border = THIS.insetWidth + 'px solid';\r
+                       p.padB.style.borderColor = THIS.insetColor;\r
+\r
+                       // pad mouse area\r
+                       p.padM._jscInstance = THIS;\r
+                       p.padM._jscControlName = 'pad';\r
+                       p.padM.style.position = 'absolute';\r
+                       p.padM.style.left = '0';\r
+                       p.padM.style.top = '0';\r
+                       p.padM.style.width = (THIS.padding + 2 * THIS.insetWidth + THIS.width + padToSliderPadding / 2) + 'px';\r
+                       p.padM.style.height = dims[1] + 'px';\r
+                       p.padM.style.cursor = padCursor;\r
+\r
+                       // pad cross\r
+                       p.cross.style.position = 'absolute';\r
+                       p.cross.style.left =\r
+                       p.cross.style.top =\r
+                               '0';\r
+                       p.cross.style.width =\r
+                       p.cross.style.height =\r
+                               crossOuterSize + 'px';\r
+\r
+                       // pad cross border Y and X\r
+                       p.crossBY.style.position =\r
+                       p.crossBX.style.position =\r
+                               'absolute';\r
+                       p.crossBY.style.background =\r
+                       p.crossBX.style.background =\r
+                               THIS.pointerBorderColor;\r
+                       p.crossBY.style.width =\r
+                       p.crossBX.style.height =\r
+                               (2 * THIS.pointerBorderWidth + THIS.pointerThickness) + 'px';\r
+                       p.crossBY.style.height =\r
+                       p.crossBX.style.width =\r
+                               crossOuterSize + 'px';\r
+                       p.crossBY.style.left =\r
+                       p.crossBX.style.top =\r
+                               (Math.floor(crossOuterSize / 2) - Math.floor(THIS.pointerThickness / 2) - THIS.pointerBorderWidth) + 'px';\r
+                       p.crossBY.style.top =\r
+                       p.crossBX.style.left =\r
+                               '0';\r
+\r
+                       // pad cross line Y and X\r
+                       p.crossLY.style.position =\r
+                       p.crossLX.style.position =\r
+                               'absolute';\r
+                       p.crossLY.style.background =\r
+                       p.crossLX.style.background =\r
+                               THIS.pointerColor;\r
+                       p.crossLY.style.height =\r
+                       p.crossLX.style.width =\r
+                               (crossOuterSize - 2 * THIS.pointerBorderWidth) + 'px';\r
+                       p.crossLY.style.width =\r
+                       p.crossLX.style.height =\r
+                               THIS.pointerThickness + 'px';\r
+                       p.crossLY.style.left =\r
+                       p.crossLX.style.top =\r
+                               (Math.floor(crossOuterSize / 2) - Math.floor(THIS.pointerThickness / 2)) + 'px';\r
+                       p.crossLY.style.top =\r
+                       p.crossLX.style.left =\r
+                               THIS.pointerBorderWidth + 'px';\r
+\r
+                       // slider\r
+                       p.sld.style.overflow = 'hidden';\r
+                       p.sld.style.width = THIS.sliderSize + 'px';\r
+                       p.sld.style.height = THIS.height + 'px';\r
+\r
+                       // slider gradient\r
+                       p.sldGrad.draw(THIS.sliderSize, THIS.height, '#000', '#000');\r
+\r
+                       // slider border\r
+                       p.sldB.style.display = displaySlider ? 'block' : 'none';\r
+                       p.sldB.style.position = 'absolute';\r
+                       p.sldB.style.right = THIS.padding + 'px';\r
+                       p.sldB.style.top = THIS.padding + 'px';\r
+                       p.sldB.style.border = THIS.insetWidth + 'px solid';\r
+                       p.sldB.style.borderColor = THIS.insetColor;\r
+\r
+                       // slider mouse area\r
+                       p.sldM._jscInstance = THIS;\r
+                       p.sldM._jscControlName = 'sld';\r
+                       p.sldM.style.display = displaySlider ? 'block' : 'none';\r
+                       p.sldM.style.position = 'absolute';\r
+                       p.sldM.style.right = '0';\r
+                       p.sldM.style.top = '0';\r
+                       p.sldM.style.width = (THIS.sliderSize + padToSliderPadding / 2 + THIS.padding + 2 * THIS.insetWidth) + 'px';\r
+                       p.sldM.style.height = dims[1] + 'px';\r
+                       p.sldM.style.cursor = 'default';\r
+\r
+                       // slider pointer inner and outer border\r
+                       p.sldPtrIB.style.border =\r
+                       p.sldPtrOB.style.border =\r
+                               THIS.pointerBorderWidth + 'px solid ' + THIS.pointerBorderColor;\r
+\r
+                       // slider pointer outer border\r
+                       p.sldPtrOB.style.position = 'absolute';\r
+                       p.sldPtrOB.style.left = -(2 * THIS.pointerBorderWidth + THIS.pointerThickness) + 'px';\r
+                       p.sldPtrOB.style.top = '0';\r
+\r
+                       // slider pointer middle border\r
+                       p.sldPtrMB.style.border = THIS.pointerThickness + 'px solid ' + THIS.pointerColor;\r
+\r
+                       // slider pointer spacer\r
+                       p.sldPtrS.style.width = THIS.sliderSize + 'px';\r
+                       p.sldPtrS.style.height = sliderPtrSpace + 'px';\r
+\r
+                       // the Close button\r
+                       function setBtnBorder () {\r
+                               var insetColors = THIS.insetColor.split(/\s+/);\r
+                               var outsetColor = insetColors.length < 2 ? insetColors[0] : insetColors[1] + ' ' + insetColors[0] + ' ' + insetColors[0] + ' ' + insetColors[1];\r
+                               p.btn.style.borderColor = outsetColor;\r
+                       }\r
+                       p.btn.style.display = THIS.closable ? 'block' : 'none';\r
+                       p.btn.style.position = 'absolute';\r
+                       p.btn.style.left = THIS.padding + 'px';\r
+                       p.btn.style.bottom = THIS.padding + 'px';\r
+                       p.btn.style.padding = '0 15px';\r
+                       p.btn.style.height = THIS.buttonHeight + 'px';\r
+                       p.btn.style.border = THIS.insetWidth + 'px solid';\r
+                       setBtnBorder();\r
+                       p.btn.style.color = THIS.buttonColor;\r
+                       p.btn.style.font = '12px sans-serif';\r
+                       p.btn.style.textAlign = 'center';\r
+                       try {\r
+                               p.btn.style.cursor = 'pointer';\r
+                       } catch(eOldIE) {\r
+                               p.btn.style.cursor = 'hand';\r
+                       }\r
+                       p.btn.onmousedown = function () {\r
+                               THIS.hide();\r
+                       };\r
+                       p.btnT.style.lineHeight = THIS.buttonHeight + 'px';\r
+                       p.btnT.innerHTML = '';\r
+                       p.btnT.appendChild(document.createTextNode(THIS.closeText));\r
+\r
+                       // place pointers\r
+                       redrawPad();\r
+                       redrawSld();\r
+\r
+                       // If we are changing the owner without first closing the picker,\r
+                       // make sure to first deal with the old owner\r
+                       if (jsc.picker.owner && jsc.picker.owner !== THIS) {\r
+                               jsc.unsetClass(jsc.picker.owner.targetElement, THIS.activeClass);\r
+                       }\r
+\r
+                       // Set the new picker owner\r
+                       jsc.picker.owner = THIS;\r
+\r
+                       // The redrawPosition() method needs picker.owner to be set, that's why we call it here,\r
+                       // after setting the owner\r
+                       if (jsc.isElementType(container, 'body')) {\r
+                               jsc.redrawPosition();\r
+                       } else {\r
+                               jsc._drawPosition(THIS, 0, 0, 'relative', false);\r
+                       }\r
+\r
+                       if (p.wrap.parentNode != container) {\r
+                               container.appendChild(p.wrap);\r
+                       }\r
+\r
+                       jsc.setClass(THIS.targetElement, THIS.activeClass);\r
+               }\r
+\r
+\r
+               function redrawPad () {\r
+                       // redraw the pad pointer\r
+                       switch (jsc.getPadYComponent(THIS)) {\r
+                       case 's': var yComponent = 1; break;\r
+                       case 'v': var yComponent = 2; break;\r
+                       }\r
+                       var x = Math.round((THIS.hsv[0] / 360) * (THIS.width - 1));\r
+                       var y = Math.round((1 - THIS.hsv[yComponent] / 100) * (THIS.height - 1));\r
+                       var crossOuterSize = (2 * THIS.pointerBorderWidth + THIS.pointerThickness + 2 * THIS.crossSize);\r
+                       var ofs = -Math.floor(crossOuterSize / 2);\r
+                       jsc.picker.cross.style.left = (x + ofs) + 'px';\r
+                       jsc.picker.cross.style.top = (y + ofs) + 'px';\r
+\r
+                       // redraw the slider\r
+                       switch (jsc.getSliderComponent(THIS)) {\r
+                       case 's':\r
+                               var rgb1 = HSV_RGB(THIS.hsv[0], 100, THIS.hsv[2]);\r
+                               var rgb2 = HSV_RGB(THIS.hsv[0], 0, THIS.hsv[2]);\r
+                               var color1 = 'rgb(' +\r
+                                       Math.round(rgb1[0]) + ',' +\r
+                                       Math.round(rgb1[1]) + ',' +\r
+                                       Math.round(rgb1[2]) + ')';\r
+                               var color2 = 'rgb(' +\r
+                                       Math.round(rgb2[0]) + ',' +\r
+                                       Math.round(rgb2[1]) + ',' +\r
+                                       Math.round(rgb2[2]) + ')';\r
+                               jsc.picker.sldGrad.draw(THIS.sliderSize, THIS.height, color1, color2);\r
+                               break;\r
+                       case 'v':\r
+                               var rgb = HSV_RGB(THIS.hsv[0], THIS.hsv[1], 100);\r
+                               var color1 = 'rgb(' +\r
+                                       Math.round(rgb[0]) + ',' +\r
+                                       Math.round(rgb[1]) + ',' +\r
+                                       Math.round(rgb[2]) + ')';\r
+                               var color2 = '#000';\r
+                               jsc.picker.sldGrad.draw(THIS.sliderSize, THIS.height, color1, color2);\r
+                               break;\r
+                       }\r
+               }\r
+\r
+\r
+               function redrawSld () {\r
+                       var sldComponent = jsc.getSliderComponent(THIS);\r
+                       if (sldComponent) {\r
+                               // redraw the slider pointer\r
+                               switch (sldComponent) {\r
+                               case 's': var yComponent = 1; break;\r
+                               case 'v': var yComponent = 2; break;\r
+                               }\r
+                               var y = Math.round((1 - THIS.hsv[yComponent] / 100) * (THIS.height - 1));\r
+                               jsc.picker.sldPtrOB.style.top = (y - (2 * THIS.pointerBorderWidth + THIS.pointerThickness) - Math.floor(sliderPtrSpace / 2)) + 'px';\r
+                       }\r
+               }\r
+\r
+\r
+               function isPickerOwner () {\r
+                       return jsc.picker && jsc.picker.owner === THIS;\r
+               }\r
+\r
+\r
+               function blurValue () {\r
+                       THIS.importColor();\r
+               }\r
+\r
+\r
+               // Find the target element\r
+               if (typeof targetElement === 'string') {\r
+                       var id = targetElement;\r
+                       var elm = document.getElementById(id);\r
+                       if (elm) {\r
+                               this.targetElement = elm;\r
+                       } else {\r
+                               jsc.warn('Could not find target element with ID \'' + id + '\'');\r
+                       }\r
+               } else if (targetElement) {\r
+                       this.targetElement = targetElement;\r
+               } else {\r
+                       jsc.warn('Invalid target element: \'' + targetElement + '\'');\r
+               }\r
+\r
+               if (this.targetElement._jscLinkedInstance) {\r
+                       jsc.warn('Cannot link jscolor twice to the same element. Skipping.');\r
+                       return;\r
+               }\r
+               this.targetElement._jscLinkedInstance = this;\r
+\r
+               // Find the value element\r
+               this.valueElement = jsc.fetchElement(this.valueElement);\r
+               // Find the style element\r
+               this.styleElement = jsc.fetchElement(this.styleElement);\r
+\r
+               var THIS = this;\r
+               var container =\r
+                       this.container ?\r
+                       jsc.fetchElement(this.container) :\r
+                       document.getElementsByTagName('body')[0];\r
+               var sliderPtrSpace = 3; // px\r
+\r
+               // For BUTTON elements it's important to stop them from sending the form when clicked\r
+               // (e.g. in Safari)\r
+               if (jsc.isElementType(this.targetElement, 'button')) {\r
+                       if (this.targetElement.onclick) {\r
+                               var origCallback = this.targetElement.onclick;\r
+                               this.targetElement.onclick = function (evt) {\r
+                                       origCallback.call(this, evt);\r
+                                       return false;\r
+                               };\r
+                       } else {\r
+                               this.targetElement.onclick = function () { return false; };\r
+                       }\r
+               }\r
+\r
+               /*\r
+               var elm = this.targetElement;\r
+               do {\r
+                       // If the target element or one of its offsetParents has fixed position,\r
+                       // then use fixed positioning instead\r
+                       //\r
+                       // Note: In Firefox, getComputedStyle returns null in a hidden iframe,\r
+                       // that's why we need to check if the returned style object is non-empty\r
+                       var currStyle = jsc.getStyle(elm);\r
+                       if (currStyle && currStyle.position.toLowerCase() === 'fixed') {\r
+                               this.fixed = true;\r
+                       }\r
+\r
+                       if (elm !== this.targetElement) {\r
+                               // attach onParentScroll so that we can recompute the picker position\r
+                               // when one of the offsetParents is scrolled\r
+                               if (!elm._jscEventsAttached) {\r
+                                       jsc.attachEvent(elm, 'scroll', jsc.onParentScroll);\r
+                                       elm._jscEventsAttached = true;\r
+                               }\r
+                       }\r
+               } while ((elm = elm.offsetParent) && !jsc.isElementType(elm, 'body'));\r
+               */\r
+\r
+               // valueElement\r
+               if (this.valueElement) {\r
+                       if (jsc.isElementType(this.valueElement, 'input')) {\r
+                               var updateField = function () {\r
+                                       THIS.fromString(THIS.valueElement.value, jsc.leaveValue);\r
+                                       jsc.dispatchFineChange(THIS);\r
+                               };\r
+                               jsc.attachEvent(this.valueElement, 'keyup', updateField);\r
+                               jsc.attachEvent(this.valueElement, 'input', updateField);\r
+                               jsc.attachEvent(this.valueElement, 'blur', blurValue);\r
+                               this.valueElement.setAttribute('autocomplete', 'off');\r
+                       }\r
+               }\r
+\r
+               // styleElement\r
+               if (this.styleElement) {\r
+                       this.styleElement._jscOrigStyle = {\r
+                               backgroundImage : this.styleElement.style.backgroundImage,\r
+                               backgroundColor : this.styleElement.style.backgroundColor,\r
+                               color : this.styleElement.style.color\r
+                       };\r
+               }\r
+\r
+               if (this.value) {\r
+                       // Try to set the color from the .value option and if unsuccessful,\r
+                       // export the current color\r
+                       this.fromString(this.value) || this.exportColor();\r
+               } else {\r
+                       this.importColor();\r
+               }\r
+       }\r
+\r
+};\r
+\r
+\r
+//================================\r
+// Public properties and methods\r
+//================================\r
+\r
+\r
+// By default, search for all elements with class="jscolor" and install a color picker on them.\r
+//\r
+// You can change what class name will be looked for by setting the property jscolor.lookupClass\r
+// anywhere in your HTML document. To completely disable the automatic lookup, set it to null.\r
+//\r
+jsc.jscolor.lookupClass = 'jscolor';\r
+\r
+\r
+jsc.jscolor.installByClassName = function (className) {\r
+       var inputElms = document.getElementsByTagName('input');\r
+       var buttonElms = document.getElementsByTagName('button');\r
+\r
+       jsc.tryInstallOnElements(inputElms, className);\r
+       jsc.tryInstallOnElements(buttonElms, className);\r
+};\r
+\r
+\r
+jsc.register();\r
+\r
+\r
+return jsc.jscolor;\r
+\r
+\r
+})(); }\r
diff --git a/htdocs/cgi-bin/wsrc/main.css b/htdocs/cgi-bin/wsrc/main.css
new file mode 100644 (file)
index 0000000..d87efa8
--- /dev/null
@@ -0,0 +1,360 @@
+body{
+    font-family: Segoe UI,Helvetica,Bookman,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji;
+    font-size: 14px;
+    margin: 0;
+    padding:0;
+    background-image: url('images/page-bck-std.png');
+    background-repeat: no-repeat;
+    background-attachment: fixed;
+    background-size: cover;
+}
+.content {
+   margin: 0;
+   padding:0;
+}
+p {
+    font-family: Bookman;
+    margin-left: 70px;
+    font-weight: normal;
+}
+pre{
+    color: #070707;
+    text-align:left;
+    background-color: gainsboro;
+    opacity: 5;
+    overflow-x:auto;
+}
+table,
+th,
+td {
+    border-collapse: collapse;
+    padding: 5px;
+    margin: auto;
+}
+
+div {
+    text-align: center;
+}
+
+#div_log {
+    font-weight: bold;
+}
+#div_srh {
+    text-align: center;
+    vertical-align: middle;
+    display: none;
+    margin-top: 5px;
+    margin-bottom: 0px;
+    font-weight: bold;
+}
+
+TABLE,
+th,
+.tbl {
+    border: 1px solid black;
+    padding-top: 5px;
+    padding-right: 5px;
+    padding-bottom: 5px;
+    padding-left: 5px;
+    margin-bottom: 0px;
+    margin-top: 5px;
+}
+
+.tbl_rem {
+    border: 1px solid black;
+    border-right: 1px solid black;
+    border-bottom: 1px solid black;
+    padding-top: 5px;
+    padding-right: 5px;
+    padding-bottom: 5px;
+    padding-left: 5px;
+    text-align: left;
+}
+
+#cat_desc {
+    position: absolute;
+    border: 2px solid #94cde7;
+    padding: 5px;
+    text-align: center;
+    background: #ccffff;
+    margin-top: 15px;
+    margin-left: 200px;
+    width: 400px;
+    text-decoration-style: wavy;
+
+}
+
+.span_cat {
+    font-family: Bookman;
+    border: 1px solid #b2f8ef;
+    border-bottom: solid #42e4fa 1px;
+    border-style: inset;
+    padding: 2px;
+    padding-right: 10px;
+    padding-left: 10px;
+    box-sizing: border-box;
+    width: auto;
+}
+
+#cat_lst {
+    visibility: hidden;
+}
+
+.r0 {
+    background-color: #e6ffff;
+    border: 1px solid black;
+    border-right: 1px solid black;
+    vertical-align: top;
+}
+.r0.hover{
+    background-color: #b7f3f3;
+}
+.r1 {
+    background-color: #ccffff;
+    border: 1px solid black;
+    border-right: 1px solid black;
+    vertical-align: top;
+}
+.r1.hover{
+    background-color: #b7f3f3;
+}
+
+
+.r2 {
+    background-color: #ccfff0;
+    border: 1px solid black;
+    border-right: 1px solid black;
+    vertical-align: top;
+}
+.r3 {
+    background-color: #b2f8ef;
+    border: 1px solid black;
+    border-right: 1px solid black;
+    vertical-align: top;
+}
+.rz {
+    border: 1px solid black;
+    text-align: left;
+    background-color: #e6ffff;
+    vertical-align: top;
+    align-self: baseline;
+    height: auto;
+    padding: 2%;
+    margin: 0px auto;
+}
+.login {
+
+    vertical-align: middle; text-align:center; width: 60% !important;
+    background-repeat: no-repeat;
+    background:#b2f8ef url('images/std--login-bck.png');
+    opacity: 1;
+}
+div#rz {
+    border: 1px solid black;
+    text-align: left;
+    background-color: #e6ffff;
+    color: #000;
+    vertical-align: top;
+    align-self: baseline;
+    height: auto;
+    padding: 2px;
+    margin: 0px auto;
+}
+.hdr {
+    font-style: normal;
+    font-weight: bold;
+    font-size: large;
+    background-color: #98e6e6;
+    border: 1px solid black;
+    border-right: 1px solid black;
+    text-align: center;
+}
+
+.edit {
+    margin: 2px;
+    padding: 2px;
+    font-size: 9pt;
+    color: #191970
+}
+
+#al {
+    align-items: left;
+    align-content: left;
+    text-align: left;
+}
+
+.log {
+    max-width:550px;
+    text-align: left;
+    word-wrap: break-word;
+    white-space: normal;
+    padding-left: 5px;
+    overflow-y:hidden;
+}
+
+
+.log::-webkit-scrollbar {
+    -webkit-appearance: none;
+}
+
+.log::-webkit-scrollbar:vertical {
+    width: 12px;
+}
+
+.log::-webkit-scrollbar:horizontal {
+    height: 12px;
+}
+
+.log::-webkit-scrollbar-thumb {
+    border-radius: 8px;
+    border: 2px solid white; /* should match background, can't be transparent */
+    background-color: rgba(0, 0, 0, .5);
+}
+
+
+#tag_FRM {
+    border: 2px solid #94cde7;
+    padding: 5px;
+    text-align: right;
+    vertical-align: top;
+}
+
+img {
+    float: left;
+    padding: 0 10px
+}
+
+#menu {
+    position: fixed;
+    float: left;
+    margin: 0;
+    border: 2px solid #94cde7;
+    padding: 5px;
+    text-align: center;
+    background: #ccffff;
+    margin-left: 91%;
+}
+
+#frm_login {
+    vertical-align: middle;
+    margin: 0;
+}
+
+
+
+.ui-button,
+.ui-button-text .ui-button {
+    font-size: 12px !important;
+}
+
+.ui-menu {
+    list-style: none;
+    padding: 10px;
+    margin: 0;
+    display: block;
+    width: 227px;
+    text-align: left;
+}
+
+.ui-menu .ui-menu {
+    margin-top: -3px;
+}
+
+.ui-menu .ui-menu-item {
+    margin: 0;
+    padding: 0;
+    width: 200px;
+}
+
+.ui-menu .ui-menu-item a {
+    text-decoration: none;
+    display: block;
+    padding: .2em .4em;
+    line-height: 1.5;
+    zoom: 1;
+}
+
+.ui-menu .ui-menu-item a.ui-state-hover,
+.ui-menu .ui-menu-item a.ui-state-active {
+    margin: -1px;
+}
+.ui-icon{
+    float:right;
+}
+
+#standalone-container {
+    margin-top: 5px;
+    border: 1px solid black;
+}
+
+#editor-container {
+    height: 140px;
+    max-height: 480px;
+    border-top: 1px solid gray;
+    border-right: 1px solid gray;
+    background-color: #e6ffff;
+}
+
+#toolbar-container {
+    border: 1px solid black;
+    background-color: #98e6e6;
+    margin-bottom: 3px;
+}
+
+.save_button {
+    margin-top: 3px;
+    float: right;
+}
+
+#btnRTF {
+    float: right;
+
+}
+
+.midnight{
+    color:midnightblue;
+}
+a:link {
+ color: #3e6f70
+}
+a:visited {
+ color: #472f80;
+}
+a:hover {
+    color: #ff4d21;
+    font-style:normal;
+}
+a:active {
+    color: #1eff00;
+}
+#sss_status{
+    font-size: smaller;
+    font-style: italic;
+    color:darkslateblue;
+    background-color:darkturquoise;
+    padding:5px;
+    opacity: 1;
+}
+
+ #sss_expired a{
+    font-size: large;
+    font-style: normal;
+    font-weight: bold;
+    color:crimson;
+    padding:15px
+}
+
+.hover{
+    background-color: #69f0f0;
+}
+
+#lcat{ margin: 0; padding: 5px;}
+
+.debug_output {
+    font-size:smaller;
+    background-color:darkturquoise;
+    text-align: left;
+    font-family: monospace;
+    opacity: 8;
+    padding: 5px;
+}
\ No newline at end of file
diff --git a/htdocs/cgi-bin/wsrc/main.js b/htdocs/cgi-bin/wsrc/main.js
new file mode 100644 (file)
index 0000000..5c75218
--- /dev/null
@@ -0,0 +1,1521 @@
+/*
+ Programed by: Will Budic
+ Open Source License -> https://choosealicense.com/licenses/isc/
+*/
+var MNU_SCROLLING = false;
+
+var QUILL, QUILL_PNL;
+var Delta;
+var RTF_SET = false;
+var CHANGE;
+
+var _show_all = true;
+
+var DEF_BACKGROUND = 'white';
+
+var RTF_DOC_RESIZED = false;
+var RTF_DOC_ORIG;
+var RTF_DOC_CUR_ID;
+var TXT_LOG_ROWS = 3;
+var TIME_STAMP;
+var LOCALE;
+var TIMEZONE;
+var DBI_LVAR_SZ;
+var EDIT_LOG_TXT = "";
+
+function onBodyLoadGeneric() {
+    $("input[type=submit], input[type=reset], .ui-widget-content, button, .a_").button();
+    $("#btn_save_doc").button();
+    $("#btn_zero_doc").button();  if($("#rtf_buffer").val()==0){$("#btn_zero_doc").hide()};
+    $("#btn_load_doc").button();  $("#btn_load_doc").hide();
+    if(!LOCALE || LOCALE==="English"){
+        LOCALE = "en-US";
+    }
+}
+
+function onBodyLoad(toggle, locale, tz, today, expires, rs_cur, log_limit) {
+
+    LOCALE      = locale;
+    TIMEZONE    = tz;
+    TIME_STAMP  = new Date(today);
+    DBI_LVAR_SZ = parseInt(log_limit);
+
+    onBodyLoadGeneric();
+
+
+    if (toggle) {
+        this.toggle("#div_srh", false);
+    }
+    if(rs_cur){
+        _show_all = false;//toggle type switch
+        showAll();
+    }
+    $('#ed').datetimepicker({
+        dateFormat: 'yy-mm-dd',
+        timeFormat: 'HH:mm:ss',
+        stepHour: 1,
+        stepMinute: 10,
+        stepSecond: 10,
+        firstDay: 1
+    });
+
+    $('#srh_date_from').datepicker({
+        dateFormat: 'yy-mm-dd',
+        firstDay: 1
+    });
+
+    $('#srh_date_to').datepicker({
+        dateFormat: 'yy-mm-dd',
+        firstDay: 1
+    });
+    $('#ed').poshytip({
+        content: "Select here date and time of your log.",
+        className: 'tip-yellowsimple',
+        showTimeout: 1,
+        alignTo: 'target',
+        alignX: 'center',
+        alignY: 'bottom',
+        offsetY: 5,
+        allowTipHover: false
+    });
+    $('#ec').poshytip({
+        content: "Select here the category for your log.",
+        className: 'tip-yellowsimple',
+        showTimeout: 1,
+        alignTo: 'target',
+        alignX: 'center',
+        alignY: 'bottom',
+        offsetY: 5,
+        allowTipHover: false
+    });
+    $('#el').poshytip({
+        content: "This is your log entry,<br> can't be left empty.",
+        className: 'tip-yellowsimple',
+        showOn: 'focus',
+        alignTo: 'target',
+        alignX: 'center',
+        alignY: 'bottom'
+    });
+    $('#am').poshytip({
+        content: "Symbolic amount in your local or preferred currency. Can be left empty.",
+        className: 'tip-yellowsimple',
+        showOn: 'focus',
+        alignTo: 'target',
+        alignX: 'center',
+        alignY: 'bottom',
+        offsetX: 5,
+        showTimeout: 100
+    });
+
+    $('#Log_btn').poshytip({
+        content: "Clicking the Log button is naturally the next move.",
+        className: 'tip-yellowsimple',
+        showOn: 'none',
+        alignTo: 'target',
+        alignX: 'left',
+        alignY: 'center',
+        offsetX: 15
+    });
+    $('#Log_btn').poshytip('show');
+    setTimeout(function() {  $('#Log_btn').poshytip('hide');  }, 5000);
+
+    $('#am').click(function(e){
+        e.preventDefault();
+        let v = $('#am').val();
+        if(v.length==0 || v==0.00){
+            const regex = /^[\D]?\d+\.*\d*/gm;
+            let str = $('#el').val();
+            let m; var tot = 0;
+
+            while ((m = regex.exec(str)) !== null) {
+                if (m.index === regex.lastIndex) {
+                    regex.lastIndex++;
+                }
+                m.forEach( (match, groupIndex) => {
+                    let v = `${match}`;
+                    let d = v.startsWith('/');
+                    let m = v.startsWith('*');
+                    if(d||m){v=v.substring(1)}
+                    let s = v.startsWith('-');
+                    v = v.replace(/^\./g,'0.');
+                    v = v.replace(/^\D/g,'');
+                    //console.log(`Found match, group ${groupIndex}: ${match}`);
+                    if(d){
+                        if(s){ tot /= -parseFloat(v);
+                        }else{ tot /= parseFloat(v); }
+                    }else if(m){
+                        if(s){ tot *= -parseFloat(v);
+                        }else{ tot *= parseFloat(v); }
+                    }else{
+                        if(s){ tot -= parseFloat(v);
+                        }else{ tot += parseFloat(v); }
+                    }
+                });
+            }
+            if(tot==0){tot=""}
+            $('#am').val(tot.toFixed(2));
+        }
+
+
+     });
+
+    $('#sss_xc').poshytip({
+        content: "When checked, system will try to remember your view mode while in session.",
+        className: 'tip-yellowsimple',
+        showOn: 'focus',
+        alignTo: 'target',
+        alignX: 'center',
+        alignY: 'bottom',
+        offsetX: 5,
+        showTimeout: 100
+    });
+
+    $("#menu_close").poshytip({
+        content: "<b>Do not click on this</b> little heart of mine,<br> <b>the menu will be closed</b>!",
+        className: 'tip-yellowsimple',
+        showOn: 'mouseover',
+        alignTo: 'target',
+        alignX: 'center',
+        alignY: 'bottom',
+        showTimeout: 100
+    });
+
+    $("#menu_close").click(function() {
+        $('#dutchie_close_chime').trigger('play');
+        $("#menu_page").effect("shake", {}, 1000, function() {
+            $("#menu_page").effect("drop", { direction: "down" }, 1500, function() {
+                $("#menu_page").hide();
+            })
+        })
+    });
+
+    $("#dutch_left").poshytip({
+        content: "<span class='ui-icon ui-icon-arrowthick-1-w' style='float:none;'></span>Pass the dutchie to the <b>left</b> on side.",
+        className: 'tip-yellowsimple',
+        showOn: 'mouseover',
+        alignTo: 'target',
+        alignX: 'center',
+        alignY: 'bottom',
+        showTimeout: 100
+    });
+    $("#dutch_right").poshytip({
+        content: "Pass the dutchie to the <b>right</b> on side.<span class='ui-icon ui-icon-arrowthick-1-e' style='float:none;'></span>",
+        className: 'tip-yellowsimple',
+        showOn: 'mouseover',
+        alignTo: 'target',
+        alignX: 'center',
+        alignY: 'bottom',
+        showTimeout: 100
+    });
+
+
+    $('#ec').show();
+
+    $("#RTF").prop("checked", false);
+
+    if ($('#editor-container').length) {
+        QUILL = new Quill('#editor-container', {
+            placeholder: 'Enter your Document here...',
+            theme: 'snow',
+            modules: {
+                formula: true,
+                syntax: true,
+                toolbar: '#toolbar-container'
+            }
+        });
+        Delta = Quill.import('delta');
+        CHANGE = new Delta();
+
+        // toggleDocument();
+    }
+
+    var rgb = $('#editor-container').css('background-color');
+    if(rgb){
+        DEF_BACKGROUND = RGBToHex(rgb);
+        $("#fldBG").val(DEF_BACKGROUND);
+        // let bg=RGBToHex('rgb(180, 169, 169)'); //<-is set in css file
+        // $('#toolbar-container').css('background-color',bg);
+        $('#toolbar-container').css('color',DEF_BACKGROUND);
+
+    }
+    var amf = $( "#amf" );//Amount Field Type dropdown
+    var ec = $( "#ec" );  //Category dropdown
+    $( "#amf2" ).selectmenu({style: "dropdown", width:100});
+    amf.selectmenu({style: "dropdown", width:100,
+        change: function( event, data ) {
+        var evv =ec.val();
+            if(ec.val()<2||evv==32||evv==35||data.item.value == 0){
+                var sel = null;
+                if(data.item.label == "Income"){ sel = 35; }
+                else if(data.item.label == "Expense"){sel = 32; }
+                else if(data.item.value == 0 && (evv == 35||evv==32)){sel = 1;}
+                if(sel){
+                    ec.val(sel);
+                }
+            }
+        }});
+
+
+    jQuery.fn.dispPos = function () {
+        this.css("position","absolute");
+        this.css("top", Math.max(0, (($(window).height() - $(this).outerHeight())-320 ) +
+                                                    $(window).scrollTop()) + "px");
+        this.css("left", Math.max(0, (($(window).width() - $(this).outerWidth()) / 6) - 100 +
+                                                    $(window).scrollLeft()) + "px");
+        this.css( "zIndex", 8 );
+        return this;
+    }
+
+    jQuery.fn.dropdownPos = function (e,desc) {
+        var pnl = $("#cat_desc");
+        var top = e.css('top');
+        var height= e.css('height');
+        var width = e.css('width');
+        var left = e.css('left');
+        var pwidth = pnl.css('width');
+            top = parseInt(top.replace(/px/, ""));
+            height = parseInt(height.replace(/px/, ""));
+            width = parseInt(width.replace(/px/, ""));
+            left = parseInt(left.replace(/px/, ""));
+            pwidth = parseInt(pwidth.replace(/px/, ""));
+            top += height - 5;
+            left -= (pwidth/2);
+            //pnl.html("["+left+","+top+","+height+","+width+"]"+desc);
+            pnl.html(desc);
+            pnl.css('top', top+'px');
+            pnl.css('left', left+'px');
+            pnl.show();
+    }
+
+    $("#dropdown-standard a").click(function(e){
+        e.preventDefault();
+        var ci = $(event.target).parent(); ci = ci.attr('id');
+        var lbl = $(e.target).text();
+        lbl = lbl.replace(/\s*$/g, "");
+        lbl = lbl + "&nbsp;".repeat(16-lbl.length);
+        $("#lcat").html(lbl);
+        $("#ec").val(ci);
+        $("#cat_desc").show();
+    }).mouseenter(function(e){
+        var pr = $(event.target).parent(); pr = pr.attr('id');
+        if(pr){
+            var pnl = $("#cat_desc");
+            var desc = $("meta[id='cats["+pr+"]']").attr('content');
+            $.fn.dropdownPos($("#dropdown-standard"), desc);
+        }
+    }).mouseleave(function(e){$("#cat_desc").hide();});
+
+
+    $("#dropdown-standard-v a").click(function(e){
+        e.preventDefault();
+        var ci = $(event.target).parent(); ci = ci.attr('id');
+        var lbl = $(e.target).text();
+        lbl = lbl.replace(/\s*$/g, "");
+        lbl = lbl + "&nbsp;".repeat(16-lbl.length);
+        $("#lcat_v").html(lbl);
+        $("#vc").val(ci);
+        $("#cat_desc").show();
+    }).mouseenter(function(e){
+        var pr = $(event.target).parent(); pr = pr.attr('id');
+        if(pr){
+            var pnl = $("#cat_desc");
+            var desc = $("meta[id='cats["+pr+"]']").attr('content');
+            $.fn.dropdownPos($("#dropdown-standard-v"), desc);
+        }
+    }).mouseleave(function(e){$("#cat_desc").hide();});
+
+
+
+    $("#dropdown-standard-x a").click(function(e){
+        e.preventDefault();
+        var ci = $(event.target).parent(); ci = ci.attr('id');
+        var lbl = $(e.target).text();
+        lbl = lbl.replace(/\s*$/g, "");
+        lbl = lbl + "&nbsp;".repeat(16-lbl.length);
+        $("#lcat_x").html(lbl);
+        $("#xc").val(ci);
+        $("#cat_desc").show();
+    }).mouseenter(function(e){
+        var pr = $(event.target).parent(); pr = pr.attr('id');
+        if(pr){
+            var pnl = $("#cat_desc");
+            var desc = $("meta[id='cats["+pr+"]']").attr('content');
+            $.fn.dropdownPos($("#dropdown-standard-x"), desc);
+        }
+    }).mouseleave(function(e){$("#cat_desc").hide();});
+
+
+    $( "#dlgValidation" ).dialog({
+        dialogClass: "alert",
+        buttons: [
+          {
+            text: "OK",
+            click: function() {
+              $( this ).dialog( "close" );
+            }
+          }
+        ]
+      });
+    //Following is needed as the dropdown registers somewhere in lib. to show on when enter key is hit.
+    $.fn.enterKey = function (fnc) {
+        return this.each(function () {
+            $(this).keypress(function (ev) {
+                var keycode = (ev.keyCode ? ev.keyCode : ev.which);
+                if (keycode == 13) {
+                    fnc.call(this, ev);
+                    ev.preventDefault();
+                }
+            })
+        })
+    }
+    $("#rs_keys").enterKey(function (ev) {});
+
+
+    $('#rs_keys').bind('keypress', function(event) {
+        if(event.which === 13) {
+          $(this).next().focus();
+        }
+    });
+
+
+    setPageSessionTimer(expires);
+
+    $(function() {
+        $( "#rs_keys, #rs_keys2" ).autocomplete({
+            source: AUTOWORDS
+            });
+    });
+    var CHK_PREV;
+
+    $("#frm_log td").mouseover(function(e){
+        if(e.target != 'thr'){
+            var chk = $(e.target).find('input[name="chk"]');
+            var tr = e.target.parentNode.closest("tr");
+            if(tr.id != "summary_row" && tr.id !="brw_row"){
+                if(CHK_PREV && !CHK_PREV.prop('checked')){
+                    CHK_PREV.closest("tr").removeClass("hover");
+                }
+                $(e.target.parentNode).closest("tr").addClass("hover");
+                CHK_PREV = chk;
+            }
+        }
+      return false;
+    }).mouseout(function(e) {
+        CHK_PREV = $(e.target).find('input[name="chk"]');
+        if(!CHK_PREV.prop('checked')){
+            $(e.target.parentNode).closest("tr").removeClass("hover");
+        }
+    });
+
+
+    if($("#isInViewMode").val()>0){
+        this.toggle('#div_srh', true);
+        this.toggle('#div_log', true);
+    }
+
+    $(function() {
+        $( "#rs_keys, #rs_keys2" ).autocomplete({
+            source: AUTOWORDS
+            });
+    });
+    $('#main_table').css('visibility', 'visible');
+    display("Log page is ready!", 5);
+
+}
+
+function encodeText(){
+    var el = $("#frm_entry [name=log]");
+    var txt = el.val();
+    txt = txt.replace(/\r\n/g, "\\n");
+    txt = txt.replace(/\n/g, "\\n");
+    el.val(txt);
+}
+function decodeText(){
+    var el = $("#frm_entry [name=log]");
+    var txt = el.val();
+        txt = txt.replace(/\\n/g, "\n");
+    el.val(txt);
+}
+
+function formValidation() {
+    // if ($("#ec option:selected").val() == 0) {
+    //     alert("Category -> has not been selected!");
+    //     return false;
+    // }
+    var dt = $("#frm_entry [name='date']").val();
+    var i = dt.indexOf('id=');
+    if(i>0){
+        dt = dt.substring(0, i-1);
+        $("#frm_entry [name='date']").val(dt);
+    }
+    return validate(dt, $("#frm_entry [name='log']").val());
+}
+function formDelValidation() {
+return true;
+}
+
+function backToMain() {// func. required as chrome submits whole form on if buttons are not falsed.
+    $("[name='confirmed']").val(0);
+    //window.location.href='main.cgi';
+    history.back();
+    return false;
+}
+
+function validate(dt, log) {
+    var tm, msg;
+    if (!Date.parse(dt)) {
+        msg = "<b>Date</b> field entry -> " + dt + " is Invalid can't submit!<br>";
+    }
+    else{
+        tm = validTime(dt.substring(dt.indexOf(" ") + 1));
+        if(tm){
+            msg = "<b>Date</b> field entry wrong time -> " + tm;
+        }
+        else{
+            msg = "";
+        }
+    }
+    if ($("#ec").val() == 0) {
+        msg =  msg + "<b>Category</b> field selection hasn't been made!<br>";
+    }
+    if (!log) {
+        msg = msg + "<b>Log</b> field entry can't be empty, can't submit!<br>";
+    }
+    else if (log.length>DBI_LVAR_SZ) {
+        msg = msg+ "<b>Log</b> Server has an text limit of (" + DBI_LVAR_SZ +" ) Your log size is:" + log.length;
+    }
+    if(msg){
+        return dialogModal( "Sorry Form Validation Failed", msg);
+    }
+    $('#frm_entry').hide();
+    encodeText();
+    return true;
+}
+
+function validTime(val) {
+    // regular expression to match required time format
+    re = /^(\d{2}):(\d{2}):(\d{2})([ap]m)?$/;
+    var fld = $("frm_entry").date;
+    var msg;
+    if (val != '') {
+        if (regs = val.match(re)) {
+            // 12-hour value between 0 and 24
+            if (regs[1] < 0 || regs[1] > 23) {
+                msg += " Invalid value for hours: " + regs[1];
+                fld.focus();
+            }
+            // minute value between 0 and 59
+            if (regs[2] > 59) {
+                msg += " Invalid value for minutes: " + regs[2];
+                fld.focus();
+            }
+            // seconds value between 0 and 59
+            if (regs[3] > 59) {
+                msg += " Invalid value for seconds: " + regs[2];
+            }
+        } else {
+            msg = "Invalid time format: " + val;
+            fld.focus();
+        }
+        return msg;
+    }
+}
+
+
+
+function setNow() {
+
+    var date = document.getElementById("frm_entry").date;
+    var dt = new Date();
+    let options = {timeZone: TIMEZONE, hour12:false};
+    let [month, day, year]      = dt.toLocaleDateString(LOCALE, options).split("/")
+    let [hour, minute, seconds] = dt.toLocaleTimeString(LOCALE, options).split(/:| /);
+    month = fix0(month); day    = fix0(day);
+    hour  = fix0(hour);  minute = fix0(minute); seconds = fix0(seconds);
+
+    date.value =  year + "-" + month + "-" + day + " " + hour + ":" + minute + ":" + seconds;
+    $("#submit_is_edit").val("0");
+    toggleDoc(true);
+    EDIT_LOG_TXT = "";
+    return false;
+}
+
+function fix0(v) {
+    v = parseInt(v);
+    if (v < 10) {
+        return "0" + v;
+    }
+    return v;
+}
+
+
+function decodeToHTMLText(txt) {
+
+    txt = txt.replace("/&#60;/g", "<");
+    txt = txt.replace("/&#62;/g", ">");
+    txt = txt.replace("/&#9;/g", "\t");
+    txt = txt.replace(/br\s*[\/]?>/gi, "\n");
+    txt = txt.replace(/\\n/g, "\n");
+    txt = txt.replace(/&#10;/g, "\n");
+    txt = txt.replace(/&#34;/g, "\"");
+    txt = txt.replace(/&#39;/g, "'");
+
+
+    return txt;
+}
+
+const REGX_BTM = /(?<o>^\<b\>)(?<title>.+)(?<c>\<\/b\>)/gi;
+const REGX_BTM_SUBST = `*$2*`;
+
+function decodeToText(txt) {
+    //bug 7 fix
+    txt = txt.replace(/<hr>.*RTF<\/button>/gm, "");
+    txt = txt.replace(/<br\s*[\/]?>/gi, "\n");
+    //If first line bolded
+
+    let res = txt.matchAll(REGX_BTM);
+    if(res){
+       txt = txt.replace(REGX_BTM, REGX_BTM_SUBST);
+    }
+    return txt;
+}
+
+function edit(row) {
+
+    var ed_v = $("#y" + row); //date
+    var et_v = $("#t" + row); //time
+    var ea_v = $("#a" + row); //amount
+    var tag  = $("#g" + row); //orig. tagged log text.
+    var log  = $("#v" + row); //log
+    var rtf  = $("#r" + row); //RTF doc
+    var amt  = $("#f" + row); //Amount type.
+    var sticky  = $("#s" + row); //RTF doc
+    var isRTF = (rtf.val()>0?true:false);
+    var isSticky = (sticky.val()>0?true:false);
+    var txt;
+    if(!isRTF){
+            $('#rtf_doc').hide();
+            $('#tbl_doc').hide();
+            $('#toolbar-container').hide();
+            $("#btn_load_doc").hide();
+    }
+
+    $("html, body").animate({ scrollTop: 0 }, "slow", function(){$("#el").focus()});
+    if (tag.length) {
+        txt = decodeToHTMLText(tag.val());
+
+    } else {
+        txt = log.html();
+        txt = txt.replace(/<br>/g,"\n");
+        txt = txt.replace(/^<div class=\"log\">/,"");
+        txt = txt.replace(/<\/div>$/,"");
+        txt = decodeToText(txt);
+    }
+    $("#el").val(txt); EDIT_LOG_TXT = txt;
+    $("#ed").val(ed_v.val() + " " + et_v.html()); //Time field
+    var val = ea_v.text();
+    val = val.replace(/\,/g,"");
+    $("#am").val(val); //Amount field, fix 04-08-2019 HTML input doesn't accept formatted string.
+    $("#RTF").prop('checked', isRTF);
+    $("#STICKY").prop('checked', isSticky);
+
+    if(isRTF){
+        display("Loading RTF: "+ ed_v.val() );
+        RTF_DOC_CUR_ID = row;
+        loadRTF(false, row);
+    }else{
+        display("Editing: "+ ed_v.val(),3);
+        RTF_DOC_CUR_ID = 0;
+    }
+
+    //Select category
+    var ec_lb = $("#c" + row).text();
+    var ec_id = $("meta[name='"+ec_lb+"']").attr('id');
+    ec_id = ec_id.replace(/^cats\[/g,'');
+    ec_id = ec_id.replace(/\]$/g,'');
+    $("#lcat").html(ec_lb);
+    $("#ec").val(ec_id);
+
+
+    $("#submit_is_edit").val(row);
+
+    //Amount type
+    ec_v = amt.val();
+    $("#amf").focus();
+    $("#amf").val(ec_v);
+    $("#amf").selectmenu('refresh');
+
+    $("#div_log").show();
+    $("#el").focus();
+
+    return false;
+}
+
+
+function selectAllLogs() {
+    var chks = document.getElementsByName("chk");
+    for (var i = 0, n = chks.length; i < n; i++) {
+        chks[i].checked = true;
+    }
+    return false;
+}
+
+
+function submitTop(top) {
+    var frm = document.getElementById("frm_entry");
+    frm.submit_is_view.value = 1;
+    frm.rs_all.value  = 0;
+    frm.rs_cur.value  = 0;
+    frm.rs_prev.value = top;
+    frm.submit_is_view.value = 1;
+    frm.submit();
+
+    return false;
+}
+
+function submitPrev(tbl_rc, limit) {
+
+    var frm = document.getElementById("frm_entry");
+    frm.submit_is_view.value = 1;
+    frm.rs_all.value = 0;
+    frm.rs_cur.value = tbl_rc + limit;
+    frm.rs_prev.value = tbl_rc;
+    frm.submit_is_view.value = 1;
+    frm.submit();
+
+    return false;
+}
+
+function submitNext(tbl_rc, limit) {
+
+    var frm = document.getElementById("frm_entry");
+    frm.submit_is_view.value = 1;
+    frm.rs_all.value = 0;
+    frm.rs_cur.value = parseInt(tbl_rc);
+    frm.rs_prev.value = tbl_rc + limit;
+    frm.submit_is_view.value = 1;
+    frm.submit();
+
+    return false;
+}
+
+function submitEnd(limit) {
+    var frm = document.getElementById("frm_entry");
+    frm.submit_is_view.value = 1;
+    frm.rs_all.value  = 0;
+    frm.rs_cur.value  = limit;
+    frm.rs_prev.value = limit * 2;
+    frm.submit_is_view.value = 1;
+    frm.submit();
+
+    return false;
+}
+
+
+
+function viewAll() {
+    display("Please Wait!");
+    var frm = document.getElementById("frm_entry");
+    frm.submit_is_view.value = 1;
+    frm.rs_all.value = 1;
+    frm.rs_cur.value = 0;
+    frm.rs_prev.value = 0;
+    frm.submit_is_view.value = 1;
+    frm.submit();
+
+    return false;
+}
+
+function resizeLogText() {
+
+    $("#div_log .collpsd").show();
+    $('#div_log').show();
+
+    if(TXT_LOG_ROWS == 3){
+        TXT_LOG_ROWS = 10;
+    }
+    else{
+        TXT_LOG_ROWS = 3;
+    }
+    $("#el").prop("rows",TXT_LOG_ROWS)
+
+}
+
+function resizeDoc() {
+    var css = $("#editor-container").prop('style');
+    if(RTF_DOC_RESIZED){
+        RTF_DOC_RESIZED = false;
+        css.height = RTF_DOC_ORIG;
+    }
+    else{
+        RTF_DOC_RESIZED = true;
+        RTF_DOC_ORIG = css.height;
+        css.height = '480px';
+    }
+}
+function resetDoc(){
+    if (RTF_SET) { QUILL.setText(""); }
+    $("#submit_is_edit").val("0");
+    toggleDoc(true);
+    $('#btn_load_doc').hide();
+}
+
+
+
+function resetView() {
+    $("#frm_srch input").val("");
+    $("#srch_reset").val(1);
+    $("#idx_cat").val(0);
+    $('#vc>option[value="0"]').prop('selected', true);
+    $('#xc>option[value="0"]').prop('selected', true);
+    $("#sss_xc").prop('checked', false);
+    $("#frm_srch").submit();
+}
+
+function updateSelCategory(sel) {
+    if (sel.id == "ec") {
+        var cat = $("#idx_cat");
+        cat.value = sel.options[sel.selectedIndex].value;
+    }
+}
+
+function toggleVisibility(target, ensureOff) {
+    if (!ensureOff) {
+        $(target).toggle();
+    } else {
+        $(target).hide();
+    }
+}
+
+
+function toggleDoc(whole) {
+
+
+    if(whole){
+        if($("#RTF").prop('checked')){
+            $("#rtf_doc").show();
+            $('#tbl_doc').show();
+           // $('#toolbar-container').show();
+        }
+        else{
+            $("#rtf_doc").hide();
+            $('#tbl_doc').hide();
+            //$('#toolbar-container').hide();
+        }
+    }
+    else{
+        $("#rtf_doc").toggle();
+    }
+
+    if (!RTF_SET) {
+
+        CHANGE = new Delta();
+        QUILL.on('text-change', function(delta) {
+            CHANGE = CHANGE.compose(delta);
+        });
+
+        setInterval(function() {
+            if (CHANGE.length() > 0) {
+                console.log('Saving changes', CHANGE);
+                CHANGE = new Delta();
+            }
+        }, 10 * 1000);
+        RTF_SET = true;
+    }
+
+
+}
+
+
+function hide(id) {
+    $(id).hide();
+    return false;
+}
+
+function show(id) {
+    $(id).show();
+    return false;
+}
+
+function toggle(id, mtoggle, focus_point) {
+   //Menu button untoggle it up first. Complex interaction situation.
+    if(mtoggle){
+        if(!$(id+" .collpsd").is(":visible")){
+            $(id+" .collpsd").show();
+            $(id).show();
+        }
+        else{
+            var distance = $(id).offset().top;
+            if($(this).scrollTop() <= distance){
+                $(id).toggle();
+            }
+        }
+    }
+    else{
+        $(id).toggle();
+    }
+    $("html, body").animate({ scrollTop: 0 }, "fast");
+    if(focus_point){
+        setTimeout(function(){$(focus_point).focus()}, 100);
+    }
+    return false;
+}
+
+
+function showAll() {
+
+   show("#menu_page");
+
+   if(_show_all){
+        $("#lnk_show_all").text("Hide All");
+        show("#div_log");
+        show("#div_srh");
+        show("#tbl_hlp");
+        show("#tbl_doc");
+        _show_all = false;
+   }
+   else{
+        $("#lnk_show_all").text("Show All");
+        hide('#cat_desc');
+        hide("#div_log");
+        hide("#div_srh");
+        hide("#tbl_hlp");
+        hide("#tbl_doc");
+        _show_all = true;
+   }
+
+
+   $("html, body").animate({ scrollTop: 0 }, "fast");
+
+    return false;
+}
+
+function display(desc, times){
+    var pnl = $("#cat_desc");
+    if(!times){
+        times = 1;
+    }
+    pnl.html(desc);
+    pnl.dispPos(true);
+    pnl.show();
+    pnl.fadeOut(1000*times);
+    $('#menu_page').css('visibility','visible');
+}
+
+function moveMenuLeft (){
+    $('#menu_page').css('margin-left','.5vw');
+    $('#dutchie_chime').trigger('play');
+return false;
+}
+function moveMenuRight (){
+    $('#menu_page').css('margin-left','90.5vw');
+    $('#dutchie_close_chime').trigger('play');
+return false;
+}
+
+function viewRTFLogs(btn){
+    $("#vrtf").val(1);
+}
+
+function viewByAmountType(btn) {
+    var aa = $("#amf2 option:selected");
+        aa.val(parseInt(aa.val())+1);
+}
+
+function viewByCategory(btn) {
+    $("#rs_keys").value = "";
+    $("#xc").val(0);
+}
+function viewExcludeCategory(btn) {
+    $("#rs_keys").value = "";
+    $("#vc").value = "0";
+}
+
+function addInclude() {
+    var vc = $("#vc").val();
+    var lst = $("#vclst");
+    if(vc == 0){
+        return dialogModal("Can't add include!", "Must select a category to add to a list of includes.");
+    }
+
+    var sel = $("meta[id='cats["+vc+"]']").attr('name');
+    var div = $('#divvc');
+    var tagged = $('#divvc').text();
+    var reg = new RegExp(sel);
+
+    if(!tagged.match(reg)){
+        $('#divvc_lbl').show();
+        if(tagged.length>0){
+            div.text(tagged + ',' + sel);
+            lst.val(lst.val() + ',' + vc);
+        }
+        else{
+            div.text(sel);
+            lst.val(vc);
+        }
+    }
+return false;
+}
+
+function removeInclude() {
+    var vc = $("#vc").val();
+    var xlst = $("#xclst");
+    if(vc == 0){
+        return dialogModal("Can't remove exclude!", "Must select a category to remove from list of includes.");
+    }
+    var sel = $("meta[id='cats["+vc+"]']").attr('name');
+    //var sel = $('#vc option:selected');
+    var div = $('#divvc');
+    var tagged = $('#divvc').text();
+    var tagids = xlst.val();
+    var reg = new RegExp(sel);
+    if(tagged.match(reg)){
+            tagged = tagged.replace(reg,'');
+            tagged = tagged.replace(/\,\,/,'\,');
+            tagged = tagged.replace(/^\,+|\,+$/g,'');
+            tagids = tagids.replace(vc,'');
+            tagids = tagids.replace(/\,\,/,'\,');
+            tagids = tagids.replace(/^\,+|\,+$/g,'');
+            if(tagged.length==0){
+                $('#divvc_lbl').hide();
+            }
+            div.text(tagged);
+            xlst.val(tagids);
+    }
+
+return false;
+}
+
+function addExclude() {
+    var xc = $("#xc").val();
+    var xlst = $("#xclst");
+    if(xc == 0){
+        return dialogModal("Can't add exclude!", "Must select a category to add to a list of excludes.");
+    }
+
+    var sel = $("meta[id='cats["+xc+"]']").attr('name');
+    var div = $('#divxc');
+    var tagged = $('#divxc').text();
+    var reg = new RegExp(sel);
+
+    if(!tagged.match(reg)){
+        $('#divxc_lbl').show();
+        if(tagged.length>0){
+            div.text(tagged + ',' + sel);
+            xlst.val(xlst.val() + ',' + xc);
+        }
+        else{
+            div.text(sel);
+            xlst.val(xc);
+        }
+    }
+
+return false;
+}
+
+function removeExclude() {
+    var xc = $("#xc").val();
+    var xlst = $("#xclst");
+    if(xc == 0){
+        return dialogModal("Can't remove exclude!", "Must select a category to remove from list of excludes.");
+    }
+    var sel = $("meta[id='cats["+xc+"]']").attr('name'); //_CATS_NAME_MAP.get(xc.val());
+    //var sel = $('#xc option:selected');
+    var div = $('#divxc');
+    var tagged = $('#divxc').text();
+    var tagids = xlst.val();
+    var reg = new RegExp(sel);
+    if(tagged.match(reg)){
+            tagged = tagged.replace(reg,'');
+            tagged = tagged.replace(/\,\,/,'\,');
+            tagged = tagged.replace(/^\,+|\,+$/g,'');
+            tagids = tagids.replace(xc,'');
+            tagids = tagids.replace(/\,\,/,'\,');
+            tagids = tagids.replace(/^\,+|\,+$/g,'');
+            if(tagged.length==0){
+                $('#divxc_lbl').hide();
+            }
+            div.text(tagged);
+            xlst.val(tagids);
+    }
+
+return false;
+}
+
+function resetInclude(){
+  $("#vc").val(0);
+  $('#divxc').text("");
+  $("#vclst").val("");
+  $("#lcat_v").html("&nbsp;&nbsp;&nbsp;<font size=1>-- Select --</font></i>&nbsp;&nbsp;&nbsp;");
+  $("#amf2").val(0);
+  $("#amf2").selectmenu('refresh');
+  return false;
+}
+
+function resetExclude(){
+    $("#xc").val(0);
+    $('#divxc').text("");
+    $("#lcat_x").html("&nbsp;&nbsp;&nbsp;<font size=1>-- Select --</font></i>&nbsp;&nbsp;&nbsp;");
+    $("#xclst").val("");
+    return false;
+}
+
+function viewByDate(btn) {
+    // alert(btn.value);
+}
+
+function submitNewCategory() {
+
+    var frm = $("#frm_config");
+    $("#frm_config [name='cchg']").val(2);
+    return true;
+}
+
+function deleteSelected() {
+    display("Please Wait!",150);
+    $("#opr").val(0);
+    $("#del_sel").click();
+    display("Please Wait!",150);
+    return false;
+}
+function dateDiffSelected() {
+    display("Please Wait!");
+    $("#opr").val(1);
+    return true;
+}
+function exportSelected() {
+    display("Please Wait!");
+    $("#opr").val(2);
+    return true;
+
+}
+function viewSelected() {
+    display("Please Wait!");
+    $("#opr").val(3);
+    return true;
+}
+
+
+
+function exportToCSV(dat, view){
+    var csv;
+    if(dat == 'cat'){  csv = view ? 4:3;  }
+    else
+    if(dat == 'log'){  csv = view ? 2:1;  }
+    window.location = "config.cgi?csv="+csv;
+}
+
+function sumSelected() {
+    var chks = document.getElementsByName("chk");
+    var sum = 0; var amount=0; var html="";
+    for (var i = 0, n = chks.length; i < n; i++) {
+        if (chks[i].checked) {
+            let id = chks[i].value;
+            let am = $("#a"+id).text();
+            let ct = $("#c"+id).text();
+            let at = $("#f"+id).val();
+
+            am = am.replace(/\,/g,"");//rem formatting
+            if(ct=='Expense' || at=='2'){
+                sum = sum - Number(am);
+                html += "-"+am+"<br>";
+            }else
+            if(ct=='Income' || at=='1'){ //marked as income or category is income type for amount.
+                sum = sum + Number(am);
+                html += "+"+am+"<br>";
+            }else{
+                amount += Number(am);
+                html += "<i>"+am+"</i><br>";
+            }
+        }
+    }
+    if(amount!=0){amount = "Amount sum: <i>"+amount+"</i> <b>Accounting sum: "}else{amount="<b>Accounting sum: "}
+    html += amount + sum.toFixed(2)+"</b>";
+    $("#summary").html(html);
+    return false;
+}
+
+
+
+
+/* <button id="loading-modal-demo" class="mdl-button mdl-js-button mdl-button--raised mdl-js-ripple-effect mdl-button--accent">
+
+$('#loading-modal-demo').click(function () {
+        showLoading();
+        setTimeout(function () {
+            hideLoading();
+        }, 2500);
+    }); */
+
+var RTF_SUBMIT = false;
+
+function saveRTF(id, action) {
+    // alert(JSON.stringify(QUILL.getContents()));
+
+    //Strip amount to show plain number.
+       var am = $("#am").val().trim();
+           am = am.replace(/[^\d\.]/g,"");
+       $("#am").val(am);
+
+    var is_submit = (id==-1);
+    if (id < 1) {
+        id = $("#submit_is_edit").val();
+    }
+
+
+
+    if(is_submit && (EDIT_LOG_TXT && $('#el').val() !== EDIT_LOG_TXT)){
+
+        if(formValidation()){ //If it is false, failed. That needs to altered by the user first.
+
+            $('<div></div>').dialog({
+                modal: true,
+                title: "You are Editing an Previous Log Entry",
+                width: "40%",
+                show: { effect: "clip", duration: 500 },
+                hide: { effect: "fold", duration: 1500},
+                open: function() {
+                    var sel = $("#bck input[type=radio]:checked").val();
+                    $(this).html('<div>Are you sure you want to submit your edit?</div><div>To make a copy of the current whole entry. '+
+                    'Click on the No button, and then on Now button on the form.</div>');
+                },
+                buttons: [
+
+                    { text: "Yes",
+                      icons: { primary: "ui-icon-circle-check" },
+                        click: function() {
+                            $( this ).dialog( "close" );
+                            $("#frm_entry").submit();
+                        }
+                    },
+
+                    { text: "No",
+                        click: function() {
+                            decodeText();
+                            $( this ).dialog( "close" );
+                            return false;
+                        }
+                    }
+                ]
+            });
+
+        }
+        return false;
+    }
+    else
+    if(is_submit && !$("#RTF").prop('checked')){
+       return true;//we submit normal log entry
+    }
+    RTF_SUBMIT = true;
+    var bg = $("#fldBG").val();
+    $.post('json.cgi', {action:'store', id:id, bg:bg, doc: JSON.stringify(
+            QUILL.getContents())},saveRTFResult).fail(
+                 function(response) {
+                     dialogModal("Service Error: "+response.status,response.responseText);
+                }
+                                                 );
+    if(is_submit){
+        $("#idx_cat").value = "SAVING DOCUMENT...";
+        $("#idx_cat").show();
+        //we must wait before submitting actual form!
+        setTimeout(delayedSubmit, 200);
+    }
+    return false;
+}
+
+function saveRTFResult(result) {
+    //console.log("Result->" + result);
+    var json = JSON.parse(result);
+    $("html, body").animate({ scrollTop: 0 }, "fast");
+
+    let msg = json.response;
+    if(json.log_id==0){
+        console.log(msg = "Saved to Buffer");
+
+    }else{
+        console.log(msg = "Saved document by lid -> "+json.log_id);
+    }
+    display(msg, 5);
+
+    if(json.log_id>0){
+        //update under log display
+        if($("#q-rtf"+json.log_id).is(":visible")){
+            loadRTF(true, json.log_id);
+        }
+    }else{
+        $('#btn_zero_doc').show();
+    }
+    RTF_SUBMIT = false;
+}
+
+function delayedSubmit(){
+    if(RTF_SUBMIT){
+        setTimeout(delayedSubmit, 200);
+        return;
+    }
+    $("#frm_entry").submit();
+}
+
+function dispFullLog(id){
+    let $log = $("#h"+id).val();
+    $("#v"+id).html('<div class="log">'+$log+'</div>');
+    return false;
+}
+
+
+function loadRTF(under, id){
+
+    //show under log entry the document
+    if(under){
+
+        if($("#q-rtf"+id).is(":visible")){
+            $("#q-rtf"+id).hide();
+            return false;
+        }
+        QUILL_PNL = new Quill('#q-container'+id, {
+            scrollingContainer: '#q-scroll'+id,
+            placeholder: 'Loading Document...',
+            readOnly: true,
+            //theme: 'bubble'
+          });
+          //console.log("Panel query json.cgi action -> load, id:" + id);
+          $.post('json.cgi', {action:'load', id:id}, loadRTFPnlResult);
+          $("#q-rtf"+id).show();
+          display("Load id -> " + id + " issued!", 1);
+        return false;
+    }else{
+        $("#rtf_doc").show();
+        $("#el").focus();
+    }
+
+    if(id==-1){
+       id = RTF_DOC_CUR_ID; // btn_load_rtf clicked
+    }
+
+    QUILL.setText('Loading Document...\n');
+    $.post('json.cgi', {action:'load', id:id}, loadRTFResult).fail(
+           function(response) {dialogModal("Service Error: "+response.status,response.responseText);}
+    );
+
+    $("#rtf_doc").show();
+    $('#tbl_doc').show();
+    $('#toolbar-container').show();
+
+    return false;
+}
+
+function loadRTFPnlResult(content, result, prms) {
+    loadRTFResult(content, result, prms, QUILL_PNL);
+}
+
+function loadRTFResult(content, result, prms, quill) {
+    console.log(content);
+    var json = JSON.parse(content);
+    if(!quill)quill=QUILL;
+
+    $('#fldbg').val(json.content.bg);
+       quill.setContents(json.content.doc);
+    if(quill===QUILL){
+        $("#fldBG").val(json.content.bg);
+        editorBackground(false);
+    }
+    else{
+        var id = json.log_id;
+        var cls = $("#q-scroll"+id).parent().parent().attr("class");
+       // alert(css);
+        $("#q-scroll"+id).attr('class',cls);
+        var css = $("#q-scroll"+id).prop('style');
+        $("#q-scroll"+id).attr('class',cls);
+        if(css){
+            css.backgroundColor = DEF_BACKGROUND; //Removing colours makes it inherit from parent these properties.
+            css.foregroundColor = "";//json.content.fg;
+        }
+    }
+
+    let msg = json.response;
+    if(json.error){
+        dialogModal("Service Error", json.error);
+    }
+    if(json.log_id==0){
+        console.log(msg = "Loaded in Buffer");
+        $('#btn_zero_doc').show();
+    }else{
+        console.log(msg = "Loaded in document by lid -> "+json.log_id);
+        $('#btn_load_doc').show();
+    }
+    display(msg, 3);
+}
+
+
+
+
+function editorBackground(reset){
+    var css = $("#editor-container").prop('style');
+    if(reset){
+        css.foregroundColor = black;
+        css.backgroundColor = DEF_BACKGROUND;
+        $("#fldBG").val(DEF_BACKGROUND);
+    }
+    else{
+        css.foregroundColor = black;
+        css.backgroundColor = $("#fldBG").val();
+    }
+}
+
+
+function RGBToHex(rgb) {
+    // Choose correct separator
+    var sep = rgb.indexOf(",") > -1 ? "," : " ";
+    // Turn "rgb(r,g,b)" into [r,g,b]
+    rgb = rgb.substr(4).split(")")[0].split(sep);
+
+    var r = (+rgb[0]).toString(16),
+        g = (+rgb[1]).toString(16),
+        b = (+rgb[2]).toString(16);
+
+    if (r.length == 1)  r = "0" + r;
+    if (g.length == 1)  g = "0" + g;
+    if (b.length == 1)  b = "0" + b;
+
+    return "#" + r + g + b;
+}
+
+function fetchBackup() {
+    window.location = "config.cgi?bck=1";
+    setTimeout("location.reload(true);", 5000);
+}
+function deleteBackup() {
+    $('<div></div>').dialog({
+        modal: true,
+        title: "Please Confirm?",
+        width: "40%",
+        show: { effect: "clip", duration: 1000 },
+        hide: { effect: "explode", duration: 1000},
+        open: function() {
+            var sel = $("#frm_bck input[type=radio]:checked").val();
+          $(this).html("Are you sure you want to delete file:<br><b>"+sel+"</b>");
+        },
+        buttons: [
+             {  text: "Yes",
+                icon: "ui-icon-trash",
+                click: function() {
+                  $( this ).dialog( "close" );
+                    var sel = $( "#frm_bck input[type=radio]:checked").val();
+                    window.location = "config.cgi?bck_del="+sel+"#backup";
+                }
+              },
+
+            { text: "No",
+                click: function() { $( this ).dialog( "close" );
+                return false;
+                }
+            }
+        ]
+    });
+}
+
+
+function setPageSessionTimer(expires) {
+
+    var timeout;
+    var now = new moment();
+    var val = expires.replace(/\+|[A-Z]|[a-z]/g, '');
+
+    if(expires.indexOf("h")>0){
+        timeout = moment(now).add(val, "h");
+    }
+    else
+    if(expires.indexOf("m")>0){
+        if(val<2){val=2};
+        timeout = moment(now).add(val, "m");
+    }
+    else
+    if(expires.indexOf("s")>0){
+        if(val<60){val=2};
+        timeout = moment(now).add(val, "s");
+    }
+    else{
+        if(val<2){val=2};
+        timeout = moment(now).add(val, "m");
+    }
+    var WARNED =0;
+    var timer   =  setInterval(function() {
+            var now = new moment();
+            var dif = timeout.diff(now);
+            var min = Math.floor(dif / 60000);
+            var sec = ((dif % 60000) / 1000).toFixed(0);
+            var out = (min < 10 ? '0' : '') + min + ":" + (sec < 10 ? '0' : '') + sec;
+            var tim = new moment().tz(TIMEZONE).format("hh:mm:ss a");
+            var sty = "";if(min<2){sty="style='color:red'";
+            if(!WARNED){WARNED=1;
+                if($('#auto_logoff').val()=='0'){
+                   $('#au_door_chime').trigger('play');
+                }else{
+                    $('#btnLogout').click();
+                }
+                display("<span id='sss_expired'>Session is about to expire!</span>",10);}
+            }
+            var dsp = "<font size='1px;'>[" + tim + "]</font><span "+sty+"> Session expires in " + out + "</span>";
+            $("#sss_status").html(dsp);
+            if(now.isAfter(timeout)){
+                $("#sss_status").html("<span id='sss_expired'><a href='login_ctr.cgi'>Page Session has Expired!</a></span>");
+                clearInterval(timer);
+                $("#ed").prop( "disabled", true );
+                $("#el").prop( "disabled", true );
+                $("#am").prop( "disabled", true );
+                if($('#auto_logoff').val()=='1'){
+                      dialogModal("Page Session has Expired","Please login again!", true);
+                }
+            }
+
+        }, 1000);
+       }
+
+ function  checkConfigCatsChange(){
+     var e1 = $('#frm_config input[name="caid"]').val();
+     var e2 = $('#frm_config input[name="canm"]').val();
+     if(e1.length>0 && e2.length>0){
+     return dialogModal("Sorry Categories Config Validation Failed",
+                        "Did you fail to clear or add a new category first? ->" + e2);
+     }
+     return true;
+ }
+
+ function dialogModal(title, message, logout) {
+
+    if(logout) {
+        $('<div></div>').dialog({
+            modal: true,
+            title: title,
+            width: "40%",
+            show: { effect: "clip", duration: 400 },
+            open: function() {
+            $(this).html(message);
+            },
+            buttons: {
+                Logout: function() {
+                    $( this ).dialog( "close" );
+                    location.reload();
+                }
+            }
+        });
+    }else {
+
+            $('<div></div>').dialog({
+                modal: true,
+                title: title,
+                width: "40%",
+                show: { effect: "clip", duration: 400 },
+                open: function() {
+                $(this).html(message);
+                },
+                buttons: {
+                    Ok: function() {
+                    $( this ).dialog( "close" );
+                    }
+                }
+            });
+    }
+return false;
+ }
+
diff --git a/htdocs/cgi-bin/wsrc/main_earth.css b/htdocs/cgi-bin/wsrc/main_earth.css
new file mode 100644 (file)
index 0000000..db04c8a
--- /dev/null
@@ -0,0 +1,370 @@
+body{
+    font-family: -apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Bookman,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji;
+    font-size: 14px;
+    margin: 0;
+    padding:0;
+    background-image: url('images/page-bck-earth.png');
+    background-repeat: no-repeat;
+    background-attachment: fixed;
+}
+.content {
+    margin: 0;
+    padding:0;
+}
+p {
+    font-family: Bookman;
+    margin-left: 70px;
+    font-weight: bold;
+}
+pre{
+    color: #070707;
+    text-align:left;
+    background-color: gainsboro;
+    opacity: 5;
+}
+table,
+th,
+td {
+    font-family: Bookman;
+    border-collapse: collapse;
+    padding: 5px;
+    margin: auto;
+}
+
+div {
+    font-family: Bookman;
+    text-align: center;
+    vertical-align: middle;
+}
+
+#div_log {
+    font-weight: bold;
+}
+#div_srh {
+    text-align: center;
+    vertical-align: middle;
+    display: none;
+    margin-top: 5px;
+    margin-bottom: 0px;
+    font-weight: bold;
+}
+
+TABLE,
+th,
+.tbl {
+    border: 1px solid black;
+    padding-top: 5px;
+    padding-right: 5px;
+    padding-bottom: 5px;
+    padding-left: 5px;
+    margin-bottom: 0px;
+    margin-top: 5px;
+}
+
+.tbl_rem {
+    border: 1px solid black;
+    border-right: 1px solid black;
+    border-bottom: 1px solid black;
+    padding-top: 5px;
+    padding-right: 5px;
+    padding-bottom: 5px;
+    padding-left: 5px;
+    text-align: left;
+}
+
+#cat_desc {
+    position: absolute;
+    border: 2px solid #7a3d03;
+    padding: 5px;
+    text-align: center;
+    background: #d1663c;
+    color: #d8d8d8;
+    margin-top: 20px;
+    margin-left: 200px;
+    width: 280px;
+    text-decoration-style: wavy;
+}
+
+.span_cat {
+    font-family: Bookman;
+    border: 1px solid #7a3d03;
+    border-style: inset;
+    padding: 2px;
+    padding-right: 10px;
+    padding-left: 10px;
+    box-sizing: border-box;
+    width: auto;
+}
+
+#cat_lst {
+    visibility: hidden;
+}
+
+.r0 {
+    background-color: #d1663c;
+    border: 1px solid black;
+    border-right: 1px solid black;
+    vertical-align: top;
+}
+.r1 {
+    background-color: #a5682f;
+    border: 1px solid black;
+    border-right: 1px solid black;
+    vertical-align: top;
+}
+.r2 {
+    background-color: #e97f56;
+    border: 1px solid black;
+    border-right: 1px solid black;
+    vertical-align: top;
+}
+.r3 {
+    background-color: #ee9440;
+    border: 1px solid black;
+    border-right: 1px solid black;
+    vertical-align: top;
+}
+.rz {
+    border: 1px solid black;
+    text-align: left;
+    background-color: #4d9b46;
+    vertical-align: top;
+    align-self: baseline;
+    height: auto;
+    padding: 2%;
+    margin: 0px auto;
+}
+.login {
+    vertical-align: middle; text-align:center; width: 60% !important;
+    background-image:repeating-radial-gradient(cyan, green, brown)
+}
+div#rz {
+    border: 1px solid black;
+    text-align: left;
+    background-color: #6ed16e;
+    vertical-align: top;
+    align-self: baseline;
+    height: auto;
+    padding: 2px;
+    margin: 0px auto;
+}
+.hdr {
+    font-style: normal;
+    font-weight: bold;
+    font-size: large;
+    background-color: #d1663c;
+    border: 1px solid #16380f;
+    border-right: 1px solid black;
+    text-align: center;
+}
+
+.edit {
+    margin: 2px;
+    padding: 2px;
+    font-size: 9pt;
+    color: midnightblue
+}
+
+#al {
+    align-items: left;
+    align-content: left;
+    text-align: left;
+}
+
+.log {
+    max-width:550px;
+    text-align: left;
+    word-wrap: break-word;
+    white-space: normal;
+    padding-left: 5px;
+    overflow-y:hidden;
+}
+
+
+.log::-webkit-scrollbar {
+    -webkit-appearance: none;
+}
+
+.log::-webkit-scrollbar:vertical {
+    width: 12px;
+}
+
+.log::-webkit-scrollbar:horizontal {
+    height: 12px;
+}
+
+.log::-webkit-scrollbar-thumb {
+    border-radius: 8px;
+    border: 2px solid white; /* should match background, can't be transparent */
+    background-color: rgba(0, 0, 0, .5);
+}
+
+
+#tag_FRM {
+    border: 2px solid #07750d;
+    padding: 5px;
+    text-align: right;
+    vertical-align: top;
+}
+
+img {
+    float: left;
+    padding: 0 10px
+}
+
+#menu {
+    position: fixed;
+    float: left;
+    margin: 0;
+    border: 2px solid #6a4d17;
+    padding: 5px;
+    text-align: center;
+    margin-left: 90%;
+    background: #c28a4a;
+
+}
+
+/*extends properties in effects.css*/
+#menu_page {
+    border: 1px solid #506354;
+    padding: 8px;
+    filter: drop-shadow(10px 8px 5px #577272);
+}
+
+#frm_login {
+    vertical-align: middle;
+    margin: 0;
+}
+
+.marg-top-2{
+    margin-top: 2px;
+}
+.nav_data{
+margin-top: 5px;
+border: 1px solid;
+padding: 5px;
+}
+.ui-icon,.menu_title {
+    background-color: aliceblue;
+    font-weight: bolder;
+    color: #070707;
+}
+.ui-button {
+    font-size: 12px !important;
+}
+.ui-button:hover {
+    background: #a0d7dc;
+    background-image: none;
+    color: #000000  !important;
+}
+.ui-selectmenu-button:{
+    background-image: none;
+}
+
+.ui-menu {
+    list-style: none;
+    padding: 10px;
+    margin: 0;
+    display: block;
+    width: 227px;
+    text-align: left;
+}
+
+.ui-menu .ui-menu {
+    margin-top: -3px;
+}
+
+.ui-menu .ui-menu-item {
+    margin: 0;
+    padding: 0;
+    width: 200px;
+}
+
+.ui-menu .ui-menu-item a {
+    text-decoration: none;
+    display: block;
+    padding: .2em .4em;
+    line-height: 1.5;
+    zoom: 1;
+}
+
+.ui-menu .ui-menu-item a.ui-state-hover,
+.ui-menu .ui-menu-item a.ui-state-active {
+    margin: -1px;
+}
+.ui-icon{
+    float:right;
+}
+
+#standalone-container {
+    margin-top: 5px;
+    border: 1px solid black;
+}
+
+#editor-container {
+    height: 140px;
+    max-height: 480px;
+    border-top: 1px solid gray;
+    border-right: 1px solid gray;
+    background-color: #98e6e6;
+}
+
+#toolbar-container {
+    border: 1px solid black;
+    background-color: #98e6e6;
+    margin-bottom: 3px;
+}
+
+.save_button {
+    margin-top: 3px;
+    float: right;
+}
+
+#btnRTF {
+    float: right;
+}
+.midnight{
+    color:#adeccc;
+}
+
+
+a:link {
+    color:#f8f868;
+  }
+  a:visited {
+    color: #d2d8d2;
+  }
+  a:hover {
+    color: #04f87e;
+  }
+  a:active {
+      color: #ff7b00;
+  }
+
+  #sss_status{
+    font-size: smaller;
+    font-style: italic;
+    background-color: #c0a873;
+    color:lawngreen;
+    padding:5px;
+  }
+
+
+ #sss_expired a {
+    font-size: large;
+    font-style: normal;
+    font-weight: bold;
+    background-color: #26be54;
+    color:crimson;
+    padding:15px
+}
+.hover{
+    background-color: #335757;
+}
+#lcat{ margin: 0; padding: 5px;}
+.debug_output {
+    font-size: large;
+    background-color:#c0a873;
+    text-align: left;
+    font-family: monospace;
+}
\ No newline at end of file
diff --git a/htdocs/cgi-bin/wsrc/main_moon.css b/htdocs/cgi-bin/wsrc/main_moon.css
new file mode 100644 (file)
index 0000000..1b82d02
--- /dev/null
@@ -0,0 +1,396 @@
+body{
+    font-family: -apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Bookman,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji;
+    font-size: 14px;
+    margin: 0;
+    padding:0;
+    background-image: url('images/page-bck-moon.png');
+    background-repeat: no-repeat;
+    background-attachment: fixed;
+    background-size: cover;
+}
+.content{
+    margin: 0;
+    padding:0;
+}
+p {
+    font-family: Bookman;
+    margin-left: 70px;
+    font-weight: bold;
+}
+
+pre{
+    color: #070707;
+    text-align:left;
+    background-color:#ff7b00 ;
+    opacity: 5;
+    overflow-x:auto;
+}
+
+table,
+th,
+td {
+    font-family: Bookman;
+    border-collapse: collapse;
+    padding: 5px;
+    margin: auto;
+    color: #d8d8d8;
+}
+
+div {
+    font-family: Bookman;
+    text-align: center;
+    vertical-align: middle;
+    color: #d8d8d8;
+}
+
+#div_log {
+    font-weight: bold;
+}
+#div_srh {
+    text-align: center;
+    vertical-align: middle;
+    display: none;
+    margin-top: 5px;
+    margin-bottom: 0px;
+    font-weight: bold;
+}
+
+TABLE,
+th,
+.tbl {
+    border: 1px solid white;
+    padding-top: 5px;
+    padding-right: 5px;
+    padding-bottom: 5px;
+    padding-left: 5px;
+    margin-bottom: 0px;
+    margin-top: 5px;
+}
+
+.tbl_rem {
+    border: 1px solid white;
+    border-right: 1px solid white;
+    border-bottom: 1px solid white;
+    padding-top: 5px;
+    padding-right: 5px;
+    padding-bottom: 5px;
+    padding-left: 5px;
+    text-align: left;
+}
+
+#cat_desc {
+    position: absolute;
+    border: 2px solid #9bb6c3;
+    padding: 5px;
+    text-align: center;
+    background: #0f0f0f;
+    color: #d8d8d8;
+    margin-top: 20px;
+    margin-left: 200px;
+    width: 280px;
+    text-decoration-style: wavy;
+}
+.span_cat {
+    border:1px solid #9bb6c3;
+    border-style: outset;
+    padding: 2px;
+    padding-right: 5px;
+    width: 180px;
+}
+
+#cat_lst {
+    visibility: hidden;
+}
+
+.r0 {
+    background-color: #535353;
+    border: 1px solid white;
+    border-right: 1px solid white;
+    vertical-align: top;
+    color:black;
+}
+.remember{ background-color:#553232;}
+.r0.hover{
+        background-color: #724242;
+}
+.r1 {
+    background-color: #272626;
+    border: 1px solid white;
+    border-right: 1px solid white;
+    vertical-align: top;
+    width: fit-content;
+}
+.r1.hover td div{
+        background-color: #b4a9a9;
+        color:#323232;
+}
+.r2 {
+    background-color: #636969;
+    border: 1px solid white;
+    border-right: 1px solid white;
+    vertical-align: top;
+}
+.r3 {
+    background-color: #918383;
+    border: 1px solid white;
+    border-right: 1px solid white;
+    vertical-align: top;
+}
+.rz {
+    border: 1px solid white;
+    text-align: left;
+    background-color: #363531;
+    color: #cfcfe6;
+    vertical-align: top;
+    align-self: baseline;
+    height: auto;
+    margin: 0px auto;
+    padding:10px;
+}
+.login {
+
+    vertical-align: middle; text-align:center; width: 60% !important;
+    background-repeat: no-repeat;
+    background:#64614e7a;
+}
+div#rz {
+    border: 1px solid white;
+    text-align: left;
+    background-color:#363531;
+    color:#f3f0e6;
+    vertical-align: top;
+    align-self: baseline;
+    height: auto;
+    padding: 2px;
+    margin: 0px auto;
+}
+
+.hdr {
+    font-style: normal;
+    font-weight: bold;
+    font-size: large;
+    background-color: #55555F;
+    border: 1px solid white;
+    border-right: 1px solid white;
+    text-align: center;
+}
+
+.edit {
+    margin: 2px;
+    padding: 2px;
+    font-size: 9pt;
+    color: #aeaee4;
+}
+
+#al {
+    align-items: left;
+    align-content: left;
+    text-align: left;
+}
+
+.log {
+    max-width:550px;
+    text-align: left;
+    word-wrap: break-word;
+    white-space: normal;
+    padding-left: 5px;
+    overflow-y:hidden;
+}
+
+
+.log::-webkit-scrollbar {
+    -webkit-appearance: none;
+}
+
+.log::-webkit-scrollbar:vertical {
+    width: 12px;
+}
+
+.log::-webkit-scrollbar:horizontal {
+    height: 12px;
+}
+
+.log::-webkit-scrollbar-thumb {
+    border-radius: 8px;
+    border: 2px solid white; /* should match background, can't be transparent */
+    background-color: rgba(0, 0, 0, .5);
+}
+
+#tag_FRM {
+    border: 2px solid #2b3d46;
+    padding: 5px;
+    text-align: right;
+    vertical-align: top;
+}
+
+img {
+    float: left;
+    padding: 0 10px
+}
+
+
+#menu {
+    position: fixed;
+    float: left;
+    margin: 0;
+    border: 2px solid #9bb6c3;
+    padding: 5px;
+    text-align: center;
+    margin-left: 90%;
+    color: white;
+    background-color: #363531;
+}
+/*extends properties in effects.css*/
+#menu_page {
+    border: 1px solid aliceblue;
+    padding: 8px;
+    filter: drop-shadow(10px 8px 5px #577272);
+}
+
+#frm_login {
+    vertical-align: middle;
+    margin: 0;
+}
+
+.marg-top-2{
+    margin-top: 2px;
+}
+.nav_data{
+margin-top: 5px;
+border: 1px solid;
+padding: 5px;
+}
+
+.ui-icon,.menu_title {
+    background-color: aliceblue;
+    font-weight: bolder;
+    color: #070707;
+}
+.ui-button {
+    font-size: 12px !important;
+}
+.ui-button:hover {
+    background: #a0d7dc;
+    background-image: none;
+    color: #000000  !important;
+}
+.ui-selectmenu-button:{
+    background-image: none;
+}
+
+.ui-menu {
+    list-style: none;
+    padding: 10px;
+    margin: 0;
+    display: block;
+    text-align: left;
+    background-image: none;
+    background:  #e4f1fb;
+}
+
+.ui-menu .ui-menu {
+    margin-top: -3px;
+}
+
+.ui-menu .ui-menu-item {
+    margin: 0;
+    padding: 0;
+    width: 200px;
+    color: #000000;
+}
+.ui-menu .ui-menu-item-wrapper {
+    color: #000000;
+  }
+
+.ui-menu .ui-menu-item a {
+    text-decoration: none;
+    display: block;
+    padding: .2em .4em;
+    line-height: 1.5;
+    zoom: 1;
+}
+
+.ui-menu .ui-menu-item a.ui-state-hover,
+.ui-menu .ui-menu-item a.ui-state-active {
+    margin: -1px;
+}
+.ui-icon{
+    float:right;
+}
+
+#standalone-container {
+    margin-top: 5px;
+    border: 1px solid white;
+}
+
+#editor-container {
+    height: 140px;
+    max-height: 480px;
+    border-top: 1px solid gray;
+    border-right: 1px solid gray;
+    background-color: #363531;
+}
+
+#toolbar-container {
+    border: 1px solid white;
+    background-color: rgb(180, 169, 169);
+    margin-bottom: 3px;
+}
+
+.save_button {
+    margin-top: 3px;
+    float: right;
+}
+
+#btnRTF {
+    float: right;
+}
+
+.midnight{
+   color:#f8f868;
+}
+
+a:link {
+  color:#f8f868;
+}
+a:visited {
+  color: #d2d8d2;
+}
+a:hover {
+  color: #04c7f8;
+  font-style:normal;
+}
+a:active {
+    color: #ff7b00;
+}
+
+#sss_status{
+    font-size: smaller;
+    font-style: italic;
+    background-color:#9bb6c3;
+    color: #724242;
+    padding:5px;
+}
+
+ #sss_expired a{
+    font-size: large;
+    font-style: normal;
+    font-weight: bold;
+    background-color:#9bb6c3;
+    color:crimson;
+    padding:15px
+}
+.hover{
+    background-color: #8d8d83;
+}
+#lcat{ margin: 0; padding: 5px;}
+
+.debug_output {
+    font-size:smaller;
+    color: rgb(105, 15, 15);
+    background-color:#9bb6c3;
+    text-align: left;
+    font-family: monospace;
+    opacity: 8;
+    padding: 5px;
+}
\ No newline at end of file
diff --git a/htdocs/cgi-bin/wsrc/main_sun.css b/htdocs/cgi-bin/wsrc/main_sun.css
new file mode 100644 (file)
index 0000000..5e9e9d8
--- /dev/null
@@ -0,0 +1,439 @@
+body{
+    font-family: -apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Bookman,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji;
+    font-size: 14px;
+    background-color: #FFD700;
+    margin: 0;
+    padding:0;
+    background-image: url('images/page-bck-sun.png');
+    background-repeat: no-repeat;
+    background-attachment: fixed;
+    background-size: cover;
+}
+.content {
+    margin: 0;
+    padding:0;
+}
+
+p {
+    margin-left: 70px;
+    font-weight: bold;
+}
+pre{
+    color: black;
+    text-align:left;
+    background-color: coral;
+    opacity: 5;
+    overflow-x:auto;
+}
+table,
+th,
+td {
+    border-collapse: collapse;
+    padding: 5px;
+    margin: auto;
+}
+
+div {
+    font-family: Bookman;
+    text-align: center;
+    vertical-align: middle;
+}
+
+#div_log {
+    font-weight: bold;
+}
+#div_srh {
+    text-align: center;
+    vertical-align: middle;
+    display: none;
+    margin-top: 5px;
+    margin-bottom: 0px;
+    font-weight: bold;
+}
+
+TABLE,
+th,
+.tbl {
+    border: 1px solid black;
+    padding-top: 5px;
+    padding-right: 5px;
+    padding-bottom: 5px;
+    padding-left: 5px;
+    margin-bottom: 0px;
+    margin-top: 5px;
+}
+
+.tbl_rem {
+    border: 1px solid black;
+    border-right: 1px solid black;
+    border-bottom: 1px solid black;
+    padding-top: 5px;
+    padding-right: 5px;
+    padding-bottom: 5px;
+    padding-left: 5px;
+    text-align: left;
+}
+#cat_desc {
+    position: absolute;
+    border: 2px solid black;
+    padding: 5px;
+    text-align: center;
+    background: #D4AF37;
+    color:black;
+    margin-top: 20px;
+    margin-left: 200px;
+    width: 280px;
+    text-decoration-style: wavy;
+
+}
+.span_cat {
+    font-family: Bookman;
+    border: 1px solid #b2f8ef;
+    border-bottom: solid #76fa42 1px;
+    border-style: inset;
+    padding: 2px;
+    padding-right: 10px;
+    padding-left: 10px;
+    box-sizing: border-box;
+    width: auto;}
+#cat_lst {
+    visibility: hidden;
+}
+.r0 {
+    background-color: #FFDF00;
+    border: 1px solid black;
+    border-right: 1px solid black;
+    vertical-align: top;
+}
+.r0.hover{
+    background-color: #ffdd00c4;
+}
+.r1 {
+    background-color: #FFEA00;
+    border: 1px solid black;
+    border-right: 1px solid black;
+    vertical-align: top;
+}
+.r1.hover{
+    background-color: #ffea00c5;
+}
+
+
+.r2 {
+    background-color: #FFe24b;
+    border: 1px solid black;
+    border-right: 1px solid black;
+    vertical-align: top;
+}
+.r3 {
+    background-color: #ffcf35;
+    border: 1px solid black;
+    border-right: 1px solid black;
+    vertical-align: top;
+}
+
+.rz {
+    border: 1px solid black;
+    text-align: left;
+    background-color: #D4AF37;
+    vertical-align: top;
+    align-self: baseline;
+    height: auto;
+    padding: 2%;
+    margin: 0px auto;
+}
+div#rz {
+    border: 1px solid black;
+    text-align: left;
+    background-color: #ffeb35;
+    color: #000;
+    vertical-align: top;
+    align-self: baseline;
+    height: auto;
+    padding: 2px;
+    margin: 0px auto;
+}
+.hdr {
+    font-style: normal;
+    font-weight: bold;
+    font-size: large;
+    background-color: #f0cc57;
+    border: 1px solid black;
+    border-right: 1px solid black;
+    text-align: center;
+}
+.login {
+    vertical-align: middle; text-align:center; width: 60% !important;
+    background:black url('images/Sun-Rotating.gif');
+    background-repeat: no-repeat;
+    background-repeat: space;
+    background-position-x: right;
+}
+.edit {
+    margin: 2px;
+    padding: 2px;
+    font-size: 9pt;
+    color: midnightblue
+}
+
+#al {
+    align-items: left;
+    align-content: left;
+    text-align: left;
+}
+
+.log {
+    max-width:550px;
+    text-align: left;
+    word-wrap: break-word;
+    white-space: normal;
+    padding-left: 5px;
+    overflow-y:hidden;
+}
+
+
+.log::-webkit-scrollbar {
+    -webkit-appearance: none;
+}
+
+.log::-webkit-scrollbar:vertical {
+    width: 12px;
+}
+
+.log::-webkit-scrollbar:horizontal {
+    height: 12px;
+}
+
+.log::-webkit-scrollbar-thumb {
+    border-radius: 8px;
+    border: 2px solid white; /* should match background, can't be transparent */
+    background-color: rgba(0, 0, 0, .5);
+}
+
+
+#tag_FRM {
+    border: 2px solid #e7b994;
+    padding: 5px;
+    text-align: right;
+    vertical-align: top;
+}
+
+img {
+    float: left;
+    padding: 0 10px
+}
+
+#menu {
+    position: fixed;
+    float: left;
+    margin: 0;
+    border: 1px solid black;
+    padding: 5px;
+    text-align: center;
+    background: #D4AF37;
+    margin-left: 91%;
+}
+
+#menu_page {
+    border: 2px solid #C2B034;
+}
+.marg-top-2{
+    margin-top: 2px;
+}
+
+#frm_login {
+    vertical-align: middle;
+    margin: 0;
+}
+.ui-icon,.menu_title {
+    background-color: gold;
+    font-weight: bolder;
+}
+.ui-button {
+  font-size: 12px !important;
+}
+.ui-button:hover {
+    background: #fad900;
+    background-image: none;
+    color: #000000  !important;
+}
+.ui-selectmenu-button:{
+    background-image: none;
+}
+.ui-selectmenu-button:hover{
+    background-image: none;
+    background: #fad900;
+}
+
+.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default, .ui-button, html .ui-button.ui-state-disabled:hover, html .ui-button.ui-state-disabled:active {
+    border: 1px solid #ead5ae;
+    background-color: #d4af37;
+    background: #fbff00;
+}
+.dropdown-menu table td{
+    color:rgb(226, 34, 34);
+    background: #fbff00;
+    border-radius: 2pt;
+    padding:0px;
+    margin:2px;
+    text-align: left;
+    vertical-align: text-top;
+}
+.dropdown-menu tr td ul {
+    min-width:140px;
+    list-style:none;
+    background: #fbff00;
+    box-shadow:0 3px 5px rgba(0,0,0,0.1);
+    padding:0;
+    margin:1px;
+}
+.ui-widget-header {
+       border: 1px solid #40413e;
+       background: #fbff00;
+       color: #222222;
+       font-weight: bold;
+}
+.ui-widget-content{
+       border: 1px solid #dddddd;
+       background: #e9ff27;
+       color: #362b36;
+}
+
+.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default, .ui-button, html .ui-button.ui-state-disabled:hover,
+ html .ui-button.ui-state-disabled:active {
+       border: 1px solid #ead5ae;
+       background-color: #d4af37;
+       background: #e9ff27;
+}
+
+.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default, .ui-button, html .ui-button.ui-state-disabled:hover,
+html .ui-button.ui-state-disabled:active {
+       border: 1px solid #978567;
+       background: #f6f200;
+       font-weight: bold;
+    color: #0c0c0c;
+}
+.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active, a.ui-button:active, .ui-button:active,
+.ui-button.ui-state-active:hover {
+       border: 1px solid #fa0404;
+       background:#ffdf00;
+       font-weight: bold;
+       color: #ff2b06;
+}
+.ui-widget.ui-widget-content {
+       border: 1px solid #131311;
+    color: #362b36;
+    font-weight: bold;
+}
+.ui-widget-content {
+       background: #fbff00;
+       color: #362b36;
+}
+.ui-menu {
+    list-style: none;
+    padding: 10px;
+    margin: 0;
+    display: block;
+    width: 227px;
+    text-align: left;
+}
+
+.ui-menu .ui-menu {
+    margin-top: -3px;
+}
+
+.ui-menu .ui-menu-item {
+    margin: 0;
+    padding: 0;
+    width: 200px;
+}
+
+.ui-menu .ui-menu-item a {
+    text-decoration: none;
+    display: block;
+    padding: .2em .4em;
+    line-height: 1.5;
+    zoom: 1;
+}
+
+.ui-menu .ui-menu-item a.ui-state-hover,
+.ui-menu .ui-menu-item a.ui-state-active {
+    margin: -1px;
+}
+.ui-icon{
+    float:right;
+}
+
+#standalone-container {
+    margin-top: 5px;
+    border: 1px solid black;
+}
+
+#editor-container {
+    height: 140px;
+    max-height: 480px;
+    border-top: 1px solid gray;
+    border-right: 1px solid gray;
+    background-color: #D4AF37;
+}
+
+#toolbar-container {
+    border: 1px solid black;
+    background-color: #D4AF37;
+    margin-bottom: 3px;
+}
+
+.save_button {
+    margin-top: 3px;
+    float: right;
+}
+
+#btnRTF {
+    float: right;
+}
+
+.midnight{
+    color:midnightblue;
+}
+a:link {
+    color: #5c00ff;
+}
+a:visited {
+color: #d7165a;
+font-style: italic;
+}
+a:hover {
+    color: #000000;
+    font-style:normal;
+}
+a:active {
+    color: #1eff00;
+}
+#sss_status{
+    font-size: smaller;
+    font-style: italic;
+    background-color: #eeff00;
+    color:peru;
+    padding:5px;
+}
+
+#sss_expired a{
+    font-size: large;
+    font-style: normal;
+    font-weight: bold;
+    background-color: #eeff00;
+    color:crimson;
+    padding:15px
+}
+
+.hover{
+    background-color: #fffb00;
+}
+#lcat{ margin: 0; padding: 5px;}
+.debug_output {
+    font-size:smaller;
+    background-color:goldenrod;
+    text-align: left;
+    font-family: monospace;
+    opacity: 8;
+}
\ No newline at end of file
diff --git a/htdocs/cgi-bin/wsrc/moment-timezone-with-data.js b/htdocs/cgi-bin/wsrc/moment-timezone-with-data.js
new file mode 100644 (file)
index 0000000..5aac40d
--- /dev/null
@@ -0,0 +1,1224 @@
+//! moment-timezone.js
+//! version : 0.5.25
+//! Copyright (c) JS Foundation and other contributors
+//! license : MIT
+//! github.com/moment/moment-timezone
+
+(function (root, factory) {
+       "use strict";
+
+       /*global define*/
+       if (typeof module === 'object' && module.exports) {
+               module.exports = factory(require('moment')); // Node
+       } else if (typeof define === 'function' && define.amd) {
+               define(['moment'], factory);                 // AMD
+       } else {
+               factory(root.moment);                        // Browser
+       }
+}(this, function (moment) {
+       "use strict";
+
+       // Do not load moment-timezone a second time.
+       // if (moment.tz !== undefined) {
+       //      logError('Moment Timezone ' + moment.tz.version + ' was already loaded ' + (moment.tz.dataVersion ? 'with data from ' : 'without any data') + moment.tz.dataVersion);
+       //      return moment;
+       // }
+
+       var VERSION = "0.5.25",
+               zones = {},
+               links = {},
+               names = {},
+               guesses = {},
+               cachedGuess;
+
+       if (!moment || typeof moment.version !== 'string') {
+               logError('Moment Timezone requires Moment.js. See https://momentjs.com/timezone/docs/#/use-it/browser/');
+       }
+
+       var momentVersion = moment.version.split('.'),
+               major = +momentVersion[0],
+               minor = +momentVersion[1];
+
+       // Moment.js version check
+       if (major < 2 || (major === 2 && minor < 6)) {
+               logError('Moment Timezone requires Moment.js >= 2.6.0. You are using Moment.js ' + moment.version + '. See momentjs.com');
+       }
+
+       /************************************
+               Unpacking
+       ************************************/
+
+       function charCodeToInt(charCode) {
+               if (charCode > 96) {
+                       return charCode - 87;
+               } else if (charCode > 64) {
+                       return charCode - 29;
+               }
+               return charCode - 48;
+       }
+
+       function unpackBase60(string) {
+               var i = 0,
+                       parts = string.split('.'),
+                       whole = parts[0],
+                       fractional = parts[1] || '',
+                       multiplier = 1,
+                       num,
+                       out = 0,
+                       sign = 1;
+
+               // handle negative numbers
+               if (string.charCodeAt(0) === 45) {
+                       i = 1;
+                       sign = -1;
+               }
+
+               // handle digits before the decimal
+               for (i; i < whole.length; i++) {
+                       num = charCodeToInt(whole.charCodeAt(i));
+                       out = 60 * out + num;
+               }
+
+               // handle digits after the decimal
+               for (i = 0; i < fractional.length; i++) {
+                       multiplier = multiplier / 60;
+                       num = charCodeToInt(fractional.charCodeAt(i));
+                       out += num * multiplier;
+               }
+
+               return out * sign;
+       }
+
+       function arrayToInt (array) {
+               for (var i = 0; i < array.length; i++) {
+                       array[i] = unpackBase60(array[i]);
+               }
+       }
+
+       function intToUntil (array, length) {
+               for (var i = 0; i < length; i++) {
+                       array[i] = Math.round((array[i - 1] || 0) + (array[i] * 60000)); // minutes to milliseconds
+               }
+
+               array[length - 1] = Infinity;
+       }
+
+       function mapIndices (source, indices) {
+               var out = [], i;
+
+               for (i = 0; i < indices.length; i++) {
+                       out[i] = source[indices[i]];
+               }
+
+               return out;
+       }
+
+       function unpack (string) {
+               var data = string.split('|'),
+                       offsets = data[2].split(' '),
+                       indices = data[3].split(''),
+                       untils  = data[4].split(' ');
+
+               arrayToInt(offsets);
+               arrayToInt(indices);
+               arrayToInt(untils);
+
+               intToUntil(untils, indices.length);
+
+               return {
+                       name       : data[0],
+                       abbrs      : mapIndices(data[1].split(' '), indices),
+                       offsets    : mapIndices(offsets, indices),
+                       untils     : untils,
+                       population : data[5] | 0
+               };
+       }
+
+       /************************************
+               Zone object
+       ************************************/
+
+       function Zone (packedString) {
+               if (packedString) {
+                       this._set(unpack(packedString));
+               }
+       }
+
+       Zone.prototype = {
+               _set : function (unpacked) {
+                       this.name       = unpacked.name;
+                       this.abbrs      = unpacked.abbrs;
+                       this.untils     = unpacked.untils;
+                       this.offsets    = unpacked.offsets;
+                       this.population = unpacked.population;
+               },
+
+               _index : function (timestamp) {
+                       var target = +timestamp,
+                               untils = this.untils,
+                               i;
+
+                       for (i = 0; i < untils.length; i++) {
+                               if (target < untils[i]) {
+                                       return i;
+                               }
+                       }
+               },
+
+               parse : function (timestamp) {
+                       var target  = +timestamp,
+                               offsets = this.offsets,
+                               untils  = this.untils,
+                               max     = untils.length - 1,
+                               offset, offsetNext, offsetPrev, i;
+
+                       for (i = 0; i < max; i++) {
+                               offset     = offsets[i];
+                               offsetNext = offsets[i + 1];
+                               offsetPrev = offsets[i ? i - 1 : i];
+
+                               if (offset < offsetNext && tz.moveAmbiguousForward) {
+                                       offset = offsetNext;
+                               } else if (offset > offsetPrev && tz.moveInvalidForward) {
+                                       offset = offsetPrev;
+                               }
+
+                               if (target < untils[i] - (offset * 60000)) {
+                                       return offsets[i];
+                               }
+                       }
+
+                       return offsets[max];
+               },
+
+               abbr : function (mom) {
+                       return this.abbrs[this._index(mom)];
+               },
+
+               offset : function (mom) {
+                       logError("zone.offset has been deprecated in favor of zone.utcOffset");
+                       return this.offsets[this._index(mom)];
+               },
+
+               utcOffset : function (mom) {
+                       return this.offsets[this._index(mom)];
+               }
+       };
+
+       /************************************
+               Current Timezone
+       ************************************/
+
+       function OffsetAt(at) {
+               var timeString = at.toTimeString();
+               var abbr = timeString.match(/\([a-z ]+\)/i);
+               if (abbr && abbr[0]) {
+                       // 17:56:31 GMT-0600 (CST)
+                       // 17:56:31 GMT-0600 (Central Standard Time)
+                       abbr = abbr[0].match(/[A-Z]/g);
+                       abbr = abbr ? abbr.join('') : undefined;
+               } else {
+                       // 17:56:31 CST
+                       // 17:56:31 GMT+0800 (台北標準時間)
+                       abbr = timeString.match(/[A-Z]{3,5}/g);
+                       abbr = abbr ? abbr[0] : undefined;
+               }
+
+               if (abbr === 'GMT') {
+                       abbr = undefined;
+               }
+
+               this.at = +at;
+               this.abbr = abbr;
+               this.offset = at.getTimezoneOffset();
+       }
+
+       function ZoneScore(zone) {
+               this.zone = zone;
+               this.offsetScore = 0;
+               this.abbrScore = 0;
+       }
+
+       ZoneScore.prototype.scoreOffsetAt = function (offsetAt) {
+               this.offsetScore += Math.abs(this.zone.utcOffset(offsetAt.at) - offsetAt.offset);
+               if (this.zone.abbr(offsetAt.at).replace(/[^A-Z]/g, '') !== offsetAt.abbr) {
+                       this.abbrScore++;
+               }
+       };
+
+       function findChange(low, high) {
+               var mid, diff;
+
+               while ((diff = ((high.at - low.at) / 12e4 | 0) * 6e4)) {
+                       mid = new OffsetAt(new Date(low.at + diff));
+                       if (mid.offset === low.offset) {
+                               low = mid;
+                       } else {
+                               high = mid;
+                       }
+               }
+
+               return low;
+       }
+
+       function userOffsets() {
+               var startYear = new Date().getFullYear() - 2,
+                       last = new OffsetAt(new Date(startYear, 0, 1)),
+                       offsets = [last],
+                       change, next, i;
+
+               for (i = 1; i < 48; i++) {
+                       next = new OffsetAt(new Date(startYear, i, 1));
+                       if (next.offset !== last.offset) {
+                               change = findChange(last, next);
+                               offsets.push(change);
+                               offsets.push(new OffsetAt(new Date(change.at + 6e4)));
+                       }
+                       last = next;
+               }
+
+               for (i = 0; i < 4; i++) {
+                       offsets.push(new OffsetAt(new Date(startYear + i, 0, 1)));
+                       offsets.push(new OffsetAt(new Date(startYear + i, 6, 1)));
+               }
+
+               return offsets;
+       }
+
+       function sortZoneScores (a, b) {
+               if (a.offsetScore !== b.offsetScore) {
+                       return a.offsetScore - b.offsetScore;
+               }
+               if (a.abbrScore !== b.abbrScore) {
+                       return a.abbrScore - b.abbrScore;
+               }
+               return b.zone.population - a.zone.population;
+       }
+
+       function addToGuesses (name, offsets) {
+               var i, offset;
+               arrayToInt(offsets);
+               for (i = 0; i < offsets.length; i++) {
+                       offset = offsets[i];
+                       guesses[offset] = guesses[offset] || {};
+                       guesses[offset][name] = true;
+               }
+       }
+
+       function guessesForUserOffsets (offsets) {
+               var offsetsLength = offsets.length,
+                       filteredGuesses = {},
+                       out = [],
+                       i, j, guessesOffset;
+
+               for (i = 0; i < offsetsLength; i++) {
+                       guessesOffset = guesses[offsets[i].offset] || {};
+                       for (j in guessesOffset) {
+                               if (guessesOffset.hasOwnProperty(j)) {
+                                       filteredGuesses[j] = true;
+                               }
+                       }
+               }
+
+               for (i in filteredGuesses) {
+                       if (filteredGuesses.hasOwnProperty(i)) {
+                               out.push(names[i]);
+                       }
+               }
+
+               return out;
+       }
+
+       function rebuildGuess () {
+
+               // use Intl API when available and returning valid time zone
+               try {
+                       var intlName = Intl.DateTimeFormat().resolvedOptions().timeZone;
+                       if (intlName && intlName.length > 3) {
+                               var name = names[normalizeName(intlName)];
+                               if (name) {
+                                       return name;
+                               }
+                               logError("Moment Timezone found " + intlName + " from the Intl api, but did not have that data loaded.");
+                       }
+               } catch (e) {
+                       // Intl unavailable, fall back to manual guessing.
+               }
+
+               var offsets = userOffsets(),
+                       offsetsLength = offsets.length,
+                       guesses = guessesForUserOffsets(offsets),
+                       zoneScores = [],
+                       zoneScore, i, j;
+
+               for (i = 0; i < guesses.length; i++) {
+                       zoneScore = new ZoneScore(getZone(guesses[i]), offsetsLength);
+                       for (j = 0; j < offsetsLength; j++) {
+                               zoneScore.scoreOffsetAt(offsets[j]);
+                       }
+                       zoneScores.push(zoneScore);
+               }
+
+               zoneScores.sort(sortZoneScores);
+
+               return zoneScores.length > 0 ? zoneScores[0].zone.name : undefined;
+       }
+
+       function guess (ignoreCache) {
+               if (!cachedGuess || ignoreCache) {
+                       cachedGuess = rebuildGuess();
+               }
+               return cachedGuess;
+       }
+
+       /************************************
+               Global Methods
+       ************************************/
+
+       function normalizeName (name) {
+               return (name || '').toLowerCase().replace(/\//g, '_');
+       }
+
+       function addZone (packed) {
+               var i, name, split, normalized;
+
+               if (typeof packed === "string") {
+                       packed = [packed];
+               }
+
+               for (i = 0; i < packed.length; i++) {
+                       split = packed[i].split('|');
+                       name = split[0];
+                       normalized = normalizeName(name);
+                       zones[normalized] = packed[i];
+                       names[normalized] = name;
+                       addToGuesses(normalized, split[2].split(' '));
+               }
+       }
+
+       function getZone (name, caller) {
+               
+               name = normalizeName(name);
+
+               var zone = zones[name];
+               var link;
+
+               if (zone instanceof Zone) {
+                       return zone;
+               }
+
+               if (typeof zone === 'string') {
+                       zone = new Zone(zone);
+                       zones[name] = zone;
+                       return zone;
+               }
+
+               // Pass getZone to prevent recursion more than 1 level deep
+               if (links[name] && caller !== getZone && (link = getZone(links[name], getZone))) {
+                       zone = zones[name] = new Zone();
+                       zone._set(link);
+                       zone.name = names[name];
+                       return zone;
+               }
+
+               return null;
+       }
+
+       function getNames () {
+               var i, out = [];
+
+               for (i in names) {
+                       if (names.hasOwnProperty(i) && (zones[i] || zones[links[i]]) && names[i]) {
+                               out.push(names[i]);
+                       }
+               }
+
+               return out.sort();
+       }
+
+       function addLink (aliases) {
+               var i, alias, normal0, normal1;
+
+               if (typeof aliases === "string") {
+                       aliases = [aliases];
+               }
+
+               for (i = 0; i < aliases.length; i++) {
+                       alias = aliases[i].split('|');
+
+                       normal0 = normalizeName(alias[0]);
+                       normal1 = normalizeName(alias[1]);
+
+                       links[normal0] = normal1;
+                       names[normal0] = alias[0];
+
+                       links[normal1] = normal0;
+                       names[normal1] = alias[1];
+               }
+       }
+
+       function loadData (data) {
+               addZone(data.zones);
+               addLink(data.links);
+               tz.dataVersion = data.version;
+       }
+
+       function zoneExists (name) {
+               if (!zoneExists.didShowError) {
+                       zoneExists.didShowError = true;
+                               logError("moment.tz.zoneExists('" + name + "') has been deprecated in favor of !moment.tz.zone('" + name + "')");
+               }
+               return !!getZone(name);
+       }
+
+       function needsOffset (m) {
+               var isUnixTimestamp = (m._f === 'X' || m._f === 'x');
+               return !!(m._a && (m._tzm === undefined) && !isUnixTimestamp);
+       }
+
+       function logError (message) {
+               if (typeof console !== 'undefined' && typeof console.error === 'function') {
+                       console.error(message);
+               }
+       }
+
+       /************************************
+               moment.tz namespace
+       ************************************/
+
+       function tz (input) {
+               var args = Array.prototype.slice.call(arguments, 0, -1),
+                       name = arguments[arguments.length - 1],
+                       zone = getZone(name),
+                       out  = moment.utc.apply(null, args);
+
+               if (zone && !moment.isMoment(input) && needsOffset(out)) {
+                       out.add(zone.parse(out), 'minutes');
+               }
+
+               out.tz(name);
+
+               return out;
+       }
+
+       tz.version      = VERSION;
+       tz.dataVersion  = '';
+       tz._zones       = zones;
+       tz._links       = links;
+       tz._names       = names;
+       tz.add          = addZone;
+       tz.link         = addLink;
+       tz.load         = loadData;
+       tz.zone         = getZone;
+       tz.zoneExists   = zoneExists; // deprecated in 0.1.0
+       tz.guess        = guess;
+       tz.names        = getNames;
+       tz.Zone         = Zone;
+       tz.unpack       = unpack;
+       tz.unpackBase60 = unpackBase60;
+       tz.needsOffset  = needsOffset;
+       tz.moveInvalidForward   = true;
+       tz.moveAmbiguousForward = false;
+
+       /************************************
+               Interface with Moment.js
+       ************************************/
+
+       var fn = moment.fn;
+
+       moment.tz = tz;
+
+       moment.defaultZone = null;
+
+       moment.updateOffset = function (mom, keepTime) {
+               var zone = moment.defaultZone,
+                       offset;
+
+               if (mom._z === undefined) {
+                       if (zone && needsOffset(mom) && !mom._isUTC) {
+                               mom._d = moment.utc(mom._a)._d;
+                               mom.utc().add(zone.parse(mom), 'minutes');
+                       }
+                       mom._z = zone;
+               }
+               if (mom._z) {
+                       offset = mom._z.utcOffset(mom);
+                       if (Math.abs(offset) < 16) {
+                               offset = offset / 60;
+                       }
+                       if (mom.utcOffset !== undefined) {
+                               var z = mom._z;
+                               mom.utcOffset(-offset, keepTime);
+                               mom._z = z;
+                       } else {
+                               mom.zone(offset, keepTime);
+                       }
+               }
+       };
+
+       fn.tz = function (name, keepTime) {
+               if (name) {
+                       if (typeof name !== 'string') {
+                               throw new Error('Time zone name must be a string, got ' + name + ' [' + typeof name + ']');
+                       }
+                       this._z = getZone(name);
+                       if (this._z) {
+                               moment.updateOffset(this, keepTime);
+                       } else {
+                               logError("Moment Timezone has no data for " + name + ". See http://momentjs.com/timezone/docs/#/data-loading/.");
+                       }
+                       return this;
+               }
+               if (this._z) { return this._z.name; }
+       };
+
+       function abbrWrap (old) {
+               return function () {
+                       if (this._z) { return this._z.abbr(this); }
+                       return old.call(this);
+               };
+       }
+
+       function resetZoneWrap (old) {
+               return function () {
+                       this._z = null;
+                       return old.apply(this, arguments);
+               };
+       }
+
+       function resetZoneWrap2 (old) {
+               return function () {
+                       if (arguments.length > 0) this._z = null;
+                       return old.apply(this, arguments);
+               };
+       }
+
+       fn.zoneName  = abbrWrap(fn.zoneName);
+       fn.zoneAbbr  = abbrWrap(fn.zoneAbbr);
+       fn.utc       = resetZoneWrap(fn.utc);
+       fn.local     = resetZoneWrap(fn.local);
+       fn.utcOffset = resetZoneWrap2(fn.utcOffset);
+       
+       moment.tz.setDefault = function(name) {
+               if (major < 2 || (major === 2 && minor < 9)) {
+                       logError('Moment Timezone setDefault() requires Moment.js >= 2.9.0. You are using Moment.js ' + moment.version + '.');
+               }
+               moment.defaultZone = name ? getZone(name) : null;
+               return moment;
+       };
+
+       // Cloning a moment should include the _z property.
+       var momentProperties = moment.momentProperties;
+       if (Object.prototype.toString.call(momentProperties) === '[object Array]') {
+               // moment 2.8.1+
+               momentProperties.push('_z');
+               momentProperties.push('_a');
+       } else if (momentProperties) {
+               // moment 2.7.0
+               momentProperties._z = null;
+       }
+
+       loadData({
+               "version": "2019a",
+               "zones": [
+                       "Africa/Abidjan|LMT GMT|g.8 0|01|-2ldXH.Q|48e5",
+                       "Africa/Accra|LMT GMT +0020|.Q 0 -k|012121212121212121212121212121212121212121212121|-26BbX.8 6tzX.8 MnE 1BAk MnE 1BAk MnE 1BAk MnE 1C0k MnE 1BAk MnE 1BAk MnE 1BAk MnE 1C0k MnE 1BAk MnE 1BAk MnE 1BAk MnE 1C0k MnE 1BAk MnE 1BAk MnE 1BAk MnE 1C0k MnE 1BAk MnE 1BAk MnE 1BAk MnE 1C0k MnE 1BAk MnE 1BAk MnE|41e5",
+                       "Africa/Nairobi|LMT EAT +0230 +0245|-2r.g -30 -2u -2J|01231|-1F3Cr.g 3Dzr.g okMu MFXJ|47e5",
+                       "Africa/Algiers|LMT PMT WET WEST CET CEST|-c.c -9.l 0 -10 -10 -20|01232323232323232454542423234542324|-3bQob.c ME01.P cNb9.l HA0 19A0 1iM0 11c0 1oo0 Wo0 1rc0 QM0 1EM0 UM0 DA0 Imo0 rd0 De0 9Xz0 1fb0 1ap0 16K0 2yo0 mEp0 hwL0 jxA0 11A0 dDd0 17b0 11B0 1cN0 2Dy0 1cN0 1fB0 1cL0|26e5",
+                       "Africa/Lagos|LMT WAT|-d.A -10|01|-22y0d.A|17e6",
+                       "Africa/Bissau|LMT -01 GMT|12.k 10 0|012|-2ldX0 2xoo0|39e4",
+                       "Africa/Maputo|LMT CAT|-2a.k -20|01|-2GJea.k|26e5",
+                       "Africa/Cairo|LMT EET EEST|-25.9 -20 -30|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2MBC5.9 1AQM5.9 vb0 1ip0 11z0 1iN0 1nz0 12p0 1pz0 10N0 1pz0 16p0 1jz0 s3d0 Vz0 1oN0 11b0 1oO0 10N0 1pz0 10N0 1pb0 10N0 1pb0 10N0 1pb0 10N0 1pz0 10N0 1pb0 10N0 1pb0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1WL0 rd0 1Rz0 wp0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1qL0 Xd0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1ny0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 WL0 1qN0 Rb0 1wp0 On0 1zd0 Lz0 1EN0 Fb0 c10 8n0 8Nd0 gL0 e10 mn0|15e6",
+                       "Africa/Casablanca|LMT +00 +01|u.k 0 -10|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2gMnt.E 130Lt.E rb0 Dd0 dVb0 b6p0 TX0 EoB0 LL0 gnd0 rz0 43d0 AL0 1Nd0 XX0 1Cp0 pz0 dEp0 4mn0 SyN0 AL0 1Nd0 wn0 1FB0 Db0 1zd0 Lz0 1Nf0 wM0 co0 go0 1o00 s00 dA0 vc0 11A0 A00 e00 y00 11A0 uM0 e00 Dc0 11A0 s00 e00 IM0 WM0 mo0 gM0 LA0 WM0 jA0 e00 28M0 e00 2600 e00 28M0 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 28M0 e00 2600 e00 28M0 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 gj9y0|32e5",
+                       "Africa/Ceuta|LMT WET WEST CET CEST|l.g 0 -10 -10 -20|0121212121212121212121343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-2M0M0 GdX0 11z0 drd0 18p0 3HX0 17d0 1fz0 1a10 1io0 1a00 1y7o0 LL0 gnd0 rz0 43d0 AL0 1Nd0 XX0 1Cp0 pz0 dEp0 4VB0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|85e3",
+                       "Africa/El_Aaiun|LMT -01 +00 +01|Q.M 10 0 -10|012323232323232323232323232323232323232323232323232323232323232323232323232323232323|-1rDz7.c 1GVA7.c 6L0 AL0 1Nd0 XX0 1Cp0 pz0 1cBB0 AL0 1Nd0 wn0 1FB0 Db0 1zd0 Lz0 1Nf0 wM0 co0 go0 1o00 s00 dA0 vc0 11A0 A00 e00 y00 11A0 uM0 e00 Dc0 11A0 s00 e00 IM0 WM0 mo0 gM0 LA0 WM0 jA0 e00 28M0 e00 2600 e00 28M0 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 28M0 e00 2600 e00 28M0 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0|20e4",
+                       "Africa/Johannesburg|LMT SAST SAST SAST|-1Q -1u -20 -30|0123232|-39EpQ qTcm 1Ajdu 1cL0 1cN0 1cL0|84e5",
+                       "Africa/Juba|LMT CAT CAST EAT|-26.s -20 -30 -30|01212121212121212121212121212121213|-1yW26.s 1zK06.s 16L0 1iN0 17b0 1jd0 17b0 1ip0 17z0 1i10 17X0 1hB0 18n0 1hd0 19b0 1gp0 19z0 1iN0 17b0 1ip0 17z0 1i10 18n0 1hd0 18L0 1gN0 19b0 1gp0 19z0 1iN0 17z0 1i10 17X0 yGd0",
+                       "Africa/Khartoum|LMT CAT CAST EAT|-2a.8 -20 -30 -30|012121212121212121212121212121212131|-1yW2a.8 1zK0a.8 16L0 1iN0 17b0 1jd0 17b0 1ip0 17z0 1i10 17X0 1hB0 18n0 1hd0 19b0 1gp0 19z0 1iN0 17b0 1ip0 17z0 1i10 18n0 1hd0 18L0 1gN0 19b0 1gp0 19z0 1iN0 17z0 1i10 17X0 yGd0 HjL0|51e5",
+                       "Africa/Monrovia|LMT MMT MMT GMT|H.8 H.8 I.u 0|0123|-3ygng.Q 1usM0 28G01.m|11e5",
+                       "Africa/Ndjamena|LMT WAT WAST|-10.c -10 -20|0121|-2le10.c 2J3c0.c Wn0|13e5",
+                       "Africa/Sao_Tome|LMT LMT GMT WAT|-q.U A.J 0 -10|01232|-3tooq.U 18aoq.U 4i6N0 2q00",
+                       "Africa/Tripoli|LMT CET CEST EET|-Q.I -10 -20 -20|012121213121212121212121213123123|-21JcQ.I 1hnBQ.I vx0 4iP0 xx0 4eN0 Bb0 7ip0 U0n0 A10 1db0 1cN0 1db0 1dd0 1db0 1eN0 1bb0 1e10 1cL0 1c10 1db0 1dd0 1db0 1cN0 1db0 1q10 fAn0 1ep0 1db0 AKq0 TA0 1o00|11e5",
+                       "Africa/Tunis|LMT PMT CET CEST|-E.I -9.l -10 -20|01232323232323232323232323232323232|-3zO0E.I 1cBAv.n 18pa9.l 1qM0 DA0 3Tc0 11B0 1ze0 WM0 7z0 3d0 14L0 1cN0 1f90 1ar0 16J0 1gXB0 WM0 1rA0 11c0 nwo0 Ko0 1cM0 1cM0 1rA0 10M0 zuM0 10N0 1aN0 1qM0 WM0 1qM0 11A0 1o00|20e5",
+                       "Africa/Windhoek|LMT +0130 SAST SAST CAT WAT|-18.o -1u -20 -30 -20 -10|012324545454545454545454545454545454545454545454545454|-39Ep8.o qTbC.o 1Ajdu 1cL0 1SqL0 9Io0 16P0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0|32e4",
+                       "America/Adak|LMT LMT NST NWT NPT BST BDT AHST HST HDT|-cd.m bK.C b0 a0 a0 b0 a0 a0 a0 90|01234256565656565656565656565656565678989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898|-48Pzs.L 1jVzf.p 1EX1d.m 8wW0 iB0 Qlb0 52O0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cm0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|326",
+                       "America/Anchorage|LMT LMT AST AWT APT AHST AHDT YST AKST AKDT|-e0.o 9X.A a0 90 90 a0 90 90 90 80|01234256565656565656565656565656565678989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898|-48Pzs.L 1jVxs.n 1EX20.o 8wX0 iA0 Qlb0 52O0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cm0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|30e4",
+                       "America/Port_of_Spain|LMT AST|46.4 40|01|-2kNvR.U|43e3",
+                       "America/Araguaina|LMT -03 -02|3c.M 30 20|0121212121212121212121212121212121212121212121212121|-2glwL.c HdKL.c 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 dMN0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 ny10 Lz0|14e4",
+                       "America/Argentina/Buenos_Aires|LMT CMT -04 -03 -02|3R.M 4g.M 40 30 20|012323232323232323232323232323232323232323234343434343434343|-331U6.c 125cn pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wp0 Rb0 1wp0 TX0 A4p0 uL0 1qN0 WL0",
+                       "America/Argentina/Catamarca|LMT CMT -04 -03 -02|4n.8 4g.M 40 30 20|012323232323232323232323232323232323232323234343434243432343|-331TA.Q 125bR.E pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 rlB0 7B0 8zb0 uL0",
+                       "America/Argentina/Cordoba|LMT CMT -04 -03 -02|4g.M 4g.M 40 30 20|012323232323232323232323232323232323232323234343434243434343|-331TH.c 125c0 pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 A4p0 uL0 1qN0 WL0",
+                       "America/Argentina/Jujuy|LMT CMT -04 -03 -02|4l.c 4g.M 40 30 20|0123232323232323232323232323232323232323232343434232434343|-331TC.M 125bT.A pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1ze0 TX0 1ld0 WK0 1wp0 TX0 A4p0 uL0",
+                       "America/Argentina/La_Rioja|LMT CMT -04 -03 -02|4r.o 4g.M 40 30 20|0123232323232323232323232323232323232323232343434342343432343|-331Tw.A 125bN.o pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Qn0 qO0 16n0 Rb0 1wp0 TX0 rlB0 7B0 8zb0 uL0",
+                       "America/Argentina/Mendoza|LMT CMT -04 -03 -02|4z.g 4g.M 40 30 20|012323232323232323232323232323232323232323234343423232432343|-331To.I 125bF.w pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1u20 SL0 1vd0 Tb0 1wp0 TW0 ri10 Op0 7TX0 uL0",
+                       "America/Argentina/Rio_Gallegos|LMT CMT -04 -03 -02|4A.Q 4g.M 40 30 20|012323232323232323232323232323232323232323234343434343432343|-331Tn.8 125bD.U pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wp0 Rb0 1wp0 TX0 rlB0 7B0 8zb0 uL0",
+                       "America/Argentina/Salta|LMT CMT -04 -03 -02|4l.E 4g.M 40 30 20|0123232323232323232323232323232323232323232343434342434343|-331TC.k 125bT.8 pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 A4p0 uL0",
+                       "America/Argentina/San_Juan|LMT CMT -04 -03 -02|4y.4 4g.M 40 30 20|0123232323232323232323232323232323232323232343434342343432343|-331Tp.U 125bG.I pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Qn0 qO0 16n0 Rb0 1wp0 TX0 rld0 m10 8lb0 uL0",
+                       "America/Argentina/San_Luis|LMT CMT -04 -03 -02|4p.o 4g.M 40 30 20|0123232323232323232323232323232323232323232343434232323432323|-331Ty.A 125bP.o pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 XX0 1q20 SL0 AN0 vDb0 m10 8lb0 8L0 jd0 1qN0 WL0 1qN0",
+                       "America/Argentina/Tucuman|LMT CMT -04 -03 -02|4k.Q 4g.M 40 30 20|01232323232323232323232323232323232323232323434343424343234343|-331TD.8 125bT.U pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 rlB0 4N0 8BX0 uL0 1qN0 WL0",
+                       "America/Argentina/Ushuaia|LMT CMT -04 -03 -02|4x.c 4g.M 40 30 20|012323232323232323232323232323232323232323234343434343432343|-331Tq.M 125bH.A pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wp0 Rb0 1wp0 TX0 rkN0 8p0 8zb0 uL0",
+                       "America/Curacao|LMT -0430 AST|4z.L 4u 40|012|-2kV7o.d 28KLS.d|15e4",
+                       "America/Asuncion|LMT AMT -04 -03|3O.E 3O.E 40 30|0123232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323|-3eLw9.k 1FGo0 1DKM9.k 3CL0 3Dd0 10L0 1pB0 10n0 1pB0 10n0 1pB0 1cL0 1dd0 1db0 1dd0 1cL0 1dd0 1cL0 1dd0 1cL0 1dd0 1db0 1dd0 1cL0 1dd0 1cL0 1dd0 1cL0 1dd0 1db0 1dd0 1cL0 1lB0 14n0 1dd0 1cL0 1fd0 WL0 1rd0 1aL0 1dB0 Xz0 1qp0 Xb0 1qN0 10L0 1rB0 TX0 1tB0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 1cL0 WN0 1qL0 11B0 1nX0 1ip0 WL0 1qN0 WL0 1qN0 WL0 1tB0 TX0 1tB0 TX0 1tB0 19X0 1a10 1fz0 1a10 1fz0 1cN0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0|28e5",
+                       "America/Atikokan|LMT CST CDT CWT CPT EST|66.s 60 50 50 50 50|01212345|-32B5R.w UFdR.w 1in0 Rnb0 3je0 8x30 iw0|28e2",
+                       "America/Bahia_Banderas|LMT MST CST PST MDT CDT|71 70 60 80 60 50|0121212131414141414141414141414141414152525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 otX0 gmN0 P2N0 13Vd0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nW0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0|84e3",
+                       "America/Bahia|LMT -03 -02|2y.4 30 20|01212121212121212121212121212121212121212121212121212121212121|-2glxp.U HdLp.U 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 l5B0 Rb0|27e5",
+                       "America/Barbados|LMT BMT AST ADT|3W.t 3W.t 40 30|01232323232|-1Q0I1.v jsM0 1ODC1.v IL0 1ip0 17b0 1ip0 17b0 1ld0 13b0|28e4",
+                       "America/Belem|LMT -03 -02|3d.U 30 20|012121212121212121212121212121|-2glwK.4 HdKK.4 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0|20e5",
+                       "America/Belize|LMT CST -0530 CDT|5Q.M 60 5u 50|01212121212121212121212121212121212121212121212121213131|-2kBu7.c fPA7.c Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1f0Mu qn0 lxB0 mn0|57e3",
+                       "America/Blanc-Sablon|LMT AST ADT AWT APT|3M.s 40 30 30 30|0121341|-3tokb.w 1nsqb.w 1in0 UGp0 8x50 iu0|11e2",
+                       "America/Boa_Vista|LMT -04 -03|42.E 40 30|0121212121212121212121212121212121|-2glvV.k HdKV.k 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 smp0 WL0 1tB0 2L0|62e2",
+                       "America/Bogota|LMT BMT -05 -04|4U.g 4U.g 50 40|01232|-3sTv3.I 1eIo0 38yo3.I 2en0|90e5",
+                       "America/Boise|LMT PST PDT MST MWT MPT MDT|7I.N 80 70 70 60 60 60|01212134536363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363|-3tFE0 1nEe0 1nX0 11B0 1nX0 8C10 JCL0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 Dd0 1Kn0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|21e4",
+                       "America/Cambridge_Bay|-00 MST MWT MPT MDDT MDT CST CDT EST|0 70 60 60 50 60 60 50 50|0123141515151515151515151515151515151515151515678651515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151|-21Jc0 RO90 8x20 ix0 LCL0 1fA0 zgO0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11A0 1nX0 2K0 WQ0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|15e2",
+                       "America/Campo_Grande|LMT -04 -03|3C.s 40 30|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-2glwl.w HdLl.w 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 1C10 Lz0 1Ip0 HX0 1zd0 On0 1HB0 IL0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 IL0 1EN0 FX0 1HB0 FX0 1HB0 IL0 1EN0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1Kp0 FX0 1HB0 IL0 1EN0 FX0 1HB0 FX0 1HB0 IL0 1EN0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1Kp0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1Kp0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1Kp0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1Kp0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1Kp0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1Kp0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1Kp0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1Kp0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1Kp0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1Kp0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1Kp0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1Kp0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1Kp0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1Kp0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1Kp0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0|77e4",
+                       "America/Cancun|LMT CST EST EDT CDT|5L.4 60 50 40 50|0123232341414141414141414141414141414141412|-1UQG0 2q2o0 yLB0 1lb0 14p0 1lb0 14p0 Lz0 xB0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 Dd0|63e4",
+                       "America/Caracas|LMT CMT -0430 -04|4r.I 4r.E 4u 40|012323|-3eLvw.g ROnX.U 28KM2.k 1IwOu kqo0|29e5",
+                       "America/Cayenne|LMT -04 -03|3t.k 40 30|012|-2mrwu.E 2gWou.E|58e3",
+                       "America/Panama|LMT CMT EST|5i.8 5j.A 50|012|-3eLuF.Q Iy01.s|15e5",
+                       "America/Chicago|LMT CST CDT EST CWT CPT|5O.A 60 50 50 50 50|012121212121212121212121212121212121213121212121214512121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3tFG0 1nEe0 1nX0 11B0 1nX0 1wp0 TX0 WN0 1qL0 1cN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 11B0 1Hz0 14p0 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 RB0 8x30 iw0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|92e5",
+                       "America/Chihuahua|LMT MST CST CDT MDT|74.k 70 60 50 60|0121212323241414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 2zQN0 1lb0 14p0 1lb0 14q0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0|81e4",
+                       "America/Costa_Rica|LMT SJMT CST CDT|5A.d 5A.d 60 50|01232323232|-3eLun.L 1fyo0 2lu0n.L Db0 1Kp0 Db0 pRB0 15b0 1kp0 mL0|12e5",
+                       "America/Creston|LMT MST PST|7K.4 70 80|0121|-3togd.U 1jInd.U 43B0|53e2",
+                       "America/Cuiaba|LMT -04 -03|3I.k 40 30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-2glwf.E HdLf.E 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 4a10 HX0 1zd0 On0 1HB0 IL0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 IL0 1EN0 FX0 1HB0 FX0 1HB0 IL0 1EN0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1Kp0 FX0 1HB0 IL0 1EN0 FX0 1HB0 FX0 1HB0 IL0 1EN0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1Kp0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1Kp0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1Kp0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1Kp0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1Kp0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1Kp0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1Kp0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1Kp0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1Kp0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1Kp0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1Kp0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1Kp0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1Kp0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1Kp0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1Kp0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0|54e4",
+                       "America/Danmarkshavn|LMT -03 -02 GMT|1e.E 30 20 0|01212121212121212121212121212121213|-2a5WJ.k 2z5fJ.k 19U0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 DC0|8",
+                       "America/Dawson_Creek|LMT PST PDT PWT PPT MST|80.U 80 70 70 70 70|01213412121212121212121212121212121212121212121212121212125|-3tofX.4 1nspX.4 1in0 UGp0 8x10 iy0 3NB0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 ML0|12e3",
+                       "America/Dawson|LMT YST YDT YWT YPT YDDT PST PDT|9h.E 90 80 80 80 70 80 70|01212134151676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676|-2MSeG.k GWpG.k 1in0 1o10 13V0 Ser0 8x00 iz0 LCL0 1fA0 jrA0 fNd0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|13e2",
+                       "America/Denver|LMT MST MDT MWT MPT|6X.U 70 60 60 60|012121212134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3tFF0 1nEe0 1nX0 11B0 1nX0 11B0 1qL0 WN0 mn0 Ord0 8x20 ix0 LCN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|26e5",
+                       "America/Detroit|LMT CST EST EWT EPT EDT|5w.b 60 50 40 40 40|012342525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252|-2Cgir.N peqr.N 156L0 8x40 iv0 6fd0 11z0 XQp0 1cL0 s10 1Vz0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|37e5",
+                       "America/Edmonton|LMT MST MDT MWT MPT|7x.Q 70 60 60 60|01212121212121341212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2yd4q.8 shdq.8 1in0 17d0 hz0 2dB0 1fz0 1a10 11z0 1qN0 WL0 1qN0 11z0 IGN0 8x20 ix0 3NB0 11z0 LFB0 1cL0 3Cp0 1cL0 66N0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|10e5",
+                       "America/Eirunepe|LMT -05 -04|4D.s 50 40|0121212121212121212121212121212121|-2glvk.w HdLk.w 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 dPB0 On0 yTd0 d5X0|31e3",
+                       "America/El_Salvador|LMT CST CDT|5U.M 60 50|012121|-1XiG3.c 2Fvc3.c WL0 1qN0 WL0|11e5",
+                       "America/Tijuana|LMT MST PST PDT PWT PPT|7M.4 70 80 70 70 70|012123245232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-1UQE0 4PX0 8mM0 8lc0 SN0 1cL0 pHB0 83r0 zI0 5O10 1Rz0 cOO0 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 BUp0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 U10 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|20e5",
+                       "America/Fort_Nelson|LMT PST PDT PWT PPT MST|8a.L 80 70 70 70 70|012134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121215|-3tofN.d 1nspN.d 1in0 UGp0 8x10 iy0 3NB0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0|39e2",
+                       "America/Fort_Wayne|LMT CST CDT CWT CPT EST EDT|5I.C 60 50 50 50 50 40|0121212134121212121212121212151565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 QI10 Db0 RB0 8x30 iw0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 5Tz0 1o10 qLb0 1cL0 1cN0 1cL0 1qhd0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0",
+                       "America/Fortaleza|LMT -03 -02|2y 30 20|0121212121212121212121212121212121212121|-2glxq HdLq 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 nsp0 WL0 1tB0 5z0 2mN0 On0|34e5",
+                       "America/Glace_Bay|LMT AST ADT AWT APT|3X.M 40 30 30 30|012134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2IsI0.c CwO0.c 1in0 UGp0 8x50 iu0 iq10 11z0 Jg10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|19e3",
+                       "America/Godthab|LMT -03 -02|3q.U 30 20|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2a5Ux.4 2z5dx.4 19U0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|17e3",
+                       "America/Goose_Bay|LMT NST NDT NST NDT NWT NPT AST ADT ADDT|41.E 3u.Q 2u.Q 3u 2u 2u 2u 40 30 20|0121343434343434356343434343434343434343434343434343434343437878787878787878787878787878787878787878787879787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787|-3tojW.k 1nspt.c 1in0 DXb0 2HbX.8 WL0 1qN0 WL0 1qN0 WL0 1tB0 TX0 1tB0 WL0 1qN0 WL0 1qN0 7UHu itu 1tB0 WL0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1tB0 WL0 1ld0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 S10 g0u 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14n1 1lb0 14p0 1nW0 11C0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zcX Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|76e2",
+                       "America/Grand_Turk|LMT KMT EST EDT AST|4I.w 57.a 50 40 40|012323232323232323232323232323232323232323232323232323232323232323232323232343232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3eLvf.s RK0m.C 2HHBQ.O 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 5Ip0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|37e2",
+                       "America/Guatemala|LMT CST CDT|62.4 60 50|0121212121|-24KhV.U 2efXV.U An0 mtd0 Nz0 ifB0 17b0 zDB0 11z0|13e5",
+                       "America/Guayaquil|LMT QMT -05 -04|5j.k 5e 50 40|01232|-3eLuE.E 1DNzS.E 2uILK rz0|27e5",
+                       "America/Guyana|LMT -0345 -03 -04|3Q.E 3J 30 40|0123|-2dvU7.k 2r6LQ.k Bxbf|80e4",
+                       "America/Halifax|LMT AST ADT AWT APT|4e.o 40 30 30 30|0121212121212121212121212121212121212121212121212134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2IsHJ.A xzzJ.A 1db0 3I30 1in0 3HX0 IL0 1E10 ML0 1yN0 Pb0 1Bd0 Mn0 1Bd0 Rz0 1w10 Xb0 1w10 LX0 1w10 Xb0 1w10 Lz0 1C10 Jz0 1E10 OL0 1yN0 Un0 1qp0 Xb0 1qp0 11X0 1w10 Lz0 1HB0 LX0 1C10 FX0 1w10 Xb0 1qp0 Xb0 1BB0 LX0 1td0 Xb0 1qp0 Xb0 Rf0 8x50 iu0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 3Qp0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 3Qp0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 6i10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|39e4",
+                       "America/Havana|LMT HMT CST CDT|5t.s 5t.A 50 40|0123232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3eLuu.w 1qx00.8 72zu.o ML0 sld0 An0 1Nd0 Db0 1Nd0 An0 6Ep0 An0 1Nd0 An0 JDd0 Mn0 1Ap0 On0 1fd0 11X0 1qN0 WL0 1wp0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 14n0 1ld0 14L0 1kN0 15b0 1kp0 1cL0 1cN0 1fz0 1a10 1fz0 1fB0 11z0 14p0 1nX0 11B0 1nX0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 14n0 1ld0 14n0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 1a10 1in0 1a10 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 17c0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 11A0 6i00 Rc0 1wo0 U00 1tA0 Rc0 1wo0 U00 1wo0 U00 1zc0 U00 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0|21e5",
+                       "America/Hermosillo|LMT MST CST PST MDT|7n.Q 70 60 80 60|0121212131414141|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 otX0 gmN0 P2N0 13Vd0 1lb0 14p0 1lb0 14p0 1lb0|64e4",
+                       "America/Indiana/Knox|LMT CST CDT CWT CPT EST|5K.u 60 50 50 50 50|01212134121212121212121212121212121212151212121212121212121212121212121212121212121212121252121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 3NB0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 11z0 1o10 11z0 1o10 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 3Cn0 8wp0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 z8o0 1o00 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0",
+                       "America/Indiana/Marengo|LMT CST CDT CWT CPT EST EDT|5J.n 60 50 50 50 50 40|01212134121212121212121215656565656525656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 dyN0 11z0 6fd0 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 jrz0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1VA0 LA0 1BX0 1e6p0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0",
+                       "America/Indiana/Petersburg|LMT CST CDT CWT CPT EST EDT|5N.7 60 50 50 50 50 40|012121341212121212121212121215121212121212121212121252125656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 njX0 WN0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 3Fb0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 19co0 1o00 Rd0 1zb0 Oo0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0",
+                       "America/Indiana/Tell_City|LMT CST CDT CWT CPT EST EDT|5L.3 60 50 50 50 50 40|012121341212121212121212121212121565652121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 1o10 11z0 g0p0 11z0 1o10 11z0 1qL0 WN0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 caL0 1cL0 1cN0 1cL0 1qhd0 1o00 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0",
+                       "America/Indiana/Vevay|LMT CST CDT CWT CPT EST EDT|5E.g 60 50 50 50 50 40|0121213415656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 kPB0 Awn0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1lnd0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0",
+                       "America/Indiana/Vincennes|LMT CST CDT CWT CPT EST EDT|5O.7 60 50 50 50 50 40|012121341212121212121212121212121565652125656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 1o10 11z0 g0p0 11z0 1o10 11z0 1qL0 WN0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 caL0 1cL0 1cN0 1cL0 1qhd0 1o00 Rd0 1zb0 Oo0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0",
+                       "America/Indiana/Winamac|LMT CST CDT CWT CPT EST EDT|5K.p 60 50 50 50 50 40|012121341212121212121212121212121212121565652165656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 jrz0 1cL0 1cN0 1cL0 1qhd0 1o00 Rd0 1za0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0",
+                       "America/Inuvik|-00 PST PDDT MST MDT|0 80 60 70 60|0121343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-FnA0 tWU0 1fA0 wPe0 2pz0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|35e2",
+                       "America/Iqaluit|-00 EWT EPT EST EDDT EDT CST CDT|0 40 40 50 30 40 60 50|01234353535353535353535353535353535353535353567353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353|-16K00 7nX0 iv0 LCL0 1fA0 zgO0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11C0 1nX0 11A0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|67e2",
+                       "America/Jamaica|LMT KMT EST EDT|57.a 57.a 50 40|01232323232323232323232|-3eLuQ.O RK00 2uM1Q.O 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0|94e4",
+                       "America/Juneau|LMT LMT PST PWT PPT PDT YDT YST AKST AKDT|-f2.j 8V.F 80 70 70 70 80 90 90 80|0123425252525252525252525252625252578989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898|-48Pzs.L 1jVwq.s 1EX12.j 8x10 iy0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cM0 1cM0 1cL0 1cN0 1fz0 1a10 1fz0 co0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|33e3",
+                       "America/Kentucky/Louisville|LMT CST CDT CWT CPT EST EDT|5H.2 60 50 50 50 50 40|01212121213412121212121212121212121212565656565656525656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 3Fd0 Nb0 LPd0 11z0 RB0 8x30 iw0 Bb0 10N0 2bB0 8in0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 xz0 gso0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1VA0 LA0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0",
+                       "America/Kentucky/Monticello|LMT CST CDT CWT CPT EST EDT|5D.o 60 50 50 50 50 40|01212134121212121212121212121212121212121212121212121212121212121212121212565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 SWp0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11A0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0",
+                       "America/La_Paz|LMT CMT BST -04|4w.A 4w.A 3w.A 40|0123|-3eLvr.o 1FIo0 13b0|19e5",
+                       "America/Lima|LMT LMT -05 -04|58.c 58.A 50 40|01232323232323232|-3eLuP.M JcM0.o 1bDzP.o zX0 1aN0 1cL0 1cN0 1cL0 1PrB0 zX0 1O10 zX0 6Gp0 zX0 98p0 zX0|11e6",
+                       "America/Los_Angeles|LMT PST PDT PWT PPT|7Q.W 80 70 70 70|0121213412121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3tFE0 1nEe0 1nX0 11B0 1nX0 SgN0 8x10 iy0 5Wp1 1VaX 3dA0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1a00 1fA0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|15e6",
+                       "America/Maceio|LMT -03 -02|2m.Q 30 20|012121212121212121212121212121212121212121|-2glxB.8 HdLB.8 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 dMN0 Lz0 8Q10 WL0 1tB0 5z0 2mN0 On0|93e4",
+                       "America/Managua|LMT MMT CST EST CDT|5J.8 5J.c 60 50 50|01232424232324242|-3eLue.Q 1Mhc0.4 1yAMe.M 4mn0 9Up0 Dz0 1K10 Dz0 s3F0 1KH0 DB0 9In0 k8p0 19X0 1o30 11y0|22e5",
+                       "America/Manaus|LMT -04 -03|40.4 40 30|01212121212121212121212121212121|-2glvX.U HdKX.U 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 dPB0 On0|19e5",
+                       "America/Martinique|LMT FFMT AST ADT|44.k 44.k 40 30|01232|-3eLvT.E PTA0 2LPbT.E 19X0|39e4",
+                       "America/Matamoros|LMT CST CDT|6E 60 50|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1UQG0 2FjC0 1nX0 i6p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 U10 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|45e4",
+                       "America/Mazatlan|LMT MST CST PST MDT|75.E 70 60 80 60|0121212131414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 otX0 gmN0 P2N0 13Vd0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0|44e4",
+                       "America/Menominee|LMT CST CDT CWT CPT EST|5O.r 60 50 50 50 50|012121341212152121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3pdG9.x 1jce9.x 1nX0 11B0 1nX0 SgN0 8x30 iw0 1o10 11z0 LCN0 1fz0 6410 9Jb0 1cM0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|85e2",
+                       "America/Merida|LMT CST EST CDT|5W.s 60 50 50|0121313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131|-1UQG0 2q2o0 2hz0 wu30 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0|11e5",
+                       "America/Metlakatla|LMT LMT PST PWT PPT PDT AKST AKDT|-fd.G 8K.i 80 70 70 70 90 80|0123425252525252525252525252525252526767672676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676|-48Pzs.L 1jVwf.5 1EX1d.G 8x10 iy0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1hU10 Rd0 1zb0 Op0 1zb0 Op0 1zb0 uM0 jB0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|14e2",
+                       "America/Mexico_City|LMT MST CST CDT CWT|6A.A 70 60 50 50|012121232324232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 gEn0 TX0 3xd0 Jb0 6zB0 SL0 e5d0 17b0 1Pff0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0|20e6",
+                       "America/Miquelon|LMT AST -03 -02|3I.E 40 30 20|012323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-2mKkf.k 2LTAf.k gQ10 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|61e2",
+                       "America/Moncton|LMT EST AST ADT AWT APT|4j.8 50 40 30 30 30|0123232323232323232323245232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3txvE.Q J4ME.Q CwN0 1in0 zAo0 An0 1Nd0 An0 1Nd0 An0 1Nd0 An0 1Nd0 An0 1Nd0 An0 1K10 Lz0 1zB0 NX0 1u10 Wn0 S20 8x50 iu0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 3Cp0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14n1 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 ReX 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|64e3",
+                       "America/Monterrey|LMT CST CDT|6F.g 60 50|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1UQG0 2FjC0 1nX0 i6p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0|41e5",
+                       "America/Montevideo|LMT MMT -04 -03 -0330 -0230 -02 -0130|3I.P 3I.P 40 30 3u 2u 20 1u|012343434343434343434343435353636353636375363636363636363636363636363636363636363636363|-2tRUf.9 sVc0 8jcf.9 1db0 1dcu 1cLu 1dcu 1cLu ircu 11zu 1o0u 11zu 1o0u 11zu 1o0u 11zu 1qMu WLu 1qMu WLu 1fAu 1cLu 1o0u 11zu NAu 3jXu zXu Dq0u 19Xu pcu jz0 cm10 19X0 6tB0 1fbu 3o0u jX0 4vB0 xz0 3Cp0 mmu 1a10 IMu Db0 4c10 uL0 1Nd0 An0 1SN0 uL0 mp0 28L0 iPB0 un0 1SN0 xz0 1zd0 Lz0 1zd0 Rb0 1zd0 On0 1wp0 Rb0 s8p0 1fB0 1ip0 11z0 1ld0 14n0 1o10 11z0 1o10 11z0 1o10 14n0 1ld0 14n0 1ld0 14n0 1o10 11z0 1o10 11z0 1o10 11z0|17e5",
+                       "America/Toronto|LMT EST EDT EWT EPT|5h.w 50 40 40 40|012121212121212121212121212121212121212121212123412121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-32B6G.s UFdG.s 1in0 11Wu 1nzu 1fD0 WJ0 1wr0 Nb0 1Ap0 On0 1zd0 On0 1wp0 TX0 1tB0 TX0 1tB0 TX0 1tB0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 4kM0 8x40 iv0 1o10 11z0 1nX0 11z0 1o10 11z0 1o10 1qL0 11D0 1nX0 11B0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|65e5",
+                       "America/Nassau|LMT EST EDT|59.u 50 40|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2kNuO.u 26XdO.u 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|24e4",
+                       "America/New_York|LMT EST EDT EWT EPT|4U.2 50 40 40 40|012121212121212121212121212121212121212121212121213412121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3tFH0 1nEe0 1nX0 11B0 1nX0 11B0 1qL0 1a10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 RB0 8x40 iv0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|21e6",
+                       "America/Nipigon|LMT EST EDT EWT EPT|5R.4 50 40 40 40|0121234121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-32B66.U UFd6.U 1in0 Rnb0 3je0 8x40 iv0 19yN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|16e2",
+                       "America/Nome|LMT LMT NST NWT NPT BST BDT YST AKST AKDT|-cW.m b1.C b0 a0 a0 b0 a0 90 90 80|01234256565656565656565656565656565678989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898|-48Pzs.L 1jVyu.p 1EX1W.m 8wW0 iB0 Qlb0 52O0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cl0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|38e2",
+                       "America/Noronha|LMT -02 -01|29.E 20 10|0121212121212121212121212121212121212121|-2glxO.k HdKO.k 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 nsp0 WL0 1tB0 2L0 2pB0 On0|30e2",
+                       "America/North_Dakota/Beulah|LMT MST MDT MWT MPT CST CDT|6L.7 70 60 60 60 60 50|0121213412121212121212121212121212121212121212121212121212121212121212121212121212121212121212125656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFF0 1nEe0 1nX0 11B0 1nX0 SgN0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Oo0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0",
+                       "America/North_Dakota/Center|LMT MST MDT MWT MPT CST CDT|6J.c 70 60 60 60 60 50|0121213412121212121212121212121212121212121212121212121212125656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFF0 1nEe0 1nX0 11B0 1nX0 SgN0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14o0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0",
+                       "America/North_Dakota/New_Salem|LMT MST MDT MWT MPT CST CDT|6J.D 70 60 60 60 60 50|0121213412121212121212121212121212121212121212121212121212121212121212121212121212565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFF0 1nEe0 1nX0 11B0 1nX0 SgN0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14o0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0",
+                       "America/Ojinaga|LMT MST CST CDT MDT|6V.E 70 60 50 60|0121212323241414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 2zQN0 1lb0 14p0 1lb0 14q0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 U10 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|23e3",
+                       "America/Pangnirtung|-00 AST AWT APT ADDT ADT EDT EST CST CDT|0 40 30 30 20 30 40 50 60 50|012314151515151515151515151515151515167676767689767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767|-1XiM0 PnG0 8x50 iu0 LCL0 1fA0 zgO0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1o00 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11C0 1nX0 11A0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|14e2",
+                       "America/Paramaribo|LMT PMT PMT -0330 -03|3E.E 3E.Q 3E.A 3u 30|01234|-2nDUj.k Wqo0.c qanX.I 1yVXN.o|24e4",
+                       "America/Phoenix|LMT MST MDT MWT|7s.i 70 60 60|012121313121|-3tFF0 1nEe0 1nX0 11B0 1nX0 SgN0 4Al1 Ap0 1db0 SWqX 1cL0|42e5",
+                       "America/Port-au-Prince|LMT PPMT EST EDT|4N.k 4N 50 40|012323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3eLva.E 15RLX.E 2FnMb 19X0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14q0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 i6n0 1nX0 11B0 1nX0 d430 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 3iN0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|23e5",
+                       "America/Rio_Branco|LMT -05 -04|4v.c 50 40|01212121212121212121212121212121|-2glvs.M HdLs.M 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 NBd0 d5X0|31e4",
+                       "America/Porto_Velho|LMT -04 -03|4f.A 40 30|012121212121212121212121212121|-2glvI.o HdKI.o 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0|37e4",
+                       "America/Puerto_Rico|LMT AST AWT APT|4o.p 40 30 30|01231|-2Qi7z.z 1IUbz.z 7XT0 iu0|24e5",
+                       "America/Punta_Arenas|LMT SMT -05 -04 -03|4H.E 4G.K 50 40 30|01213132323232323232343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-3eLvg.k MJbX.6 fJAh.e 5knG.K 1Vzh.e jRAG.K 1pbh.e 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 nHX0 op0 blz0 ko0 Qeo0 WL0 1zd0 On0 1ip0 11z0 1o10 11z0 1qN0 WL0 1ld0 14n0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0",
+                       "America/Rainy_River|LMT CST CDT CWT CPT|6i.g 60 50 50 50|0121234121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-32B5F.I UFdF.I 1in0 Rnb0 3je0 8x30 iw0 19yN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|842",
+                       "America/Rankin_Inlet|-00 CST CDDT CDT EST|0 60 40 50 50|012131313131313131313131313131313131313131313431313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131|-vDc0 keu0 1fA0 zgO0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|26e2",
+                       "America/Recife|LMT -03 -02|2j.A 30 20|0121212121212121212121212121212121212121|-2glxE.o HdLE.o 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 nsp0 WL0 1tB0 2L0 2pB0 On0|33e5",
+                       "America/Regina|LMT MST MDT MWT MPT CST|6W.A 70 60 60 60 60|012121212121212121212121341212121212121212121212121215|-2AD51.o uHe1.o 1in0 s2L0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 66N0 1cL0 1cN0 19X0 1fB0 1cL0 1fB0 1cL0 1cN0 1cL0 M30 8x20 ix0 1ip0 1cL0 1ip0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 3NB0 1cL0 1cN0|19e4",
+                       "America/Resolute|-00 CST CDDT CDT EST|0 60 40 50 50|012131313131313131313131313131313131313131313431313131313431313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131|-SnA0 GWS0 1fA0 zgO0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|229",
+                       "America/Santarem|LMT -04 -03|3C.M 40 30|0121212121212121212121212121212|-2glwl.c HdLl.c 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 NBd0|21e4",
+                       "America/Santiago|LMT SMT -05 -04 -03|4G.K 4G.K 50 40 30|0121313232323232323432343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-3eLvh.e MJc0 fJAh.e 5knG.K 1Vzh.e jRAG.K 1pbh.e 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 nHX0 op0 9Bz0 jb0 1oN0 ko0 Qeo0 WL0 1zd0 On0 1ip0 11z0 1o10 11z0 1qN0 WL0 1ld0 14n0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1zb0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0|62e5",
+                       "America/Santo_Domingo|LMT SDMT EST EDT -0430 AST|4D.A 4E 50 40 4u 40|012324242424242525|-3eLvk.o 1Jic0.o 1lJMk Mn0 6sp0 Lbu 1Cou yLu 1RAu wLu 1QMu xzu 1Q0u xXu 1PAu 13jB0 e00|29e5",
+                       "America/Sao_Paulo|LMT -03 -02|36.s 30 20|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-2glwR.w HdKR.w 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 pTd0 PX0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 1C10 Lz0 1Ip0 HX0 1zd0 On0 1HB0 IL0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 IL0 1EN0 FX0 1HB0 FX0 1HB0 IL0 1EN0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1Kp0 FX0 1HB0 IL0 1EN0 FX0 1HB0 FX0 1HB0 IL0 1EN0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1Kp0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1Kp0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1Kp0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1Kp0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1Kp0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1Kp0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1Kp0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1Kp0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1Kp0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1Kp0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1Kp0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1Kp0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1Kp0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1Kp0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1Kp0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0|20e6",
+                       "America/Scoresbysund|LMT -02 -01 +00|1r.Q 20 10 0|0121323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-2a5Ww.8 2z5ew.8 1a00 1cK0 1cL0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|452",
+                       "America/Sitka|LMT LMT PST PWT PPT PDT YST AKST AKDT|-eW.L 91.d 80 70 70 70 90 90 80|0123425252525252525252525252525252567878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787|-48Pzs.L 1jVwu 1EX0W.L 8x10 iy0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 co0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|90e2",
+                       "America/St_Johns|LMT NST NDT NST NDT NWT NPT NDDT|3u.Q 3u.Q 2u.Q 3u 2u 2u 2u 1u|012121212121212121212121212121212121213434343434343435634343434343434343434343434343434343434343434343434343434343434343434343434343434343437343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-3tokt.8 1l020 14L0 1nB0 1in0 1gm0 Dz0 1JB0 1cL0 1cN0 1cL0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 1cL0 1cN0 1cL0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 1cL0 1fB0 19X0 1fB0 19X0 10O0 eKX.8 19X0 1iq0 WL0 1qN0 WL0 1qN0 WL0 1tB0 TX0 1tB0 WL0 1qN0 WL0 1qN0 7UHu itu 1tB0 WL0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1tB0 WL0 1ld0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14n1 1lb0 14p0 1nW0 11C0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zcX Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|11e4",
+                       "America/Swift_Current|LMT MST MDT MWT MPT CST|7b.k 70 60 60 60 60|012134121212121212121215|-2AD4M.E uHdM.E 1in0 UGp0 8x20 ix0 1o10 17b0 1ip0 11z0 1o10 11z0 1o10 11z0 isN0 1cL0 3Cp0 1cL0 1cN0 11z0 1qN0 WL0 pMp0|16e3",
+                       "America/Tegucigalpa|LMT CST CDT|5M.Q 60 50|01212121|-1WGGb.8 2ETcb.8 WL0 1qN0 WL0 GRd0 AL0|11e5",
+                       "America/Thule|LMT AST ADT|4z.8 40 30|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2a5To.Q 31NBo.Q 1cL0 1cN0 1cL0 1fB0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|656",
+                       "America/Thunder_Bay|LMT CST EST EWT EPT EDT|5V 60 50 40 40 40|01234252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252|-32B63 Avc3 1iaN0 8x40 iv0 XNB0 1cL0 1cN0 1fz0 1cN0 1cL0 3Cp0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|11e4",
+                       "America/Vancouver|LMT PST PDT PWT PPT|8c.s 80 70 70 70|01213412121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3tofL.w 1nspL.w 1in0 UGp0 8x10 iy0 1o10 17b0 1ip0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|23e5",
+                       "America/Whitehorse|LMT YST YDT YWT YPT YDDT PST PDT|90.c 90 80 80 80 70 80 70|01212134151676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676|-2MSeX.M GWpX.M 1in0 1o10 13V0 Ser0 8x00 iz0 LCL0 1fA0 3NA0 vrd0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|23e3",
+                       "America/Winnipeg|LMT CST CDT CWT CPT|6s.A 60 50 50 50|0121212134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3kLtv.o 1a3bv.o WL0 3ND0 1in0 Jap0 Rb0 aCN0 8x30 iw0 1tB0 11z0 1ip0 11z0 1o10 11z0 1o10 11z0 1rd0 10L0 1op0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 1cL0 1cN0 11z0 6i10 WL0 6i10 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1a00 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1a00 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|66e4",
+                       "America/Yakutat|LMT LMT YST YWT YPT YDT AKST AKDT|-eF.5 9i.T 90 80 80 80 90 80|0123425252525252525252525252525252526767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676|-48Pzs.L 1jVwL.G 1EX1F.5 8x00 iz0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cn0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|642",
+                       "America/Yellowknife|-00 MST MWT MPT MDDT MDT|0 70 60 60 50 60|012314151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151|-1pdA0 hix0 8x20 ix0 LCL0 1fA0 zgO0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|19e3",
+                       "Antarctica/Casey|-00 +08 +11|0 -80 -b0|01212121|-2q00 1DjS0 T90 40P0 KL0 blz0 3m10|10",
+                       "Antarctica/Davis|-00 +07 +05|0 -70 -50|01012121|-vyo0 iXt0 alj0 1D7v0 VB0 3Wn0 KN0|70",
+                       "Antarctica/DumontDUrville|-00 +10|0 -a0|0101|-U0o0 cfq0 bFm0|80",
+                       "Antarctica/Macquarie|-00 AEST AEDT +11|0 -a0 -b0 -b0|01210121212121212121212121212121212121212121212121212121212121212121212121212121212121212123|-2OPc0 Fb40 19X0 4SL0 1ayy0 Lvs0 1cM0 1o00 Rc0 1wo0 Rc0 1wo0 U00 1wo0 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1qM0 WM0 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1wo0 WM0 1tA0 WM0 1tA0 U00 1tA0 U00 1tA0 11A0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 11A0 1o00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1cM0 1cM0 1cM0|1",
+                       "Antarctica/Mawson|-00 +06 +05|0 -60 -50|012|-CEo0 2fyk0|60",
+                       "Pacific/Auckland|LMT NZMT NZST NZST NZDT|-bD.4 -bu -cu -c0 -d0|012131313131313131313131313134343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-46jLD.4 2nEO9.4 Lz0 1tB0 11zu 1o0u 11zu 1o0u 11zu 1o0u 14nu 1lcu 14nu 1lcu 1lbu 11Au 1nXu 11Au 1nXu 11Au 1nXu 11Au 1nXu 11Au 1qLu WMu 1qLu 11Au 1n1bu IM0 1C00 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1qM0 14o0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1io0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00|14e5",
+                       "Antarctica/Palmer|-00 -03 -04 -02|0 30 40 20|0121212121213121212121212121212121212121212121212121212121212121212121212121212121|-cao0 nD0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 jsN0 14N0 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0|40",
+                       "Antarctica/Rothera|-00 -03|0 30|01|gOo0|130",
+                       "Antarctica/Syowa|-00 +03|0 -30|01|-vs00|20",
+                       "Antarctica/Troll|-00 +00 +02|0 0 -20|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|1puo0 hd0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|40",
+                       "Antarctica/Vostok|-00 +06|0 -60|01|-tjA0|25",
+                       "Europe/Oslo|LMT CET CEST|-H -10 -20|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-32BcH Q4oH Qm0 W6o0 5pf0 WM0 1fA0 1cM0 1cM0 1cM0 1cM0 wJc0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1qM0 WM0 zpc0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|62e4",
+                       "Asia/Riyadh|LMT +03|-36.Q -30|01|-TvD6.Q|57e5",
+                       "Asia/Almaty|LMT +05 +06 +07|-57.M -50 -60 -70|012323232323232323232321232323232323232323232323232|-1Pc57.M eUo7.M 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0|15e5",
+                       "Asia/Amman|LMT EET EEST|-2n.I -20 -30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1yW2n.I 1HiMn.I KL0 1oN0 11b0 1oN0 11b0 1pd0 1dz0 1cp0 11b0 1op0 11b0 fO10 1db0 1e10 1cL0 1cN0 1cL0 1cN0 1fz0 1pd0 10n0 1ld0 14n0 1hB0 15b0 1ip0 19X0 1cN0 1cL0 1cN0 17b0 1ld0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1So0 y00 1fc0 1dc0 1co0 1dc0 1cM0 1cM0 1cM0 1o00 11A0 1lc0 17c0 1cM0 1cM0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 4bX0 Dd0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|25e5",
+                       "Asia/Anadyr|LMT +12 +13 +14 +11|-bN.U -c0 -d0 -e0 -b0|01232121212121212121214121212121212121212121212121212121212141|-1PcbN.U eUnN.U 23CL0 1db0 2q10 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|13e3",
+                       "Asia/Aqtau|LMT +04 +05 +06|-3l.4 -40 -50 -60|012323232323232323232123232312121212121212121212|-1Pc3l.4 eUnl.4 24PX0 2pX0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0|15e4",
+                       "Asia/Aqtobe|LMT +04 +05 +06|-3M.E -40 -50 -60|0123232323232323232321232323232323232323232323232|-1Pc3M.E eUnM.E 23CL0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0|27e4",
+                       "Asia/Ashgabat|LMT +04 +05 +06|-3R.w -40 -50 -60|0123232323232323232323212|-1Pc3R.w eUnR.w 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0|41e4",
+                       "Asia/Atyrau|LMT +03 +05 +06 +04|-3r.I -30 -50 -60 -40|01232323232323232323242323232323232324242424242|-1Pc3r.I eUor.I 24PW0 2pX0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 2sp0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0",
+                       "Asia/Baghdad|LMT BMT +03 +04|-2V.E -2V.A -30 -40|0123232323232323232323232323232323232323232323232323232|-3eLCV.E 18ao0.4 2ACnV.A 11b0 1cp0 1dz0 1dd0 1db0 1cN0 1cp0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1de0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0|66e5",
+                       "Asia/Qatar|LMT +04 +03|-3q.8 -40 -30|012|-21Jfq.8 27BXq.8|96e4",
+                       "Asia/Baku|LMT +03 +04 +05|-3j.o -30 -40 -50|01232323232323232323232123232323232323232323232323232323232323232|-1Pc3j.o 1jUoj.o WCL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 1cM0 9Je0 1o00 11z0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|27e5",
+                       "Asia/Bangkok|LMT BMT +07|-6G.4 -6G.4 -70|012|-3D8SG.4 1C000|15e6",
+                       "Asia/Barnaul|LMT +06 +07 +08|-5z -60 -70 -80|0123232323232323232323212323232321212121212121212121212121212121212|-21S5z pCnz 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 p90 LE0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0",
+                       "Asia/Beirut|LMT EET EEST|-2m -20 -30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3D8Om 1BWom 1on0 1410 1db0 19B0 1in0 1ip0 WL0 1lQp0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 11b0 q6N0 En0 1oN0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 11b0 1op0 11b0 dA10 17b0 1iN0 17b0 1iN0 17b0 1iN0 17b0 1vB0 SL0 1mp0 13z0 1iN0 17b0 1iN0 17b0 1jd0 12n0 1a10 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0|22e5",
+                       "Asia/Bishkek|LMT +05 +06 +07|-4W.o -50 -60 -70|012323232323232323232321212121212121212121212121212|-1Pc4W.o eUnW.o 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2e00 1tX0 17b0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1cPu 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0|87e4",
+                       "Asia/Brunei|LMT +0730 +08|-7D.E -7u -80|012|-1KITD.E gDc9.E|42e4",
+                       "Asia/Kolkata|LMT HMT MMT IST +0630|-5R.s -5R.k -5l.a -5u -6u|01234343|-4Fg5R.s BKo0.8 1rDcw.a 1r2LP.a 1un0 HB0 7zX0|15e6",
+                       "Asia/Chita|LMT +08 +09 +10|-7x.Q -80 -90 -a0|012323232323232323232321232323232323232323232323232323232323232312|-21Q7x.Q pAnx.Q 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3re0|33e4",
+                       "Asia/Choibalsan|LMT +07 +08 +10 +09|-7C -70 -80 -a0 -90|0123434343434343434343434343434343434343434343424242|-2APHC 2UkoC cKn0 1da0 1dd0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 6hD0 11z0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 3Db0 h1f0 1cJ0 1cP0 1cJ0|38e3",
+                       "Asia/Shanghai|LMT CST CDT|-85.H -80 -90|0121212121212121212121212121|-2M0U5.H 1zWo5.H Rz0 11d0 1wL0 A10 8HX0 1G10 Tz0 1ip0 1jX0 1cN0 11b0 1oN0 aL0 1tU30 Rb0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0|23e6",
+                       "Asia/Colombo|LMT MMT +0530 +06 +0630|-5j.o -5j.w -5u -60 -6u|012342432|-3D8Rj.o 13inX.Q 1rFbN.w 1zzu 7Apu 23dz0 11zu n3cu|22e5",
+                       "Asia/Dhaka|LMT HMT +0630 +0530 +06 +07|-61.E -5R.k -6u -5u -60 -70|01232454|-3eLG1.E 26008.k 1unn.k HB0 m6n0 2kxbu 1i00|16e6",
+                       "Asia/Damascus|LMT EET EEST|-2p.c -20 -30|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-21Jep.c Hep.c 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1xRB0 11X0 1oN0 10L0 1pB0 11b0 1oN0 10L0 1mp0 13X0 1oN0 11b0 1pd0 11b0 1oN0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 Nb0 1AN0 Nb0 bcp0 19X0 1gp0 19X0 3ld0 1xX0 Vd0 1Bz0 Sp0 1vX0 10p0 1dz0 1cN0 1cL0 1db0 1db0 1g10 1an0 1ap0 1db0 1fd0 1db0 1cN0 1db0 1dd0 1db0 1cp0 1dz0 1c10 1dX0 1cN0 1db0 1dd0 1db0 1cN0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1db0 1cN0 1db0 1cN0 19z0 1fB0 1qL0 11B0 1on0 Wp0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0|26e5",
+                       "Asia/Dili|LMT +08 +09|-8m.k -80 -90|01212|-2le8m.k 1dnXm.k 1nfA0 Xld0|19e4",
+                       "Asia/Dubai|LMT +04|-3F.c -40|01|-21JfF.c|39e5",
+                       "Asia/Dushanbe|LMT +05 +06 +07|-4z.c -50 -60 -70|012323232323232323232321|-1Pc4z.c eUnz.c 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2hB0|76e4",
+                       "Asia/Famagusta|LMT EET EEST +03|-2f.M -20 -30 -30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212312121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1Vc2f.M 2a3cf.M 1cL0 1qp0 Xz0 19B0 19X0 1fB0 1db0 1cp0 1cL0 1fB0 19X0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1o30 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 15U0 2Ks0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00",
+                       "Asia/Gaza|LMT EET EEST IST IDT|-2h.Q -20 -30 -20 -30|01212121212121212121212121212121234343434343434343434343434343431212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2MBCh.Q 1Azch.Q 5Rb0 10r0 1px0 10N0 1pz0 16p0 1jB0 16p0 1jx0 pBd0 Vz0 1oN0 11b0 1oO0 10N0 1pz0 10N0 1pb0 10N0 1pb0 10N0 1pb0 10N0 1pz0 10N0 1pb0 10N0 1pb0 11d0 1oL0 dW0 hfB0 Db0 1fB0 Rb0 bXd0 gM0 8Q00 IM0 1wM0 11z0 1C10 IL0 1s10 10n0 1o10 WL0 1zd0 On0 1ld0 11z0 1o10 14n0 1o10 14n0 1nd0 12n0 1nd0 Xz0 1q10 12n0 M10 C00 17c0 1io0 17c0 1io0 17c0 1o00 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 17c0 1io0 18N0 1bz0 19z0 1gp0 1610 1iL0 11z0 1o10 14o0 1lA1 SKX 1xd1 MKX 1AN0 1a00 1fA0 1cL0 1cN0 1nX0 1210 1nz0 1220 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0|18e5",
+                       "Asia/Hebron|LMT EET EEST IST IDT|-2k.n -20 -30 -20 -30|0121212121212121212121212121212123434343434343434343434343434343121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2MBCk.n 1Azck.n 5Rb0 10r0 1px0 10N0 1pz0 16p0 1jB0 16p0 1jx0 pBd0 Vz0 1oN0 11b0 1oO0 10N0 1pz0 10N0 1pb0 10N0 1pb0 10N0 1pb0 10N0 1pz0 10N0 1pb0 10N0 1pb0 11d0 1oL0 dW0 hfB0 Db0 1fB0 Rb0 bXd0 gM0 8Q00 IM0 1wM0 11z0 1C10 IL0 1s10 10n0 1o10 WL0 1zd0 On0 1ld0 11z0 1o10 14n0 1o10 14n0 1nd0 12n0 1nd0 Xz0 1q10 12n0 M10 C00 17c0 1io0 17c0 1io0 17c0 1o00 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 17c0 1io0 18N0 1bz0 19z0 1gp0 1610 1iL0 12L0 1mN0 14o0 1lc0 Tb0 1xd1 MKX bB0 cn0 1cN0 1a00 1fA0 1cL0 1cN0 1nX0 1210 1nz0 1220 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0|25e4",
+                       "Asia/Ho_Chi_Minh|LMT PLMT +07 +08 +09|-76.E -76.u -70 -80 -90|0123423232|-2yC76.E bK00.a 1h7b6.u 5lz0 18o0 3Oq0 k5b0 aW00 BAM0|90e5",
+                       "Asia/Hong_Kong|LMT HKT HKST HKT JST|-7A.G -80 -90 -8u -90|0123412121212121212121212121212121212121212121212121212121212121212121|-2CFH0 1taOu Hbu xUu 94nu 1qsu 1tX0 Rd0 1In0 NB0 1cL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1nX0 11B0 1nX0 U10 1tz0 U10 1wn0 Rd0 1wn0 U10 1tz0 U10 1tz0 U10 1tz0 U10 1wn0 Rd0 1wn0 Rd0 1wn0 U10 1tz0 U10 1tz0 17d0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 s10 1Vz0 1cN0 1cL0 1cN0 1cL0 6fd0 14n0|73e5",
+                       "Asia/Hovd|LMT +06 +07 +08|-66.A -60 -70 -80|012323232323232323232323232323232323232323232323232|-2APG6.A 2Uko6.A cKn0 1db0 1dd0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 6hD0 11z0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 kEp0 1cJ0 1cP0 1cJ0|81e3",
+                       "Asia/Irkutsk|LMT IMT +07 +08 +09|-6V.5 -6V.5 -70 -80 -90|012343434343434343434343234343434343434343434343434343434343434343|-3D8SV.5 1Bxc0 pjXV.5 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|60e4",
+                       "Europe/Istanbul|LMT IMT EET EEST +04 +03|-1T.Q -1U.U -20 -30 -40 -30|0123232323232323232323232323232323232323232323232323232345454545453232323232323232323232323232323232323232323232323232323232323235|-3D8NT.Q 1ePXW.U dzzU.U 11b0 8tB0 1on0 1410 1db0 19B0 1in0 3Rd0 Un0 1oN0 11b0 zSp0 CL0 mN0 1Vz0 1gN0 1pz0 5Rd0 1fz0 1yp0 ML0 1kp0 17b0 1ip0 17b0 1fB0 19X0 1jB0 18L0 1ip0 17z0 qdd0 xX0 3S10 Tz0 dA10 11z0 1o10 11z0 1qN0 11z0 1ze0 11B0 WM0 1qO0 WI0 1nX0 1rB0 10L0 11B0 1in0 17d0 1in0 2pX0 19E0 1fU0 16Q0 1iI0 16Q0 1iI0 1Vd0 pb0 3Kp0 14o0 1de0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1a00 1fA0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WO0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 Xc0 1qo0 WM0 1qM0 11A0 1o00 1200 1nA0 11A0 1tA0 U00 15w0|13e6",
+                       "Asia/Jakarta|LMT BMT +0720 +0730 +09 +08 WIB|-77.c -77.c -7k -7u -90 -80 -70|012343536|-49jH7.c 2hiLL.c luM0 mPzO 8vWu 6kpu 4PXu xhcu|31e6",
+                       "Asia/Jayapura|LMT +09 +0930 WIT|-9m.M -90 -9u -90|0123|-1uu9m.M sMMm.M L4nu|26e4",
+                       "Asia/Jerusalem|LMT JMT IST IDT IDDT|-2k.S -2k.E -20 -30 -40|0123232323232432323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3D8Ok.S 1wvA0.e SyMk.E 5Rb0 10r0 1px0 10N0 1pz0 16p0 1jB0 16p0 1jx0 3LB0 Em0 or0 1cn0 1dB0 16n0 10O0 1ja0 1tC0 14o0 1cM0 1a00 11A0 1Na0 An0 1MP0 AJ0 1Kp0 LC0 1oo0 Wl0 EQN0 Db0 1fB0 Rb0 bXd0 gM0 8Q00 IM0 1wM0 11z0 1C10 IL0 1s10 10n0 1o10 WL0 1zd0 On0 1ld0 11z0 1o10 14n0 1o10 14n0 1nd0 12n0 1nd0 Xz0 1q10 12n0 1hB0 1dX0 1ep0 1aL0 1eN0 17X0 1nf0 11z0 1tB0 19W0 1e10 17b0 1ep0 1gL0 18N0 1fz0 1eN0 17b0 1gq0 1gn0 19d0 1dz0 1c10 17X0 1hB0 1gn0 19d0 1dz0 1c10 17X0 1kp0 1dz0 1c10 1aL0 1eN0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0|81e4",
+                       "Asia/Kabul|LMT +04 +0430|-4A.M -40 -4u|012|-3eLEA.M 2dTcA.M|46e5",
+                       "Asia/Kamchatka|LMT +11 +12 +13|-ay.A -b0 -c0 -d0|012323232323232323232321232323232323232323232323232323232323212|-1SLKy.A ivXy.A 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|18e4",
+                       "Asia/Karachi|LMT +0530 +0630 +05 PKT PKST|-4s.c -5u -6u -50 -50 -60|012134545454|-2xoss.c 1qOKW.c 7zX0 eup0 LqMu 1fy00 1cL0 dK10 11b0 1610 1jX0|24e6",
+                       "Asia/Urumqi|LMT +06|-5O.k -60|01|-1GgtO.k|32e5",
+                       "Asia/Kathmandu|LMT +0530 +0545|-5F.g -5u -5J|012|-21JhF.g 2EGMb.g|12e5",
+                       "Asia/Khandyga|LMT +08 +09 +10 +11|-92.d -80 -90 -a0 -b0|0123232323232323232323212323232323232323232323232343434343434343432|-21Q92.d pAp2.d 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 qK0 yN0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 17V0 7zD0|66e2",
+                       "Asia/Krasnoyarsk|LMT +06 +07 +08|-6b.q -60 -70 -80|01232323232323232323232123232323232323232323232323232323232323232|-21Hib.q prAb.q 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|10e5",
+                       "Asia/Kuala_Lumpur|LMT SMT +07 +0720 +0730 +09 +08|-6K.K -6T.p -70 -7k -7u -90 -80|01234546|-2M0SK.K aILP.l 17anT.p l5XE 17bO 8Fyu 1so1u|71e5",
+                       "Asia/Kuching|LMT +0730 +08 +0820 +09|-7l.k -7u -80 -8k -90|0123232323232323242|-1KITl.k gDbP.k 6ynu AnE 1O0k AnE 1NAk AnE 1NAk AnE 1NAk AnE 1O0k AnE 1NAk AnE pAk 8Fz0|13e4",
+                       "Asia/Macau|LMT CST +09 +10 CDT|-7y.a -80 -90 -a0 -90|012323214141414141414141414141414141414141414141414141414141414141414141|-2CFHy.a 1uqKy.a PX0 1kn0 15B0 11b0 4Qq0 1oM0 11c0 1ko0 1u00 11A0 1cM0 11c0 1o00 11A0 1o00 11A0 1oo0 1400 1o00 11A0 1o00 U00 1tA0 U00 1wo0 Rc0 1wru U10 1tz0 U10 1tz0 U10 1tz0 U10 1wn0 Rd0 1wn0 Rd0 1wn0 U10 1tz0 U10 1tz0 17d0 1cK0 1cO0 1cK0 1cO0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 s10 1Vz0 1cN0 1cL0 1cN0 1cL0 6fd0 14n0|57e4",
+                       "Asia/Magadan|LMT +10 +11 +12|-a3.c -a0 -b0 -c0|012323232323232323232321232323232323232323232323232323232323232312|-1Pca3.c eUo3.c 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3Cq0|95e3",
+                       "Asia/Makassar|LMT MMT +08 +09 WITA|-7V.A -7V.A -80 -90 -80|01234|-21JjV.A vfc0 myLV.A 8ML0|15e5",
+                       "Asia/Manila|LMT LMT PST PDT JST|fU -84 -80 -90 -90|01232423232|-54m84 2clc0 1vfc4 AL0 cK10 65X0 mXB0 vX0 VK10 1db0|24e6",
+                       "Asia/Nicosia|LMT EET EEST|-2d.s -20 -30|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1Vc2d.s 2a3cd.s 1cL0 1qp0 Xz0 19B0 19X0 1fB0 1db0 1cp0 1cL0 1fB0 19X0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1o30 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|32e4",
+                       "Asia/Novokuznetsk|LMT +06 +07 +08|-5M.M -60 -70 -80|012323232323232323232321232323232323232323232323232323232323212|-1PctM.M eULM.M 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|55e4",
+                       "Asia/Novosibirsk|LMT +06 +07 +08|-5v.E -60 -70 -80|0123232323232323232323212323212121212121212121212121212121212121212|-21Qnv.E pAFv.E 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 ml0 Os0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 4eN0|15e5",
+                       "Asia/Omsk|LMT +05 +06 +07|-4R.u -50 -60 -70|01232323232323232323232123232323232323232323232323232323232323232|-224sR.u pMLR.u 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|12e5",
+                       "Asia/Oral|LMT +03 +05 +06 +04|-3p.o -30 -50 -60 -40|01232323232323232424242424242424242424242424242|-1Pc3p.o eUop.o 23CK0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 1cM0 1cM0 IM0 1EM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0|27e4",
+                       "Asia/Pontianak|LMT PMT +0730 +09 +08 WITA WIB|-7h.k -7h.k -7u -90 -80 -80 -70|012324256|-2ua7h.k XE00 munL.k 8Rau 6kpu 4PXu xhcu Wqnu|23e4",
+                       "Asia/Pyongyang|LMT KST JST KST|-8n -8u -90 -90|012313|-2um8n 97XR 1lTzu 2Onc0 6BA0|29e5",
+                       "Asia/Qostanay|LMT +04 +05 +06|-4e.s -40 -50 -60|012323232323232323232123232323232323232323232323|-1Pc4e.s eUoe.s 23CL0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0",
+                       "Asia/Qyzylorda|LMT +04 +05 +06|-4l.Q -40 -50 -60|01232323232323232323232323232323232323232323232|-1Pc4l.Q eUol.Q 23CL0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 3ao0 1EM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 zQl0|73e4",
+                       "Asia/Rangoon|LMT RMT +0630 +09|-6o.L -6o.L -6u -90|01232|-3D8So.L 1BnA0 SmnS.L 7j9u|48e5",
+                       "Asia/Sakhalin|LMT +09 +11 +12 +10|-9u.M -90 -b0 -c0 -a0|01232323232323232323232423232323232424242424242424242424242424242|-2AGVu.M 1BoMu.M 1qFa0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 2pB0 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0|58e4",
+                       "Asia/Samarkand|LMT +04 +05 +06|-4r.R -40 -50 -60|01232323232323232323232|-1Pc4r.R eUor.R 23CL0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0|36e4",
+                       "Asia/Seoul|LMT KST JST KST KDT KDT|-8r.Q -8u -90 -90 -9u -a0|0123141414141414135353|-2um8r.Q 97XV.Q 1m1zu kKo0 2I0u OL0 1FB0 Rb0 1qN0 TX0 1tB0 TX0 1tB0 TX0 1tB0 TX0 2ap0 12FBu 11A0 1o00 11A0|23e6",
+                       "Asia/Singapore|LMT SMT +07 +0720 +0730 +09 +08|-6T.p -6T.p -70 -7k -7u -90 -80|01234546|-2M0ST.p aIM0 17anT.p l5XE 17bO 8Fyu 1so1u|56e5",
+                       "Asia/Srednekolymsk|LMT +10 +11 +12|-ae.Q -a0 -b0 -c0|01232323232323232323232123232323232323232323232323232323232323232|-1Pcae.Q eUoe.Q 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|35e2",
+                       "Asia/Taipei|LMT CST JST CDT|-86 -80 -90 -90|012131313131313131313131313131313131313131|-30bk6 1FDc6 joM0 1yo0 Tz0 1ip0 1jX0 1cN0 11b0 1oN0 11b0 1oN0 11b0 1oN0 11b0 10N0 1BX0 10p0 1pz0 10p0 1pz0 10p0 1db0 1dd0 1db0 1cN0 1db0 1cN0 1db0 1cN0 1db0 1BB0 ML0 1Bd0 ML0 uq10 1db0 1cN0 1db0 97B0 AL0|74e5",
+                       "Asia/Tashkent|LMT +05 +06 +07|-4B.b -50 -60 -70|012323232323232323232321|-1Pc4B.b eUnB.b 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0|23e5",
+                       "Asia/Tbilisi|LMT TBMT +03 +04 +05|-2X.b -2X.b -30 -40 -50|01234343434343434343434323232343434343434343434323|-3D8OX.b 1LUM0 1jUnX.b WCL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 1cK0 1cL0 1cN0 1cL0 1cN0 2pz0 1cL0 1fB0 3Nz0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 An0 Os0 WM0|11e5",
+                       "Asia/Tehran|LMT TMT +0330 +04 +05 +0430|-3p.I -3p.I -3u -40 -50 -4u|01234325252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252|-2btDp.I 1d3c0 1huLT.I TXu 1pz0 sN0 vAu 1cL0 1dB0 1en0 pNB0 UL0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 64p0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0|14e6",
+                       "Asia/Thimphu|LMT +0530 +06|-5W.A -5u -60|012|-Su5W.A 1BGMs.A|79e3",
+                       "Asia/Tokyo|LMT JST JDT|-9i.X -90 -a0|0121212121|-3jE90 2qSo0 Rc0 1lc0 14o0 1zc0 Oo0 1zc0 Oo0|38e6",
+                       "Asia/Tomsk|LMT +06 +07 +08|-5D.P -60 -70 -80|0123232323232323232323212323232323232323232323212121212121212121212|-21NhD.P pxzD.P 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 co0 1bB0 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3Qp0|10e5",
+                       "Asia/Ulaanbaatar|LMT +07 +08 +09|-77.w -70 -80 -90|012323232323232323232323232323232323232323232323232|-2APH7.w 2Uko7.w cKn0 1db0 1dd0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 6hD0 11z0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 kEp0 1cJ0 1cP0 1cJ0|12e5",
+                       "Asia/Ust-Nera|LMT +08 +09 +12 +11 +10|-9w.S -80 -90 -c0 -b0 -a0|012343434343434343434345434343434343434343434343434343434343434345|-21Q9w.S pApw.S 23CL0 1d90 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 17V0 7zD0|65e2",
+                       "Asia/Vladivostok|LMT +09 +10 +11|-8L.v -90 -a0 -b0|01232323232323232323232123232323232323232323232323232323232323232|-1SJIL.v itXL.v 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|60e4",
+                       "Asia/Yakutsk|LMT +08 +09 +10|-8C.W -80 -90 -a0|01232323232323232323232123232323232323232323232323232323232323232|-21Q8C.W pAoC.W 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|28e4",
+                       "Asia/Yekaterinburg|LMT PMT +04 +05 +06|-42.x -3J.5 -40 -50 -60|012343434343434343434343234343434343434343434343434343434343434343|-2ag42.x 7mQh.s qBvJ.5 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|14e5",
+                       "Asia/Yerevan|LMT +03 +04 +05|-2W -30 -40 -50|0123232323232323232323212121212323232323232323232323232323232|-1Pc2W 1jUnW WCL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 4RX0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|13e5",
+                       "Atlantic/Azores|LMT HMT -02 -01 +00 WET|1G.E 1S.w 20 10 0 0|012323232323232323232323232323232323232323232343234323432343232323232323232323232323232323232323232343434343434343434343434343434345434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-3tomh.k 18aoh.k aPX0 Sp0 LX0 1vc0 Tc0 1uM0 SM0 1vc0 Tc0 1vc0 SM0 1vc0 6600 1co0 3E00 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 3I00 17c0 1cM0 1cM0 3Fc0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 1tA0 1cM0 1dc0 1400 gL0 IM0 s10 U00 dX0 Rc0 pd0 Rc0 gL0 Oo0 pd0 Rc0 gL0 Oo0 pd0 14o0 1cM0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 3Co0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 qIl0 1cM0 1fA0 1cM0 1cM0 1cN0 1cL0 1cN0 1cM0 1cM0 1cM0 1cM0 1cN0 1cL0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cL0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|25e4",
+                       "Atlantic/Bermuda|LMT AST ADT|4j.i 40 30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1BnRE.G 1LTbE.G 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|65e3",
+                       "Atlantic/Canary|LMT -01 WET WEST|11.A 10 0 -10|01232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-1UtaW.o XPAW.o 1lAK0 1a10 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|54e4",
+                       "Atlantic/Cape_Verde|LMT -02 -01|1y.4 20 10|01212|-2ldW0 1eEo0 7zX0 1djf0|50e4",
+                       "Atlantic/Faroe|LMT WET WEST|r.4 0 -10|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2uSnw.U 2Wgow.U 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|49e3",
+                       "Atlantic/Madeira|LMT FMT -01 +00 +01 WET WEST|17.A 17.A 10 0 -10 0 -10|012323232323232323232323232323232323232323232343234323432343232323232323232323232323232323232323232565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tomQ.o 18anQ.o aPX0 Sp0 LX0 1vc0 Tc0 1uM0 SM0 1vc0 Tc0 1vc0 SM0 1vc0 6600 1co0 3E00 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 3I00 17c0 1cM0 1cM0 3Fc0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 1tA0 1cM0 1dc0 1400 gL0 IM0 s10 U00 dX0 Rc0 pd0 Rc0 gL0 Oo0 pd0 Rc0 gL0 Oo0 pd0 14o0 1cM0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 3Co0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 qIl0 1cM0 1fA0 1cM0 1cM0 1cN0 1cL0 1cN0 1cM0 1cM0 1cM0 1cM0 1cN0 1cL0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|27e4",
+                       "Atlantic/Reykjavik|LMT -01 +00 GMT|1s 10 0 0|012121212121212121212121212121212121212121212121212121212121212121213|-2uWmw mfaw 1Bd0 ML0 1LB0 Cn0 1LB0 3fX0 C10 HrX0 1cO0 LB0 1EL0 LA0 1C00 Oo0 1wo0 Rc0 1wo0 Rc0 1wo0 Rc0 1zc0 Oo0 1zc0 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1lc0 14o0 1o00 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1o00 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1o00 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1o00 14o0|12e4",
+                       "Atlantic/South_Georgia|LMT -02|2q.8 20|01|-3eLxx.Q|30",
+                       "Atlantic/Stanley|LMT SMT -04 -03 -02|3P.o 3P.o 40 30 20|0123232323232323434323232323232323232323232323232323232323232323232323|-3eLw8.A S200 12bA8.A 19X0 1fB0 19X0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 Cn0 1Cc10 WL0 1qL0 U10 1tz0 2mN0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1tz0 U10 1tz0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1tz0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qN0 U10 1wn0 Rd0 1wn0 U10 1tz0 U10 1tz0 U10 1tz0 U10 1tz0 U10 1wn0 U10 1tz0 U10 1tz0 U10|21e2",
+                       "Australia/Sydney|LMT AEST AEDT|-a4.Q -a0 -b0|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-32oW4.Q RlA5.Q xcX 10jd0 yL0 1cN0 1cL0 1fB0 19X0 17c10 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 14o0 1o00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1tA0 WM0 1tA0 U00 1tA0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 11A0 1o00 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|40e5",
+                       "Australia/Adelaide|LMT ACST ACST ACDT|-9e.k -90 -9u -au|012323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323|-32oVe.k ak0e.k H1zv xcX 10jd0 yL0 1cN0 1cL0 1fB0 19X0 17c10 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1tA0 WM0 1tA0 U00 1tA0 U00 1tA0 Oo0 1zc0 WM0 1qM0 Rc0 1zc0 U00 1tA0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|11e5",
+                       "Australia/Brisbane|LMT AEST AEDT|-ac.8 -a0 -b0|012121212121212121|-32Bmc.8 Ry0d.8 xcX 10jd0 yL0 1cN0 1cL0 1fB0 19X0 17c10 LA0 H1A0 Oo0 1zc0 Oo0 1zc0 Oo0|20e5",
+                       "Australia/Broken_Hill|LMT AEST ACST ACST ACDT|-9p.M -a0 -90 -9u -au|0123434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-32oVp.M 3Lzp.M 6wp0 H1zv xcX 10jd0 yL0 1cN0 1cL0 1fB0 19X0 17c10 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 14o0 1o00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1tA0 WM0 1tA0 U00 1tA0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|18e3",
+                       "Australia/Currie|LMT AEST AEDT|-9z.s -a0 -b0|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-3109z.s Pk1z.s 19X0 10jd0 yL0 1cN0 1cL0 1fB0 19X0 17c10 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1qM0 WM0 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1wo0 WM0 1tA0 WM0 1tA0 U00 1tA0 U00 1tA0 11A0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 11A0 1o00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|746",
+                       "Australia/Darwin|LMT ACST ACST ACDT|-8H.k -90 -9u -au|01232323232|-32oUH.k ajXH.k H1zv xcX 10jd0 yL0 1cN0 1cL0 1fB0 19X0|12e4",
+                       "Australia/Eucla|LMT +0845 +0945|-8z.s -8J -9J|01212121212121212121|-30nIz.s PknP.s xcX 10jd0 yL0 1cN0 1cL0 1gSp0 Oo0 l5A0 Oo0 iJA0 G00 zU00 IM0 1qM0 11A0 1o00 11A0|368",
+                       "Australia/Hobart|LMT AEST AEDT|-9N.g -a0 -b0|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-3109N.g Pk1N.g 19X0 10jd0 yL0 1cN0 1cL0 1fB0 19X0 VfB0 1cM0 1o00 Rc0 1wo0 Rc0 1wo0 U00 1wo0 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1qM0 WM0 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1wo0 WM0 1tA0 WM0 1tA0 U00 1tA0 U00 1tA0 11A0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 11A0 1o00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|21e4",
+                       "Australia/Lord_Howe|LMT AEST +1030 +1130 +11|-aA.k -a0 -au -bu -b0|01232323232424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424|-32oWA.k 3tzAA.k 1zdu Rb0 1zd0 On0 1zd0 On0 1zd0 On0 1zd0 TXu 1qMu WLu 1tAu WLu 1tAu TXu 1tAu Onu 1zcu Onu 1zcu Onu 1zcu Rbu 1zcu Onu 1zcu Onu 1zcu 11zu 1o0u 11zu 1o0u 11zu 1o0u 11zu 1qMu WLu 11Au 1nXu 1qMu 11zu 1o0u 11zu 1o0u 11zu 1qMu WLu 1qMu 11zu 1o0u WLu 1qMu 14nu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu|347",
+                       "Australia/Lindeman|LMT AEST AEDT|-9T.U -a0 -b0|0121212121212121212121|-32BlT.U RxXU.U xcX 10jd0 yL0 1cN0 1cL0 1fB0 19X0 17c10 LA0 H1A0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0|10",
+                       "Australia/Melbourne|LMT AEST AEDT|-9D.Q -a0 -b0|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-32oVD.Q RlzE.Q xcX 10jd0 yL0 1cN0 1cL0 1fB0 19X0 17c10 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1qM0 11A0 1tA0 U00 1tA0 U00 1tA0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 11A0 1o00 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|39e5",
+                       "Australia/Perth|LMT AWST AWDT|-7H.o -80 -90|01212121212121212121|-30nHH.o PknI.o xcX 10jd0 yL0 1cN0 1cL0 1gSp0 Oo0 l5A0 Oo0 iJA0 G00 zU00 IM0 1qM0 11A0 1o00 11A0|18e5",
+                       "CET|CET CEST|-10 -20|01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aFe0 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 16M0 1gMM0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00",
+                       "Pacific/Easter|LMT EMT -07 -06 -05|7h.s 7h.s 70 60 50|0123232323232323232323232323234343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-3eLsG.w 1HRc0 1s4IG.w WL0 1zd0 On0 1ip0 11z0 1o10 11z0 1qN0 WL0 1ld0 14n0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 2pA0 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1zb0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0|30e2",
+                       "CST6CDT|CST CDT CWT CPT|60 50 50 50|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0",
+                       "EET|EET EEST|-20 -30|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|hDB0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00",
+                       "Europe/Dublin|LMT DMT IST GMT BST IST|p p.l -y.D 0 -10 -10|012343434343435353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353|-3BHbz 1ra20.l Rc0 1fzy.D 14M0 1fc0 1g00 1co0 1dc0 1co0 1oo0 1400 1dc0 19A0 1io0 1io0 WM0 1o00 14o0 1o00 17c0 1io0 17c0 1fA0 1a00 1lc0 17c0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1cM0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1io0 1qM0 Dc0 g600 14o0 1wo0 17c0 1io0 11A0 1o00 17c0 1fA0 1a00 1fA0 1cM0 1fA0 1a00 17c0 1fA0 1a00 1io0 17c0 1lc0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1a00 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1tA0 IM0 90o0 U00 1tA0 U00 1tA0 U00 1tA0 U00 1tA0 WM0 1qM0 WM0 1qM0 WM0 1tA0 U00 1tA0 U00 1tA0 11z0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 14o0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|12e5",
+                       "EST|EST|50|0|",
+                       "EST5EDT|EST EDT EWT EPT|50 40 40 40|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261t0 1nX0 11B0 1nX0 SgN0 8x40 iv0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0",
+                       "Etc/GMT-0|GMT|0|0|",
+                       "Etc/GMT-1|+01|-10|0|",
+                       "Etc/GMT-10|+10|-a0|0|",
+                       "Etc/GMT-11|+11|-b0|0|",
+                       "Etc/GMT-12|+12|-c0|0|",
+                       "Etc/GMT-13|+13|-d0|0|",
+                       "Etc/GMT-14|+14|-e0|0|",
+                       "Etc/GMT-2|+02|-20|0|",
+                       "Etc/GMT-3|+03|-30|0|",
+                       "Etc/GMT-4|+04|-40|0|",
+                       "Etc/GMT-5|+05|-50|0|",
+                       "Etc/GMT-6|+06|-60|0|",
+                       "Etc/GMT-7|+07|-70|0|",
+                       "Etc/GMT-8|+08|-80|0|",
+                       "Etc/GMT-9|+09|-90|0|",
+                       "Etc/GMT+1|-01|10|0|",
+                       "Etc/GMT+10|-10|a0|0|",
+                       "Etc/GMT+11|-11|b0|0|",
+                       "Etc/GMT+12|-12|c0|0|",
+                       "Etc/GMT+2|-02|20|0|",
+                       "Etc/GMT+3|-03|30|0|",
+                       "Etc/GMT+4|-04|40|0|",
+                       "Etc/GMT+5|-05|50|0|",
+                       "Etc/GMT+6|-06|60|0|",
+                       "Etc/GMT+7|-07|70|0|",
+                       "Etc/GMT+8|-08|80|0|",
+                       "Etc/GMT+9|-09|90|0|",
+                       "Etc/UTC|UTC|0|0|",
+                       "Europe/Amsterdam|LMT AMT NST +0120 +0020 CEST CET|-j.w -j.w -1j.w -1k -k -20 -10|0121212121212121212121212121212121212121212123434345656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656|-5sHcj.w 3i200 11b0 1iP0 11A0 1io0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1co0 1io0 1yo0 Pc0 1a00 1fA0 1Bc0 Mo0 1tc0 Uo0 1tA0 U00 1uo0 W00 1s00 VA0 1so0 Vc0 1sM0 UM0 1wo0 Rc0 1u00 Wo0 1rA0 W00 1s00 VA0 1sM0 UM0 1w00 fV0 BCX.w 1tA0 U00 1u00 Wo0 1sm0 601k WM0 1fA0 1cM0 1cM0 1cM0 16M0 1gMM0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|16e5",
+                       "Europe/Andorra|LMT WET CET CEST|-6.4 0 -10 -20|0123232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-2M0M6.4 1Pnc6.4 1xIN0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|79e3",
+                       "Europe/Astrakhan|LMT +03 +04 +05|-3c.c -30 -40 -50|012323232323232323212121212121212121212121212121212121212121212|-1Pcrc.c eUMc.c 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 1cM0 3Co0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0|10e5",
+                       "Europe/Athens|LMT AMT EET EEST CEST CET|-1y.Q -1y.Q -20 -30 -20 -10|0123234545232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-30SNy.Q OMM1 CNbx.Q mn0 kU10 9b0 3Es0 Xa0 1fb0 1dd0 k3X0 Nz0 SCp0 1vc0 SO0 1cM0 1a00 1ao0 1fc0 1a10 1fG0 1cg0 1dX0 1bX0 1cQ0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|35e5",
+                       "Europe/London|LMT GMT BST BDST|1.f 0 -10 -20|01212121212121212121212121212121212121212121212121232323232321212321212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-4VgnW.J 2KHdW.J Rc0 1fA0 14M0 1fc0 1g00 1co0 1dc0 1co0 1oo0 1400 1dc0 19A0 1io0 1io0 WM0 1o00 14o0 1o00 17c0 1io0 17c0 1fA0 1a00 1lc0 17c0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1cM0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1io0 1qM0 Dc0 2Rz0 Dc0 1zc0 Oo0 1zc0 Rc0 1wo0 17c0 1iM0 FA0 xB0 1fA0 1a00 14o0 bb0 LA0 xB0 Rc0 1wo0 11A0 1o00 17c0 1fA0 1a00 1fA0 1cM0 1fA0 1a00 17c0 1fA0 1a00 1io0 17c0 1lc0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1a00 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1tA0 IM0 90o0 U00 1tA0 U00 1tA0 U00 1tA0 U00 1tA0 WM0 1qM0 WM0 1qM0 WM0 1tA0 U00 1tA0 U00 1tA0 11z0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 14o0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|10e6",
+                       "Europe/Belgrade|LMT CET CEST|-1m -10 -20|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3topm 2juLm 3IP0 WM0 1fA0 1cM0 1cM0 1rc0 Qo0 1vmo0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|12e5",
+                       "Europe/Berlin|LMT CET CEST CEMT|-R.s -10 -20 -30|012121212121212321212321212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-36RcR.s UbWR.s 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 kL0 Nc0 m10 WM0 1ao0 1cp0 dX0 jz0 Dd0 1io0 17c0 1fA0 1a00 1ehA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|41e5",
+                       "Europe/Prague|LMT PMT CET CEST GMT|-V.I -V.I -10 -20 0|0123232323232323232423232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-4QbAV.I 1FDc0 XPaV.I 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 1cM0 1qM0 11c0 mp0 xA0 mn0 17c0 1io0 17c0 1fc0 1ao0 1bNc0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|13e5",
+                       "Europe/Brussels|LMT BMT WET CET CEST WEST|-h.u -h.u 0 -10 -20 -10|012343434325252525252525252525252525252525252525252525434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-3D8Mh.u u1M0 SNMh.u 3zX0 11c0 1iO0 11A0 1o00 11A0 my0 Ic0 1qM0 Rc0 1EM0 UM0 1u00 10o0 1io0 1io0 17c0 1a00 1fA0 1cM0 1cM0 1io0 17c0 1fA0 1a00 1io0 1a30 1io0 17c0 1fA0 1a00 1io0 17c0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 y00 5Wn0 WM0 1fA0 1cM0 16M0 1iM0 16M0 1C00 Uo0 1eeo0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|21e5",
+                       "Europe/Bucharest|LMT BMT EET EEST|-1I.o -1I.o -20 -30|01232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3awpI.o 1AU00 20LI.o RA0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1Axc0 On0 1fA0 1a10 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cK0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cL0 1cN0 1cL0 1fB0 1nX0 11E0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|19e5",
+                       "Europe/Budapest|LMT CET CEST|-1g.k -10 -20|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3cWpg.k 12hbg.k 11d0 1iO0 11A0 1ip0 17b0 1op0 1tb0 Q2m0 3Ne0 WM0 1fA0 1cM0 1cM0 1oJ0 1dc0 1030 1fA0 1cM0 1cM0 1cM0 1cM0 1fA0 1a00 1iM0 1fA0 8Ha0 Rb0 1wN0 Rb0 1BB0 Lz0 1C20 LB0 SNX0 1a10 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|17e5",
+                       "Europe/Zurich|LMT BMT CET CEST|-y.8 -t.K -10 -20|0123232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-4HyMy.8 1Dw04.m 1SfAt.K 11A0 1o00 11A0 1xG10 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|38e4",
+                       "Europe/Chisinau|LMT CMT BMT EET EEST CEST CET MSK MSD|-1T.k -1T -1I.o -20 -30 -20 -10 -30 -40|0123434343434343434345656578787878787878787878434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-3D8NT.k 1wNA0.k wGMa.A 20LI.o RA0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 27A0 2en0 39g0 WM0 1fA0 1cM0 V90 1t7z0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 gL0 WO0 1cM0 1cM0 1cK0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1nX0 11D0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|67e4",
+                       "Europe/Copenhagen|LMT CMT CET CEST|-O.k -O.k -10 -20|012323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3eLAO.k 9Io0 SryO.k Tz0 VuO0 60q0 WM0 1fA0 1cM0 1cM0 1cM0 S00 1HA0 Nc0 1C00 Dc0 1Nc0 Ao0 1h5A0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|12e5",
+                       "Europe/Gibraltar|LMT GMT BST BDST CET CEST|l.o 0 -10 -20 -10 -20|0121212121212121212121212121212121212121212121212123232323232121232121212121212121212145454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-3BHbC.A 1ra1C.A Rc0 1fA0 14M0 1fc0 1g00 1co0 1dc0 1co0 1oo0 1400 1dc0 19A0 1io0 1io0 WM0 1o00 14o0 1o00 17c0 1io0 17c0 1fA0 1a00 1lc0 17c0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1cM0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1io0 1qM0 Dc0 2Rz0 Dc0 1zc0 Oo0 1zc0 Rc0 1wo0 17c0 1iM0 FA0 xB0 1fA0 1a00 14o0 bb0 LA0 xB0 Rc0 1wo0 11A0 1o00 17c0 1fA0 1a00 1fA0 1cM0 1fA0 1a00 17c0 1fA0 1a00 1io0 17c0 1lc0 17c0 1fA0 10Jz0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|30e3",
+                       "Europe/Helsinki|LMT HMT EET EEST|-1D.N -1D.N -20 -30|01232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3H0ND.N 1Iu00 OULD.N 1dA0 1xGq0 1cM0 1cM0 1cM0 1cN0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|12e5",
+                       "Europe/Kaliningrad|LMT CET CEST CET CEST MSK MSD EEST EET +03|-1m -10 -20 -20 -30 -30 -40 -30 -20 -30|01212121212121343565656565656565657878787878787878787878787878787878787878787898|-36Rdm UbXm 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 Am0 Lb0 1en0 op0 1pNz0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|44e4",
+                       "Europe/Kiev|LMT KMT EET MSK CEST CET MSD EEST|-22.4 -22.4 -20 -30 -20 -10 -40 -30|01234545363636363636363636367272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272|-3D8O2.4 1LUM0 eUo2.4 rnz0 2Hg0 WM0 1fA0 da0 1v4m0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 Db0 3220 1cK0 1cL0 1cN0 1cL0 1cN0 1cL0 1cQ0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|34e5",
+                       "Europe/Kirov|LMT +03 +04 +05|-3i.M -30 -40 -50|01232323232323232321212121212121212121212121212121212121212121|-22WM0 qH90 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 1cM0 3Co0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|48e4",
+                       "Europe/Lisbon|LMT WET WEST WEMT CET CEST|A.J 0 -10 -20 -10 -20|012121212121212121212121212121212121212121212321232123212321212121212121212121212121212121212121214121212121212121212121212121212124545454212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2le00 aPX0 Sp0 LX0 1vc0 Tc0 1uM0 SM0 1vc0 Tc0 1vc0 SM0 1vc0 6600 1co0 3E00 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 3I00 17c0 1cM0 1cM0 3Fc0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 1tA0 1cM0 1dc0 1400 gL0 IM0 s10 U00 dX0 Rc0 pd0 Rc0 gL0 Oo0 pd0 Rc0 gL0 Oo0 pd0 14o0 1cM0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 3Co0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 pvy0 1cM0 1cM0 1fA0 1cM0 1cM0 1cN0 1cL0 1cN0 1cM0 1cM0 1cM0 1cM0 1cN0 1cL0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|27e5",
+                       "Europe/Luxembourg|LMT CET CEST WET WEST WEST WET|-o.A -10 -20 0 -10 -20 -10|0121212134343434343434343434343434343434343434343434565651212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2DG0o.A t6mo.A TB0 1nX0 Up0 1o20 11A0 rW0 CM0 1qP0 R90 1EO0 UK0 1u20 10m0 1ip0 1in0 17e0 19W0 1fB0 1db0 1cp0 1in0 17d0 1fz0 1a10 1in0 1a10 1in0 17f0 1fA0 1a00 1io0 17c0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 vA0 60L0 WM0 1fA0 1cM0 17c0 1io0 16M0 1C00 Uo0 1eeo0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|54e4",
+                       "Europe/Madrid|LMT WET WEST WEMT CET CEST|e.I 0 -10 -20 -10 -20|0121212121212121212321454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-2M0M0 G5z0 19B0 1cL0 1dd0 b1z0 18p0 3HX0 17d0 1fz0 1a10 1io0 1a00 1in0 17d0 iIn0 Hd0 1cL0 bb0 1200 2s20 14n0 5aL0 Mp0 1vz0 17d0 1in0 17d0 1in0 17d0 1in0 17d0 6hX0 11B0 XHX0 1a10 1fz0 1a10 19X0 1cN0 1fz0 1a10 1fC0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|62e5",
+                       "Europe/Malta|LMT CET CEST|-W.4 -10 -20|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-35rcW.4 SXzW.4 Lz0 1cN0 1db0 1410 1on0 Wp0 1qL0 17d0 1cL0 M3B0 5M20 WM0 1fA0 1co0 17c0 1iM0 16m0 1de0 1lc0 14m0 1lc0 WO0 1qM0 GTW0 On0 1C10 LA0 1C00 LA0 1EM0 LA0 1C00 LA0 1zc0 Oo0 1C00 Oo0 1co0 1cM0 1lA0 Xc0 1qq0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1iN0 19z0 1fB0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|42e4",
+                       "Europe/Minsk|LMT MMT EET MSK CEST CET MSD EEST +03|-1O.g -1O -20 -30 -20 -10 -40 -30 -30|012345454363636363636363636372727272727272727272727272727272727272728|-3D8NO.g 1LUM0.g eUnO qNX0 3gQ0 WM0 1fA0 1cM0 Al0 1tsn0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 3Fc0 1cN0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0|19e5",
+                       "Europe/Monaco|LMT PMT WET WEST WEMT CET CEST|-t.w -9.l 0 -10 -20 -10 -20|012323232323232323232323232323232323232323232323232343434343456565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3bQot.w ME0k.b cNb9.l HA0 19A0 1iM0 11c0 1oo0 Wo0 1rc0 QM0 1EM0 UM0 1u00 10o0 1io0 1wo0 Rc0 1a00 1fA0 1cM0 1cM0 1io0 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 1fA0 1a00 1io0 17c0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Df0 2RV0 11z0 11B0 1ze0 WM0 1fA0 1cM0 1fa0 1aq0 16M0 1ekn0 1cL0 1fC0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|38e3",
+                       "Europe/Moscow|LMT MMT MMT MST MDST MSD MSK +05 EET EEST MSK|-2u.h -2u.h -2v.j -3v.j -4v.j -40 -30 -50 -20 -30 -40|01232434565756865656565656565656565698656565656565656565656565656565656565656a6|-3D8Ou.h 1sQM0 2pyW.W 1bA0 11X0 GN0 1Hb0 c4v.j ik0 3DA0 dz0 15A0 c10 2q10 iM10 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cN0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|16e6",
+                       "Europe/Paris|LMT PMT WET WEST CEST CET WEMT|-9.l -9.l 0 -10 -20 -10 -20|01232323232323232323232323232323232323232323232323234545463654545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545|-3bQo8.l ME00 cNb8.l HA0 19A0 1iM0 11c0 1oo0 Wo0 1rc0 QM0 1EM0 UM0 1u00 10o0 1io0 1wo0 Rc0 1a00 1fA0 1cM0 1cM0 1io0 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 1fA0 1a00 1io0 17c0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Df0 Ik0 5M30 WM0 1fA0 1cM0 Vx0 hB0 1aq0 16M0 1ekn0 1cL0 1fC0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|11e6",
+                       "Europe/Riga|LMT RMT LST EET MSK CEST CET MSD EEST|-1A.y -1A.y -2A.y -20 -30 -20 -10 -40 -30|0121213456565647474747474747474838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383|-3D8NA.y 1xde0 11A0 1iM0 ko0 gWm0 yDXA.y 2bX0 3fE0 WM0 1fA0 1cM0 1cM0 4m0 1sLy0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cN0 1o00 11A0 1o00 11A0 1qM0 3oo0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|64e4",
+                       "Europe/Rome|LMT RMT CET CEST|-N.U -N.U -10 -20|012323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-4bsoN.U 160LN.U T000 Lz0 1cN0 1db0 1410 1on0 Wp0 1qL0 17d0 1cL0 M3B0 5M20 WM0 1fA0 1cM0 16M0 1iM0 16m0 1de0 1lc0 14m0 1lc0 WO0 1qM0 GTW0 On0 1C10 LA0 1C00 LA0 1EM0 LA0 1C00 LA0 1zc0 Oo0 1C00 Oo0 1C00 LA0 1zc0 Oo0 1C00 LA0 1C00 LA0 1zc0 Oo0 1C00 Oo0 1zc0 Oo0 1fC0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|39e5",
+                       "Europe/Samara|LMT +03 +04 +05|-3k.k -30 -40 -50|0123232323232323232121232323232323232323232323232323232323212|-22WM0 qH90 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 2y10 14m0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|12e5",
+                       "Europe/Saratov|LMT +03 +04 +05|-34.i -30 -40 -50|012323232323232321212121212121212121212121212121212121212121212|-22WM0 qH90 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1cM0 1cM0 1fA0 1cM0 3Co0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 5810",
+                       "Europe/Simferopol|LMT SMT EET MSK CEST CET MSD EEST MSK|-2g.o -2g -20 -30 -20 -10 -40 -30 -40|0123454543636363636363636363272727636363727272727272727272727272727272727283|-3D8Og.o 1LUM0.o eUog rEn0 2qs0 WM0 1fA0 1cM0 3V0 1u0L0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1Q00 4eL0 1cL0 1cN0 1cL0 1cN0 dX0 WL0 1cN0 1cL0 1fB0 1o30 11B0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11z0 1nW0|33e4",
+                       "Europe/Sofia|LMT IMT EET CET CEST EEST|-1x.g -1U.U -20 -10 -20 -30|0123434325252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252|-3D8Nx.g AiLA.k 1UFeU.U WM0 1fA0 1cM0 1cM0 1cN0 1mKH0 1dd0 1fb0 1ap0 1fb0 1a20 1fy0 1a30 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cK0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1nX0 11E0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|12e5",
+                       "Europe/Stockholm|LMT SET CET CEST|-1c.c -10.e -10 -20|0123232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3FyNc.c P80b.W DPb0.e TB0 2yDe0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|15e5",
+                       "Europe/Tallinn|LMT TMT CET CEST EET MSK MSD EEST|-1D -1D -10 -20 -20 -30 -40 -30|0123214532323565656565656565657474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474|-3D8ND 1wI00 teD 11A0 1Ta0 4rXl KSLD 2FX0 2Jg0 WM0 1fA0 1cM0 18J0 1sTX0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o10 11A0 1qM0 5QM0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|41e4",
+                       "Europe/Tirane|LMT CET CEST|-1j.k -10 -20|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2glBj.k 14pcj.k 5LC0 WM0 4M0 1fCK0 10n0 1op0 11z0 1pd0 11z0 1qN0 WL0 1qp0 Xb0 1qp0 Xb0 1qp0 11z0 1lB0 11z0 1qN0 11z0 1iN0 16n0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|42e4",
+                       "Europe/Ulyanovsk|LMT +03 +04 +05 +02|-3d.A -30 -40 -50 -20|01232323232323232321214121212121212121212121212121212121212121212|-22WM0 qH90 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0|13e5",
+                       "Europe/Uzhgorod|LMT CET CEST MSK MSD EET EEST|-1t.c -10 -20 -30 -40 -20 -30|0121212134343434343434343431565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3cWpt.c 20vCt.c 6i00 WM0 1fA0 1cM0 1ml0 1Cp0 1r3W0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1Q00 1Nf0 2pw0 1cL0 1cN0 1cL0 1cN0 1cL0 1cQ0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|11e4",
+                       "Europe/Vienna|LMT CET CEST|-15.l -10 -20|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-36Rd5.l UbX5.l 11d0 1iO0 11A0 1o00 11A0 3KM0 14o0 LA00 6i00 WM0 1fA0 1cM0 1cM0 1cM0 400 2qM0 1a00 1cM0 1cM0 1io0 17c0 1gHa0 19X0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|18e5",
+                       "Europe/Vilnius|LMT WMT KMT CET EET MSK CEST MSD EEST|-1F.g -1o -1z.A -10 -20 -30 -20 -40 -30|0123435636365757575757575757584848484848484848463648484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484|-3D8NF.g 1u5Ah.g 6ILM.o 1Ooz.A zz0 Mfd0 29W0 3is0 WM0 1fA0 1cM0 LV0 1tgL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11B0 1o00 11A0 1qM0 8io0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|54e4",
+                       "Europe/Volgograd|LMT +03 +04 +05|-2V.E -30 -40 -50|012323232323232321212121212121212121212121212121212121212121212|-21IqV.E psLV.E 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1cM0 1cM0 1fA0 1cM0 3Co0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 9Jd0|10e5",
+                       "Europe/Warsaw|LMT WMT CET CEST EET EEST|-1o -1o -10 -20 -20 -30|0123232345423232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3D8No 1qDA0 1LXo 11d0 1iO0 11A0 1o00 11A0 1on0 11A0 6zy0 HWP0 5IM0 WM0 1fA0 1cM0 1dz0 1mL0 1en0 15B0 1aq0 1nA0 11A0 1io0 17c0 1fA0 1a00 iDX0 LA0 1cM0 1cM0 1C00 Oo0 1cM0 1cM0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1C00 LA0 uso0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|17e5",
+                       "Europe/Zaporozhye|LMT +0220 EET MSK CEST CET MSD EEST|-2k.E -2k -20 -30 -20 -10 -40 -30|012345453636363636363636363637272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272|-3D8Ok.E 1LUM0.E eUok rdb0 2RE0 WM0 1fA0 8m0 1v9a0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cK0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cQ0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|77e4",
+                       "HST|HST|a0|0|",
+                       "Indian/Chagos|LMT +05 +06|-4N.E -50 -60|012|-2xosN.E 3AGLN.E|30e2",
+                       "Indian/Christmas|LMT +07|-72.Q -70|01|-32oT2.Q|21e2",
+                       "Indian/Cocos|LMT +0630|-6r.E -6u|01|-2OqSr.E|596",
+                       "Indian/Kerguelen|-00 +05|0 -50|01|-MG00|130",
+                       "Indian/Mahe|LMT +04|-3F.M -40|01|-2yO3F.M|79e3",
+                       "Indian/Maldives|LMT MMT +05|-4S -4S -50|012|-3D8QS 3eLA0|35e4",
+                       "Indian/Mauritius|LMT +04 +05|-3O -40 -50|012121|-2xorO 34unO 14L0 12kr0 11z0|15e4",
+                       "Indian/Reunion|LMT +04|-3F.Q -40|01|-2mDDF.Q|84e4",
+                       "Pacific/Kwajalein|LMT +11 +10 +09 -12 +12|-b9.k -b0 -a0 -90 c0 -c0|0123145|-2M0X9.k 1rDA9.k akp0 6Up0 12ry0 Wan0|14e3",
+                       "MET|MET MEST|-10 -20|01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aFe0 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 16M0 1gMM0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00",
+                       "MST|MST|70|0|",
+                       "MST7MDT|MST MDT MWT MPT|70 60 60 60|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261r0 1nX0 11B0 1nX0 SgN0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0",
+                       "Pacific/Chatham|LMT +1215 +1245 +1345|-cd.M -cf -cJ -dJ|0123232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323|-46jMd.M 37RbW.M 1adef IM0 1C00 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1qM0 14o0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1io0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00|600",
+                       "Pacific/Apia|LMT LMT -1130 -11 -10 +14 +13|-cx.4 bq.U bu b0 a0 -e0 -d0|012343456565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-38Fox.4 J1A0 1yW03.4 2rRbu 1ff0 1a00 CI0 AQ0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00|37e3",
+                       "Pacific/Bougainville|LMT PMMT +10 +09 +11|-am.g -9M.w -a0 -90 -b0|012324|-3D8Wm.g AvAx.I 1TCLM.w 7CN0 2MQp0|18e4",
+                       "Pacific/Chuuk|LMT LMT +10 +09|dQ.Q -a7.8 -a0 -90|0123232|-54ma7.8 2glc0 xso7.8 axB0 RVX0 axd0|49e3",
+                       "Pacific/Efate|LMT +11 +12|-bd.g -b0 -c0|0121212121212121212121|-2l9nd.g 2Szcd.g 1cL0 1oN0 10L0 1fB0 19X0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 Lz0 1Nd0 An0|66e3",
+                       "Pacific/Enderbury|LMT -12 -11 +13|bo.k c0 b0 -d0|0123|-2M0Az.E 3bIMz.E B7X0|1",
+                       "Pacific/Fakaofo|LMT -11 +13|bo.U b0 -d0|012|-2M0Az.4 4ufXz.4|483",
+                       "Pacific/Fiji|LMT +12 +13|-bT.I -c0 -d0|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-2bUzT.I 3m8NT.I LA0 1EM0 IM0 nJc0 LA0 1o00 Rc0 1wo0 Ao0 1Nc0 Ao0 1Q00 xz0 1SN0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0|88e4",
+                       "Pacific/Funafuti|LMT +12|-bU.Q -c0|01|-2M0XU.Q|45e2",
+                       "Pacific/Galapagos|LMT -05 -06|5W.o 50 60|01212|-1yVS1.A 2dTz1.A gNd0 rz0|25e3",
+                       "Pacific/Gambier|LMT -09|8X.M 90|01|-2jof0.c|125",
+                       "Pacific/Guadalcanal|LMT +11|-aD.M -b0|01|-2joyD.M|11e4",
+                       "Pacific/Guam|LMT LMT GST +09 GDT ChST|el -9D -a0 -90 -b0 -a0|0123242424242424242425|-54m9D 2glc0 1DFbD 6pB0 AhB0 3QL0 g2p0 3p91 WOX rX0 1zd0 Rb0 1wp0 Rb0 5xd0 rX0 5sN0 zb1 1C0X On0 ULb0|17e4",
+                       "Pacific/Honolulu|LMT HST HDT HWT HPT HST|av.q au 9u 9u 9u a0|01213415|-3061s.y 1uMdW.y 8x0 lef0 8wWu iAu 46p0|37e4",
+                       "Pacific/Kiritimati|LMT -1040 -10 +14|at.k aE a0 -e0|0123|-2M0Bu.E 3bIMa.E B7Xk|51e2",
+                       "Pacific/Kosrae|LMT LMT +11 +09 +10 +12|d8.4 -aP.U -b0 -90 -a0 -c0|0123243252|-54maP.U 2glc0 xsnP.U axC0 HBy0 akp0 axd0 WOK0 1bdz0|66e2",
+                       "Pacific/Majuro|LMT +11 +09 +10 +12|-bo.M -b0 -90 -a0 -c0|01213214|-2M0Xo.M xsoo.M axC0 HBy0 akp0 6RB0 12um0|28e3",
+                       "Pacific/Marquesas|LMT -0930|9i 9u|01|-2joeG|86e2",
+                       "Pacific/Pago_Pago|LMT LMT SST|-cB.c bm.M b0|012|-38FoB.c J1A0|37e2",
+                       "Pacific/Nauru|LMT +1130 +09 +12|-b7.E -bu -90 -c0|01213|-1Xdn7.E QCnB.E 7mqu 1lnbu|10e3",
+                       "Pacific/Niue|LMT -1120 -1130 -11|bj.E bk bu b0|0123|-2M0AE.k 21IM0.k 17y0a|12e2",
+                       "Pacific/Norfolk|LMT +1112 +1130 +1230 +11|-bb.Q -bc -bu -cu -b0|012324|-2M0Xb.Q 21ILX.Q W01G On0 1COp0|25e4",
+                       "Pacific/Noumea|LMT +11 +12|-b5.M -b0 -c0|01212121|-2l9n5.M 2EqM5.M xX0 1PB0 yn0 HeP0 Ao0|98e3",
+                       "Pacific/Palau|LMT LMT +09|f2.4 -8V.U -90|012|-54m8V.U 2glc0|21e3",
+                       "Pacific/Pitcairn|LMT -0830 -08|8E.k 8u 80|012|-2M0Dj.E 3UVXN.E|56",
+                       "Pacific/Pohnpei|LMT LMT +11 +09 +10|dr.8 -aw.Q -b0 -90 -a0|01232432|-54maw.Q 2glc0 xsnw.Q axC0 HBy0 akp0 axd0|34e3",
+                       "Pacific/Port_Moresby|LMT PMMT +10|-9M.E -9M.w -a0|012|-3D8VM.E AvA0.8|25e4",
+                       "Pacific/Rarotonga|LMT -1030 -0930 -10|aD.4 au 9u a0|0123232323232323232323232323|-2M0Bk.U 39zzO.U IL0 1zcu Onu 1zcu Onu 1zcu Rbu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Rbu 1zcu Onu 1zcu Onu 1zcu Onu|13e3",
+                       "Pacific/Tahiti|LMT -10|9W.g a0|01|-2joe1.I|18e4",
+                       "Pacific/Tarawa|LMT +12|-bw.4 -c0|01|-2M0Xw.4|29e3",
+                       "Pacific/Tongatapu|LMT +1220 +13 +14|-cj.k -ck -d0 -e0|01232323232|-2M10j.k 1BnXX.k 2n5dk 15A0 1wo0 xz0 1Q10 xz0 zWN0 s00|75e3",
+                       "Pacific/Wake|LMT +12|-b6.s -c0|01|-2M0X6.s|16e3",
+                       "Pacific/Wallis|LMT +12|-cf.k -c0|01|-2M10f.k|94",
+                       "PST8PDT|PST PDT PWT PPT|80 70 70 70|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261q0 1nX0 11B0 1nX0 SgN0 8x10 iy0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0",
+                       "WET|WET WEST|0 -10|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|hDB0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00"
+               ],
+               "links": [
+                       "Africa/Abidjan|Africa/Bamako",
+                       "Africa/Abidjan|Africa/Banjul",
+                       "Africa/Abidjan|Africa/Conakry",
+                       "Africa/Abidjan|Africa/Dakar",
+                       "Africa/Abidjan|Africa/Freetown",
+                       "Africa/Abidjan|Africa/Lome",
+                       "Africa/Abidjan|Africa/Nouakchott",
+                       "Africa/Abidjan|Africa/Ouagadougou",
+                       "Africa/Abidjan|Africa/Timbuktu",
+                       "Africa/Abidjan|Atlantic/St_Helena",
+                       "Africa/Cairo|Egypt",
+                       "Africa/Johannesburg|Africa/Maseru",
+                       "Africa/Johannesburg|Africa/Mbabane",
+                       "Africa/Lagos|Africa/Bangui",
+                       "Africa/Lagos|Africa/Brazzaville",
+                       "Africa/Lagos|Africa/Douala",
+                       "Africa/Lagos|Africa/Kinshasa",
+                       "Africa/Lagos|Africa/Libreville",
+                       "Africa/Lagos|Africa/Luanda",
+                       "Africa/Lagos|Africa/Malabo",
+                       "Africa/Lagos|Africa/Niamey",
+                       "Africa/Lagos|Africa/Porto-Novo",
+                       "Africa/Maputo|Africa/Blantyre",
+                       "Africa/Maputo|Africa/Bujumbura",
+                       "Africa/Maputo|Africa/Gaborone",
+                       "Africa/Maputo|Africa/Harare",
+                       "Africa/Maputo|Africa/Kigali",
+                       "Africa/Maputo|Africa/Lubumbashi",
+                       "Africa/Maputo|Africa/Lusaka",
+                       "Africa/Nairobi|Africa/Addis_Ababa",
+                       "Africa/Nairobi|Africa/Asmara",
+                       "Africa/Nairobi|Africa/Asmera",
+                       "Africa/Nairobi|Africa/Dar_es_Salaam",
+                       "Africa/Nairobi|Africa/Djibouti",
+                       "Africa/Nairobi|Africa/Kampala",
+                       "Africa/Nairobi|Africa/Mogadishu",
+                       "Africa/Nairobi|Indian/Antananarivo",
+                       "Africa/Nairobi|Indian/Comoro",
+                       "Africa/Nairobi|Indian/Mayotte",
+                       "Africa/Tripoli|Libya",
+                       "America/Adak|America/Atka",
+                       "America/Adak|US/Aleutian",
+                       "America/Anchorage|US/Alaska",
+                       "America/Argentina/Buenos_Aires|America/Buenos_Aires",
+                       "America/Argentina/Catamarca|America/Argentina/ComodRivadavia",
+                       "America/Argentina/Catamarca|America/Catamarca",
+                       "America/Argentina/Cordoba|America/Cordoba",
+                       "America/Argentina/Cordoba|America/Rosario",
+                       "America/Argentina/Jujuy|America/Jujuy",
+                       "America/Argentina/Mendoza|America/Mendoza",
+                       "America/Atikokan|America/Coral_Harbour",
+                       "America/Chicago|US/Central",
+                       "America/Curacao|America/Aruba",
+                       "America/Curacao|America/Kralendijk",
+                       "America/Curacao|America/Lower_Princes",
+                       "America/Denver|America/Shiprock",
+                       "America/Denver|Navajo",
+                       "America/Denver|US/Mountain",
+                       "America/Detroit|US/Michigan",
+                       "America/Edmonton|Canada/Mountain",
+                       "America/Fort_Wayne|America/Indiana/Indianapolis",
+                       "America/Fort_Wayne|America/Indianapolis",
+                       "America/Fort_Wayne|US/East-Indiana",
+                       "America/Halifax|Canada/Atlantic",
+                       "America/Havana|Cuba",
+                       "America/Indiana/Knox|America/Knox_IN",
+                       "America/Indiana/Knox|US/Indiana-Starke",
+                       "America/Jamaica|Jamaica",
+                       "America/Kentucky/Louisville|America/Louisville",
+                       "America/Los_Angeles|US/Pacific",
+                       "America/Los_Angeles|US/Pacific-New",
+                       "America/Manaus|Brazil/West",
+                       "America/Mazatlan|Mexico/BajaSur",
+                       "America/Mexico_City|Mexico/General",
+                       "America/New_York|US/Eastern",
+                       "America/Noronha|Brazil/DeNoronha",
+                       "America/Panama|America/Cayman",
+                       "America/Phoenix|US/Arizona",
+                       "America/Port_of_Spain|America/Anguilla",
+                       "America/Port_of_Spain|America/Antigua",
+                       "America/Port_of_Spain|America/Dominica",
+                       "America/Port_of_Spain|America/Grenada",
+                       "America/Port_of_Spain|America/Guadeloupe",
+                       "America/Port_of_Spain|America/Marigot",
+                       "America/Port_of_Spain|America/Montserrat",
+                       "America/Port_of_Spain|America/St_Barthelemy",
+                       "America/Port_of_Spain|America/St_Kitts",
+                       "America/Port_of_Spain|America/St_Lucia",
+                       "America/Port_of_Spain|America/St_Thomas",
+                       "America/Port_of_Spain|America/St_Vincent",
+                       "America/Port_of_Spain|America/Tortola",
+                       "America/Port_of_Spain|America/Virgin",
+                       "America/Regina|Canada/Saskatchewan",
+                       "America/Rio_Branco|America/Porto_Acre",
+                       "America/Rio_Branco|Brazil/Acre",
+                       "America/Santiago|Chile/Continental",
+                       "America/Sao_Paulo|Brazil/East",
+                       "America/St_Johns|Canada/Newfoundland",
+                       "America/Tijuana|America/Ensenada",
+                       "America/Tijuana|America/Santa_Isabel",
+                       "America/Tijuana|Mexico/BajaNorte",
+                       "America/Toronto|America/Montreal",
+                       "America/Toronto|Canada/Eastern",
+                       "America/Vancouver|Canada/Pacific",
+                       "America/Whitehorse|Canada/Yukon",
+                       "America/Winnipeg|Canada/Central",
+                       "Asia/Ashgabat|Asia/Ashkhabad",
+                       "Asia/Bangkok|Asia/Phnom_Penh",
+                       "Asia/Bangkok|Asia/Vientiane",
+                       "Asia/Dhaka|Asia/Dacca",
+                       "Asia/Dubai|Asia/Muscat",
+                       "Asia/Ho_Chi_Minh|Asia/Saigon",
+                       "Asia/Hong_Kong|Hongkong",
+                       "Asia/Jerusalem|Asia/Tel_Aviv",
+                       "Asia/Jerusalem|Israel",
+                       "Asia/Kathmandu|Asia/Katmandu",
+                       "Asia/Kolkata|Asia/Calcutta",
+                       "Asia/Macau|Asia/Macao",
+                       "Asia/Makassar|Asia/Ujung_Pandang",
+                       "Asia/Nicosia|Europe/Nicosia",
+                       "Asia/Qatar|Asia/Bahrain",
+                       "Asia/Rangoon|Asia/Yangon",
+                       "Asia/Riyadh|Asia/Aden",
+                       "Asia/Riyadh|Asia/Kuwait",
+                       "Asia/Seoul|ROK",
+                       "Asia/Shanghai|Asia/Chongqing",
+                       "Asia/Shanghai|Asia/Chungking",
+                       "Asia/Shanghai|Asia/Harbin",
+                       "Asia/Shanghai|PRC",
+                       "Asia/Singapore|Singapore",
+                       "Asia/Taipei|ROC",
+                       "Asia/Tehran|Iran",
+                       "Asia/Thimphu|Asia/Thimbu",
+                       "Asia/Tokyo|Japan",
+                       "Asia/Ulaanbaatar|Asia/Ulan_Bator",
+                       "Asia/Urumqi|Asia/Kashgar",
+                       "Atlantic/Faroe|Atlantic/Faeroe",
+                       "Atlantic/Reykjavik|Iceland",
+                       "Australia/Adelaide|Australia/South",
+                       "Australia/Brisbane|Australia/Queensland",
+                       "Australia/Broken_Hill|Australia/Yancowinna",
+                       "Australia/Darwin|Australia/North",
+                       "Australia/Hobart|Australia/Tasmania",
+                       "Australia/Lord_Howe|Australia/LHI",
+                       "Australia/Melbourne|Australia/Victoria",
+                       "Australia/Perth|Australia/West",
+                       "Australia/Sydney|Australia/ACT",
+                       "Australia/Sydney|Australia/Canberra",
+                       "Australia/Sydney|Australia/NSW",
+                       "Etc/GMT-0|Etc/GMT",
+                       "Etc/GMT-0|Etc/GMT+0",
+                       "Etc/GMT-0|Etc/GMT0",
+                       "Etc/GMT-0|Etc/Greenwich",
+                       "Etc/GMT-0|GMT",
+                       "Etc/GMT-0|GMT+0",
+                       "Etc/GMT-0|GMT-0",
+                       "Etc/GMT-0|GMT0",
+                       "Etc/GMT-0|Greenwich",
+                       "Etc/UTC|Etc/UCT",
+                       "Etc/UTC|Etc/Universal",
+                       "Etc/UTC|Etc/Zulu",
+                       "Etc/UTC|UCT",
+                       "Etc/UTC|UTC",
+                       "Etc/UTC|Universal",
+                       "Etc/UTC|Zulu",
+                       "Europe/Belgrade|Europe/Ljubljana",
+                       "Europe/Belgrade|Europe/Podgorica",
+                       "Europe/Belgrade|Europe/Sarajevo",
+                       "Europe/Belgrade|Europe/Skopje",
+                       "Europe/Belgrade|Europe/Zagreb",
+                       "Europe/Chisinau|Europe/Tiraspol",
+                       "Europe/Dublin|Eire",
+                       "Europe/Helsinki|Europe/Mariehamn",
+                       "Europe/Istanbul|Asia/Istanbul",
+                       "Europe/Istanbul|Turkey",
+                       "Europe/Lisbon|Portugal",
+                       "Europe/London|Europe/Belfast",
+                       "Europe/London|Europe/Guernsey",
+                       "Europe/London|Europe/Isle_of_Man",
+                       "Europe/London|Europe/Jersey",
+                       "Europe/London|GB",
+                       "Europe/London|GB-Eire",
+                       "Europe/Moscow|W-SU",
+                       "Europe/Oslo|Arctic/Longyearbyen",
+                       "Europe/Oslo|Atlantic/Jan_Mayen",
+                       "Europe/Prague|Europe/Bratislava",
+                       "Europe/Rome|Europe/San_Marino",
+                       "Europe/Rome|Europe/Vatican",
+                       "Europe/Warsaw|Poland",
+                       "Europe/Zurich|Europe/Busingen",
+                       "Europe/Zurich|Europe/Vaduz",
+                       "Pacific/Auckland|Antarctica/McMurdo",
+                       "Pacific/Auckland|Antarctica/South_Pole",
+                       "Pacific/Auckland|NZ",
+                       "Pacific/Chatham|NZ-CHAT",
+                       "Pacific/Chuuk|Pacific/Truk",
+                       "Pacific/Chuuk|Pacific/Yap",
+                       "Pacific/Easter|Chile/EasterIsland",
+                       "Pacific/Guam|Pacific/Saipan",
+                       "Pacific/Honolulu|Pacific/Johnston",
+                       "Pacific/Honolulu|US/Hawaii",
+                       "Pacific/Kwajalein|Kwajalein",
+                       "Pacific/Pago_Pago|Pacific/Midway",
+                       "Pacific/Pago_Pago|Pacific/Samoa",
+                       "Pacific/Pago_Pago|US/Samoa",
+                       "Pacific/Pohnpei|Pacific/Ponape"
+               ]
+       });
+
+
+       return moment;
+}));
diff --git a/htdocs/cgi-bin/wsrc/moment.js b/htdocs/cgi-bin/wsrc/moment.js
new file mode 100644 (file)
index 0000000..1b12971
--- /dev/null
@@ -0,0 +1,4602 @@
+//! moment.js
+
+;(function (global, factory) {
+    typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+    typeof define === 'function' && define.amd ? define(factory) :
+    global.moment = factory()
+}(this, (function () { 'use strict';
+
+    var hookCallback;
+
+    function hooks () {
+        return hookCallback.apply(null, arguments);
+    }
+
+    // This is done to register the method called with moment()
+    // without creating circular dependencies.
+    function setHookCallback (callback) {
+        hookCallback = callback;
+    }
+
+    function isArray(input) {
+        return input instanceof Array || Object.prototype.toString.call(input) === '[object Array]';
+    }
+
+    function isObject(input) {
+        // IE8 will treat undefined and null as object if it wasn't for
+        // input != null
+        return input != null && Object.prototype.toString.call(input) === '[object Object]';
+    }
+
+    function isObjectEmpty(obj) {
+        if (Object.getOwnPropertyNames) {
+            return (Object.getOwnPropertyNames(obj).length === 0);
+        } else {
+            var k;
+            for (k in obj) {
+                if (obj.hasOwnProperty(k)) {
+                    return false;
+                }
+            }
+            return true;
+        }
+    }
+
+    function isUndefined(input) {
+        return input === void 0;
+    }
+
+    function isNumber(input) {
+        return typeof input === 'number' || Object.prototype.toString.call(input) === '[object Number]';
+    }
+
+    function isDate(input) {
+        return input instanceof Date || Object.prototype.toString.call(input) === '[object Date]';
+    }
+
+    function map(arr, fn) {
+        var res = [], i;
+        for (i = 0; i < arr.length; ++i) {
+            res.push(fn(arr[i], i));
+        }
+        return res;
+    }
+
+    function hasOwnProp(a, b) {
+        return Object.prototype.hasOwnProperty.call(a, b);
+    }
+
+    function extend(a, b) {
+        for (var i in b) {
+            if (hasOwnProp(b, i)) {
+                a[i] = b[i];
+            }
+        }
+
+        if (hasOwnProp(b, 'toString')) {
+            a.toString = b.toString;
+        }
+
+        if (hasOwnProp(b, 'valueOf')) {
+            a.valueOf = b.valueOf;
+        }
+
+        return a;
+    }
+
+    function createUTC (input, format, locale, strict) {
+        return createLocalOrUTC(input, format, locale, strict, true).utc();
+    }
+
+    function defaultParsingFlags() {
+        // We need to deep clone this object.
+        return {
+            empty           : false,
+            unusedTokens    : [],
+            unusedInput     : [],
+            overflow        : -2,
+            charsLeftOver   : 0,
+            nullInput       : false,
+            invalidMonth    : null,
+            invalidFormat   : false,
+            userInvalidated : false,
+            iso             : false,
+            parsedDateParts : [],
+            meridiem        : null,
+            rfc2822         : false,
+            weekdayMismatch : false
+        };
+    }
+
+    function getParsingFlags(m) {
+        if (m._pf == null) {
+            m._pf = defaultParsingFlags();
+        }
+        return m._pf;
+    }
+
+    var some;
+    if (Array.prototype.some) {
+        some = Array.prototype.some;
+    } else {
+        some = function (fun) {
+            var t = Object(this);
+            var len = t.length >>> 0;
+
+            for (var i = 0; i < len; i++) {
+                if (i in t && fun.call(this, t[i], i, t)) {
+                    return true;
+                }
+            }
+
+            return false;
+        };
+    }
+
+    function isValid(m) {
+        if (m._isValid == null) {
+            var flags = getParsingFlags(m);
+            var parsedParts = some.call(flags.parsedDateParts, function (i) {
+                return i != null;
+            });
+            var isNowValid = !isNaN(m._d.getTime()) &&
+                flags.overflow < 0 &&
+                !flags.empty &&
+                !flags.invalidMonth &&
+                !flags.invalidWeekday &&
+                !flags.weekdayMismatch &&
+                !flags.nullInput &&
+                !flags.invalidFormat &&
+                !flags.userInvalidated &&
+                (!flags.meridiem || (flags.meridiem && parsedParts));
+
+            if (m._strict) {
+                isNowValid = isNowValid &&
+                    flags.charsLeftOver === 0 &&
+                    flags.unusedTokens.length === 0 &&
+                    flags.bigHour === undefined;
+            }
+
+            if (Object.isFrozen == null || !Object.isFrozen(m)) {
+                m._isValid = isNowValid;
+            }
+            else {
+                return isNowValid;
+            }
+        }
+        return m._isValid;
+    }
+
+    function createInvalid (flags) {
+        var m = createUTC(NaN);
+        if (flags != null) {
+            extend(getParsingFlags(m), flags);
+        }
+        else {
+            getParsingFlags(m).userInvalidated = true;
+        }
+
+        return m;
+    }
+
+    // Plugins that add properties should also add the key here (null value),
+    // so we can properly clone ourselves.
+    var momentProperties = hooks.momentProperties = [];
+
+    function copyConfig(to, from) {
+        var i, prop, val;
+
+        if (!isUndefined(from._isAMomentObject)) {
+            to._isAMomentObject = from._isAMomentObject;
+        }
+        if (!isUndefined(from._i)) {
+            to._i = from._i;
+        }
+        if (!isUndefined(from._f)) {
+            to._f = from._f;
+        }
+        if (!isUndefined(from._l)) {
+            to._l = from._l;
+        }
+        if (!isUndefined(from._strict)) {
+            to._strict = from._strict;
+        }
+        if (!isUndefined(from._tzm)) {
+            to._tzm = from._tzm;
+        }
+        if (!isUndefined(from._isUTC)) {
+            to._isUTC = from._isUTC;
+        }
+        if (!isUndefined(from._offset)) {
+            to._offset = from._offset;
+        }
+        if (!isUndefined(from._pf)) {
+            to._pf = getParsingFlags(from);
+        }
+        if (!isUndefined(from._locale)) {
+            to._locale = from._locale;
+        }
+
+        if (momentProperties.length > 0) {
+            for (i = 0; i < momentProperties.length; i++) {
+                prop = momentProperties[i];
+                val = from[prop];
+                if (!isUndefined(val)) {
+                    to[prop] = val;
+                }
+            }
+        }
+
+        return to;
+    }
+
+    var updateInProgress = false;
+
+    // Moment prototype object
+    function Moment(config) {
+        copyConfig(this, config);
+        this._d = new Date(config._d != null ? config._d.getTime() : NaN);
+        if (!this.isValid()) {
+            this._d = new Date(NaN);
+        }
+        // Prevent infinite loop in case updateOffset creates new moment
+        // objects.
+        if (updateInProgress === false) {
+            updateInProgress = true;
+            hooks.updateOffset(this);
+            updateInProgress = false;
+        }
+    }
+
+    function isMoment (obj) {
+        return obj instanceof Moment || (obj != null && obj._isAMomentObject != null);
+    }
+
+    function absFloor (number) {
+        if (number < 0) {
+            // -0 -> 0
+            return Math.ceil(number) || 0;
+        } else {
+            return Math.floor(number);
+        }
+    }
+
+    function toInt(argumentForCoercion) {
+        var coercedNumber = +argumentForCoercion,
+            value = 0;
+
+        if (coercedNumber !== 0 && isFinite(coercedNumber)) {
+            value = absFloor(coercedNumber);
+        }
+
+        return value;
+    }
+
+    // compare two arrays, return the number of differences
+    function compareArrays(array1, array2, dontConvert) {
+        var len = Math.min(array1.length, array2.length),
+            lengthDiff = Math.abs(array1.length - array2.length),
+            diffs = 0,
+            i;
+        for (i = 0; i < len; i++) {
+            if ((dontConvert && array1[i] !== array2[i]) ||
+                (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))) {
+                diffs++;
+            }
+        }
+        return diffs + lengthDiff;
+    }
+
+    function warn(msg) {
+        if (hooks.suppressDeprecationWarnings === false &&
+                (typeof console !==  'undefined') && console.warn) {
+            console.warn('Deprecation warning: ' + msg);
+        }
+    }
+
+    function deprecate(msg, fn) {
+        var firstTime = true;
+
+        return extend(function () {
+            if (hooks.deprecationHandler != null) {
+                hooks.deprecationHandler(null, msg);
+            }
+            if (firstTime) {
+                var args = [];
+                var arg;
+                for (var i = 0; i < arguments.length; i++) {
+                    arg = '';
+                    if (typeof arguments[i] === 'object') {
+                        arg += '\n[' + i + '] ';
+                        for (var key in arguments[0]) {
+                            arg += key + ': ' + arguments[0][key] + ', ';
+                        }
+                        arg = arg.slice(0, -2); // Remove trailing comma and space
+                    } else {
+                        arg = arguments[i];
+                    }
+                    args.push(arg);
+                }
+                warn(msg + '\nArguments: ' + Array.prototype.slice.call(args).join('') + '\n' + (new Error()).stack);
+                firstTime = false;
+            }
+            return fn.apply(this, arguments);
+        }, fn);
+    }
+
+    var deprecations = {};
+
+    function deprecateSimple(name, msg) {
+        if (hooks.deprecationHandler != null) {
+            hooks.deprecationHandler(name, msg);
+        }
+        if (!deprecations[name]) {
+            warn(msg);
+            deprecations[name] = true;
+        }
+    }
+
+    hooks.suppressDeprecationWarnings = false;
+    hooks.deprecationHandler = null;
+
+    function isFunction(input) {
+        return input instanceof Function || Object.prototype.toString.call(input) === '[object Function]';
+    }
+
+    function set (config) {
+        var prop, i;
+        for (i in config) {
+            prop = config[i];
+            if (isFunction(prop)) {
+                this[i] = prop;
+            } else {
+                this['_' + i] = prop;
+            }
+        }
+        this._config = config;
+        // Lenient ordinal parsing accepts just a number in addition to
+        // number + (possibly) stuff coming from _dayOfMonthOrdinalParse.
+        // TODO: Remove "ordinalParse" fallback in next major release.
+        this._dayOfMonthOrdinalParseLenient = new RegExp(
+            (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) +
+                '|' + (/\d{1,2}/).source);
+    }
+
+    function mergeConfigs(parentConfig, childConfig) {
+        var res = extend({}, parentConfig), prop;
+        for (prop in childConfig) {
+            if (hasOwnProp(childConfig, prop)) {
+                if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {
+                    res[prop] = {};
+                    extend(res[prop], parentConfig[prop]);
+                    extend(res[prop], childConfig[prop]);
+                } else if (childConfig[prop] != null) {
+                    res[prop] = childConfig[prop];
+                } else {
+                    delete res[prop];
+                }
+            }
+        }
+        for (prop in parentConfig) {
+            if (hasOwnProp(parentConfig, prop) &&
+                    !hasOwnProp(childConfig, prop) &&
+                    isObject(parentConfig[prop])) {
+                // make sure changes to properties don't modify parent config
+                res[prop] = extend({}, res[prop]);
+            }
+        }
+        return res;
+    }
+
+    function Locale(config) {
+        if (config != null) {
+            this.set(config);
+        }
+    }
+
+    var keys;
+
+    if (Object.keys) {
+        keys = Object.keys;
+    } else {
+        keys = function (obj) {
+            var i, res = [];
+            for (i in obj) {
+                if (hasOwnProp(obj, i)) {
+                    res.push(i);
+                }
+            }
+            return res;
+        };
+    }
+
+    var defaultCalendar = {
+        sameDay : '[Today at] LT',
+        nextDay : '[Tomorrow at] LT',
+        nextWeek : 'dddd [at] LT',
+        lastDay : '[Yesterday at] LT',
+        lastWeek : '[Last] dddd [at] LT',
+        sameElse : 'L'
+    };
+
+    function calendar (key, mom, now) {
+        var output = this._calendar[key] || this._calendar['sameElse'];
+        return isFunction(output) ? output.call(mom, now) : output;
+    }
+
+    var defaultLongDateFormat = {
+        LTS  : 'h:mm:ss A',
+        LT   : 'h:mm A',
+        L    : 'MM/DD/YYYY',
+        LL   : 'MMMM D, YYYY',
+        LLL  : 'MMMM D, YYYY h:mm A',
+        LLLL : 'dddd, MMMM D, YYYY h:mm A'
+    };
+
+    function longDateFormat (key) {
+        var format = this._longDateFormat[key],
+            formatUpper = this._longDateFormat[key.toUpperCase()];
+
+        if (format || !formatUpper) {
+            return format;
+        }
+
+        this._longDateFormat[key] = formatUpper.replace(/MMMM|MM|DD|dddd/g, function (val) {
+            return val.slice(1);
+        });
+
+        return this._longDateFormat[key];
+    }
+
+    var defaultInvalidDate = 'Invalid date';
+
+    function invalidDate () {
+        return this._invalidDate;
+    }
+
+    var defaultOrdinal = '%d';
+    var defaultDayOfMonthOrdinalParse = /\d{1,2}/;
+
+    function ordinal (number) {
+        return this._ordinal.replace('%d', number);
+    }
+
+    var defaultRelativeTime = {
+        future : 'in %s',
+        past   : '%s ago',
+        s  : 'a few seconds',
+        ss : '%d seconds',
+        m  : 'a minute',
+        mm : '%d minutes',
+        h  : 'an hour',
+        hh : '%d hours',
+        d  : 'a day',
+        dd : '%d days',
+        M  : 'a month',
+        MM : '%d months',
+        y  : 'a year',
+        yy : '%d years'
+    };
+
+    function relativeTime (number, withoutSuffix, string, isFuture) {
+        var output = this._relativeTime[string];
+        return (isFunction(output)) ?
+            output(number, withoutSuffix, string, isFuture) :
+            output.replace(/%d/i, number);
+    }
+
+    function pastFuture (diff, output) {
+        var format = this._relativeTime[diff > 0 ? 'future' : 'past'];
+        return isFunction(format) ? format(output) : format.replace(/%s/i, output);
+    }
+
+    var aliases = {};
+
+    function addUnitAlias (unit, shorthand) {
+        var lowerCase = unit.toLowerCase();
+        aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit;
+    }
+
+    function normalizeUnits(units) {
+        return typeof units === 'string' ? aliases[units] || aliases[units.toLowerCase()] : undefined;
+    }
+
+    function normalizeObjectUnits(inputObject) {
+        var normalizedInput = {},
+            normalizedProp,
+            prop;
+
+        for (prop in inputObject) {
+            if (hasOwnProp(inputObject, prop)) {
+                normalizedProp = normalizeUnits(prop);
+                if (normalizedProp) {
+                    normalizedInput[normalizedProp] = inputObject[prop];
+                }
+            }
+        }
+
+        return normalizedInput;
+    }
+
+    var priorities = {};
+
+    function addUnitPriority(unit, priority) {
+        priorities[unit] = priority;
+    }
+
+    function getPrioritizedUnits(unitsObj) {
+        var units = [];
+        for (var u in unitsObj) {
+            units.push({unit: u, priority: priorities[u]});
+        }
+        units.sort(function (a, b) {
+            return a.priority - b.priority;
+        });
+        return units;
+    }
+
+    function zeroFill(number, targetLength, forceSign) {
+        var absNumber = '' + Math.abs(number),
+            zerosToFill = targetLength - absNumber.length,
+            sign = number >= 0;
+        return (sign ? (forceSign ? '+' : '') : '-') +
+            Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) + absNumber;
+    }
+
+    var formattingTokens = /(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g;
+
+    var localFormattingTokens = /(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g;
+
+    var formatFunctions = {};
+
+    var formatTokenFunctions = {};
+
+    // token:    'M'
+    // padded:   ['MM', 2]
+    // ordinal:  'Mo'
+    // callback: function () { this.month() + 1 }
+    function addFormatToken (token, padded, ordinal, callback) {
+        var func = callback;
+        if (typeof callback === 'string') {
+            func = function () {
+                return this[callback]();
+            };
+        }
+        if (token) {
+            formatTokenFunctions[token] = func;
+        }
+        if (padded) {
+            formatTokenFunctions[padded[0]] = function () {
+                return zeroFill(func.apply(this, arguments), padded[1], padded[2]);
+            };
+        }
+        if (ordinal) {
+            formatTokenFunctions[ordinal] = function () {
+                return this.localeData().ordinal(func.apply(this, arguments), token);
+            };
+        }
+    }
+
+    function removeFormattingTokens(input) {
+        if (input.match(/\[[\s\S]/)) {
+            return input.replace(/^\[|\]$/g, '');
+        }
+        return input.replace(/\\/g, '');
+    }
+
+    function makeFormatFunction(format) {
+        var array = format.match(formattingTokens), i, length;
+
+        for (i = 0, length = array.length; i < length; i++) {
+            if (formatTokenFunctions[array[i]]) {
+                array[i] = formatTokenFunctions[array[i]];
+            } else {
+                array[i] = removeFormattingTokens(array[i]);
+            }
+        }
+
+        return function (mom) {
+            var output = '', i;
+            for (i = 0; i < length; i++) {
+                output += isFunction(array[i]) ? array[i].call(mom, format) : array[i];
+            }
+            return output;
+        };
+    }
+
+    // format date using native date object
+    function formatMoment(m, format) {
+        if (!m.isValid()) {
+            return m.localeData().invalidDate();
+        }
+
+        format = expandFormat(format, m.localeData());
+        formatFunctions[format] = formatFunctions[format] || makeFormatFunction(format);
+
+        return formatFunctions[format](m);
+    }
+
+    function expandFormat(format, locale) {
+        var i = 5;
+
+        function replaceLongDateFormatTokens(input) {
+            return locale.longDateFormat(input) || input;
+        }
+
+        localFormattingTokens.lastIndex = 0;
+        while (i >= 0 && localFormattingTokens.test(format)) {
+            format = format.replace(localFormattingTokens, replaceLongDateFormatTokens);
+            localFormattingTokens.lastIndex = 0;
+            i -= 1;
+        }
+
+        return format;
+    }
+
+    var match1         = /\d/;            //       0 - 9
+    var match2         = /\d\d/;          //      00 - 99
+    var match3         = /\d{3}/;         //     000 - 999
+    var match4         = /\d{4}/;         //    0000 - 9999
+    var match6         = /[+-]?\d{6}/;    // -999999 - 999999
+    var match1to2      = /\d\d?/;         //       0 - 99
+    var match3to4      = /\d\d\d\d?/;     //     999 - 9999
+    var match5to6      = /\d\d\d\d\d\d?/; //   99999 - 999999
+    var match1to3      = /\d{1,3}/;       //       0 - 999
+    var match1to4      = /\d{1,4}/;       //       0 - 9999
+    var match1to6      = /[+-]?\d{1,6}/;  // -999999 - 999999
+
+    var matchUnsigned  = /\d+/;           //       0 - inf
+    var matchSigned    = /[+-]?\d+/;      //    -inf - inf
+
+    var matchOffset    = /Z|[+-]\d\d:?\d\d/gi; // +00:00 -00:00 +0000 -0000 or Z
+    var matchShortOffset = /Z|[+-]\d\d(?::?\d\d)?/gi; // +00 -00 +00:00 -00:00 +0000 -0000 or Z
+
+    var matchTimestamp = /[+-]?\d+(\.\d{1,3})?/; // 123456789 123456789.123
+
+    // any word (or two) characters or numbers including two/three word month in arabic.
+    // includes scottish gaelic two word and hyphenated months
+    var matchWord = /[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i;
+
+    var regexes = {};
+
+    function addRegexToken (token, regex, strictRegex) {
+        regexes[token] = isFunction(regex) ? regex : function (isStrict, localeData) {
+            return (isStrict && strictRegex) ? strictRegex : regex;
+        };
+    }
+
+    function getParseRegexForToken (token, config) {
+        if (!hasOwnProp(regexes, token)) {
+            return new RegExp(unescapeFormat(token));
+        }
+
+        return regexes[token](config._strict, config._locale);
+    }
+
+    // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript
+    function unescapeFormat(s) {
+        return regexEscape(s.replace('\\', '').replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g, function (matched, p1, p2, p3, p4) {
+            return p1 || p2 || p3 || p4;
+        }));
+    }
+
+    function regexEscape(s) {
+        return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
+    }
+
+    var tokens = {};
+
+    function addParseToken (token, callback) {
+        var i, func = callback;
+        if (typeof token === 'string') {
+            token = [token];
+        }
+        if (isNumber(callback)) {
+            func = function (input, array) {
+                array[callback] = toInt(input);
+            };
+        }
+        for (i = 0; i < token.length; i++) {
+            tokens[token[i]] = func;
+        }
+    }
+
+    function addWeekParseToken (token, callback) {
+        addParseToken(token, function (input, array, config, token) {
+            config._w = config._w || {};
+            callback(input, config._w, config, token);
+        });
+    }
+
+    function addTimeToArrayFromToken(token, input, config) {
+        if (input != null && hasOwnProp(tokens, token)) {
+            tokens[token](input, config._a, config, token);
+        }
+    }
+
+    var YEAR = 0;
+    var MONTH = 1;
+    var DATE = 2;
+    var HOUR = 3;
+    var MINUTE = 4;
+    var SECOND = 5;
+    var MILLISECOND = 6;
+    var WEEK = 7;
+    var WEEKDAY = 8;
+
+    // FORMATTING
+
+    addFormatToken('Y', 0, 0, function () {
+        var y = this.year();
+        return y <= 9999 ? '' + y : '+' + y;
+    });
+
+    addFormatToken(0, ['YY', 2], 0, function () {
+        return this.year() % 100;
+    });
+
+    addFormatToken(0, ['YYYY',   4],       0, 'year');
+    addFormatToken(0, ['YYYYY',  5],       0, 'year');
+    addFormatToken(0, ['YYYYYY', 6, true], 0, 'year');
+
+    // ALIASES
+
+    addUnitAlias('year', 'y');
+
+    // PRIORITIES
+
+    addUnitPriority('year', 1);
+
+    // PARSING
+
+    addRegexToken('Y',      matchSigned);
+    addRegexToken('YY',     match1to2, match2);
+    addRegexToken('YYYY',   match1to4, match4);
+    addRegexToken('YYYYY',  match1to6, match6);
+    addRegexToken('YYYYYY', match1to6, match6);
+
+    addParseToken(['YYYYY', 'YYYYYY'], YEAR);
+    addParseToken('YYYY', function (input, array) {
+        array[YEAR] = input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);
+    });
+    addParseToken('YY', function (input, array) {
+        array[YEAR] = hooks.parseTwoDigitYear(input);
+    });
+    addParseToken('Y', function (input, array) {
+        array[YEAR] = parseInt(input, 10);
+    });
+
+    // HELPERS
+
+    function daysInYear(year) {
+        return isLeapYear(year) ? 366 : 365;
+    }
+
+    function isLeapYear(year) {
+        return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;
+    }
+
+    // HOOKS
+
+    hooks.parseTwoDigitYear = function (input) {
+        return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);
+    };
+
+    // MOMENTS
+
+    var getSetYear = makeGetSet('FullYear', true);
+
+    function getIsLeapYear () {
+        return isLeapYear(this.year());
+    }
+
+    function makeGetSet (unit, keepTime) {
+        return function (value) {
+            if (value != null) {
+                set$1(this, unit, value);
+                hooks.updateOffset(this, keepTime);
+                return this;
+            } else {
+                return get(this, unit);
+            }
+        };
+    }
+
+    function get (mom, unit) {
+        return mom.isValid() ?
+            mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]() : NaN;
+    }
+
+    function set$1 (mom, unit, value) {
+        if (mom.isValid() && !isNaN(value)) {
+            if (unit === 'FullYear' && isLeapYear(mom.year()) && mom.month() === 1 && mom.date() === 29) {
+                mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value, mom.month(), daysInMonth(value, mom.month()));
+            }
+            else {
+                mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value);
+            }
+        }
+    }
+
+    // MOMENTS
+
+    function stringGet (units) {
+        units = normalizeUnits(units);
+        if (isFunction(this[units])) {
+            return this[units]();
+        }
+        return this;
+    }
+
+
+    function stringSet (units, value) {
+        if (typeof units === 'object') {
+            units = normalizeObjectUnits(units);
+            var prioritized = getPrioritizedUnits(units);
+            for (var i = 0; i < prioritized.length; i++) {
+                this[prioritized[i].unit](units[prioritized[i].unit]);
+            }
+        } else {
+            units = normalizeUnits(units);
+            if (isFunction(this[units])) {
+                return this[units](value);
+            }
+        }
+        return this;
+    }
+
+    function mod(n, x) {
+        return ((n % x) + x) % x;
+    }
+
+    var indexOf;
+
+    if (Array.prototype.indexOf) {
+        indexOf = Array.prototype.indexOf;
+    } else {
+        indexOf = function (o) {
+            // I know
+            var i;
+            for (i = 0; i < this.length; ++i) {
+                if (this[i] === o) {
+                    return i;
+                }
+            }
+            return -1;
+        };
+    }
+
+    function daysInMonth(year, month) {
+        if (isNaN(year) || isNaN(month)) {
+            return NaN;
+        }
+        var modMonth = mod(month, 12);
+        year += (month - modMonth) / 12;
+        return modMonth === 1 ? (isLeapYear(year) ? 29 : 28) : (31 - modMonth % 7 % 2);
+    }
+
+    // FORMATTING
+
+    addFormatToken('M', ['MM', 2], 'Mo', function () {
+        return this.month() + 1;
+    });
+
+    addFormatToken('MMM', 0, 0, function (format) {
+        return this.localeData().monthsShort(this, format);
+    });
+
+    addFormatToken('MMMM', 0, 0, function (format) {
+        return this.localeData().months(this, format);
+    });
+
+    // ALIASES
+
+    addUnitAlias('month', 'M');
+
+    // PRIORITY
+
+    addUnitPriority('month', 8);
+
+    // PARSING
+
+    addRegexToken('M',    match1to2);
+    addRegexToken('MM',   match1to2, match2);
+    addRegexToken('MMM',  function (isStrict, locale) {
+        return locale.monthsShortRegex(isStrict);
+    });
+    addRegexToken('MMMM', function (isStrict, locale) {
+        return locale.monthsRegex(isStrict);
+    });
+
+    addParseToken(['M', 'MM'], function (input, array) {
+        array[MONTH] = toInt(input) - 1;
+    });
+
+    addParseToken(['MMM', 'MMMM'], function (input, array, config, token) {
+        var month = config._locale.monthsParse(input, token, config._strict);
+        // if we didn't find a month name, mark the date as invalid.
+        if (month != null) {
+            array[MONTH] = month;
+        } else {
+            getParsingFlags(config).invalidMonth = input;
+        }
+    });
+
+    // LOCALES
+
+    var MONTHS_IN_FORMAT = /D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/;
+    var defaultLocaleMonths = 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_');
+    function localeMonths (m, format) {
+        if (!m) {
+            return isArray(this._months) ? this._months :
+                this._months['standalone'];
+        }
+        return isArray(this._months) ? this._months[m.month()] :
+            this._months[(this._months.isFormat || MONTHS_IN_FORMAT).test(format) ? 'format' : 'standalone'][m.month()];
+    }
+
+    var defaultLocaleMonthsShort = 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_');
+    function localeMonthsShort (m, format) {
+        if (!m) {
+            return isArray(this._monthsShort) ? this._monthsShort :
+                this._monthsShort['standalone'];
+        }
+        return isArray(this._monthsShort) ? this._monthsShort[m.month()] :
+            this._monthsShort[MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'][m.month()];
+    }
+
+    function handleStrictParse(monthName, format, strict) {
+        var i, ii, mom, llc = monthName.toLocaleLowerCase();
+        if (!this._monthsParse) {
+            // this is not used
+            this._monthsParse = [];
+            this._longMonthsParse = [];
+            this._shortMonthsParse = [];
+            for (i = 0; i < 12; ++i) {
+                mom = createUTC([2000, i]);
+                this._shortMonthsParse[i] = this.monthsShort(mom, '').toLocaleLowerCase();
+                this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();
+            }
+        }
+
+        if (strict) {
+            if (format === 'MMM') {
+                ii = indexOf.call(this._shortMonthsParse, llc);
+                return ii !== -1 ? ii : null;
+            } else {
+                ii = indexOf.call(this._longMonthsParse, llc);
+                return ii !== -1 ? ii : null;
+            }
+        } else {
+            if (format === 'MMM') {
+                ii = indexOf.call(this._shortMonthsParse, llc);
+                if (ii !== -1) {
+                    return ii;
+                }
+                ii = indexOf.call(this._longMonthsParse, llc);
+                return ii !== -1 ? ii : null;
+            } else {
+                ii = indexOf.call(this._longMonthsParse, llc);
+                if (ii !== -1) {
+                    return ii;
+                }
+                ii = indexOf.call(this._shortMonthsParse, llc);
+                return ii !== -1 ? ii : null;
+            }
+        }
+    }
+
+    function localeMonthsParse (monthName, format, strict) {
+        var i, mom, regex;
+
+        if (this._monthsParseExact) {
+            return handleStrictParse.call(this, monthName, format, strict);
+        }
+
+        if (!this._monthsParse) {
+            this._monthsParse = [];
+            this._longMonthsParse = [];
+            this._shortMonthsParse = [];
+        }
+
+        // TODO: add sorting
+        // Sorting makes sure if one month (or abbr) is a prefix of another
+        // see sorting in computeMonthsParse
+        for (i = 0; i < 12; i++) {
+            // make the regex if we don't have it already
+            mom = createUTC([2000, i]);
+            if (strict && !this._longMonthsParse[i]) {
+                this._longMonthsParse[i] = new RegExp('^' + this.months(mom, '').replace('.', '') + '$', 'i');
+                this._shortMonthsParse[i] = new RegExp('^' + this.monthsShort(mom, '').replace('.', '') + '$', 'i');
+            }
+            if (!strict && !this._monthsParse[i]) {
+                regex = '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');
+                this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');
+            }
+            // test the regex
+            if (strict && format === 'MMMM' && this._longMonthsParse[i].test(monthName)) {
+                return i;
+            } else if (strict && format === 'MMM' && this._shortMonthsParse[i].test(monthName)) {
+                return i;
+            } else if (!strict && this._monthsParse[i].test(monthName)) {
+                return i;
+            }
+        }
+    }
+
+    // MOMENTS
+
+    function setMonth (mom, value) {
+        var dayOfMonth;
+
+        if (!mom.isValid()) {
+            // No op
+            return mom;
+        }
+
+        if (typeof value === 'string') {
+            if (/^\d+$/.test(value)) {
+                value = toInt(value);
+            } else {
+                value = mom.localeData().monthsParse(value);
+                // TODO: Another silent failure?
+                if (!isNumber(value)) {
+                    return mom;
+                }
+            }
+        }
+
+        dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value));
+        mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth);
+        return mom;
+    }
+
+    function getSetMonth (value) {
+        if (value != null) {
+            setMonth(this, value);
+            hooks.updateOffset(this, true);
+            return this;
+        } else {
+            return get(this, 'Month');
+        }
+    }
+
+    function getDaysInMonth () {
+        return daysInMonth(this.year(), this.month());
+    }
+
+    var defaultMonthsShortRegex = matchWord;
+    function monthsShortRegex (isStrict) {
+        if (this._monthsParseExact) {
+            if (!hasOwnProp(this, '_monthsRegex')) {
+                computeMonthsParse.call(this);
+            }
+            if (isStrict) {
+                return this._monthsShortStrictRegex;
+            } else {
+                return this._monthsShortRegex;
+            }
+        } else {
+            if (!hasOwnProp(this, '_monthsShortRegex')) {
+                this._monthsShortRegex = defaultMonthsShortRegex;
+            }
+            return this._monthsShortStrictRegex && isStrict ?
+                this._monthsShortStrictRegex : this._monthsShortRegex;
+        }
+    }
+
+    var defaultMonthsRegex = matchWord;
+    function monthsRegex (isStrict) {
+        if (this._monthsParseExact) {
+            if (!hasOwnProp(this, '_monthsRegex')) {
+                computeMonthsParse.call(this);
+            }
+            if (isStrict) {
+                return this._monthsStrictRegex;
+            } else {
+                return this._monthsRegex;
+            }
+        } else {
+            if (!hasOwnProp(this, '_monthsRegex')) {
+                this._monthsRegex = defaultMonthsRegex;
+            }
+            return this._monthsStrictRegex && isStrict ?
+                this._monthsStrictRegex : this._monthsRegex;
+        }
+    }
+
+    function computeMonthsParse () {
+        function cmpLenRev(a, b) {
+            return b.length - a.length;
+        }
+
+        var shortPieces = [], longPieces = [], mixedPieces = [],
+            i, mom;
+        for (i = 0; i < 12; i++) {
+            // make the regex if we don't have it already
+            mom = createUTC([2000, i]);
+            shortPieces.push(this.monthsShort(mom, ''));
+            longPieces.push(this.months(mom, ''));
+            mixedPieces.push(this.months(mom, ''));
+            mixedPieces.push(this.monthsShort(mom, ''));
+        }
+        // Sorting makes sure if one month (or abbr) is a prefix of another it
+        // will match the longer piece.
+        shortPieces.sort(cmpLenRev);
+        longPieces.sort(cmpLenRev);
+        mixedPieces.sort(cmpLenRev);
+        for (i = 0; i < 12; i++) {
+            shortPieces[i] = regexEscape(shortPieces[i]);
+            longPieces[i] = regexEscape(longPieces[i]);
+        }
+        for (i = 0; i < 24; i++) {
+            mixedPieces[i] = regexEscape(mixedPieces[i]);
+        }
+
+        this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');
+        this._monthsShortRegex = this._monthsRegex;
+        this._monthsStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i');
+        this._monthsShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i');
+    }
+
+    function createDate (y, m, d, h, M, s, ms) {
+        // can't just apply() to create a date:
+        // https://stackoverflow.com/q/181348
+        var date;
+        // the date constructor remaps years 0-99 to 1900-1999
+        if (y < 100 && y >= 0) {
+            // preserve leap years using a full 400 year cycle, then reset
+            date = new Date(y + 400, m, d, h, M, s, ms);
+            if (isFinite(date.getFullYear())) {
+                date.setFullYear(y);
+            }
+        } else {
+            date = new Date(y, m, d, h, M, s, ms);
+        }
+
+        return date;
+    }
+
+    function createUTCDate (y) {
+        var date;
+        // the Date.UTC function remaps years 0-99 to 1900-1999
+        if (y < 100 && y >= 0) {
+            var args = Array.prototype.slice.call(arguments);
+            // preserve leap years using a full 400 year cycle, then reset
+            args[0] = y + 400;
+            date = new Date(Date.UTC.apply(null, args));
+            if (isFinite(date.getUTCFullYear())) {
+                date.setUTCFullYear(y);
+            }
+        } else {
+            date = new Date(Date.UTC.apply(null, arguments));
+        }
+
+        return date;
+    }
+
+    // start-of-first-week - start-of-year
+    function firstWeekOffset(year, dow, doy) {
+        var // first-week day -- which january is always in the first week (4 for iso, 1 for other)
+            fwd = 7 + dow - doy,
+            // first-week day local weekday -- which local weekday is fwd
+            fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;
+
+        return -fwdlw + fwd - 1;
+    }
+
+    // https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday
+    function dayOfYearFromWeeks(year, week, weekday, dow, doy) {
+        var localWeekday = (7 + weekday - dow) % 7,
+            weekOffset = firstWeekOffset(year, dow, doy),
+            dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,
+            resYear, resDayOfYear;
+
+        if (dayOfYear <= 0) {
+            resYear = year - 1;
+            resDayOfYear = daysInYear(resYear) + dayOfYear;
+        } else if (dayOfYear > daysInYear(year)) {
+            resYear = year + 1;
+            resDayOfYear = dayOfYear - daysInYear(year);
+        } else {
+            resYear = year;
+            resDayOfYear = dayOfYear;
+        }
+
+        return {
+            year: resYear,
+            dayOfYear: resDayOfYear
+        };
+    }
+
+    function weekOfYear(mom, dow, doy) {
+        var weekOffset = firstWeekOffset(mom.year(), dow, doy),
+            week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,
+            resWeek, resYear;
+
+        if (week < 1) {
+            resYear = mom.year() - 1;
+            resWeek = week + weeksInYear(resYear, dow, doy);
+        } else if (week > weeksInYear(mom.year(), dow, doy)) {
+            resWeek = week - weeksInYear(mom.year(), dow, doy);
+            resYear = mom.year() + 1;
+        } else {
+            resYear = mom.year();
+            resWeek = week;
+        }
+
+        return {
+            week: resWeek,
+            year: resYear
+        };
+    }
+
+    function weeksInYear(year, dow, doy) {
+        var weekOffset = firstWeekOffset(year, dow, doy),
+            weekOffsetNext = firstWeekOffset(year + 1, dow, doy);
+        return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;
+    }
+
+    // FORMATTING
+
+    addFormatToken('w', ['ww', 2], 'wo', 'week');
+    addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');
+
+    // ALIASES
+
+    addUnitAlias('week', 'w');
+    addUnitAlias('isoWeek', 'W');
+
+    // PRIORITIES
+
+    addUnitPriority('week', 5);
+    addUnitPriority('isoWeek', 5);
+
+    // PARSING
+
+    addRegexToken('w',  match1to2);
+    addRegexToken('ww', match1to2, match2);
+    addRegexToken('W',  match1to2);
+    addRegexToken('WW', match1to2, match2);
+
+    addWeekParseToken(['w', 'ww', 'W', 'WW'], function (input, week, config, token) {
+        week[token.substr(0, 1)] = toInt(input);
+    });
+
+    // HELPERS
+
+    // LOCALES
+
+    function localeWeek (mom) {
+        return weekOfYear(mom, this._week.dow, this._week.doy).week;
+    }
+
+    var defaultLocaleWeek = {
+        dow : 0, // Sunday is the first day of the week.
+        doy : 6  // The week that contains Jan 6th is the first week of the year.
+    };
+
+    function localeFirstDayOfWeek () {
+        return this._week.dow;
+    }
+
+    function localeFirstDayOfYear () {
+        return this._week.doy;
+    }
+
+    // MOMENTS
+
+    function getSetWeek (input) {
+        var week = this.localeData().week(this);
+        return input == null ? week : this.add((input - week) * 7, 'd');
+    }
+
+    function getSetISOWeek (input) {
+        var week = weekOfYear(this, 1, 4).week;
+        return input == null ? week : this.add((input - week) * 7, 'd');
+    }
+
+    // FORMATTING
+
+    addFormatToken('d', 0, 'do', 'day');
+
+    addFormatToken('dd', 0, 0, function (format) {
+        return this.localeData().weekdaysMin(this, format);
+    });
+
+    addFormatToken('ddd', 0, 0, function (format) {
+        return this.localeData().weekdaysShort(this, format);
+    });
+
+    addFormatToken('dddd', 0, 0, function (format) {
+        return this.localeData().weekdays(this, format);
+    });
+
+    addFormatToken('e', 0, 0, 'weekday');
+    addFormatToken('E', 0, 0, 'isoWeekday');
+
+    // ALIASES
+
+    addUnitAlias('day', 'd');
+    addUnitAlias('weekday', 'e');
+    addUnitAlias('isoWeekday', 'E');
+
+    // PRIORITY
+    addUnitPriority('day', 11);
+    addUnitPriority('weekday', 11);
+    addUnitPriority('isoWeekday', 11);
+
+    // PARSING
+
+    addRegexToken('d',    match1to2);
+    addRegexToken('e',    match1to2);
+    addRegexToken('E',    match1to2);
+    addRegexToken('dd',   function (isStrict, locale) {
+        return locale.weekdaysMinRegex(isStrict);
+    });
+    addRegexToken('ddd',   function (isStrict, locale) {
+        return locale.weekdaysShortRegex(isStrict);
+    });
+    addRegexToken('dddd',   function (isStrict, locale) {
+        return locale.weekdaysRegex(isStrict);
+    });
+
+    addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {
+        var weekday = config._locale.weekdaysParse(input, token, config._strict);
+        // if we didn't get a weekday name, mark the date as invalid
+        if (weekday != null) {
+            week.d = weekday;
+        } else {
+            getParsingFlags(config).invalidWeekday = input;
+        }
+    });
+
+    addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {
+        week[token] = toInt(input);
+    });
+
+    // HELPERS
+
+    function parseWeekday(input, locale) {
+        if (typeof input !== 'string') {
+            return input;
+        }
+
+        if (!isNaN(input)) {
+            return parseInt(input, 10);
+        }
+
+        input = locale.weekdaysParse(input);
+        if (typeof input === 'number') {
+            return input;
+        }
+
+        return null;
+    }
+
+    function parseIsoWeekday(input, locale) {
+        if (typeof input === 'string') {
+            return locale.weekdaysParse(input) % 7 || 7;
+        }
+        return isNaN(input) ? null : input;
+    }
+
+    // LOCALES
+    function shiftWeekdays (ws, n) {
+        return ws.slice(n, 7).concat(ws.slice(0, n));
+    }
+
+    var defaultLocaleWeekdays = 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_');
+    function localeWeekdays (m, format) {
+        var weekdays = isArray(this._weekdays) ? this._weekdays :
+            this._weekdays[(m && m !== true && this._weekdays.isFormat.test(format)) ? 'format' : 'standalone'];
+        return (m === true) ? shiftWeekdays(weekdays, this._week.dow)
+            : (m) ? weekdays[m.day()] : weekdays;
+    }
+
+    var defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_');
+    function localeWeekdaysShort (m) {
+        return (m === true) ? shiftWeekdays(this._weekdaysShort, this._week.dow)
+            : (m) ? this._weekdaysShort[m.day()] : this._weekdaysShort;
+    }
+
+    var defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_');
+    function localeWeekdaysMin (m) {
+        return (m === true) ? shiftWeekdays(this._weekdaysMin, this._week.dow)
+            : (m) ? this._weekdaysMin[m.day()] : this._weekdaysMin;
+    }
+
+    function handleStrictParse$1(weekdayName, format, strict) {
+        var i, ii, mom, llc = weekdayName.toLocaleLowerCase();
+        if (!this._weekdaysParse) {
+            this._weekdaysParse = [];
+            this._shortWeekdaysParse = [];
+            this._minWeekdaysParse = [];
+
+            for (i = 0; i < 7; ++i) {
+                mom = createUTC([2000, 1]).day(i);
+                this._minWeekdaysParse[i] = this.weekdaysMin(mom, '').toLocaleLowerCase();
+                this._shortWeekdaysParse[i] = this.weekdaysShort(mom, '').toLocaleLowerCase();
+                this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();
+            }
+        }
+
+        if (strict) {
+            if (format === 'dddd') {
+                ii = indexOf.call(this._weekdaysParse, llc);
+                return ii !== -1 ? ii : null;
+            } else if (format === 'ddd') {
+                ii = indexOf.call(this._shortWeekdaysParse, llc);
+                return ii !== -1 ? ii : null;
+            } else {
+                ii = indexOf.call(this._minWeekdaysParse, llc);
+                return ii !== -1 ? ii : null;
+            }
+        } else {
+            if (format === 'dddd') {
+                ii = indexOf.call(this._weekdaysParse, llc);
+                if (ii !== -1) {
+                    return ii;
+                }
+                ii = indexOf.call(this._shortWeekdaysParse, llc);
+                if (ii !== -1) {
+                    return ii;
+                }
+                ii = indexOf.call(this._minWeekdaysParse, llc);
+                return ii !== -1 ? ii : null;
+            } else if (format === 'ddd') {
+                ii = indexOf.call(this._shortWeekdaysParse, llc);
+                if (ii !== -1) {
+                    return ii;
+                }
+                ii = indexOf.call(this._weekdaysParse, llc);
+                if (ii !== -1) {
+                    return ii;
+                }
+                ii = indexOf.call(this._minWeekdaysParse, llc);
+                return ii !== -1 ? ii : null;
+            } else {
+                ii = indexOf.call(this._minWeekdaysParse, llc);
+                if (ii !== -1) {
+                    return ii;
+                }
+                ii = indexOf.call(this._weekdaysParse, llc);
+                if (ii !== -1) {
+                    return ii;
+                }
+                ii = indexOf.call(this._shortWeekdaysParse, llc);
+                return ii !== -1 ? ii : null;
+            }
+        }
+    }
+
+    function localeWeekdaysParse (weekdayName, format, strict) {
+        var i, mom, regex;
+
+        if (this._weekdaysParseExact) {
+            return handleStrictParse$1.call(this, weekdayName, format, strict);
+        }
+
+        if (!this._weekdaysParse) {
+            this._weekdaysParse = [];
+            this._minWeekdaysParse = [];
+            this._shortWeekdaysParse = [];
+            this._fullWeekdaysParse = [];
+        }
+
+        for (i = 0; i < 7; i++) {
+            // make the regex if we don't have it already
+
+            mom = createUTC([2000, 1]).day(i);
+            if (strict && !this._fullWeekdaysParse[i]) {
+                this._fullWeekdaysParse[i] = new RegExp('^' + this.weekdays(mom, '').replace('.', '\\.?') + '$', 'i');
+                this._shortWeekdaysParse[i] = new RegExp('^' + this.weekdaysShort(mom, '').replace('.', '\\.?') + '$', 'i');
+                this._minWeekdaysParse[i] = new RegExp('^' + this.weekdaysMin(mom, '').replace('.', '\\.?') + '$', 'i');
+            }
+            if (!this._weekdaysParse[i]) {
+                regex = '^' + this.weekdays(mom, '') + '|^' + this.weekdaysShort(mom, '') + '|^' + this.weekdaysMin(mom, '');
+                this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');
+            }
+            // test the regex
+            if (strict && format === 'dddd' && this._fullWeekdaysParse[i].test(weekdayName)) {
+                return i;
+            } else if (strict && format === 'ddd' && this._shortWeekdaysParse[i].test(weekdayName)) {
+                return i;
+            } else if (strict && format === 'dd' && this._minWeekdaysParse[i].test(weekdayName)) {
+                return i;
+            } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {
+                return i;
+            }
+        }
+    }
+
+    // MOMENTS
+
+    function getSetDayOfWeek (input) {
+        if (!this.isValid()) {
+            return input != null ? this : NaN;
+        }
+        var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay();
+        if (input != null) {
+            input = parseWeekday(input, this.localeData());
+            return this.add(input - day, 'd');
+        } else {
+            return day;
+        }
+    }
+
+    function getSetLocaleDayOfWeek (input) {
+        if (!this.isValid()) {
+            return input != null ? this : NaN;
+        }
+        var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;
+        return input == null ? weekday : this.add(input - weekday, 'd');
+    }
+
+    function getSetISODayOfWeek (input) {
+        if (!this.isValid()) {
+            return input != null ? this : NaN;
+        }
+
+        // behaves the same as moment#day except
+        // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)
+        // as a setter, sunday should belong to the previous week.
+
+        if (input != null) {
+            var weekday = parseIsoWeekday(input, this.localeData());
+            return this.day(this.day() % 7 ? weekday : weekday - 7);
+        } else {
+            return this.day() || 7;
+        }
+    }
+
+    var defaultWeekdaysRegex = matchWord;
+    function weekdaysRegex (isStrict) {
+        if (this._weekdaysParseExact) {
+            if (!hasOwnProp(this, '_weekdaysRegex')) {
+                computeWeekdaysParse.call(this);
+            }
+            if (isStrict) {
+                return this._weekdaysStrictRegex;
+            } else {
+                return this._weekdaysRegex;
+            }
+        } else {
+            if (!hasOwnProp(this, '_weekdaysRegex')) {
+                this._weekdaysRegex = defaultWeekdaysRegex;
+            }
+            return this._weekdaysStrictRegex && isStrict ?
+                this._weekdaysStrictRegex : this._weekdaysRegex;
+        }
+    }
+
+    var defaultWeekdaysShortRegex = matchWord;
+    function weekdaysShortRegex (isStrict) {
+        if (this._weekdaysParseExact) {
+            if (!hasOwnProp(this, '_weekdaysRegex')) {
+                computeWeekdaysParse.call(this);
+            }
+            if (isStrict) {
+                return this._weekdaysShortStrictRegex;
+            } else {
+                return this._weekdaysShortRegex;
+            }
+        } else {
+            if (!hasOwnProp(this, '_weekdaysShortRegex')) {
+                this._weekdaysShortRegex = defaultWeekdaysShortRegex;
+            }
+            return this._weekdaysShortStrictRegex && isStrict ?
+                this._weekdaysShortStrictRegex : this._weekdaysShortRegex;
+        }
+    }
+
+    var defaultWeekdaysMinRegex = matchWord;
+    function weekdaysMinRegex (isStrict) {
+        if (this._weekdaysParseExact) {
+            if (!hasOwnProp(this, '_weekdaysRegex')) {
+                computeWeekdaysParse.call(this);
+            }
+            if (isStrict) {
+                return this._weekdaysMinStrictRegex;
+            } else {
+                return this._weekdaysMinRegex;
+            }
+        } else {
+            if (!hasOwnProp(this, '_weekdaysMinRegex')) {
+                this._weekdaysMinRegex = defaultWeekdaysMinRegex;
+            }
+            return this._weekdaysMinStrictRegex && isStrict ?
+                this._weekdaysMinStrictRegex : this._weekdaysMinRegex;
+        }
+    }
+
+
+    function computeWeekdaysParse () {
+        function cmpLenRev(a, b) {
+            return b.length - a.length;
+        }
+
+        var minPieces = [], shortPieces = [], longPieces = [], mixedPieces = [],
+            i, mom, minp, shortp, longp;
+        for (i = 0; i < 7; i++) {
+            // make the regex if we don't have it already
+            mom = createUTC([2000, 1]).day(i);
+            minp = this.weekdaysMin(mom, '');
+            shortp = this.weekdaysShort(mom, '');
+            longp = this.weekdays(mom, '');
+            minPieces.push(minp);
+            shortPieces.push(shortp);
+            longPieces.push(longp);
+            mixedPieces.push(minp);
+            mixedPieces.push(shortp);
+            mixedPieces.push(longp);
+        }
+        // Sorting makes sure if one weekday (or abbr) is a prefix of another it
+        // will match the longer piece.
+        minPieces.sort(cmpLenRev);
+        shortPieces.sort(cmpLenRev);
+        longPieces.sort(cmpLenRev);
+        mixedPieces.sort(cmpLenRev);
+        for (i = 0; i < 7; i++) {
+            shortPieces[i] = regexEscape(shortPieces[i]);
+            longPieces[i] = regexEscape(longPieces[i]);
+            mixedPieces[i] = regexEscape(mixedPieces[i]);
+        }
+
+        this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');
+        this._weekdaysShortRegex = this._weekdaysRegex;
+        this._weekdaysMinRegex = this._weekdaysRegex;
+
+        this._weekdaysStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i');
+        this._weekdaysShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i');
+        this._weekdaysMinStrictRegex = new RegExp('^(' + minPieces.join('|') + ')', 'i');
+    }
+
+    // FORMATTING
+
+    function hFormat() {
+        return this.hours() % 12 || 12;
+    }
+
+    function kFormat() {
+        return this.hours() || 24;
+    }
+
+    addFormatToken('H', ['HH', 2], 0, 'hour');
+    addFormatToken('h', ['hh', 2], 0, hFormat);
+    addFormatToken('k', ['kk', 2], 0, kFormat);
+
+    addFormatToken('hmm', 0, 0, function () {
+        return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);
+    });
+
+    addFormatToken('hmmss', 0, 0, function () {
+        return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2) +
+            zeroFill(this.seconds(), 2);
+    });
+
+    addFormatToken('Hmm', 0, 0, function () {
+        return '' + this.hours() + zeroFill(this.minutes(), 2);
+    });
+
+    addFormatToken('Hmmss', 0, 0, function () {
+        return '' + this.hours() + zeroFill(this.minutes(), 2) +
+            zeroFill(this.seconds(), 2);
+    });
+
+    function meridiem (token, lowercase) {
+        addFormatToken(token, 0, 0, function () {
+            return this.localeData().meridiem(this.hours(), this.minutes(), lowercase);
+        });
+    }
+
+    meridiem('a', true);
+    meridiem('A', false);
+
+    // ALIASES
+
+    addUnitAlias('hour', 'h');
+
+    // PRIORITY
+    addUnitPriority('hour', 13);
+
+    // PARSING
+
+    function matchMeridiem (isStrict, locale) {
+        return locale._meridiemParse;
+    }
+
+    addRegexToken('a',  matchMeridiem);
+    addRegexToken('A',  matchMeridiem);
+    addRegexToken('H',  match1to2);
+    addRegexToken('h',  match1to2);
+    addRegexToken('k',  match1to2);
+    addRegexToken('HH', match1to2, match2);
+    addRegexToken('hh', match1to2, match2);
+    addRegexToken('kk', match1to2, match2);
+
+    addRegexToken('hmm', match3to4);
+    addRegexToken('hmmss', match5to6);
+    addRegexToken('Hmm', match3to4);
+    addRegexToken('Hmmss', match5to6);
+
+    addParseToken(['H', 'HH'], HOUR);
+    addParseToken(['k', 'kk'], function (input, array, config) {
+        var kInput = toInt(input);
+        array[HOUR] = kInput === 24 ? 0 : kInput;
+    });
+    addParseToken(['a', 'A'], function (input, array, config) {
+        config._isPm = config._locale.isPM(input);
+        config._meridiem = input;
+    });
+    addParseToken(['h', 'hh'], function (input, array, config) {
+        array[HOUR] = toInt(input);
+        getParsingFlags(config).bigHour = true;
+    });
+    addParseToken('hmm', function (input, array, config) {
+        var pos = input.length - 2;
+        array[HOUR] = toInt(input.substr(0, pos));
+        array[MINUTE] = toInt(input.substr(pos));
+        getParsingFlags(config).bigHour = true;
+    });
+    addParseToken('hmmss', function (input, array, config) {
+        var pos1 = input.length - 4;
+        var pos2 = input.length - 2;
+        array[HOUR] = toInt(input.substr(0, pos1));
+        array[MINUTE] = toInt(input.substr(pos1, 2));
+        array[SECOND] = toInt(input.substr(pos2));
+        getParsingFlags(config).bigHour = true;
+    });
+    addParseToken('Hmm', function (input, array, config) {
+        var pos = input.length - 2;
+        array[HOUR] = toInt(input.substr(0, pos));
+        array[MINUTE] = toInt(input.substr(pos));
+    });
+    addParseToken('Hmmss', function (input, array, config) {
+        var pos1 = input.length - 4;
+        var pos2 = input.length - 2;
+        array[HOUR] = toInt(input.substr(0, pos1));
+        array[MINUTE] = toInt(input.substr(pos1, 2));
+        array[SECOND] = toInt(input.substr(pos2));
+    });
+
+    // LOCALES
+
+    function localeIsPM (input) {
+        // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays
+        // Using charAt should be more compatible.
+        return ((input + '').toLowerCase().charAt(0) === 'p');
+    }
+
+    var defaultLocaleMeridiemParse = /[ap]\.?m?\.?/i;
+    function localeMeridiem (hours, minutes, isLower) {
+        if (hours > 11) {
+            return isLower ? 'pm' : 'PM';
+        } else {
+            return isLower ? 'am' : 'AM';
+        }
+    }
+
+
+    // MOMENTS
+
+    // Setting the hour should keep the time, because the user explicitly
+    // specified which hour they want. So trying to maintain the same hour (in
+    // a new timezone) makes sense. Adding/subtracting hours does not follow
+    // this rule.
+    var getSetHour = makeGetSet('Hours', true);
+
+    var baseConfig = {
+        calendar: defaultCalendar,
+        longDateFormat: defaultLongDateFormat,
+        invalidDate: defaultInvalidDate,
+        ordinal: defaultOrdinal,
+        dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,
+        relativeTime: defaultRelativeTime,
+
+        months: defaultLocaleMonths,
+        monthsShort: defaultLocaleMonthsShort,
+
+        week: defaultLocaleWeek,
+
+        weekdays: defaultLocaleWeekdays,
+        weekdaysMin: defaultLocaleWeekdaysMin,
+        weekdaysShort: defaultLocaleWeekdaysShort,
+
+        meridiemParse: defaultLocaleMeridiemParse
+    };
+
+    // internal storage for locale config files
+    var locales = {};
+    var localeFamilies = {};
+    var globalLocale;
+
+    function normalizeLocale(key) {
+        return key ? key.toLowerCase().replace('_', '-') : key;
+    }
+
+    // pick the locale from the array
+    // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each
+    // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root
+    function chooseLocale(names) {
+        var i = 0, j, next, locale, split;
+
+        while (i < names.length) {
+            split = normalizeLocale(names[i]).split('-');
+            j = split.length;
+            next = normalizeLocale(names[i + 1]);
+            next = next ? next.split('-') : null;
+            while (j > 0) {
+                locale = loadLocale(split.slice(0, j).join('-'));
+                if (locale) {
+                    return locale;
+                }
+                if (next && next.length >= j && compareArrays(split, next, true) >= j - 1) {
+                    //the next array item is better than a shallower substring of this one
+                    break;
+                }
+                j--;
+            }
+            i++;
+        }
+        return globalLocale;
+    }
+
+    function loadLocale(name) {
+        var oldLocale = null;
+        // TODO: Find a better way to register and load all the locales in Node
+        if (!locales[name] && (typeof module !== 'undefined') &&
+                module && module.exports) {
+            try {
+                oldLocale = globalLocale._abbr;
+                var aliasedRequire = require;
+                aliasedRequire('./locale/' + name);
+                getSetGlobalLocale(oldLocale);
+            } catch (e) {}
+        }
+        return locales[name];
+    }
+
+    // This function will load locale and then set the global locale.  If
+    // no arguments are passed in, it will simply return the current global
+    // locale key.
+    function getSetGlobalLocale (key, values) {
+        var data;
+        if (key) {
+            if (isUndefined(values)) {
+                data = getLocale(key);
+            }
+            else {
+                data = defineLocale(key, values);
+            }
+
+            if (data) {
+                // moment.duration._locale = moment._locale = data;
+                globalLocale = data;
+            }
+            else {
+                if ((typeof console !==  'undefined') && console.warn) {
+                    //warn user if arguments are passed but the locale could not be set
+                    console.warn('Locale ' + key +  ' not found. Did you forget to load it?');
+                }
+            }
+        }
+
+        return globalLocale._abbr;
+    }
+
+    function defineLocale (name, config) {
+        if (config !== null) {
+            var locale, parentConfig = baseConfig;
+            config.abbr = name;
+            if (locales[name] != null) {
+                deprecateSimple('defineLocaleOverride',
+                        'use moment.updateLocale(localeName, config) to change ' +
+                        'an existing locale. moment.defineLocale(localeName, ' +
+                        'config) should only be used for creating a new locale ' +
+                        'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.');
+                parentConfig = locales[name]._config;
+            } else if (config.parentLocale != null) {
+                if (locales[config.parentLocale] != null) {
+                    parentConfig = locales[config.parentLocale]._config;
+                } else {
+                    locale = loadLocale(config.parentLocale);
+                    if (locale != null) {
+                        parentConfig = locale._config;
+                    } else {
+                        if (!localeFamilies[config.parentLocale]) {
+                            localeFamilies[config.parentLocale] = [];
+                        }
+                        localeFamilies[config.parentLocale].push({
+                            name: name,
+                            config: config
+                        });
+                        return null;
+                    }
+                }
+            }
+            locales[name] = new Locale(mergeConfigs(parentConfig, config));
+
+            if (localeFamilies[name]) {
+                localeFamilies[name].forEach(function (x) {
+                    defineLocale(x.name, x.config);
+                });
+            }
+
+            // backwards compat for now: also set the locale
+            // make sure we set the locale AFTER all child locales have been
+            // created, so we won't end up with the child locale set.
+            getSetGlobalLocale(name);
+
+
+            return locales[name];
+        } else {
+            // useful for testing
+            delete locales[name];
+            return null;
+        }
+    }
+
+    function updateLocale(name, config) {
+        if (config != null) {
+            var locale, tmpLocale, parentConfig = baseConfig;
+            // MERGE
+            tmpLocale = loadLocale(name);
+            if (tmpLocale != null) {
+                parentConfig = tmpLocale._config;
+            }
+            config = mergeConfigs(parentConfig, config);
+            locale = new Locale(config);
+            locale.parentLocale = locales[name];
+            locales[name] = locale;
+
+            // backwards compat for now: also set the locale
+            getSetGlobalLocale(name);
+        } else {
+            // pass null for config to unupdate, useful for tests
+            if (locales[name] != null) {
+                if (locales[name].parentLocale != null) {
+                    locales[name] = locales[name].parentLocale;
+                } else if (locales[name] != null) {
+                    delete locales[name];
+                }
+            }
+        }
+        return locales[name];
+    }
+
+    // returns locale data
+    function getLocale (key) {
+        var locale;
+
+        if (key && key._locale && key._locale._abbr) {
+            key = key._locale._abbr;
+        }
+
+        if (!key) {
+            return globalLocale;
+        }
+
+        if (!isArray(key)) {
+            //short-circuit everything else
+            locale = loadLocale(key);
+            if (locale) {
+                return locale;
+            }
+            key = [key];
+        }
+
+        return chooseLocale(key);
+    }
+
+    function listLocales() {
+        return keys(locales);
+    }
+
+    function checkOverflow (m) {
+        var overflow;
+        var a = m._a;
+
+        if (a && getParsingFlags(m).overflow === -2) {
+            overflow =
+                a[MONTH]       < 0 || a[MONTH]       > 11  ? MONTH :
+                a[DATE]        < 1 || a[DATE]        > daysInMonth(a[YEAR], a[MONTH]) ? DATE :
+                a[HOUR]        < 0 || a[HOUR]        > 24 || (a[HOUR] === 24 && (a[MINUTE] !== 0 || a[SECOND] !== 0 || a[MILLISECOND] !== 0)) ? HOUR :
+                a[MINUTE]      < 0 || a[MINUTE]      > 59  ? MINUTE :
+                a[SECOND]      < 0 || a[SECOND]      > 59  ? SECOND :
+                a[MILLISECOND] < 0 || a[MILLISECOND] > 999 ? MILLISECOND :
+                -1;
+
+            if (getParsingFlags(m)._overflowDayOfYear && (overflow < YEAR || overflow > DATE)) {
+                overflow = DATE;
+            }
+            if (getParsingFlags(m)._overflowWeeks && overflow === -1) {
+                overflow = WEEK;
+            }
+            if (getParsingFlags(m)._overflowWeekday && overflow === -1) {
+                overflow = WEEKDAY;
+            }
+
+            getParsingFlags(m).overflow = overflow;
+        }
+
+        return m;
+    }
+
+    // Pick the first defined of two or three arguments.
+    function defaults(a, b, c) {
+        if (a != null) {
+            return a;
+        }
+        if (b != null) {
+            return b;
+        }
+        return c;
+    }
+
+    function currentDateArray(config) {
+        // hooks is actually the exported moment object
+        var nowValue = new Date(hooks.now());
+        if (config._useUTC) {
+            return [nowValue.getUTCFullYear(), nowValue.getUTCMonth(), nowValue.getUTCDate()];
+        }
+        return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];
+    }
+
+    // convert an array to a date.
+    // the array should mirror the parameters below
+    // note: all values past the year are optional and will default to the lowest possible value.
+    // [year, month, day , hour, minute, second, millisecond]
+    function configFromArray (config) {
+        var i, date, input = [], currentDate, expectedWeekday, yearToUse;
+
+        if (config._d) {
+            return;
+        }
+
+        currentDate = currentDateArray(config);
+
+        //compute day of the year from weeks and weekdays
+        if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {
+            dayOfYearFromWeekInfo(config);
+        }
+
+        //if the day of the year is set, figure out what it is
+        if (config._dayOfYear != null) {
+            yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);
+
+            if (config._dayOfYear > daysInYear(yearToUse) || config._dayOfYear === 0) {
+                getParsingFlags(config)._overflowDayOfYear = true;
+            }
+
+            date = createUTCDate(yearToUse, 0, config._dayOfYear);
+            config._a[MONTH] = date.getUTCMonth();
+            config._a[DATE] = date.getUTCDate();
+        }
+
+        // Default to current date.
+        // * if no year, month, day of month are given, default to today
+        // * if day of month is given, default month and year
+        // * if month is given, default only year
+        // * if year is given, don't default anything
+        for (i = 0; i < 3 && config._a[i] == null; ++i) {
+            config._a[i] = input[i] = currentDate[i];
+        }
+
+        // Zero out whatever was not defaulted, including time
+        for (; i < 7; i++) {
+            config._a[i] = input[i] = (config._a[i] == null) ? (i === 2 ? 1 : 0) : config._a[i];
+        }
+
+        // Check for 24:00:00.000
+        if (config._a[HOUR] === 24 &&
+                config._a[MINUTE] === 0 &&
+                config._a[SECOND] === 0 &&
+                config._a[MILLISECOND] === 0) {
+            config._nextDay = true;
+            config._a[HOUR] = 0;
+        }
+
+        config._d = (config._useUTC ? createUTCDate : createDate).apply(null, input);
+        expectedWeekday = config._useUTC ? config._d.getUTCDay() : config._d.getDay();
+
+        // Apply timezone offset from input. The actual utcOffset can be changed
+        // with parseZone.
+        if (config._tzm != null) {
+            config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);
+        }
+
+        if (config._nextDay) {
+            config._a[HOUR] = 24;
+        }
+
+        // check for mismatching day of week
+        if (config._w && typeof config._w.d !== 'undefined' && config._w.d !== expectedWeekday) {
+            getParsingFlags(config).weekdayMismatch = true;
+        }
+    }
+
+    function dayOfYearFromWeekInfo(config) {
+        var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow;
+
+        w = config._w;
+        if (w.GG != null || w.W != null || w.E != null) {
+            dow = 1;
+            doy = 4;
+
+            // TODO: We need to take the current isoWeekYear, but that depends on
+            // how we interpret now (local, utc, fixed offset). So create
+            // a now version of current config (take local/utc/offset flags, and
+            // create now).
+            weekYear = defaults(w.GG, config._a[YEAR], weekOfYear(createLocal(), 1, 4).year);
+            week = defaults(w.W, 1);
+            weekday = defaults(w.E, 1);
+            if (weekday < 1 || weekday > 7) {
+                weekdayOverflow = true;
+            }
+        } else {
+            dow = config._locale._week.dow;
+            doy = config._locale._week.doy;
+
+            var curWeek = weekOfYear(createLocal(), dow, doy);
+
+            weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);
+
+            // Default to current week.
+            week = defaults(w.w, curWeek.week);
+
+            if (w.d != null) {
+                // weekday -- low day numbers are considered next week
+                weekday = w.d;
+                if (weekday < 0 || weekday > 6) {
+                    weekdayOverflow = true;
+                }
+            } else if (w.e != null) {
+                // local weekday -- counting starts from beginning of week
+                weekday = w.e + dow;
+                if (w.e < 0 || w.e > 6) {
+                    weekdayOverflow = true;
+                }
+            } else {
+                // default to beginning of week
+                weekday = dow;
+            }
+        }
+        if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {
+            getParsingFlags(config)._overflowWeeks = true;
+        } else if (weekdayOverflow != null) {
+            getParsingFlags(config)._overflowWeekday = true;
+        } else {
+            temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);
+            config._a[YEAR] = temp.year;
+            config._dayOfYear = temp.dayOfYear;
+        }
+    }
+
+    // iso 8601 regex
+    // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)
+    var extendedIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/;
+    var basicIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/;
+
+    var tzRegex = /Z|[+-]\d\d(?::?\d\d)?/;
+
+    var isoDates = [
+        ['YYYYYY-MM-DD', /[+-]\d{6}-\d\d-\d\d/],
+        ['YYYY-MM-DD', /\d{4}-\d\d-\d\d/],
+        ['GGGG-[W]WW-E', /\d{4}-W\d\d-\d/],
+        ['GGGG-[W]WW', /\d{4}-W\d\d/, false],
+        ['YYYY-DDD', /\d{4}-\d{3}/],
+        ['YYYY-MM', /\d{4}-\d\d/, false],
+        ['YYYYYYMMDD', /[+-]\d{10}/],
+        ['YYYYMMDD', /\d{8}/],
+        // YYYYMM is NOT allowed by the standard
+        ['GGGG[W]WWE', /\d{4}W\d{3}/],
+        ['GGGG[W]WW', /\d{4}W\d{2}/, false],
+        ['YYYYDDD', /\d{7}/]
+    ];
+
+    // iso time formats and regexes
+    var isoTimes = [
+        ['HH:mm:ss.SSSS', /\d\d:\d\d:\d\d\.\d+/],
+        ['HH:mm:ss,SSSS', /\d\d:\d\d:\d\d,\d+/],
+        ['HH:mm:ss', /\d\d:\d\d:\d\d/],
+        ['HH:mm', /\d\d:\d\d/],
+        ['HHmmss.SSSS', /\d\d\d\d\d\d\.\d+/],
+        ['HHmmss,SSSS', /\d\d\d\d\d\d,\d+/],
+        ['HHmmss', /\d\d\d\d\d\d/],
+        ['HHmm', /\d\d\d\d/],
+        ['HH', /\d\d/]
+    ];
+
+    var aspNetJsonRegex = /^\/?Date\((\-?\d+)/i;
+
+    // date from iso format
+    function configFromISO(config) {
+        var i, l,
+            string = config._i,
+            match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),
+            allowTime, dateFormat, timeFormat, tzFormat;
+
+        if (match) {
+            getParsingFlags(config).iso = true;
+
+            for (i = 0, l = isoDates.length; i < l; i++) {
+                if (isoDates[i][1].exec(match[1])) {
+                    dateFormat = isoDates[i][0];
+                    allowTime = isoDates[i][2] !== false;
+                    break;
+                }
+            }
+            if (dateFormat == null) {
+                config._isValid = false;
+                return;
+            }
+            if (match[3]) {
+                for (i = 0, l = isoTimes.length; i < l; i++) {
+                    if (isoTimes[i][1].exec(match[3])) {
+                        // match[2] should be 'T' or space
+                        timeFormat = (match[2] || ' ') + isoTimes[i][0];
+                        break;
+                    }
+                }
+                if (timeFormat == null) {
+                    config._isValid = false;
+                    return;
+                }
+            }
+            if (!allowTime && timeFormat != null) {
+                config._isValid = false;
+                return;
+            }
+            if (match[4]) {
+                if (tzRegex.exec(match[4])) {
+                    tzFormat = 'Z';
+                } else {
+                    config._isValid = false;
+                    return;
+                }
+            }
+            config._f = dateFormat + (timeFormat || '') + (tzFormat || '');
+            configFromStringAndFormat(config);
+        } else {
+            config._isValid = false;
+        }
+    }
+
+    // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3
+    var rfc2822 = /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/;
+
+    function extractFromRFC2822Strings(yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr) {
+        var result = [
+            untruncateYear(yearStr),
+            defaultLocaleMonthsShort.indexOf(monthStr),
+            parseInt(dayStr, 10),
+            parseInt(hourStr, 10),
+            parseInt(minuteStr, 10)
+        ];
+
+        if (secondStr) {
+            result.push(parseInt(secondStr, 10));
+        }
+
+        return result;
+    }
+
+    function untruncateYear(yearStr) {
+        var year = parseInt(yearStr, 10);
+        if (year <= 49) {
+            return 2000 + year;
+        } else if (year <= 999) {
+            return 1900 + year;
+        }
+        return year;
+    }
+
+    function preprocessRFC2822(s) {
+        // Remove comments and folding whitespace and replace multiple-spaces with a single space
+        return s.replace(/\([^)]*\)|[\n\t]/g, ' ').replace(/(\s\s+)/g, ' ').replace(/^\s\s*/, '').replace(/\s\s*$/, '');
+    }
+
+    function checkWeekday(weekdayStr, parsedInput, config) {
+        if (weekdayStr) {
+            // TODO: Replace the vanilla JS Date object with an indepentent day-of-week check.
+            var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr),
+                weekdayActual = new Date(parsedInput[0], parsedInput[1], parsedInput[2]).getDay();
+            if (weekdayProvided !== weekdayActual) {
+                getParsingFlags(config).weekdayMismatch = true;
+                config._isValid = false;
+                return false;
+            }
+        }
+        return true;
+    }
+
+    var obsOffsets = {
+        UT: 0,
+        GMT: 0,
+        EDT: -4 * 60,
+        EST: -5 * 60,
+        CDT: -5 * 60,
+        CST: -6 * 60,
+        MDT: -6 * 60,
+        MST: -7 * 60,
+        PDT: -7 * 60,
+        PST: -8 * 60
+    };
+
+    function calculateOffset(obsOffset, militaryOffset, numOffset) {
+        if (obsOffset) {
+            return obsOffsets[obsOffset];
+        } else if (militaryOffset) {
+            // the only allowed military tz is Z
+            return 0;
+        } else {
+            var hm = parseInt(numOffset, 10);
+            var m = hm % 100, h = (hm - m) / 100;
+            return h * 60 + m;
+        }
+    }
+
+    // date and time from ref 2822 format
+    function configFromRFC2822(config) {
+        var match = rfc2822.exec(preprocessRFC2822(config._i));
+        if (match) {
+            var parsedArray = extractFromRFC2822Strings(match[4], match[3], match[2], match[5], match[6], match[7]);
+            if (!checkWeekday(match[1], parsedArray, config)) {
+                return;
+            }
+
+            config._a = parsedArray;
+            config._tzm = calculateOffset(match[8], match[9], match[10]);
+
+            config._d = createUTCDate.apply(null, config._a);
+            config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);
+
+            getParsingFlags(config).rfc2822 = true;
+        } else {
+            config._isValid = false;
+        }
+    }
+
+    // date from iso format or fallback
+    function configFromString(config) {
+        var matched = aspNetJsonRegex.exec(config._i);
+
+        if (matched !== null) {
+            config._d = new Date(+matched[1]);
+            return;
+        }
+
+        configFromISO(config);
+        if (config._isValid === false) {
+            delete config._isValid;
+        } else {
+            return;
+        }
+
+        configFromRFC2822(config);
+        if (config._isValid === false) {
+            delete config._isValid;
+        } else {
+            return;
+        }
+
+        // Final attempt, use Input Fallback
+        hooks.createFromInputFallback(config);
+    }
+
+    hooks.createFromInputFallback = deprecate(
+        'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' +
+        'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' +
+        'discouraged and will be removed in an upcoming major release. Please refer to ' +
+        'http://momentjs.com/guides/#/warnings/js-date/ for more info.',
+        function (config) {
+            config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));
+        }
+    );
+
+    // constant that refers to the ISO standard
+    hooks.ISO_8601 = function () {};
+
+    // constant that refers to the RFC 2822 form
+    hooks.RFC_2822 = function () {};
+
+    // date from string and format string
+    function configFromStringAndFormat(config) {
+        // TODO: Move this to another part of the creation flow to prevent circular deps
+        if (config._f === hooks.ISO_8601) {
+            configFromISO(config);
+            return;
+        }
+        if (config._f === hooks.RFC_2822) {
+            configFromRFC2822(config);
+            return;
+        }
+        config._a = [];
+        getParsingFlags(config).empty = true;
+
+        // This array is used to make a Date, either with `new Date` or `Date.UTC`
+        var string = '' + config._i,
+            i, parsedInput, tokens, token, skipped,
+            stringLength = string.length,
+            totalParsedInputLength = 0;
+
+        tokens = expandFormat(config._f, config._locale).match(formattingTokens) || [];
+
+        for (i = 0; i < tokens.length; i++) {
+            token = tokens[i];
+            parsedInput = (string.match(getParseRegexForToken(token, config)) || [])[0];
+            // console.log('token', token, 'parsedInput', parsedInput,
+            //         'regex', getParseRegexForToken(token, config));
+            if (parsedInput) {
+                skipped = string.substr(0, string.indexOf(parsedInput));
+                if (skipped.length > 0) {
+                    getParsingFlags(config).unusedInput.push(skipped);
+                }
+                string = string.slice(string.indexOf(parsedInput) + parsedInput.length);
+                totalParsedInputLength += parsedInput.length;
+            }
+            // don't parse if it's not a known token
+            if (formatTokenFunctions[token]) {
+                if (parsedInput) {
+                    getParsingFlags(config).empty = false;
+                }
+                else {
+                    getParsingFlags(config).unusedTokens.push(token);
+                }
+                addTimeToArrayFromToken(token, parsedInput, config);
+            }
+            else if (config._strict && !parsedInput) {
+                getParsingFlags(config).unusedTokens.push(token);
+            }
+        }
+
+        // add remaining unparsed input length to the string
+        getParsingFlags(config).charsLeftOver = stringLength - totalParsedInputLength;
+        if (string.length > 0) {
+            getParsingFlags(config).unusedInput.push(string);
+        }
+
+        // clear _12h flag if hour is <= 12
+        if (config._a[HOUR] <= 12 &&
+            getParsingFlags(config).bigHour === true &&
+            config._a[HOUR] > 0) {
+            getParsingFlags(config).bigHour = undefined;
+        }
+
+        getParsingFlags(config).parsedDateParts = config._a.slice(0);
+        getParsingFlags(config).meridiem = config._meridiem;
+        // handle meridiem
+        config._a[HOUR] = meridiemFixWrap(config._locale, config._a[HOUR], config._meridiem);
+
+        configFromArray(config);
+        checkOverflow(config);
+    }
+
+
+    function meridiemFixWrap (locale, hour, meridiem) {
+        var isPm;
+
+        if (meridiem == null) {
+            // nothing to do
+            return hour;
+        }
+        if (locale.meridiemHour != null) {
+            return locale.meridiemHour(hour, meridiem);
+        } else if (locale.isPM != null) {
+            // Fallback
+            isPm = locale.isPM(meridiem);
+            if (isPm && hour < 12) {
+                hour += 12;
+            }
+            if (!isPm && hour === 12) {
+                hour = 0;
+            }
+            return hour;
+        } else {
+            // this is not supposed to happen
+            return hour;
+        }
+    }
+
+    // date from string and array of format strings
+    function configFromStringAndArray(config) {
+        var tempConfig,
+            bestMoment,
+
+            scoreToBeat,
+            i,
+            currentScore;
+
+        if (config._f.length === 0) {
+            getParsingFlags(config).invalidFormat = true;
+            config._d = new Date(NaN);
+            return;
+        }
+
+        for (i = 0; i < config._f.length; i++) {
+            currentScore = 0;
+            tempConfig = copyConfig({}, config);
+            if (config._useUTC != null) {
+                tempConfig._useUTC = config._useUTC;
+            }
+            tempConfig._f = config._f[i];
+            configFromStringAndFormat(tempConfig);
+
+            if (!isValid(tempConfig)) {
+                continue;
+            }
+
+            // if there is any input that was not parsed add a penalty for that format
+            currentScore += getParsingFlags(tempConfig).charsLeftOver;
+
+            //or tokens
+            currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;
+
+            getParsingFlags(tempConfig).score = currentScore;
+
+            if (scoreToBeat == null || currentScore < scoreToBeat) {
+                scoreToBeat = currentScore;
+                bestMoment = tempConfig;
+            }
+        }
+
+        extend(config, bestMoment || tempConfig);
+    }
+
+    function configFromObject(config) {
+        if (config._d) {
+            return;
+        }
+
+        var i = normalizeObjectUnits(config._i);
+        config._a = map([i.year, i.month, i.day || i.date, i.hour, i.minute, i.second, i.millisecond], function (obj) {
+            return obj && parseInt(obj, 10);
+        });
+
+        configFromArray(config);
+    }
+
+    function createFromConfig (config) {
+        var res = new Moment(checkOverflow(prepareConfig(config)));
+        if (res._nextDay) {
+            // Adding is smart enough around DST
+            res.add(1, 'd');
+            res._nextDay = undefined;
+        }
+
+        return res;
+    }
+
+    function prepareConfig (config) {
+        var input = config._i,
+            format = config._f;
+
+        config._locale = config._locale || getLocale(config._l);
+
+        if (input === null || (format === undefined && input === '')) {
+            return createInvalid({nullInput: true});
+        }
+
+        if (typeof input === 'string') {
+            config._i = input = config._locale.preparse(input);
+        }
+
+        if (isMoment(input)) {
+            return new Moment(checkOverflow(input));
+        } else if (isDate(input)) {
+            config._d = input;
+        } else if (isArray(format)) {
+            configFromStringAndArray(config);
+        } else if (format) {
+            configFromStringAndFormat(config);
+        }  else {
+            configFromInput(config);
+        }
+
+        if (!isValid(config)) {
+            config._d = null;
+        }
+
+        return config;
+    }
+
+    function configFromInput(config) {
+        var input = config._i;
+        if (isUndefined(input)) {
+            config._d = new Date(hooks.now());
+        } else if (isDate(input)) {
+            config._d = new Date(input.valueOf());
+        } else if (typeof input === 'string') {
+            configFromString(config);
+        } else if (isArray(input)) {
+            config._a = map(input.slice(0), function (obj) {
+                return parseInt(obj, 10);
+            });
+            configFromArray(config);
+        } else if (isObject(input)) {
+            configFromObject(config);
+        } else if (isNumber(input)) {
+            // from milliseconds
+            config._d = new Date(input);
+        } else {
+            hooks.createFromInputFallback(config);
+        }
+    }
+
+    function createLocalOrUTC (input, format, locale, strict, isUTC) {
+        var c = {};
+
+        if (locale === true || locale === false) {
+            strict = locale;
+            locale = undefined;
+        }
+
+        if ((isObject(input) && isObjectEmpty(input)) ||
+                (isArray(input) && input.length === 0)) {
+            input = undefined;
+        }
+        // object construction must be done this way.
+        // https://github.com/moment/moment/issues/1423
+        c._isAMomentObject = true;
+        c._useUTC = c._isUTC = isUTC;
+        c._l = locale;
+        c._i = input;
+        c._f = format;
+        c._strict = strict;
+
+        return createFromConfig(c);
+    }
+
+    function createLocal (input, format, locale, strict) {
+        return createLocalOrUTC(input, format, locale, strict, false);
+    }
+
+    var prototypeMin = deprecate(
+        'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/',
+        function () {
+            var other = createLocal.apply(null, arguments);
+            if (this.isValid() && other.isValid()) {
+                return other < this ? this : other;
+            } else {
+                return createInvalid();
+            }
+        }
+    );
+
+    var prototypeMax = deprecate(
+        'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',
+        function () {
+            var other = createLocal.apply(null, arguments);
+            if (this.isValid() && other.isValid()) {
+                return other > this ? this : other;
+            } else {
+                return createInvalid();
+            }
+        }
+    );
+
+    // Pick a moment m from moments so that m[fn](other) is true for all
+    // other. This relies on the function fn to be transitive.
+    //
+    // moments should either be an array of moment objects or an array, whose
+    // first element is an array of moment objects.
+    function pickBy(fn, moments) {
+        var res, i;
+        if (moments.length === 1 && isArray(moments[0])) {
+            moments = moments[0];
+        }
+        if (!moments.length) {
+            return createLocal();
+        }
+        res = moments[0];
+        for (i = 1; i < moments.length; ++i) {
+            if (!moments[i].isValid() || moments[i][fn](res)) {
+                res = moments[i];
+            }
+        }
+        return res;
+    }
+
+    // TODO: Use [].sort instead?
+    function min () {
+        var args = [].slice.call(arguments, 0);
+
+        return pickBy('isBefore', args);
+    }
+
+    function max () {
+        var args = [].slice.call(arguments, 0);
+
+        return pickBy('isAfter', args);
+    }
+
+    var now = function () {
+        return Date.now ? Date.now() : +(new Date());
+    };
+
+    var ordering = ['year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', 'millisecond'];
+
+    function isDurationValid(m) {
+        for (var key in m) {
+            if (!(indexOf.call(ordering, key) !== -1 && (m[key] == null || !isNaN(m[key])))) {
+                return false;
+            }
+        }
+
+        var unitHasDecimal = false;
+        for (var i = 0; i < ordering.length; ++i) {
+            if (m[ordering[i]]) {
+                if (unitHasDecimal) {
+                    return false; // only allow non-integers for smallest unit
+                }
+                if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {
+                    unitHasDecimal = true;
+                }
+            }
+        }
+
+        return true;
+    }
+
+    function isValid$1() {
+        return this._isValid;
+    }
+
+    function createInvalid$1() {
+        return createDuration(NaN);
+    }
+
+    function Duration (duration) {
+        var normalizedInput = normalizeObjectUnits(duration),
+            years = normalizedInput.year || 0,
+            quarters = normalizedInput.quarter || 0,
+            months = normalizedInput.month || 0,
+            weeks = normalizedInput.week || normalizedInput.isoWeek || 0,
+            days = normalizedInput.day || 0,
+            hours = normalizedInput.hour || 0,
+            minutes = normalizedInput.minute || 0,
+            seconds = normalizedInput.second || 0,
+            milliseconds = normalizedInput.millisecond || 0;
+
+        this._isValid = isDurationValid(normalizedInput);
+
+        // representation for dateAddRemove
+        this._milliseconds = +milliseconds +
+            seconds * 1e3 + // 1000
+            minutes * 6e4 + // 1000 * 60
+            hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978
+        // Because of dateAddRemove treats 24 hours as different from a
+        // day when working around DST, we need to store them separately
+        this._days = +days +
+            weeks * 7;
+        // It is impossible to translate months into days without knowing
+        // which months you are are talking about, so we have to store
+        // it separately.
+        this._months = +months +
+            quarters * 3 +
+            years * 12;
+
+        this._data = {};
+
+        this._locale = getLocale();
+
+        this._bubble();
+    }
+
+    function isDuration (obj) {
+        return obj instanceof Duration;
+    }
+
+    function absRound (number) {
+        if (number < 0) {
+            return Math.round(-1 * number) * -1;
+        } else {
+            return Math.round(number);
+        }
+    }
+
+    // FORMATTING
+
+    function offset (token, separator) {
+        addFormatToken(token, 0, 0, function () {
+            var offset = this.utcOffset();
+            var sign = '+';
+            if (offset < 0) {
+                offset = -offset;
+                sign = '-';
+            }
+            return sign + zeroFill(~~(offset / 60), 2) + separator + zeroFill(~~(offset) % 60, 2);
+        });
+    }
+
+    offset('Z', ':');
+    offset('ZZ', '');
+
+    // PARSING
+
+    addRegexToken('Z',  matchShortOffset);
+    addRegexToken('ZZ', matchShortOffset);
+    addParseToken(['Z', 'ZZ'], function (input, array, config) {
+        config._useUTC = true;
+        config._tzm = offsetFromString(matchShortOffset, input);
+    });
+
+    // HELPERS
+
+    // timezone chunker
+    // '+10:00' > ['10',  '00']
+    // '-1530'  > ['-15', '30']
+    var chunkOffset = /([\+\-]|\d\d)/gi;
+
+    function offsetFromString(matcher, string) {
+        var matches = (string || '').match(matcher);
+
+        if (matches === null) {
+            return null;
+        }
+
+        var chunk   = matches[matches.length - 1] || [];
+        var parts   = (chunk + '').match(chunkOffset) || ['-', 0, 0];
+        var minutes = +(parts[1] * 60) + toInt(parts[2]);
+
+        return minutes === 0 ?
+          0 :
+          parts[0] === '+' ? minutes : -minutes;
+    }
+
+    // Return a moment from input, that is local/utc/zone equivalent to model.
+    function cloneWithOffset(input, model) {
+        var res, diff;
+        if (model._isUTC) {
+            res = model.clone();
+            diff = (isMoment(input) || isDate(input) ? input.valueOf() : createLocal(input).valueOf()) - res.valueOf();
+            // Use low-level api, because this fn is low-level api.
+            res._d.setTime(res._d.valueOf() + diff);
+            hooks.updateOffset(res, false);
+            return res;
+        } else {
+            return createLocal(input).local();
+        }
+    }
+
+    function getDateOffset (m) {
+        // On Firefox.24 Date#getTimezoneOffset returns a floating point.
+        // https://github.com/moment/moment/pull/1871
+        return -Math.round(m._d.getTimezoneOffset() / 15) * 15;
+    }
+
+    // HOOKS
+
+    // This function will be called whenever a moment is mutated.
+    // It is intended to keep the offset in sync with the timezone.
+    hooks.updateOffset = function () {};
+
+    // MOMENTS
+
+    // keepLocalTime = true means only change the timezone, without
+    // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->
+    // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset
+    // +0200, so we adjust the time as needed, to be valid.
+    //
+    // Keeping the time actually adds/subtracts (one hour)
+    // from the actual represented time. That is why we call updateOffset
+    // a second time. In case it wants us to change the offset again
+    // _changeInProgress == true case, then we have to adjust, because
+    // there is no such time in the given timezone.
+    function getSetOffset (input, keepLocalTime, keepMinutes) {
+        var offset = this._offset || 0,
+            localAdjust;
+        if (!this.isValid()) {
+            return input != null ? this : NaN;
+        }
+        if (input != null) {
+            if (typeof input === 'string') {
+                input = offsetFromString(matchShortOffset, input);
+                if (input === null) {
+                    return this;
+                }
+            } else if (Math.abs(input) < 16 && !keepMinutes) {
+                input = input * 60;
+            }
+            if (!this._isUTC && keepLocalTime) {
+                localAdjust = getDateOffset(this);
+            }
+            this._offset = input;
+            this._isUTC = true;
+            if (localAdjust != null) {
+                this.add(localAdjust, 'm');
+            }
+            if (offset !== input) {
+                if (!keepLocalTime || this._changeInProgress) {
+                    addSubtract(this, createDuration(input - offset, 'm'), 1, false);
+                } else if (!this._changeInProgress) {
+                    this._changeInProgress = true;
+                    hooks.updateOffset(this, true);
+                    this._changeInProgress = null;
+                }
+            }
+            return this;
+        } else {
+            return this._isUTC ? offset : getDateOffset(this);
+        }
+    }
+
+    function getSetZone (input, keepLocalTime) {
+        if (input != null) {
+            if (typeof input !== 'string') {
+                input = -input;
+            }
+
+            this.utcOffset(input, keepLocalTime);
+
+            return this;
+        } else {
+            return -this.utcOffset();
+        }
+    }
+
+    function setOffsetToUTC (keepLocalTime) {
+        return this.utcOffset(0, keepLocalTime);
+    }
+
+    function setOffsetToLocal (keepLocalTime) {
+        if (this._isUTC) {
+            this.utcOffset(0, keepLocalTime);
+            this._isUTC = false;
+
+            if (keepLocalTime) {
+                this.subtract(getDateOffset(this), 'm');
+            }
+        }
+        return this;
+    }
+
+    function setOffsetToParsedOffset () {
+        if (this._tzm != null) {
+            this.utcOffset(this._tzm, false, true);
+        } else if (typeof this._i === 'string') {
+            var tZone = offsetFromString(matchOffset, this._i);
+            if (tZone != null) {
+                this.utcOffset(tZone);
+            }
+            else {
+                this.utcOffset(0, true);
+            }
+        }
+        return this;
+    }
+
+    function hasAlignedHourOffset (input) {
+        if (!this.isValid()) {
+            return false;
+        }
+        input = input ? createLocal(input).utcOffset() : 0;
+
+        return (this.utcOffset() - input) % 60 === 0;
+    }
+
+    function isDaylightSavingTime () {
+        return (
+            this.utcOffset() > this.clone().month(0).utcOffset() ||
+            this.utcOffset() > this.clone().month(5).utcOffset()
+        );
+    }
+
+    function isDaylightSavingTimeShifted () {
+        if (!isUndefined(this._isDSTShifted)) {
+            return this._isDSTShifted;
+        }
+
+        var c = {};
+
+        copyConfig(c, this);
+        c = prepareConfig(c);
+
+        if (c._a) {
+            var other = c._isUTC ? createUTC(c._a) : createLocal(c._a);
+            this._isDSTShifted = this.isValid() &&
+                compareArrays(c._a, other.toArray()) > 0;
+        } else {
+            this._isDSTShifted = false;
+        }
+
+        return this._isDSTShifted;
+    }
+
+    function isLocal () {
+        return this.isValid() ? !this._isUTC : false;
+    }
+
+    function isUtcOffset () {
+        return this.isValid() ? this._isUTC : false;
+    }
+
+    function isUtc () {
+        return this.isValid() ? this._isUTC && this._offset === 0 : false;
+    }
+
+    // ASP.NET json date format regex
+    var aspNetRegex = /^(\-|\+)?(?:(\d*)[. ])?(\d+)\:(\d+)(?:\:(\d+)(\.\d*)?)?$/;
+
+    // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html
+    // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere
+    // and further modified to allow for strings containing both week and day
+    var isoRegex = /^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;
+
+    function createDuration (input, key) {
+        var duration = input,
+            // matching against regexp is expensive, do it on demand
+            match = null,
+            sign,
+            ret,
+            diffRes;
+
+        if (isDuration(input)) {
+            duration = {
+                ms : input._milliseconds,
+                d  : input._days,
+                M  : input._months
+            };
+        } else if (isNumber(input)) {
+            duration = {};
+            if (key) {
+                duration[key] = input;
+            } else {
+                duration.milliseconds = input;
+            }
+        } else if (!!(match = aspNetRegex.exec(input))) {
+            sign = (match[1] === '-') ? -1 : 1;
+            duration = {
+                y  : 0,
+                d  : toInt(match[DATE])                         * sign,
+                h  : toInt(match[HOUR])                         * sign,
+                m  : toInt(match[MINUTE])                       * sign,
+                s  : toInt(match[SECOND])                       * sign,
+                ms : toInt(absRound(match[MILLISECOND] * 1000)) * sign // the millisecond decimal point is included in the match
+            };
+        } else if (!!(match = isoRegex.exec(input))) {
+            sign = (match[1] === '-') ? -1 : 1;
+            duration = {
+                y : parseIso(match[2], sign),
+                M : parseIso(match[3], sign),
+                w : parseIso(match[4], sign),
+                d : parseIso(match[5], sign),
+                h : parseIso(match[6], sign),
+                m : parseIso(match[7], sign),
+                s : parseIso(match[8], sign)
+            };
+        } else if (duration == null) {// checks for null or undefined
+            duration = {};
+        } else if (typeof duration === 'object' && ('from' in duration || 'to' in duration)) {
+            diffRes = momentsDifference(createLocal(duration.from), createLocal(duration.to));
+
+            duration = {};
+            duration.ms = diffRes.milliseconds;
+            duration.M = diffRes.months;
+        }
+
+        ret = new Duration(duration);
+
+        if (isDuration(input) && hasOwnProp(input, '_locale')) {
+            ret._locale = input._locale;
+        }
+
+        return ret;
+    }
+
+    createDuration.fn = Duration.prototype;
+    createDuration.invalid = createInvalid$1;
+
+    function parseIso (inp, sign) {
+        // We'd normally use ~~inp for this, but unfortunately it also
+        // converts floats to ints.
+        // inp may be undefined, so careful calling replace on it.
+        var res = inp && parseFloat(inp.replace(',', '.'));
+        // apply sign while we're at it
+        return (isNaN(res) ? 0 : res) * sign;
+    }
+
+    function positiveMomentsDifference(base, other) {
+        var res = {};
+
+        res.months = other.month() - base.month() +
+            (other.year() - base.year()) * 12;
+        if (base.clone().add(res.months, 'M').isAfter(other)) {
+            --res.months;
+        }
+
+        res.milliseconds = +other - +(base.clone().add(res.months, 'M'));
+
+        return res;
+    }
+
+    function momentsDifference(base, other) {
+        var res;
+        if (!(base.isValid() && other.isValid())) {
+            return {milliseconds: 0, months: 0};
+        }
+
+        other = cloneWithOffset(other, base);
+        if (base.isBefore(other)) {
+            res = positiveMomentsDifference(base, other);
+        } else {
+            res = positiveMomentsDifference(other, base);
+            res.milliseconds = -res.milliseconds;
+            res.months = -res.months;
+        }
+
+        return res;
+    }
+
+    // TODO: remove 'name' arg after deprecation is removed
+    function createAdder(direction, name) {
+        return function (val, period) {
+            var dur, tmp;
+            //invert the arguments, but complain about it
+            if (period !== null && !isNaN(+period)) {
+                deprecateSimple(name, 'moment().' + name  + '(period, number) is deprecated. Please use moment().' + name + '(number, period). ' +
+                'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.');
+                tmp = val; val = period; period = tmp;
+            }
+
+            val = typeof val === 'string' ? +val : val;
+            dur = createDuration(val, period);
+            addSubtract(this, dur, direction);
+            return this;
+        };
+    }
+
+    function addSubtract (mom, duration, isAdding, updateOffset) {
+        var milliseconds = duration._milliseconds,
+            days = absRound(duration._days),
+            months = absRound(duration._months);
+
+        if (!mom.isValid()) {
+            // No op
+            return;
+        }
+
+        updateOffset = updateOffset == null ? true : updateOffset;
+
+        if (months) {
+            setMonth(mom, get(mom, 'Month') + months * isAdding);
+        }
+        if (days) {
+            set$1(mom, 'Date', get(mom, 'Date') + days * isAdding);
+        }
+        if (milliseconds) {
+            mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);
+        }
+        if (updateOffset) {
+            hooks.updateOffset(mom, days || months);
+        }
+    }
+
+    var add      = createAdder(1, 'add');
+    var subtract = createAdder(-1, 'subtract');
+
+    function getCalendarFormat(myMoment, now) {
+        var diff = myMoment.diff(now, 'days', true);
+        return diff < -6 ? 'sameElse' :
+                diff < -1 ? 'lastWeek' :
+                diff < 0 ? 'lastDay' :
+                diff < 1 ? 'sameDay' :
+                diff < 2 ? 'nextDay' :
+                diff < 7 ? 'nextWeek' : 'sameElse';
+    }
+
+    function calendar$1 (time, formats) {
+        // We want to compare the start of today, vs this.
+        // Getting start-of-today depends on whether we're local/utc/offset or not.
+        var now = time || createLocal(),
+            sod = cloneWithOffset(now, this).startOf('day'),
+            format = hooks.calendarFormat(this, sod) || 'sameElse';
+
+        var output = formats && (isFunction(formats[format]) ? formats[format].call(this, now) : formats[format]);
+
+        return this.format(output || this.localeData().calendar(format, this, createLocal(now)));
+    }
+
+    function clone () {
+        return new Moment(this);
+    }
+
+    function isAfter (input, units) {
+        var localInput = isMoment(input) ? input : createLocal(input);
+        if (!(this.isValid() && localInput.isValid())) {
+            return false;
+        }
+        units = normalizeUnits(units) || 'millisecond';
+        if (units === 'millisecond') {
+            return this.valueOf() > localInput.valueOf();
+        } else {
+            return localInput.valueOf() < this.clone().startOf(units).valueOf();
+        }
+    }
+
+    function isBefore (input, units) {
+        var localInput = isMoment(input) ? input : createLocal(input);
+        if (!(this.isValid() && localInput.isValid())) {
+            return false;
+        }
+        units = normalizeUnits(units) || 'millisecond';
+        if (units === 'millisecond') {
+            return this.valueOf() < localInput.valueOf();
+        } else {
+            return this.clone().endOf(units).valueOf() < localInput.valueOf();
+        }
+    }
+
+    function isBetween (from, to, units, inclusivity) {
+        var localFrom = isMoment(from) ? from : createLocal(from),
+            localTo = isMoment(to) ? to : createLocal(to);
+        if (!(this.isValid() && localFrom.isValid() && localTo.isValid())) {
+            return false;
+        }
+        inclusivity = inclusivity || '()';
+        return (inclusivity[0] === '(' ? this.isAfter(localFrom, units) : !this.isBefore(localFrom, units)) &&
+            (inclusivity[1] === ')' ? this.isBefore(localTo, units) : !this.isAfter(localTo, units));
+    }
+
+    function isSame (input, units) {
+        var localInput = isMoment(input) ? input : createLocal(input),
+            inputMs;
+        if (!(this.isValid() && localInput.isValid())) {
+            return false;
+        }
+        units = normalizeUnits(units) || 'millisecond';
+        if (units === 'millisecond') {
+            return this.valueOf() === localInput.valueOf();
+        } else {
+            inputMs = localInput.valueOf();
+            return this.clone().startOf(units).valueOf() <= inputMs && inputMs <= this.clone().endOf(units).valueOf();
+        }
+    }
+
+    function isSameOrAfter (input, units) {
+        return this.isSame(input, units) || this.isAfter(input, units);
+    }
+
+    function isSameOrBefore (input, units) {
+        return this.isSame(input, units) || this.isBefore(input, units);
+    }
+
+    function diff (input, units, asFloat) {
+        var that,
+            zoneDelta,
+            output;
+
+        if (!this.isValid()) {
+            return NaN;
+        }
+
+        that = cloneWithOffset(input, this);
+
+        if (!that.isValid()) {
+            return NaN;
+        }
+
+        zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;
+
+        units = normalizeUnits(units);
+
+        switch (units) {
+            case 'year': output = monthDiff(this, that) / 12; break;
+            case 'month': output = monthDiff(this, that); break;
+            case 'quarter': output = monthDiff(this, that) / 3; break;
+            case 'second': output = (this - that) / 1e3; break; // 1000
+            case 'minute': output = (this - that) / 6e4; break; // 1000 * 60
+            case 'hour': output = (this - that) / 36e5; break; // 1000 * 60 * 60
+            case 'day': output = (this - that - zoneDelta) / 864e5; break; // 1000 * 60 * 60 * 24, negate dst
+            case 'week': output = (this - that - zoneDelta) / 6048e5; break; // 1000 * 60 * 60 * 24 * 7, negate dst
+            default: output = this - that;
+        }
+
+        return asFloat ? output : absFloor(output);
+    }
+
+    function monthDiff (a, b) {
+        // difference in months
+        var wholeMonthDiff = ((b.year() - a.year()) * 12) + (b.month() - a.month()),
+            // b is in (anchor - 1 month, anchor + 1 month)
+            anchor = a.clone().add(wholeMonthDiff, 'months'),
+            anchor2, adjust;
+
+        if (b - anchor < 0) {
+            anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');
+            // linear across the month
+            adjust = (b - anchor) / (anchor - anchor2);
+        } else {
+            anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');
+            // linear across the month
+            adjust = (b - anchor) / (anchor2 - anchor);
+        }
+
+        //check for negative zero, return zero if negative zero
+        return -(wholeMonthDiff + adjust) || 0;
+    }
+
+    hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';
+    hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';
+
+    function toString () {
+        return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');
+    }
+
+    function toISOString(keepOffset) {
+        if (!this.isValid()) {
+            return null;
+        }
+        var utc = keepOffset !== true;
+        var m = utc ? this.clone().utc() : this;
+        if (m.year() < 0 || m.year() > 9999) {
+            return formatMoment(m, utc ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ');
+        }
+        if (isFunction(Date.prototype.toISOString)) {
+            // native implementation is ~50x faster, use it when we can
+            if (utc) {
+                return this.toDate().toISOString();
+            } else {
+                return new Date(this.valueOf() + this.utcOffset() * 60 * 1000).toISOString().replace('Z', formatMoment(m, 'Z'));
+            }
+        }
+        return formatMoment(m, utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ');
+    }
+
+    /**
+     * Return a human readable representation of a moment that can
+     * also be evaluated to get a new moment which is the same
+     *
+     * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects
+     */
+    function inspect () {
+        if (!this.isValid()) {
+            return 'moment.invalid(/* ' + this._i + ' */)';
+        }
+        var func = 'moment';
+        var zone = '';
+        if (!this.isLocal()) {
+            func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';
+            zone = 'Z';
+        }
+        var prefix = '[' + func + '("]';
+        var year = (0 <= this.year() && this.year() <= 9999) ? 'YYYY' : 'YYYYYY';
+        var datetime = '-MM-DD[T]HH:mm:ss.SSS';
+        var suffix = zone + '[")]';
+
+        return this.format(prefix + year + datetime + suffix);
+    }
+
+    function format (inputString) {
+        if (!inputString) {
+            inputString = this.isUtc() ? hooks.defaultFormatUtc : hooks.defaultFormat;
+        }
+        var output = formatMoment(this, inputString);
+        return this.localeData().postformat(output);
+    }
+
+    function from (time, withoutSuffix) {
+        if (this.isValid() &&
+                ((isMoment(time) && time.isValid()) ||
+                 createLocal(time).isValid())) {
+            return createDuration({to: this, from: time}).locale(this.locale()).humanize(!withoutSuffix);
+        } else {
+            return this.localeData().invalidDate();
+        }
+    }
+
+    function fromNow (withoutSuffix) {
+        return this.from(createLocal(), withoutSuffix);
+    }
+
+    function to (time, withoutSuffix) {
+        if (this.isValid() &&
+                ((isMoment(time) && time.isValid()) ||
+                 createLocal(time).isValid())) {
+            return createDuration({from: this, to: time}).locale(this.locale()).humanize(!withoutSuffix);
+        } else {
+            return this.localeData().invalidDate();
+        }
+    }
+
+    function toNow (withoutSuffix) {
+        return this.to(createLocal(), withoutSuffix);
+    }
+
+    // If passed a locale key, it will set the locale for this
+    // instance.  Otherwise, it will return the locale configuration
+    // variables for this instance.
+    function locale (key) {
+        var newLocaleData;
+
+        if (key === undefined) {
+            return this._locale._abbr;
+        } else {
+            newLocaleData = getLocale(key);
+            if (newLocaleData != null) {
+                this._locale = newLocaleData;
+            }
+            return this;
+        }
+    }
+
+    var lang = deprecate(
+        'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',
+        function (key) {
+            if (key === undefined) {
+                return this.localeData();
+            } else {
+                return this.locale(key);
+            }
+        }
+    );
+
+    function localeData () {
+        return this._locale;
+    }
+
+    var MS_PER_SECOND = 1000;
+    var MS_PER_MINUTE = 60 * MS_PER_SECOND;
+    var MS_PER_HOUR = 60 * MS_PER_MINUTE;
+    var MS_PER_400_YEARS = (365 * 400 + 97) * 24 * MS_PER_HOUR;
+
+    // actual modulo - handles negative numbers (for dates before 1970):
+    function mod$1(dividend, divisor) {
+        return (dividend % divisor + divisor) % divisor;
+    }
+
+    function localStartOfDate(y, m, d) {
+        // the date constructor remaps years 0-99 to 1900-1999
+        if (y < 100 && y >= 0) {
+            // preserve leap years using a full 400 year cycle, then reset
+            return new Date(y + 400, m, d) - MS_PER_400_YEARS;
+        } else {
+            return new Date(y, m, d).valueOf();
+        }
+    }
+
+    function utcStartOfDate(y, m, d) {
+        // Date.UTC remaps years 0-99 to 1900-1999
+        if (y < 100 && y >= 0) {
+            // preserve leap years using a full 400 year cycle, then reset
+            return Date.UTC(y + 400, m, d) - MS_PER_400_YEARS;
+        } else {
+            return Date.UTC(y, m, d);
+        }
+    }
+
+    function startOf (units) {
+        var time;
+        units = normalizeUnits(units);
+        if (units === undefined || units === 'millisecond' || !this.isValid()) {
+            return this;
+        }
+
+        var startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;
+
+        switch (units) {
+            case 'year':
+                time = startOfDate(this.year(), 0, 1);
+                break;
+            case 'quarter':
+                time = startOfDate(this.year(), this.month() - this.month() % 3, 1);
+                break;
+            case 'month':
+                time = startOfDate(this.year(), this.month(), 1);
+                break;
+            case 'week':
+                time = startOfDate(this.year(), this.month(), this.date() - this.weekday());
+                break;
+            case 'isoWeek':
+                time = startOfDate(this.year(), this.month(), this.date() - (this.isoWeekday() - 1));
+                break;
+            case 'day':
+            case 'date':
+                time = startOfDate(this.year(), this.month(), this.date());
+                break;
+            case 'hour':
+                time = this._d.valueOf();
+                time -= mod$1(time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE), MS_PER_HOUR);
+                break;
+            case 'minute':
+                time = this._d.valueOf();
+                time -= mod$1(time, MS_PER_MINUTE);
+                break;
+            case 'second':
+                time = this._d.valueOf();
+                time -= mod$1(time, MS_PER_SECOND);
+                break;
+        }
+
+        this._d.setTime(time);
+        hooks.updateOffset(this, true);
+        return this;
+    }
+
+    function endOf (units) {
+        var time;
+        units = normalizeUnits(units);
+        if (units === undefined || units === 'millisecond' || !this.isValid()) {
+            return this;
+        }
+
+        var startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;
+
+        switch (units) {
+            case 'year':
+                time = startOfDate(this.year() + 1, 0, 1) - 1;
+                break;
+            case 'quarter':
+                time = startOfDate(this.year(), this.month() - this.month() % 3 + 3, 1) - 1;
+                break;
+            case 'month':
+                time = startOfDate(this.year(), this.month() + 1, 1) - 1;
+                break;
+            case 'week':
+                time = startOfDate(this.year(), this.month(), this.date() - this.weekday() + 7) - 1;
+                break;
+            case 'isoWeek':
+                time = startOfDate(this.year(), this.month(), this.date() - (this.isoWeekday() - 1) + 7) - 1;
+                break;
+            case 'day':
+            case 'date':
+                time = startOfDate(this.year(), this.month(), this.date() + 1) - 1;
+                break;
+            case 'hour':
+                time = this._d.valueOf();
+                time += MS_PER_HOUR - mod$1(time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE), MS_PER_HOUR) - 1;
+                break;
+            case 'minute':
+                time = this._d.valueOf();
+                time += MS_PER_MINUTE - mod$1(time, MS_PER_MINUTE) - 1;
+                break;
+            case 'second':
+                time = this._d.valueOf();
+                time += MS_PER_SECOND - mod$1(time, MS_PER_SECOND) - 1;
+                break;
+        }
+
+        this._d.setTime(time);
+        hooks.updateOffset(this, true);
+        return this;
+    }
+
+    function valueOf () {
+        return this._d.valueOf() - ((this._offset || 0) * 60000);
+    }
+
+    function unix () {
+        return Math.floor(this.valueOf() / 1000);
+    }
+
+    function toDate () {
+        return new Date(this.valueOf());
+    }
+
+    function toArray () {
+        var m = this;
+        return [m.year(), m.month(), m.date(), m.hour(), m.minute(), m.second(), m.millisecond()];
+    }
+
+    function toObject () {
+        var m = this;
+        return {
+            years: m.year(),
+            months: m.month(),
+            date: m.date(),
+            hours: m.hours(),
+            minutes: m.minutes(),
+            seconds: m.seconds(),
+            milliseconds: m.milliseconds()
+        };
+    }
+
+    function toJSON () {
+        // new Date(NaN).toJSON() === null
+        return this.isValid() ? this.toISOString() : null;
+    }
+
+    function isValid$2 () {
+        return isValid(this);
+    }
+
+    function parsingFlags () {
+        return extend({}, getParsingFlags(this));
+    }
+
+    function invalidAt () {
+        return getParsingFlags(this).overflow;
+    }
+
+    function creationData() {
+        return {
+            input: this._i,
+            format: this._f,
+            locale: this._locale,
+            isUTC: this._isUTC,
+            strict: this._strict
+        };
+    }
+
+    // FORMATTING
+
+    addFormatToken(0, ['gg', 2], 0, function () {
+        return this.weekYear() % 100;
+    });
+
+    addFormatToken(0, ['GG', 2], 0, function () {
+        return this.isoWeekYear() % 100;
+    });
+
+    function addWeekYearFormatToken (token, getter) {
+        addFormatToken(0, [token, token.length], 0, getter);
+    }
+
+    addWeekYearFormatToken('gggg',     'weekYear');
+    addWeekYearFormatToken('ggggg',    'weekYear');
+    addWeekYearFormatToken('GGGG',  'isoWeekYear');
+    addWeekYearFormatToken('GGGGG', 'isoWeekYear');
+
+    // ALIASES
+
+    addUnitAlias('weekYear', 'gg');
+    addUnitAlias('isoWeekYear', 'GG');
+
+    // PRIORITY
+
+    addUnitPriority('weekYear', 1);
+    addUnitPriority('isoWeekYear', 1);
+
+
+    // PARSING
+
+    addRegexToken('G',      matchSigned);
+    addRegexToken('g',      matchSigned);
+    addRegexToken('GG',     match1to2, match2);
+    addRegexToken('gg',     match1to2, match2);
+    addRegexToken('GGGG',   match1to4, match4);
+    addRegexToken('gggg',   match1to4, match4);
+    addRegexToken('GGGGG',  match1to6, match6);
+    addRegexToken('ggggg',  match1to6, match6);
+
+    addWeekParseToken(['gggg', 'ggggg', 'GGGG', 'GGGGG'], function (input, week, config, token) {
+        week[token.substr(0, 2)] = toInt(input);
+    });
+
+    addWeekParseToken(['gg', 'GG'], function (input, week, config, token) {
+        week[token] = hooks.parseTwoDigitYear(input);
+    });
+
+    // MOMENTS
+
+    function getSetWeekYear (input) {
+        return getSetWeekYearHelper.call(this,
+                input,
+                this.week(),
+                this.weekday(),
+                this.localeData()._week.dow,
+                this.localeData()._week.doy);
+    }
+
+    function getSetISOWeekYear (input) {
+        return getSetWeekYearHelper.call(this,
+                input, this.isoWeek(), this.isoWeekday(), 1, 4);
+    }
+
+    function getISOWeeksInYear () {
+        return weeksInYear(this.year(), 1, 4);
+    }
+
+    function getWeeksInYear () {
+        var weekInfo = this.localeData()._week;
+        return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);
+    }
+
+    function getSetWeekYearHelper(input, week, weekday, dow, doy) {
+        var weeksTarget;
+        if (input == null) {
+            return weekOfYear(this, dow, doy).year;
+        } else {
+            weeksTarget = weeksInYear(input, dow, doy);
+            if (week > weeksTarget) {
+                week = weeksTarget;
+            }
+            return setWeekAll.call(this, input, week, weekday, dow, doy);
+        }
+    }
+
+    function setWeekAll(weekYear, week, weekday, dow, doy) {
+        var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),
+            date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);
+
+        this.year(date.getUTCFullYear());
+        this.month(date.getUTCMonth());
+        this.date(date.getUTCDate());
+        return this;
+    }
+
+    // FORMATTING
+
+    addFormatToken('Q', 0, 'Qo', 'quarter');
+
+    // ALIASES
+
+    addUnitAlias('quarter', 'Q');
+
+    // PRIORITY
+
+    addUnitPriority('quarter', 7);
+
+    // PARSING
+
+    addRegexToken('Q', match1);
+    addParseToken('Q', function (input, array) {
+        array[MONTH] = (toInt(input) - 1) * 3;
+    });
+
+    // MOMENTS
+
+    function getSetQuarter (input) {
+        return input == null ? Math.ceil((this.month() + 1) / 3) : this.month((input - 1) * 3 + this.month() % 3);
+    }
+
+    // FORMATTING
+
+    addFormatToken('D', ['DD', 2], 'Do', 'date');
+
+    // ALIASES
+
+    addUnitAlias('date', 'D');
+
+    // PRIORITY
+    addUnitPriority('date', 9);
+
+    // PARSING
+
+    addRegexToken('D',  match1to2);
+    addRegexToken('DD', match1to2, match2);
+    addRegexToken('Do', function (isStrict, locale) {
+        // TODO: Remove "ordinalParse" fallback in next major release.
+        return isStrict ?
+          (locale._dayOfMonthOrdinalParse || locale._ordinalParse) :
+          locale._dayOfMonthOrdinalParseLenient;
+    });
+
+    addParseToken(['D', 'DD'], DATE);
+    addParseToken('Do', function (input, array) {
+        array[DATE] = toInt(input.match(match1to2)[0]);
+    });
+
+    // MOMENTS
+
+    var getSetDayOfMonth = makeGetSet('Date', true);
+
+    // FORMATTING
+
+    addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');
+
+    // ALIASES
+
+    addUnitAlias('dayOfYear', 'DDD');
+
+    // PRIORITY
+    addUnitPriority('dayOfYear', 4);
+
+    // PARSING
+
+    addRegexToken('DDD',  match1to3);
+    addRegexToken('DDDD', match3);
+    addParseToken(['DDD', 'DDDD'], function (input, array, config) {
+        config._dayOfYear = toInt(input);
+    });
+
+    // HELPERS
+
+    // MOMENTS
+
+    function getSetDayOfYear (input) {
+        var dayOfYear = Math.round((this.clone().startOf('day') - this.clone().startOf('year')) / 864e5) + 1;
+        return input == null ? dayOfYear : this.add((input - dayOfYear), 'd');
+    }
+
+    // FORMATTING
+
+    addFormatToken('m', ['mm', 2], 0, 'minute');
+
+    // ALIASES
+
+    addUnitAlias('minute', 'm');
+
+    // PRIORITY
+
+    addUnitPriority('minute', 14);
+
+    // PARSING
+
+    addRegexToken('m',  match1to2);
+    addRegexToken('mm', match1to2, match2);
+    addParseToken(['m', 'mm'], MINUTE);
+
+    // MOMENTS
+
+    var getSetMinute = makeGetSet('Minutes', false);
+
+    // FORMATTING
+
+    addFormatToken('s', ['ss', 2], 0, 'second');
+
+    // ALIASES
+
+    addUnitAlias('second', 's');
+
+    // PRIORITY
+
+    addUnitPriority('second', 15);
+
+    // PARSING
+
+    addRegexToken('s',  match1to2);
+    addRegexToken('ss', match1to2, match2);
+    addParseToken(['s', 'ss'], SECOND);
+
+    // MOMENTS
+
+    var getSetSecond = makeGetSet('Seconds', false);
+
+    // FORMATTING
+
+    addFormatToken('S', 0, 0, function () {
+        return ~~(this.millisecond() / 100);
+    });
+
+    addFormatToken(0, ['SS', 2], 0, function () {
+        return ~~(this.millisecond() / 10);
+    });
+
+    addFormatToken(0, ['SSS', 3], 0, 'millisecond');
+    addFormatToken(0, ['SSSS', 4], 0, function () {
+        return this.millisecond() * 10;
+    });
+    addFormatToken(0, ['SSSSS', 5], 0, function () {
+        return this.millisecond() * 100;
+    });
+    addFormatToken(0, ['SSSSSS', 6], 0, function () {
+        return this.millisecond() * 1000;
+    });
+    addFormatToken(0, ['SSSSSSS', 7], 0, function () {
+        return this.millisecond() * 10000;
+    });
+    addFormatToken(0, ['SSSSSSSS', 8], 0, function () {
+        return this.millisecond() * 100000;
+    });
+    addFormatToken(0, ['SSSSSSSSS', 9], 0, function () {
+        return this.millisecond() * 1000000;
+    });
+
+
+    // ALIASES
+
+    addUnitAlias('millisecond', 'ms');
+
+    // PRIORITY
+
+    addUnitPriority('millisecond', 16);
+
+    // PARSING
+
+    addRegexToken('S',    match1to3, match1);
+    addRegexToken('SS',   match1to3, match2);
+    addRegexToken('SSS',  match1to3, match3);
+
+    var token;
+    for (token = 'SSSS'; token.length <= 9; token += 'S') {
+        addRegexToken(token, matchUnsigned);
+    }
+
+    function parseMs(input, array) {
+        array[MILLISECOND] = toInt(('0.' + input) * 1000);
+    }
+
+    for (token = 'S'; token.length <= 9; token += 'S') {
+        addParseToken(token, parseMs);
+    }
+    // MOMENTS
+
+    var getSetMillisecond = makeGetSet('Milliseconds', false);
+
+    // FORMATTING
+
+    addFormatToken('z',  0, 0, 'zoneAbbr');
+    addFormatToken('zz', 0, 0, 'zoneName');
+
+    // MOMENTS
+
+    function getZoneAbbr () {
+        return this._isUTC ? 'UTC' : '';
+    }
+
+    function getZoneName () {
+        return this._isUTC ? 'Coordinated Universal Time' : '';
+    }
+
+    var proto = Moment.prototype;
+
+    proto.add               = add;
+    proto.calendar          = calendar$1;
+    proto.clone             = clone;
+    proto.diff              = diff;
+    proto.endOf             = endOf;
+    proto.format            = format;
+    proto.from              = from;
+    proto.fromNow           = fromNow;
+    proto.to                = to;
+    proto.toNow             = toNow;
+    proto.get               = stringGet;
+    proto.invalidAt         = invalidAt;
+    proto.isAfter           = isAfter;
+    proto.isBefore          = isBefore;
+    proto.isBetween         = isBetween;
+    proto.isSame            = isSame;
+    proto.isSameOrAfter     = isSameOrAfter;
+    proto.isSameOrBefore    = isSameOrBefore;
+    proto.isValid           = isValid$2;
+    proto.lang              = lang;
+    proto.locale            = locale;
+    proto.localeData        = localeData;
+    proto.max               = prototypeMax;
+    proto.min               = prototypeMin;
+    proto.parsingFlags      = parsingFlags;
+    proto.set               = stringSet;
+    proto.startOf           = startOf;
+    proto.subtract          = subtract;
+    proto.toArray           = toArray;
+    proto.toObject          = toObject;
+    proto.toDate            = toDate;
+    proto.toISOString       = toISOString;
+    proto.inspect           = inspect;
+    proto.toJSON            = toJSON;
+    proto.toString          = toString;
+    proto.unix              = unix;
+    proto.valueOf           = valueOf;
+    proto.creationData      = creationData;
+    proto.year       = getSetYear;
+    proto.isLeapYear = getIsLeapYear;
+    proto.weekYear    = getSetWeekYear;
+    proto.isoWeekYear = getSetISOWeekYear;
+    proto.quarter = proto.quarters = getSetQuarter;
+    proto.month       = getSetMonth;
+    proto.daysInMonth = getDaysInMonth;
+    proto.week           = proto.weeks        = getSetWeek;
+    proto.isoWeek        = proto.isoWeeks     = getSetISOWeek;
+    proto.weeksInYear    = getWeeksInYear;
+    proto.isoWeeksInYear = getISOWeeksInYear;
+    proto.date       = getSetDayOfMonth;
+    proto.day        = proto.days             = getSetDayOfWeek;
+    proto.weekday    = getSetLocaleDayOfWeek;
+    proto.isoWeekday = getSetISODayOfWeek;
+    proto.dayOfYear  = getSetDayOfYear;
+    proto.hour = proto.hours = getSetHour;
+    proto.minute = proto.minutes = getSetMinute;
+    proto.second = proto.seconds = getSetSecond;
+    proto.millisecond = proto.milliseconds = getSetMillisecond;
+    proto.utcOffset            = getSetOffset;
+    proto.utc                  = setOffsetToUTC;
+    proto.local                = setOffsetToLocal;
+    proto.parseZone            = setOffsetToParsedOffset;
+    proto.hasAlignedHourOffset = hasAlignedHourOffset;
+    proto.isDST                = isDaylightSavingTime;
+    proto.isLocal              = isLocal;
+    proto.isUtcOffset          = isUtcOffset;
+    proto.isUtc                = isUtc;
+    proto.isUTC                = isUtc;
+    proto.zoneAbbr = getZoneAbbr;
+    proto.zoneName = getZoneName;
+    proto.dates  = deprecate('dates accessor is deprecated. Use date instead.', getSetDayOfMonth);
+    proto.months = deprecate('months accessor is deprecated. Use month instead', getSetMonth);
+    proto.years  = deprecate('years accessor is deprecated. Use year instead', getSetYear);
+    proto.zone   = deprecate('moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/', getSetZone);
+    proto.isDSTShifted = deprecate('isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information', isDaylightSavingTimeShifted);
+
+    function createUnix (input) {
+        return createLocal(input * 1000);
+    }
+
+    function createInZone () {
+        return createLocal.apply(null, arguments).parseZone();
+    }
+
+    function preParsePostFormat (string) {
+        return string;
+    }
+
+    var proto$1 = Locale.prototype;
+
+    proto$1.calendar        = calendar;
+    proto$1.longDateFormat  = longDateFormat;
+    proto$1.invalidDate     = invalidDate;
+    proto$1.ordinal         = ordinal;
+    proto$1.preparse        = preParsePostFormat;
+    proto$1.postformat      = preParsePostFormat;
+    proto$1.relativeTime    = relativeTime;
+    proto$1.pastFuture      = pastFuture;
+    proto$1.set             = set;
+
+    proto$1.months            =        localeMonths;
+    proto$1.monthsShort       =        localeMonthsShort;
+    proto$1.monthsParse       =        localeMonthsParse;
+    proto$1.monthsRegex       = monthsRegex;
+    proto$1.monthsShortRegex  = monthsShortRegex;
+    proto$1.week = localeWeek;
+    proto$1.firstDayOfYear = localeFirstDayOfYear;
+    proto$1.firstDayOfWeek = localeFirstDayOfWeek;
+
+    proto$1.weekdays       =        localeWeekdays;
+    proto$1.weekdaysMin    =        localeWeekdaysMin;
+    proto$1.weekdaysShort  =        localeWeekdaysShort;
+    proto$1.weekdaysParse  =        localeWeekdaysParse;
+
+    proto$1.weekdaysRegex       =        weekdaysRegex;
+    proto$1.weekdaysShortRegex  =        weekdaysShortRegex;
+    proto$1.weekdaysMinRegex    =        weekdaysMinRegex;
+
+    proto$1.isPM = localeIsPM;
+    proto$1.meridiem = localeMeridiem;
+
+    function get$1 (format, index, field, setter) {
+        var locale = getLocale();
+        var utc = createUTC().set(setter, index);
+        return locale[field](utc, format);
+    }
+
+    function listMonthsImpl (format, index, field) {
+        if (isNumber(format)) {
+            index = format;
+            format = undefined;
+        }
+
+        format = format || '';
+
+        if (index != null) {
+            return get$1(format, index, field, 'month');
+        }
+
+        var i;
+        var out = [];
+        for (i = 0; i < 12; i++) {
+            out[i] = get$1(format, i, field, 'month');
+        }
+        return out;
+    }
+
+    // ()
+    // (5)
+    // (fmt, 5)
+    // (fmt)
+    // (true)
+    // (true, 5)
+    // (true, fmt, 5)
+    // (true, fmt)
+    function listWeekdaysImpl (localeSorted, format, index, field) {
+        if (typeof localeSorted === 'boolean') {
+            if (isNumber(format)) {
+                index = format;
+                format = undefined;
+            }
+
+            format = format || '';
+        } else {
+            format = localeSorted;
+            index = format;
+            localeSorted = false;
+
+            if (isNumber(format)) {
+                index = format;
+                format = undefined;
+            }
+
+            format = format || '';
+        }
+
+        var locale = getLocale(),
+            shift = localeSorted ? locale._week.dow : 0;
+
+        if (index != null) {
+            return get$1(format, (index + shift) % 7, field, 'day');
+        }
+
+        var i;
+        var out = [];
+        for (i = 0; i < 7; i++) {
+            out[i] = get$1(format, (i + shift) % 7, field, 'day');
+        }
+        return out;
+    }
+
+    function listMonths (format, index) {
+        return listMonthsImpl(format, index, 'months');
+    }
+
+    function listMonthsShort (format, index) {
+        return listMonthsImpl(format, index, 'monthsShort');
+    }
+
+    function listWeekdays (localeSorted, format, index) {
+        return listWeekdaysImpl(localeSorted, format, index, 'weekdays');
+    }
+
+    function listWeekdaysShort (localeSorted, format, index) {
+        return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');
+    }
+
+    function listWeekdaysMin (localeSorted, format, index) {
+        return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');
+    }
+
+    getSetGlobalLocale('en', {
+        dayOfMonthOrdinalParse: /\d{1,2}(th|st|nd|rd)/,
+        ordinal : function (number) {
+            var b = number % 10,
+                output = (toInt(number % 100 / 10) === 1) ? 'th' :
+                (b === 1) ? 'st' :
+                (b === 2) ? 'nd' :
+                (b === 3) ? 'rd' : 'th';
+            return number + output;
+        }
+    });
+
+    // Side effect imports
+
+    hooks.lang = deprecate('moment.lang is deprecated. Use moment.locale instead.', getSetGlobalLocale);
+    hooks.langData = deprecate('moment.langData is deprecated. Use moment.localeData instead.', getLocale);
+
+    var mathAbs = Math.abs;
+
+    function abs () {
+        var data           = this._data;
+
+        this._milliseconds = mathAbs(this._milliseconds);
+        this._days         = mathAbs(this._days);
+        this._months       = mathAbs(this._months);
+
+        data.milliseconds  = mathAbs(data.milliseconds);
+        data.seconds       = mathAbs(data.seconds);
+        data.minutes       = mathAbs(data.minutes);
+        data.hours         = mathAbs(data.hours);
+        data.months        = mathAbs(data.months);
+        data.years         = mathAbs(data.years);
+
+        return this;
+    }
+
+    function addSubtract$1 (duration, input, value, direction) {
+        var other = createDuration(input, value);
+
+        duration._milliseconds += direction * other._milliseconds;
+        duration._days         += direction * other._days;
+        duration._months       += direction * other._months;
+
+        return duration._bubble();
+    }
+
+    // supports only 2.0-style add(1, 's') or add(duration)
+    function add$1 (input, value) {
+        return addSubtract$1(this, input, value, 1);
+    }
+
+    // supports only 2.0-style subtract(1, 's') or subtract(duration)
+    function subtract$1 (input, value) {
+        return addSubtract$1(this, input, value, -1);
+    }
+
+    function absCeil (number) {
+        if (number < 0) {
+            return Math.floor(number);
+        } else {
+            return Math.ceil(number);
+        }
+    }
+
+    function bubble () {
+        var milliseconds = this._milliseconds;
+        var days         = this._days;
+        var months       = this._months;
+        var data         = this._data;
+        var seconds, minutes, hours, years, monthsFromDays;
+
+        // if we have a mix of positive and negative values, bubble down first
+        // check: https://github.com/moment/moment/issues/2166
+        if (!((milliseconds >= 0 && days >= 0 && months >= 0) ||
+                (milliseconds <= 0 && days <= 0 && months <= 0))) {
+            milliseconds += absCeil(monthsToDays(months) + days) * 864e5;
+            days = 0;
+            months = 0;
+        }
+
+        // The following code bubbles up values, see the tests for
+        // examples of what that means.
+        data.milliseconds = milliseconds % 1000;
+
+        seconds           = absFloor(milliseconds / 1000);
+        data.seconds      = seconds % 60;
+
+        minutes           = absFloor(seconds / 60);
+        data.minutes      = minutes % 60;
+
+        hours             = absFloor(minutes / 60);
+        data.hours        = hours % 24;
+
+        days += absFloor(hours / 24);
+
+        // convert days to months
+        monthsFromDays = absFloor(daysToMonths(days));
+        months += monthsFromDays;
+        days -= absCeil(monthsToDays(monthsFromDays));
+
+        // 12 months -> 1 year
+        years = absFloor(months / 12);
+        months %= 12;
+
+        data.days   = days;
+        data.months = months;
+        data.years  = years;
+
+        return this;
+    }
+
+    function daysToMonths (days) {
+        // 400 years have 146097 days (taking into account leap year rules)
+        // 400 years have 12 months === 4800
+        return days * 4800 / 146097;
+    }
+
+    function monthsToDays (months) {
+        // the reverse of daysToMonths
+        return months * 146097 / 4800;
+    }
+
+    function as (units) {
+        if (!this.isValid()) {
+            return NaN;
+        }
+        var days;
+        var months;
+        var milliseconds = this._milliseconds;
+
+        units = normalizeUnits(units);
+
+        if (units === 'month' || units === 'quarter' || units === 'year') {
+            days = this._days + milliseconds / 864e5;
+            months = this._months + daysToMonths(days);
+            switch (units) {
+                case 'month':   return months;
+                case 'quarter': return months / 3;
+                case 'year':    return months / 12;
+            }
+        } else {
+            // handle milliseconds separately because of floating point math errors (issue #1867)
+            days = this._days + Math.round(monthsToDays(this._months));
+            switch (units) {
+                case 'week'   : return days / 7     + milliseconds / 6048e5;
+                case 'day'    : return days         + milliseconds / 864e5;
+                case 'hour'   : return days * 24    + milliseconds / 36e5;
+                case 'minute' : return days * 1440  + milliseconds / 6e4;
+                case 'second' : return days * 86400 + milliseconds / 1000;
+                // Math.floor prevents floating point math errors here
+                case 'millisecond': return Math.floor(days * 864e5) + milliseconds;
+                default: throw new Error('Unknown unit ' + units);
+            }
+        }
+    }
+
+    // TODO: Use this.as('ms')?
+    function valueOf$1 () {
+        if (!this.isValid()) {
+            return NaN;
+        }
+        return (
+            this._milliseconds +
+            this._days * 864e5 +
+            (this._months % 12) * 2592e6 +
+            toInt(this._months / 12) * 31536e6
+        );
+    }
+
+    function makeAs (alias) {
+        return function () {
+            return this.as(alias);
+        };
+    }
+
+    var asMilliseconds = makeAs('ms');
+    var asSeconds      = makeAs('s');
+    var asMinutes      = makeAs('m');
+    var asHours        = makeAs('h');
+    var asDays         = makeAs('d');
+    var asWeeks        = makeAs('w');
+    var asMonths       = makeAs('M');
+    var asQuarters     = makeAs('Q');
+    var asYears        = makeAs('y');
+
+    function clone$1 () {
+        return createDuration(this);
+    }
+
+    function get$2 (units) {
+        units = normalizeUnits(units);
+        return this.isValid() ? this[units + 's']() : NaN;
+    }
+
+    function makeGetter(name) {
+        return function () {
+            return this.isValid() ? this._data[name] : NaN;
+        };
+    }
+
+    var milliseconds = makeGetter('milliseconds');
+    var seconds      = makeGetter('seconds');
+    var minutes      = makeGetter('minutes');
+    var hours        = makeGetter('hours');
+    var days         = makeGetter('days');
+    var months       = makeGetter('months');
+    var years        = makeGetter('years');
+
+    function weeks () {
+        return absFloor(this.days() / 7);
+    }
+
+    var round = Math.round;
+    var thresholds = {
+        ss: 44,         // a few seconds to seconds
+        s : 45,         // seconds to minute
+        m : 45,         // minutes to hour
+        h : 22,         // hours to day
+        d : 26,         // days to month
+        M : 11          // months to year
+    };
+
+    // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize
+    function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {
+        return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);
+    }
+
+    function relativeTime$1 (posNegDuration, withoutSuffix, locale) {
+        var duration = createDuration(posNegDuration).abs();
+        var seconds  = round(duration.as('s'));
+        var minutes  = round(duration.as('m'));
+        var hours    = round(duration.as('h'));
+        var days     = round(duration.as('d'));
+        var months   = round(duration.as('M'));
+        var years    = round(duration.as('y'));
+
+        var a = seconds <= thresholds.ss && ['s', seconds]  ||
+                seconds < thresholds.s   && ['ss', seconds] ||
+                minutes <= 1             && ['m']           ||
+                minutes < thresholds.m   && ['mm', minutes] ||
+                hours   <= 1             && ['h']           ||
+                hours   < thresholds.h   && ['hh', hours]   ||
+                days    <= 1             && ['d']           ||
+                days    < thresholds.d   && ['dd', days]    ||
+                months  <= 1             && ['M']           ||
+                months  < thresholds.M   && ['MM', months]  ||
+                years   <= 1             && ['y']           || ['yy', years];
+
+        a[2] = withoutSuffix;
+        a[3] = +posNegDuration > 0;
+        a[4] = locale;
+        return substituteTimeAgo.apply(null, a);
+    }
+
+    // This function allows you to set the rounding function for relative time strings
+    function getSetRelativeTimeRounding (roundingFunction) {
+        if (roundingFunction === undefined) {
+            return round;
+        }
+        if (typeof(roundingFunction) === 'function') {
+            round = roundingFunction;
+            return true;
+        }
+        return false;
+    }
+
+    // This function allows you to set a threshold for relative time strings
+    function getSetRelativeTimeThreshold (threshold, limit) {
+        if (thresholds[threshold] === undefined) {
+            return false;
+        }
+        if (limit === undefined) {
+            return thresholds[threshold];
+        }
+        thresholds[threshold] = limit;
+        if (threshold === 's') {
+            thresholds.ss = limit - 1;
+        }
+        return true;
+    }
+
+    function humanize (withSuffix) {
+        if (!this.isValid()) {
+            return this.localeData().invalidDate();
+        }
+
+        var locale = this.localeData();
+        var output = relativeTime$1(this, !withSuffix, locale);
+
+        if (withSuffix) {
+            output = locale.pastFuture(+this, output);
+        }
+
+        return locale.postformat(output);
+    }
+
+    var abs$1 = Math.abs;
+
+    function sign(x) {
+        return ((x > 0) - (x < 0)) || +x;
+    }
+
+    function toISOString$1() {
+        // for ISO strings we do not use the normal bubbling rules:
+        //  * milliseconds bubble up until they become hours
+        //  * days do not bubble at all
+        //  * months bubble up until they become years
+        // This is because there is no context-free conversion between hours and days
+        // (think of clock changes)
+        // and also not between days and months (28-31 days per month)
+        if (!this.isValid()) {
+            return this.localeData().invalidDate();
+        }
+
+        var seconds = abs$1(this._milliseconds) / 1000;
+        var days         = abs$1(this._days);
+        var months       = abs$1(this._months);
+        var minutes, hours, years;
+
+        // 3600 seconds -> 60 minutes -> 1 hour
+        minutes           = absFloor(seconds / 60);
+        hours             = absFloor(minutes / 60);
+        seconds %= 60;
+        minutes %= 60;
+
+        // 12 months -> 1 year
+        years  = absFloor(months / 12);
+        months %= 12;
+
+
+        // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js
+        var Y = years;
+        var M = months;
+        var D = days;
+        var h = hours;
+        var m = minutes;
+        var s = seconds ? seconds.toFixed(3).replace(/\.?0+$/, '') : '';
+        var total = this.asSeconds();
+
+        if (!total) {
+            // this is the same as C#'s (Noda) and python (isodate)...
+            // but not other JS (goog.date)
+            return 'P0D';
+        }
+
+        var totalSign = total < 0 ? '-' : '';
+        var ymSign = sign(this._months) !== sign(total) ? '-' : '';
+        var daysSign = sign(this._days) !== sign(total) ? '-' : '';
+        var hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : '';
+
+        return totalSign + 'P' +
+            (Y ? ymSign + Y + 'Y' : '') +
+            (M ? ymSign + M + 'M' : '') +
+            (D ? daysSign + D + 'D' : '') +
+            ((h || m || s) ? 'T' : '') +
+            (h ? hmsSign + h + 'H' : '') +
+            (m ? hmsSign + m + 'M' : '') +
+            (s ? hmsSign + s + 'S' : '');
+    }
+
+    var proto$2 = Duration.prototype;
+
+    proto$2.isValid        = isValid$1;
+    proto$2.abs            = abs;
+    proto$2.add            = add$1;
+    proto$2.subtract       = subtract$1;
+    proto$2.as             = as;
+    proto$2.asMilliseconds = asMilliseconds;
+    proto$2.asSeconds      = asSeconds;
+    proto$2.asMinutes      = asMinutes;
+    proto$2.asHours        = asHours;
+    proto$2.asDays         = asDays;
+    proto$2.asWeeks        = asWeeks;
+    proto$2.asMonths       = asMonths;
+    proto$2.asQuarters     = asQuarters;
+    proto$2.asYears        = asYears;
+    proto$2.valueOf        = valueOf$1;
+    proto$2._bubble        = bubble;
+    proto$2.clone          = clone$1;
+    proto$2.get            = get$2;
+    proto$2.milliseconds   = milliseconds;
+    proto$2.seconds        = seconds;
+    proto$2.minutes        = minutes;
+    proto$2.hours          = hours;
+    proto$2.days           = days;
+    proto$2.weeks          = weeks;
+    proto$2.months         = months;
+    proto$2.years          = years;
+    proto$2.humanize       = humanize;
+    proto$2.toISOString    = toISOString$1;
+    proto$2.toString       = toISOString$1;
+    proto$2.toJSON         = toISOString$1;
+    proto$2.locale         = locale;
+    proto$2.localeData     = localeData;
+
+    proto$2.toIsoString = deprecate('toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)', toISOString$1);
+    proto$2.lang = lang;
+
+    // Side effect imports
+
+    // FORMATTING
+
+    addFormatToken('X', 0, 0, 'unix');
+    addFormatToken('x', 0, 0, 'valueOf');
+
+    // PARSING
+
+    addRegexToken('x', matchSigned);
+    addRegexToken('X', matchTimestamp);
+    addParseToken('X', function (input, array, config) {
+        config._d = new Date(parseFloat(input, 10) * 1000);
+    });
+    addParseToken('x', function (input, array, config) {
+        config._d = new Date(toInt(input));
+    });
+
+    // Side effect imports
+
+
+    hooks.version = '2.24.0';
+
+    setHookCallback(createLocal);
+
+    hooks.fn                    = proto;
+    hooks.min                   = min;
+    hooks.max                   = max;
+    hooks.now                   = now;
+    hooks.utc                   = createUTC;
+    hooks.unix                  = createUnix;
+    hooks.months                = listMonths;
+    hooks.isDate                = isDate;
+    hooks.locale                = getSetGlobalLocale;
+    hooks.invalid               = createInvalid;
+    hooks.duration              = createDuration;
+    hooks.isMoment              = isMoment;
+    hooks.weekdays              = listWeekdays;
+    hooks.parseZone             = createInZone;
+    hooks.localeData            = getLocale;
+    hooks.isDuration            = isDuration;
+    hooks.monthsShort           = listMonthsShort;
+    hooks.weekdaysMin           = listWeekdaysMin;
+    hooks.defineLocale          = defineLocale;
+    hooks.updateLocale          = updateLocale;
+    hooks.locales               = listLocales;
+    hooks.weekdaysShort         = listWeekdaysShort;
+    hooks.normalizeUnits        = normalizeUnits;
+    hooks.relativeTimeRounding  = getSetRelativeTimeRounding;
+    hooks.relativeTimeThreshold = getSetRelativeTimeThreshold;
+    hooks.calendarFormat        = getCalendarFormat;
+    hooks.prototype             = proto;
+
+    // currently HTML5 input type only supports 24-hour formats
+    hooks.HTML5_FMT = {
+        DATETIME_LOCAL: 'YYYY-MM-DDTHH:mm',             // <input type="datetime-local" />
+        DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss',  // <input type="datetime-local" step="1" />
+        DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS',   // <input type="datetime-local" step="0.001" />
+        DATE: 'YYYY-MM-DD',                             // <input type="date" />
+        TIME: 'HH:mm',                                  // <input type="time" />
+        TIME_SECONDS: 'HH:mm:ss',                       // <input type="time" step="1" />
+        TIME_MS: 'HH:mm:ss.SSS',                        // <input type="time" step="0.001" />
+        WEEK: 'GGGG-[W]WW',                             // <input type="week" />
+        MONTH: 'YYYY-MM'                                // <input type="month" />
+    };
+
+    return hooks;
+
+})));
diff --git a/htdocs/cgi-bin/wsrc/print.css b/htdocs/cgi-bin/wsrc/print.css
new file mode 100644 (file)
index 0000000..89ae23c
--- /dev/null
@@ -0,0 +1,83 @@
+body {
+    font: 13pt Georgia, "Times New Roman", Times, serif;
+    line-height: 1.3;
+    background: #fff !important;
+    color: #000;
+}
+
+.ctr {
+    text-align:center;
+    width:110px;
+}
+.cat {
+    text-align:left;
+    width:120px;
+}
+
+.tbl_print {
+    text-align:left;    
+    border: 1px solid #000;
+    border-collapse: collapse
+}
+.hdr, th, td{
+    padding: 10px;  
+    border: 1px solid #000;
+}
+tr{
+    page-break-before:auto;
+    page-break-after:avoid;
+}
+
+a {
+    page-break-inside:avoid
+}
+blockquote {
+    page-break-inside: avoid;
+}
+h1, h2, h3, h4, h5, h6 { page-break-after:avoid; 
+     page-break-inside:avoid }
+img { page-break-inside:avoid; 
+     page-break-after:avoid; }
+table, pre { page-break-inside:avoid }
+ul, ol, dl  { page-break-before:avoid }
+
+a:link, a:visited, a {
+background: transparent;
+color: #520;
+font-weight: bold;
+text-decoration: underline;
+text-align: left;
+}
+
+a {
+page-break-inside:avoid
+}
+
+
+$a:after > img {
+content: "";
+}
+
+code, pre { font-family: "Courier New", Courier, mono}
+
+ul, ol {
+list-style: square; margin-left: 18pt;
+margin-bottom: 20pt;    
+}
+
+li {
+line-height: 1.6em;
+} 
+
+@page {
+    size: A4;
+    margin:18mm 0mm 5mm 5mm;
+}
+  
+@media print {
+    
+    tr{
+        page-break-inside: avoid;
+    }
+}
+  
\ No newline at end of file
diff --git a/htdocs/cgi-bin/wsrc/quill/examples/bubble.html b/htdocs/cgi-bin/wsrc/quill/examples/bubble.html
new file mode 100644 (file)
index 0000000..20ceefc
--- /dev/null
@@ -0,0 +1,62 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <title>Bubble Theme - Quill Rich Text Editor</title>
+  <meta charset="utf-8">
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="language" content="english">
+<meta name="viewport" content="width=device-width">
+
+<meta name="description" content="Quill is a free, open source WYSIWYG editor built for the modern web. Completely customize it for any need with its modular architecture and expressive API.">
+
+<meta name="twitter:card" content="summary">
+<meta name="twitter:site" content="@quilljs">
+
+<meta name="twitter:title" content="Bubble Theme - Quill">
+
+<meta name="twitter:description" content="Quill is a free, open source rich text editor built for the modern web.">
+<meta name="twitter:image" content="https://quilljs.com/assets/images/brand-asset.png">
+<meta property="og:type" content="website">
+<meta property="og:url" content="https://quilljs.com/standalone/bubble/">
+<meta property="og:image" content="https://quilljs.com/assets/images/brand-asset.png">
+<meta property="og:title" content="Bubble Theme - Quill">
+<meta property="og:site_name" content="Quill">
+<link rel="canonical" href="https://quilljs.com/standalone/bubble/">
+<link type="application/atom+xml" rel="alternate" href="https://quilljs.com/feed.xml" title="Quill - Your powerful rich text editor" />
+  
+  
+<link rel="stylesheet" href="../quill.bubble.css" />
+
+<style>
+  .standalone-container {
+    margin: 50px auto;
+    max-width: 720px;
+  }
+  #bubble-container {
+    height: 350px;
+  }
+</style>
+
+
+</head>
+<body>
+  
+<div class="standalone-container">
+  <div id="bubble-container"></div>
+</div>
+
+  
+  
+<script src="../quill.min.js"></script>
+
+<script>
+  var quill = new Quill('#bubble-container', {
+    placeholder: 'Compose an epic...',
+    theme: 'bubble'
+  });
+</script>
+
+
+</body>
+</html>
diff --git a/htdocs/cgi-bin/wsrc/quill/examples/full.html b/htdocs/cgi-bin/wsrc/quill/examples/full.html
new file mode 100644 (file)
index 0000000..9875ac2
--- /dev/null
@@ -0,0 +1,120 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <title>Full Editor - Quill Rich Text Editor</title>
+  <meta charset="utf-8">
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="language" content="english">
+<meta name="viewport" content="width=device-width">
+
+<meta name="description" content="Quill is a free, open source WYSIWYG editor built for the modern web. Completely customize it for any need with its modular architecture and expressive API.">
+
+<meta name="twitter:card" content="summary">
+<meta name="twitter:site" content="@quilljs">
+
+<meta name="twitter:title" content="Full Editor - Quill">
+
+<meta name="twitter:description" content="Quill is a free, open source rich text editor built for the modern web.">
+<meta name="twitter:image" content="https://quilljs.com/assets/images/brand-asset.png">
+<meta property="og:type" content="website">
+<meta property="og:url" content="https://quilljs.com/standalone/full/">
+<meta property="og:image" content="https://quilljs.com/assets/images/brand-asset.png">
+<meta property="og:title" content="Full Editor - Quill">
+<meta property="og:site_name" content="Quill">
+<link rel="canonical" href="https://quilljs.com/standalone/full/">
+<link type="application/atom+xml" rel="alternate" href="https://quilljs.com/feed.xml" title="Quill - Your powerful rich text editor" />
+  
+  
+<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.7.1/katex.min.css" />
+
+<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/monokai-sublime.min.css" />
+
+<link rel="stylesheet" href="../quill.snow.css" />
+
+<style>
+  body > #standalone-container {
+    margin: 50px auto;
+    max-width: 720px;
+  }
+  #editor-container {
+    height: 350px;
+  }
+</style>
+
+
+</head>
+<body>
+  
+<div id="standalone-container">
+  <div id="toolbar-container">
+    <span class="ql-formats">
+      <select class="ql-font"></select>
+      <select class="ql-size"></select>
+    </span>
+    <span class="ql-formats">
+      <button class="ql-bold"></button>
+      <button class="ql-italic"></button>
+      <button class="ql-underline"></button>
+      <button class="ql-strike"></button>
+    </span>
+    <span class="ql-formats">
+      <select class="ql-color"></select>
+      <select class="ql-background"></select>
+    </span>
+    <span class="ql-formats">
+      <button class="ql-script" value="sub"></button>
+      <button class="ql-script" value="super"></button>
+    </span>
+    <span class="ql-formats">
+      <button class="ql-header" value="1"></button>
+      <button class="ql-header" value="2"></button>
+      <button class="ql-blockquote"></button>
+      <button class="ql-code-block"></button>
+    </span>
+    <span class="ql-formats">
+      <button class="ql-list" value="ordered"></button>
+      <button class="ql-list" value="bullet"></button>
+      <button class="ql-indent" value="-1"></button>
+      <button class="ql-indent" value="+1"></button>
+    </span>
+    <span class="ql-formats">
+      <button class="ql-direction" value="rtl"></button>
+      <select class="ql-align"></select>
+    </span>
+    <span class="ql-formats">
+      <button class="ql-link"></button>
+      <button class="ql-image"></button>
+      <button class="ql-video"></button>
+      <button class="ql-formula"></button>
+    </span>
+    <span class="ql-formats">
+      <button class="ql-clean"></button>
+    </span>
+  </div>
+  <div id="editor-container"></div>
+</div>
+
+  
+  
+<script src="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.7.1/katex.min.js"></script>
+
+<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/highlight.min.js"></script>
+
+<script src="../quill.min.js"></script>
+
+<script>
+  var quill = new Quill('#editor-container', {
+    modules: {
+      formula: true,
+      syntax: true,
+      toolbar: '#toolbar-container'
+    },
+    placeholder: 'Compose an epic...',
+    theme: 'snow'
+  });
+</script>
+
+
+</body>
+</html>
diff --git a/htdocs/cgi-bin/wsrc/quill/examples/snow.html b/htdocs/cgi-bin/wsrc/quill/examples/snow.html
new file mode 100644 (file)
index 0000000..85382b3
--- /dev/null
@@ -0,0 +1,70 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <title>Snow Theme - Quill Rich Text Editor</title>
+  <meta charset="utf-8">
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="language" content="english">
+<meta name="viewport" content="width=device-width">
+
+<meta name="description" content="Quill is a free, open source WYSIWYG editor built for the modern web. Completely customize it for any need with its modular architecture and expressive API.">
+
+<meta name="twitter:card" content="summary">
+<meta name="twitter:site" content="@quilljs">
+
+<meta name="twitter:title" content="Snow Theme - Quill">
+
+<meta name="twitter:description" content="Quill is a free, open source rich text editor built for the modern web.">
+<meta name="twitter:image" content="https://quilljs.com/assets/images/brand-asset.png">
+<meta property="og:type" content="website">
+<meta property="og:url" content="https://quilljs.com/standalone/snow/">
+<meta property="og:image" content="https://quilljs.com/assets/images/brand-asset.png">
+<meta property="og:title" content="Snow Theme - Quill">
+<meta property="og:site_name" content="Quill">
+<link rel="canonical" href="https://quilljs.com/standalone/snow/">
+<link type="application/atom+xml" rel="alternate" href="https://quilljs.com/feed.xml" title="Quill - Your powerful rich text editor" />
+  
+  
+<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.7.1/katex.min.css" />
+
+<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/monokai-sublime.min.css" />
+
+<link rel="stylesheet" href="../quill.snow.css" />
+
+<style>
+  .standalone-container {
+    margin: 50px auto;
+    max-width: 720px;
+  }
+  #snow-container {
+    height: 350px;
+  }
+</style>
+
+
+</head>
+<body>
+  
+<div class="standalone-container">
+  <div id="snow-container"></div>
+</div>
+
+  
+  
+<script src="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.7.1/katex.min.js"></script>
+
+<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/highlight.min.js"></script>
+
+<script src="../quill.min.js"></script>
+
+<script>
+  var quill = new Quill('#snow-container', {
+    placeholder: 'Compose an epic...',
+    theme: 'snow'
+  });
+</script>
+
+
+</body>
+</html>
diff --git a/htdocs/cgi-bin/wsrc/quill/highlight.min.js b/htdocs/cgi-bin/wsrc/quill/highlight.min.js
new file mode 100644 (file)
index 0000000..f30a334
--- /dev/null
@@ -0,0 +1,3 @@
+/*! highlight.js v9.12.0 | BSD3 License | git.io/hljslicense */
+!function(e){var t="object"==typeof window&&window||"object"==typeof self&&self;"undefined"!=typeof exports?e(exports):t&&(t.hljs=e({}),"function"==typeof define&&define.amd&&define([],function(){return t.hljs}))}(function(e){function t(e){return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}function r(e){return e.nodeName.toLowerCase()}function a(e,t){var r=e&&e.exec(t);return r&&0===r.index}function n(e){return E.test(e)}function i(e){var t,r,a,i,s=e.className+" ";if(s+=e.parentNode?e.parentNode.className:"",r=M.exec(s))return w(r[1])?r[1]:"no-highlight";for(s=s.split(/\s+/),t=0,a=s.length;a>t;t++)if(i=s[t],n(i)||w(i))return i}function s(e){var t,r={},a=Array.prototype.slice.call(arguments,1);for(t in e)r[t]=e[t];return a.forEach(function(e){for(t in e)r[t]=e[t]}),r}function c(e){var t=[];return function a(e,n){for(var i=e.firstChild;i;i=i.nextSibling)3===i.nodeType?n+=i.nodeValue.length:1===i.nodeType&&(t.push({event:"start",offset:n,node:i}),n=a(i,n),r(i).match(/br|hr|img|input/)||t.push({event:"stop",offset:n,node:i}));return n}(e,0),t}function o(e,a,n){function i(){return e.length&&a.length?e[0].offset!==a[0].offset?e[0].offset<a[0].offset?e:a:"start"===a[0].event?e:a:e.length?e:a}function s(e){function a(e){return" "+e.nodeName+'="'+t(e.value).replace('"',"&quot;")+'"'}u+="<"+r(e)+N.map.call(e.attributes,a).join("")+">"}function c(e){u+="</"+r(e)+">"}function o(e){("start"===e.event?s:c)(e.node)}for(var l=0,u="",d=[];e.length||a.length;){var b=i();if(u+=t(n.substring(l,b[0].offset)),l=b[0].offset,b===e){d.reverse().forEach(c);do o(b.splice(0,1)[0]),b=i();while(b===e&&b.length&&b[0].offset===l);d.reverse().forEach(s)}else"start"===b[0].event?d.push(b[0].node):d.pop(),o(b.splice(0,1)[0])}return u+t(n.substr(l))}function l(e){return e.v&&!e.cached_variants&&(e.cached_variants=e.v.map(function(t){return s(e,{v:null},t)})),e.cached_variants||e.eW&&[s(e)]||[e]}function u(e){function t(e){return e&&e.source||e}function r(r,a){return new RegExp(t(r),"m"+(e.cI?"i":"")+(a?"g":""))}function a(n,i){if(!n.compiled){if(n.compiled=!0,n.k=n.k||n.bK,n.k){var s={},c=function(t,r){e.cI&&(r=r.toLowerCase()),r.split(" ").forEach(function(e){var r=e.split("|");s[r[0]]=[t,r[1]?Number(r[1]):1]})};"string"==typeof n.k?c("keyword",n.k):k(n.k).forEach(function(e){c(e,n.k[e])}),n.k=s}n.lR=r(n.l||/\w+/,!0),i&&(n.bK&&(n.b="\\b("+n.bK.split(" ").join("|")+")\\b"),n.b||(n.b=/\B|\b/),n.bR=r(n.b),n.e||n.eW||(n.e=/\B|\b/),n.e&&(n.eR=r(n.e)),n.tE=t(n.e)||"",n.eW&&i.tE&&(n.tE+=(n.e?"|":"")+i.tE)),n.i&&(n.iR=r(n.i)),null==n.r&&(n.r=1),n.c||(n.c=[]),n.c=Array.prototype.concat.apply([],n.c.map(function(e){return l("self"===e?n:e)})),n.c.forEach(function(e){a(e,n)}),n.starts&&a(n.starts,i);var o=n.c.map(function(e){return e.bK?"\\.?("+e.b+")\\.?":e.b}).concat([n.tE,n.i]).map(t).filter(Boolean);n.t=o.length?r(o.join("|"),!0):{exec:function(){return null}}}}a(e)}function d(e,r,n,i){function s(e,t){var r,n;for(r=0,n=t.c.length;n>r;r++)if(a(t.c[r].bR,e))return t.c[r]}function c(e,t){if(a(e.eR,t)){for(;e.endsParent&&e.parent;)e=e.parent;return e}return e.eW?c(e.parent,t):void 0}function o(e,t){return!n&&a(t.iR,e)}function l(e,t){var r=v.cI?t[0].toLowerCase():t[0];return e.k.hasOwnProperty(r)&&e.k[r]}function p(e,t,r,a){var n=a?"":L.classPrefix,i='<span class="'+n,s=r?"":R;return i+=e+'">',i+t+s}function m(){var e,r,a,n;if(!N.k)return t(E);for(n="",r=0,N.lR.lastIndex=0,a=N.lR.exec(E);a;)n+=t(E.substring(r,a.index)),e=l(N,a),e?(M+=e[1],n+=p(e[0],t(a[0]))):n+=t(a[0]),r=N.lR.lastIndex,a=N.lR.exec(E);return n+t(E.substr(r))}function f(){var e="string"==typeof N.sL;if(e&&!x[N.sL])return t(E);var r=e?d(N.sL,E,!0,k[N.sL]):b(E,N.sL.length?N.sL:void 0);return N.r>0&&(M+=r.r),e&&(k[N.sL]=r.top),p(r.language,r.value,!1,!0)}function g(){C+=null!=N.sL?f():m(),E=""}function _(e){C+=e.cN?p(e.cN,"",!0):"",N=Object.create(e,{parent:{value:N}})}function h(e,t){if(E+=e,null==t)return g(),0;var r=s(t,N);if(r)return r.skip?E+=t:(r.eB&&(E+=t),g(),r.rB||r.eB||(E=t)),_(r,t),r.rB?0:t.length;var a=c(N,t);if(a){var n=N;n.skip?E+=t:(n.rE||n.eE||(E+=t),g(),n.eE&&(E=t));do N.cN&&(C+=R),N.skip||(M+=N.r),N=N.parent;while(N!==a.parent);return a.starts&&_(a.starts,""),n.rE?0:t.length}if(o(t,N))throw new Error('Illegal lexeme "'+t+'" for mode "'+(N.cN||"<unnamed>")+'"');return E+=t,t.length||1}var v=w(e);if(!v)throw new Error('Unknown language: "'+e+'"');u(v);var y,N=i||v,k={},C="";for(y=N;y!==v;y=y.parent)y.cN&&(C=p(y.cN,"",!0)+C);var E="",M=0;try{for(var B,S,$=0;;){if(N.t.lastIndex=$,B=N.t.exec(r),!B)break;S=h(r.substring($,B.index),B[0]),$=B.index+S}for(h(r.substr($)),y=N;y.parent;y=y.parent)y.cN&&(C+=R);return{r:M,value:C,language:e,top:N}}catch(A){if(A.message&&-1!==A.message.indexOf("Illegal"))return{r:0,value:t(r)};throw A}}function b(e,r){r=r||L.languages||k(x);var a={r:0,value:t(e)},n=a;return r.filter(w).forEach(function(t){var r=d(t,e,!1);r.language=t,r.r>n.r&&(n=r),r.r>a.r&&(n=a,a=r)}),n.language&&(a.second_best=n),a}function p(e){return L.tabReplace||L.useBR?e.replace(B,function(e,t){return L.useBR&&"\n"===e?"<br>":L.tabReplace?t.replace(/\t/g,L.tabReplace):""}):e}function m(e,t,r){var a=t?C[t]:r,n=[e.trim()];return e.match(/\bhljs\b/)||n.push("hljs"),-1===e.indexOf(a)&&n.push(a),n.join(" ").trim()}function f(e){var t,r,a,s,l,u=i(e);n(u)||(L.useBR?(t=document.createElementNS("http://www.w3.org/1999/xhtml","div"),t.innerHTML=e.innerHTML.replace(/\n/g,"").replace(/<br[ \/]*>/g,"\n")):t=e,l=t.textContent,a=u?d(u,l,!0):b(l),r=c(t),r.length&&(s=document.createElementNS("http://www.w3.org/1999/xhtml","div"),s.innerHTML=a.value,a.value=o(r,c(s),l)),a.value=p(a.value),e.innerHTML=a.value,e.className=m(e.className,u,a.language),e.result={language:a.language,re:a.r},a.second_best&&(e.second_best={language:a.second_best.language,re:a.second_best.r}))}function g(e){L=s(L,e)}function _(){if(!_.called){_.called=!0;var e=document.querySelectorAll("pre code");N.forEach.call(e,f)}}function h(){addEventListener("DOMContentLoaded",_,!1),addEventListener("load",_,!1)}function v(t,r){var a=x[t]=r(e);a.aliases&&a.aliases.forEach(function(e){C[e]=t})}function y(){return k(x)}function w(e){return e=(e||"").toLowerCase(),x[e]||x[C[e]]}var N=[],k=Object.keys,x={},C={},E=/^(no-?highlight|plain|text)$/i,M=/\blang(?:uage)?-([\w-]+)\b/i,B=/((^(<[^>]+>|\t|)+|(?:\n)))/gm,R="</span>",L={classPrefix:"hljs-",tabReplace:null,useBR:!1,languages:void 0};return e.highlight=d,e.highlightAuto=b,e.fixMarkup=p,e.highlightBlock=f,e.configure=g,e.initHighlighting=_,e.initHighlightingOnLoad=h,e.registerLanguage=v,e.listLanguages=y,e.getLanguage=w,e.inherit=s,e.IR="[a-zA-Z]\\w*",e.UIR="[a-zA-Z_]\\w*",e.NR="\\b\\d+(\\.\\d+)?",e.CNR="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",e.BNR="\\b(0b[01]+)",e.RSR="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",e.BE={b:"\\\\[\\s\\S]",r:0},e.ASM={cN:"string",b:"'",e:"'",i:"\\n",c:[e.BE]},e.QSM={cN:"string",b:'"',e:'"',i:"\\n",c:[e.BE]},e.PWM={b:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/},e.C=function(t,r,a){var n=e.inherit({cN:"comment",b:t,e:r,c:[]},a||{});return n.c.push(e.PWM),n.c.push({cN:"doctag",b:"(?:TODO|FIXME|NOTE|BUG|XXX):",r:0}),n},e.CLCM=e.C("//","$"),e.CBCM=e.C("/\\*","\\*/"),e.HCM=e.C("#","$"),e.NM={cN:"number",b:e.NR,r:0},e.CNM={cN:"number",b:e.CNR,r:0},e.BNM={cN:"number",b:e.BNR,r:0},e.CSSNM={cN:"number",b:e.NR+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",r:0},e.RM={cN:"regexp",b:/\//,e:/\/[gimuy]*/,i:/\n/,c:[e.BE,{b:/\[/,e:/\]/,r:0,c:[e.BE]}]},e.TM={cN:"title",b:e.IR,r:0},e.UTM={cN:"title",b:e.UIR,r:0},e.METHOD_GUARD={b:"\\.\\s*"+e.UIR,r:0},e.registerLanguage("apache",function(e){var t={cN:"number",b:"[\\$%]\\d+"};return{aliases:["apacheconf"],cI:!0,c:[e.HCM,{cN:"section",b:"</?",e:">"},{cN:"attribute",b:/\w+/,r:0,k:{nomarkup:"order deny allow setenv rewriterule rewriteengine rewritecond documentroot sethandler errordocument loadmodule options header listen serverroot servername"},starts:{e:/$/,r:0,k:{literal:"on off all"},c:[{cN:"meta",b:"\\s\\[",e:"\\]$"},{cN:"variable",b:"[\\$%]\\{",e:"\\}",c:["self",t]},t,e.QSM]}}],i:/\S/}}),e.registerLanguage("bash",function(e){var t={cN:"variable",v:[{b:/\$[\w\d#@][\w\d_]*/},{b:/\$\{(.*?)}/}]},r={cN:"string",b:/"/,e:/"/,c:[e.BE,t,{cN:"variable",b:/\$\(/,e:/\)/,c:[e.BE]}]},a={cN:"string",b:/'/,e:/'/};return{aliases:["sh","zsh"],l:/\b-?[a-z\._]+\b/,k:{keyword:"if then else elif fi for while in do done case esac function",literal:"true false",built_in:"break cd continue eval exec exit export getopts hash pwd readonly return shift test times trap umask unset alias bind builtin caller command declare echo enable help let local logout mapfile printf read readarray source type typeset ulimit unalias set shopt autoload bg bindkey bye cap chdir clone comparguments compcall compctl compdescribe compfiles compgroups compquote comptags comptry compvalues dirs disable disown echotc echoti emulate fc fg float functions getcap getln history integer jobs kill limit log noglob popd print pushd pushln rehash sched setcap setopt stat suspend ttyctl unfunction unhash unlimit unsetopt vared wait whence where which zcompile zformat zftp zle zmodload zparseopts zprof zpty zregexparse zsocket zstyle ztcp",_:"-ne -eq -lt -gt -f -d -e -s -l -a"},c:[{cN:"meta",b:/^#![^\n]+sh\s*$/,r:10},{cN:"function",b:/\w[\w\d_]*\s*\(\s*\)\s*\{/,rB:!0,c:[e.inherit(e.TM,{b:/\w[\w\d_]*/})],r:0},e.HCM,r,a,t]}}),e.registerLanguage("coffeescript",function(e){var t={keyword:"in if for while finally new do return else break catch instanceof throw try this switch continue typeof delete debugger super yield import export from as default await then unless until loop of by when and or is isnt not",literal:"true false null undefined yes no on off",built_in:"npm require console print module global window document"},r="[A-Za-z$_][0-9A-Za-z$_]*",a={cN:"subst",b:/#\{/,e:/}/,k:t},n=[e.BNM,e.inherit(e.CNM,{starts:{e:"(\\s*/)?",r:0}}),{cN:"string",v:[{b:/'''/,e:/'''/,c:[e.BE]},{b:/'/,e:/'/,c:[e.BE]},{b:/"""/,e:/"""/,c:[e.BE,a]},{b:/"/,e:/"/,c:[e.BE,a]}]},{cN:"regexp",v:[{b:"///",e:"///",c:[a,e.HCM]},{b:"//[gim]*",r:0},{b:/\/(?![ *])(\\\/|.)*?\/[gim]*(?=\W|$)/}]},{b:"@"+r},{sL:"javascript",eB:!0,eE:!0,v:[{b:"```",e:"```"},{b:"`",e:"`"}]}];a.c=n;var i=e.inherit(e.TM,{b:r}),s="(\\(.*\\))?\\s*\\B[-=]>",c={cN:"params",b:"\\([^\\(]",rB:!0,c:[{b:/\(/,e:/\)/,k:t,c:["self"].concat(n)}]};return{aliases:["coffee","cson","iced"],k:t,i:/\/\*/,c:n.concat([e.C("###","###"),e.HCM,{cN:"function",b:"^\\s*"+r+"\\s*=\\s*"+s,e:"[-=]>",rB:!0,c:[i,c]},{b:/[:\(,=]\s*/,r:0,c:[{cN:"function",b:s,e:"[-=]>",rB:!0,c:[c]}]},{cN:"class",bK:"class",e:"$",i:/[:="\[\]]/,c:[{bK:"extends",eW:!0,i:/[:="\[\]]/,c:[i]},i]},{b:r+":",e:":",rB:!0,rE:!0,r:0}])}}),e.registerLanguage("cpp",function(e){var t={cN:"keyword",b:"\\b[a-z\\d_]*_t\\b"},r={cN:"string",v:[{b:'(u8?|U)?L?"',e:'"',i:"\\n",c:[e.BE]},{b:'(u8?|U)?R"',e:'"',c:[e.BE]},{b:"'\\\\?.",e:"'",i:"."}]},a={cN:"number",v:[{b:"\\b(0b[01']+)"},{b:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)(u|U|l|L|ul|UL|f|F|b|B)"},{b:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"}],r:0},n={cN:"meta",b:/#\s*[a-z]+\b/,e:/$/,k:{"meta-keyword":"if else elif endif define undef warning error line pragma ifdef ifndef include"},c:[{b:/\\\n/,r:0},e.inherit(r,{cN:"meta-string"}),{cN:"meta-string",b:/<[^\n>]*>/,e:/$/,i:"\\n"},e.CLCM,e.CBCM]},i=e.IR+"\\s*\\(",s={keyword:"int float while private char catch import module export virtual operator sizeof dynamic_cast|10 typedef const_cast|10 const for static_cast|10 union namespace unsigned long volatile static protected bool template mutable if public friend do goto auto void enum else break extern using asm case typeid short reinterpret_cast|10 default double register explicit signed typename try this switch continue inline delete alignof constexpr decltype noexcept static_assert thread_local restrict _Bool complex _Complex _Imaginary atomic_bool atomic_char atomic_schar atomic_uchar atomic_short atomic_ushort atomic_int atomic_uint atomic_long atomic_ulong atomic_llong atomic_ullong new throw return and or not",built_in:"std string cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap array shared_ptr abort abs acos asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp fscanf isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan vfprintf vprintf vsprintf endl initializer_list unique_ptr",literal:"true false nullptr NULL"},c=[t,e.CLCM,e.CBCM,a,r];return{aliases:["c","cc","h","c++","h++","hpp"],k:s,i:"</",c:c.concat([n,{b:"\\b(deque|list|queue|stack|vector|map|set|bitset|multiset|multimap|unordered_map|unordered_set|unordered_multiset|unordered_multimap|array)\\s*<",e:">",k:s,c:["self",t]},{b:e.IR+"::",k:s},{v:[{b:/=/,e:/;/},{b:/\(/,e:/\)/},{bK:"new throw return else",e:/;/}],k:s,c:c.concat([{b:/\(/,e:/\)/,k:s,c:c.concat(["self"]),r:0}]),r:0},{cN:"function",b:"("+e.IR+"[\\*&\\s]+)+"+i,rB:!0,e:/[{;=]/,eE:!0,k:s,i:/[^\w\s\*&]/,c:[{b:i,rB:!0,c:[e.TM],r:0},{cN:"params",b:/\(/,e:/\)/,k:s,r:0,c:[e.CLCM,e.CBCM,r,a,t]},e.CLCM,e.CBCM,n]},{cN:"class",bK:"class struct",e:/[{;:]/,c:[{b:/</,e:/>/,c:["self"]},e.TM]}]),exports:{preprocessor:n,strings:r,k:s}}}),e.registerLanguage("cs",function(e){var t={keyword:"abstract as base bool break byte case catch char checked const continue decimal default delegate do double enum event explicit extern finally fixed float for foreach goto if implicit in int interface internal is lock long nameof object operator out override params private protected public readonly ref sbyte sealed short sizeof stackalloc static string struct switch this try typeof uint ulong unchecked unsafe ushort using virtual void volatile while add alias ascending async await by descending dynamic equals from get global group into join let on orderby partial remove select set value var where yield",literal:"null false true"},r={cN:"string",b:'@"',e:'"',c:[{b:'""'}]},a=e.inherit(r,{i:/\n/}),n={cN:"subst",b:"{",e:"}",k:t},i=e.inherit(n,{i:/\n/}),s={cN:"string",b:/\$"/,e:'"',i:/\n/,c:[{b:"{{"},{b:"}}"},e.BE,i]},c={cN:"string",b:/\$@"/,e:'"',c:[{b:"{{"},{b:"}}"},{b:'""'},n]},o=e.inherit(c,{i:/\n/,c:[{b:"{{"},{b:"}}"},{b:'""'},i]});n.c=[c,s,r,e.ASM,e.QSM,e.CNM,e.CBCM],i.c=[o,s,a,e.ASM,e.QSM,e.CNM,e.inherit(e.CBCM,{i:/\n/})];var l={v:[c,s,r,e.ASM,e.QSM]},u=e.IR+"(<"+e.IR+"(\\s*,\\s*"+e.IR+")*>)?(\\[\\])?";return{aliases:["csharp"],k:t,i:/::/,c:[e.C("///","$",{rB:!0,c:[{cN:"doctag",v:[{b:"///",r:0},{b:"<!--|-->"},{b:"</?",e:">"}]}]}),e.CLCM,e.CBCM,{cN:"meta",b:"#",e:"$",k:{"meta-keyword":"if else elif endif define undef warning error line region endregion pragma checksum"}},l,e.CNM,{bK:"class interface",e:/[{;=]/,i:/[^\s:]/,c:[e.TM,e.CLCM,e.CBCM]},{bK:"namespace",e:/[{;=]/,i:/[^\s:]/,c:[e.inherit(e.TM,{b:"[a-zA-Z](\\.?\\w)*"}),e.CLCM,e.CBCM]},{cN:"meta",b:"^\\s*\\[",eB:!0,e:"\\]",eE:!0,c:[{cN:"meta-string",b:/"/,e:/"/}]},{bK:"new return throw await else",r:0},{cN:"function",b:"("+u+"\\s+)+"+e.IR+"\\s*\\(",rB:!0,e:/[{;=]/,eE:!0,k:t,c:[{b:e.IR+"\\s*\\(",rB:!0,c:[e.TM],r:0},{cN:"params",b:/\(/,e:/\)/,eB:!0,eE:!0,k:t,r:0,c:[l,e.CNM,e.CBCM]},e.CLCM,e.CBCM]}]}}),e.registerLanguage("css",function(e){var t="[a-zA-Z-][a-zA-Z0-9_-]*",r={b:/[A-Z\_\.\-]+\s*:/,rB:!0,e:";",eW:!0,c:[{cN:"attribute",b:/\S/,e:":",eE:!0,starts:{eW:!0,eE:!0,c:[{b:/[\w-]+\(/,rB:!0,c:[{cN:"built_in",b:/[\w-]+/},{b:/\(/,e:/\)/,c:[e.ASM,e.QSM]}]},e.CSSNM,e.QSM,e.ASM,e.CBCM,{cN:"number",b:"#[0-9A-Fa-f]+"},{cN:"meta",b:"!important"}]}}]};return{cI:!0,i:/[=\/|'\$]/,c:[e.CBCM,{cN:"selector-id",b:/#[A-Za-z0-9_-]+/},{cN:"selector-class",b:/\.[A-Za-z0-9_-]+/},{cN:"selector-attr",b:/\[/,e:/\]/,i:"$"},{cN:"selector-pseudo",b:/:(:)?[a-zA-Z0-9\_\-\+\(\)"'.]+/},{b:"@(font-face|page)",l:"[a-z-]+",k:"font-face page"},{b:"@",e:"[{;]",i:/:/,c:[{cN:"keyword",b:/\w+/},{b:/\s/,eW:!0,eE:!0,r:0,c:[e.ASM,e.QSM,e.CSSNM]}]},{cN:"selector-tag",b:t,r:0},{b:"{",e:"}",i:/\S/,c:[e.CBCM,r]}]}}),e.registerLanguage("diff",function(e){return{aliases:["patch"],c:[{cN:"meta",r:10,v:[{b:/^@@ +\-\d+,\d+ +\+\d+,\d+ +@@$/},{b:/^\*\*\* +\d+,\d+ +\*\*\*\*$/},{b:/^\-\-\- +\d+,\d+ +\-\-\-\-$/}]},{cN:"comment",v:[{b:/Index: /,e:/$/},{b:/={3,}/,e:/$/},{b:/^\-{3}/,e:/$/},{b:/^\*{3} /,e:/$/},{b:/^\+{3}/,e:/$/},{b:/\*{5}/,e:/\*{5}$/}]},{cN:"addition",b:"^\\+",e:"$"},{cN:"deletion",b:"^\\-",e:"$"},{cN:"addition",b:"^\\!",e:"$"}]}}),e.registerLanguage("http",function(e){var t="HTTP/[0-9\\.]+";return{aliases:["https"],i:"\\S",c:[{b:"^"+t,e:"$",c:[{cN:"number",b:"\\b\\d{3}\\b"}]},{b:"^[A-Z]+ (.*?) "+t+"$",rB:!0,e:"$",c:[{cN:"string",b:" ",e:" ",eB:!0,eE:!0},{b:t},{cN:"keyword",b:"[A-Z]+"}]},{cN:"attribute",b:"^\\w",e:": ",eE:!0,i:"\\n|\\s|=",starts:{e:"$",r:0}},{b:"\\n\\n",starts:{sL:[],eW:!0}}]}}),e.registerLanguage("ini",function(e){var t={cN:"string",c:[e.BE],v:[{b:"'''",e:"'''",r:10},{b:'"""',e:'"""',r:10},{b:'"',e:'"'},{b:"'",e:"'"}]};return{aliases:["toml"],cI:!0,i:/\S/,c:[e.C(";","$"),e.HCM,{cN:"section",b:/^\s*\[+/,e:/\]+/},{b:/^[a-z0-9\[\]_-]+\s*=\s*/,e:"$",rB:!0,c:[{cN:"attr",b:/[a-z0-9\[\]_-]+/},{b:/=/,eW:!0,r:0,c:[{cN:"literal",b:/\bon|off|true|false|yes|no\b/},{cN:"variable",v:[{b:/\$[\w\d"][\w\d_]*/},{b:/\$\{(.*?)}/}]},t,{cN:"number",b:/([\+\-]+)?[\d]+_[\d_]+/},e.NM]}]}]}}),e.registerLanguage("java",function(e){var t="[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*",r=t+"(<"+t+"(\\s*,\\s*"+t+")*>)?",a="false synchronized int abstract float private char boolean static null if const for true while long strictfp finally protected import native final void enum else break transient catch instanceof byte super volatile case assert short package default double public try this switch continue throws protected public private module requires exports do",n="\\b(0[bB]([01]+[01_]+[01]+|[01]+)|0[xX]([a-fA-F0-9]+[a-fA-F0-9_]+[a-fA-F0-9]+|[a-fA-F0-9]+)|(([\\d]+[\\d_]+[\\d]+|[\\d]+)(\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))?|\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))([eE][-+]?\\d+)?)[lLfF]?",i={cN:"number",b:n,r:0};return{aliases:["jsp"],k:a,i:/<\/|#/,c:[e.C("/\\*\\*","\\*/",{r:0,c:[{b:/\w+@/,r:0},{cN:"doctag",b:"@[A-Za-z]+"}]}),e.CLCM,e.CBCM,e.ASM,e.QSM,{cN:"class",bK:"class interface",e:/[{;=]/,eE:!0,k:"class interface",i:/[:"\[\]]/,c:[{bK:"extends implements"},e.UTM]},{bK:"new throw return else",r:0},{cN:"function",b:"("+r+"\\s+)+"+e.UIR+"\\s*\\(",rB:!0,e:/[{;=]/,eE:!0,k:a,c:[{b:e.UIR+"\\s*\\(",rB:!0,r:0,c:[e.UTM]},{cN:"params",b:/\(/,e:/\)/,k:a,r:0,c:[e.ASM,e.QSM,e.CNM,e.CBCM]},e.CLCM,e.CBCM]},i,{cN:"meta",b:"@[A-Za-z]+"}]}}),e.registerLanguage("javascript",function(e){var t="[A-Za-z$_][0-9A-Za-z$_]*",r={keyword:"in of if for while finally var new function do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const export super debugger as async await static import from as",literal:"true false null undefined NaN Infinity",built_in:"eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError Number Math Date String RegExp Array Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require module console window document Symbol Set Map WeakSet WeakMap Proxy Reflect Promise"},a={cN:"number",v:[{b:"\\b(0[bB][01]+)"},{b:"\\b(0[oO][0-7]+)"},{b:e.CNR}],r:0},n={cN:"subst",b:"\\$\\{",e:"\\}",k:r,c:[]},i={cN:"string",b:"`",e:"`",c:[e.BE,n]};n.c=[e.ASM,e.QSM,i,a,e.RM];var s=n.c.concat([e.CBCM,e.CLCM]);return{aliases:["js","jsx"],k:r,c:[{cN:"meta",r:10,b:/^\s*['"]use (strict|asm)['"]/},{cN:"meta",b:/^#!/,e:/$/},e.ASM,e.QSM,i,e.CLCM,e.CBCM,a,{b:/[{,]\s*/,r:0,c:[{b:t+"\\s*:",rB:!0,r:0,c:[{cN:"attr",b:t,r:0}]}]},{b:"("+e.RSR+"|\\b(case|return|throw)\\b)\\s*",k:"return throw case",c:[e.CLCM,e.CBCM,e.RM,{cN:"function",b:"(\\(.*?\\)|"+t+")\\s*=>",rB:!0,e:"\\s*=>",c:[{cN:"params",v:[{b:t},{b:/\(\s*\)/},{b:/\(/,e:/\)/,eB:!0,eE:!0,k:r,c:s}]}]},{b:/</,e:/(\/\w+|\w+\/)>/,sL:"xml",c:[{b:/<\w+\s*\/>/,skip:!0},{b:/<\w+/,e:/(\/\w+|\w+\/)>/,skip:!0,c:[{b:/<\w+\s*\/>/,skip:!0},"self"]}]}],r:0},{cN:"function",bK:"function",e:/\{/,eE:!0,c:[e.inherit(e.TM,{b:t}),{cN:"params",b:/\(/,e:/\)/,eB:!0,eE:!0,c:s}],i:/\[|%/},{b:/\$[(.]/},e.METHOD_GUARD,{cN:"class",bK:"class",e:/[{;=]/,eE:!0,i:/[:"\[\]]/,c:[{bK:"extends"},e.UTM]},{bK:"constructor",e:/\{/,eE:!0}],i:/#(?!!)/}}),e.registerLanguage("json",function(e){var t={literal:"true false null"},r=[e.QSM,e.CNM],a={e:",",eW:!0,eE:!0,c:r,k:t},n={b:"{",e:"}",c:[{cN:"attr",b:/"/,e:/"/,c:[e.BE],i:"\\n"},e.inherit(a,{b:/:/})],i:"\\S"},i={b:"\\[",e:"\\]",c:[e.inherit(a)],i:"\\S"};return r.splice(r.length,0,n,i),{c:r,k:t,i:"\\S"}}),e.registerLanguage("makefile",function(e){var t={cN:"variable",v:[{b:"\\$\\("+e.UIR+"\\)",c:[e.BE]},{b:/\$[@%<?\^\+\*]/}]},r={cN:"string",b:/"/,e:/"/,c:[e.BE,t]},a={cN:"variable",b:/\$\([\w-]+\s/,e:/\)/,k:{built_in:"subst patsubst strip findstring filter filter-out sort word wordlist firstword lastword dir notdir suffix basename addsuffix addprefix join wildcard realpath abspath error warning shell origin flavor foreach if or and call eval file value"},c:[t]},n={b:"^"+e.UIR+"\\s*[:+?]?=",i:"\\n",rB:!0,c:[{b:"^"+e.UIR,e:"[:+?]?=",eE:!0}]},i={cN:"meta",b:/^\.PHONY:/,e:/$/,k:{"meta-keyword":".PHONY"},l:/[\.\w]+/},s={cN:"section",b:/^[^\s]+:/,e:/$/,c:[t]};return{aliases:["mk","mak"],k:"define endef undefine ifdef ifndef ifeq ifneq else endif include -include sinclude override export unexport private vpath",l:/[\w-]+/,c:[e.HCM,t,r,a,n,i,s]}}),e.registerLanguage("xml",function(e){var t="[A-Za-z0-9\\._:-]+",r={eW:!0,i:/</,r:0,c:[{cN:"attr",b:t,r:0},{b:/=\s*/,r:0,c:[{cN:"string",endsParent:!0,v:[{b:/"/,e:/"/},{b:/'/,e:/'/},{b:/[^\s"'=<>`]+/}]}]}]};return{aliases:["html","xhtml","rss","atom","xjb","xsd","xsl","plist"],cI:!0,c:[{cN:"meta",b:"<!DOCTYPE",e:">",r:10,c:[{b:"\\[",e:"\\]"}]},e.C("<!--","-->",{r:10}),{b:"<\\!\\[CDATA\\[",e:"\\]\\]>",r:10},{b:/<\?(php)?/,e:/\?>/,sL:"php",c:[{b:"/\\*",e:"\\*/",skip:!0}]},{cN:"tag",b:"<style(?=\\s|>|$)",e:">",k:{name:"style"},c:[r],starts:{e:"</style>",rE:!0,sL:["css","xml"]}},{cN:"tag",b:"<script(?=\\s|>|$)",e:">",k:{name:"script"},c:[r],starts:{e:"</script>",rE:!0,sL:["actionscript","javascript","handlebars","xml"]}},{cN:"meta",v:[{b:/<\?xml/,e:/\?>/,r:10},{b:/<\?\w+/,e:/\?>/}]},{cN:"tag",b:"</?",e:"/?>",c:[{cN:"name",b:/[^\/><\s]+/,r:0},r]}]}}),e.registerLanguage("markdown",function(e){return{aliases:["md","mkdown","mkd"],c:[{cN:"section",v:[{b:"^#{1,6}",e:"$"},{b:"^.+?\\n[=-]{2,}$"}]},{b:"<",e:">",sL:"xml",r:0},{cN:"bullet",b:"^([*+-]|(\\d+\\.))\\s+"},{cN:"strong",b:"[*_]{2}.+?[*_]{2}"},{cN:"emphasis",v:[{b:"\\*.+?\\*"},{b:"_.+?_",r:0}]},{cN:"quote",b:"^>\\s+",e:"$"},{cN:"code",v:[{b:"^```w*s*$",e:"^```s*$"},{b:"`.+?`"},{b:"^( {4}|  )",e:"$",r:0}]},{b:"^[-\\*]{3,}",e:"$"},{b:"\\[.+?\\][\\(\\[].*?[\\)\\]]",rB:!0,c:[{cN:"string",b:"\\[",e:"\\]",eB:!0,rE:!0,r:0},{cN:"link",b:"\\]\\(",e:"\\)",eB:!0,eE:!0},{cN:"symbol",b:"\\]\\[",e:"\\]",eB:!0,eE:!0}],r:10},{b:/^\[[^\n]+\]:/,rB:!0,c:[{cN:"symbol",b:/\[/,e:/\]/,eB:!0,eE:!0},{cN:"link",b:/:\s*/,e:/$/,eB:!0}]}]}}),e.registerLanguage("nginx",function(e){var t={cN:"variable",v:[{b:/\$\d+/},{b:/\$\{/,e:/}/},{b:"[\\$\\@]"+e.UIR}]},r={eW:!0,l:"[a-z/_]+",k:{literal:"on off yes no true false none blocked debug info notice warn error crit select break last permanent redirect kqueue rtsig epoll poll /dev/poll"},r:0,i:"=>",c:[e.HCM,{cN:"string",c:[e.BE,t],v:[{b:/"/,e:/"/},{b:/'/,e:/'/}]},{b:"([a-z]+):/",e:"\\s",eW:!0,eE:!0,c:[t]},{cN:"regexp",c:[e.BE,t],v:[{b:"\\s\\^",e:"\\s|{|;",rE:!0},{b:"~\\*?\\s+",e:"\\s|{|;",rE:!0},{b:"\\*(\\.[a-z\\-]+)+"},{b:"([a-z\\-]+\\.)+\\*"}]},{cN:"number",b:"\\b\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}(:\\d{1,5})?\\b"},{cN:"number",b:"\\b\\d+[kKmMgGdshdwy]*\\b",r:0},t]};return{aliases:["nginxconf"],c:[e.HCM,{b:e.UIR+"\\s+{",rB:!0,e:"{",c:[{cN:"section",b:e.UIR}],r:0},{b:e.UIR+"\\s",e:";|{",rB:!0,c:[{cN:"attribute",b:e.UIR,starts:r}],r:0}],i:"[^\\s\\}]"}}),e.registerLanguage("objectivec",function(e){var t={cN:"built_in",b:"\\b(AV|CA|CF|CG|CI|CL|CM|CN|CT|MK|MP|MTK|MTL|NS|SCN|SK|UI|WK|XC)\\w+"},r={keyword:"int float while char export sizeof typedef const struct for union unsigned long volatile static bool mutable if do return goto void enum else break extern asm case short default double register explicit signed typename this switch continue wchar_t inline readonly assign readwrite self @synchronized id typeof nonatomic super unichar IBOutlet IBAction strong weak copy in out inout bycopy byref oneway __strong __weak __block __autoreleasing @private @protected @public @try @property @end @throw @catch @finally @autoreleasepool @synthesize @dynamic @selector @optional @required @encode @package @import @defs @compatibility_alias __bridge __bridge_transfer __bridge_retained __bridge_retain __covariant __contravariant __kindof _Nonnull _Nullable _Null_unspecified __FUNCTION__ __PRETTY_FUNCTION__ __attribute__ getter setter retain unsafe_unretained nonnull nullable null_unspecified null_resettable class instancetype NS_DESIGNATED_INITIALIZER NS_UNAVAILABLE NS_REQUIRES_SUPER NS_RETURNS_INNER_POINTER NS_INLINE NS_AVAILABLE NS_DEPRECATED NS_ENUM NS_OPTIONS NS_SWIFT_UNAVAILABLE NS_ASSUME_NONNULL_BEGIN NS_ASSUME_NONNULL_END NS_REFINED_FOR_SWIFT NS_SWIFT_NAME NS_SWIFT_NOTHROW NS_DURING NS_HANDLER NS_ENDHANDLER NS_VALUERETURN NS_VOIDRETURN",literal:"false true FALSE TRUE nil YES NO NULL",built_in:"BOOL dispatch_once_t dispatch_queue_t dispatch_sync dispatch_async dispatch_once"},a=/[a-zA-Z@][a-zA-Z0-9_]*/,n="@interface @class @protocol @implementation";return{aliases:["mm","objc","obj-c"],k:r,l:a,i:"</",c:[t,e.CLCM,e.CBCM,e.CNM,e.QSM,{cN:"string",v:[{b:'@"',e:'"',i:"\\n",c:[e.BE]},{b:"'",e:"[^\\\\]'",i:"[^\\\\][^']"}]},{cN:"meta",b:"#",e:"$",c:[{cN:"meta-string",v:[{b:'"',e:'"'},{b:"<",e:">"}]}]},{cN:"class",b:"("+n.split(" ").join("|")+")\\b",e:"({|$)",eE:!0,k:n,l:a,c:[e.UTM]},{b:"\\."+e.UIR,r:0}]}}),e.registerLanguage("perl",function(e){var t="getpwent getservent quotemeta msgrcv scalar kill dbmclose undef lc ma syswrite tr send umask sysopen shmwrite vec qx utime local oct semctl localtime readpipe do return format read sprintf dbmopen pop getpgrp not getpwnam rewinddir qqfileno qw endprotoent wait sethostent bless s|0 opendir continue each sleep endgrent shutdown dump chomp connect getsockname die socketpair close flock exists index shmgetsub for endpwent redo lstat msgctl setpgrp abs exit select print ref gethostbyaddr unshift fcntl syscall goto getnetbyaddr join gmtime symlink semget splice x|0 getpeername recv log setsockopt cos last reverse gethostbyname getgrnam study formline endhostent times chop length gethostent getnetent pack getprotoent getservbyname rand mkdir pos chmod y|0 substr endnetent printf next open msgsnd readdir use unlink getsockopt getpriority rindex wantarray hex system getservbyport endservent int chr untie rmdir prototype tell listen fork shmread ucfirst setprotoent else sysseek link getgrgid shmctl waitpid unpack getnetbyname reset chdir grep split require caller lcfirst until warn while values shift telldir getpwuid my getprotobynumber delete and sort uc defined srand accept package seekdir getprotobyname semop our rename seek if q|0 chroot sysread setpwent no crypt getc chown sqrt write setnetent setpriority foreach tie sin msgget map stat getlogin unless elsif truncate exec keys glob tied closedirioctl socket readlink eval xor readline binmode setservent eof ord bind alarm pipe atan2 getgrent exp time push setgrent gt lt or ne m|0 break given say state when",r={cN:"subst",b:"[$@]\\{",e:"\\}",k:t},a={b:"->{",e:"}"},n={v:[{b:/\$\d/},{b:/[\$%@](\^\w\b|#\w+(::\w+)*|{\w+}|\w+(::\w*)*)/},{b:/[\$%@][^\s\w{]/,r:0}]},i=[e.BE,r,n],s=[n,e.HCM,e.C("^\\=\\w","\\=cut",{eW:!0}),a,{cN:"string",c:i,v:[{b:"q[qwxr]?\\s*\\(",e:"\\)",r:5},{b:"q[qwxr]?\\s*\\[",e:"\\]",r:5},{b:"q[qwxr]?\\s*\\{",e:"\\}",r:5},{b:"q[qwxr]?\\s*\\|",e:"\\|",r:5},{b:"q[qwxr]?\\s*\\<",e:"\\>",r:5},{b:"qw\\s+q",e:"q",r:5},{b:"'",e:"'",c:[e.BE]},{b:'"',e:'"'},{b:"`",e:"`",c:[e.BE]},{b:"{\\w+}",c:[],r:0},{b:"-?\\w+\\s*\\=\\>",c:[],r:0}]},{cN:"number",b:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",r:0},{b:"(\\/\\/|"+e.RSR+"|\\b(split|return|print|reverse|grep)\\b)\\s*",k:"split return print reverse grep",r:0,c:[e.HCM,{cN:"regexp",b:"(s|tr|y)/(\\\\.|[^/])*/(\\\\.|[^/])*/[a-z]*",r:10},{cN:"regexp",b:"(m|qr)?/",e:"/[a-z]*",c:[e.BE],r:0}]},{cN:"function",bK:"sub",e:"(\\s*\\(.*?\\))?[;{]",eE:!0,r:5,c:[e.TM]},{b:"-\\w\\b",r:0},{b:"^__DATA__$",e:"^__END__$",sL:"mojolicious",c:[{b:"^@@.*",e:"$",cN:"comment"}]}];return r.c=s,a.c=s,{aliases:["pl","pm"],l:/[\w\.]+/,k:t,c:s}}),e.registerLanguage("php",function(e){var t={b:"\\$+[a-zA-Z_\7f-ÿ][a-zA-Z0-9_\7f-ÿ]*"},r={cN:"meta",b:/<\?(php)?|\?>/},a={cN:"string",c:[e.BE,r],v:[{b:'b"',e:'"'},{b:"b'",e:"'"},e.inherit(e.ASM,{i:null}),e.inherit(e.QSM,{i:null})]},n={v:[e.BNM,e.CNM]};return{aliases:["php3","php4","php5","php6"],cI:!0,k:"and include_once list abstract global private echo interface as static endswitch array null if endwhile or const for endforeach self var while isset public protected exit foreach throw elseif include __FILE__ empty require_once do xor return parent clone use __CLASS__ __LINE__ else break print eval new catch __METHOD__ case exception default die require __FUNCTION__ enddeclare final try switch continue endfor endif declare unset true false trait goto instanceof insteadof __DIR__ __NAMESPACE__ yield finally",c:[e.HCM,e.C("//","$",{c:[r]}),e.C("/\\*","\\*/",{c:[{cN:"doctag",b:"@[A-Za-z]+"}]}),e.C("__halt_compiler.+?;",!1,{eW:!0,k:"__halt_compiler",l:e.UIR}),{cN:"string",b:/<<<['"]?\w+['"]?$/,e:/^\w+;?$/,c:[e.BE,{cN:"subst",v:[{b:/\$\w+/},{b:/\{\$/,e:/\}/}]}]},r,{cN:"keyword",b:/\$this\b/},t,{b:/(::|->)+[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/},{cN:"function",bK:"function",e:/[;{]/,eE:!0,i:"\\$|\\[|%",c:[e.UTM,{cN:"params",b:"\\(",e:"\\)",c:["self",t,e.CBCM,a,n]}]},{cN:"class",bK:"class interface",e:"{",eE:!0,i:/[:\(\$"]/,c:[{bK:"extends implements"},e.UTM]},{bK:"namespace",e:";",i:/[\.']/,c:[e.UTM]},{bK:"use",e:";",c:[e.UTM]},{b:"=>"},a,n]}}),e.registerLanguage("python",function(e){var t={keyword:"and elif is global as in if from raise for except finally print import pass return exec else break not with class assert yield try while continue del or def lambda async await nonlocal|10 None True False",built_in:"Ellipsis NotImplemented"},r={cN:"meta",b:/^(>>>|\.\.\.) /},a={cN:"subst",b:/\{/,e:/\}/,k:t,i:/#/},n={cN:"string",c:[e.BE],v:[{b:/(u|b)?r?'''/,e:/'''/,c:[r],r:10},{b:/(u|b)?r?"""/,e:/"""/,c:[r],r:10},{b:/(fr|rf|f)'''/,e:/'''/,c:[r,a]},{b:/(fr|rf|f)"""/,e:/"""/,c:[r,a]},{b:/(u|r|ur)'/,e:/'/,r:10},{b:/(u|r|ur)"/,e:/"/,r:10},{b:/(b|br)'/,e:/'/},{b:/(b|br)"/,e:/"/},{b:/(fr|rf|f)'/,e:/'/,c:[a]},{b:/(fr|rf|f)"/,e:/"/,c:[a]},e.ASM,e.QSM]},i={cN:"number",r:0,v:[{b:e.BNR+"[lLjJ]?"},{b:"\\b(0o[0-7]+)[lLjJ]?"},{b:e.CNR+"[lLjJ]?"}]},s={cN:"params",b:/\(/,e:/\)/,c:["self",r,i,n]};return a.c=[n,i,r],{aliases:["py","gyp"],k:t,i:/(<\/|->|\?)|=>/,c:[r,i,n,e.HCM,{v:[{cN:"function",bK:"def"},{cN:"class",bK:"class"}],e:/:/,i:/[${=;\n,]/,c:[e.UTM,s,{b:/->/,eW:!0,k:"None"}]},{cN:"meta",b:/^[\t ]*@/,e:/$/},{b:/\b(print|exec)\(/}]}}),e.registerLanguage("ruby",function(e){
+var t="[a-zA-Z_]\\w*[!?=]?|[-+~]\\@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?",r={keyword:"and then defined module in return redo if BEGIN retry end for self when next until do begin unless END rescue else break undef not super class case require yield alias while ensure elsif or include attr_reader attr_writer attr_accessor",literal:"true false nil"},a={cN:"doctag",b:"@[A-Za-z]+"},n={b:"#<",e:">"},i=[e.C("#","$",{c:[a]}),e.C("^\\=begin","^\\=end",{c:[a],r:10}),e.C("^__END__","\\n$")],s={cN:"subst",b:"#\\{",e:"}",k:r},c={cN:"string",c:[e.BE,s],v:[{b:/'/,e:/'/},{b:/"/,e:/"/},{b:/`/,e:/`/},{b:"%[qQwWx]?\\(",e:"\\)"},{b:"%[qQwWx]?\\[",e:"\\]"},{b:"%[qQwWx]?{",e:"}"},{b:"%[qQwWx]?<",e:">"},{b:"%[qQwWx]?/",e:"/"},{b:"%[qQwWx]?%",e:"%"},{b:"%[qQwWx]?-",e:"-"},{b:"%[qQwWx]?\\|",e:"\\|"},{b:/\B\?(\\\d{1,3}|\\x[A-Fa-f0-9]{1,2}|\\u[A-Fa-f0-9]{4}|\\?\S)\b/},{b:/<<(-?)\w+$/,e:/^\s*\w+$/}]},o={cN:"params",b:"\\(",e:"\\)",endsParent:!0,k:r},l=[c,n,{cN:"class",bK:"class module",e:"$|;",i:/=/,c:[e.inherit(e.TM,{b:"[A-Za-z_]\\w*(::\\w+)*(\\?|\\!)?"}),{b:"<\\s*",c:[{b:"("+e.IR+"::)?"+e.IR}]}].concat(i)},{cN:"function",bK:"def",e:"$|;",c:[e.inherit(e.TM,{b:t}),o].concat(i)},{b:e.IR+"::"},{cN:"symbol",b:e.UIR+"(\\!|\\?)?:",r:0},{cN:"symbol",b:":(?!\\s)",c:[c,{b:t}],r:0},{cN:"number",b:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",r:0},{b:"(\\$\\W)|((\\$|\\@\\@?)(\\w+))"},{cN:"params",b:/\|/,e:/\|/,k:r},{b:"("+e.RSR+"|unless)\\s*",k:"unless",c:[n,{cN:"regexp",c:[e.BE,s],i:/\n/,v:[{b:"/",e:"/[a-z]*"},{b:"%r{",e:"}[a-z]*"},{b:"%r\\(",e:"\\)[a-z]*"},{b:"%r!",e:"![a-z]*"},{b:"%r\\[",e:"\\][a-z]*"}]}].concat(i),r:0}].concat(i);s.c=l,o.c=l;var u="[>?]>",d="[\\w#]+\\(\\w+\\):\\d+:\\d+>",b="(\\w+-)?\\d+\\.\\d+\\.\\d(p\\d+)?[^>]+>",p=[{b:/^\s*=>/,starts:{e:"$",c:l}},{cN:"meta",b:"^("+u+"|"+d+"|"+b+")",starts:{e:"$",c:l}}];return{aliases:["rb","gemspec","podspec","thor","irb"],k:r,i:/\/\*/,c:i.concat(p).concat(l)}}),e.registerLanguage("shell",function(e){return{aliases:["console"],c:[{cN:"meta",b:"^\\s{0,3}[\\w\\d\\[\\]()@-]*[>%$#]",starts:{e:"$",sL:"bash"}}]}}),e.registerLanguage("sql",function(e){var t=e.C("--","$");return{cI:!0,i:/[<>{}*#]/,c:[{bK:"begin end start commit rollback savepoint lock alter create drop rename call delete do handler insert load replace select truncate update set show pragma grant merge describe use explain help declare prepare execute deallocate release unlock purge reset change stop analyze cache flush optimize repair kill install uninstall checksum restore check backup revoke comment",e:/;/,eW:!0,l:/[\w\.]+/,k:{keyword:"abort abs absolute acc acce accep accept access accessed accessible account acos action activate add addtime admin administer advanced advise aes_decrypt aes_encrypt after agent aggregate ali alia alias allocate allow alter always analyze ancillary and any anydata anydataset anyschema anytype apply archive archived archivelog are as asc ascii asin assembly assertion associate asynchronous at atan atn2 attr attri attrib attribu attribut attribute attributes audit authenticated authentication authid authors auto autoallocate autodblink autoextend automatic availability avg backup badfile basicfile before begin beginning benchmark between bfile bfile_base big bigfile bin binary_double binary_float binlog bit_and bit_count bit_length bit_or bit_xor bitmap blob_base block blocksize body both bound buffer_cache buffer_pool build bulk by byte byteordermark bytes cache caching call calling cancel capacity cascade cascaded case cast catalog category ceil ceiling chain change changed char_base char_length character_length characters characterset charindex charset charsetform charsetid check checksum checksum_agg child choose chr chunk class cleanup clear client clob clob_base clone close cluster_id cluster_probability cluster_set clustering coalesce coercibility col collate collation collect colu colum column column_value columns columns_updated comment commit compact compatibility compiled complete composite_limit compound compress compute concat concat_ws concurrent confirm conn connec connect connect_by_iscycle connect_by_isleaf connect_by_root connect_time connection consider consistent constant constraint constraints constructor container content contents context contributors controlfile conv convert convert_tz corr corr_k corr_s corresponding corruption cos cost count count_big counted covar_pop covar_samp cpu_per_call cpu_per_session crc32 create creation critical cross cube cume_dist curdate current current_date current_time current_timestamp current_user cursor curtime customdatum cycle data database databases datafile datafiles datalength date_add date_cache date_format date_sub dateadd datediff datefromparts datename datepart datetime2fromparts day day_to_second dayname dayofmonth dayofweek dayofyear days db_role_change dbtimezone ddl deallocate declare decode decompose decrement decrypt deduplicate def defa defau defaul default defaults deferred defi defin define degrees delayed delegate delete delete_all delimited demand dense_rank depth dequeue des_decrypt des_encrypt des_key_file desc descr descri describ describe descriptor deterministic diagnostics difference dimension direct_load directory disable disable_all disallow disassociate discardfile disconnect diskgroup distinct distinctrow distribute distributed div do document domain dotnet double downgrade drop dumpfile duplicate duration each edition editionable editions element ellipsis else elsif elt empty enable enable_all enclosed encode encoding encrypt end end-exec endian enforced engine engines enqueue enterprise entityescaping eomonth error errors escaped evalname evaluate event eventdata events except exception exceptions exchange exclude excluding execu execut execute exempt exists exit exp expire explain export export_set extended extent external external_1 external_2 externally extract failed failed_login_attempts failover failure far fast feature_set feature_value fetch field fields file file_name_convert filesystem_like_logging final finish first first_value fixed flash_cache flashback floor flush following follows for forall force form forma format found found_rows freelist freelists freepools fresh from from_base64 from_days ftp full function general generated get get_format get_lock getdate getutcdate global global_name globally go goto grant grants greatest group group_concat group_id grouping grouping_id groups gtid_subtract guarantee guard handler hash hashkeys having hea head headi headin heading heap help hex hierarchy high high_priority hosts hour http id ident_current ident_incr ident_seed identified identity idle_time if ifnull ignore iif ilike ilm immediate import in include including increment index indexes indexing indextype indicator indices inet6_aton inet6_ntoa inet_aton inet_ntoa infile initial initialized initially initrans inmemory inner innodb input insert install instance instantiable instr interface interleaved intersect into invalidate invisible is is_free_lock is_ipv4 is_ipv4_compat is_not is_not_null is_used_lock isdate isnull isolation iterate java join json json_exists keep keep_duplicates key keys kill language large last last_day last_insert_id last_value lax lcase lead leading least leaves left len lenght length less level levels library like like2 like4 likec limit lines link list listagg little ln load load_file lob lobs local localtime localtimestamp locate locator lock locked log log10 log2 logfile logfiles logging logical logical_reads_per_call logoff logon logs long loop low low_priority lower lpad lrtrim ltrim main make_set makedate maketime managed management manual map mapping mask master master_pos_wait match matched materialized max maxextents maximize maxinstances maxlen maxlogfiles maxloghistory maxlogmembers maxsize maxtrans md5 measures median medium member memcompress memory merge microsecond mid migration min minextents minimum mining minus minute minvalue missing mod mode model modification modify module monitoring month months mount move movement multiset mutex name name_const names nan national native natural nav nchar nclob nested never new newline next nextval no no_write_to_binlog noarchivelog noaudit nobadfile nocheck nocompress nocopy nocycle nodelay nodiscardfile noentityescaping noguarantee nokeep nologfile nomapping nomaxvalue nominimize nominvalue nomonitoring none noneditionable nonschema noorder nopr nopro noprom nopromp noprompt norely noresetlogs noreverse normal norowdependencies noschemacheck noswitch not nothing notice notrim novalidate now nowait nth_value nullif nulls num numb numbe nvarchar nvarchar2 object ocicoll ocidate ocidatetime ociduration ociinterval ociloblocator ocinumber ociref ocirefcursor ocirowid ocistring ocitype oct octet_length of off offline offset oid oidindex old on online only opaque open operations operator optimal optimize option optionally or oracle oracle_date oradata ord ordaudio orddicom orddoc order ordimage ordinality ordvideo organization orlany orlvary out outer outfile outline output over overflow overriding package pad parallel parallel_enable parameters parent parse partial partition partitions pascal passing password password_grace_time password_lock_time password_reuse_max password_reuse_time password_verify_function patch path patindex pctincrease pctthreshold pctused pctversion percent percent_rank percentile_cont percentile_disc performance period period_add period_diff permanent physical pi pipe pipelined pivot pluggable plugin policy position post_transaction pow power pragma prebuilt precedes preceding precision prediction prediction_cost prediction_details prediction_probability prediction_set prepare present preserve prior priority private private_sga privileges procedural procedure procedure_analyze processlist profiles project prompt protection public publishingservername purge quarter query quick quiesce quota quotename radians raise rand range rank raw read reads readsize rebuild record records recover recovery recursive recycle redo reduced ref reference referenced references referencing refresh regexp_like register regr_avgx regr_avgy regr_count regr_intercept regr_r2 regr_slope regr_sxx regr_sxy reject rekey relational relative relaylog release release_lock relies_on relocate rely rem remainder rename repair repeat replace replicate replication required reset resetlogs resize resource respect restore restricted result result_cache resumable resume retention return returning returns reuse reverse revoke right rlike role roles rollback rolling rollup round row row_count rowdependencies rowid rownum rows rtrim rules safe salt sample save savepoint sb1 sb2 sb4 scan schema schemacheck scn scope scroll sdo_georaster sdo_topo_geometry search sec_to_time second section securefile security seed segment select self sequence sequential serializable server servererror session session_user sessions_per_user set sets settings sha sha1 sha2 share shared shared_pool short show shrink shutdown si_averagecolor si_colorhistogram si_featurelist si_positionalcolor si_stillimage si_texture siblings sid sign sin size size_t sizes skip slave sleep smalldatetimefromparts smallfile snapshot some soname sort soundex source space sparse spfile split sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_small_result sql_variant_property sqlcode sqldata sqlerror sqlname sqlstate sqrt square standalone standby start starting startup statement static statistics stats_binomial_test stats_crosstab stats_ks_test stats_mode stats_mw_test stats_one_way_anova stats_t_test_ stats_t_test_indep stats_t_test_one stats_t_test_paired stats_wsr_test status std stddev stddev_pop stddev_samp stdev stop storage store stored str str_to_date straight_join strcmp strict string struct stuff style subdate subpartition subpartitions substitutable substr substring subtime subtring_index subtype success sum suspend switch switchoffset switchover sync synchronous synonym sys sys_xmlagg sysasm sysaux sysdate sysdatetimeoffset sysdba sysoper system system_user sysutcdatetime table tables tablespace tan tdo template temporary terminated tertiary_weights test than then thread through tier ties time time_format time_zone timediff timefromparts timeout timestamp timestampadd timestampdiff timezone_abbr timezone_minute timezone_region to to_base64 to_date to_days to_seconds todatetimeoffset trace tracking transaction transactional translate translation treat trigger trigger_nestlevel triggers trim truncate try_cast try_convert try_parse type ub1 ub2 ub4 ucase unarchived unbounded uncompress under undo unhex unicode uniform uninstall union unique unix_timestamp unknown unlimited unlock unpivot unrecoverable unsafe unsigned until untrusted unusable unused update updated upgrade upped upper upsert url urowid usable usage use use_stored_outlines user user_data user_resources users using utc_date utc_timestamp uuid uuid_short validate validate_password_strength validation valist value values var var_samp varcharc vari varia variab variabl variable variables variance varp varraw varrawc varray verify version versions view virtual visible void wait wallet warning warnings week weekday weekofyear wellformed when whene whenev wheneve whenever where while whitespace with within without work wrapped xdb xml xmlagg xmlattributes xmlcast xmlcolattval xmlelement xmlexists xmlforest xmlindex xmlnamespaces xmlpi xmlquery xmlroot xmlschema xmlserialize xmltable xmltype xor year year_to_month years yearweek",literal:"true false null",built_in:"array bigint binary bit blob boolean char character date dec decimal float int int8 integer interval number numeric real record serial serial8 smallint text varchar varying void"},c:[{cN:"string",b:"'",e:"'",c:[e.BE,{b:"''"}]},{cN:"string",b:'"',e:'"',c:[e.BE,{b:'""'}]},{cN:"string",b:"`",e:"`",c:[e.BE]},e.CNM,e.CBCM,t]},e.CBCM,t]}}),e});
\ No newline at end of file
diff --git a/htdocs/cgi-bin/wsrc/quill/katex.min.css b/htdocs/cgi-bin/wsrc/quill/katex.min.css
new file mode 100644 (file)
index 0000000..d6fb837
--- /dev/null
@@ -0,0 +1 @@
+@font-face{font-family:KaTeX_AMS;src:url(fonts/KaTeX_AMS-Regular.eot);src:url(fonts/KaTeX_AMS-Regular.eot#iefix) format('embedded-opentype'),url(fonts/KaTeX_AMS-Regular.woff2) format('woff2'),url(fonts/KaTeX_AMS-Regular.woff) format('woff'),url(fonts/KaTeX_AMS-Regular.ttf) format('truetype');font-weight:400;font-style:normal}@font-face{font-family:KaTeX_Caligraphic;src:url(fonts/KaTeX_Caligraphic-Bold.eot);src:url(fonts/KaTeX_Caligraphic-Bold.eot#iefix) format('embedded-opentype'),url(fonts/KaTeX_Caligraphic-Bold.woff2) format('woff2'),url(fonts/KaTeX_Caligraphic-Bold.woff) format('woff'),url(fonts/KaTeX_Caligraphic-Bold.ttf) format('truetype');font-weight:700;font-style:normal}@font-face{font-family:KaTeX_Caligraphic;src:url(fonts/KaTeX_Caligraphic-Regular.eot);src:url(fonts/KaTeX_Caligraphic-Regular.eot#iefix) format('embedded-opentype'),url(fonts/KaTeX_Caligraphic-Regular.woff2) format('woff2'),url(fonts/KaTeX_Caligraphic-Regular.woff) format('woff'),url(fonts/KaTeX_Caligraphic-Regular.ttf) format('truetype');font-weight:400;font-style:normal}@font-face{font-family:KaTeX_Fraktur;src:url(fonts/KaTeX_Fraktur-Bold.eot);src:url(fonts/KaTeX_Fraktur-Bold.eot#iefix) format('embedded-opentype'),url(fonts/KaTeX_Fraktur-Bold.woff2) format('woff2'),url(fonts/KaTeX_Fraktur-Bold.woff) format('woff'),url(fonts/KaTeX_Fraktur-Bold.ttf) format('truetype');font-weight:700;font-style:normal}@font-face{font-family:KaTeX_Fraktur;src:url(fonts/KaTeX_Fraktur-Regular.eot);src:url(fonts/KaTeX_Fraktur-Regular.eot#iefix) format('embedded-opentype'),url(fonts/KaTeX_Fraktur-Regular.woff2) format('woff2'),url(fonts/KaTeX_Fraktur-Regular.woff) format('woff'),url(fonts/KaTeX_Fraktur-Regular.ttf) format('truetype');font-weight:400;font-style:normal}@font-face{font-family:KaTeX_Main;src:url(fonts/KaTeX_Main-Bold.eot);src:url(fonts/KaTeX_Main-Bold.eot#iefix) format('embedded-opentype'),url(fonts/KaTeX_Main-Bold.woff2) format('woff2'),url(fonts/KaTeX_Main-Bold.woff) format('woff'),url(fonts/KaTeX_Main-Bold.ttf) format('truetype');font-weight:700;font-style:normal}@font-face{font-family:KaTeX_Main;src:url(fonts/KaTeX_Main-Italic.eot);src:url(fonts/KaTeX_Main-Italic.eot#iefix) format('embedded-opentype'),url(fonts/KaTeX_Main-Italic.woff2) format('woff2'),url(fonts/KaTeX_Main-Italic.woff) format('woff'),url(fonts/KaTeX_Main-Italic.ttf) format('truetype');font-weight:400;font-style:italic}@font-face{font-family:KaTeX_Main;src:url(fonts/KaTeX_Main-Regular.eot);src:url(fonts/KaTeX_Main-Regular.eot#iefix) format('embedded-opentype'),url(fonts/KaTeX_Main-Regular.woff2) format('woff2'),url(fonts/KaTeX_Main-Regular.woff) format('woff'),url(fonts/KaTeX_Main-Regular.ttf) format('truetype');font-weight:400;font-style:normal}@font-face{font-family:KaTeX_Math;src:url(fonts/KaTeX_Math-Italic.eot);src:url(fonts/KaTeX_Math-Italic.eot#iefix) format('embedded-opentype'),url(fonts/KaTeX_Math-Italic.woff2) format('woff2'),url(fonts/KaTeX_Math-Italic.woff) format('woff'),url(fonts/KaTeX_Math-Italic.ttf) format('truetype');font-weight:400;font-style:italic}@font-face{font-family:KaTeX_SansSerif;src:url(fonts/KaTeX_SansSerif-Regular.eot);src:url(fonts/KaTeX_SansSerif-Regular.eot#iefix) format('embedded-opentype'),url(fonts/KaTeX_SansSerif-Regular.woff2) format('woff2'),url(fonts/KaTeX_SansSerif-Regular.woff) format('woff'),url(fonts/KaTeX_SansSerif-Regular.ttf) format('truetype');font-weight:400;font-style:normal}@font-face{font-family:KaTeX_Script;src:url(fonts/KaTeX_Script-Regular.eot);src:url(fonts/KaTeX_Script-Regular.eot#iefix) format('embedded-opentype'),url(fonts/KaTeX_Script-Regular.woff2) format('woff2'),url(fonts/KaTeX_Script-Regular.woff) format('woff'),url(fonts/KaTeX_Script-Regular.ttf) format('truetype');font-weight:400;font-style:normal}@font-face{font-family:KaTeX_Size1;src:url(fonts/KaTeX_Size1-Regular.eot);src:url(fonts/KaTeX_Size1-Regular.eot#iefix) format('embedded-opentype'),url(fonts/KaTeX_Size1-Regular.woff2) format('woff2'),url(fonts/KaTeX_Size1-Regular.woff) format('woff'),url(fonts/KaTeX_Size1-Regular.ttf) format('truetype');font-weight:400;font-style:normal}@font-face{font-family:KaTeX_Size2;src:url(fonts/KaTeX_Size2-Regular.eot);src:url(fonts/KaTeX_Size2-Regular.eot#iefix) format('embedded-opentype'),url(fonts/KaTeX_Size2-Regular.woff2) format('woff2'),url(fonts/KaTeX_Size2-Regular.woff) format('woff'),url(fonts/KaTeX_Size2-Regular.ttf) format('truetype');font-weight:400;font-style:normal}@font-face{font-family:KaTeX_Size3;src:url(fonts/KaTeX_Size3-Regular.eot);src:url(fonts/KaTeX_Size3-Regular.eot#iefix) format('embedded-opentype'),url(fonts/KaTeX_Size3-Regular.woff2) format('woff2'),url(fonts/KaTeX_Size3-Regular.woff) format('woff'),url(fonts/KaTeX_Size3-Regular.ttf) format('truetype');font-weight:400;font-style:normal}@font-face{font-family:KaTeX_Size4;src:url(fonts/KaTeX_Size4-Regular.eot);src:url(fonts/KaTeX_Size4-Regular.eot#iefix) format('embedded-opentype'),url(fonts/KaTeX_Size4-Regular.woff2) format('woff2'),url(fonts/KaTeX_Size4-Regular.woff) format('woff'),url(fonts/KaTeX_Size4-Regular.ttf) format('truetype');font-weight:400;font-style:normal}@font-face{font-family:KaTeX_Typewriter;src:url(fonts/KaTeX_Typewriter-Regular.eot);src:url(fonts/KaTeX_Typewriter-Regular.eot#iefix) format('embedded-opentype'),url(fonts/KaTeX_Typewriter-Regular.woff2) format('woff2'),url(fonts/KaTeX_Typewriter-Regular.woff) format('woff'),url(fonts/KaTeX_Typewriter-Regular.ttf) format('truetype');font-weight:400;font-style:normal}.katex-display{display:block;margin:1em 0;text-align:center}.katex-display>.katex{display:inline-block;text-align:initial}.katex{font:400 1.21em KaTeX_Main,Times New Roman,serif;line-height:1.2;white-space:nowrap;text-indent:0}.katex .katex-html{display:inline-block}.katex .katex-mathml{position:absolute;clip:rect(1px,1px,1px,1px);padding:0;border:0;height:1px;width:1px;overflow:hidden}.katex .base,.katex .strut{display:inline-block}.katex .mathrm{font-style:normal}.katex .textit{font-style:italic}.katex .mathit{font-family:KaTeX_Math;font-style:italic}.katex .mathbf{font-family:KaTeX_Main;font-weight:700}.katex .amsrm,.katex .mathbb{font-family:KaTeX_AMS}.katex .mathcal{font-family:KaTeX_Caligraphic}.katex .mathfrak{font-family:KaTeX_Fraktur}.katex .mathtt{font-family:KaTeX_Typewriter}.katex .mathscr{font-family:KaTeX_Script}.katex .mathsf{font-family:KaTeX_SansSerif}.katex .mainit{font-family:KaTeX_Main;font-style:italic}.katex .mord+.mop{margin-left:.16667em}.katex .mord+.mbin{margin-left:.22222em}.katex .mord+.mrel{margin-left:.27778em}.katex .mop+.mop,.katex .mop+.mord,.katex .mord+.minner{margin-left:.16667em}.katex .mop+.mrel{margin-left:.27778em}.katex .mop+.minner{margin-left:.16667em}.katex .mbin+.minner,.katex .mbin+.mop,.katex .mbin+.mopen,.katex .mbin+.mord{margin-left:.22222em}.katex .mrel+.minner,.katex .mrel+.mop,.katex .mrel+.mopen,.katex .mrel+.mord{margin-left:.27778em}.katex .mclose+.mop{margin-left:.16667em}.katex .mclose+.mbin{margin-left:.22222em}.katex .mclose+.mrel{margin-left:.27778em}.katex .mclose+.minner,.katex .minner+.mop,.katex .minner+.mord,.katex .mpunct+.mclose,.katex .mpunct+.minner,.katex .mpunct+.mop,.katex .mpunct+.mopen,.katex .mpunct+.mord,.katex .mpunct+.mpunct,.katex .mpunct+.mrel{margin-left:.16667em}.katex .minner+.mbin{margin-left:.22222em}.katex .minner+.mrel{margin-left:.27778em}.katex .minner+.minner,.katex .minner+.mopen,.katex .minner+.mpunct{margin-left:.16667em}.katex .mbin.mtight,.katex .mclose.mtight,.katex .minner.mtight,.katex .mop.mtight,.katex .mopen.mtight,.katex .mord.mtight,.katex .mpunct.mtight,.katex .mrel.mtight{margin-left:0}.katex .mclose+.mop.mtight,.katex .minner+.mop.mtight,.katex .mop+.mop.mtight,.katex .mop+.mord.mtight,.katex .mord+.mop.mtight{margin-left:.16667em}.katex .reset-textstyle.textstyle{font-size:1em}.katex .reset-textstyle.scriptstyle{font-size:.7em}.katex .reset-textstyle.scriptscriptstyle{font-size:.5em}.katex .reset-scriptstyle.textstyle{font-size:1.42857em}.katex .reset-scriptstyle.scriptstyle{font-size:1em}.katex .reset-scriptstyle.scriptscriptstyle{font-size:.71429em}.katex .reset-scriptscriptstyle.textstyle{font-size:2em}.katex .reset-scriptscriptstyle.scriptstyle{font-size:1.4em}.katex .reset-scriptscriptstyle.scriptscriptstyle{font-size:1em}.katex .style-wrap{position:relative}.katex .vlist{display:inline-block}.katex .vlist>span{display:block;height:0;position:relative}.katex .vlist>span>span{display:inline-block}.katex .vlist .baseline-fix{display:inline-table;table-layout:fixed}.katex .msupsub{text-align:left}.katex .mfrac>span>span{text-align:center}.katex .mfrac .frac-line{width:100%}.katex .mfrac .frac-line:before{border-bottom-style:solid;border-bottom-width:1px;content:"";display:block}.katex .mfrac .frac-line:after{border-bottom-style:solid;border-bottom-width:.04em;content:"";display:block;margin-top:-1px}.katex .mspace{display:inline-block}.katex .mspace.negativethinspace{margin-left:-.16667em}.katex .mspace.thinspace{width:.16667em}.katex .mspace.negativemediumspace{margin-left:-.22222em}.katex .mspace.mediumspace{width:.22222em}.katex .mspace.thickspace{width:.27778em}.katex .mspace.sixmuspace{width:.333333em}.katex .mspace.eightmuspace{width:.444444em}.katex .mspace.enspace{width:.5em}.katex .mspace.twelvemuspace{width:.666667em}.katex .mspace.quad{width:1em}.katex .mspace.qquad{width:2em}.katex .llap,.katex .rlap{width:0;position:relative}.katex .llap>.inner,.katex .rlap>.inner{position:absolute}.katex .llap>.fix,.katex .rlap>.fix{display:inline-block}.katex .llap>.inner{right:0}.katex .rlap>.inner{left:0}.katex .katex-logo .a{font-size:.75em;margin-left:-.32em;position:relative;top:-.2em}.katex .katex-logo .t{margin-left:-.23em}.katex .katex-logo .e{margin-left:-.1667em;position:relative;top:.2155em}.katex .katex-logo .x{margin-left:-.125em}.katex .rule{display:inline-block;border:0 solid;position:relative}.katex .overline .overline-line,.katex .underline .underline-line{width:100%}.katex .overline .overline-line:before,.katex .underline .underline-line:before{border-bottom-style:solid;border-bottom-width:1px;content:"";display:block}.katex .overline .overline-line:after,.katex .underline .underline-line:after{border-bottom-style:solid;border-bottom-width:.04em;content:"";display:block;margin-top:-1px}.katex .sqrt>.sqrt-sign{position:relative}.katex .sqrt .sqrt-line{width:100%}.katex .sqrt .sqrt-line:before{border-bottom-style:solid;border-bottom-width:1px;content:"";display:block}.katex .sqrt .sqrt-line:after{border-bottom-style:solid;border-bottom-width:.04em;content:"";display:block;margin-top:-1px}.katex .sqrt>.root{margin-left:.27777778em;margin-right:-.55555556em}.katex .fontsize-ensurer,.katex .sizing{display:inline-block}.katex .fontsize-ensurer.reset-size1.size1,.katex .sizing.reset-size1.size1{font-size:1em}.katex .fontsize-ensurer.reset-size1.size2,.katex .sizing.reset-size1.size2{font-size:1.4em}.katex .fontsize-ensurer.reset-size1.size3,.katex .sizing.reset-size1.size3{font-size:1.6em}.katex .fontsize-ensurer.reset-size1.size4,.katex .sizing.reset-size1.size4{font-size:1.8em}.katex .fontsize-ensurer.reset-size1.size5,.katex .sizing.reset-size1.size5{font-size:2em}.katex .fontsize-ensurer.reset-size1.size6,.katex .sizing.reset-size1.size6{font-size:2.4em}.katex .fontsize-ensurer.reset-size1.size7,.katex .sizing.reset-size1.size7{font-size:2.88em}.katex .fontsize-ensurer.reset-size1.size8,.katex .sizing.reset-size1.size8{font-size:3.46em}.katex .fontsize-ensurer.reset-size1.size9,.katex .sizing.reset-size1.size9{font-size:4.14em}.katex .fontsize-ensurer.reset-size1.size10,.katex .sizing.reset-size1.size10{font-size:4.98em}.katex .fontsize-ensurer.reset-size2.size1,.katex .sizing.reset-size2.size1{font-size:.71428571em}.katex .fontsize-ensurer.reset-size2.size2,.katex .sizing.reset-size2.size2{font-size:1em}.katex .fontsize-ensurer.reset-size2.size3,.katex .sizing.reset-size2.size3{font-size:1.14285714em}.katex .fontsize-ensurer.reset-size2.size4,.katex .sizing.reset-size2.size4{font-size:1.28571429em}.katex .fontsize-ensurer.reset-size2.size5,.katex .sizing.reset-size2.size5{font-size:1.42857143em}.katex .fontsize-ensurer.reset-size2.size6,.katex .sizing.reset-size2.size6{font-size:1.71428571em}.katex .fontsize-ensurer.reset-size2.size7,.katex .sizing.reset-size2.size7{font-size:2.05714286em}.katex .fontsize-ensurer.reset-size2.size8,.katex .sizing.reset-size2.size8{font-size:2.47142857em}.katex .fontsize-ensurer.reset-size2.size9,.katex .sizing.reset-size2.size9{font-size:2.95714286em}.katex .fontsize-ensurer.reset-size2.size10,.katex .sizing.reset-size2.size10{font-size:3.55714286em}.katex .fontsize-ensurer.reset-size3.size1,.katex .sizing.reset-size3.size1{font-size:.625em}.katex .fontsize-ensurer.reset-size3.size2,.katex .sizing.reset-size3.size2{font-size:.875em}.katex .fontsize-ensurer.reset-size3.size3,.katex .sizing.reset-size3.size3{font-size:1em}.katex .fontsize-ensurer.reset-size3.size4,.katex .sizing.reset-size3.size4{font-size:1.125em}.katex .fontsize-ensurer.reset-size3.size5,.katex .sizing.reset-size3.size5{font-size:1.25em}.katex .fontsize-ensurer.reset-size3.size6,.katex .sizing.reset-size3.size6{font-size:1.5em}.katex .fontsize-ensurer.reset-size3.size7,.katex .sizing.reset-size3.size7{font-size:1.8em}.katex .fontsize-ensurer.reset-size3.size8,.katex .sizing.reset-size3.size8{font-size:2.1625em}.katex .fontsize-ensurer.reset-size3.size9,.katex .sizing.reset-size3.size9{font-size:2.5875em}.katex .fontsize-ensurer.reset-size3.size10,.katex .sizing.reset-size3.size10{font-size:3.1125em}.katex .fontsize-ensurer.reset-size4.size1,.katex .sizing.reset-size4.size1{font-size:.55555556em}.katex .fontsize-ensurer.reset-size4.size2,.katex .sizing.reset-size4.size2{font-size:.77777778em}.katex .fontsize-ensurer.reset-size4.size3,.katex .sizing.reset-size4.size3{font-size:.88888889em}.katex .fontsize-ensurer.reset-size4.size4,.katex .sizing.reset-size4.size4{font-size:1em}.katex .fontsize-ensurer.reset-size4.size5,.katex .sizing.reset-size4.size5{font-size:1.11111111em}.katex .fontsize-ensurer.reset-size4.size6,.katex .sizing.reset-size4.size6{font-size:1.33333333em}.katex .fontsize-ensurer.reset-size4.size7,.katex .sizing.reset-size4.size7{font-size:1.6em}.katex .fontsize-ensurer.reset-size4.size8,.katex .sizing.reset-size4.size8{font-size:1.92222222em}.katex .fontsize-ensurer.reset-size4.size9,.katex .sizing.reset-size4.size9{font-size:2.3em}.katex .fontsize-ensurer.reset-size4.size10,.katex .sizing.reset-size4.size10{font-size:2.76666667em}.katex .fontsize-ensurer.reset-size5.size1,.katex .sizing.reset-size5.size1{font-size:.5em}.katex .fontsize-ensurer.reset-size5.size2,.katex .sizing.reset-size5.size2{font-size:.7em}.katex .fontsize-ensurer.reset-size5.size3,.katex .sizing.reset-size5.size3{font-size:.8em}.katex .fontsize-ensurer.reset-size5.size4,.katex .sizing.reset-size5.size4{font-size:.9em}.katex .fontsize-ensurer.reset-size5.size5,.katex .sizing.reset-size5.size5{font-size:1em}.katex .fontsize-ensurer.reset-size5.size6,.katex .sizing.reset-size5.size6{font-size:1.2em}.katex .fontsize-ensurer.reset-size5.size7,.katex .sizing.reset-size5.size7{font-size:1.44em}.katex .fontsize-ensurer.reset-size5.size8,.katex .sizing.reset-size5.size8{font-size:1.73em}.katex .fontsize-ensurer.reset-size5.size9,.katex .sizing.reset-size5.size9{font-size:2.07em}.katex .fontsize-ensurer.reset-size5.size10,.katex .sizing.reset-size5.size10{font-size:2.49em}.katex .fontsize-ensurer.reset-size6.size1,.katex .sizing.reset-size6.size1{font-size:.41666667em}.katex .fontsize-ensurer.reset-size6.size2,.katex .sizing.reset-size6.size2{font-size:.58333333em}.katex .fontsize-ensurer.reset-size6.size3,.katex .sizing.reset-size6.size3{font-size:.66666667em}.katex .fontsize-ensurer.reset-size6.size4,.katex .sizing.reset-size6.size4{font-size:.75em}.katex .fontsize-ensurer.reset-size6.size5,.katex .sizing.reset-size6.size5{font-size:.83333333em}.katex .fontsize-ensurer.reset-size6.size6,.katex .sizing.reset-size6.size6{font-size:1em}.katex .fontsize-ensurer.reset-size6.size7,.katex .sizing.reset-size6.size7{font-size:1.2em}.katex .fontsize-ensurer.reset-size6.size8,.katex .sizing.reset-size6.size8{font-size:1.44166667em}.katex .fontsize-ensurer.reset-size6.size9,.katex .sizing.reset-size6.size9{font-size:1.725em}.katex .fontsize-ensurer.reset-size6.size10,.katex .sizing.reset-size6.size10{font-size:2.075em}.katex .fontsize-ensurer.reset-size7.size1,.katex .sizing.reset-size7.size1{font-size:.34722222em}.katex .fontsize-ensurer.reset-size7.size2,.katex .sizing.reset-size7.size2{font-size:.48611111em}.katex .fontsize-ensurer.reset-size7.size3,.katex .sizing.reset-size7.size3{font-size:.55555556em}.katex .fontsize-ensurer.reset-size7.size4,.katex .sizing.reset-size7.size4{font-size:.625em}.katex .fontsize-ensurer.reset-size7.size5,.katex .sizing.reset-size7.size5{font-size:.69444444em}.katex .fontsize-ensurer.reset-size7.size6,.katex .sizing.reset-size7.size6{font-size:.83333333em}.katex .fontsize-ensurer.reset-size7.size7,.katex .sizing.reset-size7.size7{font-size:1em}.katex .fontsize-ensurer.reset-size7.size8,.katex .sizing.reset-size7.size8{font-size:1.20138889em}.katex .fontsize-ensurer.reset-size7.size9,.katex .sizing.reset-size7.size9{font-size:1.4375em}.katex .fontsize-ensurer.reset-size7.size10,.katex .sizing.reset-size7.size10{font-size:1.72916667em}.katex .fontsize-ensurer.reset-size8.size1,.katex .sizing.reset-size8.size1{font-size:.28901734em}.katex .fontsize-ensurer.reset-size8.size2,.katex .sizing.reset-size8.size2{font-size:.40462428em}.katex .fontsize-ensurer.reset-size8.size3,.katex .sizing.reset-size8.size3{font-size:.46242775em}.katex .fontsize-ensurer.reset-size8.size4,.katex .sizing.reset-size8.size4{font-size:.52023121em}.katex .fontsize-ensurer.reset-size8.size5,.katex .sizing.reset-size8.size5{font-size:.57803468em}.katex .fontsize-ensurer.reset-size8.size6,.katex .sizing.reset-size8.size6{font-size:.69364162em}.katex .fontsize-ensurer.reset-size8.size7,.katex .sizing.reset-size8.size7{font-size:.83236994em}.katex .fontsize-ensurer.reset-size8.size8,.katex .sizing.reset-size8.size8{font-size:1em}.katex .fontsize-ensurer.reset-size8.size9,.katex .sizing.reset-size8.size9{font-size:1.19653179em}.katex .fontsize-ensurer.reset-size8.size10,.katex .sizing.reset-size8.size10{font-size:1.43930636em}.katex .fontsize-ensurer.reset-size9.size1,.katex .sizing.reset-size9.size1{font-size:.24154589em}.katex .fontsize-ensurer.reset-size9.size2,.katex .sizing.reset-size9.size2{font-size:.33816425em}.katex .fontsize-ensurer.reset-size9.size3,.katex .sizing.reset-size9.size3{font-size:.38647343em}.katex .fontsize-ensurer.reset-size9.size4,.katex .sizing.reset-size9.size4{font-size:.43478261em}.katex .fontsize-ensurer.reset-size9.size5,.katex .sizing.reset-size9.size5{font-size:.48309179em}.katex .fontsize-ensurer.reset-size9.size6,.katex .sizing.reset-size9.size6{font-size:.57971014em}.katex .fontsize-ensurer.reset-size9.size7,.katex .sizing.reset-size9.size7{font-size:.69565217em}.katex .fontsize-ensurer.reset-size9.size8,.katex .sizing.reset-size9.size8{font-size:.83574879em}.katex .fontsize-ensurer.reset-size9.size9,.katex .sizing.reset-size9.size9{font-size:1em}.katex .fontsize-ensurer.reset-size9.size10,.katex .sizing.reset-size9.size10{font-size:1.20289855em}.katex .fontsize-ensurer.reset-size10.size1,.katex .sizing.reset-size10.size1{font-size:.20080321em}.katex .fontsize-ensurer.reset-size10.size2,.katex .sizing.reset-size10.size2{font-size:.2811245em}.katex .fontsize-ensurer.reset-size10.size3,.katex .sizing.reset-size10.size3{font-size:.32128514em}.katex .fontsize-ensurer.reset-size10.size4,.katex .sizing.reset-size10.size4{font-size:.36144578em}.katex .fontsize-ensurer.reset-size10.size5,.katex .sizing.reset-size10.size5{font-size:.40160643em}.katex .fontsize-ensurer.reset-size10.size6,.katex .sizing.reset-size10.size6{font-size:.48192771em}.katex .fontsize-ensurer.reset-size10.size7,.katex .sizing.reset-size10.size7{font-size:.57831325em}.katex .fontsize-ensurer.reset-size10.size8,.katex .sizing.reset-size10.size8{font-size:.69477912em}.katex .fontsize-ensurer.reset-size10.size9,.katex .sizing.reset-size10.size9{font-size:.8313253em}.katex .fontsize-ensurer.reset-size10.size10,.katex .sizing.reset-size10.size10{font-size:1em}.katex .delimsizing.size1{font-family:KaTeX_Size1}.katex .delimsizing.size2{font-family:KaTeX_Size2}.katex .delimsizing.size3{font-family:KaTeX_Size3}.katex .delimsizing.size4{font-family:KaTeX_Size4}.katex .delimsizing.mult .delim-size1>span{font-family:KaTeX_Size1}.katex .delimsizing.mult .delim-size4>span{font-family:KaTeX_Size4}.katex .nulldelimiter{display:inline-block;width:.12em}.katex .op-symbol{position:relative}.katex .op-symbol.small-op{font-family:KaTeX_Size1}.katex .op-symbol.large-op{font-family:KaTeX_Size2}.katex .accent>.vlist>span,.katex .op-limits>.vlist>span{text-align:center}.katex .accent .accent-body>span{width:0}.katex .accent .accent-body.accent-vec>span{position:relative;left:.326em}.katex .mtable .vertical-separator{display:inline-block;margin:0 -.025em;border-right:.05em solid #000}.katex .mtable .arraycolsep{display:inline-block}.katex .mtable .col-align-c>.vlist{text-align:center}.katex .mtable .col-align-l>.vlist{text-align:left}.katex .mtable .col-align-r>.vlist{text-align:right}
\ No newline at end of file
diff --git a/htdocs/cgi-bin/wsrc/quill/katex.min.js b/htdocs/cgi-bin/wsrc/quill/katex.min.js
new file mode 100644 (file)
index 0000000..66c0821
--- /dev/null
@@ -0,0 +1,4 @@
+(function(e){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=e()}else if(typeof define==="function"&&define.amd){define([],e)}else{var t;if(typeof window!=="undefined"){t=window}else if(typeof global!=="undefined"){t=global}else if(typeof self!=="undefined"){t=self}else{t=this}t.katex=e()}})(function(){var e,t,r;return function a(e,t,r){function i(s,l){if(!t[s]){if(!e[s]){var o=typeof require=="function"&&require;if(!l&&o)return o(s,!0);if(n)return n(s,!0);var u=new Error("Cannot find module '"+s+"'");throw u.code="MODULE_NOT_FOUND",u}var p=t[s]={exports:{}};e[s][0].call(p.exports,function(t){var r=e[s][1][t];return i(r?r:t)},p,p.exports,a,e,t,r)}return t[s].exports}var n=typeof require=="function"&&require;for(var s=0;s<r.length;s++)i(r[s]);return i}({1:[function(e,t,r){var a=e("./src/ParseError");var i=e("./src/Settings");var n=e("./src/buildTree");var s=e("./src/parseTree");var l=e("./src/utils");var o=function(e,t,r){l.clearNode(t);var a=new i(r);var o=s(e,a);var u=n(o,e,a).toNode();t.appendChild(u)};if(typeof document!=="undefined"){if(document.compatMode!=="CSS1Compat"){typeof console!=="undefined"&&console.warn("Warning: KaTeX doesn't work in quirks mode. Make sure your "+"website has a suitable doctype.");o=function(){throw new a("KaTeX doesn't work in quirks mode.")}}}var u=function(e,t){var r=new i(t);var a=s(e,r);return n(a,e,r).toMarkup()};var p=function(e,t){var r=new i(t);return s(e,r)};t.exports={render:o,renderToString:u,__parse:p,ParseError:a}},{"./src/ParseError":6,"./src/Settings":8,"./src/buildTree":13,"./src/parseTree":22,"./src/utils":25}],2:[function(e,t,r){"use strict";function a(e){if(!e.__matchAtRelocatable){var t=e.source+"|()";var r="g"+(e.ignoreCase?"i":"")+(e.multiline?"m":"")+(e.unicode?"u":"");e.__matchAtRelocatable=new RegExp(t,r)}return e.__matchAtRelocatable}function i(e,t,r){if(e.global||e.sticky){throw new Error("matchAt(...): Only non-global regexes are supported")}var i=a(e);i.lastIndex=r;var n=i.exec(t);if(n[n.length-1]==null){n.length=n.length-1;return n}else{return null}}t.exports=i},{}],3:[function(e,t,r){var a=e("match-at");var i=e("./ParseError");function n(e){this.input=e;this.pos=0}function s(e,t,r,a){this.text=e;this.start=t;this.end=r;this.lexer=a}s.prototype.range=function(e,t){if(e.lexer!==this.lexer){return new s(t)}return new s(t,this.start,e.end,this.lexer)};var l=new RegExp("([ \r\n   ]+)|"+"([!-\\[\\]-\u2027\u202a-\ud7ff\uf900-\uffff]"+"|[\ud800-\udbff][\udc00-\udfff]"+"|\\\\(?:[a-zA-Z]+|[^\ud800-\udfff])"+")");n.prototype.lex=function(){var e=this.input;var t=this.pos;if(t===e.length){return new s("EOF",t,t,this)}var r=a(l,e,t);if(r===null){throw new i("Unexpected character: '"+e[t]+"'",new s(e[t],t,t+1,this))}var n=r[2]||" ";var o=this.pos;this.pos+=r[0].length;var u=this.pos;return new s(n,o,u,this)};t.exports=n},{"./ParseError":6,"match-at":2}],4:[function(e,t,r){var a=e("./Lexer");function i(e,t){this.lexer=new a(e);this.macros=t;this.stack=[];this.discardedWhiteSpace=[]}i.prototype.nextToken=function(){for(;;){if(this.stack.length===0){this.stack.push(this.lexer.lex())}var e=this.stack.pop();var t=e.text;if(!(t.charAt(0)==="\\"&&this.macros.hasOwnProperty(t))){return e}var r=this.macros[t];if(typeof r==="string"){var i=new a(r);r=[];var n=i.lex();while(n.text!=="EOF"){r.push(n);n=i.lex()}r.reverse();this.macros[t]=r}this.stack=this.stack.concat(r)}};i.prototype.get=function(e){this.discardedWhiteSpace=[];var t=this.nextToken();if(e){while(t.text===" "){this.discardedWhiteSpace.push(t);t=this.nextToken()}}return t};i.prototype.unget=function(e){this.stack.push(e);while(this.discardedWhiteSpace.length!==0){this.stack.push(this.discardedWhiteSpace.pop())}};t.exports=i},{"./Lexer":3}],5:[function(e,t,r){function a(e){this.style=e.style;this.color=e.color;this.size=e.size;this.phantom=e.phantom;this.font=e.font;if(e.parentStyle===undefined){this.parentStyle=e.style}else{this.parentStyle=e.parentStyle}if(e.parentSize===undefined){this.parentSize=e.size}else{this.parentSize=e.parentSize}}a.prototype.extend=function(e){var t={style:this.style,size:this.size,color:this.color,parentStyle:this.style,parentSize:this.size,phantom:this.phantom,font:this.font};for(var r in e){if(e.hasOwnProperty(r)){t[r]=e[r]}}return new a(t)};a.prototype.withStyle=function(e){return this.extend({style:e})};a.prototype.withSize=function(e){return this.extend({size:e})};a.prototype.withColor=function(e){return this.extend({color:e})};a.prototype.withPhantom=function(){return this.extend({phantom:true})};a.prototype.withFont=function(e){return this.extend({font:e||this.font})};a.prototype.reset=function(){return this.extend({})};var i={"katex-blue":"#6495ed","katex-orange":"#ffa500","katex-pink":"#ff00af","katex-red":"#df0030","katex-green":"#28ae7b","katex-gray":"gray","katex-purple":"#9d38bd","katex-blueA":"#ccfaff","katex-blueB":"#80f6ff","katex-blueC":"#63d9ea","katex-blueD":"#11accd","katex-blueE":"#0c7f99","katex-tealA":"#94fff5","katex-tealB":"#26edd5","katex-tealC":"#01d1c1","katex-tealD":"#01a995","katex-tealE":"#208170","katex-greenA":"#b6ffb0","katex-greenB":"#8af281","katex-greenC":"#74cf70","katex-greenD":"#1fab54","katex-greenE":"#0d923f","katex-goldA":"#ffd0a9","katex-goldB":"#ffbb71","katex-goldC":"#ff9c39","katex-goldD":"#e07d10","katex-goldE":"#a75a05","katex-redA":"#fca9a9","katex-redB":"#ff8482","katex-redC":"#f9685d","katex-redD":"#e84d39","katex-redE":"#bc2612","katex-maroonA":"#ffbde0","katex-maroonB":"#ff92c6","katex-maroonC":"#ed5fa6","katex-maroonD":"#ca337c","katex-maroonE":"#9e034e","katex-purpleA":"#ddd7ff","katex-purpleB":"#c6b9fc","katex-purpleC":"#aa87ff","katex-purpleD":"#7854ab","katex-purpleE":"#543b78","katex-mintA":"#f5f9e8","katex-mintB":"#edf2df","katex-mintC":"#e0e5cc","katex-grayA":"#f6f7f7","katex-grayB":"#f0f1f2","katex-grayC":"#e3e5e6","katex-grayD":"#d6d8da","katex-grayE":"#babec2","katex-grayF":"#888d93","katex-grayG":"#626569","katex-grayH":"#3b3e40","katex-grayI":"#21242c","katex-kaBlue":"#314453","katex-kaGreen":"#71B307"};a.prototype.getColor=function(){if(this.phantom){return"transparent"}else{return i[this.color]||this.color}};t.exports=a},{}],6:[function(e,t,r){function a(e,t){var r="KaTeX parse error: "+e;var i;var n;if(t&&t.lexer&&t.start<=t.end){var s=t.lexer.input;i=t.start;n=t.end;if(i===s.length){r+=" at end of input: "}else{r+=" at position "+(i+1)+": "}var l=s.slice(i,n).replace(/[^]/g,"$&\u0332");var o;if(i>15){o="\u2026"+s.slice(i-15,i)}else{o=s.slice(0,i)}var u;if(n+15<s.length){u=s.slice(n,n+15)+"\u2026"}else{u=s.slice(n)}r+=o+l+u}var p=new Error(r);p.name="ParseError";p.__proto__=a.prototype;p.position=i;return p}a.prototype.__proto__=Error.prototype;t.exports=a},{}],7:[function(e,t,r){var a=e("./functions");var i=e("./environments");var n=e("./MacroExpander");var s=e("./symbols");var l=e("./utils");var o=e("./unicodeRegexes").cjkRegex;var u=e("./parseData");var p=e("./ParseError");function h(e,t){this.gullet=new n(e,t.macros);this.settings=t;this.leftrightDepth=0}var c=u.ParseNode;function m(e,t,r){this.result=e;this.isFunction=t;this.token=r}h.prototype.expect=function(e,t){if(this.nextToken.text!==e){throw new p("Expected '"+e+"', got '"+this.nextToken.text+"'",this.nextToken)}if(t!==false){this.consume()}};h.prototype.consume=function(){this.nextToken=this.gullet.get(this.mode==="math")};h.prototype.switchMode=function(e){this.gullet.unget(this.nextToken);this.mode=e;this.consume()};h.prototype.parse=function(){this.mode="math";this.consume();var e=this.parseInput();return e};h.prototype.parseInput=function(){var e=this.parseExpression(false);this.expect("EOF",false);return e};var f=["}","\\end","\\right","&","\\\\","\\cr"];h.prototype.parseExpression=function(e,t){var r=[];while(true){var i=this.nextToken;if(f.indexOf(i.text)!==-1){break}if(t&&i.text===t){break}if(e&&a[i.text]&&a[i.text].infix){break}var n=this.parseAtom();if(!n){if(!this.settings.throwOnError&&i.text[0]==="\\"){var s=this.handleUnsupportedCmd();r.push(s);continue}break}r.push(n)}return this.handleInfixNodes(r)};h.prototype.handleInfixNodes=function(e){var t=-1;var r;for(var a=0;a<e.length;a++){var i=e[a];if(i.type==="infix"){if(t!==-1){throw new p("only one infix operator per group",i.value.token)}t=a;r=i.value.replaceWith}}if(t!==-1){var n;var s;var l=e.slice(0,t);var o=e.slice(t+1);if(l.length===1&&l[0].type==="ordgroup"){n=l[0]}else{n=new c("ordgroup",l,this.mode)}if(o.length===1&&o[0].type==="ordgroup"){s=o[0]}else{s=new c("ordgroup",o,this.mode)}var u=this.callFunction(r,[n,s],null);return[new c(u.type,u,this.mode)]}else{return e}};var v=1;h.prototype.handleSupSubscript=function(e){var t=this.nextToken;var r=t.text;this.consume();var i=this.parseGroup();if(!i){if(!this.settings.throwOnError&&this.nextToken.text[0]==="\\"){return this.handleUnsupportedCmd()}else{throw new p("Expected group after '"+r+"'",t)}}else if(i.isFunction){var n=a[i.result].greediness;if(n>v){return this.parseFunction(i)}else{throw new p("Got function '"+i.result+"' with no arguments "+"as "+e,t)}}else{return i.result}};h.prototype.handleUnsupportedCmd=function(){var e=this.nextToken.text;var t=[];for(var r=0;r<e.length;r++){t.push(new c("textord",e[r],"text"))}var a=new c("text",{body:t,type:"text"},this.mode);var i=new c("color",{color:this.settings.errorColor,value:[a],type:"color"},this.mode);this.consume();return i};h.prototype.parseAtom=function(){var e=this.parseImplicitGroup();if(this.mode==="text"){return e}var t;var r;while(true){var a=this.nextToken;if(a.text==="\\limits"||a.text==="\\nolimits"){if(!e||e.type!=="op"){throw new p("Limit controls must follow a math operator",a)}else{var i=a.text==="\\limits";e.value.limits=i;e.value.alwaysHandleSupSub=true}this.consume()}else if(a.text==="^"){if(t){throw new p("Double superscript",a)}t=this.handleSupSubscript("superscript")}else if(a.text==="_"){if(r){throw new p("Double subscript",a)}r=this.handleSupSubscript("subscript")}else if(a.text==="'"){var n=new c("textord","\\prime",this.mode);var s=[n];this.consume();while(this.nextToken.text==="'"){s.push(n);this.consume()}t=new c("ordgroup",s,this.mode)}else{break}}if(t||r){return new c("supsub",{base:e,sup:t,sub:r},this.mode)}else{return e}};var d=["\\tiny","\\scriptsize","\\footnotesize","\\small","\\normalsize","\\large","\\Large","\\LARGE","\\huge","\\Huge"];var g=["\\displaystyle","\\textstyle","\\scriptstyle","\\scriptscriptstyle"];h.prototype.parseImplicitGroup=function(){var e=this.parseSymbol();if(e==null){return this.parseFunction()}var t=e.result;var r;if(t==="\\left"){var a=this.parseFunction(e);++this.leftrightDepth;r=this.parseExpression(false);--this.leftrightDepth;this.expect("\\right",false);var n=this.parseFunction();return new c("leftright",{body:r,left:a.value.value,right:n.value.value},this.mode)}else if(t==="\\begin"){var s=this.parseFunction(e);var o=s.value.name;if(!i.hasOwnProperty(o)){throw new p("No such environment: "+o,s.value.nameGroup)}var u=i[o];var h=this.parseArguments("\\begin{"+o+"}",u);var m={mode:this.mode,envName:o,parser:this,positions:h.pop()};var f=u.handler(m,h);this.expect("\\end",false);var v=this.nextToken;var y=this.parseFunction();if(y.value.name!==o){throw new p("Mismatch: \\begin{"+o+"} matched "+"by \\end{"+y.value.name+"}",v)}f.position=y.position;return f}else if(l.contains(d,t)){r=this.parseExpression(false);return new c("sizing",{size:"size"+(l.indexOf(d,t)+1),value:r},this.mode)}else if(l.contains(g,t)){r=this.parseExpression(true);return new c("styling",{style:t.slice(1,t.length-5),value:r},this.mode)}else{return this.parseFunction(e)}};h.prototype.parseFunction=function(e){if(!e){e=this.parseGroup()}if(e){if(e.isFunction){var t=e.result;var r=a[t];if(this.mode==="text"&&!r.allowedInText){throw new p("Can't use function '"+t+"' in text mode",e.token)}var i=this.parseArguments(t,r);var n=e.token;var s=this.callFunction(t,i,i.pop(),n);return new c(s.type,s,this.mode)}else{return e.result}}else{return null}};h.prototype.callFunction=function(e,t,r,i){var n={funcName:e,parser:this,positions:r,token:i};return a[e].handler(n,t)};h.prototype.parseArguments=function(e,t){var r=t.numArgs+t.numOptionalArgs;if(r===0){return[[this.pos]]}var i=t.greediness;var n=[this.pos];var s=[];for(var l=0;l<r;l++){var o=this.nextToken;var u=t.argTypes&&t.argTypes[l];var h;if(l<t.numOptionalArgs){if(u){h=this.parseGroupOfType(u,true)}else{h=this.parseGroup(true)}if(!h){s.push(null);n.push(this.pos);continue}}else{if(u){h=this.parseGroupOfType(u)}else{h=this.parseGroup()}if(!h){if(!this.settings.throwOnError&&this.nextToken.text[0]==="\\"){h=new m(this.handleUnsupportedCmd(this.nextToken.text),false)}else{throw new p("Expected group after '"+e+"'",o)}}}var c;if(h.isFunction){var f=a[h.result].greediness;if(f>i){c=this.parseFunction(h)}else{throw new p("Got function '"+h.result+"' as "+"argument to '"+e+"'",o)}}else{c=h.result}s.push(c);n.push(this.pos)}s.push(n);return s};h.prototype.parseGroupOfType=function(e,t){var r=this.mode;if(e==="original"){e=r}if(e==="color"){return this.parseColorGroup(t)}if(e==="size"){return this.parseSizeGroup(t)}this.switchMode(e);if(e==="text"){while(this.nextToken.text===" "){this.consume()}}var a=this.parseGroup(t);this.switchMode(r);return a};h.prototype.parseStringGroup=function(e,t){if(t&&this.nextToken.text!=="["){return null}var r=this.mode;this.mode="text";this.expect(t?"[":"{");var a="";var i=this.nextToken;var n=i;while(this.nextToken.text!==(t?"]":"}")){if(this.nextToken.text==="EOF"){throw new p("Unexpected end of input in "+e,i.range(this.nextToken,a))}n=this.nextToken;a+=n.text;this.consume()}this.mode=r;this.expect(t?"]":"}");return i.range(n,a)};h.prototype.parseRegexGroup=function(e,t){var r=this.mode;this.mode="text";var a=this.nextToken;var i=a;var n="";while(this.nextToken.text!=="EOF"&&e.test(n+this.nextToken.text)){i=this.nextToken;n+=i.text;this.consume()}if(n===""){throw new p("Invalid "+t+": '"+a.text+"'",a)}this.mode=r;return a.range(i,n)};h.prototype.parseColorGroup=function(e){var t=this.parseStringGroup("color",e);if(!t){return null}var r=/^(#[a-z0-9]+|[a-z]+)$/i.exec(t.text);if(!r){throw new p("Invalid color: '"+t.text+"'",t)}return new m(new c("color",r[0],this.mode),false)};h.prototype.parseSizeGroup=function(e){var t;if(!e&&this.nextToken.text!=="{"){t=this.parseRegexGroup(/^[-+]? *(?:$|\d+|\d+\.\d*|\.\d*) *[a-z]{0,2}$/,"size")}else{t=this.parseStringGroup("size",e)}if(!t){return null}var r=/([-+]?) *(\d+(?:\.\d*)?|\.\d+) *([a-z]{2})/.exec(t.text);if(!r){throw new p("Invalid size: '"+t.text+"'",t)}var a={number:+(r[1]+r[2]),unit:r[3]};if(a.unit!=="em"&&a.unit!=="ex"&&a.unit!=="mu"){throw new p("Invalid unit: '"+a.unit+"'",t)}return new m(new c("color",a,this.mode),false)};h.prototype.parseGroup=function(e){var t=this.nextToken;if(this.nextToken.text===(e?"[":"{")){this.consume();var r=this.parseExpression(false,e?"]":null);var a=this.nextToken;this.expect(e?"]":"}");if(this.mode==="text"){this.formLigatures(r)}return new m(new c("ordgroup",r,this.mode,t,a),false)}else{return e?null:this.parseSymbol()}};h.prototype.formLigatures=function(e){var t;var r=e.length-1;for(t=0;t<r;++t){var a=e[t];var i=a.value;if(i==="-"&&e[t+1].value==="-"){if(t+1<r&&e[t+2].value==="-"){e.splice(t,3,new c("textord","---","text",a,e[t+2]));r-=2}else{e.splice(t,2,new c("textord","--","text",a,e[t+1]));r-=1}}if((i==="'"||i==="`")&&e[t+1].value===i){e.splice(t,2,new c("textord",i+i,"text",a,e[t+1]));r-=1}}};h.prototype.parseSymbol=function(){var e=this.nextToken;if(a[e.text]){this.consume();return new m(e.text,true,e)}else if(s[this.mode][e.text]){this.consume();return new m(new c(s[this.mode][e.text].group,e.text,this.mode,e),false,e)}else if(this.mode==="text"&&o.test(e.text)){this.consume();return new m(new c("textord",e.text,this.mode,e),false,e)}else{return null}};h.prototype.ParseNode=c;t.exports=h},{"./MacroExpander":4,"./ParseError":6,"./environments":16,"./functions":19,"./parseData":21,"./symbols":23,"./unicodeRegexes":24,"./utils":25}],8:[function(e,t,r){function a(e,t){return e===undefined?t:e}function i(e){e=e||{};this.displayMode=a(e.displayMode,false);this.throwOnError=a(e.throwOnError,true);this.errorColor=a(e.errorColor,"#cc0000");this.macros=e.macros||{}}t.exports=i},{}],9:[function(e,t,r){var a=e("./fontMetrics.js").sigmas;var i=[{},{},{}];var n;for(var s in a){if(a.hasOwnProperty(s)){for(n=0;n<3;n++){i[n][s]=a[s][n]}}}for(n=0;n<3;n++){i[n].emPerEx=a.xHeight[n]/a.quad[n]}function l(e,t,r,a){this.id=e;this.size=t;this.cramped=a;this.sizeMultiplier=r;this.metrics=i[t>0?t-1:0]}l.prototype.sup=function(){return y[x[this.id]]};l.prototype.sub=function(){return y[b[this.id]]};l.prototype.fracNum=function(){return y[w[this.id]]};l.prototype.fracDen=function(){return y[k[this.id]]};l.prototype.cramp=function(){return y[z[this.id]]};l.prototype.cls=function(){return d[this.size]+(this.cramped?" cramped":" uncramped")};l.prototype.reset=function(){return g[this.size]};l.prototype.isTight=function(){return this.size>=2};var o=0;var u=1;var p=2;var h=3;var c=4;var m=5;var f=6;var v=7;var d=["displaystyle textstyle","textstyle","scriptstyle","scriptscriptstyle"];var g=["reset-textstyle","reset-textstyle","reset-scriptstyle","reset-scriptscriptstyle"];var y=[new l(o,0,1,false),new l(u,0,1,true),new l(p,1,1,false),new l(h,1,1,true),new l(c,2,.7,false),new l(m,2,.7,true),new l(f,3,.5,false),new l(v,3,.5,true)];var x=[c,m,c,m,f,v,f,v];var b=[m,m,m,m,v,v,v,v];var w=[p,h,c,m,f,v,f,v];var k=[h,h,m,m,v,v,v,v];var z=[u,u,h,h,m,m,v,v];t.exports={DISPLAY:y[o],TEXT:y[p],SCRIPT:y[c],SCRIPTSCRIPT:y[f]}},{"./fontMetrics.js":17}],10:[function(e,t,r){var a=e("./domTree");var i=e("./fontMetrics");var n=e("./symbols");var s=e("./utils");var l=["\\Gamma","\\Delta","\\Theta","\\Lambda","\\Xi","\\Pi","\\Sigma","\\Upsilon","\\Phi","\\Psi","\\Omega"];var o=["\u0131","\u0237","\xa3"];var u=function(e,t,r,s,l){if(n[r][e]&&n[r][e].replace){e=n[r][e].replace}var o=i.getCharacterMetrics(e,t);var u;if(o){var p=o.italic;if(r==="text"){p=0}u=new a.symbolNode(e,o.height,o.depth,p,o.skew,l)}else{typeof console!=="undefined"&&console.warn("No character metrics for '"+e+"' in style '"+t+"'");u=new a.symbolNode(e,0,0,0,0,l)}if(s){if(s.style.isTight()){u.classes.push("mtight")}if(s.getColor()){u.style.color=s.getColor()}}return u};var p=function(e,t,r,a){if(e==="\\"||n[t][e].font==="main"){return u(e,"Main-Regular",t,r,a)}else{return u(e,"AMS-Regular",t,r,a.concat(["amsrm"]))}};var h=function(e,t,r,a,i){if(i==="mathord"){return c(e,t,r,a)}else if(i==="textord"){return u(e,"Main-Regular",t,r,a.concat(["mathrm"]))}else{throw new Error("unexpected type: "+i+" in mathDefault")}};var c=function(e,t,r,a){if(/[0-9]/.test(e.charAt(0))||s.contains(o,e)||s.contains(l,e)){return u(e,"Main-Italic",t,r,a.concat(["mainit"]))}else{return u(e,"Math-Italic",t,r,a.concat(["mathit"]))}};var m=function(e,t,r){var a=e.mode;var l=e.value;if(n[a][l]&&n[a][l].replace){l=n[a][l].replace}var p=["mord"];var m=t.font;if(m){if(m==="mathit"||s.contains(o,l)){return c(l,a,t,p)}else{var f=k[m].fontName;if(i.getCharacterMetrics(l,f)){return u(l,f,a,t,p.concat([m]))}else{return h(l,a,t,p,r)}}}else{return h(l,a,t,p,r)}};var f=function(e){var t=0;var r=0;var a=0;if(e.children){for(var i=0;i<e.children.length;i++){if(e.children[i].height>t){t=e.children[i].height}if(e.children[i].depth>r){r=e.children[i].depth}if(e.children[i].maxFontSize>a){a=e.children[i].maxFontSize}}}e.height=t;e.depth=r;e.maxFontSize=a};var v=function(e,t,r){var i=new a.span(e,t,r);f(i);return i};var d=function(e,t){e.children=t.concat(e.children);f(e)};var g=function(e){var t=new a.documentFragment(e);f(t);return t};var y=function(e,t){var r=v([],[new a.symbolNode("\u200b")]);r.style.fontSize=t/e.style.sizeMultiplier+"em";var i=v(["fontsize-ensurer","reset-"+e.size,"size5"],[r]);return i};var x=function(e,t,r,i){var n;var s;var l;if(t==="individualShift"){var o=e;e=[o[0]];n=-o[0].shift-o[0].elem.depth;s=n;for(l=1;l<o.length;l++){var u=-o[l].shift-s-o[l].elem.depth;var p=u-(o[l-1].elem.height+o[l-1].elem.depth);s=s+u;e.push({type:"kern",size:p});e.push(o[l])}}else if(t==="top"){var h=r;for(l=0;l<e.length;l++){if(e[l].type==="kern"){h-=e[l].size}else{h-=e[l].elem.height+e[l].elem.depth}}n=h}else if(t==="bottom"){n=-r}else if(t==="shift"){n=-e[0].elem.depth-r}else if(t==="firstBaseline"){n=-e[0].elem.depth}else{n=0}var c=0;for(l=0;l<e.length;l++){if(e[l].type==="elem"){c=Math.max(c,e[l].elem.maxFontSize)}}var m=y(i,c);var f=[];s=n;for(l=0;l<e.length;l++){if(e[l].type==="kern"){s+=e[l].size}else{var d=e[l].elem;var g=-d.depth-s;s+=d.height+d.depth;var x=v([],[m,d]);x.height-=g;x.depth+=g;x.style.top=g+"em";f.push(x)}}var b=v(["baseline-fix"],[m,new a.symbolNode("\u200b")]);f.push(b);var w=v(["vlist"],f);w.height=Math.max(s,w.height);w.depth=Math.max(-n,w.depth);return w};var b={size1:.5,size2:.7,size3:.8,size4:.9,size5:1,size6:1.2,size7:1.44,size8:1.73,size9:2.07,size10:2.49};var w={"\\qquad":{size:"2em",className:"qquad"},"\\quad":{size:"1em",className:"quad"},"\\enspace":{size:"0.5em",className:"enspace"},"\\;":{size:"0.277778em",className:"thickspace"},"\\:":{size:"0.22222em",className:"mediumspace"},"\\,":{size:"0.16667em",className:"thinspace"},"\\!":{size:"-0.16667em",className:"negativethinspace"}};var k={mathbf:{variant:"bold",fontName:"Main-Bold"},mathrm:{variant:"normal",fontName:"Main-Regular"},textit:{variant:"italic",fontName:"Main-Italic"},mathbb:{variant:"double-struck",fontName:"AMS-Regular"},mathcal:{variant:"script",fontName:"Caligraphic-Regular"},mathfrak:{variant:"fraktur",fontName:"Fraktur-Regular"},mathscr:{variant:"script",fontName:"Script-Regular"},mathsf:{variant:"sans-serif",fontName:"SansSerif-Regular"},mathtt:{variant:"monospace",fontName:"Typewriter-Regular"}};t.exports={fontMap:k,makeSymbol:u,mathsym:p,makeSpan:v,makeFragment:g,makeVList:x,makeOrd:m,prependChildren:d,sizingMultiplier:b,spacingFunctions:w}},{"./domTree":15,"./fontMetrics":17,"./symbols":23,"./utils":25}],11:[function(e,t,r){var a=e("./ParseError");var i=e("./Style");var n=e("./buildCommon");var s=e("./delimiter");var l=e("./domTree");var o=e("./fontMetrics");var u=e("./utils");var p=n.makeSpan;var h=function(e){return e instanceof l.span&&e.classes[0]==="mspace"};var c=function(e){return e&&e.classes[0]==="mbin"};var m=function(e,t){if(e){return u.contains(["mbin","mopen","mrel","mop","mpunct"],e.classes[0])}else{return t}};var f=function(e,t){if(e){return u.contains(["mrel","mclose","mpunct"],e.classes[0])}else{return t}};var v=function(e,t,r){var a=[];for(var i=0;i<e.length;i++){var s=e[i];var o=z(s,t);if(o instanceof l.documentFragment){Array.prototype.push.apply(a,o.children)}else{a.push(o)}}var u=null;for(i=0;i<a.length;i++){if(h(a[i])){u=u||[];u.push(a[i]);a.splice(i,1);i--}else if(u){if(a[i]instanceof l.symbolNode){a[i]=p([].concat(a[i].classes),[a[i]])}n.prependChildren(a[i],u);u=null}}if(u){Array.prototype.push.apply(a,u)}for(i=0;i<a.length;i++){if(c(a[i])&&(m(a[i-1],r)||f(a[i+1],r))){a[i].classes[0]="mord"}}return a};var d=function(e){if(e instanceof l.documentFragment){if(e.children.length){return d(e.children[e.children.length-1])}}else{if(u.contains(["mord","mop","mbin","mrel","mopen","mclose","mpunct","minner"],e.classes[0])){return e.classes[0]}}return null};var g=function(e,t){if(!e){return false}else if(e.type==="op"){return e.value.limits&&(t.style.size===i.DISPLAY.size||e.value.alwaysHandleSupSub)}else if(e.type==="accent"){return x(e.value.base)}else{return null}};var y=function(e){if(!e){return false}else if(e.type==="ordgroup"){if(e.value.length===1){return y(e.value[0])}else{return e}}else if(e.type==="color"){if(e.value.value.length===1){return y(e.value.value[0])}else{return e}}else if(e.type==="font"){return y(e.value.body)}else{return e}};var x=function(e){var t=y(e);return t.type==="mathord"||t.type==="textord"||t.type==="bin"||t.type==="rel"||t.type==="inner"||t.type==="open"||t.type==="close"||t.type==="punct"};var b=function(e,t){return p(t.concat(["sizing","reset-"+e.size,"size5",e.style.reset(),i.TEXT.cls(),"nulldelimiter"]))};var w={};w.mathord=function(e,t){return n.makeOrd(e,t,"mathord")};w.textord=function(e,t){return n.makeOrd(e,t,"textord")};w.bin=function(e,t){return n.mathsym(e.value,e.mode,t,["mbin"])};w.rel=function(e,t){return n.mathsym(e.value,e.mode,t,["mrel"])};w.open=function(e,t){return n.mathsym(e.value,e.mode,t,["mopen"])};w.close=function(e,t){return n.mathsym(e.value,e.mode,t,["mclose"])};w.inner=function(e,t){return n.mathsym(e.value,e.mode,t,["minner"])};w.punct=function(e,t){return n.mathsym(e.value,e.mode,t,["mpunct"])};w.ordgroup=function(e,t){return p(["mord",t.style.cls()],v(e.value,t.reset(),true),t)};w.text=function(e,t){var r=t.withFont(e.value.style);var a=v(e.value.body,r,true);for(var i=0;i<a.length-1;i++){if(a[i].tryCombine(a[i+1])){a.splice(i+1,1);i--}}return p(["mord","text",r.style.cls()],a,r)};w.color=function(e,t){var r=v(e.value.value,t.withColor(e.value.color),false);return new n.makeFragment(r)};w.supsub=function(e,t){if(g(e.value.base,t)){return w[e.value.base.type](e,t)}var r=z(e.value.base,t.reset());var a;var s;var u;var h;var c=t.style;var m;if(e.value.sup){m=t.withStyle(c.sup());u=z(e.value.sup,m);a=p([c.reset(),c.sup().cls()],[u],m)}if(e.value.sub){m=t.withStyle(c.sub());h=z(e.value.sub,m);s=p([c.reset(),c.sub().cls()],[h],m)}var f;var v;if(x(e.value.base)){f=0;v=0}else{f=r.height-c.metrics.supDrop;v=r.depth+c.metrics.subDrop}var y;if(c===i.DISPLAY){y=c.metrics.sup1}else if(c.cramped){y=c.metrics.sup3}else{y=c.metrics.sup2}var b=i.TEXT.sizeMultiplier*c.sizeMultiplier;var k=.5/o.metrics.ptPerEm/b+"em";var S;if(!e.value.sup){v=Math.max(v,c.metrics.sub1,h.height-.8*c.metrics.xHeight);S=n.makeVList([{type:"elem",elem:s}],"shift",v,t);S.children[0].style.marginRight=k;if(r instanceof l.symbolNode){S.children[0].style.marginLeft=-r.italic+"em"}}else if(!e.value.sub){f=Math.max(f,y,u.depth+.25*c.metrics.xHeight);S=n.makeVList([{type:"elem",elem:a}],"shift",-f,t);S.children[0].style.marginRight=k}else{f=Math.max(f,y,u.depth+.25*c.metrics.xHeight);v=Math.max(v,c.metrics.sub2);var M=o.metrics.defaultRuleThickness;if(f-u.depth-(h.height-v)<4*M){v=4*M-(f-u.depth)+h.height;var T=.8*c.metrics.xHeight-(f-u.depth);if(T>0){f+=T;v-=T}}S=n.makeVList([{type:"elem",elem:s,shift:v},{type:"elem",elem:a,shift:-f}],"individualShift",null,t);if(r instanceof l.symbolNode){S.children[0].style.marginLeft=-r.italic+"em"}S.children[0].style.marginRight=k;S.children[1].style.marginRight=k}var A=d(r)||"mord";return p([A],[r,p(["msupsub"],[S])],t)};w.genfrac=function(e,t){var r=t.style;if(e.value.size==="display"){r=i.DISPLAY}else if(e.value.size==="text"){r=i.TEXT}var a=r.fracNum();var l=r.fracDen();var u;u=t.withStyle(a);var h=z(e.value.numer,u);var c=p([r.reset(),a.cls()],[h],u);u=t.withStyle(l);var m=z(e.value.denom,u);var f=p([r.reset(),l.cls()],[m],u);var v;if(e.value.hasBarLine){v=o.metrics.defaultRuleThickness/t.style.sizeMultiplier}else{v=0}var d;var g;var y;if(r.size===i.DISPLAY.size){d=r.metrics.num1;if(v>0){g=3*v}else{g=7*o.metrics.defaultRuleThickness}y=r.metrics.denom1}else{if(v>0){d=r.metrics.num2;g=v}else{d=r.metrics.num3;g=3*o.metrics.defaultRuleThickness}y=r.metrics.denom2}var x;if(v===0){var w=d-h.depth-(m.height-y);if(w<g){d+=.5*(g-w);y+=.5*(g-w)}x=n.makeVList([{type:"elem",elem:f,shift:y},{type:"elem",elem:c,shift:-d}],"individualShift",null,t)}else{var k=r.metrics.axisHeight;if(d-h.depth-(k+.5*v)<g){d+=g-(d-h.depth-(k+.5*v))}if(k-.5*v-(m.height-y)<g){y+=g-(k-.5*v-(m.height-y))}var S=p([t.style.reset(),i.TEXT.cls(),"frac-line"]);S.height=v;var M=-(k-.5*v);x=n.makeVList([{type:"elem",elem:f,shift:y},{type:"elem",elem:S,shift:M},{type:"elem",elem:c,shift:-d}],"individualShift",null,t)}x.height*=r.sizeMultiplier/t.style.sizeMultiplier;x.depth*=r.sizeMultiplier/t.style.sizeMultiplier;var T;if(r.size===i.DISPLAY.size){T=r.metrics.delim1}else{T=r.metrics.delim2}var A;var N;if(e.value.leftDelim==null){A=b(t,["mopen"])}else{A=s.customSizedDelim(e.value.leftDelim,T,true,t.withStyle(r),e.mode,["mopen"])}if(e.value.rightDelim==null){N=b(t,["mclose"])}else{N=s.customSizedDelim(e.value.rightDelim,T,true,t.withStyle(r),e.mode,["mclose"])}return p(["mord",t.style.reset(),r.cls()],[A,p(["mfrac"],[x]),N],t)};var k=function(e,t){var r=e.number;if(e.unit==="ex"){r*=t.metrics.emPerEx}else if(e.unit==="mu"){r/=18}return r};w.array=function(e,t){var r;var i;var s=e.value.body.length;var l=0;var h=new Array(s);var c=t.style;var m=1/o.metrics.ptPerEm;var f=5*m;var v=12*m;var d=u.deflt(e.value.arraystretch,1);var g=d*v;var y=.7*g;var x=.3*g;var b=0;for(r=0;r<e.value.body.length;++r){var w=e.value.body[r];var S=y;var M=x;if(l<w.length){l=w.length}var T=new Array(w.length);for(i=0;i<w.length;++i){var A=z(w[i],t);if(M<A.depth){M=A.depth}if(S<A.height){S=A.height}T[i]=A}var N=0;if(e.value.rowGaps[r]){N=k(e.value.rowGaps[r].value,c);if(N>0){N+=x;if(M<N){M=N}N=0}}T.height=S;T.depth=M;b+=S;T.pos=b;b+=M+N;h[r]=T}var q=b/2+c.metrics.axisHeight;var R=e.value.cols||[];var E=[];var C;var D;for(i=0,D=0;i<l||D<R.length;++i,++D){var O=R[D]||{};var P=true;while(O.type==="separator"){if(!P){C=p(["arraycolsep"],[]);C.style.width=o.metrics.doubleRuleSep+"em";E.push(C)}if(O.separator==="|"){var F=p(["vertical-separator"],[]);F.style.height=b+"em";F.style.verticalAlign=-(b-q)+"em";E.push(F)}else{throw new a("Invalid separator type: "+O.separator)}D++;O=R[D]||{};P=false}if(i>=l){continue}var I;if(i>0||e.value.hskipBeforeAndAfter){I=u.deflt(O.pregap,f);if(I!==0){C=p(["arraycolsep"],[]);C.style.width=I+"em";E.push(C)}}var L=[];for(r=0;r<s;++r){var B=h[r];var G=B[i];if(!G){continue}var V=B.pos-q;G.depth=B.depth;G.height=B.height;L.push({type:"elem",elem:G,shift:V})}L=n.makeVList(L,"individualShift",null,t);L=p(["col-align-"+(O.align||"c")],[L]);E.push(L);if(i<l-1||e.value.hskipBeforeAndAfter){I=u.deflt(O.postgap,f);if(I!==0){C=p(["arraycolsep"],[]);C.style.width=I+"em";E.push(C)}}}h=p(["mtable"],E);return p(["mord"],[h],t)};w.spacing=function(e,t){if(e.value==="\\ "||e.value==="\\space"||e.value===" "||e.value==="~"){if(e.mode==="text"){return n.makeOrd(e,t,"textord")}else{return p(["mspace"],[n.mathsym(e.value,e.mode,t)],t)}}else{return p(["mspace",n.spacingFunctions[e.value].className],[],t)}};w.llap=function(e,t){var r=p(["inner"],[z(e.value.body,t.reset())]);var a=p(["fix"],[]);return p(["mord","llap",t.style.cls()],[r,a],t)};w.rlap=function(e,t){var r=p(["inner"],[z(e.value.body,t.reset())]);var a=p(["fix"],[]);return p(["mord","rlap",t.style.cls()],[r,a],t)};w.op=function(e,t){var r;var a;var s=false;if(e.type==="supsub"){r=e.value.sup;a=e.value.sub;e=e.value.base;s=true}var l=t.style;var h=["\\smallint"];var c=false;if(l.size===i.DISPLAY.size&&e.value.symbol&&!u.contains(h,e.value.body)){c=true}var m;var f=0;var d=0;if(e.value.symbol){var g=c?"Size2-Regular":"Size1-Regular";m=n.makeSymbol(e.value.body,g,"math",t,["mop","op-symbol",c?"large-op":"small-op"]);f=(m.height-m.depth)/2-l.metrics.axisHeight*l.sizeMultiplier;d=m.italic}else if(e.value.value){var y=v(e.value.value,t,true);m=p(["mop"],y,t)}else{var x=[];for(var b=1;b<e.value.body.length;b++){x.push(n.mathsym(e.value.body[b],e.mode))}m=p(["mop"],x,t)}if(s){m=p([],[m]);var w;var k;var S;var M;var T;if(r){T=t.withStyle(l.sup());var A=z(r,T);w=p([l.reset(),l.sup().cls()],[A],T);k=Math.max(o.metrics.bigOpSpacing1,o.metrics.bigOpSpacing3-A.depth)}if(a){T=t.withStyle(l.sub());var N=z(a,T);S=p([l.reset(),l.sub().cls()],[N],T);M=Math.max(o.metrics.bigOpSpacing2,o.metrics.bigOpSpacing4-N.height)}var q;var R;var E;if(!r){R=m.height-f;q=n.makeVList([{type:"kern",size:o.metrics.bigOpSpacing5},{type:"elem",elem:S},{type:"kern",size:M},{type:"elem",elem:m}],"top",R,t);q.children[0].style.marginLeft=-d+"em"}else if(!a){E=m.depth+f;q=n.makeVList([{type:"elem",elem:m},{type:"kern",size:k},{type:"elem",elem:w},{type:"kern",size:o.metrics.bigOpSpacing5}],"bottom",E,t);q.children[1].style.marginLeft=d+"em"}else if(!r&&!a){return m}else{E=o.metrics.bigOpSpacing5+S.height+S.depth+M+m.depth+f;
+q=n.makeVList([{type:"kern",size:o.metrics.bigOpSpacing5},{type:"elem",elem:S},{type:"kern",size:M},{type:"elem",elem:m},{type:"kern",size:k},{type:"elem",elem:w},{type:"kern",size:o.metrics.bigOpSpacing5}],"bottom",E,t);q.children[0].style.marginLeft=-d+"em";q.children[2].style.marginLeft=d+"em"}return p(["mop","op-limits"],[q],t)}else{if(e.value.symbol){m.style.top=f+"em"}return m}};w.mod=function(e,t){var r=[];if(e.value.modType==="bmod"){if(!t.style.isTight()){r.push(p(["mspace","negativemediumspace"],[],t))}r.push(p(["mspace","thickspace"],[],t))}else if(t.style.size===i.DISPLAY.size){r.push(p(["mspace","quad"],[],t))}else if(e.value.modType==="mod"){r.push(p(["mspace","twelvemuspace"],[],t))}else{r.push(p(["mspace","eightmuspace"],[],t))}if(e.value.modType==="pod"||e.value.modType==="pmod"){r.push(n.mathsym("(",e.mode))}if(e.value.modType!=="pod"){var a=[n.mathsym("m",e.mode),n.mathsym("o",e.mode),n.mathsym("d",e.mode)];if(e.value.modType==="bmod"){r.push(p(["mbin"],a,t));r.push(p(["mspace","thickspace"],[],t));if(!t.style.isTight()){r.push(p(["mspace","negativemediumspace"],[],t))}}else{Array.prototype.push.apply(r,a);r.push(p(["mspace","sixmuspace"],[],t))}}if(e.value.value){Array.prototype.push.apply(r,v(e.value.value,t,false))}if(e.value.modType==="pod"||e.value.modType==="pmod"){r.push(n.mathsym(")",e.mode))}return n.makeFragment(r)};w.katex=function(e,t){var r=p(["k"],[n.mathsym("K",e.mode)],t);var a=p(["a"],[n.mathsym("A",e.mode)],t);a.height=(a.height+.2)*.75;a.depth=(a.height-.2)*.75;var i=p(["t"],[n.mathsym("T",e.mode)],t);var s=p(["e"],[n.mathsym("E",e.mode)],t);s.height=s.height-.2155;s.depth=s.depth+.2155;var l=p(["x"],[n.mathsym("X",e.mode)],t);return p(["mord","katex-logo"],[r,a,i,s,l],t)};w.overline=function(e,t){var r=t.style;var a=z(e.value.body,t.withStyle(r.cramp()));var s=o.metrics.defaultRuleThickness/r.sizeMultiplier;var l=p([r.reset(),i.TEXT.cls(),"overline-line"]);l.height=s;l.maxFontSize=1;var u=n.makeVList([{type:"elem",elem:a},{type:"kern",size:3*s},{type:"elem",elem:l},{type:"kern",size:s}],"firstBaseline",null,t);return p(["mord","overline"],[u],t)};w.underline=function(e,t){var r=t.style;var a=z(e.value.body,t);var s=o.metrics.defaultRuleThickness/r.sizeMultiplier;var l=p([r.reset(),i.TEXT.cls(),"underline-line"]);l.height=s;l.maxFontSize=1;var u=n.makeVList([{type:"kern",size:s},{type:"elem",elem:l},{type:"kern",size:3*s},{type:"elem",elem:a}],"top",a.height,t);return p(["mord","underline"],[u],t)};w.sqrt=function(e,t){var r=t.style;var a=z(e.value.body,t.withStyle(r.cramp()));var l=o.metrics.defaultRuleThickness/r.sizeMultiplier;var u=p([r.reset(),i.TEXT.cls(),"sqrt-line"],[],t);u.height=l;u.maxFontSize=1;var h=l;if(r.id<i.TEXT.id){h=r.metrics.xHeight}var c=l+h/4;var m=(a.height+a.depth)*r.sizeMultiplier;var f=m+c+l;var v=p(["sqrt-sign"],[s.customSizedDelim("\\surd",f,false,t,e.mode)],t);var d=v.height+v.depth-l;if(d>a.height+a.depth+c){c=(c+d-a.height-a.depth)/2}var g=-(a.height+c+l)+v.height;v.style.top=g+"em";v.height-=g;v.depth+=g;var y;if(a.height===0&&a.depth===0){y=p()}else{y=n.makeVList([{type:"elem",elem:a},{type:"kern",size:c},{type:"elem",elem:u},{type:"kern",size:l}],"firstBaseline",null,t)}if(!e.value.index){return p(["mord","sqrt"],[v,y],t)}else{var x=t.withStyle(i.SCRIPTSCRIPT);var b=z(e.value.index,x);var w=p([r.reset(),i.SCRIPTSCRIPT.cls()],[b],x);var k=Math.max(v.height,y.height);var S=Math.max(v.depth,y.depth);var M=.6*(k-S);var T=n.makeVList([{type:"elem",elem:w}],"shift",-M,t);var A=p(["root"],[T]);return p(["mord","sqrt"],[A,v,y],t)}};w.sizing=function(e,t){var r=v(e.value.value,t.withSize(e.value.size),false);var a=t.style;var i=n.sizingMultiplier[e.value.size];i=i*a.sizeMultiplier;for(var s=0;s<r.length;s++){var l=u.indexOf(r[s].classes,"sizing");if(l<0){r[s].classes.push("sizing","reset-"+t.size,e.value.size,a.cls());r[s].maxFontSize=i}else if(r[s].classes[l+1]==="reset-"+e.value.size){r[s].classes[l+1]="reset-"+t.size}}return n.makeFragment(r)};w.styling=function(e,t){var r={display:i.DISPLAY,text:i.TEXT,script:i.SCRIPT,scriptscript:i.SCRIPTSCRIPT};var a=r[e.value.style];var s=t.withStyle(a);var l=v(e.value.value,s,false);for(var o=0;o<l.length;o++){var p=u.indexOf(l[o].classes,a.reset());if(p<0){l[o].classes.push(t.style.reset(),a.cls())}else{l[o].classes[p]=t.style.reset()}}return new n.makeFragment(l)};w.font=function(e,t){var r=e.value.font;return z(e.value.body,t.withFont(r))};w.delimsizing=function(e,t){var r=e.value.value;if(r==="."){return p([e.value.mclass])}return s.sizedDelim(r,e.value.size,t,e.mode,[e.value.mclass])};w.leftright=function(e,t){var r=v(e.value.body,t.reset(),true);var a=0;var i=0;var n=false;for(var l=0;l<r.length;l++){if(r[l].isMiddle){n=true}else{a=Math.max(r[l].height,a);i=Math.max(r[l].depth,i)}}var o=t.style;a*=o.sizeMultiplier;i*=o.sizeMultiplier;var u;if(e.value.left==="."){u=b(t,["mopen"])}else{u=s.leftRightDelim(e.value.left,a,i,t,e.mode,["mopen"])}r.unshift(u);if(n){for(l=1;l<r.length;l++){if(r[l].isMiddle){r[l]=s.leftRightDelim(r[l].isMiddle.value,a,i,r[l].isMiddle.options,e.mode,[])}}}var h;if(e.value.right==="."){h=b(t,["mclose"])}else{h=s.leftRightDelim(e.value.right,a,i,t,e.mode,["mclose"])}r.push(h);return p(["minner",o.cls()],r,t)};w.middle=function(e,t){var r;if(e.value.value==="."){r=b(t,[])}else{r=s.sizedDelim(e.value.value,1,t,e.mode,[]);r.isMiddle={value:e.value.value,options:t}}return r};w.rule=function(e,t){var r=p(["mord","rule"],[],t);var a=t.style;var i=0;if(e.value.shift){i=k(e.value.shift,a)}var n=k(e.value.width,a);var s=k(e.value.height,a);i/=a.sizeMultiplier;n/=a.sizeMultiplier;s/=a.sizeMultiplier;r.style.borderRightWidth=n+"em";r.style.borderTopWidth=s+"em";r.style.bottom=i+"em";r.width=n;r.height=s+i;r.depth=-i;return r};w.kern=function(e,t){var r=p(["mord","rule"],[],t);var a=t.style;var i=0;if(e.value.dimension){i=k(e.value.dimension,a)}i/=a.sizeMultiplier;r.style.marginLeft=i+"em";return r};w.accent=function(e,t){var r=e.value.base;var a=t.style;var i;if(e.type==="supsub"){var s=e;e=s.value.base;r=e.value.base;s.value.base=r;i=z(s,t.reset())}var l=z(r,t.withStyle(a.cramp()));var o;if(x(r)){var u=y(r);var h=z(u,t.withStyle(a.cramp()));o=h.skew}else{o=0}var c=Math.min(l.height,a.metrics.xHeight);var m=n.makeSymbol(e.value.accent,"Main-Regular","math",t);m.italic=0;var f=e.value.accent==="\\vec"?"accent-vec":null;var v=p(["accent-body",f],[p([],[m])]);v=n.makeVList([{type:"elem",elem:l},{type:"kern",size:-c},{type:"elem",elem:v}],"firstBaseline",null,t);v.children[1].style.marginLeft=2*o+"em";var d=p(["mord","accent"],[v],t);if(i){i.children[0]=d;i.height=Math.max(d.height,i.height);i.classes[0]="mord";return i}else{return d}};w.phantom=function(e,t){var r=v(e.value.value,t.withPhantom(),false);return new n.makeFragment(r)};w.mclass=function(e,t){var r=v(e.value.value,t,true);return p([e.value.mclass],r,t)};var z=function(e,t){if(!e){return p()}if(w[e.type]){var r=w[e.type](e,t);var i;if(t.style!==t.parentStyle){i=t.style.sizeMultiplier/t.parentStyle.sizeMultiplier;r.height*=i;r.depth*=i}if(t.size!==t.parentSize){i=n.sizingMultiplier[t.size]/n.sizingMultiplier[t.parentSize];r.height*=i;r.depth*=i}return r}else{throw new a("Got group of unknown type: '"+e.type+"'")}};var S=function(e,t){e=JSON.parse(JSON.stringify(e));var r=v(e,t,true);var a=p(["base",t.style.cls()],r,t);var i=p(["strut"]);var n=p(["strut","bottom"]);i.style.height=a.height+"em";n.style.height=a.height+a.depth+"em";n.style.verticalAlign=-a.depth+"em";var s=p(["katex-html"],[i,n,a]);s.setAttribute("aria-hidden","true");return s};t.exports=S},{"./ParseError":6,"./Style":9,"./buildCommon":10,"./delimiter":14,"./domTree":15,"./fontMetrics":17,"./utils":25}],12:[function(e,t,r){var a=e("./buildCommon");var i=e("./fontMetrics");var n=e("./mathMLTree");var s=e("./ParseError");var l=e("./symbols");var o=e("./utils");var u=a.makeSpan;var p=a.fontMap;var h=function(e,t){if(l[t][e]&&l[t][e].replace){e=l[t][e].replace}return new n.TextNode(e)};var c=function(e,t){var r=t.font;if(!r){return null}var a=e.mode;if(r==="mathit"){return"italic"}var n=e.value;if(o.contains(["\\imath","\\jmath"],n)){return null}if(l[a][n]&&l[a][n].replace){n=l[a][n].replace}var s=p[r].fontName;if(i.getCharacterMetrics(n,s)){return p[t.font].variant}return null};var m={};m.mathord=function(e,t){var r=new n.MathNode("mi",[h(e.value,e.mode)]);var a=c(e,t);if(a){r.setAttribute("mathvariant",a)}return r};m.textord=function(e,t){var r=h(e.value,e.mode);var a=c(e,t)||"normal";var i;if(/[0-9]/.test(e.value)){i=new n.MathNode("mn",[r]);if(t.font){i.setAttribute("mathvariant",a)}}else{i=new n.MathNode("mi",[r]);i.setAttribute("mathvariant",a)}return i};m.bin=function(e){var t=new n.MathNode("mo",[h(e.value,e.mode)]);return t};m.rel=function(e){var t=new n.MathNode("mo",[h(e.value,e.mode)]);return t};m.open=function(e){var t=new n.MathNode("mo",[h(e.value,e.mode)]);return t};m.close=function(e){var t=new n.MathNode("mo",[h(e.value,e.mode)]);return t};m.inner=function(e){var t=new n.MathNode("mo",[h(e.value,e.mode)]);return t};m.punct=function(e){var t=new n.MathNode("mo",[h(e.value,e.mode)]);t.setAttribute("separator","true");return t};m.ordgroup=function(e,t){var r=f(e.value,t);var a=new n.MathNode("mrow",r);return a};m.text=function(e,t){var r=f(e.value.body,t);var a=new n.MathNode("mtext",r);return a};m.color=function(e,t){var r=f(e.value.value,t);var a=new n.MathNode("mstyle",r);a.setAttribute("mathcolor",e.value.color);return a};m.supsub=function(e,t){var r=[v(e.value.base,t)];if(e.value.sub){r.push(v(e.value.sub,t))}if(e.value.sup){r.push(v(e.value.sup,t))}var a;if(!e.value.sub){a="msup"}else if(!e.value.sup){a="msub"}else{a="msubsup"}var i=new n.MathNode(a,r);return i};m.genfrac=function(e,t){var r=new n.MathNode("mfrac",[v(e.value.numer,t),v(e.value.denom,t)]);if(!e.value.hasBarLine){r.setAttribute("linethickness","0px")}if(e.value.leftDelim!=null||e.value.rightDelim!=null){var a=[];if(e.value.leftDelim!=null){var i=new n.MathNode("mo",[new n.TextNode(e.value.leftDelim)]);i.setAttribute("fence","true");a.push(i)}a.push(r);if(e.value.rightDelim!=null){var s=new n.MathNode("mo",[new n.TextNode(e.value.rightDelim)]);s.setAttribute("fence","true");a.push(s)}var l=new n.MathNode("mrow",a);return l}return r};m.array=function(e,t){return new n.MathNode("mtable",e.value.body.map(function(e){return new n.MathNode("mtr",e.map(function(e){return new n.MathNode("mtd",[v(e,t)])}))}))};m.sqrt=function(e,t){var r;if(e.value.index){r=new n.MathNode("mroot",[v(e.value.body,t),v(e.value.index,t)])}else{r=new n.MathNode("msqrt",[v(e.value.body,t)])}return r};m.leftright=function(e,t){var r=f(e.value.body,t);if(e.value.left!=="."){var a=new n.MathNode("mo",[h(e.value.left,e.mode)]);a.setAttribute("fence","true");r.unshift(a)}if(e.value.right!=="."){var i=new n.MathNode("mo",[h(e.value.right,e.mode)]);i.setAttribute("fence","true");r.push(i)}var s=new n.MathNode("mrow",r);return s};m.middle=function(e,t){var r=new n.MathNode("mo",[h(e.value.middle,e.mode)]);r.setAttribute("fence","true");return r};m.accent=function(e,t){var r=new n.MathNode("mo",[h(e.value.accent,e.mode)]);var a=new n.MathNode("mover",[v(e.value.base,t),r]);a.setAttribute("accent","true");return a};m.spacing=function(e){var t;if(e.value==="\\ "||e.value==="\\space"||e.value===" "||e.value==="~"){t=new n.MathNode("mtext",[new n.TextNode("\xa0")])}else{t=new n.MathNode("mspace");t.setAttribute("width",a.spacingFunctions[e.value].size)}return t};m.op=function(e,t){var r;if(e.value.symbol){r=new n.MathNode("mo",[h(e.value.body,e.mode)])}else if(e.value.value){r=new n.MathNode("mo",f(e.value.value,t))}else{r=new n.MathNode("mi",[new n.TextNode(e.value.body.slice(1))])}return r};m.mod=function(e,t){var r=[];if(e.value.modType==="pod"||e.value.modType==="pmod"){r.push(new n.MathNode("mo",[h("(",e.mode)]))}if(e.value.modType!=="pod"){r.push(new n.MathNode("mo",[h("mod",e.mode)]))}if(e.value.value){var a=new n.MathNode("mspace");a.setAttribute("width","0.333333em");r.push(a);r=r.concat(f(e.value.value,t))}if(e.value.modType==="pod"||e.value.modType==="pmod"){r.push(new n.MathNode("mo",[h(")",e.mode)]))}return new n.MathNode("mo",r)};m.katex=function(e){var t=new n.MathNode("mtext",[new n.TextNode("KaTeX")]);return t};m.font=function(e,t){var r=e.value.font;return v(e.value.body,t.withFont(r))};m.delimsizing=function(e){var t=[];if(e.value.value!=="."){t.push(h(e.value.value,e.mode))}var r=new n.MathNode("mo",t);if(e.value.mclass==="mopen"||e.value.mclass==="mclose"){r.setAttribute("fence","true")}else{r.setAttribute("fence","false")}return r};m.styling=function(e,t){var r=f(e.value.value,t);var a=new n.MathNode("mstyle",r);var i={display:["0","true"],text:["0","false"],script:["1","false"],scriptscript:["2","false"]};var s=i[e.value.style];a.setAttribute("scriptlevel",s[0]);a.setAttribute("displaystyle",s[1]);return a};m.sizing=function(e,t){var r=f(e.value.value,t);var i=new n.MathNode("mstyle",r);i.setAttribute("mathsize",a.sizingMultiplier[e.value.size]+"em");return i};m.overline=function(e,t){var r=new n.MathNode("mo",[new n.TextNode("\u203e")]);r.setAttribute("stretchy","true");var a=new n.MathNode("mover",[v(e.value.body,t),r]);a.setAttribute("accent","true");return a};m.underline=function(e,t){var r=new n.MathNode("mo",[new n.TextNode("\u203e")]);r.setAttribute("stretchy","true");var a=new n.MathNode("munder",[v(e.value.body,t),r]);a.setAttribute("accentunder","true");return a};m.rule=function(e){var t=new n.MathNode("mrow");return t};m.kern=function(e){var t=new n.MathNode("mrow");return t};m.llap=function(e,t){var r=new n.MathNode("mpadded",[v(e.value.body,t)]);r.setAttribute("lspace","-1width");r.setAttribute("width","0px");return r};m.rlap=function(e,t){var r=new n.MathNode("mpadded",[v(e.value.body,t)]);r.setAttribute("width","0px");return r};m.phantom=function(e,t){var r=f(e.value.value,t);return new n.MathNode("mphantom",r)};m.mclass=function(e,t){var r=f(e.value.value,t);return new n.MathNode("mstyle",r)};var f=function(e,t){var r=[];for(var a=0;a<e.length;a++){var i=e[a];r.push(v(i,t))}return r};var v=function(e,t){if(!e){return new n.MathNode("mrow")}if(m[e.type]){return m[e.type](e,t)}else{throw new s("Got group of unknown type: '"+e.type+"'")}};var d=function(e,t,r){var a=f(e,r);var i=new n.MathNode("mrow",a);var s=new n.MathNode("annotation",[new n.TextNode(t)]);s.setAttribute("encoding","application/x-tex");var l=new n.MathNode("semantics",[i,s]);var o=new n.MathNode("math",[l]);return u(["katex-mathml"],[o])};t.exports=d},{"./ParseError":6,"./buildCommon":10,"./fontMetrics":17,"./mathMLTree":20,"./symbols":23,"./utils":25}],13:[function(e,t,r){var a=e("./buildHTML");var i=e("./buildMathML");var n=e("./buildCommon");var s=e("./Options");var l=e("./Settings");var o=e("./Style");var u=n.makeSpan;var p=function(e,t,r){r=r||new l({});var n=o.TEXT;if(r.displayMode){n=o.DISPLAY}var p=new s({style:n,size:"size5"});var h=i(e,t,p);var c=a(e,p);var m=u(["katex"],[h,c]);if(r.displayMode){return u(["katex-display"],[m])}else{return m}};t.exports=p},{"./Options":5,"./Settings":8,"./Style":9,"./buildCommon":10,"./buildHTML":11,"./buildMathML":12}],14:[function(e,t,r){var a=e("./ParseError");var i=e("./Style");var n=e("./buildCommon");var s=e("./fontMetrics");var l=e("./symbols");var o=e("./utils");var u=n.makeSpan;var p=function(e,t){if(l.math[e]&&l.math[e].replace){return s.getCharacterMetrics(l.math[e].replace,t)}else{return s.getCharacterMetrics(e,t)}};var h=function(e,t,r,a){return n.makeSymbol(e,"Size"+t+"-Regular",r,a)};var c=function(e,t,r,a){a=a||[];var i=u(a.concat(["style-wrap",r.style.reset(),t.cls()]),[e],r);var n=t.sizeMultiplier/r.style.sizeMultiplier;i.height*=n;i.depth*=n;i.maxFontSize=t.sizeMultiplier;return i};var m=function(e,t,r,a,i,s){var l=n.makeSymbol(e,"Main-Regular",i,a);var o=c(l,t,a,s);if(r){var u=(1-a.style.sizeMultiplier/t.sizeMultiplier)*a.style.metrics.axisHeight;o.style.top=u+"em";o.height-=u;o.depth+=u}return o};var f=function(e,t,r,a,n,s){var l=h(e,t,n,a);var o=c(u(["delimsizing","size"+t],[l],a),i.TEXT,a,s);if(r){var p=(1-a.style.sizeMultiplier)*a.style.metrics.axisHeight;o.style.top=p+"em";o.height-=p;o.depth+=p}return o};var v=function(e,t,r){var a;if(t==="Size1-Regular"){a="delim-size1"}else if(t==="Size4-Regular"){a="delim-size4"}var i=u(["delimsizinginner",a],[u([],[n.makeSymbol(e,t,r)])]);return{type:"elem",elem:i}};var d=function(e,t,r,a,s,l){var o;var h;var m;var f;o=m=f=e;h=null;var d="Size1-Regular";if(e==="\\uparrow"){m=f="\u23d0"}else if(e==="\\Uparrow"){m=f="\u2016"}else if(e==="\\downarrow"){o=m="\u23d0"}else if(e==="\\Downarrow"){o=m="\u2016"}else if(e==="\\updownarrow"){o="\\uparrow";m="\u23d0";f="\\downarrow"}else if(e==="\\Updownarrow"){o="\\Uparrow";m="\u2016";f="\\Downarrow"}else if(e==="["||e==="\\lbrack"){o="\u23a1";m="\u23a2";f="\u23a3";d="Size4-Regular"}else if(e==="]"||e==="\\rbrack"){o="\u23a4";m="\u23a5";f="\u23a6";d="Size4-Regular"}else if(e==="\\lfloor"){m=o="\u23a2";f="\u23a3";d="Size4-Regular"}else if(e==="\\lceil"){o="\u23a1";m=f="\u23a2";d="Size4-Regular"}else if(e==="\\rfloor"){m=o="\u23a5";f="\u23a6";d="Size4-Regular"}else if(e==="\\rceil"){o="\u23a4";m=f="\u23a5";d="Size4-Regular"}else if(e==="("){o="\u239b";m="\u239c";f="\u239d";d="Size4-Regular"}else if(e===")"){o="\u239e";m="\u239f";f="\u23a0";d="Size4-Regular"}else if(e==="\\{"||e==="\\lbrace"){o="\u23a7";h="\u23a8";f="\u23a9";m="\u23aa";d="Size4-Regular"}else if(e==="\\}"||e==="\\rbrace"){o="\u23ab";h="\u23ac";f="\u23ad";m="\u23aa";d="Size4-Regular"}else if(e==="\\lgroup"){o="\u23a7";f="\u23a9";m="\u23aa";d="Size4-Regular"}else if(e==="\\rgroup"){o="\u23ab";f="\u23ad";m="\u23aa";d="Size4-Regular"}else if(e==="\\lmoustache"){o="\u23a7";f="\u23ad";m="\u23aa";d="Size4-Regular"}else if(e==="\\rmoustache"){o="\u23ab";f="\u23a9";m="\u23aa";d="Size4-Regular"}else if(e==="\\surd"){o="\ue001";f="\u23b7";m="\ue000";d="Size4-Regular"}var g=p(o,d);var y=g.height+g.depth;var x=p(m,d);var b=x.height+x.depth;var w=p(f,d);var k=w.height+w.depth;var z=0;var S=1;if(h!==null){var M=p(h,d);z=M.height+M.depth;S=2}var T=y+k+z;var A=Math.ceil((t-T)/(S*b));var N=T+A*S*b;var q=a.style.metrics.axisHeight;if(r){q*=a.style.sizeMultiplier}var R=N/2-q;var E=[];E.push(v(f,d,s));var C;if(h===null){for(C=0;C<A;C++){E.push(v(m,d,s))}}else{for(C=0;C<A;C++){E.push(v(m,d,s))}E.push(v(h,d,s));for(C=0;C<A;C++){E.push(v(m,d,s))}}E.push(v(o,d,s));var D=n.makeVList(E,"bottom",R,a);return c(u(["delimsizing","mult"],[D],a),i.TEXT,a,l)};var g=["(",")","[","\\lbrack","]","\\rbrack","\\{","\\lbrace","\\}","\\rbrace","\\lfloor","\\rfloor","\\lceil","\\rceil","\\surd"];var y=["\\uparrow","\\downarrow","\\updownarrow","\\Uparrow","\\Downarrow","\\Updownarrow","|","\\|","\\vert","\\Vert","\\lvert","\\rvert","\\lVert","\\rVert","\\lgroup","\\rgroup","\\lmoustache","\\rmoustache"];var x=["<",">","\\langle","\\rangle","/","\\backslash","\\lt","\\gt"];var b=[0,1.2,1.8,2.4,3];var w=function(e,t,r,i,n){if(e==="<"||e==="\\lt"){e="\\langle"}else if(e===">"||e==="\\gt"){e="\\rangle"}if(o.contains(g,e)||o.contains(x,e)){return f(e,t,false,r,i,n)}else if(o.contains(y,e)){return d(e,b[t],false,r,i,n)}else{throw new a("Illegal delimiter: '"+e+"'")}};var k=[{type:"small",style:i.SCRIPTSCRIPT},{type:"small",style:i.SCRIPT},{type:"small",style:i.TEXT},{type:"large",size:1},{type:"large",size:2},{type:"large",size:3},{type:"large",size:4}];var z=[{type:"small",style:i.SCRIPTSCRIPT},{type:"small",style:i.SCRIPT},{type:"small",style:i.TEXT},{type:"stack"}];var S=[{type:"small",style:i.SCRIPTSCRIPT},{type:"small",style:i.SCRIPT},{type:"small",style:i.TEXT},{type:"large",size:1},{type:"large",size:2},{type:"large",size:3},{type:"large",size:4},{type:"stack"}];var M=function(e){if(e.type==="small"){return"Main-Regular"}else if(e.type==="large"){return"Size"+e.size+"-Regular"}else if(e.type==="stack"){return"Size4-Regular"}};var T=function(e,t,r,a){var i=Math.min(2,3-a.style.size);for(var n=i;n<r.length;n++){if(r[n].type==="stack"){break}var s=p(e,M(r[n]));var l=s.height+s.depth;if(r[n].type==="small"){l*=r[n].style.sizeMultiplier}if(l>t){return r[n]}}return r[r.length-1]};var A=function(e,t,r,a,i,n){if(e==="<"||e==="\\lt"){e="\\langle"}else if(e===">"||e==="\\gt"){e="\\rangle"}var s;if(o.contains(x,e)){s=k}else if(o.contains(g,e)){s=S}else{s=z}var l=T(e,t,s,a);if(l.type==="small"){return m(e,l.style,r,a,i,n)}else if(l.type==="large"){return f(e,l.size,r,a,i,n)}else if(l.type==="stack"){return d(e,t,r,a,i,n)}};var N=function(e,t,r,a,i,n){var l=a.style.metrics.axisHeight*a.style.sizeMultiplier;var o=901;var u=5/s.metrics.ptPerEm;var p=Math.max(t-l,r+l);var h=Math.max(p/500*o,2*p-u);return A(e,h,true,a,i,n)};t.exports={sizedDelim:w,customSizedDelim:A,leftRightDelim:N}},{"./ParseError":6,"./Style":9,"./buildCommon":10,"./fontMetrics":17,"./symbols":23,"./utils":25}],15:[function(e,t,r){var a=e("./unicodeRegexes");var i=e("./utils");var n=function(e){e=e.slice();for(var t=e.length-1;t>=0;t--){if(!e[t]){e.splice(t,1)}}return e.join(" ")};function s(e,t,r){this.classes=e||[];this.children=t||[];this.height=0;this.depth=0;this.maxFontSize=0;this.style={};this.attributes={};if(r){if(r.style.isTight()){this.classes.push("mtight")}if(r.getColor()){this.style.color=r.getColor()}}}s.prototype.setAttribute=function(e,t){this.attributes[e]=t};s.prototype.tryCombine=function(e){return false};s.prototype.toNode=function(){var e=document.createElement("span");e.className=n(this.classes);for(var t in this.style){if(Object.prototype.hasOwnProperty.call(this.style,t)){e.style[t]=this.style[t]}}for(var r in this.attributes){if(Object.prototype.hasOwnProperty.call(this.attributes,r)){e.setAttribute(r,this.attributes[r])}}for(var a=0;a<this.children.length;a++){e.appendChild(this.children[a].toNode())}return e};s.prototype.toMarkup=function(){var e="<span";if(this.classes.length){e+=' class="';e+=i.escape(n(this.classes));e+='"'}var t="";for(var r in this.style){if(this.style.hasOwnProperty(r)){t+=i.hyphenate(r)+":"+this.style[r]+";"}}if(t){e+=' style="'+i.escape(t)+'"'}for(var a in this.attributes){if(Object.prototype.hasOwnProperty.call(this.attributes,a)){e+=" "+a+'="';e+=i.escape(this.attributes[a]);e+='"'}}e+=">";for(var s=0;s<this.children.length;s++){e+=this.children[s].toMarkup()}e+="</span>";return e};function l(e){this.children=e||[];this.height=0;this.depth=0;this.maxFontSize=0}l.prototype.toNode=function(){var e=document.createDocumentFragment();for(var t=0;t<this.children.length;t++){e.appendChild(this.children[t].toNode())}return e};l.prototype.toMarkup=function(){var e="";for(var t=0;t<this.children.length;t++){e+=this.children[t].toMarkup()}return e};var o={"\xee":"\u0131\u0302","\xef":"\u0131\u0308","\xed":"\u0131\u0301","\xec":"\u0131\u0300"};function u(e,t,r,i,n,s,l){this.value=e||"";this.height=t||0;this.depth=r||0;this.italic=i||0;this.skew=n||0;this.classes=s||[];this.style=l||{};this.maxFontSize=0;if(a.cjkRegex.test(e)){if(a.hangulRegex.test(e)){this.classes.push("hangul_fallback")}else{this.classes.push("cjk_fallback")}}if(/[\xee\xef\xed\xec]/.test(this.value)){this.value=o[this.value]}}u.prototype.tryCombine=function(e){if(!e||!(e instanceof u)||this.italic>0||n(this.classes)!==n(e.classes)||this.skew!==e.skew||this.maxFontSize!==e.maxFontSize){return false}for(var t in this.style){if(this.style.hasOwnProperty(t)&&this.style[t]!==e.style[t]){return false}}for(t in e.style){if(e.style.hasOwnProperty(t)&&this.style[t]!==e.style[t]){return false}}this.value+=e.value;this.height=Math.max(this.height,e.height);this.depth=Math.max(this.depth,e.depth);this.italic=e.italic;return true};u.prototype.toNode=function(){var e=document.createTextNode(this.value);var t=null;if(this.italic>0){t=document.createElement("span");t.style.marginRight=this.italic+"em"}if(this.classes.length>0){t=t||document.createElement("span");t.className=n(this.classes)}for(var r in this.style){if(this.style.hasOwnProperty(r)){t=t||document.createElement("span");t.style[r]=this.style[r]}}if(t){t.appendChild(e);return t}else{return e}};u.prototype.toMarkup=function(){var e=false;var t="<span";if(this.classes.length){e=true;t+=' class="';t+=i.escape(n(this.classes));t+='"'}var r="";if(this.italic>0){r+="margin-right:"+this.italic+"em;"}for(var a in this.style){if(this.style.hasOwnProperty(a)){r+=i.hyphenate(a)+":"+this.style[a]+";"}}if(r){e=true;t+=' style="'+i.escape(r)+'"'}var s=i.escape(this.value);if(e){t+=">";t+=s;t+="</span>";return t}else{return s}};t.exports={span:s,documentFragment:l,symbolNode:u}},{"./unicodeRegexes":24,"./utils":25}],16:[function(e,t,r){var a=e("./parseData");var i=e("./ParseError");var n=e("./Style");var s=a.ParseNode;function l(e,t){var r=[];var a=[r];var n=[];while(true){var l=e.parseExpression(false,null);r.push(new s("ordgroup",l,e.mode));var o=e.nextToken.text;if(o==="&"){e.consume()}else if(o==="\\end"){break}else if(o==="\\\\"||o==="\\cr"){var u=e.parseFunction();n.push(u.value.size);r=[];a.push(r)}else{throw new i("Expected & or \\\\ or \\end",e.nextToken)}}t.body=a;t.rowGaps=n;return new s(t.type,t,e.mode)}function o(e,r,a){if(typeof e==="string"){e=[e]}if(typeof r==="number"){r={numArgs:r}}var i={numArgs:r.numArgs||0,argTypes:r.argTypes,greediness:1,allowedInText:!!r.allowedInText,numOptionalArgs:r.numOptionalArgs||0,handler:a};for(var n=0;n<e.length;++n){t.exports[e[n]]=i}}o("array",{numArgs:1},function(e,t){var r=t[0];r=r.value.map?r.value:[r];var a=r.map(function(e){var t=e.value;if("lcr".indexOf(t)!==-1){return{type:"align",align:t}}else if(t==="|"){return{type:"separator",separator:"|"}}throw new i("Unknown column alignment: "+e.value,e)});var n={type:"array",cols:a,hskipBeforeAndAfter:true};n=l(e.parser,n);return n});o(["matrix","pmatrix","bmatrix","Bmatrix","vmatrix","Vmatrix"],{},function(e){var t={matrix:null,pmatrix:["(",")"],bmatrix:["[","]"],Bmatrix:["\\{","\\}"],vmatrix:["|","|"],Vmatrix:["\\Vert","\\Vert"]}[e.envName];var r={type:"array",hskipBeforeAndAfter:false};r=l(e.parser,r);if(t){r=new s("leftright",{body:[r],left:t[0],right:t[1]},e.mode)}return r});o("cases",{},function(e){var t={type:"array",arraystretch:1.2,cols:[{type:"align",align:"l",pregap:0,postgap:n.TEXT.metrics.quad},{type:"align",align:"l",pregap:0,postgap:0}]};t=l(e.parser,t);t=new s("leftright",{body:[t],left:"\\{",right:"."},e.mode);return t});o("aligned",{},function(e){var t={type:"array",cols:[]};t=l(e.parser,t);var r=new s("ordgroup",[],e.mode);var a=0;t.value.body.forEach(function(e){var t;for(t=1;t<e.length;t+=2){e[t].value.unshift(r)}if(a<e.length){a=e.length}});for(var i=0;i<a;++i){var n="r";var o=0;if(i%2===1){n="l"}else if(i>0){o=2}t.value.cols[i]={type:"align",align:n,pregap:o,postgap:0}}return t})},{"./ParseError":6,"./Style":9,"./parseData":21}],17:[function(e,t,r){var a=e("./Style");var i=e("./unicodeRegexes").cjkRegex;var n={slant:[.25,.25,.25],space:[0,0,0],stretch:[0,0,0],shrink:[0,0,0],xHeight:[.431,.431,.431],quad:[1,1.171,1.472],extraSpace:[0,0,0],num1:[.677,.732,.925],num2:[.394,.384,.387],num3:[.444,.471,.504],denom1:[.686,.752,1.025],denom2:[.345,.344,.532],sup1:[.413,.503,.504],sup2:[.363,.431,.404],sup3:[.289,.286,.294],sub1:[.15,.143,.2],sub2:[.247,.286,.4],supDrop:[.386,.353,.494],subDrop:[.05,.071,.1],delim1:[2.39,1.7,1.98],delim2:[1.01,1.157,1.42],axisHeight:[.25,.25,.25]};var s=0;var l=0;var o=0;var u=0;var p=.431;var h=1;var c=0;var m=.04;var f=.111;var v=.166;var d=.2;var g=.6;var y=.1;var x=10;var b=2/x;var w={defaultRuleThickness:m,bigOpSpacing1:f,bigOpSpacing2:v,bigOpSpacing3:d,bigOpSpacing4:g,bigOpSpacing5:y,ptPerEm:x,doubleRuleSep:b};var k=e("./fontMetricsData");var z={"\xc0":"A","\xc1":"A","\xc2":"A","\xc3":"A","\xc4":"A","\xc5":"A","\xc6":"A","\xc7":"C","\xc8":"E","\xc9":"E","\xca":"E","\xcb":"E","\xcc":"I","\xcd":"I","\xce":"I","\xcf":"I","\xd0":"D","\xd1":"N","\xd2":"O","\xd3":"O","\xd4":"O","\xd5":"O","\xd6":"O","\xd8":"O","\xd9":"U","\xda":"U","\xdb":"U","\xdc":"U","\xdd":"Y","\xde":"o","\xdf":"B","\xe0":"a","\xe1":"a","\xe2":"a","\xe3":"a","\xe4":"a","\xe5":"a","\xe6":"a","\xe7":"c","\xe8":"e","\xe9":"e","\xea":"e","\xeb":"e","\xec":"i","\xed":"i","\xee":"i","\xef":"i","\xf0":"d","\xf1":"n","\xf2":"o","\xf3":"o","\xf4":"o","\xf5":"o","\xf6":"o","\xf8":"o","\xf9":"u","\xfa":"u","\xfb":"u","\xfc":"u","\xfd":"y","\xfe":"o","\xff":"y","\u0410":"A","\u0411":"B","\u0412":"B","\u0413":"F","\u0414":"A","\u0415":"E","\u0416":"K","\u0417":"3","\u0418":"N","\u0419":"N","\u041a":"K","\u041b":"N","\u041c":"M","\u041d":"H","\u041e":"O","\u041f":"N","\u0420":"P","\u0421":"C","\u0422":"T","\u0423":"y","\u0424":"O","\u0425":"X","\u0426":"U","\u0427":"h","\u0428":"W","\u0429":"W","\u042a":"B","\u042b":"X","\u042c":"B","\u042d":"3","\u042e":"X","\u042f":"R","\u0430":"a","\u0431":"b","\u0432":"a","\u0433":"r","\u0434":"y","\u0435":"e","\u0436":"m","\u0437":"e","\u0438":"n","\u0439":"n","\u043a":"n","\u043b":"n","\u043c":"m","\u043d":"n","\u043e":"o","\u043f":"n","\u0440":"p","\u0441":"c","\u0442":"o","\u0443":"y","\u0444":"b","\u0445":"x","\u0446":"n","\u0447":"n","\u0448":"w","\u0449":"w","\u044a":"a","\u044b":"m","\u044c":"a","\u044d":"e","\u044e":"m","\u044f":"r"};var S=function(e,t){var r=e.charCodeAt(0);if(e[0]in z){r=z[e[0]].charCodeAt(0)}else if(i.test(e[0])){r="M".charCodeAt(0)}var a=k[t][r];if(a){return{depth:a[0],height:a[1],italic:a[2],skew:a[3],width:a[4]}}};t.exports={metrics:w,sigmas:n,getCharacterMetrics:S}},{"./Style":9,"./fontMetricsData":18,"./unicodeRegexes":24}],18:[function(e,t,r){t.exports={"AMS-Regular":{65:[0,.68889,0,0],66:[0,.68889,0,0],67:[0,.68889,0,0],68:[0,.68889,0,0],69:[0,.68889,0,0],70:[0,.68889,0,0],71:[0,.68889,0,0],72:[0,.68889,0,0],73:[0,.68889,0,0],74:[.16667,.68889,0,0],75:[0,.68889,0,0],76:[0,.68889,0,0],77:[0,.68889,0,0],78:[0,.68889,0,0],79:[.16667,.68889,0,0],80:[0,.68889,0,0],81:[.16667,.68889,0,0],82:[0,.68889,0,0],83:[0,.68889,0,0],84:[0,.68889,0,0],85:[0,.68889,0,0],86:[0,.68889,0,0],87:[0,.68889,0,0],88:[0,.68889,0,0],89:[0,.68889,0,0],90:[0,.68889,0,0],107:[0,.68889,0,0],165:[0,.675,.025,0],174:[.15559,.69224,0,0],240:[0,.68889,0,0],295:[0,.68889,0,0],710:[0,.825,0,0],732:[0,.9,0,0],770:[0,.825,0,0],771:[0,.9,0,0],989:[.08167,.58167,0,0],1008:[0,.43056,.04028,0],8245:[0,.54986,0,0],8463:[0,.68889,0,0],8487:[0,.68889,0,0],8498:[0,.68889,0,0],8502:[0,.68889,0,0],8503:[0,.68889,0,0],8504:[0,.68889,0,0],8513:[0,.68889,0,0],8592:[-.03598,.46402,0,0],8594:[-.03598,.46402,0,0],8602:[-.13313,.36687,0,0],8603:[-.13313,.36687,0,0],8606:[.01354,.52239,0,0],8608:[.01354,.52239,0,0],8610:[.01354,.52239,0,0],8611:[.01354,.52239,0,0],8619:[0,.54986,0,0],8620:[0,.54986,0,0],8621:[-.13313,.37788,0,0],8622:[-.13313,.36687,0,0],8624:[0,.69224,0,0],8625:[0,.69224,0,0],8630:[0,.43056,0,0],8631:[0,.43056,0,0],8634:[.08198,.58198,0,0],8635:[.08198,.58198,0,0],8638:[.19444,.69224,0,0],8639:[.19444,.69224,0,0],8642:[.19444,.69224,0,0],8643:[.19444,.69224,0,0],8644:[.1808,.675,0,0],8646:[.1808,.675,0,0],8647:[.1808,.675,0,0],8648:[.19444,.69224,0,0],8649:[.1808,.675,0,0],8650:[.19444,.69224,0,0],8651:[.01354,.52239,0,0],8652:[.01354,.52239,0,0],8653:[-.13313,.36687,0,0],8654:[-.13313,.36687,0,0],8655:[-.13313,.36687,0,0],8666:[.13667,.63667,0,0],8667:[.13667,.63667,0,0],8669:[-.13313,.37788,0,0],8672:[-.064,.437,0,0],8674:[-.064,.437,0,0],8705:[0,.825,0,0],8708:[0,.68889,0,0],8709:[.08167,.58167,0,0],8717:[0,.43056,0,0],8722:[-.03598,.46402,0,0],8724:[.08198,.69224,0,0],8726:[.08167,.58167,0,0],8733:[0,.69224,0,0],8736:[0,.69224,0,0],8737:[0,.69224,0,0],8738:[.03517,.52239,0,0],8739:[.08167,.58167,0,0],8740:[.25142,.74111,0,0],8741:[.08167,.58167,0,0],8742:[.25142,.74111,0,0],8756:[0,.69224,0,0],8757:[0,.69224,0,0],8764:[-.13313,.36687,0,0],8765:[-.13313,.37788,0,0],8769:[-.13313,.36687,0,0],8770:[-.03625,.46375,0,0],8774:[.30274,.79383,0,0],8776:[-.01688,.48312,0,0],8778:[.08167,.58167,0,0],8782:[.06062,.54986,0,0],8783:[.06062,.54986,0,0],8785:[.08198,.58198,0,0],8786:[.08198,.58198,0,0],8787:[.08198,.58198,0,0],8790:[0,.69224,0,0],8791:[.22958,.72958,0,0],8796:[.08198,.91667,0,0],8806:[.25583,.75583,0,0],
+8807:[.25583,.75583,0,0],8808:[.25142,.75726,0,0],8809:[.25142,.75726,0,0],8812:[.25583,.75583,0,0],8814:[.20576,.70576,0,0],8815:[.20576,.70576,0,0],8816:[.30274,.79383,0,0],8817:[.30274,.79383,0,0],8818:[.22958,.72958,0,0],8819:[.22958,.72958,0,0],8822:[.1808,.675,0,0],8823:[.1808,.675,0,0],8828:[.13667,.63667,0,0],8829:[.13667,.63667,0,0],8830:[.22958,.72958,0,0],8831:[.22958,.72958,0,0],8832:[.20576,.70576,0,0],8833:[.20576,.70576,0,0],8840:[.30274,.79383,0,0],8841:[.30274,.79383,0,0],8842:[.13597,.63597,0,0],8843:[.13597,.63597,0,0],8847:[.03517,.54986,0,0],8848:[.03517,.54986,0,0],8858:[.08198,.58198,0,0],8859:[.08198,.58198,0,0],8861:[.08198,.58198,0,0],8862:[0,.675,0,0],8863:[0,.675,0,0],8864:[0,.675,0,0],8865:[0,.675,0,0],8872:[0,.69224,0,0],8873:[0,.69224,0,0],8874:[0,.69224,0,0],8876:[0,.68889,0,0],8877:[0,.68889,0,0],8878:[0,.68889,0,0],8879:[0,.68889,0,0],8882:[.03517,.54986,0,0],8883:[.03517,.54986,0,0],8884:[.13667,.63667,0,0],8885:[.13667,.63667,0,0],8888:[0,.54986,0,0],8890:[.19444,.43056,0,0],8891:[.19444,.69224,0,0],8892:[.19444,.69224,0,0],8901:[0,.54986,0,0],8903:[.08167,.58167,0,0],8905:[.08167,.58167,0,0],8906:[.08167,.58167,0,0],8907:[0,.69224,0,0],8908:[0,.69224,0,0],8909:[-.03598,.46402,0,0],8910:[0,.54986,0,0],8911:[0,.54986,0,0],8912:[.03517,.54986,0,0],8913:[.03517,.54986,0,0],8914:[0,.54986,0,0],8915:[0,.54986,0,0],8916:[0,.69224,0,0],8918:[.0391,.5391,0,0],8919:[.0391,.5391,0,0],8920:[.03517,.54986,0,0],8921:[.03517,.54986,0,0],8922:[.38569,.88569,0,0],8923:[.38569,.88569,0,0],8926:[.13667,.63667,0,0],8927:[.13667,.63667,0,0],8928:[.30274,.79383,0,0],8929:[.30274,.79383,0,0],8934:[.23222,.74111,0,0],8935:[.23222,.74111,0,0],8936:[.23222,.74111,0,0],8937:[.23222,.74111,0,0],8938:[.20576,.70576,0,0],8939:[.20576,.70576,0,0],8940:[.30274,.79383,0,0],8941:[.30274,.79383,0,0],8994:[.19444,.69224,0,0],8995:[.19444,.69224,0,0],9416:[.15559,.69224,0,0],9484:[0,.69224,0,0],9488:[0,.69224,0,0],9492:[0,.37788,0,0],9496:[0,.37788,0,0],9585:[.19444,.68889,0,0],9586:[.19444,.74111,0,0],9632:[0,.675,0,0],9633:[0,.675,0,0],9650:[0,.54986,0,0],9651:[0,.54986,0,0],9654:[.03517,.54986,0,0],9660:[0,.54986,0,0],9661:[0,.54986,0,0],9664:[.03517,.54986,0,0],9674:[.11111,.69224,0,0],9733:[.19444,.69224,0,0],10003:[0,.69224,0,0],10016:[0,.69224,0,0],10731:[.11111,.69224,0,0],10846:[.19444,.75583,0,0],10877:[.13667,.63667,0,0],10878:[.13667,.63667,0,0],10885:[.25583,.75583,0,0],10886:[.25583,.75583,0,0],10887:[.13597,.63597,0,0],10888:[.13597,.63597,0,0],10889:[.26167,.75726,0,0],10890:[.26167,.75726,0,0],10891:[.48256,.98256,0,0],10892:[.48256,.98256,0,0],10901:[.13667,.63667,0,0],10902:[.13667,.63667,0,0],10933:[.25142,.75726,0,0],10934:[.25142,.75726,0,0],10935:[.26167,.75726,0,0],10936:[.26167,.75726,0,0],10937:[.26167,.75726,0,0],10938:[.26167,.75726,0,0],10949:[.25583,.75583,0,0],10950:[.25583,.75583,0,0],10955:[.28481,.79383,0,0],10956:[.28481,.79383,0,0],57350:[.08167,.58167,0,0],57351:[.08167,.58167,0,0],57352:[.08167,.58167,0,0],57353:[0,.43056,.04028,0],57356:[.25142,.75726,0,0],57357:[.25142,.75726,0,0],57358:[.41951,.91951,0,0],57359:[.30274,.79383,0,0],57360:[.30274,.79383,0,0],57361:[.41951,.91951,0,0],57366:[.25142,.75726,0,0],57367:[.25142,.75726,0,0],57368:[.25142,.75726,0,0],57369:[.25142,.75726,0,0],57370:[.13597,.63597,0,0],57371:[.13597,.63597,0,0]},"Caligraphic-Regular":{48:[0,.43056,0,0],49:[0,.43056,0,0],50:[0,.43056,0,0],51:[.19444,.43056,0,0],52:[.19444,.43056,0,0],53:[.19444,.43056,0,0],54:[0,.64444,0,0],55:[.19444,.43056,0,0],56:[0,.64444,0,0],57:[.19444,.43056,0,0],65:[0,.68333,0,.19445],66:[0,.68333,.03041,.13889],67:[0,.68333,.05834,.13889],68:[0,.68333,.02778,.08334],69:[0,.68333,.08944,.11111],70:[0,.68333,.09931,.11111],71:[.09722,.68333,.0593,.11111],72:[0,.68333,.00965,.11111],73:[0,.68333,.07382,0],74:[.09722,.68333,.18472,.16667],75:[0,.68333,.01445,.05556],76:[0,.68333,0,.13889],77:[0,.68333,0,.13889],78:[0,.68333,.14736,.08334],79:[0,.68333,.02778,.11111],80:[0,.68333,.08222,.08334],81:[.09722,.68333,0,.11111],82:[0,.68333,0,.08334],83:[0,.68333,.075,.13889],84:[0,.68333,.25417,0],85:[0,.68333,.09931,.08334],86:[0,.68333,.08222,0],87:[0,.68333,.08222,.08334],88:[0,.68333,.14643,.13889],89:[.09722,.68333,.08222,.08334],90:[0,.68333,.07944,.13889]},"Fraktur-Regular":{33:[0,.69141,0,0],34:[0,.69141,0,0],38:[0,.69141,0,0],39:[0,.69141,0,0],40:[.24982,.74947,0,0],41:[.24982,.74947,0,0],42:[0,.62119,0,0],43:[.08319,.58283,0,0],44:[0,.10803,0,0],45:[.08319,.58283,0,0],46:[0,.10803,0,0],47:[.24982,.74947,0,0],48:[0,.47534,0,0],49:[0,.47534,0,0],50:[0,.47534,0,0],51:[.18906,.47534,0,0],52:[.18906,.47534,0,0],53:[.18906,.47534,0,0],54:[0,.69141,0,0],55:[.18906,.47534,0,0],56:[0,.69141,0,0],57:[.18906,.47534,0,0],58:[0,.47534,0,0],59:[.12604,.47534,0,0],61:[-.13099,.36866,0,0],63:[0,.69141,0,0],65:[0,.69141,0,0],66:[0,.69141,0,0],67:[0,.69141,0,0],68:[0,.69141,0,0],69:[0,.69141,0,0],70:[.12604,.69141,0,0],71:[0,.69141,0,0],72:[.06302,.69141,0,0],73:[0,.69141,0,0],74:[.12604,.69141,0,0],75:[0,.69141,0,0],76:[0,.69141,0,0],77:[0,.69141,0,0],78:[0,.69141,0,0],79:[0,.69141,0,0],80:[.18906,.69141,0,0],81:[.03781,.69141,0,0],82:[0,.69141,0,0],83:[0,.69141,0,0],84:[0,.69141,0,0],85:[0,.69141,0,0],86:[0,.69141,0,0],87:[0,.69141,0,0],88:[0,.69141,0,0],89:[.18906,.69141,0,0],90:[.12604,.69141,0,0],91:[.24982,.74947,0,0],93:[.24982,.74947,0,0],94:[0,.69141,0,0],97:[0,.47534,0,0],98:[0,.69141,0,0],99:[0,.47534,0,0],100:[0,.62119,0,0],101:[0,.47534,0,0],102:[.18906,.69141,0,0],103:[.18906,.47534,0,0],104:[.18906,.69141,0,0],105:[0,.69141,0,0],106:[0,.69141,0,0],107:[0,.69141,0,0],108:[0,.69141,0,0],109:[0,.47534,0,0],110:[0,.47534,0,0],111:[0,.47534,0,0],112:[.18906,.52396,0,0],113:[.18906,.47534,0,0],114:[0,.47534,0,0],115:[0,.47534,0,0],116:[0,.62119,0,0],117:[0,.47534,0,0],118:[0,.52396,0,0],119:[0,.52396,0,0],120:[.18906,.47534,0,0],121:[.18906,.47534,0,0],122:[.18906,.47534,0,0],8216:[0,.69141,0,0],8217:[0,.69141,0,0],58112:[0,.62119,0,0],58113:[0,.62119,0,0],58114:[.18906,.69141,0,0],58115:[.18906,.69141,0,0],58116:[.18906,.47534,0,0],58117:[0,.69141,0,0],58118:[0,.62119,0,0],58119:[0,.47534,0,0]},"Main-Bold":{33:[0,.69444,0,0],34:[0,.69444,0,0],35:[.19444,.69444,0,0],36:[.05556,.75,0,0],37:[.05556,.75,0,0],38:[0,.69444,0,0],39:[0,.69444,0,0],40:[.25,.75,0,0],41:[.25,.75,0,0],42:[0,.75,0,0],43:[.13333,.63333,0,0],44:[.19444,.15556,0,0],45:[0,.44444,0,0],46:[0,.15556,0,0],47:[.25,.75,0,0],48:[0,.64444,0,0],49:[0,.64444,0,0],50:[0,.64444,0,0],51:[0,.64444,0,0],52:[0,.64444,0,0],53:[0,.64444,0,0],54:[0,.64444,0,0],55:[0,.64444,0,0],56:[0,.64444,0,0],57:[0,.64444,0,0],58:[0,.44444,0,0],59:[.19444,.44444,0,0],60:[.08556,.58556,0,0],61:[-.10889,.39111,0,0],62:[.08556,.58556,0,0],63:[0,.69444,0,0],64:[0,.69444,0,0],65:[0,.68611,0,0],66:[0,.68611,0,0],67:[0,.68611,0,0],68:[0,.68611,0,0],69:[0,.68611,0,0],70:[0,.68611,0,0],71:[0,.68611,0,0],72:[0,.68611,0,0],73:[0,.68611,0,0],74:[0,.68611,0,0],75:[0,.68611,0,0],76:[0,.68611,0,0],77:[0,.68611,0,0],78:[0,.68611,0,0],79:[0,.68611,0,0],80:[0,.68611,0,0],81:[.19444,.68611,0,0],82:[0,.68611,0,0],83:[0,.68611,0,0],84:[0,.68611,0,0],85:[0,.68611,0,0],86:[0,.68611,.01597,0],87:[0,.68611,.01597,0],88:[0,.68611,0,0],89:[0,.68611,.02875,0],90:[0,.68611,0,0],91:[.25,.75,0,0],92:[.25,.75,0,0],93:[.25,.75,0,0],94:[0,.69444,0,0],95:[.31,.13444,.03194,0],96:[0,.69444,0,0],97:[0,.44444,0,0],98:[0,.69444,0,0],99:[0,.44444,0,0],100:[0,.69444,0,0],101:[0,.44444,0,0],102:[0,.69444,.10903,0],103:[.19444,.44444,.01597,0],104:[0,.69444,0,0],105:[0,.69444,0,0],106:[.19444,.69444,0,0],107:[0,.69444,0,0],108:[0,.69444,0,0],109:[0,.44444,0,0],110:[0,.44444,0,0],111:[0,.44444,0,0],112:[.19444,.44444,0,0],113:[.19444,.44444,0,0],114:[0,.44444,0,0],115:[0,.44444,0,0],116:[0,.63492,0,0],117:[0,.44444,0,0],118:[0,.44444,.01597,0],119:[0,.44444,.01597,0],120:[0,.44444,0,0],121:[.19444,.44444,.01597,0],122:[0,.44444,0,0],123:[.25,.75,0,0],124:[.25,.75,0,0],125:[.25,.75,0,0],126:[.35,.34444,0,0],168:[0,.69444,0,0],172:[0,.44444,0,0],175:[0,.59611,0,0],176:[0,.69444,0,0],177:[.13333,.63333,0,0],180:[0,.69444,0,0],215:[.13333,.63333,0,0],247:[.13333,.63333,0,0],305:[0,.44444,0,0],567:[.19444,.44444,0,0],710:[0,.69444,0,0],711:[0,.63194,0,0],713:[0,.59611,0,0],714:[0,.69444,0,0],715:[0,.69444,0,0],728:[0,.69444,0,0],729:[0,.69444,0,0],730:[0,.69444,0,0],732:[0,.69444,0,0],768:[0,.69444,0,0],769:[0,.69444,0,0],770:[0,.69444,0,0],771:[0,.69444,0,0],772:[0,.59611,0,0],774:[0,.69444,0,0],775:[0,.69444,0,0],776:[0,.69444,0,0],778:[0,.69444,0,0],779:[0,.69444,0,0],780:[0,.63194,0,0],824:[.19444,.69444,0,0],915:[0,.68611,0,0],916:[0,.68611,0,0],920:[0,.68611,0,0],923:[0,.68611,0,0],926:[0,.68611,0,0],928:[0,.68611,0,0],931:[0,.68611,0,0],933:[0,.68611,0,0],934:[0,.68611,0,0],936:[0,.68611,0,0],937:[0,.68611,0,0],8211:[0,.44444,.03194,0],8212:[0,.44444,.03194,0],8216:[0,.69444,0,0],8217:[0,.69444,0,0],8220:[0,.69444,0,0],8221:[0,.69444,0,0],8224:[.19444,.69444,0,0],8225:[.19444,.69444,0,0],8242:[0,.55556,0,0],8407:[0,.72444,.15486,0],8463:[0,.69444,0,0],8465:[0,.69444,0,0],8467:[0,.69444,0,0],8472:[.19444,.44444,0,0],8476:[0,.69444,0,0],8501:[0,.69444,0,0],8592:[-.10889,.39111,0,0],8593:[.19444,.69444,0,0],8594:[-.10889,.39111,0,0],8595:[.19444,.69444,0,0],8596:[-.10889,.39111,0,0],8597:[.25,.75,0,0],8598:[.19444,.69444,0,0],8599:[.19444,.69444,0,0],8600:[.19444,.69444,0,0],8601:[.19444,.69444,0,0],8636:[-.10889,.39111,0,0],8637:[-.10889,.39111,0,0],8640:[-.10889,.39111,0,0],8641:[-.10889,.39111,0,0],8656:[-.10889,.39111,0,0],8657:[.19444,.69444,0,0],8658:[-.10889,.39111,0,0],8659:[.19444,.69444,0,0],8660:[-.10889,.39111,0,0],8661:[.25,.75,0,0],8704:[0,.69444,0,0],8706:[0,.69444,.06389,0],8707:[0,.69444,0,0],8709:[.05556,.75,0,0],8711:[0,.68611,0,0],8712:[.08556,.58556,0,0],8715:[.08556,.58556,0,0],8722:[.13333,.63333,0,0],8723:[.13333,.63333,0,0],8725:[.25,.75,0,0],8726:[.25,.75,0,0],8727:[-.02778,.47222,0,0],8728:[-.02639,.47361,0,0],8729:[-.02639,.47361,0,0],8730:[.18,.82,0,0],8733:[0,.44444,0,0],8734:[0,.44444,0,0],8736:[0,.69224,0,0],8739:[.25,.75,0,0],8741:[.25,.75,0,0],8743:[0,.55556,0,0],8744:[0,.55556,0,0],8745:[0,.55556,0,0],8746:[0,.55556,0,0],8747:[.19444,.69444,.12778,0],8764:[-.10889,.39111,0,0],8768:[.19444,.69444,0,0],8771:[.00222,.50222,0,0],8776:[.02444,.52444,0,0],8781:[.00222,.50222,0,0],8801:[.00222,.50222,0,0],8804:[.19667,.69667,0,0],8805:[.19667,.69667,0,0],8810:[.08556,.58556,0,0],8811:[.08556,.58556,0,0],8826:[.08556,.58556,0,0],8827:[.08556,.58556,0,0],8834:[.08556,.58556,0,0],8835:[.08556,.58556,0,0],8838:[.19667,.69667,0,0],8839:[.19667,.69667,0,0],8846:[0,.55556,0,0],8849:[.19667,.69667,0,0],8850:[.19667,.69667,0,0],8851:[0,.55556,0,0],8852:[0,.55556,0,0],8853:[.13333,.63333,0,0],8854:[.13333,.63333,0,0],8855:[.13333,.63333,0,0],8856:[.13333,.63333,0,0],8857:[.13333,.63333,0,0],8866:[0,.69444,0,0],8867:[0,.69444,0,0],8868:[0,.69444,0,0],8869:[0,.69444,0,0],8900:[-.02639,.47361,0,0],8901:[-.02639,.47361,0,0],8902:[-.02778,.47222,0,0],8968:[.25,.75,0,0],8969:[.25,.75,0,0],8970:[.25,.75,0,0],8971:[.25,.75,0,0],8994:[-.13889,.36111,0,0],8995:[-.13889,.36111,0,0],9651:[.19444,.69444,0,0],9657:[-.02778,.47222,0,0],9661:[.19444,.69444,0,0],9667:[-.02778,.47222,0,0],9711:[.19444,.69444,0,0],9824:[.12963,.69444,0,0],9825:[.12963,.69444,0,0],9826:[.12963,.69444,0,0],9827:[.12963,.69444,0,0],9837:[0,.75,0,0],9838:[.19444,.69444,0,0],9839:[.19444,.69444,0,0],10216:[.25,.75,0,0],10217:[.25,.75,0,0],10815:[0,.68611,0,0],10927:[.19667,.69667,0,0],10928:[.19667,.69667,0,0]},"Main-Italic":{33:[0,.69444,.12417,0],34:[0,.69444,.06961,0],35:[.19444,.69444,.06616,0],37:[.05556,.75,.13639,0],38:[0,.69444,.09694,0],39:[0,.69444,.12417,0],40:[.25,.75,.16194,0],41:[.25,.75,.03694,0],42:[0,.75,.14917,0],43:[.05667,.56167,.03694,0],44:[.19444,.10556,0,0],45:[0,.43056,.02826,0],46:[0,.10556,0,0],47:[.25,.75,.16194,0],48:[0,.64444,.13556,0],49:[0,.64444,.13556,0],50:[0,.64444,.13556,0],51:[0,.64444,.13556,0],52:[.19444,.64444,.13556,0],53:[0,.64444,.13556,0],54:[0,.64444,.13556,0],55:[.19444,.64444,.13556,0],56:[0,.64444,.13556,0],57:[0,.64444,.13556,0],58:[0,.43056,.0582,0],59:[.19444,.43056,.0582,0],61:[-.13313,.36687,.06616,0],63:[0,.69444,.1225,0],64:[0,.69444,.09597,0],65:[0,.68333,0,0],66:[0,.68333,.10257,0],67:[0,.68333,.14528,0],68:[0,.68333,.09403,0],69:[0,.68333,.12028,0],70:[0,.68333,.13305,0],71:[0,.68333,.08722,0],72:[0,.68333,.16389,0],73:[0,.68333,.15806,0],74:[0,.68333,.14028,0],75:[0,.68333,.14528,0],76:[0,.68333,0,0],77:[0,.68333,.16389,0],78:[0,.68333,.16389,0],79:[0,.68333,.09403,0],80:[0,.68333,.10257,0],81:[.19444,.68333,.09403,0],82:[0,.68333,.03868,0],83:[0,.68333,.11972,0],84:[0,.68333,.13305,0],85:[0,.68333,.16389,0],86:[0,.68333,.18361,0],87:[0,.68333,.18361,0],88:[0,.68333,.15806,0],89:[0,.68333,.19383,0],90:[0,.68333,.14528,0],91:[.25,.75,.1875,0],93:[.25,.75,.10528,0],94:[0,.69444,.06646,0],95:[.31,.12056,.09208,0],97:[0,.43056,.07671,0],98:[0,.69444,.06312,0],99:[0,.43056,.05653,0],100:[0,.69444,.10333,0],101:[0,.43056,.07514,0],102:[.19444,.69444,.21194,0],103:[.19444,.43056,.08847,0],104:[0,.69444,.07671,0],105:[0,.65536,.1019,0],106:[.19444,.65536,.14467,0],107:[0,.69444,.10764,0],108:[0,.69444,.10333,0],109:[0,.43056,.07671,0],110:[0,.43056,.07671,0],111:[0,.43056,.06312,0],112:[.19444,.43056,.06312,0],113:[.19444,.43056,.08847,0],114:[0,.43056,.10764,0],115:[0,.43056,.08208,0],116:[0,.61508,.09486,0],117:[0,.43056,.07671,0],118:[0,.43056,.10764,0],119:[0,.43056,.10764,0],120:[0,.43056,.12042,0],121:[.19444,.43056,.08847,0],122:[0,.43056,.12292,0],126:[.35,.31786,.11585,0],163:[0,.69444,0,0],305:[0,.43056,0,.02778],567:[.19444,.43056,0,.08334],768:[0,.69444,0,0],769:[0,.69444,.09694,0],770:[0,.69444,.06646,0],771:[0,.66786,.11585,0],772:[0,.56167,.10333,0],774:[0,.69444,.10806,0],775:[0,.66786,.11752,0],776:[0,.66786,.10474,0],778:[0,.69444,0,0],779:[0,.69444,.1225,0],780:[0,.62847,.08295,0],915:[0,.68333,.13305,0],916:[0,.68333,0,0],920:[0,.68333,.09403,0],923:[0,.68333,0,0],926:[0,.68333,.15294,0],928:[0,.68333,.16389,0],931:[0,.68333,.12028,0],933:[0,.68333,.11111,0],934:[0,.68333,.05986,0],936:[0,.68333,.11111,0],937:[0,.68333,.10257,0],8211:[0,.43056,.09208,0],8212:[0,.43056,.09208,0],8216:[0,.69444,.12417,0],8217:[0,.69444,.12417,0],8220:[0,.69444,.1685,0],8221:[0,.69444,.06961,0],8463:[0,.68889,0,0]},"Main-Regular":{32:[0,0,0,0],33:[0,.69444,0,0],34:[0,.69444,0,0],35:[.19444,.69444,0,0],36:[.05556,.75,0,0],37:[.05556,.75,0,0],38:[0,.69444,0,0],39:[0,.69444,0,0],40:[.25,.75,0,0],41:[.25,.75,0,0],42:[0,.75,0,0],43:[.08333,.58333,0,0],44:[.19444,.10556,0,0],45:[0,.43056,0,0],46:[0,.10556,0,0],47:[.25,.75,0,0],48:[0,.64444,0,0],49:[0,.64444,0,0],50:[0,.64444,0,0],51:[0,.64444,0,0],52:[0,.64444,0,0],53:[0,.64444,0,0],54:[0,.64444,0,0],55:[0,.64444,0,0],56:[0,.64444,0,0],57:[0,.64444,0,0],58:[0,.43056,0,0],59:[.19444,.43056,0,0],60:[.0391,.5391,0,0],61:[-.13313,.36687,0,0],62:[.0391,.5391,0,0],63:[0,.69444,0,0],64:[0,.69444,0,0],65:[0,.68333,0,0],66:[0,.68333,0,0],67:[0,.68333,0,0],68:[0,.68333,0,0],69:[0,.68333,0,0],70:[0,.68333,0,0],71:[0,.68333,0,0],72:[0,.68333,0,0],73:[0,.68333,0,0],74:[0,.68333,0,0],75:[0,.68333,0,0],76:[0,.68333,0,0],77:[0,.68333,0,0],78:[0,.68333,0,0],79:[0,.68333,0,0],80:[0,.68333,0,0],81:[.19444,.68333,0,0],82:[0,.68333,0,0],83:[0,.68333,0,0],84:[0,.68333,0,0],85:[0,.68333,0,0],86:[0,.68333,.01389,0],87:[0,.68333,.01389,0],88:[0,.68333,0,0],89:[0,.68333,.025,0],90:[0,.68333,0,0],91:[.25,.75,0,0],92:[.25,.75,0,0],93:[.25,.75,0,0],94:[0,.69444,0,0],95:[.31,.12056,.02778,0],96:[0,.69444,0,0],97:[0,.43056,0,0],98:[0,.69444,0,0],99:[0,.43056,0,0],100:[0,.69444,0,0],101:[0,.43056,0,0],102:[0,.69444,.07778,0],103:[.19444,.43056,.01389,0],104:[0,.69444,0,0],105:[0,.66786,0,0],106:[.19444,.66786,0,0],107:[0,.69444,0,0],108:[0,.69444,0,0],109:[0,.43056,0,0],110:[0,.43056,0,0],111:[0,.43056,0,0],112:[.19444,.43056,0,0],113:[.19444,.43056,0,0],114:[0,.43056,0,0],115:[0,.43056,0,0],116:[0,.61508,0,0],117:[0,.43056,0,0],118:[0,.43056,.01389,0],119:[0,.43056,.01389,0],120:[0,.43056,0,0],121:[.19444,.43056,.01389,0],122:[0,.43056,0,0],123:[.25,.75,0,0],124:[.25,.75,0,0],125:[.25,.75,0,0],126:[.35,.31786,0,0],160:[0,0,0,0],168:[0,.66786,0,0],172:[0,.43056,0,0],175:[0,.56778,0,0],176:[0,.69444,0,0],177:[.08333,.58333,0,0],180:[0,.69444,0,0],215:[.08333,.58333,0,0],247:[.08333,.58333,0,0],305:[0,.43056,0,0],567:[.19444,.43056,0,0],710:[0,.69444,0,0],711:[0,.62847,0,0],713:[0,.56778,0,0],714:[0,.69444,0,0],715:[0,.69444,0,0],728:[0,.69444,0,0],729:[0,.66786,0,0],730:[0,.69444,0,0],732:[0,.66786,0,0],768:[0,.69444,0,0],769:[0,.69444,0,0],770:[0,.69444,0,0],771:[0,.66786,0,0],772:[0,.56778,0,0],774:[0,.69444,0,0],775:[0,.66786,0,0],776:[0,.66786,0,0],778:[0,.69444,0,0],779:[0,.69444,0,0],780:[0,.62847,0,0],824:[.19444,.69444,0,0],915:[0,.68333,0,0],916:[0,.68333,0,0],920:[0,.68333,0,0],923:[0,.68333,0,0],926:[0,.68333,0,0],928:[0,.68333,0,0],931:[0,.68333,0,0],933:[0,.68333,0,0],934:[0,.68333,0,0],936:[0,.68333,0,0],937:[0,.68333,0,0],8211:[0,.43056,.02778,0],8212:[0,.43056,.02778,0],8216:[0,.69444,0,0],8217:[0,.69444,0,0],8220:[0,.69444,0,0],8221:[0,.69444,0,0],8224:[.19444,.69444,0,0],8225:[.19444,.69444,0,0],8230:[0,.12,0,0],8242:[0,.55556,0,0],8407:[0,.71444,.15382,0],8463:[0,.68889,0,0],8465:[0,.69444,0,0],8467:[0,.69444,0,.11111],8472:[.19444,.43056,0,.11111],8476:[0,.69444,0,0],8501:[0,.69444,0,0],8592:[-.13313,.36687,0,0],8593:[.19444,.69444,0,0],8594:[-.13313,.36687,0,0],8595:[.19444,.69444,0,0],8596:[-.13313,.36687,0,0],8597:[.25,.75,0,0],8598:[.19444,.69444,0,0],8599:[.19444,.69444,0,0],8600:[.19444,.69444,0,0],8601:[.19444,.69444,0,0],8614:[.011,.511,0,0],8617:[.011,.511,0,0],8618:[.011,.511,0,0],8636:[-.13313,.36687,0,0],8637:[-.13313,.36687,0,0],8640:[-.13313,.36687,0,0],8641:[-.13313,.36687,0,0],8652:[.011,.671,0,0],8656:[-.13313,.36687,0,0],8657:[.19444,.69444,0,0],8658:[-.13313,.36687,0,0],8659:[.19444,.69444,0,0],8660:[-.13313,.36687,0,0],8661:[.25,.75,0,0],8704:[0,.69444,0,0],8706:[0,.69444,.05556,.08334],8707:[0,.69444,0,0],8709:[.05556,.75,0,0],8711:[0,.68333,0,0],8712:[.0391,.5391,0,0],8715:[.0391,.5391,0,0],8722:[.08333,.58333,0,0],8723:[.08333,.58333,0,0],8725:[.25,.75,0,0],8726:[.25,.75,0,0],8727:[-.03472,.46528,0,0],8728:[-.05555,.44445,0,0],8729:[-.05555,.44445,0,0],8730:[.2,.8,0,0],8733:[0,.43056,0,0],8734:[0,.43056,0,0],8736:[0,.69224,0,0],8739:[.25,.75,0,0],8741:[.25,.75,0,0],8743:[0,.55556,0,0],8744:[0,.55556,0,0],8745:[0,.55556,0,0],8746:[0,.55556,0,0],8747:[.19444,.69444,.11111,0],8764:[-.13313,.36687,0,0],8768:[.19444,.69444,0,0],8771:[-.03625,.46375,0,0],8773:[-.022,.589,0,0],8776:[-.01688,.48312,0,0],8781:[-.03625,.46375,0,0],8784:[-.133,.67,0,0],8800:[.215,.716,0,0],8801:[-.03625,.46375,0,0],8804:[.13597,.63597,0,0],8805:[.13597,.63597,0,0],8810:[.0391,.5391,0,0],8811:[.0391,.5391,0,0],8826:[.0391,.5391,0,0],8827:[.0391,.5391,0,0],8834:[.0391,.5391,0,0],8835:[.0391,.5391,0,0],8838:[.13597,.63597,0,0],8839:[.13597,.63597,0,0],8846:[0,.55556,0,0],8849:[.13597,.63597,0,0],8850:[.13597,.63597,0,0],8851:[0,.55556,0,0],8852:[0,.55556,0,0],8853:[.08333,.58333,0,0],8854:[.08333,.58333,0,0],8855:[.08333,.58333,0,0],8856:[.08333,.58333,0,0],8857:[.08333,.58333,0,0],8866:[0,.69444,0,0],8867:[0,.69444,0,0],8868:[0,.69444,0,0],8869:[0,.69444,0,0],8872:[.249,.75,0,0],8900:[-.05555,.44445,0,0],8901:[-.05555,.44445,0,0],8902:[-.03472,.46528,0,0],8904:[.005,.505,0,0],8942:[.03,.9,0,0],8943:[-.19,.31,0,0],8945:[-.1,.82,0,0],8968:[.25,.75,0,0],8969:[.25,.75,0,0],8970:[.25,.75,0,0],8971:[.25,.75,0,0],8994:[-.14236,.35764,0,0],8995:[-.14236,.35764,0,0],9136:[.244,.744,0,0],9137:[.244,.744,0,0],9651:[.19444,.69444,0,0],9657:[-.03472,.46528,0,0],9661:[.19444,.69444,0,0],9667:[-.03472,.46528,0,0],9711:[.19444,.69444,0,0],9824:[.12963,.69444,0,0],9825:[.12963,.69444,0,0],9826:[.12963,.69444,0,0],9827:[.12963,.69444,0,0],9837:[0,.75,0,0],9838:[.19444,.69444,0,0],9839:[.19444,.69444,0,0],10216:[.25,.75,0,0],10217:[.25,.75,0,0],10222:[.244,.744,0,0],10223:[.244,.744,0,0],10229:[.011,.511,0,0],10230:[.011,.511,0,0],10231:[.011,.511,0,0],10232:[.024,.525,0,0],10233:[.024,.525,0,0],10234:[.024,.525,0,0],10236:[.011,.511,0,0],10815:[0,.68333,0,0],10927:[.13597,.63597,0,0],10928:[.13597,.63597,0,0]},"Math-BoldItalic":{47:[.19444,.69444,0,0],65:[0,.68611,0,0],66:[0,.68611,.04835,0],67:[0,.68611,.06979,0],68:[0,.68611,.03194,0],69:[0,.68611,.05451,0],70:[0,.68611,.15972,0],71:[0,.68611,0,0],72:[0,.68611,.08229,0],73:[0,.68611,.07778,0],74:[0,.68611,.10069,0],75:[0,.68611,.06979,0],76:[0,.68611,0,0],77:[0,.68611,.11424,0],78:[0,.68611,.11424,0],79:[0,.68611,.03194,0],80:[0,.68611,.15972,0],81:[.19444,.68611,0,0],82:[0,.68611,.00421,0],83:[0,.68611,.05382,0],84:[0,.68611,.15972,0],85:[0,.68611,.11424,0],86:[0,.68611,.25555,0],87:[0,.68611,.15972,0],88:[0,.68611,.07778,0],89:[0,.68611,.25555,0],90:[0,.68611,.06979,0],97:[0,.44444,0,0],98:[0,.69444,0,0],99:[0,.44444,0,0],100:[0,.69444,0,0],101:[0,.44444,0,0],102:[.19444,.69444,.11042,0],103:[.19444,.44444,.03704,0],104:[0,.69444,0,0],105:[0,.69326,0,0],106:[.19444,.69326,.0622,0],107:[0,.69444,.01852,0],108:[0,.69444,.0088,0],109:[0,.44444,0,0],110:[0,.44444,0,0],111:[0,.44444,0,0],112:[.19444,.44444,0,0],113:[.19444,.44444,.03704,0],114:[0,.44444,.03194,0],115:[0,.44444,0,0],116:[0,.63492,0,0],117:[0,.44444,0,0],118:[0,.44444,.03704,0],119:[0,.44444,.02778,0],120:[0,.44444,0,0],121:[.19444,.44444,.03704,0],122:[0,.44444,.04213,0],915:[0,.68611,.15972,0],916:[0,.68611,0,0],920:[0,.68611,.03194,0],923:[0,.68611,0,0],926:[0,.68611,.07458,0],928:[0,.68611,.08229,0],931:[0,.68611,.05451,0],933:[0,.68611,.15972,0],934:[0,.68611,0,0],936:[0,.68611,.11653,0],937:[0,.68611,.04835,0],945:[0,.44444,0,0],946:[.19444,.69444,.03403,0],947:[.19444,.44444,.06389,0],948:[0,.69444,.03819,0],949:[0,.44444,0,0],950:[.19444,.69444,.06215,0],951:[.19444,.44444,.03704,0],952:[0,.69444,.03194,0],953:[0,.44444,0,0],954:[0,.44444,0,0],955:[0,.69444,0,0],956:[.19444,.44444,0,0],957:[0,.44444,.06898,0],958:[.19444,.69444,.03021,0],959:[0,.44444,0,0],960:[0,.44444,.03704,0],961:[.19444,.44444,0,0],962:[.09722,.44444,.07917,0],963:[0,.44444,.03704,0],964:[0,.44444,.13472,0],965:[0,.44444,.03704,0],966:[.19444,.44444,0,0],967:[.19444,.44444,0,0],968:[.19444,.69444,.03704,0],969:[0,.44444,.03704,0],977:[0,.69444,0,0],981:[.19444,.69444,0,0],982:[0,.44444,.03194,0],1009:[.19444,.44444,0,0],1013:[0,.44444,0,0]},"Math-Italic":{47:[.19444,.69444,0,0],65:[0,.68333,0,.13889],66:[0,.68333,.05017,.08334],67:[0,.68333,.07153,.08334],68:[0,.68333,.02778,.05556],69:[0,.68333,.05764,.08334],70:[0,.68333,.13889,.08334],71:[0,.68333,0,.08334],72:[0,.68333,.08125,.05556],73:[0,.68333,.07847,.11111],74:[0,.68333,.09618,.16667],75:[0,.68333,.07153,.05556],76:[0,.68333,0,.02778],77:[0,.68333,.10903,.08334],78:[0,.68333,.10903,.08334],79:[0,.68333,.02778,.08334],80:[0,.68333,.13889,.08334],81:[.19444,.68333,0,.08334],82:[0,.68333,.00773,.08334],83:[0,.68333,.05764,.08334],84:[0,.68333,.13889,.08334],85:[0,.68333,.10903,.02778],86:[0,.68333,.22222,0],87:[0,.68333,.13889,0],88:[0,.68333,.07847,.08334],89:[0,.68333,.22222,0],90:[0,.68333,.07153,.08334],97:[0,.43056,0,0],98:[0,.69444,0,0],99:[0,.43056,0,.05556],100:[0,.69444,0,.16667],101:[0,.43056,0,.05556],102:[.19444,.69444,.10764,.16667],103:[.19444,.43056,.03588,.02778],104:[0,.69444,0,0],105:[0,.65952,0,0],106:[.19444,.65952,.05724,0],107:[0,.69444,.03148,0],108:[0,.69444,.01968,.08334],109:[0,.43056,0,0],110:[0,.43056,0,0],111:[0,.43056,0,.05556],112:[.19444,.43056,0,.08334],113:[.19444,.43056,.03588,.08334],114:[0,.43056,.02778,.05556],115:[0,.43056,0,.05556],116:[0,.61508,0,.08334],117:[0,.43056,0,.02778],118:[0,.43056,.03588,.02778],119:[0,.43056,.02691,.08334],120:[0,.43056,0,.02778],121:[.19444,.43056,.03588,.05556],122:[0,.43056,.04398,.05556],915:[0,.68333,.13889,.08334],916:[0,.68333,0,.16667],920:[0,.68333,.02778,.08334],923:[0,.68333,0,.16667],926:[0,.68333,.07569,.08334],928:[0,.68333,.08125,.05556],931:[0,.68333,.05764,.08334],933:[0,.68333,.13889,.05556],934:[0,.68333,0,.08334],936:[0,.68333,.11,.05556],937:[0,.68333,.05017,.08334],945:[0,.43056,.0037,.02778],946:[.19444,.69444,.05278,.08334],947:[.19444,.43056,.05556,0],948:[0,.69444,.03785,.05556],949:[0,.43056,0,.08334],950:[.19444,.69444,.07378,.08334],951:[.19444,.43056,.03588,.05556],952:[0,.69444,.02778,.08334],953:[0,.43056,0,.05556],954:[0,.43056,0,0],955:[0,.69444,0,0],956:[.19444,.43056,0,.02778],957:[0,.43056,.06366,.02778],958:[.19444,.69444,.04601,.11111],959:[0,.43056,0,.05556],960:[0,.43056,.03588,0],961:[.19444,.43056,0,.08334],962:[.09722,.43056,.07986,.08334],963:[0,.43056,.03588,0],964:[0,.43056,.1132,.02778],965:[0,.43056,.03588,.02778],966:[.19444,.43056,0,.08334],967:[.19444,.43056,0,.05556],968:[.19444,.69444,.03588,.11111],969:[0,.43056,.03588,0],977:[0,.69444,0,.08334],981:[.19444,.69444,0,.08334],982:[0,.43056,.02778,0],1009:[.19444,.43056,0,.08334],1013:[0,.43056,0,.05556]},"Math-Regular":{65:[0,.68333,0,.13889],66:[0,.68333,.05017,.08334],67:[0,.68333,.07153,.08334],68:[0,.68333,.02778,.05556],69:[0,.68333,.05764,.08334],70:[0,.68333,.13889,.08334],71:[0,.68333,0,.08334],72:[0,.68333,.08125,.05556],73:[0,.68333,.07847,.11111],74:[0,.68333,.09618,.16667],75:[0,.68333,.07153,.05556],76:[0,.68333,0,.02778],77:[0,.68333,.10903,.08334],78:[0,.68333,.10903,.08334],79:[0,.68333,.02778,.08334],80:[0,.68333,.13889,.08334],81:[.19444,.68333,0,.08334],82:[0,.68333,.00773,.08334],83:[0,.68333,.05764,.08334],84:[0,.68333,.13889,.08334],85:[0,.68333,.10903,.02778],86:[0,.68333,.22222,0],87:[0,.68333,.13889,0],88:[0,.68333,.07847,.08334],89:[0,.68333,.22222,0],90:[0,.68333,.07153,.08334],97:[0,.43056,0,0],98:[0,.69444,0,0],99:[0,.43056,0,.05556],100:[0,.69444,0,.16667],101:[0,.43056,0,.05556],102:[.19444,.69444,.10764,.16667],103:[.19444,.43056,.03588,.02778],104:[0,.69444,0,0],105:[0,.65952,0,0],106:[.19444,.65952,.05724,0],107:[0,.69444,.03148,0],108:[0,.69444,.01968,.08334],109:[0,.43056,0,0],110:[0,.43056,0,0],111:[0,.43056,0,.05556],112:[.19444,.43056,0,.08334],113:[.19444,.43056,.03588,.08334],114:[0,.43056,.02778,.05556],115:[0,.43056,0,.05556],116:[0,.61508,0,.08334],117:[0,.43056,0,.02778],118:[0,.43056,.03588,.02778],119:[0,.43056,.02691,.08334],120:[0,.43056,0,.02778],121:[.19444,.43056,.03588,.05556],122:[0,.43056,.04398,.05556],915:[0,.68333,.13889,.08334],916:[0,.68333,0,.16667],920:[0,.68333,.02778,.08334],923:[0,.68333,0,.16667],926:[0,.68333,.07569,.08334],928:[0,.68333,.08125,.05556],931:[0,.68333,.05764,.08334],933:[0,.68333,.13889,.05556],934:[0,.68333,0,.08334],936:[0,.68333,.11,.05556],937:[0,.68333,.05017,.08334],945:[0,.43056,.0037,.02778],946:[.19444,.69444,.05278,.08334],947:[.19444,.43056,.05556,0],948:[0,.69444,.03785,.05556],949:[0,.43056,0,.08334],950:[.19444,.69444,.07378,.08334],951:[.19444,.43056,.03588,.05556],952:[0,.69444,.02778,.08334],953:[0,.43056,0,.05556],954:[0,.43056,0,0],955:[0,.69444,0,0],956:[.19444,.43056,0,.02778],957:[0,.43056,.06366,.02778],958:[.19444,.69444,.04601,.11111],959:[0,.43056,0,.05556],960:[0,.43056,.03588,0],961:[.19444,.43056,0,.08334],962:[.09722,.43056,.07986,.08334],963:[0,.43056,.03588,0],964:[0,.43056,.1132,.02778],965:[0,.43056,.03588,.02778],966:[.19444,.43056,0,.08334],967:[.19444,.43056,0,.05556],968:[.19444,.69444,.03588,.11111],969:[0,.43056,.03588,0],977:[0,.69444,0,.08334],981:[.19444,.69444,0,.08334],982:[0,.43056,.02778,0],1009:[.19444,.43056,0,.08334],1013:[0,.43056,0,.05556]},"SansSerif-Regular":{33:[0,.69444,0,0],34:[0,.69444,0,0],35:[.19444,.69444,0,0],36:[.05556,.75,0,0],37:[.05556,.75,0,0],38:[0,.69444,0,0],39:[0,.69444,0,0],40:[.25,.75,0,0],41:[.25,.75,0,0],42:[0,.75,0,0],43:[.08333,.58333,0,0],44:[.125,.08333,0,0],45:[0,.44444,0,0],46:[0,.08333,0,0],47:[.25,.75,0,0],48:[0,.65556,0,0],49:[0,.65556,0,0],50:[0,.65556,0,0],51:[0,.65556,0,0],52:[0,.65556,0,0],53:[0,.65556,0,0],54:[0,.65556,0,0],55:[0,.65556,0,0],56:[0,.65556,0,0],57:[0,.65556,0,0],58:[0,.44444,0,0],59:[.125,.44444,0,0],61:[-.13,.37,0,0],63:[0,.69444,0,0],64:[0,.69444,0,0],65:[0,.69444,0,0],66:[0,.69444,0,0],67:[0,.69444,0,0],68:[0,.69444,0,0],69:[0,.69444,0,0],70:[0,.69444,0,0],71:[0,.69444,0,0],72:[0,.69444,0,0],73:[0,.69444,0,0],74:[0,.69444,0,0],75:[0,.69444,0,0],76:[0,.69444,0,0],77:[0,.69444,0,0],78:[0,.69444,0,0],79:[0,.69444,0,0],80:[0,.69444,0,0],81:[.125,.69444,0,0],82:[0,.69444,0,0],83:[0,.69444,0,0],84:[0,.69444,0,0],85:[0,.69444,0,0],86:[0,.69444,.01389,0],87:[0,.69444,.01389,0],88:[0,.69444,0,0],89:[0,.69444,.025,0],90:[0,.69444,0,0],91:[.25,.75,0,0],93:[.25,.75,0,0],94:[0,.69444,0,0],95:[.35,.09444,.02778,0],97:[0,.44444,0,0],98:[0,.69444,0,0],99:[0,.44444,0,0],100:[0,.69444,0,0],101:[0,.44444,0,0],102:[0,.69444,.06944,0],103:[.19444,.44444,.01389,0],104:[0,.69444,0,0],105:[0,.67937,0,0],106:[.19444,.67937,0,0],107:[0,.69444,0,0],108:[0,.69444,0,0],109:[0,.44444,0,0],110:[0,.44444,0,0],111:[0,.44444,0,0],112:[.19444,.44444,0,0],113:[.19444,.44444,0,0],114:[0,.44444,.01389,0],115:[0,.44444,0,0],116:[0,.57143,0,0],117:[0,.44444,0,0],118:[0,.44444,.01389,0],119:[0,.44444,.01389,0],120:[0,.44444,0,0],121:[.19444,.44444,.01389,0],122:[0,.44444,0,0],126:[.35,.32659,0,0],305:[0,.44444,0,0],567:[.19444,.44444,0,0],768:[0,.69444,0,0],769:[0,.69444,0,0],770:[0,.69444,0,0],771:[0,.67659,0,0],772:[0,.60889,0,0],774:[0,.69444,0,0],775:[0,.67937,0,0],776:[0,.67937,0,0],778:[0,.69444,0,0],779:[0,.69444,0,0],780:[0,.63194,0,0],915:[0,.69444,0,0],916:[0,.69444,0,0],920:[0,.69444,0,0],923:[0,.69444,0,0],926:[0,.69444,0,0],928:[0,.69444,0,0],931:[0,.69444,0,0],933:[0,.69444,0,0],934:[0,.69444,0,0],936:[0,.69444,0,0],937:[0,.69444,0,0],8211:[0,.44444,.02778,0],8212:[0,.44444,.02778,0],8216:[0,.69444,0,0],8217:[0,.69444,0,0],8220:[0,.69444,0,0],8221:[0,.69444,0,0]},"Script-Regular":{65:[0,.7,.22925,0],66:[0,.7,.04087,0],67:[0,.7,.1689,0],68:[0,.7,.09371,0],69:[0,.7,.18583,0],70:[0,.7,.13634,0],71:[0,.7,.17322,0],72:[0,.7,.29694,0],73:[0,.7,.19189,0],74:[.27778,.7,.19189,0],75:[0,.7,.31259,0],76:[0,.7,.19189,0],77:[0,.7,.15981,0],78:[0,.7,.3525,0],79:[0,.7,.08078,0],80:[0,.7,.08078,0],81:[0,.7,.03305,0],82:[0,.7,.06259,0],83:[0,.7,.19189,0],84:[0,.7,.29087,0],85:[0,.7,.25815,0],86:[0,.7,.27523,0],87:[0,.7,.27523,0],88:[0,.7,.26006,0],89:[0,.7,.2939,0],90:[0,.7,.24037,0]},"Size1-Regular":{40:[.35001,.85,0,0],41:[.35001,.85,0,0],47:[.35001,.85,0,0],91:[.35001,.85,0,0],92:[.35001,.85,0,0],93:[.35001,.85,0,0],123:[.35001,.85,0,0],125:[.35001,.85,0,0],710:[0,.72222,0,0],732:[0,.72222,0,0],770:[0,.72222,0,0],771:[0,.72222,0,0],8214:[-99e-5,.601,0,0],8593:[1e-5,.6,0,0],8595:[1e-5,.6,0,0],8657:[1e-5,.6,0,0],8659:[1e-5,.6,0,0],8719:[.25001,.75,0,0],8720:[.25001,.75,0,0],8721:[.25001,.75,0,0],8730:[.35001,.85,0,0],8739:[-.00599,.606,0,0],8741:[-.00599,.606,0,0],8747:[.30612,.805,.19445,0],8748:[.306,.805,.19445,0],8749:[.306,.805,.19445,0],8750:[.30612,.805,.19445,0],8896:[.25001,.75,0,0],8897:[.25001,.75,0,0],8898:[.25001,.75,0,0],8899:[.25001,.75,0,0],8968:[.35001,.85,0,0],8969:[.35001,.85,0,0],8970:[.35001,.85,0,0],8971:[.35001,.85,0,0],9168:[-99e-5,.601,0,0],10216:[.35001,.85,0,0],10217:[.35001,.85,0,0],10752:[.25001,.75,0,0],10753:[.25001,.75,0,0],10754:[.25001,.75,0,0],10756:[.25001,.75,0,0],10758:[.25001,.75,0,0]},"Size2-Regular":{40:[.65002,1.15,0,0],41:[.65002,1.15,0,0],47:[.65002,1.15,0,0],91:[.65002,1.15,0,0],92:[.65002,1.15,0,0],93:[.65002,1.15,0,0],123:[.65002,1.15,0,0],125:[.65002,1.15,0,0],710:[0,.75,0,0],732:[0,.75,0,0],770:[0,.75,0,0],771:[0,.75,0,0],8719:[.55001,1.05,0,0],8720:[.55001,1.05,0,0],8721:[.55001,1.05,0,0],8730:[.65002,1.15,0,0],8747:[.86225,1.36,.44445,0],8748:[.862,1.36,.44445,0],8749:[.862,1.36,.44445,0],8750:[.86225,1.36,.44445,0],8896:[.55001,1.05,0,0],8897:[.55001,1.05,0,0],8898:[.55001,1.05,0,0],8899:[.55001,1.05,0,0],8968:[.65002,1.15,0,0],8969:[.65002,1.15,0,0],8970:[.65002,1.15,0,0],8971:[.65002,1.15,0,0],10216:[.65002,1.15,0,0],10217:[.65002,1.15,0,0],10752:[.55001,1.05,0,0],10753:[.55001,1.05,0,0],10754:[.55001,1.05,0,0],
+10756:[.55001,1.05,0,0],10758:[.55001,1.05,0,0]},"Size3-Regular":{40:[.95003,1.45,0,0],41:[.95003,1.45,0,0],47:[.95003,1.45,0,0],91:[.95003,1.45,0,0],92:[.95003,1.45,0,0],93:[.95003,1.45,0,0],123:[.95003,1.45,0,0],125:[.95003,1.45,0,0],710:[0,.75,0,0],732:[0,.75,0,0],770:[0,.75,0,0],771:[0,.75,0,0],8730:[.95003,1.45,0,0],8968:[.95003,1.45,0,0],8969:[.95003,1.45,0,0],8970:[.95003,1.45,0,0],8971:[.95003,1.45,0,0],10216:[.95003,1.45,0,0],10217:[.95003,1.45,0,0]},"Size4-Regular":{40:[1.25003,1.75,0,0],41:[1.25003,1.75,0,0],47:[1.25003,1.75,0,0],91:[1.25003,1.75,0,0],92:[1.25003,1.75,0,0],93:[1.25003,1.75,0,0],123:[1.25003,1.75,0,0],125:[1.25003,1.75,0,0],710:[0,.825,0,0],732:[0,.825,0,0],770:[0,.825,0,0],771:[0,.825,0,0],8730:[1.25003,1.75,0,0],8968:[1.25003,1.75,0,0],8969:[1.25003,1.75,0,0],8970:[1.25003,1.75,0,0],8971:[1.25003,1.75,0,0],9115:[.64502,1.155,0,0],9116:[1e-5,.6,0,0],9117:[.64502,1.155,0,0],9118:[.64502,1.155,0,0],9119:[1e-5,.6,0,0],9120:[.64502,1.155,0,0],9121:[.64502,1.155,0,0],9122:[-99e-5,.601,0,0],9123:[.64502,1.155,0,0],9124:[.64502,1.155,0,0],9125:[-99e-5,.601,0,0],9126:[.64502,1.155,0,0],9127:[1e-5,.9,0,0],9128:[.65002,1.15,0,0],9129:[.90001,0,0,0],9130:[0,.3,0,0],9131:[1e-5,.9,0,0],9132:[.65002,1.15,0,0],9133:[.90001,0,0,0],9143:[.88502,.915,0,0],10216:[1.25003,1.75,0,0],10217:[1.25003,1.75,0,0],57344:[-.00499,.605,0,0],57345:[-.00499,.605,0,0],57680:[0,.12,0,0],57681:[0,.12,0,0],57682:[0,.12,0,0],57683:[0,.12,0,0]},"Typewriter-Regular":{33:[0,.61111,0,0],34:[0,.61111,0,0],35:[0,.61111,0,0],36:[.08333,.69444,0,0],37:[.08333,.69444,0,0],38:[0,.61111,0,0],39:[0,.61111,0,0],40:[.08333,.69444,0,0],41:[.08333,.69444,0,0],42:[0,.52083,0,0],43:[-.08056,.53055,0,0],44:[.13889,.125,0,0],45:[-.08056,.53055,0,0],46:[0,.125,0,0],47:[.08333,.69444,0,0],48:[0,.61111,0,0],49:[0,.61111,0,0],50:[0,.61111,0,0],51:[0,.61111,0,0],52:[0,.61111,0,0],53:[0,.61111,0,0],54:[0,.61111,0,0],55:[0,.61111,0,0],56:[0,.61111,0,0],57:[0,.61111,0,0],58:[0,.43056,0,0],59:[.13889,.43056,0,0],60:[-.05556,.55556,0,0],61:[-.19549,.41562,0,0],62:[-.05556,.55556,0,0],63:[0,.61111,0,0],64:[0,.61111,0,0],65:[0,.61111,0,0],66:[0,.61111,0,0],67:[0,.61111,0,0],68:[0,.61111,0,0],69:[0,.61111,0,0],70:[0,.61111,0,0],71:[0,.61111,0,0],72:[0,.61111,0,0],73:[0,.61111,0,0],74:[0,.61111,0,0],75:[0,.61111,0,0],76:[0,.61111,0,0],77:[0,.61111,0,0],78:[0,.61111,0,0],79:[0,.61111,0,0],80:[0,.61111,0,0],81:[.13889,.61111,0,0],82:[0,.61111,0,0],83:[0,.61111,0,0],84:[0,.61111,0,0],85:[0,.61111,0,0],86:[0,.61111,0,0],87:[0,.61111,0,0],88:[0,.61111,0,0],89:[0,.61111,0,0],90:[0,.61111,0,0],91:[.08333,.69444,0,0],92:[.08333,.69444,0,0],93:[.08333,.69444,0,0],94:[0,.61111,0,0],95:[.09514,0,0,0],96:[0,.61111,0,0],97:[0,.43056,0,0],98:[0,.61111,0,0],99:[0,.43056,0,0],100:[0,.61111,0,0],101:[0,.43056,0,0],102:[0,.61111,0,0],103:[.22222,.43056,0,0],104:[0,.61111,0,0],105:[0,.61111,0,0],106:[.22222,.61111,0,0],107:[0,.61111,0,0],108:[0,.61111,0,0],109:[0,.43056,0,0],110:[0,.43056,0,0],111:[0,.43056,0,0],112:[.22222,.43056,0,0],113:[.22222,.43056,0,0],114:[0,.43056,0,0],115:[0,.43056,0,0],116:[0,.55358,0,0],117:[0,.43056,0,0],118:[0,.43056,0,0],119:[0,.43056,0,0],120:[0,.43056,0,0],121:[.22222,.43056,0,0],122:[0,.43056,0,0],123:[.08333,.69444,0,0],124:[.08333,.69444,0,0],125:[.08333,.69444,0,0],126:[0,.61111,0,0],127:[0,.61111,0,0],305:[0,.43056,0,0],567:[.22222,.43056,0,0],768:[0,.61111,0,0],769:[0,.61111,0,0],770:[0,.61111,0,0],771:[0,.61111,0,0],772:[0,.56555,0,0],774:[0,.61111,0,0],776:[0,.61111,0,0],778:[0,.61111,0,0],780:[0,.56597,0,0],915:[0,.61111,0,0],916:[0,.61111,0,0],920:[0,.61111,0,0],923:[0,.61111,0,0],926:[0,.61111,0,0],928:[0,.61111,0,0],931:[0,.61111,0,0],933:[0,.61111,0,0],934:[0,.61111,0,0],936:[0,.61111,0,0],937:[0,.61111,0,0],2018:[0,.61111,0,0],2019:[0,.61111,0,0],8242:[0,.61111,0,0]}}},{}],19:[function(e,t,r){var a=e("./utils");var i=e("./ParseError");var n=e("./parseData");var s=n.ParseNode;function l(e,r,a){if(typeof e==="string"){e=[e]}if(typeof r==="number"){r={numArgs:r}}var i={numArgs:r.numArgs,argTypes:r.argTypes,greediness:r.greediness===undefined?1:r.greediness,allowedInText:!!r.allowedInText,numOptionalArgs:r.numOptionalArgs||0,infix:!!r.infix,handler:a};for(var n=0;n<e.length;++n){t.exports[e[n]]=i}}var o=function(e){if(e.type==="ordgroup"){return e.value}else{return[e]}};l("\\sqrt",{numArgs:1,numOptionalArgs:1},function(e,t){var r=t[0];var a=t[1];return{type:"sqrt",body:a,index:r}});var u={"\\text":undefined,"\\textrm":"mathrm","\\textsf":"mathsf","\\texttt":"mathtt","\\textnormal":"mathrm","\\textbf":"mathbf","\\textit":"textit"};l(["\\text","\\textrm","\\textsf","\\texttt","\\textnormal","\\textbf","\\textit"],{numArgs:1,argTypes:["text"],greediness:2,allowedInText:true},function(e,t){var r=t[0];return{type:"text",body:o(r),style:u[e.funcName]}});l("\\color",{numArgs:2,allowedInText:true,greediness:3,argTypes:["color","original"]},function(e,t){var r=t[0];var a=t[1];return{type:"color",color:r.value,value:o(a)}});l("\\overline",{numArgs:1},function(e,t){var r=t[0];return{type:"overline",body:r}});l("\\underline",{numArgs:1},function(e,t){var r=t[0];return{type:"underline",body:r}});l("\\rule",{numArgs:2,numOptionalArgs:1,argTypes:["size","size","size"]},function(e,t){var r=t[0];var a=t[1];var i=t[2];return{type:"rule",shift:r&&r.value,width:a.value,height:i.value}});l(["\\kern","\\mkern"],{numArgs:1,argTypes:["size"]},function(e,t){return{type:"kern",dimension:t[0].value}});l("\\KaTeX",{numArgs:0},function(e){return{type:"katex"}});l("\\phantom",{numArgs:1},function(e,t){var r=t[0];return{type:"phantom",value:o(r)}});l(["\\mathord","\\mathbin","\\mathrel","\\mathopen","\\mathclose","\\mathpunct","\\mathinner"],{numArgs:1},function(e,t){var r=t[0];return{type:"mclass",mclass:"m"+e.funcName.substr(5),value:o(r)}});l("\\stackrel",{numArgs:2},function(e,t){var r=t[0];var a=t[1];var i=new s("op",{type:"op",limits:true,alwaysHandleSupSub:true,symbol:false,value:o(a)},a.mode);var n=new s("supsub",{base:i,sup:r,sub:null},r.mode);return{type:"mclass",mclass:"mrel",value:[n]}});l("\\bmod",{numArgs:0},function(e,t){return{type:"mod",modType:"bmod",value:null}});l(["\\pod","\\pmod","\\mod"],{numArgs:1},function(e,t){var r=t[0];return{type:"mod",modType:e.funcName.substr(1),value:o(r)}});var p={"\\bigl":{mclass:"mopen",size:1},"\\Bigl":{mclass:"mopen",size:2},"\\biggl":{mclass:"mopen",size:3},"\\Biggl":{mclass:"mopen",size:4},"\\bigr":{mclass:"mclose",size:1},"\\Bigr":{mclass:"mclose",size:2},"\\biggr":{mclass:"mclose",size:3},"\\Biggr":{mclass:"mclose",size:4},"\\bigm":{mclass:"mrel",size:1},"\\Bigm":{mclass:"mrel",size:2},"\\biggm":{mclass:"mrel",size:3},"\\Biggm":{mclass:"mrel",size:4},"\\big":{mclass:"mord",size:1},"\\Big":{mclass:"mord",size:2},"\\bigg":{mclass:"mord",size:3},"\\Bigg":{mclass:"mord",size:4}};var h=["(",")","[","\\lbrack","]","\\rbrack","\\{","\\lbrace","\\}","\\rbrace","\\lfloor","\\rfloor","\\lceil","\\rceil","<",">","\\langle","\\rangle","\\lt","\\gt","\\lvert","\\rvert","\\lVert","\\rVert","\\lgroup","\\rgroup","\\lmoustache","\\rmoustache","/","\\backslash","|","\\vert","\\|","\\Vert","\\uparrow","\\Uparrow","\\downarrow","\\Downarrow","\\updownarrow","\\Updownarrow","."];var c={"\\Bbb":"\\mathbb","\\bold":"\\mathbf","\\frak":"\\mathfrak"};l(["\\blue","\\orange","\\pink","\\red","\\green","\\gray","\\purple","\\blueA","\\blueB","\\blueC","\\blueD","\\blueE","\\tealA","\\tealB","\\tealC","\\tealD","\\tealE","\\greenA","\\greenB","\\greenC","\\greenD","\\greenE","\\goldA","\\goldB","\\goldC","\\goldD","\\goldE","\\redA","\\redB","\\redC","\\redD","\\redE","\\maroonA","\\maroonB","\\maroonC","\\maroonD","\\maroonE","\\purpleA","\\purpleB","\\purpleC","\\purpleD","\\purpleE","\\mintA","\\mintB","\\mintC","\\grayA","\\grayB","\\grayC","\\grayD","\\grayE","\\grayF","\\grayG","\\grayH","\\grayI","\\kaBlue","\\kaGreen"],{numArgs:1,allowedInText:true,greediness:3},function(e,t){var r=t[0];return{type:"color",color:"katex-"+e.funcName.slice(1),value:o(r)}});l(["\\arcsin","\\arccos","\\arctan","\\arg","\\cos","\\cosh","\\cot","\\coth","\\csc","\\deg","\\dim","\\exp","\\hom","\\ker","\\lg","\\ln","\\log","\\sec","\\sin","\\sinh","\\tan","\\tanh"],{numArgs:0},function(e){return{type:"op",limits:false,symbol:false,body:e.funcName}});l(["\\det","\\gcd","\\inf","\\lim","\\liminf","\\limsup","\\max","\\min","\\Pr","\\sup"],{numArgs:0},function(e){return{type:"op",limits:true,symbol:false,body:e.funcName}});l(["\\int","\\iint","\\iiint","\\oint"],{numArgs:0},function(e){return{type:"op",limits:false,symbol:true,body:e.funcName}});l(["\\coprod","\\bigvee","\\bigwedge","\\biguplus","\\bigcap","\\bigcup","\\intop","\\prod","\\sum","\\bigotimes","\\bigoplus","\\bigodot","\\bigsqcup","\\smallint"],{numArgs:0},function(e){return{type:"op",limits:true,symbol:true,body:e.funcName}});l("\\mathop",{numArgs:1},function(e,t){var r=t[0];return{type:"op",limits:false,symbol:false,value:o(r)}});l(["\\dfrac","\\frac","\\tfrac","\\dbinom","\\binom","\\tbinom","\\\\atopfrac"],{numArgs:2,greediness:2},function(e,t){var r=t[0];var a=t[1];var i;var n=null;var s=null;var l="auto";switch(e.funcName){case"\\dfrac":case"\\frac":case"\\tfrac":i=true;break;case"\\\\atopfrac":i=false;break;case"\\dbinom":case"\\binom":case"\\tbinom":i=false;n="(";s=")";break;default:throw new Error("Unrecognized genfrac command")}switch(e.funcName){case"\\dfrac":case"\\dbinom":l="display";break;case"\\tfrac":case"\\tbinom":l="text";break}return{type:"genfrac",numer:r,denom:a,hasBarLine:i,leftDelim:n,rightDelim:s,size:l}});l(["\\llap","\\rlap"],{numArgs:1,allowedInText:true},function(e,t){var r=t[0];return{type:e.funcName.slice(1),body:r}});var m=function(e,t){if(a.contains(h,e.value)){return e}else{throw new i("Invalid delimiter: '"+e.value+"' after '"+t.funcName+"'",e)}};l(["\\bigl","\\Bigl","\\biggl","\\Biggl","\\bigr","\\Bigr","\\biggr","\\Biggr","\\bigm","\\Bigm","\\biggm","\\Biggm","\\big","\\Big","\\bigg","\\Bigg"],{numArgs:1},function(e,t){var r=m(t[0],e);return{type:"delimsizing",size:p[e.funcName].size,mclass:p[e.funcName].mclass,value:r.value}});l(["\\left","\\right"],{numArgs:1},function(e,t){var r=m(t[0],e);return{type:"leftright",value:r.value}});l("\\middle",{numArgs:1},function(e,t){var r=m(t[0],e);if(!e.parser.leftrightDepth){throw new i("\\middle without preceding \\left",r)}return{type:"middle",value:r.value}});l(["\\tiny","\\scriptsize","\\footnotesize","\\small","\\normalsize","\\large","\\Large","\\LARGE","\\huge","\\Huge"],0,null);l(["\\displaystyle","\\textstyle","\\scriptstyle","\\scriptscriptstyle"],0,null);l(["\\mathrm","\\mathit","\\mathbf","\\mathbb","\\mathcal","\\mathfrak","\\mathscr","\\mathsf","\\mathtt","\\Bbb","\\bold","\\frak"],{numArgs:1,greediness:2},function(e,t){var r=t[0];var a=e.funcName;if(a in c){a=c[a]}return{type:"font",font:a.slice(1),body:r}});l(["\\acute","\\grave","\\ddot","\\tilde","\\bar","\\breve","\\check","\\hat","\\vec","\\dot"],{numArgs:1},function(e,t){var r=t[0];return{type:"accent",accent:e.funcName,base:r}});l(["\\over","\\choose","\\atop"],{numArgs:0,infix:true},function(e){var t;switch(e.funcName){case"\\over":t="\\frac";break;case"\\choose":t="\\binom";break;case"\\atop":t="\\\\atopfrac";break;default:throw new Error("Unrecognized infix genfrac command")}return{type:"infix",replaceWith:t,token:e.token}});l(["\\\\","\\cr"],{numArgs:0,numOptionalArgs:1,argTypes:["size"]},function(e,t){var r=t[0];return{type:"cr",size:r}});l(["\\begin","\\end"],{numArgs:1,argTypes:["text"]},function(e,t){var r=t[0];if(r.type!=="ordgroup"){throw new i("Invalid environment name",r)}var a="";for(var n=0;n<r.value.length;++n){a+=r.value[n].value}return{type:"environment",name:a,nameGroup:r}})},{"./ParseError":6,"./parseData":21,"./utils":25}],20:[function(e,t,r){var a=e("./utils");function i(e,t){this.type=e;this.attributes={};this.children=t||[]}i.prototype.setAttribute=function(e,t){this.attributes[e]=t};i.prototype.toNode=function(){var e=document.createElementNS("http://www.w3.org/1998/Math/MathML",this.type);for(var t in this.attributes){if(Object.prototype.hasOwnProperty.call(this.attributes,t)){e.setAttribute(t,this.attributes[t])}}for(var r=0;r<this.children.length;r++){e.appendChild(this.children[r].toNode())}return e};i.prototype.toMarkup=function(){var e="<"+this.type;for(var t in this.attributes){if(Object.prototype.hasOwnProperty.call(this.attributes,t)){e+=" "+t+'="';e+=a.escape(this.attributes[t]);e+='"'}}e+=">";for(var r=0;r<this.children.length;r++){e+=this.children[r].toMarkup()}e+="</"+this.type+">";return e};function n(e){this.text=e}n.prototype.toNode=function(){return document.createTextNode(this.text)};n.prototype.toMarkup=function(){return a.escape(this.text)};t.exports={MathNode:i,TextNode:n}},{"./utils":25}],21:[function(e,t,r){function a(e,t,r,a,i){this.type=e;this.value=t;this.mode=r;if(a&&(!i||i.lexer===a.lexer)){this.lexer=a.lexer;this.start=a.start;this.end=(i||a).end}}t.exports={ParseNode:a}},{}],22:[function(e,t,r){var a=e("./Parser");var i=function(e,t){if(!(typeof e==="string"||e instanceof String)){throw new TypeError("KaTeX can only parse string typed expression")}var r=new a(e,t);return r.parse()};t.exports=i},{"./Parser":7}],23:[function(e,t,r){t.exports={math:{},text:{}};function a(e,r,a,i,n){t.exports[e][n]={font:r,group:a,replace:i}}var i="math";var n="text";var s="main";var l="ams";var o="accent";var u="bin";var p="close";var h="inner";var c="mathord";var m="op";var f="open";var v="punct";var d="rel";var g="spacing";var y="textord";a(i,s,d,"\u2261","\\equiv");a(i,s,d,"\u227a","\\prec");a(i,s,d,"\u227b","\\succ");a(i,s,d,"\u223c","\\sim");a(i,s,d,"\u22a5","\\perp");a(i,s,d,"\u2aaf","\\preceq");a(i,s,d,"\u2ab0","\\succeq");a(i,s,d,"\u2243","\\simeq");a(i,s,d,"\u2223","\\mid");a(i,s,d,"\u226a","\\ll");a(i,s,d,"\u226b","\\gg");a(i,s,d,"\u224d","\\asymp");a(i,s,d,"\u2225","\\parallel");a(i,s,d,"\u22c8","\\bowtie");a(i,s,d,"\u2323","\\smile");a(i,s,d,"\u2291","\\sqsubseteq");a(i,s,d,"\u2292","\\sqsupseteq");a(i,s,d,"\u2250","\\doteq");a(i,s,d,"\u2322","\\frown");a(i,s,d,"\u220b","\\ni");a(i,s,d,"\u221d","\\propto");a(i,s,d,"\u22a2","\\vdash");a(i,s,d,"\u22a3","\\dashv");a(i,s,d,"\u220b","\\owns");a(i,s,v,".","\\ldotp");a(i,s,v,"\u22c5","\\cdotp");a(i,s,y,"#","\\#");a(n,s,y,"#","\\#");a(i,s,y,"&","\\&");a(n,s,y,"&","\\&");a(i,s,y,"\u2135","\\aleph");a(i,s,y,"\u2200","\\forall");a(i,s,y,"\u210f","\\hbar");a(i,s,y,"\u2203","\\exists");a(i,s,y,"\u2207","\\nabla");a(i,s,y,"\u266d","\\flat");a(i,s,y,"\u2113","\\ell");a(i,s,y,"\u266e","\\natural");a(i,s,y,"\u2663","\\clubsuit");a(i,s,y,"\u2118","\\wp");a(i,s,y,"\u266f","\\sharp");a(i,s,y,"\u2662","\\diamondsuit");a(i,s,y,"\u211c","\\Re");a(i,s,y,"\u2661","\\heartsuit");a(i,s,y,"\u2111","\\Im");a(i,s,y,"\u2660","\\spadesuit");a(i,s,y,"\u2020","\\dag");a(i,s,y,"\u2021","\\ddag");a(i,s,p,"\u23b1","\\rmoustache");a(i,s,f,"\u23b0","\\lmoustache");a(i,s,p,"\u27ef","\\rgroup");a(i,s,f,"\u27ee","\\lgroup");a(i,s,u,"\u2213","\\mp");a(i,s,u,"\u2296","\\ominus");a(i,s,u,"\u228e","\\uplus");a(i,s,u,"\u2293","\\sqcap");a(i,s,u,"\u2217","\\ast");a(i,s,u,"\u2294","\\sqcup");a(i,s,u,"\u25ef","\\bigcirc");a(i,s,u,"\u2219","\\bullet");a(i,s,u,"\u2021","\\ddagger");a(i,s,u,"\u2240","\\wr");a(i,s,u,"\u2a3f","\\amalg");a(i,s,d,"\u27f5","\\longleftarrow");a(i,s,d,"\u21d0","\\Leftarrow");a(i,s,d,"\u27f8","\\Longleftarrow");a(i,s,d,"\u27f6","\\longrightarrow");a(i,s,d,"\u21d2","\\Rightarrow");a(i,s,d,"\u27f9","\\Longrightarrow");a(i,s,d,"\u2194","\\leftrightarrow");a(i,s,d,"\u27f7","\\longleftrightarrow");a(i,s,d,"\u21d4","\\Leftrightarrow");a(i,s,d,"\u27fa","\\Longleftrightarrow");a(i,s,d,"\u21a6","\\mapsto");a(i,s,d,"\u27fc","\\longmapsto");a(i,s,d,"\u2197","\\nearrow");a(i,s,d,"\u21a9","\\hookleftarrow");a(i,s,d,"\u21aa","\\hookrightarrow");a(i,s,d,"\u2198","\\searrow");a(i,s,d,"\u21bc","\\leftharpoonup");a(i,s,d,"\u21c0","\\rightharpoonup");a(i,s,d,"\u2199","\\swarrow");a(i,s,d,"\u21bd","\\leftharpoondown");a(i,s,d,"\u21c1","\\rightharpoondown");a(i,s,d,"\u2196","\\nwarrow");a(i,s,d,"\u21cc","\\rightleftharpoons");a(i,l,d,"\u226e","\\nless");a(i,l,d,"\ue010","\\nleqslant");a(i,l,d,"\ue011","\\nleqq");a(i,l,d,"\u2a87","\\lneq");a(i,l,d,"\u2268","\\lneqq");a(i,l,d,"\ue00c","\\lvertneqq");a(i,l,d,"\u22e6","\\lnsim");a(i,l,d,"\u2a89","\\lnapprox");a(i,l,d,"\u2280","\\nprec");a(i,l,d,"\u22e0","\\npreceq");a(i,l,d,"\u22e8","\\precnsim");a(i,l,d,"\u2ab9","\\precnapprox");a(i,l,d,"\u2241","\\nsim");a(i,l,d,"\ue006","\\nshortmid");a(i,l,d,"\u2224","\\nmid");a(i,l,d,"\u22ac","\\nvdash");a(i,l,d,"\u22ad","\\nvDash");a(i,l,d,"\u22ea","\\ntriangleleft");a(i,l,d,"\u22ec","\\ntrianglelefteq");a(i,l,d,"\u228a","\\subsetneq");a(i,l,d,"\ue01a","\\varsubsetneq");a(i,l,d,"\u2acb","\\subsetneqq");a(i,l,d,"\ue017","\\varsubsetneqq");a(i,l,d,"\u226f","\\ngtr");a(i,l,d,"\ue00f","\\ngeqslant");a(i,l,d,"\ue00e","\\ngeqq");a(i,l,d,"\u2a88","\\gneq");a(i,l,d,"\u2269","\\gneqq");a(i,l,d,"\ue00d","\\gvertneqq");a(i,l,d,"\u22e7","\\gnsim");a(i,l,d,"\u2a8a","\\gnapprox");a(i,l,d,"\u2281","\\nsucc");a(i,l,d,"\u22e1","\\nsucceq");a(i,l,d,"\u22e9","\\succnsim");a(i,l,d,"\u2aba","\\succnapprox");a(i,l,d,"\u2246","\\ncong");a(i,l,d,"\ue007","\\nshortparallel");a(i,l,d,"\u2226","\\nparallel");a(i,l,d,"\u22af","\\nVDash");a(i,l,d,"\u22eb","\\ntriangleright");a(i,l,d,"\u22ed","\\ntrianglerighteq");a(i,l,d,"\ue018","\\nsupseteqq");a(i,l,d,"\u228b","\\supsetneq");a(i,l,d,"\ue01b","\\varsupsetneq");a(i,l,d,"\u2acc","\\supsetneqq");a(i,l,d,"\ue019","\\varsupsetneqq");a(i,l,d,"\u22ae","\\nVdash");a(i,l,d,"\u2ab5","\\precneqq");a(i,l,d,"\u2ab6","\\succneqq");a(i,l,d,"\ue016","\\nsubseteqq");a(i,l,u,"\u22b4","\\unlhd");a(i,l,u,"\u22b5","\\unrhd");a(i,l,d,"\u219a","\\nleftarrow");a(i,l,d,"\u219b","\\nrightarrow");a(i,l,d,"\u21cd","\\nLeftarrow");a(i,l,d,"\u21cf","\\nRightarrow");a(i,l,d,"\u21ae","\\nleftrightarrow");a(i,l,d,"\u21ce","\\nLeftrightarrow");a(i,l,d,"\u25b3","\\vartriangle");a(i,l,y,"\u210f","\\hslash");a(i,l,y,"\u25bd","\\triangledown");a(i,l,y,"\u25ca","\\lozenge");a(i,l,y,"\u24c8","\\circledS");a(i,l,y,"\xae","\\circledR");a(i,l,y,"\u2221","\\measuredangle");a(i,l,y,"\u2204","\\nexists");a(i,l,y,"\u2127","\\mho");a(i,l,y,"\u2132","\\Finv");a(i,l,y,"\u2141","\\Game");a(i,l,y,"k","\\Bbbk");a(i,l,y,"\u2035","\\backprime");a(i,l,y,"\u25b2","\\blacktriangle");a(i,l,y,"\u25bc","\\blacktriangledown");a(i,l,y,"\u25a0","\\blacksquare");a(i,l,y,"\u29eb","\\blacklozenge");a(i,l,y,"\u2605","\\bigstar");a(i,l,y,"\u2222","\\sphericalangle");a(i,l,y,"\u2201","\\complement");a(i,l,y,"\xf0","\\eth");a(i,l,y,"\u2571","\\diagup");a(i,l,y,"\u2572","\\diagdown");a(i,l,y,"\u25a1","\\square");a(i,l,y,"\u25a1","\\Box");a(i,l,y,"\u25ca","\\Diamond");a(i,l,y,"\xa5","\\yen");a(i,l,y,"\u2713","\\checkmark");a(i,l,y,"\u2136","\\beth");a(i,l,y,"\u2138","\\daleth");a(i,l,y,"\u2137","\\gimel");a(i,l,y,"\u03dd","\\digamma");a(i,l,y,"\u03f0","\\varkappa");a(i,l,f,"\u250c","\\ulcorner");a(i,l,p,"\u2510","\\urcorner");a(i,l,f,"\u2514","\\llcorner");a(i,l,p,"\u2518","\\lrcorner");a(i,l,d,"\u2266","\\leqq");a(i,l,d,"\u2a7d","\\leqslant");a(i,l,d,"\u2a95","\\eqslantless");a(i,l,d,"\u2272","\\lesssim");a(i,l,d,"\u2a85","\\lessapprox");a(i,l,d,"\u224a","\\approxeq");a(i,l,u,"\u22d6","\\lessdot");a(i,l,d,"\u22d8","\\lll");a(i,l,d,"\u2276","\\lessgtr");a(i,l,d,"\u22da","\\lesseqgtr");a(i,l,d,"\u2a8b","\\lesseqqgtr");a(i,l,d,"\u2251","\\doteqdot");a(i,l,d,"\u2253","\\risingdotseq");a(i,l,d,"\u2252","\\fallingdotseq");a(i,l,d,"\u223d","\\backsim");a(i,l,d,"\u22cd","\\backsimeq");a(i,l,d,"\u2ac5","\\subseteqq");a(i,l,d,"\u22d0","\\Subset");a(i,l,d,"\u228f","\\sqsubset");a(i,l,d,"\u227c","\\preccurlyeq");a(i,l,d,"\u22de","\\curlyeqprec");a(i,l,d,"\u227e","\\precsim");a(i,l,d,"\u2ab7","\\precapprox");a(i,l,d,"\u22b2","\\vartriangleleft");a(i,l,d,"\u22b4","\\trianglelefteq");a(i,l,d,"\u22a8","\\vDash");a(i,l,d,"\u22aa","\\Vvdash");a(i,l,d,"\u2323","\\smallsmile");a(i,l,d,"\u2322","\\smallfrown");a(i,l,d,"\u224f","\\bumpeq");a(i,l,d,"\u224e","\\Bumpeq");a(i,l,d,"\u2267","\\geqq");a(i,l,d,"\u2a7e","\\geqslant");a(i,l,d,"\u2a96","\\eqslantgtr");a(i,l,d,"\u2273","\\gtrsim");a(i,l,d,"\u2a86","\\gtrapprox");a(i,l,u,"\u22d7","\\gtrdot");a(i,l,d,"\u22d9","\\ggg");a(i,l,d,"\u2277","\\gtrless");a(i,l,d,"\u22db","\\gtreqless");a(i,l,d,"\u2a8c","\\gtreqqless");a(i,l,d,"\u2256","\\eqcirc");a(i,l,d,"\u2257","\\circeq");a(i,l,d,"\u225c","\\triangleq");a(i,l,d,"\u223c","\\thicksim");a(i,l,d,"\u2248","\\thickapprox");a(i,l,d,"\u2ac6","\\supseteqq");a(i,l,d,"\u22d1","\\Supset");a(i,l,d,"\u2290","\\sqsupset");a(i,l,d,"\u227d","\\succcurlyeq");a(i,l,d,"\u22df","\\curlyeqsucc");a(i,l,d,"\u227f","\\succsim");a(i,l,d,"\u2ab8","\\succapprox");a(i,l,d,"\u22b3","\\vartriangleright");a(i,l,d,"\u22b5","\\trianglerighteq");a(i,l,d,"\u22a9","\\Vdash");a(i,l,d,"\u2223","\\shortmid");a(i,l,d,"\u2225","\\shortparallel");a(i,l,d,"\u226c","\\between");a(i,l,d,"\u22d4","\\pitchfork");a(i,l,d,"\u221d","\\varpropto");a(i,l,d,"\u25c0","\\blacktriangleleft");a(i,l,d,"\u2234","\\therefore");a(i,l,d,"\u220d","\\backepsilon");a(i,l,d,"\u25b6","\\blacktriangleright");a(i,l,d,"\u2235","\\because");a(i,l,d,"\u22d8","\\llless");a(i,l,d,"\u22d9","\\gggtr");a(i,l,u,"\u22b2","\\lhd");a(i,l,u,"\u22b3","\\rhd");a(i,l,d,"\u2242","\\eqsim");a(i,s,d,"\u22c8","\\Join");a(i,l,d,"\u2251","\\Doteq");a(i,l,u,"\u2214","\\dotplus");a(i,l,u,"\u2216","\\smallsetminus");a(i,l,u,"\u22d2","\\Cap");a(i,l,u,"\u22d3","\\Cup");a(i,l,u,"\u2a5e","\\doublebarwedge");a(i,l,u,"\u229f","\\boxminus");a(i,l,u,"\u229e","\\boxplus");a(i,l,u,"\u22c7","\\divideontimes");a(i,l,u,"\u22c9","\\ltimes");a(i,l,u,"\u22ca","\\rtimes");a(i,l,u,"\u22cb","\\leftthreetimes");a(i,l,u,"\u22cc","\\rightthreetimes");a(i,l,u,"\u22cf","\\curlywedge");a(i,l,u,"\u22ce","\\curlyvee");a(i,l,u,"\u229d","\\circleddash");a(i,l,u,"\u229b","\\circledast");a(i,l,u,"\u22c5","\\centerdot");a(i,l,u,"\u22ba","\\intercal");a(i,l,u,"\u22d2","\\doublecap");a(i,l,u,"\u22d3","\\doublecup");a(i,l,u,"\u22a0","\\boxtimes");a(i,l,d,"\u21e2","\\dashrightarrow");a(i,l,d,"\u21e0","\\dashleftarrow");a(i,l,d,"\u21c7","\\leftleftarrows");a(i,l,d,"\u21c6","\\leftrightarrows");a(i,l,d,"\u21da","\\Lleftarrow");a(i,l,d,"\u219e","\\twoheadleftarrow");a(i,l,d,"\u21a2","\\leftarrowtail");a(i,l,d,"\u21ab","\\looparrowleft");a(i,l,d,"\u21cb","\\leftrightharpoons");a(i,l,d,"\u21b6","\\curvearrowleft");a(i,l,d,"\u21ba","\\circlearrowleft");a(i,l,d,"\u21b0","\\Lsh");a(i,l,d,"\u21c8","\\upuparrows");a(i,l,d,"\u21bf","\\upharpoonleft");a(i,l,d,"\u21c3","\\downharpoonleft");a(i,l,d,"\u22b8","\\multimap");a(i,l,d,"\u21ad","\\leftrightsquigarrow");a(i,l,d,"\u21c9","\\rightrightarrows");a(i,l,d,"\u21c4","\\rightleftarrows");a(i,l,d,"\u21a0","\\twoheadrightarrow");a(i,l,d,"\u21a3","\\rightarrowtail");a(i,l,d,"\u21ac","\\looparrowright");a(i,l,d,"\u21b7","\\curvearrowright");a(i,l,d,"\u21bb","\\circlearrowright");a(i,l,d,"\u21b1","\\Rsh");a(i,l,d,"\u21ca","\\downdownarrows");a(i,l,d,"\u21be","\\upharpoonright");a(i,l,d,"\u21c2","\\downharpoonright");a(i,l,d,"\u21dd","\\rightsquigarrow");a(i,l,d,"\u21dd","\\leadsto");a(i,l,d,"\u21db","\\Rrightarrow");a(i,l,d,"\u21be","\\restriction");a(i,s,y,"\u2018","`");a(i,s,y,"$","\\$");a(n,s,y,"$","\\$");a(i,s,y,"%","\\%");a(n,s,y,"%","\\%");a(i,s,y,"_","\\_");a(n,s,y,"_","\\_");a(i,s,y,"\u2220","\\angle");a(i,s,y,"\u221e","\\infty");a(i,s,y,"\u2032","\\prime");a(i,s,y,"\u25b3","\\triangle");a(i,s,y,"\u0393","\\Gamma");a(i,s,y,"\u0394","\\Delta");a(i,s,y,"\u0398","\\Theta");a(i,s,y,"\u039b","\\Lambda");a(i,s,y,"\u039e","\\Xi");a(i,s,y,"\u03a0","\\Pi");a(i,s,y,"\u03a3","\\Sigma");a(i,s,y,"\u03a5","\\Upsilon");a(i,s,y,"\u03a6","\\Phi");a(i,s,y,"\u03a8","\\Psi");a(i,s,y,"\u03a9","\\Omega");a(i,s,y,"\xac","\\neg");a(i,s,y,"\xac","\\lnot");a(i,s,y,"\u22a4","\\top");a(i,s,y,"\u22a5","\\bot");a(i,s,y,"\u2205","\\emptyset");a(i,l,y,"\u2205","\\varnothing");a(i,s,c,"\u03b1","\\alpha");a(i,s,c,"\u03b2","\\beta");a(i,s,c,"\u03b3","\\gamma");a(i,s,c,"\u03b4","\\delta");a(i,s,c,"\u03f5","\\epsilon");a(i,s,c,"\u03b6","\\zeta");a(i,s,c,"\u03b7","\\eta");a(i,s,c,"\u03b8","\\theta");a(i,s,c,"\u03b9","\\iota");a(i,s,c,"\u03ba","\\kappa");a(i,s,c,"\u03bb","\\lambda");a(i,s,c,"\u03bc","\\mu");a(i,s,c,"\u03bd","\\nu");a(i,s,c,"\u03be","\\xi");a(i,s,c,"o","\\omicron");a(i,s,c,"\u03c0","\\pi");a(i,s,c,"\u03c1","\\rho");a(i,s,c,"\u03c3","\\sigma");a(i,s,c,"\u03c4","\\tau");a(i,s,c,"\u03c5","\\upsilon");a(i,s,c,"\u03d5","\\phi");a(i,s,c,"\u03c7","\\chi");a(i,s,c,"\u03c8","\\psi");a(i,s,c,"\u03c9","\\omega");a(i,s,c,"\u03b5","\\varepsilon");a(i,s,c,"\u03d1","\\vartheta");a(i,s,c,"\u03d6","\\varpi");a(i,s,c,"\u03f1","\\varrho");a(i,s,c,"\u03c2","\\varsigma");a(i,s,c,"\u03c6","\\varphi");a(i,s,u,"\u2217","*");a(i,s,u,"+","+");a(i,s,u,"\u2212","-");a(i,s,u,"\u22c5","\\cdot");a(i,s,u,"\u2218","\\circ");a(i,s,u,"\xf7","\\div");a(i,s,u,"\xb1","\\pm");a(i,s,u,"\xd7","\\times");a(i,s,u,"\u2229","\\cap");a(i,s,u,"\u222a","\\cup");a(i,s,u,"\u2216","\\setminus");a(i,s,u,"\u2227","\\land");a(i,s,u,"\u2228","\\lor");a(i,s,u,"\u2227","\\wedge");a(i,s,u,"\u2228","\\vee");a(i,s,y,"\u221a","\\surd");a(i,s,f,"(","(");a(i,s,f,"[","[");a(i,s,f,"\u27e8","\\langle");a(i,s,f,"\u2223","\\lvert");a(i,s,f,"\u2225","\\lVert");a(i,s,p,")",")");a(i,s,p,"]","]");a(i,s,p,"?","?");a(i,s,p,"!","!");a(i,s,p,"\u27e9","\\rangle");a(i,s,p,"\u2223","\\rvert");a(i,s,p,"\u2225","\\rVert");a(i,s,d,"=","=");a(i,s,d,"<","<");a(i,s,d,">",">");a(i,s,d,":",":");a(i,s,d,"\u2248","\\approx");a(i,s,d,"\u2245","\\cong");a(i,s,d,"\u2265","\\ge");a(i,s,d,"\u2265","\\geq");a(i,s,d,"\u2190","\\gets");a(i,s,d,">","\\gt");a(i,s,d,"\u2208","\\in");a(i,s,d,"\u2209","\\notin");a(i,s,d,"\u2282","\\subset");a(i,s,d,"\u2283","\\supset");a(i,s,d,"\u2286","\\subseteq");a(i,s,d,"\u2287","\\supseteq");a(i,l,d,"\u2288","\\nsubseteq");a(i,l,d,"\u2289","\\nsupseteq");a(i,s,d,"\u22a8","\\models");a(i,s,d,"\u2190","\\leftarrow");a(i,s,d,"\u2264","\\le");a(i,s,d,"\u2264","\\leq");a(i,s,d,"<","\\lt");a(i,s,d,"\u2260","\\ne");a(i,s,d,"\u2260","\\neq");a(i,s,d,"\u2192","\\rightarrow");a(i,s,d,"\u2192","\\to");a(i,l,d,"\u2271","\\ngeq");a(i,l,d,"\u2270","\\nleq");a(i,s,g,null,"\\!");a(i,s,g,"\xa0","\\ ");a(i,s,g,"\xa0","~");a(i,s,g,null,"\\,");a(i,s,g,null,"\\:");a(i,s,g,null,"\\;");a(i,s,g,null,"\\enspace");a(i,s,g,null,"\\qquad");a(i,s,g,null,"\\quad");a(i,s,g,"\xa0","\\space");a(i,s,v,",",",");a(i,s,v,";",";");a(i,s,v,":","\\colon");a(i,l,u,"\u22bc","\\barwedge");a(i,l,u,"\u22bb","\\veebar");a(i,s,u,"\u2299","\\odot");a(i,s,u,"\u2295","\\oplus");a(i,s,u,"\u2297","\\otimes");a(i,s,y,"\u2202","\\partial");a(i,s,u,"\u2298","\\oslash");a(i,l,u,"\u229a","\\circledcirc");a(i,l,u,"\u22a1","\\boxdot");a(i,s,u,"\u25b3","\\bigtriangleup");a(i,s,u,"\u25bd","\\bigtriangledown");a(i,s,u,"\u2020","\\dagger");a(i,s,u,"\u22c4","\\diamond");a(i,s,u,"\u22c6","\\star");a(i,s,u,"\u25c3","\\triangleleft");a(i,s,u,"\u25b9","\\triangleright");a(i,s,f,"{","\\{");a(n,s,y,"{","\\{");a(i,s,p,"}","\\}");a(n,s,y,"}","\\}");a(i,s,f,"{","\\lbrace");a(i,s,p,"}","\\rbrace");a(i,s,f,"[","\\lbrack");a(i,s,p,"]","\\rbrack");a(i,s,f,"\u230a","\\lfloor");a(i,s,p,"\u230b","\\rfloor");a(i,s,f,"\u2308","\\lceil");a(i,s,p,"\u2309","\\rceil");a(i,s,y,"\\","\\backslash");a(i,s,y,"\u2223","|");a(i,s,y,"\u2223","\\vert");a(i,s,y,"\u2225","\\|");a(i,s,y,"\u2225","\\Vert");a(i,s,d,"\u2191","\\uparrow");a(i,s,d,"\u21d1","\\Uparrow");a(i,s,d,"\u2193","\\downarrow");a(i,s,d,"\u21d3","\\Downarrow");a(i,s,d,"\u2195","\\updownarrow");a(i,s,d,"\u21d5","\\Updownarrow");a(i,i,m,"\u2210","\\coprod");a(i,i,m,"\u22c1","\\bigvee");a(i,i,m,"\u22c0","\\bigwedge");a(i,i,m,"\u2a04","\\biguplus");a(i,i,m,"\u22c2","\\bigcap");a(i,i,m,"\u22c3","\\bigcup");a(i,i,m,"\u222b","\\int");a(i,i,m,"\u222b","\\intop");a(i,i,m,"\u222c","\\iint");a(i,i,m,"\u222d","\\iiint");a(i,i,m,"\u220f","\\prod");a(i,i,m,"\u2211","\\sum");a(i,i,m,"\u2a02","\\bigotimes");a(i,i,m,"\u2a01","\\bigoplus");a(i,i,m,"\u2a00","\\bigodot");a(i,i,m,"\u222e","\\oint");a(i,i,m,"\u2a06","\\bigsqcup");a(i,i,m,"\u222b","\\smallint");a(n,s,h,"\u2026","\\textellipsis");a(i,s,h,"\u2026","\\mathellipsis");a(n,s,h,"\u2026","\\ldots");a(i,s,h,"\u2026","\\ldots");a(i,s,h,"\u22ef","\\cdots");a(i,s,h,"\u22f1","\\ddots");a(i,s,y,"\u22ee","\\vdots");a(i,s,o,"\xb4","\\acute");a(i,s,o,"`","\\grave");a(i,s,o,"\xa8","\\ddot");a(i,s,o,"~","\\tilde");a(i,s,o,"\xaf","\\bar");a(i,s,o,"\u02d8","\\breve");a(i,s,o,"\u02c7","\\check");a(i,s,o,"^","\\hat");a(i,s,o,"\u20d7","\\vec");a(i,s,o,"\u02d9","\\dot");a(i,s,c,"\u0131","\\imath");a(i,s,c,"\u0237","\\jmath");a(n,s,y,"\u2013","--");a(n,s,y,"\u2014","---");a(n,s,y,"\u2018","`");a(n,s,y,"\u2019","'");a(n,s,y,"\u201c","``");a(n,s,y,"\u201d","''");a(i,s,y,"\xb0","\\degree");a(n,s,y,"\xb0","\\degree");a(i,s,c,"\xa3","\\pounds");a(i,l,y,"\u2720","\\maltese");a(n,l,y,"\u2720","\\maltese");a(n,s,g,"\xa0","\\ ");a(n,s,g,"\xa0"," ");a(n,s,g,"\xa0","~");var x;var b;var w='0123456789/@."';for(x=0;x<w.length;x++){b=w.charAt(x);a(i,s,y,b,b)}var k='0123456789!@*()-=+[]";:?/.,';for(x=0;x<k.length;x++){b=k.charAt(x);a(n,s,y,b,b)}var z="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";for(x=0;x<z.length;x++){b=z.charAt(x);a(i,s,c,b,b);a(n,s,y,b,b)}for(x=192;x<=214;x++){b=String.fromCharCode(x);a(n,s,y,b,b)}for(x=216;x<=246;x++){b=String.fromCharCode(x);a(n,s,y,b,b)}for(x=248;x<=255;x++){b=String.fromCharCode(x);a(n,s,y,b,b)}for(x=1040;x<=1103;x++){b=String.fromCharCode(x);a(n,s,y,b,b)}a(n,s,y,"\u2013","\u2013");a(n,s,y,"\u2014","\u2014");a(n,s,y,"\u2018","\u2018");a(n,s,y,"\u2019","\u2019");a(n,s,y,"\u201c","\u201c");a(n,s,y,"\u201d","\u201d")},{}],24:[function(e,t,r){var a=/[\uAC00-\uD7AF]/;var i=/[\u3040-\u309F]|[\u30A0-\u30FF]|[\u4E00-\u9FAF]|[\uAC00-\uD7AF]/;t.exports={cjkRegex:i,hangulRegex:a}},{}],25:[function(e,t,r){var a=Array.prototype.indexOf;var i=function(e,t){if(e==null){return-1}if(a&&e.indexOf===a){return e.indexOf(t)}var r=0;var i=e.length;for(;r<i;r++){if(e[r]===t){return r}}return-1};var n=function(e,t){return i(e,t)!==-1};var s=function(e,t){return e===undefined?t:e};var l=/([A-Z])/g;var o=function(e){return e.replace(l,"-$1").toLowerCase()};var u={"&":"&amp;",">":"&gt;","<":"&lt;",'"':"&quot;","'":"&#x27;"};var p=/[&><"']/g;function h(e){return u[e]}function c(e){return(""+e).replace(p,h)}var m;if(typeof document!=="undefined"){var f=document.createElement("span");if("textContent"in f){m=function(e,t){e.textContent=t}}else{m=function(e,t){e.innerText=t}}}function v(e){m(e,"")}t.exports={contains:n,deflt:s,escape:c,hyphenate:o,indexOf:i,setTextContent:m,clearNode:v}},{}]},{},[1])(1)});
diff --git a/htdocs/cgi-bin/wsrc/quill/monokai-sublime.min.css b/htdocs/cgi-bin/wsrc/quill/monokai-sublime.min.css
new file mode 100644 (file)
index 0000000..589eff9
--- /dev/null
@@ -0,0 +1 @@
+.hljs{display:block;overflow-x:auto;padding:0.5em;background:#23241f}.hljs,.hljs-tag,.hljs-subst{color:#f8f8f2}.hljs-strong,.hljs-emphasis{color:#a8a8a2}.hljs-bullet,.hljs-quote,.hljs-number,.hljs-regexp,.hljs-literal,.hljs-link{color:#ae81ff}.hljs-code,.hljs-title,.hljs-section,.hljs-selector-class{color:#a6e22e}.hljs-strong{font-weight:bold}.hljs-emphasis{font-style:italic}.hljs-keyword,.hljs-selector-tag,.hljs-name,.hljs-attr{color:#f92672}.hljs-symbol,.hljs-attribute{color:#66d9ef}.hljs-params,.hljs-class .hljs-title{color:#f8f8f2}.hljs-string,.hljs-type,.hljs-built_in,.hljs-builtin-name,.hljs-selector-id,.hljs-selector-attr,.hljs-selector-pseudo,.hljs-addition,.hljs-variable,.hljs-template-variable{color:#e6db74}.hljs-comment,.hljs-deletion,.hljs-meta{color:#75715e}
\ No newline at end of file
diff --git a/htdocs/cgi-bin/wsrc/quill/quill.bubble.css b/htdocs/cgi-bin/wsrc/quill/quill.bubble.css
new file mode 100644 (file)
index 0000000..aaa24cc
--- /dev/null
@@ -0,0 +1,952 @@
+/*!
+ * Quill Editor v1.3.6
+ * https://quilljs.com/
+ * Copyright (c) 2014, Jason Chen
+ * Copyright (c) 2013, salesforce.com
+ */
+.ql-container {
+  box-sizing: border-box;
+  font-family: Helvetica, Arial, sans-serif;
+  font-size: 13px;
+  height: 100%;
+  margin: 0px;
+  position: relative;
+}
+.ql-container.ql-disabled .ql-tooltip {
+  visibility: hidden;
+}
+.ql-container.ql-disabled .ql-editor ul[data-checked] > li::before {
+  pointer-events: none;
+}
+.ql-clipboard {
+  left: -100000px;
+  height: 1px;
+  overflow-y: hidden;
+  position: absolute;
+  top: 50%;
+}
+.ql-clipboard p {
+  margin: 0;
+  padding: 0;
+}
+.ql-editor {
+  box-sizing: border-box;
+  line-height: 1.42;
+  height: 100%;
+  outline: none;
+  overflow-y: auto;
+  padding: 12px 15px;
+  tab-size: 4;
+  -moz-tab-size: 4;
+  text-align: left;
+  white-space: pre-wrap;
+  word-wrap: break-word;
+}
+.ql-editor > * {
+  cursor: text;
+}
+.ql-editor p,
+.ql-editor ol,
+.ql-editor ul,
+.ql-editor pre,
+.ql-editor blockquote,
+.ql-editor h1,
+.ql-editor h2,
+.ql-editor h3,
+.ql-editor h4,
+.ql-editor h5,
+.ql-editor h6 {
+  margin: 0;
+  padding: 0;
+  counter-reset: list-1 list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9;
+}
+.ql-editor ol,
+.ql-editor ul {
+  padding-left: 1.5em;
+}
+.ql-editor ol > li,
+.ql-editor ul > li {
+  list-style-type: none;
+}
+.ql-editor ul > li::before {
+  content: '\2022';
+}
+.ql-editor ul[data-checked=true],
+.ql-editor ul[data-checked=false] {
+  pointer-events: none;
+}
+.ql-editor ul[data-checked=true] > li *,
+.ql-editor ul[data-checked=false] > li * {
+  pointer-events: all;
+}
+.ql-editor ul[data-checked=true] > li::before,
+.ql-editor ul[data-checked=false] > li::before {
+  color: #777;
+  cursor: pointer;
+  pointer-events: all;
+}
+.ql-editor ul[data-checked=true] > li::before {
+  content: '\2611';
+}
+.ql-editor ul[data-checked=false] > li::before {
+  content: '\2610';
+}
+.ql-editor li::before {
+  display: inline-block;
+  white-space: nowrap;
+  width: 1.2em;
+}
+.ql-editor li:not(.ql-direction-rtl)::before {
+  margin-left: -1.5em;
+  margin-right: 0.3em;
+  text-align: right;
+}
+.ql-editor li.ql-direction-rtl::before {
+  margin-left: 0.3em;
+  margin-right: -1.5em;
+}
+.ql-editor ol li:not(.ql-direction-rtl),
+.ql-editor ul li:not(.ql-direction-rtl) {
+  padding-left: 1.5em;
+}
+.ql-editor ol li.ql-direction-rtl,
+.ql-editor ul li.ql-direction-rtl {
+  padding-right: 1.5em;
+}
+.ql-editor ol li {
+  counter-reset: list-1 list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9;
+  counter-increment: list-0;
+}
+.ql-editor ol li:before {
+  content: counter(list-0, decimal) '. ';
+}
+.ql-editor ol li.ql-indent-1 {
+  counter-increment: list-1;
+}
+.ql-editor ol li.ql-indent-1:before {
+  content: counter(list-1, lower-alpha) '. ';
+}
+.ql-editor ol li.ql-indent-1 {
+  counter-reset: list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9;
+}
+.ql-editor ol li.ql-indent-2 {
+  counter-increment: list-2;
+}
+.ql-editor ol li.ql-indent-2:before {
+  content: counter(list-2, lower-roman) '. ';
+}
+.ql-editor ol li.ql-indent-2 {
+  counter-reset: list-3 list-4 list-5 list-6 list-7 list-8 list-9;
+}
+.ql-editor ol li.ql-indent-3 {
+  counter-increment: list-3;
+}
+.ql-editor ol li.ql-indent-3:before {
+  content: counter(list-3, decimal) '. ';
+}
+.ql-editor ol li.ql-indent-3 {
+  counter-reset: list-4 list-5 list-6 list-7 list-8 list-9;
+}
+.ql-editor ol li.ql-indent-4 {
+  counter-increment: list-4;
+}
+.ql-editor ol li.ql-indent-4:before {
+  content: counter(list-4, lower-alpha) '. ';
+}
+.ql-editor ol li.ql-indent-4 {
+  counter-reset: list-5 list-6 list-7 list-8 list-9;
+}
+.ql-editor ol li.ql-indent-5 {
+  counter-increment: list-5;
+}
+.ql-editor ol li.ql-indent-5:before {
+  content: counter(list-5, lower-roman) '. ';
+}
+.ql-editor ol li.ql-indent-5 {
+  counter-reset: list-6 list-7 list-8 list-9;
+}
+.ql-editor ol li.ql-indent-6 {
+  counter-increment: list-6;
+}
+.ql-editor ol li.ql-indent-6:before {
+  content: counter(list-6, decimal) '. ';
+}
+.ql-editor ol li.ql-indent-6 {
+  counter-reset: list-7 list-8 list-9;
+}
+.ql-editor ol li.ql-indent-7 {
+  counter-increment: list-7;
+}
+.ql-editor ol li.ql-indent-7:before {
+  content: counter(list-7, lower-alpha) '. ';
+}
+.ql-editor ol li.ql-indent-7 {
+  counter-reset: list-8 list-9;
+}
+.ql-editor ol li.ql-indent-8 {
+  counter-increment: list-8;
+}
+.ql-editor ol li.ql-indent-8:before {
+  content: counter(list-8, lower-roman) '. ';
+}
+.ql-editor ol li.ql-indent-8 {
+  counter-reset: list-9;
+}
+.ql-editor ol li.ql-indent-9 {
+  counter-increment: list-9;
+}
+.ql-editor ol li.ql-indent-9:before {
+  content: counter(list-9, decimal) '. ';
+}
+.ql-editor .ql-indent-1:not(.ql-direction-rtl) {
+  padding-left: 3em;
+}
+.ql-editor li.ql-indent-1:not(.ql-direction-rtl) {
+  padding-left: 4.5em;
+}
+.ql-editor .ql-indent-1.ql-direction-rtl.ql-align-right {
+  padding-right: 3em;
+}
+.ql-editor li.ql-indent-1.ql-direction-rtl.ql-align-right {
+  padding-right: 4.5em;
+}
+.ql-editor .ql-indent-2:not(.ql-direction-rtl) {
+  padding-left: 6em;
+}
+.ql-editor li.ql-indent-2:not(.ql-direction-rtl) {
+  padding-left: 7.5em;
+}
+.ql-editor .ql-indent-2.ql-direction-rtl.ql-align-right {
+  padding-right: 6em;
+}
+.ql-editor li.ql-indent-2.ql-direction-rtl.ql-align-right {
+  padding-right: 7.5em;
+}
+.ql-editor .ql-indent-3:not(.ql-direction-rtl) {
+  padding-left: 9em;
+}
+.ql-editor li.ql-indent-3:not(.ql-direction-rtl) {
+  padding-left: 10.5em;
+}
+.ql-editor .ql-indent-3.ql-direction-rtl.ql-align-right {
+  padding-right: 9em;
+}
+.ql-editor li.ql-indent-3.ql-direction-rtl.ql-align-right {
+  padding-right: 10.5em;
+}
+.ql-editor .ql-indent-4:not(.ql-direction-rtl) {
+  padding-left: 12em;
+}
+.ql-editor li.ql-indent-4:not(.ql-direction-rtl) {
+  padding-left: 13.5em;
+}
+.ql-editor .ql-indent-4.ql-direction-rtl.ql-align-right {
+  padding-right: 12em;
+}
+.ql-editor li.ql-indent-4.ql-direction-rtl.ql-align-right {
+  padding-right: 13.5em;
+}
+.ql-editor .ql-indent-5:not(.ql-direction-rtl) {
+  padding-left: 15em;
+}
+.ql-editor li.ql-indent-5:not(.ql-direction-rtl) {
+  padding-left: 16.5em;
+}
+.ql-editor .ql-indent-5.ql-direction-rtl.ql-align-right {
+  padding-right: 15em;
+}
+.ql-editor li.ql-indent-5.ql-direction-rtl.ql-align-right {
+  padding-right: 16.5em;
+}
+.ql-editor .ql-indent-6:not(.ql-direction-rtl) {
+  padding-left: 18em;
+}
+.ql-editor li.ql-indent-6:not(.ql-direction-rtl) {
+  padding-left: 19.5em;
+}
+.ql-editor .ql-indent-6.ql-direction-rtl.ql-align-right {
+  padding-right: 18em;
+}
+.ql-editor li.ql-indent-6.ql-direction-rtl.ql-align-right {
+  padding-right: 19.5em;
+}
+.ql-editor .ql-indent-7:not(.ql-direction-rtl) {
+  padding-left: 21em;
+}
+.ql-editor li.ql-indent-7:not(.ql-direction-rtl) {
+  padding-left: 22.5em;
+}
+.ql-editor .ql-indent-7.ql-direction-rtl.ql-align-right {
+  padding-right: 21em;
+}
+.ql-editor li.ql-indent-7.ql-direction-rtl.ql-align-right {
+  padding-right: 22.5em;
+}
+.ql-editor .ql-indent-8:not(.ql-direction-rtl) {
+  padding-left: 24em;
+}
+.ql-editor li.ql-indent-8:not(.ql-direction-rtl) {
+  padding-left: 25.5em;
+}
+.ql-editor .ql-indent-8.ql-direction-rtl.ql-align-right {
+  padding-right: 24em;
+}
+.ql-editor li.ql-indent-8.ql-direction-rtl.ql-align-right {
+  padding-right: 25.5em;
+}
+.ql-editor .ql-indent-9:not(.ql-direction-rtl) {
+  padding-left: 27em;
+}
+.ql-editor li.ql-indent-9:not(.ql-direction-rtl) {
+  padding-left: 28.5em;
+}
+.ql-editor .ql-indent-9.ql-direction-rtl.ql-align-right {
+  padding-right: 27em;
+}
+.ql-editor li.ql-indent-9.ql-direction-rtl.ql-align-right {
+  padding-right: 28.5em;
+}
+.ql-editor .ql-video {
+  display: block;
+  max-width: 100%;
+}
+.ql-editor .ql-video.ql-align-center {
+  margin: 0 auto;
+}
+.ql-editor .ql-video.ql-align-right {
+  margin: 0 0 0 auto;
+}
+.ql-editor .ql-bg-black {
+  background-color: #000;
+}
+.ql-editor .ql-bg-red {
+  background-color: #e60000;
+}
+.ql-editor .ql-bg-orange {
+  background-color: #f90;
+}
+.ql-editor .ql-bg-yellow {
+  background-color: #ff0;
+}
+.ql-editor .ql-bg-green {
+  background-color: #008a00;
+}
+.ql-editor .ql-bg-blue {
+  background-color: #06c;
+}
+.ql-editor .ql-bg-purple {
+  background-color: #93f;
+}
+.ql-editor .ql-color-white {
+  color: #fff;
+}
+.ql-editor .ql-color-red {
+  color: #e60000;
+}
+.ql-editor .ql-color-orange {
+  color: #f90;
+}
+.ql-editor .ql-color-yellow {
+  color: #ff0;
+}
+.ql-editor .ql-color-green {
+  color: #008a00;
+}
+.ql-editor .ql-color-blue {
+  color: #06c;
+}
+.ql-editor .ql-color-purple {
+  color: #93f;
+}
+.ql-editor .ql-font-serif {
+  font-family: Georgia, Times New Roman, serif;
+}
+.ql-editor .ql-font-monospace {
+  font-family: Monaco, Courier New, monospace;
+}
+.ql-editor .ql-size-small {
+  font-size: 0.75em;
+}
+.ql-editor .ql-size-large {
+  font-size: 1.5em;
+}
+.ql-editor .ql-size-huge {
+  font-size: 2.5em;
+}
+.ql-editor .ql-direction-rtl {
+  direction: rtl;
+  text-align: inherit;
+}
+.ql-editor .ql-align-center {
+  text-align: center;
+}
+.ql-editor .ql-align-justify {
+  text-align: justify;
+}
+.ql-editor .ql-align-right {
+  text-align: right;
+}
+.ql-editor.ql-blank::before {
+  color: rgba(0,0,0,0.6);
+  content: attr(data-placeholder);
+  font-style: italic;
+  left: 15px;
+  pointer-events: none;
+  position: absolute;
+  right: 15px;
+}
+.ql-bubble.ql-toolbar:after,
+.ql-bubble .ql-toolbar:after {
+  clear: both;
+  content: '';
+  display: table;
+}
+.ql-bubble.ql-toolbar button,
+.ql-bubble .ql-toolbar button {
+  background: none;
+  border: none;
+  cursor: pointer;
+  display: inline-block;
+  float: left;
+  height: 24px;
+  padding: 3px 5px;
+  width: 28px;
+}
+.ql-bubble.ql-toolbar button svg,
+.ql-bubble .ql-toolbar button svg {
+  float: left;
+  height: 100%;
+}
+.ql-bubble.ql-toolbar button:active:hover,
+.ql-bubble .ql-toolbar button:active:hover {
+  outline: none;
+}
+.ql-bubble.ql-toolbar input.ql-image[type=file],
+.ql-bubble .ql-toolbar input.ql-image[type=file] {
+  display: none;
+}
+.ql-bubble.ql-toolbar button:hover,
+.ql-bubble .ql-toolbar button:hover,
+.ql-bubble.ql-toolbar button:focus,
+.ql-bubble .ql-toolbar button:focus,
+.ql-bubble.ql-toolbar button.ql-active,
+.ql-bubble .ql-toolbar button.ql-active,
+.ql-bubble.ql-toolbar .ql-picker-label:hover,
+.ql-bubble .ql-toolbar .ql-picker-label:hover,
+.ql-bubble.ql-toolbar .ql-picker-label.ql-active,
+.ql-bubble .ql-toolbar .ql-picker-label.ql-active,
+.ql-bubble.ql-toolbar .ql-picker-item:hover,
+.ql-bubble .ql-toolbar .ql-picker-item:hover,
+.ql-bubble.ql-toolbar .ql-picker-item.ql-selected,
+.ql-bubble .ql-toolbar .ql-picker-item.ql-selected {
+  color: #fff;
+}
+.ql-bubble.ql-toolbar button:hover .ql-fill,
+.ql-bubble .ql-toolbar button:hover .ql-fill,
+.ql-bubble.ql-toolbar button:focus .ql-fill,
+.ql-bubble .ql-toolbar button:focus .ql-fill,
+.ql-bubble.ql-toolbar button.ql-active .ql-fill,
+.ql-bubble .ql-toolbar button.ql-active .ql-fill,
+.ql-bubble.ql-toolbar .ql-picker-label:hover .ql-fill,
+.ql-bubble .ql-toolbar .ql-picker-label:hover .ql-fill,
+.ql-bubble.ql-toolbar .ql-picker-label.ql-active .ql-fill,
+.ql-bubble .ql-toolbar .ql-picker-label.ql-active .ql-fill,
+.ql-bubble.ql-toolbar .ql-picker-item:hover .ql-fill,
+.ql-bubble .ql-toolbar .ql-picker-item:hover .ql-fill,
+.ql-bubble.ql-toolbar .ql-picker-item.ql-selected .ql-fill,
+.ql-bubble .ql-toolbar .ql-picker-item.ql-selected .ql-fill,
+.ql-bubble.ql-toolbar button:hover .ql-stroke.ql-fill,
+.ql-bubble .ql-toolbar button:hover .ql-stroke.ql-fill,
+.ql-bubble.ql-toolbar button:focus .ql-stroke.ql-fill,
+.ql-bubble .ql-toolbar button:focus .ql-stroke.ql-fill,
+.ql-bubble.ql-toolbar button.ql-active .ql-stroke.ql-fill,
+.ql-bubble .ql-toolbar button.ql-active .ql-stroke.ql-fill,
+.ql-bubble.ql-toolbar .ql-picker-label:hover .ql-stroke.ql-fill,
+.ql-bubble .ql-toolbar .ql-picker-label:hover .ql-stroke.ql-fill,
+.ql-bubble.ql-toolbar .ql-picker-label.ql-active .ql-stroke.ql-fill,
+.ql-bubble .ql-toolbar .ql-picker-label.ql-active .ql-stroke.ql-fill,
+.ql-bubble.ql-toolbar .ql-picker-item:hover .ql-stroke.ql-fill,
+.ql-bubble .ql-toolbar .ql-picker-item:hover .ql-stroke.ql-fill,
+.ql-bubble.ql-toolbar .ql-picker-item.ql-selected .ql-stroke.ql-fill,
+.ql-bubble .ql-toolbar .ql-picker-item.ql-selected .ql-stroke.ql-fill {
+  fill: #fff;
+}
+.ql-bubble.ql-toolbar button:hover .ql-stroke,
+.ql-bubble .ql-toolbar button:hover .ql-stroke,
+.ql-bubble.ql-toolbar button:focus .ql-stroke,
+.ql-bubble .ql-toolbar button:focus .ql-stroke,
+.ql-bubble.ql-toolbar button.ql-active .ql-stroke,
+.ql-bubble .ql-toolbar button.ql-active .ql-stroke,
+.ql-bubble.ql-toolbar .ql-picker-label:hover .ql-stroke,
+.ql-bubble .ql-toolbar .ql-picker-label:hover .ql-stroke,
+.ql-bubble.ql-toolbar .ql-picker-label.ql-active .ql-stroke,
+.ql-bubble .ql-toolbar .ql-picker-label.ql-active .ql-stroke,
+.ql-bubble.ql-toolbar .ql-picker-item:hover .ql-stroke,
+.ql-bubble .ql-toolbar .ql-picker-item:hover .ql-stroke,
+.ql-bubble.ql-toolbar .ql-picker-item.ql-selected .ql-stroke,
+.ql-bubble .ql-toolbar .ql-picker-item.ql-selected .ql-stroke,
+.ql-bubble.ql-toolbar button:hover .ql-stroke-miter,
+.ql-bubble .ql-toolbar button:hover .ql-stroke-miter,
+.ql-bubble.ql-toolbar button:focus .ql-stroke-miter,
+.ql-bubble .ql-toolbar button:focus .ql-stroke-miter,
+.ql-bubble.ql-toolbar button.ql-active .ql-stroke-miter,
+.ql-bubble .ql-toolbar button.ql-active .ql-stroke-miter,
+.ql-bubble.ql-toolbar .ql-picker-label:hover .ql-stroke-miter,
+.ql-bubble .ql-toolbar .ql-picker-label:hover .ql-stroke-miter,
+.ql-bubble.ql-toolbar .ql-picker-label.ql-active .ql-stroke-miter,
+.ql-bubble .ql-toolbar .ql-picker-label.ql-active .ql-stroke-miter,
+.ql-bubble.ql-toolbar .ql-picker-item:hover .ql-stroke-miter,
+.ql-bubble .ql-toolbar .ql-picker-item:hover .ql-stroke-miter,
+.ql-bubble.ql-toolbar .ql-picker-item.ql-selected .ql-stroke-miter,
+.ql-bubble .ql-toolbar .ql-picker-item.ql-selected .ql-stroke-miter {
+  stroke: #fff;
+}
+@media (pointer: coarse) {
+  .ql-bubble.ql-toolbar button:hover:not(.ql-active),
+  .ql-bubble .ql-toolbar button:hover:not(.ql-active) {
+    color: #ccc;
+  }
+  .ql-bubble.ql-toolbar button:hover:not(.ql-active) .ql-fill,
+  .ql-bubble .ql-toolbar button:hover:not(.ql-active) .ql-fill,
+  .ql-bubble.ql-toolbar button:hover:not(.ql-active) .ql-stroke.ql-fill,
+  .ql-bubble .ql-toolbar button:hover:not(.ql-active) .ql-stroke.ql-fill {
+    fill: #ccc;
+  }
+  .ql-bubble.ql-toolbar button:hover:not(.ql-active) .ql-stroke,
+  .ql-bubble .ql-toolbar button:hover:not(.ql-active) .ql-stroke,
+  .ql-bubble.ql-toolbar button:hover:not(.ql-active) .ql-stroke-miter,
+  .ql-bubble .ql-toolbar button:hover:not(.ql-active) .ql-stroke-miter {
+    stroke: #ccc;
+  }
+}
+.ql-bubble {
+  box-sizing: border-box;
+}
+.ql-bubble * {
+  box-sizing: border-box;
+}
+.ql-bubble .ql-hidden {
+  display: none;
+}
+.ql-bubble .ql-out-bottom,
+.ql-bubble .ql-out-top {
+  visibility: hidden;
+}
+.ql-bubble .ql-tooltip {
+  position: absolute;
+  transform: translateY(10px);
+}
+.ql-bubble .ql-tooltip a {
+  cursor: pointer;
+  text-decoration: none;
+}
+.ql-bubble .ql-tooltip.ql-flip {
+  transform: translateY(-10px);
+}
+.ql-bubble .ql-formats {
+  display: inline-block;
+  vertical-align: middle;
+}
+.ql-bubble .ql-formats:after {
+  clear: both;
+  content: '';
+  display: table;
+}
+.ql-bubble .ql-stroke {
+  fill: none;
+  stroke: #ccc;
+  stroke-linecap: round;
+  stroke-linejoin: round;
+  stroke-width: 2;
+}
+.ql-bubble .ql-stroke-miter {
+  fill: none;
+  stroke: #ccc;
+  stroke-miterlimit: 10;
+  stroke-width: 2;
+}
+.ql-bubble .ql-fill,
+.ql-bubble .ql-stroke.ql-fill {
+  fill: #ccc;
+}
+.ql-bubble .ql-empty {
+  fill: none;
+}
+.ql-bubble .ql-even {
+  fill-rule: evenodd;
+}
+.ql-bubble .ql-thin,
+.ql-bubble .ql-stroke.ql-thin {
+  stroke-width: 1;
+}
+.ql-bubble .ql-transparent {
+  opacity: 0.4;
+}
+.ql-bubble .ql-direction svg:last-child {
+  display: none;
+}
+.ql-bubble .ql-direction.ql-active svg:last-child {
+  display: inline;
+}
+.ql-bubble .ql-direction.ql-active svg:first-child {
+  display: none;
+}
+.ql-bubble .ql-editor h1 {
+  font-size: 2em;
+}
+.ql-bubble .ql-editor h2 {
+  font-size: 1.5em;
+}
+.ql-bubble .ql-editor h3 {
+  font-size: 1.17em;
+}
+.ql-bubble .ql-editor h4 {
+  font-size: 1em;
+}
+.ql-bubble .ql-editor h5 {
+  font-size: 0.83em;
+}
+.ql-bubble .ql-editor h6 {
+  font-size: 0.67em;
+}
+.ql-bubble .ql-editor a {
+  text-decoration: underline;
+}
+.ql-bubble .ql-editor blockquote {
+  border-left: 4px solid #ccc;
+  margin-bottom: 5px;
+  margin-top: 5px;
+  padding-left: 16px;
+}
+.ql-bubble .ql-editor code,
+.ql-bubble .ql-editor pre {
+  background-color: #f0f0f0;
+  border-radius: 3px;
+}
+.ql-bubble .ql-editor pre {
+  white-space: pre-wrap;
+  margin-bottom: 5px;
+  margin-top: 5px;
+  padding: 5px 10px;
+}
+.ql-bubble .ql-editor code {
+  font-size: 85%;
+  padding: 2px 4px;
+}
+.ql-bubble .ql-editor pre.ql-syntax {
+  background-color: #23241f;
+  color: #f8f8f2;
+  overflow: visible;
+}
+.ql-bubble .ql-editor img {
+  max-width: 100%;
+}
+.ql-bubble .ql-picker {
+  color: #ccc;
+  display: inline-block;
+  float: left;
+  font-size: 14px;
+  font-weight: 500;
+  height: 24px;
+  position: relative;
+  vertical-align: middle;
+}
+.ql-bubble .ql-picker-label {
+  cursor: pointer;
+  display: inline-block;
+  height: 100%;
+  padding-left: 8px;
+  padding-right: 2px;
+  position: relative;
+  width: 100%;
+}
+.ql-bubble .ql-picker-label::before {
+  display: inline-block;
+  line-height: 22px;
+}
+.ql-bubble .ql-picker-options {
+  background-color: #444;
+  display: none;
+  min-width: 100%;
+  padding: 4px 8px;
+  position: absolute;
+  white-space: nowrap;
+}
+.ql-bubble .ql-picker-options .ql-picker-item {
+  cursor: pointer;
+  display: block;
+  padding-bottom: 5px;
+  padding-top: 5px;
+}
+.ql-bubble .ql-picker.ql-expanded .ql-picker-label {
+  color: #777;
+  z-index: 2;
+}
+.ql-bubble .ql-picker.ql-expanded .ql-picker-label .ql-fill {
+  fill: #777;
+}
+.ql-bubble .ql-picker.ql-expanded .ql-picker-label .ql-stroke {
+  stroke: #777;
+}
+.ql-bubble .ql-picker.ql-expanded .ql-picker-options {
+  display: block;
+  margin-top: -1px;
+  top: 100%;
+  z-index: 1;
+}
+.ql-bubble .ql-color-picker,
+.ql-bubble .ql-icon-picker {
+  width: 28px;
+}
+.ql-bubble .ql-color-picker .ql-picker-label,
+.ql-bubble .ql-icon-picker .ql-picker-label {
+  padding: 2px 4px;
+}
+.ql-bubble .ql-color-picker .ql-picker-label svg,
+.ql-bubble .ql-icon-picker .ql-picker-label svg {
+  right: 4px;
+}
+.ql-bubble .ql-icon-picker .ql-picker-options {
+  padding: 4px 0px;
+}
+.ql-bubble .ql-icon-picker .ql-picker-item {
+  height: 24px;
+  width: 24px;
+  padding: 2px 4px;
+}
+.ql-bubble .ql-color-picker .ql-picker-options {
+  padding: 3px 5px;
+  width: 152px;
+}
+.ql-bubble .ql-color-picker .ql-picker-item {
+  border: 1px solid transparent;
+  float: left;
+  height: 16px;
+  margin: 2px;
+  padding: 0px;
+  width: 16px;
+}
+.ql-bubble .ql-picker:not(.ql-color-picker):not(.ql-icon-picker) svg {
+  position: absolute;
+  margin-top: -9px;
+  right: 0;
+  top: 50%;
+  width: 18px;
+}
+.ql-bubble .ql-picker.ql-header .ql-picker-label[data-label]:not([data-label=''])::before,
+.ql-bubble .ql-picker.ql-font .ql-picker-label[data-label]:not([data-label=''])::before,
+.ql-bubble .ql-picker.ql-size .ql-picker-label[data-label]:not([data-label=''])::before,
+.ql-bubble .ql-picker.ql-header .ql-picker-item[data-label]:not([data-label=''])::before,
+.ql-bubble .ql-picker.ql-font .ql-picker-item[data-label]:not([data-label=''])::before,
+.ql-bubble .ql-picker.ql-size .ql-picker-item[data-label]:not([data-label=''])::before {
+  content: attr(data-label);
+}
+.ql-bubble .ql-picker.ql-header {
+  width: 98px;
+}
+.ql-bubble .ql-picker.ql-header .ql-picker-label::before,
+.ql-bubble .ql-picker.ql-header .ql-picker-item::before {
+  content: 'Normal';
+}
+.ql-bubble .ql-picker.ql-header .ql-picker-label[data-value="1"]::before,
+.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value="1"]::before {
+  content: 'Heading 1';
+}
+.ql-bubble .ql-picker.ql-header .ql-picker-label[data-value="2"]::before,
+.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value="2"]::before {
+  content: 'Heading 2';
+}
+.ql-bubble .ql-picker.ql-header .ql-picker-label[data-value="3"]::before,
+.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value="3"]::before {
+  content: 'Heading 3';
+}
+.ql-bubble .ql-picker.ql-header .ql-picker-label[data-value="4"]::before,
+.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value="4"]::before {
+  content: 'Heading 4';
+}
+.ql-bubble .ql-picker.ql-header .ql-picker-label[data-value="5"]::before,
+.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value="5"]::before {
+  content: 'Heading 5';
+}
+.ql-bubble .ql-picker.ql-header .ql-picker-label[data-value="6"]::before,
+.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value="6"]::before {
+  content: 'Heading 6';
+}
+.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value="1"]::before {
+  font-size: 2em;
+}
+.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value="2"]::before {
+  font-size: 1.5em;
+}
+.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value="3"]::before {
+  font-size: 1.17em;
+}
+.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value="4"]::before {
+  font-size: 1em;
+}
+.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value="5"]::before {
+  font-size: 0.83em;
+}
+.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value="6"]::before {
+  font-size: 0.67em;
+}
+.ql-bubble .ql-picker.ql-font {
+  width: 108px;
+}
+.ql-bubble .ql-picker.ql-font .ql-picker-label::before,
+.ql-bubble .ql-picker.ql-font .ql-picker-item::before {
+  content: 'Sans Serif';
+}
+.ql-bubble .ql-picker.ql-font .ql-picker-label[data-value=serif]::before,
+.ql-bubble .ql-picker.ql-font .ql-picker-item[data-value=serif]::before {
+  content: 'Serif';
+}
+.ql-bubble .ql-picker.ql-font .ql-picker-label[data-value=monospace]::before,
+.ql-bubble .ql-picker.ql-font .ql-picker-item[data-value=monospace]::before {
+  content: 'Monospace';
+}
+.ql-bubble .ql-picker.ql-font .ql-picker-item[data-value=serif]::before {
+  font-family: Georgia, Times New Roman, serif;
+}
+.ql-bubble .ql-picker.ql-font .ql-picker-item[data-value=monospace]::before {
+  font-family: Monaco, Courier New, monospace;
+}
+.ql-bubble .ql-picker.ql-size {
+  width: 98px;
+}
+.ql-bubble .ql-picker.ql-size .ql-picker-label::before,
+.ql-bubble .ql-picker.ql-size .ql-picker-item::before {
+  content: 'Normal';
+}
+.ql-bubble .ql-picker.ql-size .ql-picker-label[data-value=small]::before,
+.ql-bubble .ql-picker.ql-size .ql-picker-item[data-value=small]::before {
+  content: 'Small';
+}
+.ql-bubble .ql-picker.ql-size .ql-picker-label[data-value=large]::before,
+.ql-bubble .ql-picker.ql-size .ql-picker-item[data-value=large]::before {
+  content: 'Large';
+}
+.ql-bubble .ql-picker.ql-size .ql-picker-label[data-value=huge]::before,
+.ql-bubble .ql-picker.ql-size .ql-picker-item[data-value=huge]::before {
+  content: 'Huge';
+}
+.ql-bubble .ql-picker.ql-size .ql-picker-item[data-value=small]::before {
+  font-size: 10px;
+}
+.ql-bubble .ql-picker.ql-size .ql-picker-item[data-value=large]::before {
+  font-size: 18px;
+}
+.ql-bubble .ql-picker.ql-size .ql-picker-item[data-value=huge]::before {
+  font-size: 32px;
+}
+.ql-bubble .ql-color-picker.ql-background .ql-picker-item {
+  background-color: #fff;
+}
+.ql-bubble .ql-color-picker.ql-color .ql-picker-item {
+  background-color: #000;
+}
+.ql-bubble .ql-toolbar .ql-formats {
+  margin: 8px 12px 8px 0px;
+}
+.ql-bubble .ql-toolbar .ql-formats:first-child {
+  margin-left: 12px;
+}
+.ql-bubble .ql-color-picker svg {
+  margin: 1px;
+}
+.ql-bubble .ql-color-picker .ql-picker-item.ql-selected,
+.ql-bubble .ql-color-picker .ql-picker-item:hover {
+  border-color: #fff;
+}
+.ql-bubble .ql-tooltip {
+  background-color: #444;
+  border-radius: 25px;
+  color: #fff;
+}
+.ql-bubble .ql-tooltip-arrow {
+  border-left: 6px solid transparent;
+  border-right: 6px solid transparent;
+  content: " ";
+  display: block;
+  left: 50%;
+  margin-left: -6px;
+  position: absolute;
+}
+.ql-bubble .ql-tooltip:not(.ql-flip) .ql-tooltip-arrow {
+  border-bottom: 6px solid #444;
+  top: -6px;
+}
+.ql-bubble .ql-tooltip.ql-flip .ql-tooltip-arrow {
+  border-top: 6px solid #444;
+  bottom: -6px;
+}
+.ql-bubble .ql-tooltip.ql-editing .ql-tooltip-editor {
+  display: block;
+}
+.ql-bubble .ql-tooltip.ql-editing .ql-formats {
+  visibility: hidden;
+}
+.ql-bubble .ql-tooltip-editor {
+  display: none;
+}
+.ql-bubble .ql-tooltip-editor input[type=text] {
+  background: transparent;
+  border: none;
+  color: #fff;
+  font-size: 13px;
+  height: 100%;
+  outline: none;
+  padding: 10px 20px;
+  position: absolute;
+  width: 100%;
+}
+.ql-bubble .ql-tooltip-editor a {
+  top: 10px;
+  position: absolute;
+  right: 20px;
+}
+.ql-bubble .ql-tooltip-editor a:before {
+  color: #ccc;
+  content: "\D7";
+  font-size: 16px;
+  font-weight: bold;
+}
+.ql-container.ql-bubble:not(.ql-disabled) a {
+  position: relative;
+  white-space: nowrap;
+}
+.ql-container.ql-bubble:not(.ql-disabled) a::before {
+  background-color: #444;
+  border-radius: 15px;
+  top: -5px;
+  font-size: 12px;
+  color: #fff;
+  content: attr(href);
+  font-weight: normal;
+  overflow: hidden;
+  padding: 5px 15px;
+  text-decoration: none;
+  z-index: 1;
+}
+.ql-container.ql-bubble:not(.ql-disabled) a::after {
+  border-top: 6px solid #444;
+  border-left: 6px solid transparent;
+  border-right: 6px solid transparent;
+  top: 0;
+  content: " ";
+  height: 0;
+  width: 0;
+}
+.ql-container.ql-bubble:not(.ql-disabled) a::before,
+.ql-container.ql-bubble:not(.ql-disabled) a::after {
+  left: 0;
+  margin-left: 50%;
+  position: absolute;
+  transform: translate(-50%, -100%);
+  transition: visibility 0s ease 200ms;
+  visibility: hidden;
+}
+.ql-container.ql-bubble:not(.ql-disabled) a:hover::before,
+.ql-container.ql-bubble:not(.ql-disabled) a:hover::after {
+  visibility: visible;
+}
diff --git a/htdocs/cgi-bin/wsrc/quill/quill.core.css b/htdocs/cgi-bin/wsrc/quill/quill.core.css
new file mode 100644 (file)
index 0000000..4217e4e
--- /dev/null
@@ -0,0 +1,397 @@
+/*!
+ * Quill Editor v1.3.6
+ * https://quilljs.com/
+ * Copyright (c) 2014, Jason Chen
+ * Copyright (c) 2013, salesforce.com
+ */
+.ql-container {
+  box-sizing: border-box;
+  font-family: Helvetica, Arial, sans-serif;
+  font-size: 13px;
+  height: 100%;
+  margin: 0px;
+  position: relative;
+}
+.ql-container.ql-disabled .ql-tooltip {
+  visibility: hidden;
+}
+.ql-container.ql-disabled .ql-editor ul[data-checked] > li::before {
+  pointer-events: none;
+}
+.ql-clipboard {
+  left: -100000px;
+  height: 1px;
+  overflow-y: hidden;
+  position: absolute;
+  top: 50%;
+}
+.ql-clipboard p {
+  margin: 0;
+  padding: 0;
+}
+.ql-editor {
+  box-sizing: border-box;
+  line-height: 1.42;
+  height: 100%;
+  outline: none;
+  overflow-y: auto;
+  padding: 12px 15px;
+  tab-size: 4;
+  -moz-tab-size: 4;
+  text-align: left;
+  white-space: pre-wrap;
+  word-wrap: break-word;
+}
+.ql-editor > * {
+  cursor: text;
+}
+.ql-editor p,
+.ql-editor ol,
+.ql-editor ul,
+.ql-editor pre,
+.ql-editor blockquote,
+.ql-editor h1,
+.ql-editor h2,
+.ql-editor h3,
+.ql-editor h4,
+.ql-editor h5,
+.ql-editor h6 {
+  margin: 0;
+  padding: 0;
+  counter-reset: list-1 list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9;
+}
+.ql-editor ol,
+.ql-editor ul {
+  padding-left: 1.5em;
+}
+.ql-editor ol > li,
+.ql-editor ul > li {
+  list-style-type: none;
+}
+.ql-editor ul > li::before {
+  content: '\2022';
+}
+.ql-editor ul[data-checked=true],
+.ql-editor ul[data-checked=false] {
+  pointer-events: none;
+}
+.ql-editor ul[data-checked=true] > li *,
+.ql-editor ul[data-checked=false] > li * {
+  pointer-events: all;
+}
+.ql-editor ul[data-checked=true] > li::before,
+.ql-editor ul[data-checked=false] > li::before {
+  color: #777;
+  cursor: pointer;
+  pointer-events: all;
+}
+.ql-editor ul[data-checked=true] > li::before {
+  content: '\2611';
+}
+.ql-editor ul[data-checked=false] > li::before {
+  content: '\2610';
+}
+.ql-editor li::before {
+  display: inline-block;
+  white-space: nowrap;
+  width: 1.2em;
+}
+.ql-editor li:not(.ql-direction-rtl)::before {
+  margin-left: -1.5em;
+  margin-right: 0.3em;
+  text-align: right;
+}
+.ql-editor li.ql-direction-rtl::before {
+  margin-left: 0.3em;
+  margin-right: -1.5em;
+}
+.ql-editor ol li:not(.ql-direction-rtl),
+.ql-editor ul li:not(.ql-direction-rtl) {
+  padding-left: 1.5em;
+}
+.ql-editor ol li.ql-direction-rtl,
+.ql-editor ul li.ql-direction-rtl {
+  padding-right: 1.5em;
+}
+.ql-editor ol li {
+  counter-reset: list-1 list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9;
+  counter-increment: list-0;
+}
+.ql-editor ol li:before {
+  content: counter(list-0, decimal) '. ';
+}
+.ql-editor ol li.ql-indent-1 {
+  counter-increment: list-1;
+}
+.ql-editor ol li.ql-indent-1:before {
+  content: counter(list-1, lower-alpha) '. ';
+}
+.ql-editor ol li.ql-indent-1 {
+  counter-reset: list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9;
+}
+.ql-editor ol li.ql-indent-2 {
+  counter-increment: list-2;
+}
+.ql-editor ol li.ql-indent-2:before {
+  content: counter(list-2, lower-roman) '. ';
+}
+.ql-editor ol li.ql-indent-2 {
+  counter-reset: list-3 list-4 list-5 list-6 list-7 list-8 list-9;
+}
+.ql-editor ol li.ql-indent-3 {
+  counter-increment: list-3;
+}
+.ql-editor ol li.ql-indent-3:before {
+  content: counter(list-3, decimal) '. ';
+}
+.ql-editor ol li.ql-indent-3 {
+  counter-reset: list-4 list-5 list-6 list-7 list-8 list-9;
+}
+.ql-editor ol li.ql-indent-4 {
+  counter-increment: list-4;
+}
+.ql-editor ol li.ql-indent-4:before {
+  content: counter(list-4, lower-alpha) '. ';
+}
+.ql-editor ol li.ql-indent-4 {
+  counter-reset: list-5 list-6 list-7 list-8 list-9;
+}
+.ql-editor ol li.ql-indent-5 {
+  counter-increment: list-5;
+}
+.ql-editor ol li.ql-indent-5:before {
+  content: counter(list-5, lower-roman) '. ';
+}
+.ql-editor ol li.ql-indent-5 {
+  counter-reset: list-6 list-7 list-8 list-9;
+}
+.ql-editor ol li.ql-indent-6 {
+  counter-increment: list-6;
+}
+.ql-editor ol li.ql-indent-6:before {
+  content: counter(list-6, decimal) '. ';
+}
+.ql-editor ol li.ql-indent-6 {
+  counter-reset: list-7 list-8 list-9;
+}
+.ql-editor ol li.ql-indent-7 {
+  counter-increment: list-7;
+}
+.ql-editor ol li.ql-indent-7:before {
+  content: counter(list-7, lower-alpha) '. ';
+}
+.ql-editor ol li.ql-indent-7 {
+  counter-reset: list-8 list-9;
+}
+.ql-editor ol li.ql-indent-8 {
+  counter-increment: list-8;
+}
+.ql-editor ol li.ql-indent-8:before {
+  content: counter(list-8, lower-roman) '. ';
+}
+.ql-editor ol li.ql-indent-8 {
+  counter-reset: list-9;
+}
+.ql-editor ol li.ql-indent-9 {
+  counter-increment: list-9;
+}
+.ql-editor ol li.ql-indent-9:before {
+  content: counter(list-9, decimal) '. ';
+}
+.ql-editor .ql-indent-1:not(.ql-direction-rtl) {
+  padding-left: 3em;
+}
+.ql-editor li.ql-indent-1:not(.ql-direction-rtl) {
+  padding-left: 4.5em;
+}
+.ql-editor .ql-indent-1.ql-direction-rtl.ql-align-right {
+  padding-right: 3em;
+}
+.ql-editor li.ql-indent-1.ql-direction-rtl.ql-align-right {
+  padding-right: 4.5em;
+}
+.ql-editor .ql-indent-2:not(.ql-direction-rtl) {
+  padding-left: 6em;
+}
+.ql-editor li.ql-indent-2:not(.ql-direction-rtl) {
+  padding-left: 7.5em;
+}
+.ql-editor .ql-indent-2.ql-direction-rtl.ql-align-right {
+  padding-right: 6em;
+}
+.ql-editor li.ql-indent-2.ql-direction-rtl.ql-align-right {
+  padding-right: 7.5em;
+}
+.ql-editor .ql-indent-3:not(.ql-direction-rtl) {
+  padding-left: 9em;
+}
+.ql-editor li.ql-indent-3:not(.ql-direction-rtl) {
+  padding-left: 10.5em;
+}
+.ql-editor .ql-indent-3.ql-direction-rtl.ql-align-right {
+  padding-right: 9em;
+}
+.ql-editor li.ql-indent-3.ql-direction-rtl.ql-align-right {
+  padding-right: 10.5em;
+}
+.ql-editor .ql-indent-4:not(.ql-direction-rtl) {
+  padding-left: 12em;
+}
+.ql-editor li.ql-indent-4:not(.ql-direction-rtl) {
+  padding-left: 13.5em;
+}
+.ql-editor .ql-indent-4.ql-direction-rtl.ql-align-right {
+  padding-right: 12em;
+}
+.ql-editor li.ql-indent-4.ql-direction-rtl.ql-align-right {
+  padding-right: 13.5em;
+}
+.ql-editor .ql-indent-5:not(.ql-direction-rtl) {
+  padding-left: 15em;
+}
+.ql-editor li.ql-indent-5:not(.ql-direction-rtl) {
+  padding-left: 16.5em;
+}
+.ql-editor .ql-indent-5.ql-direction-rtl.ql-align-right {
+  padding-right: 15em;
+}
+.ql-editor li.ql-indent-5.ql-direction-rtl.ql-align-right {
+  padding-right: 16.5em;
+}
+.ql-editor .ql-indent-6:not(.ql-direction-rtl) {
+  padding-left: 18em;
+}
+.ql-editor li.ql-indent-6:not(.ql-direction-rtl) {
+  padding-left: 19.5em;
+}
+.ql-editor .ql-indent-6.ql-direction-rtl.ql-align-right {
+  padding-right: 18em;
+}
+.ql-editor li.ql-indent-6.ql-direction-rtl.ql-align-right {
+  padding-right: 19.5em;
+}
+.ql-editor .ql-indent-7:not(.ql-direction-rtl) {
+  padding-left: 21em;
+}
+.ql-editor li.ql-indent-7:not(.ql-direction-rtl) {
+  padding-left: 22.5em;
+}
+.ql-editor .ql-indent-7.ql-direction-rtl.ql-align-right {
+  padding-right: 21em;
+}
+.ql-editor li.ql-indent-7.ql-direction-rtl.ql-align-right {
+  padding-right: 22.5em;
+}
+.ql-editor .ql-indent-8:not(.ql-direction-rtl) {
+  padding-left: 24em;
+}
+.ql-editor li.ql-indent-8:not(.ql-direction-rtl) {
+  padding-left: 25.5em;
+}
+.ql-editor .ql-indent-8.ql-direction-rtl.ql-align-right {
+  padding-right: 24em;
+}
+.ql-editor li.ql-indent-8.ql-direction-rtl.ql-align-right {
+  padding-right: 25.5em;
+}
+.ql-editor .ql-indent-9:not(.ql-direction-rtl) {
+  padding-left: 27em;
+}
+.ql-editor li.ql-indent-9:not(.ql-direction-rtl) {
+  padding-left: 28.5em;
+}
+.ql-editor .ql-indent-9.ql-direction-rtl.ql-align-right {
+  padding-right: 27em;
+}
+.ql-editor li.ql-indent-9.ql-direction-rtl.ql-align-right {
+  padding-right: 28.5em;
+}
+.ql-editor .ql-video {
+  display: block;
+  max-width: 100%;
+}
+.ql-editor .ql-video.ql-align-center {
+  margin: 0 auto;
+}
+.ql-editor .ql-video.ql-align-right {
+  margin: 0 0 0 auto;
+}
+.ql-editor .ql-bg-black {
+  background-color: #000;
+}
+.ql-editor .ql-bg-red {
+  background-color: #e60000;
+}
+.ql-editor .ql-bg-orange {
+  background-color: #f90;
+}
+.ql-editor .ql-bg-yellow {
+  background-color: #ff0;
+}
+.ql-editor .ql-bg-green {
+  background-color: #008a00;
+}
+.ql-editor .ql-bg-blue {
+  background-color: #06c;
+}
+.ql-editor .ql-bg-purple {
+  background-color: #93f;
+}
+.ql-editor .ql-color-white {
+  color: #fff;
+}
+.ql-editor .ql-color-red {
+  color: #e60000;
+}
+.ql-editor .ql-color-orange {
+  color: #f90;
+}
+.ql-editor .ql-color-yellow {
+  color: #ff0;
+}
+.ql-editor .ql-color-green {
+  color: #008a00;
+}
+.ql-editor .ql-color-blue {
+  color: #06c;
+}
+.ql-editor .ql-color-purple {
+  color: #93f;
+}
+.ql-editor .ql-font-serif {
+  font-family: Georgia, Times New Roman, serif;
+}
+.ql-editor .ql-font-monospace {
+  font-family: Monaco, Courier New, monospace;
+}
+.ql-editor .ql-size-small {
+  font-size: 0.75em;
+}
+.ql-editor .ql-size-large {
+  font-size: 1.5em;
+}
+.ql-editor .ql-size-huge {
+  font-size: 2.5em;
+}
+.ql-editor .ql-direction-rtl {
+  direction: rtl;
+  text-align: inherit;
+}
+.ql-editor .ql-align-center {
+  text-align: center;
+}
+.ql-editor .ql-align-justify {
+  text-align: justify;
+}
+.ql-editor .ql-align-right {
+  text-align: right;
+}
+.ql-editor.ql-blank::before {
+  color: rgba(0,0,0,0.6);
+  content: attr(data-placeholder);
+  font-style: italic;
+  left: 15px;
+  pointer-events: none;
+  position: absolute;
+  right: 15px;
+}
diff --git a/htdocs/cgi-bin/wsrc/quill/quill.core.js b/htdocs/cgi-bin/wsrc/quill/quill.core.js
new file mode 100644 (file)
index 0000000..a51d15c
--- /dev/null
@@ -0,0 +1,8522 @@
+/*!
+ * Quill Editor v1.3.6
+ * https://quilljs.com/
+ * Copyright (c) 2014, Jason Chen
+ * Copyright (c) 2013, salesforce.com
+ */
+(function webpackUniversalModuleDefinition(root, factory) {
+       if(typeof exports === 'object' && typeof module === 'object')
+               module.exports = factory();
+       else if(typeof define === 'function' && define.amd)
+               define([], factory);
+       else if(typeof exports === 'object')
+               exports["Quill"] = factory();
+       else
+               root["Quill"] = factory();
+})(typeof self !== 'undefined' ? self : this, function() {
+return /******/ (function(modules) { // webpackBootstrap
+/******/       // The module cache
+/******/       var installedModules = {};
+/******/
+/******/       // The require function
+/******/       function __webpack_require__(moduleId) {
+/******/
+/******/               // Check if module is in cache
+/******/               if(installedModules[moduleId]) {
+/******/                       return installedModules[moduleId].exports;
+/******/               }
+/******/               // Create a new module (and put it into the cache)
+/******/               var module = installedModules[moduleId] = {
+/******/                       i: moduleId,
+/******/                       l: false,
+/******/                       exports: {}
+/******/               };
+/******/
+/******/               // Execute the module function
+/******/               modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/               // Flag the module as loaded
+/******/               module.l = true;
+/******/
+/******/               // Return the exports of the module
+/******/               return module.exports;
+/******/       }
+/******/
+/******/
+/******/       // expose the modules object (__webpack_modules__)
+/******/       __webpack_require__.m = modules;
+/******/
+/******/       // expose the module cache
+/******/       __webpack_require__.c = installedModules;
+/******/
+/******/       // define getter function for harmony exports
+/******/       __webpack_require__.d = function(exports, name, getter) {
+/******/               if(!__webpack_require__.o(exports, name)) {
+/******/                       Object.defineProperty(exports, name, {
+/******/                               configurable: false,
+/******/                               enumerable: true,
+/******/                               get: getter
+/******/                       });
+/******/               }
+/******/       };
+/******/
+/******/       // getDefaultExport function for compatibility with non-harmony modules
+/******/       __webpack_require__.n = function(module) {
+/******/               var getter = module && module.__esModule ?
+/******/                       function getDefault() { return module['default']; } :
+/******/                       function getModuleExports() { return module; };
+/******/               __webpack_require__.d(getter, 'a', getter);
+/******/               return getter;
+/******/       };
+/******/
+/******/       // Object.prototype.hasOwnProperty.call
+/******/       __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/       // __webpack_public_path__
+/******/       __webpack_require__.p = "";
+/******/
+/******/       // Load entry module and return exports
+/******/       return __webpack_require__(__webpack_require__.s = 110);
+/******/ })
+/************************************************************************/
+/******/ ([
+/* 0 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", { value: true });
+var container_1 = __webpack_require__(17);
+var format_1 = __webpack_require__(18);
+var leaf_1 = __webpack_require__(19);
+var scroll_1 = __webpack_require__(45);
+var inline_1 = __webpack_require__(46);
+var block_1 = __webpack_require__(47);
+var embed_1 = __webpack_require__(48);
+var text_1 = __webpack_require__(49);
+var attributor_1 = __webpack_require__(12);
+var class_1 = __webpack_require__(32);
+var style_1 = __webpack_require__(33);
+var store_1 = __webpack_require__(31);
+var Registry = __webpack_require__(1);
+var Parchment = {
+    Scope: Registry.Scope,
+    create: Registry.create,
+    find: Registry.find,
+    query: Registry.query,
+    register: Registry.register,
+    Container: container_1.default,
+    Format: format_1.default,
+    Leaf: leaf_1.default,
+    Embed: embed_1.default,
+    Scroll: scroll_1.default,
+    Block: block_1.default,
+    Inline: inline_1.default,
+    Text: text_1.default,
+    Attributor: {
+        Attribute: attributor_1.default,
+        Class: class_1.default,
+        Style: style_1.default,
+        Store: store_1.default,
+    },
+};
+exports.default = Parchment;
+
+
+/***/ }),
+/* 1 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+var __extends = (this && this.__extends) || (function () {
+    var extendStatics = Object.setPrototypeOf ||
+        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
+        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
+    return function (d, b) {
+        extendStatics(d, b);
+        function __() { this.constructor = d; }
+        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+    };
+})();
+Object.defineProperty(exports, "__esModule", { value: true });
+var ParchmentError = /** @class */ (function (_super) {
+    __extends(ParchmentError, _super);
+    function ParchmentError(message) {
+        var _this = this;
+        message = '[Parchment] ' + message;
+        _this = _super.call(this, message) || this;
+        _this.message = message;
+        _this.name = _this.constructor.name;
+        return _this;
+    }
+    return ParchmentError;
+}(Error));
+exports.ParchmentError = ParchmentError;
+var attributes = {};
+var classes = {};
+var tags = {};
+var types = {};
+exports.DATA_KEY = '__blot';
+var Scope;
+(function (Scope) {
+    Scope[Scope["TYPE"] = 3] = "TYPE";
+    Scope[Scope["LEVEL"] = 12] = "LEVEL";
+    Scope[Scope["ATTRIBUTE"] = 13] = "ATTRIBUTE";
+    Scope[Scope["BLOT"] = 14] = "BLOT";
+    Scope[Scope["INLINE"] = 7] = "INLINE";
+    Scope[Scope["BLOCK"] = 11] = "BLOCK";
+    Scope[Scope["BLOCK_BLOT"] = 10] = "BLOCK_BLOT";
+    Scope[Scope["INLINE_BLOT"] = 6] = "INLINE_BLOT";
+    Scope[Scope["BLOCK_ATTRIBUTE"] = 9] = "BLOCK_ATTRIBUTE";
+    Scope[Scope["INLINE_ATTRIBUTE"] = 5] = "INLINE_ATTRIBUTE";
+    Scope[Scope["ANY"] = 15] = "ANY";
+})(Scope = exports.Scope || (exports.Scope = {}));
+function create(input, value) {
+    var match = query(input);
+    if (match == null) {
+        throw new ParchmentError("Unable to create " + input + " blot");
+    }
+    var BlotClass = match;
+    var node = 
+    // @ts-ignore
+    input instanceof Node || input['nodeType'] === Node.TEXT_NODE ? input : BlotClass.create(value);
+    return new BlotClass(node, value);
+}
+exports.create = create;
+function find(node, bubble) {
+    if (bubble === void 0) { bubble = false; }
+    if (node == null)
+        return null;
+    // @ts-ignore
+    if (node[exports.DATA_KEY] != null)
+        return node[exports.DATA_KEY].blot;
+    if (bubble)
+        return find(node.parentNode, bubble);
+    return null;
+}
+exports.find = find;
+function query(query, scope) {
+    if (scope === void 0) { scope = Scope.ANY; }
+    var match;
+    if (typeof query === 'string') {
+        match = types[query] || attributes[query];
+        // @ts-ignore
+    }
+    else if (query instanceof Text || query['nodeType'] === Node.TEXT_NODE) {
+        match = types['text'];
+    }
+    else if (typeof query === 'number') {
+        if (query & Scope.LEVEL & Scope.BLOCK) {
+            match = types['block'];
+        }
+        else if (query & Scope.LEVEL & Scope.INLINE) {
+            match = types['inline'];
+        }
+    }
+    else if (query instanceof HTMLElement) {
+        var names = (query.getAttribute('class') || '').split(/\s+/);
+        for (var i in names) {
+            match = classes[names[i]];
+            if (match)
+                break;
+        }
+        match = match || tags[query.tagName];
+    }
+    if (match == null)
+        return null;
+    // @ts-ignore
+    if (scope & Scope.LEVEL & match.scope && scope & Scope.TYPE & match.scope)
+        return match;
+    return null;
+}
+exports.query = query;
+function register() {
+    var Definitions = [];
+    for (var _i = 0; _i < arguments.length; _i++) {
+        Definitions[_i] = arguments[_i];
+    }
+    if (Definitions.length > 1) {
+        return Definitions.map(function (d) {
+            return register(d);
+        });
+    }
+    var Definition = Definitions[0];
+    if (typeof Definition.blotName !== 'string' && typeof Definition.attrName !== 'string') {
+        throw new ParchmentError('Invalid definition');
+    }
+    else if (Definition.blotName === 'abstract') {
+        throw new ParchmentError('Cannot register abstract class');
+    }
+    types[Definition.blotName || Definition.attrName] = Definition;
+    if (typeof Definition.keyName === 'string') {
+        attributes[Definition.keyName] = Definition;
+    }
+    else {
+        if (Definition.className != null) {
+            classes[Definition.className] = Definition;
+        }
+        if (Definition.tagName != null) {
+            if (Array.isArray(Definition.tagName)) {
+                Definition.tagName = Definition.tagName.map(function (tagName) {
+                    return tagName.toUpperCase();
+                });
+            }
+            else {
+                Definition.tagName = Definition.tagName.toUpperCase();
+            }
+            var tagNames = Array.isArray(Definition.tagName) ? Definition.tagName : [Definition.tagName];
+            tagNames.forEach(function (tag) {
+                if (tags[tag] == null || Definition.className == null) {
+                    tags[tag] = Definition;
+                }
+            });
+        }
+    }
+    return Definition;
+}
+exports.register = register;
+
+
+/***/ }),
+/* 2 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var diff = __webpack_require__(51);
+var equal = __webpack_require__(11);
+var extend = __webpack_require__(3);
+var op = __webpack_require__(20);
+
+
+var NULL_CHARACTER = String.fromCharCode(0);  // Placeholder char for embed in diff()
+
+
+var Delta = function (ops) {
+  // Assume we are given a well formed ops
+  if (Array.isArray(ops)) {
+    this.ops = ops;
+  } else if (ops != null && Array.isArray(ops.ops)) {
+    this.ops = ops.ops;
+  } else {
+    this.ops = [];
+  }
+};
+
+
+Delta.prototype.insert = function (text, attributes) {
+  var newOp = {};
+  if (text.length === 0) return this;
+  newOp.insert = text;
+  if (attributes != null && typeof attributes === 'object' && Object.keys(attributes).length > 0) {
+    newOp.attributes = attributes;
+  }
+  return this.push(newOp);
+};
+
+Delta.prototype['delete'] = function (length) {
+  if (length <= 0) return this;
+  return this.push({ 'delete': length });
+};
+
+Delta.prototype.retain = function (length, attributes) {
+  if (length <= 0) return this;
+  var newOp = { retain: length };
+  if (attributes != null && typeof attributes === 'object' && Object.keys(attributes).length > 0) {
+    newOp.attributes = attributes;
+  }
+  return this.push(newOp);
+};
+
+Delta.prototype.push = function (newOp) {
+  var index = this.ops.length;
+  var lastOp = this.ops[index - 1];
+  newOp = extend(true, {}, newOp);
+  if (typeof lastOp === 'object') {
+    if (typeof newOp['delete'] === 'number' && typeof lastOp['delete'] === 'number') {
+      this.ops[index - 1] = { 'delete': lastOp['delete'] + newOp['delete'] };
+      return this;
+    }
+    // Since it does not matter if we insert before or after deleting at the same index,
+    // always prefer to insert first
+    if (typeof lastOp['delete'] === 'number' && newOp.insert != null) {
+      index -= 1;
+      lastOp = this.ops[index - 1];
+      if (typeof lastOp !== 'object') {
+        this.ops.unshift(newOp);
+        return this;
+      }
+    }
+    if (equal(newOp.attributes, lastOp.attributes)) {
+      if (typeof newOp.insert === 'string' && typeof lastOp.insert === 'string') {
+        this.ops[index - 1] = { insert: lastOp.insert + newOp.insert };
+        if (typeof newOp.attributes === 'object') this.ops[index - 1].attributes = newOp.attributes
+        return this;
+      } else if (typeof newOp.retain === 'number' && typeof lastOp.retain === 'number') {
+        this.ops[index - 1] = { retain: lastOp.retain + newOp.retain };
+        if (typeof newOp.attributes === 'object') this.ops[index - 1].attributes = newOp.attributes
+        return this;
+      }
+    }
+  }
+  if (index === this.ops.length) {
+    this.ops.push(newOp);
+  } else {
+    this.ops.splice(index, 0, newOp);
+  }
+  return this;
+};
+
+Delta.prototype.chop = function () {
+  var lastOp = this.ops[this.ops.length - 1];
+  if (lastOp && lastOp.retain && !lastOp.attributes) {
+    this.ops.pop();
+  }
+  return this;
+};
+
+Delta.prototype.filter = function (predicate) {
+  return this.ops.filter(predicate);
+};
+
+Delta.prototype.forEach = function (predicate) {
+  this.ops.forEach(predicate);
+};
+
+Delta.prototype.map = function (predicate) {
+  return this.ops.map(predicate);
+};
+
+Delta.prototype.partition = function (predicate) {
+  var passed = [], failed = [];
+  this.forEach(function(op) {
+    var target = predicate(op) ? passed : failed;
+    target.push(op);
+  });
+  return [passed, failed];
+};
+
+Delta.prototype.reduce = function (predicate, initial) {
+  return this.ops.reduce(predicate, initial);
+};
+
+Delta.prototype.changeLength = function () {
+  return this.reduce(function (length, elem) {
+    if (elem.insert) {
+      return length + op.length(elem);
+    } else if (elem.delete) {
+      return length - elem.delete;
+    }
+    return length;
+  }, 0);
+};
+
+Delta.prototype.length = function () {
+  return this.reduce(function (length, elem) {
+    return length + op.length(elem);
+  }, 0);
+};
+
+Delta.prototype.slice = function (start, end) {
+  start = start || 0;
+  if (typeof end !== 'number') end = Infinity;
+  var ops = [];
+  var iter = op.iterator(this.ops);
+  var index = 0;
+  while (index < end && iter.hasNext()) {
+    var nextOp;
+    if (index < start) {
+      nextOp = iter.next(start - index);
+    } else {
+      nextOp = iter.next(end - index);
+      ops.push(nextOp);
+    }
+    index += op.length(nextOp);
+  }
+  return new Delta(ops);
+};
+
+
+Delta.prototype.compose = function (other) {
+  var thisIter = op.iterator(this.ops);
+  var otherIter = op.iterator(other.ops);
+  var delta = new Delta();
+  while (thisIter.hasNext() || otherIter.hasNext()) {
+    if (otherIter.peekType() === 'insert') {
+      delta.push(otherIter.next());
+    } else if (thisIter.peekType() === 'delete') {
+      delta.push(thisIter.next());
+    } else {
+      var length = Math.min(thisIter.peekLength(), otherIter.peekLength());
+      var thisOp = thisIter.next(length);
+      var otherOp = otherIter.next(length);
+      if (typeof otherOp.retain === 'number') {
+        var newOp = {};
+        if (typeof thisOp.retain === 'number') {
+          newOp.retain = length;
+        } else {
+          newOp.insert = thisOp.insert;
+        }
+        // Preserve null when composing with a retain, otherwise remove it for inserts
+        var attributes = op.attributes.compose(thisOp.attributes, otherOp.attributes, typeof thisOp.retain === 'number');
+        if (attributes) newOp.attributes = attributes;
+        delta.push(newOp);
+      // Other op should be delete, we could be an insert or retain
+      // Insert + delete cancels out
+      } else if (typeof otherOp['delete'] === 'number' && typeof thisOp.retain === 'number') {
+        delta.push(otherOp);
+      }
+    }
+  }
+  return delta.chop();
+};
+
+Delta.prototype.concat = function (other) {
+  var delta = new Delta(this.ops.slice());
+  if (other.ops.length > 0) {
+    delta.push(other.ops[0]);
+    delta.ops = delta.ops.concat(other.ops.slice(1));
+  }
+  return delta;
+};
+
+Delta.prototype.diff = function (other, index) {
+  if (this.ops === other.ops) {
+    return new Delta();
+  }
+  var strings = [this, other].map(function (delta) {
+    return delta.map(function (op) {
+      if (op.insert != null) {
+        return typeof op.insert === 'string' ? op.insert : NULL_CHARACTER;
+      }
+      var prep = (delta === other) ? 'on' : 'with';
+      throw new Error('diff() called ' + prep + ' non-document');
+    }).join('');
+  });
+  var delta = new Delta();
+  var diffResult = diff(strings[0], strings[1], index);
+  var thisIter = op.iterator(this.ops);
+  var otherIter = op.iterator(other.ops);
+  diffResult.forEach(function (component) {
+    var length = component[1].length;
+    while (length > 0) {
+      var opLength = 0;
+      switch (component[0]) {
+        case diff.INSERT:
+          opLength = Math.min(otherIter.peekLength(), length);
+          delta.push(otherIter.next(opLength));
+          break;
+        case diff.DELETE:
+          opLength = Math.min(length, thisIter.peekLength());
+          thisIter.next(opLength);
+          delta['delete'](opLength);
+          break;
+        case diff.EQUAL:
+          opLength = Math.min(thisIter.peekLength(), otherIter.peekLength(), length);
+          var thisOp = thisIter.next(opLength);
+          var otherOp = otherIter.next(opLength);
+          if (equal(thisOp.insert, otherOp.insert)) {
+            delta.retain(opLength, op.attributes.diff(thisOp.attributes, otherOp.attributes));
+          } else {
+            delta.push(otherOp)['delete'](opLength);
+          }
+          break;
+      }
+      length -= opLength;
+    }
+  });
+  return delta.chop();
+};
+
+Delta.prototype.eachLine = function (predicate, newline) {
+  newline = newline || '\n';
+  var iter = op.iterator(this.ops);
+  var line = new Delta();
+  var i = 0;
+  while (iter.hasNext()) {
+    if (iter.peekType() !== 'insert') return;
+    var thisOp = iter.peek();
+    var start = op.length(thisOp) - iter.peekLength();
+    var index = typeof thisOp.insert === 'string' ?
+      thisOp.insert.indexOf(newline, start) - start : -1;
+    if (index < 0) {
+      line.push(iter.next());
+    } else if (index > 0) {
+      line.push(iter.next(index));
+    } else {
+      if (predicate(line, iter.next(1).attributes || {}, i) === false) {
+        return;
+      }
+      i += 1;
+      line = new Delta();
+    }
+  }
+  if (line.length() > 0) {
+    predicate(line, {}, i);
+  }
+};
+
+Delta.prototype.transform = function (other, priority) {
+  priority = !!priority;
+  if (typeof other === 'number') {
+    return this.transformPosition(other, priority);
+  }
+  var thisIter = op.iterator(this.ops);
+  var otherIter = op.iterator(other.ops);
+  var delta = new Delta();
+  while (thisIter.hasNext() || otherIter.hasNext()) {
+    if (thisIter.peekType() === 'insert' && (priority || otherIter.peekType() !== 'insert')) {
+      delta.retain(op.length(thisIter.next()));
+    } else if (otherIter.peekType() === 'insert') {
+      delta.push(otherIter.next());
+    } else {
+      var length = Math.min(thisIter.peekLength(), otherIter.peekLength());
+      var thisOp = thisIter.next(length);
+      var otherOp = otherIter.next(length);
+      if (thisOp['delete']) {
+        // Our delete either makes their delete redundant or removes their retain
+        continue;
+      } else if (otherOp['delete']) {
+        delta.push(otherOp);
+      } else {
+        // We retain either their retain or insert
+        delta.retain(length, op.attributes.transform(thisOp.attributes, otherOp.attributes, priority));
+      }
+    }
+  }
+  return delta.chop();
+};
+
+Delta.prototype.transformPosition = function (index, priority) {
+  priority = !!priority;
+  var thisIter = op.iterator(this.ops);
+  var offset = 0;
+  while (thisIter.hasNext() && offset <= index) {
+    var length = thisIter.peekLength();
+    var nextType = thisIter.peekType();
+    thisIter.next();
+    if (nextType === 'delete') {
+      index -= Math.min(length, index - offset);
+      continue;
+    } else if (nextType === 'insert' && (offset < index || !priority)) {
+      index += length;
+    }
+    offset += length;
+  }
+  return index;
+};
+
+
+module.exports = Delta;
+
+
+/***/ }),
+/* 3 */
+/***/ (function(module, exports) {
+
+'use strict';
+
+var hasOwn = Object.prototype.hasOwnProperty;
+var toStr = Object.prototype.toString;
+
+var isArray = function isArray(arr) {
+       if (typeof Array.isArray === 'function') {
+               return Array.isArray(arr);
+       }
+
+       return toStr.call(arr) === '[object Array]';
+};
+
+var isPlainObject = function isPlainObject(obj) {
+       if (!obj || toStr.call(obj) !== '[object Object]') {
+               return false;
+       }
+
+       var hasOwnConstructor = hasOwn.call(obj, 'constructor');
+       var hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf');
+       // Not own constructor property must be Object
+       if (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {
+               return false;
+       }
+
+       // Own properties are enumerated firstly, so to speed up,
+       // if last one is own, then all properties are own.
+       var key;
+       for (key in obj) { /**/ }
+
+       return typeof key === 'undefined' || hasOwn.call(obj, key);
+};
+
+module.exports = function extend() {
+       var options, name, src, copy, copyIsArray, clone;
+       var target = arguments[0];
+       var i = 1;
+       var length = arguments.length;
+       var deep = false;
+
+       // Handle a deep copy situation
+       if (typeof target === 'boolean') {
+               deep = target;
+               target = arguments[1] || {};
+               // skip the boolean and the target
+               i = 2;
+       }
+       if (target == null || (typeof target !== 'object' && typeof target !== 'function')) {
+               target = {};
+       }
+
+       for (; i < length; ++i) {
+               options = arguments[i];
+               // Only deal with non-null/undefined values
+               if (options != null) {
+                       // Extend the base object
+                       for (name in options) {
+                               src = target[name];
+                               copy = options[name];
+
+                               // Prevent never-ending loop
+                               if (target !== copy) {
+                                       // Recurse if we're merging plain objects or arrays
+                                       if (deep && copy && (isPlainObject(copy) || (copyIsArray = isArray(copy)))) {
+                                               if (copyIsArray) {
+                                                       copyIsArray = false;
+                                                       clone = src && isArray(src) ? src : [];
+                                               } else {
+                                                       clone = src && isPlainObject(src) ? src : {};
+                                               }
+
+                                               // Never move original objects, clone them
+                                               target[name] = extend(deep, clone, copy);
+
+                                       // Don't bring in undefined values
+                                       } else if (typeof copy !== 'undefined') {
+                                               target[name] = copy;
+                                       }
+                               }
+                       }
+               }
+       }
+
+       // Return the modified object
+       return target;
+};
+
+
+/***/ }),
+/* 4 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = exports.BlockEmbed = exports.bubbleFormats = undefined;
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };
+
+var _extend = __webpack_require__(3);
+
+var _extend2 = _interopRequireDefault(_extend);
+
+var _quillDelta = __webpack_require__(2);
+
+var _quillDelta2 = _interopRequireDefault(_quillDelta);
+
+var _parchment = __webpack_require__(0);
+
+var _parchment2 = _interopRequireDefault(_parchment);
+
+var _break = __webpack_require__(16);
+
+var _break2 = _interopRequireDefault(_break);
+
+var _inline = __webpack_require__(6);
+
+var _inline2 = _interopRequireDefault(_inline);
+
+var _text = __webpack_require__(7);
+
+var _text2 = _interopRequireDefault(_text);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+var NEWLINE_LENGTH = 1;
+
+var BlockEmbed = function (_Parchment$Embed) {
+  _inherits(BlockEmbed, _Parchment$Embed);
+
+  function BlockEmbed() {
+    _classCallCheck(this, BlockEmbed);
+
+    return _possibleConstructorReturn(this, (BlockEmbed.__proto__ || Object.getPrototypeOf(BlockEmbed)).apply(this, arguments));
+  }
+
+  _createClass(BlockEmbed, [{
+    key: 'attach',
+    value: function attach() {
+      _get(BlockEmbed.prototype.__proto__ || Object.getPrototypeOf(BlockEmbed.prototype), 'attach', this).call(this);
+      this.attributes = new _parchment2.default.Attributor.Store(this.domNode);
+    }
+  }, {
+    key: 'delta',
+    value: function delta() {
+      return new _quillDelta2.default().insert(this.value(), (0, _extend2.default)(this.formats(), this.attributes.values()));
+    }
+  }, {
+    key: 'format',
+    value: function format(name, value) {
+      var attribute = _parchment2.default.query(name, _parchment2.default.Scope.BLOCK_ATTRIBUTE);
+      if (attribute != null) {
+        this.attributes.attribute(attribute, value);
+      }
+    }
+  }, {
+    key: 'formatAt',
+    value: function formatAt(index, length, name, value) {
+      this.format(name, value);
+    }
+  }, {
+    key: 'insertAt',
+    value: function insertAt(index, value, def) {
+      if (typeof value === 'string' && value.endsWith('\n')) {
+        var block = _parchment2.default.create(Block.blotName);
+        this.parent.insertBefore(block, index === 0 ? this : this.next);
+        block.insertAt(0, value.slice(0, -1));
+      } else {
+        _get(BlockEmbed.prototype.__proto__ || Object.getPrototypeOf(BlockEmbed.prototype), 'insertAt', this).call(this, index, value, def);
+      }
+    }
+  }]);
+
+  return BlockEmbed;
+}(_parchment2.default.Embed);
+
+BlockEmbed.scope = _parchment2.default.Scope.BLOCK_BLOT;
+// It is important for cursor behavior BlockEmbeds use tags that are block level elements
+
+
+var Block = function (_Parchment$Block) {
+  _inherits(Block, _Parchment$Block);
+
+  function Block(domNode) {
+    _classCallCheck(this, Block);
+
+    var _this2 = _possibleConstructorReturn(this, (Block.__proto__ || Object.getPrototypeOf(Block)).call(this, domNode));
+
+    _this2.cache = {};
+    return _this2;
+  }
+
+  _createClass(Block, [{
+    key: 'delta',
+    value: function delta() {
+      if (this.cache.delta == null) {
+        this.cache.delta = this.descendants(_parchment2.default.Leaf).reduce(function (delta, leaf) {
+          if (leaf.length() === 0) {
+            return delta;
+          } else {
+            return delta.insert(leaf.value(), bubbleFormats(leaf));
+          }
+        }, new _quillDelta2.default()).insert('\n', bubbleFormats(this));
+      }
+      return this.cache.delta;
+    }
+  }, {
+    key: 'deleteAt',
+    value: function deleteAt(index, length) {
+      _get(Block.prototype.__proto__ || Object.getPrototypeOf(Block.prototype), 'deleteAt', this).call(this, index, length);
+      this.cache = {};
+    }
+  }, {
+    key: 'formatAt',
+    value: function formatAt(index, length, name, value) {
+      if (length <= 0) return;
+      if (_parchment2.default.query(name, _parchment2.default.Scope.BLOCK)) {
+        if (index + length === this.length()) {
+          this.format(name, value);
+        }
+      } else {
+        _get(Block.prototype.__proto__ || Object.getPrototypeOf(Block.prototype), 'formatAt', this).call(this, index, Math.min(length, this.length() - index - 1), name, value);
+      }
+      this.cache = {};
+    }
+  }, {
+    key: 'insertAt',
+    value: function insertAt(index, value, def) {
+      if (def != null) return _get(Block.prototype.__proto__ || Object.getPrototypeOf(Block.prototype), 'insertAt', this).call(this, index, value, def);
+      if (value.length === 0) return;
+      var lines = value.split('\n');
+      var text = lines.shift();
+      if (text.length > 0) {
+        if (index < this.length() - 1 || this.children.tail == null) {
+          _get(Block.prototype.__proto__ || Object.getPrototypeOf(Block.prototype), 'insertAt', this).call(this, Math.min(index, this.length() - 1), text);
+        } else {
+          this.children.tail.insertAt(this.children.tail.length(), text);
+        }
+        this.cache = {};
+      }
+      var block = this;
+      lines.reduce(function (index, line) {
+        block = block.split(index, true);
+        block.insertAt(0, line);
+        return line.length;
+      }, index + text.length);
+    }
+  }, {
+    key: 'insertBefore',
+    value: function insertBefore(blot, ref) {
+      var head = this.children.head;
+      _get(Block.prototype.__proto__ || Object.getPrototypeOf(Block.prototype), 'insertBefore', this).call(this, blot, ref);
+      if (head instanceof _break2.default) {
+        head.remove();
+      }
+      this.cache = {};
+    }
+  }, {
+    key: 'length',
+    value: function length() {
+      if (this.cache.length == null) {
+        this.cache.length = _get(Block.prototype.__proto__ || Object.getPrototypeOf(Block.prototype), 'length', this).call(this) + NEWLINE_LENGTH;
+      }
+      return this.cache.length;
+    }
+  }, {
+    key: 'moveChildren',
+    value: function moveChildren(target, ref) {
+      _get(Block.prototype.__proto__ || Object.getPrototypeOf(Block.prototype), 'moveChildren', this).call(this, target, ref);
+      this.cache = {};
+    }
+  }, {
+    key: 'optimize',
+    value: function optimize(context) {
+      _get(Block.prototype.__proto__ || Object.getPrototypeOf(Block.prototype), 'optimize', this).call(this, context);
+      this.cache = {};
+    }
+  }, {
+    key: 'path',
+    value: function path(index) {
+      return _get(Block.prototype.__proto__ || Object.getPrototypeOf(Block.prototype), 'path', this).call(this, index, true);
+    }
+  }, {
+    key: 'removeChild',
+    value: function removeChild(child) {
+      _get(Block.prototype.__proto__ || Object.getPrototypeOf(Block.prototype), 'removeChild', this).call(this, child);
+      this.cache = {};
+    }
+  }, {
+    key: 'split',
+    value: function split(index) {
+      var force = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
+
+      if (force && (index === 0 || index >= this.length() - NEWLINE_LENGTH)) {
+        var clone = this.clone();
+        if (index === 0) {
+          this.parent.insertBefore(clone, this);
+          return this;
+        } else {
+          this.parent.insertBefore(clone, this.next);
+          return clone;
+        }
+      } else {
+        var next = _get(Block.prototype.__proto__ || Object.getPrototypeOf(Block.prototype), 'split', this).call(this, index, force);
+        this.cache = {};
+        return next;
+      }
+    }
+  }]);
+
+  return Block;
+}(_parchment2.default.Block);
+
+Block.blotName = 'block';
+Block.tagName = 'P';
+Block.defaultChild = 'break';
+Block.allowedChildren = [_inline2.default, _parchment2.default.Embed, _text2.default];
+
+function bubbleFormats(blot) {
+  var formats = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
+
+  if (blot == null) return formats;
+  if (typeof blot.formats === 'function') {
+    formats = (0, _extend2.default)(formats, blot.formats());
+  }
+  if (blot.parent == null || blot.parent.blotName == 'scroll' || blot.parent.statics.scope !== blot.statics.scope) {
+    return formats;
+  }
+  return bubbleFormats(blot.parent, formats);
+}
+
+exports.bubbleFormats = bubbleFormats;
+exports.BlockEmbed = BlockEmbed;
+exports.default = Block;
+
+/***/ }),
+/* 5 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = exports.overload = exports.expandConfig = undefined;
+
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
+
+var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+__webpack_require__(50);
+
+var _quillDelta = __webpack_require__(2);
+
+var _quillDelta2 = _interopRequireDefault(_quillDelta);
+
+var _editor = __webpack_require__(14);
+
+var _editor2 = _interopRequireDefault(_editor);
+
+var _emitter3 = __webpack_require__(8);
+
+var _emitter4 = _interopRequireDefault(_emitter3);
+
+var _module = __webpack_require__(9);
+
+var _module2 = _interopRequireDefault(_module);
+
+var _parchment = __webpack_require__(0);
+
+var _parchment2 = _interopRequireDefault(_parchment);
+
+var _selection = __webpack_require__(15);
+
+var _selection2 = _interopRequireDefault(_selection);
+
+var _extend = __webpack_require__(3);
+
+var _extend2 = _interopRequireDefault(_extend);
+
+var _logger = __webpack_require__(10);
+
+var _logger2 = _interopRequireDefault(_logger);
+
+var _theme = __webpack_require__(34);
+
+var _theme2 = _interopRequireDefault(_theme);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+var debug = (0, _logger2.default)('quill');
+
+var Quill = function () {
+  _createClass(Quill, null, [{
+    key: 'debug',
+    value: function debug(limit) {
+      if (limit === true) {
+        limit = 'log';
+      }
+      _logger2.default.level(limit);
+    }
+  }, {
+    key: 'find',
+    value: function find(node) {
+      return node.__quill || _parchment2.default.find(node);
+    }
+  }, {
+    key: 'import',
+    value: function _import(name) {
+      if (this.imports[name] == null) {
+        debug.error('Cannot import ' + name + '. Are you sure it was registered?');
+      }
+      return this.imports[name];
+    }
+  }, {
+    key: 'register',
+    value: function register(path, target) {
+      var _this = this;
+
+      var overwrite = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
+
+      if (typeof path !== 'string') {
+        var name = path.attrName || path.blotName;
+        if (typeof name === 'string') {
+          // register(Blot | Attributor, overwrite)
+          this.register('formats/' + name, path, target);
+        } else {
+          Object.keys(path).forEach(function (key) {
+            _this.register(key, path[key], target);
+          });
+        }
+      } else {
+        if (this.imports[path] != null && !overwrite) {
+          debug.warn('Overwriting ' + path + ' with', target);
+        }
+        this.imports[path] = target;
+        if ((path.startsWith('blots/') || path.startsWith('formats/')) && target.blotName !== 'abstract') {
+          _parchment2.default.register(target);
+        } else if (path.startsWith('modules') && typeof target.register === 'function') {
+          target.register();
+        }
+      }
+    }
+  }]);
+
+  function Quill(container) {
+    var _this2 = this;
+
+    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
+
+    _classCallCheck(this, Quill);
+
+    this.options = expandConfig(container, options);
+    this.container = this.options.container;
+    if (this.container == null) {
+      return debug.error('Invalid Quill container', container);
+    }
+    if (this.options.debug) {
+      Quill.debug(this.options.debug);
+    }
+    var html = this.container.innerHTML.trim();
+    this.container.classList.add('ql-container');
+    this.container.innerHTML = '';
+    this.container.__quill = this;
+    this.root = this.addContainer('ql-editor');
+    this.root.classList.add('ql-blank');
+    this.root.setAttribute('data-gramm', false);
+    this.scrollingContainer = this.options.scrollingContainer || this.root;
+    this.emitter = new _emitter4.default();
+    this.scroll = _parchment2.default.create(this.root, {
+      emitter: this.emitter,
+      whitelist: this.options.formats
+    });
+    this.editor = new _editor2.default(this.scroll);
+    this.selection = new _selection2.default(this.scroll, this.emitter);
+    this.theme = new this.options.theme(this, this.options);
+    this.keyboard = this.theme.addModule('keyboard');
+    this.clipboard = this.theme.addModule('clipboard');
+    this.history = this.theme.addModule('history');
+    this.theme.init();
+    this.emitter.on(_emitter4.default.events.EDITOR_CHANGE, function (type) {
+      if (type === _emitter4.default.events.TEXT_CHANGE) {
+        _this2.root.classList.toggle('ql-blank', _this2.editor.isBlank());
+      }
+    });
+    this.emitter.on(_emitter4.default.events.SCROLL_UPDATE, function (source, mutations) {
+      var range = _this2.selection.lastRange;
+      var index = range && range.length === 0 ? range.index : undefined;
+      modify.call(_this2, function () {
+        return _this2.editor.update(null, mutations, index);
+      }, source);
+    });
+    var contents = this.clipboard.convert('<div class=\'ql-editor\' style="white-space: normal;">' + html + '<p><br></p></div>');
+    this.setContents(contents);
+    this.history.clear();
+    if (this.options.placeholder) {
+      this.root.setAttribute('data-placeholder', this.options.placeholder);
+    }
+    if (this.options.readOnly) {
+      this.disable();
+    }
+  }
+
+  _createClass(Quill, [{
+    key: 'addContainer',
+    value: function addContainer(container) {
+      var refNode = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
+
+      if (typeof container === 'string') {
+        var className = container;
+        container = document.createElement('div');
+        container.classList.add(className);
+      }
+      this.container.insertBefore(container, refNode);
+      return container;
+    }
+  }, {
+    key: 'blur',
+    value: function blur() {
+      this.selection.setRange(null);
+    }
+  }, {
+    key: 'deleteText',
+    value: function deleteText(index, length, source) {
+      var _this3 = this;
+
+      var _overload = overload(index, length, source);
+
+      var _overload2 = _slicedToArray(_overload, 4);
+
+      index = _overload2[0];
+      length = _overload2[1];
+      source = _overload2[3];
+
+      return modify.call(this, function () {
+        return _this3.editor.deleteText(index, length);
+      }, source, index, -1 * length);
+    }
+  }, {
+    key: 'disable',
+    value: function disable() {
+      this.enable(false);
+    }
+  }, {
+    key: 'enable',
+    value: function enable() {
+      var enabled = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
+
+      this.scroll.enable(enabled);
+      this.container.classList.toggle('ql-disabled', !enabled);
+    }
+  }, {
+    key: 'focus',
+    value: function focus() {
+      var scrollTop = this.scrollingContainer.scrollTop;
+      this.selection.focus();
+      this.scrollingContainer.scrollTop = scrollTop;
+      this.scrollIntoView();
+    }
+  }, {
+    key: 'format',
+    value: function format(name, value) {
+      var _this4 = this;
+
+      var source = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : _emitter4.default.sources.API;
+
+      return modify.call(this, function () {
+        var range = _this4.getSelection(true);
+        var change = new _quillDelta2.default();
+        if (range == null) {
+          return change;
+        } else if (_parchment2.default.query(name, _parchment2.default.Scope.BLOCK)) {
+          change = _this4.editor.formatLine(range.index, range.length, _defineProperty({}, name, value));
+        } else if (range.length === 0) {
+          _this4.selection.format(name, value);
+          return change;
+        } else {
+          change = _this4.editor.formatText(range.index, range.length, _defineProperty({}, name, value));
+        }
+        _this4.setSelection(range, _emitter4.default.sources.SILENT);
+        return change;
+      }, source);
+    }
+  }, {
+    key: 'formatLine',
+    value: function formatLine(index, length, name, value, source) {
+      var _this5 = this;
+
+      var formats = void 0;
+
+      var _overload3 = overload(index, length, name, value, source);
+
+      var _overload4 = _slicedToArray(_overload3, 4);
+
+      index = _overload4[0];
+      length = _overload4[1];
+      formats = _overload4[2];
+      source = _overload4[3];
+
+      return modify.call(this, function () {
+        return _this5.editor.formatLine(index, length, formats);
+      }, source, index, 0);
+    }
+  }, {
+    key: 'formatText',
+    value: function formatText(index, length, name, value, source) {
+      var _this6 = this;
+
+      var formats = void 0;
+
+      var _overload5 = overload(index, length, name, value, source);
+
+      var _overload6 = _slicedToArray(_overload5, 4);
+
+      index = _overload6[0];
+      length = _overload6[1];
+      formats = _overload6[2];
+      source = _overload6[3];
+
+      return modify.call(this, function () {
+        return _this6.editor.formatText(index, length, formats);
+      }, source, index, 0);
+    }
+  }, {
+    key: 'getBounds',
+    value: function getBounds(index) {
+      var length = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
+
+      var bounds = void 0;
+      if (typeof index === 'number') {
+        bounds = this.selection.getBounds(index, length);
+      } else {
+        bounds = this.selection.getBounds(index.index, index.length);
+      }
+      var containerBounds = this.container.getBoundingClientRect();
+      return {
+        bottom: bounds.bottom - containerBounds.top,
+        height: bounds.height,
+        left: bounds.left - containerBounds.left,
+        right: bounds.right - containerBounds.left,
+        top: bounds.top - containerBounds.top,
+        width: bounds.width
+      };
+    }
+  }, {
+    key: 'getContents',
+    value: function getContents() {
+      var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
+      var length = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.getLength() - index;
+
+      var _overload7 = overload(index, length);
+
+      var _overload8 = _slicedToArray(_overload7, 2);
+
+      index = _overload8[0];
+      length = _overload8[1];
+
+      return this.editor.getContents(index, length);
+    }
+  }, {
+    key: 'getFormat',
+    value: function getFormat() {
+      var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.getSelection(true);
+      var length = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
+
+      if (typeof index === 'number') {
+        return this.editor.getFormat(index, length);
+      } else {
+        return this.editor.getFormat(index.index, index.length);
+      }
+    }
+  }, {
+    key: 'getIndex',
+    value: function getIndex(blot) {
+      return blot.offset(this.scroll);
+    }
+  }, {
+    key: 'getLength',
+    value: function getLength() {
+      return this.scroll.length();
+    }
+  }, {
+    key: 'getLeaf',
+    value: function getLeaf(index) {
+      return this.scroll.leaf(index);
+    }
+  }, {
+    key: 'getLine',
+    value: function getLine(index) {
+      return this.scroll.line(index);
+    }
+  }, {
+    key: 'getLines',
+    value: function getLines() {
+      var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
+      var length = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : Number.MAX_VALUE;
+
+      if (typeof index !== 'number') {
+        return this.scroll.lines(index.index, index.length);
+      } else {
+        return this.scroll.lines(index, length);
+      }
+    }
+  }, {
+    key: 'getModule',
+    value: function getModule(name) {
+      return this.theme.modules[name];
+    }
+  }, {
+    key: 'getSelection',
+    value: function getSelection() {
+      var focus = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
+
+      if (focus) this.focus();
+      this.update(); // Make sure we access getRange with editor in consistent state
+      return this.selection.getRange()[0];
+    }
+  }, {
+    key: 'getText',
+    value: function getText() {
+      var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
+      var length = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.getLength() - index;
+
+      var _overload9 = overload(index, length);
+
+      var _overload10 = _slicedToArray(_overload9, 2);
+
+      index = _overload10[0];
+      length = _overload10[1];
+
+      return this.editor.getText(index, length);
+    }
+  }, {
+    key: 'hasFocus',
+    value: function hasFocus() {
+      return this.selection.hasFocus();
+    }
+  }, {
+    key: 'insertEmbed',
+    value: function insertEmbed(index, embed, value) {
+      var _this7 = this;
+
+      var source = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : Quill.sources.API;
+
+      return modify.call(this, function () {
+        return _this7.editor.insertEmbed(index, embed, value);
+      }, source, index);
+    }
+  }, {
+    key: 'insertText',
+    value: function insertText(index, text, name, value, source) {
+      var _this8 = this;
+
+      var formats = void 0;
+
+      var _overload11 = overload(index, 0, name, value, source);
+
+      var _overload12 = _slicedToArray(_overload11, 4);
+
+      index = _overload12[0];
+      formats = _overload12[2];
+      source = _overload12[3];
+
+      return modify.call(this, function () {
+        return _this8.editor.insertText(index, text, formats);
+      }, source, index, text.length);
+    }
+  }, {
+    key: 'isEnabled',
+    value: function isEnabled() {
+      return !this.container.classList.contains('ql-disabled');
+    }
+  }, {
+    key: 'off',
+    value: function off() {
+      return this.emitter.off.apply(this.emitter, arguments);
+    }
+  }, {
+    key: 'on',
+    value: function on() {
+      return this.emitter.on.apply(this.emitter, arguments);
+    }
+  }, {
+    key: 'once',
+    value: function once() {
+      return this.emitter.once.apply(this.emitter, arguments);
+    }
+  }, {
+    key: 'pasteHTML',
+    value: function pasteHTML(index, html, source) {
+      this.clipboard.dangerouslyPasteHTML(index, html, source);
+    }
+  }, {
+    key: 'removeFormat',
+    value: function removeFormat(index, length, source) {
+      var _this9 = this;
+
+      var _overload13 = overload(index, length, source);
+
+      var _overload14 = _slicedToArray(_overload13, 4);
+
+      index = _overload14[0];
+      length = _overload14[1];
+      source = _overload14[3];
+
+      return modify.call(this, function () {
+        return _this9.editor.removeFormat(index, length);
+      }, source, index);
+    }
+  }, {
+    key: 'scrollIntoView',
+    value: function scrollIntoView() {
+      this.selection.scrollIntoView(this.scrollingContainer);
+    }
+  }, {
+    key: 'setContents',
+    value: function setContents(delta) {
+      var _this10 = this;
+
+      var source = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _emitter4.default.sources.API;
+
+      return modify.call(this, function () {
+        delta = new _quillDelta2.default(delta);
+        var length = _this10.getLength();
+        var deleted = _this10.editor.deleteText(0, length);
+        var applied = _this10.editor.applyDelta(delta);
+        var lastOp = applied.ops[applied.ops.length - 1];
+        if (lastOp != null && typeof lastOp.insert === 'string' && lastOp.insert[lastOp.insert.length - 1] === '\n') {
+          _this10.editor.deleteText(_this10.getLength() - 1, 1);
+          applied.delete(1);
+        }
+        var ret = deleted.compose(applied);
+        return ret;
+      }, source);
+    }
+  }, {
+    key: 'setSelection',
+    value: function setSelection(index, length, source) {
+      if (index == null) {
+        this.selection.setRange(null, length || Quill.sources.API);
+      } else {
+        var _overload15 = overload(index, length, source);
+
+        var _overload16 = _slicedToArray(_overload15, 4);
+
+        index = _overload16[0];
+        length = _overload16[1];
+        source = _overload16[3];
+
+        this.selection.setRange(new _selection.Range(index, length), source);
+        if (source !== _emitter4.default.sources.SILENT) {
+          this.selection.scrollIntoView(this.scrollingContainer);
+        }
+      }
+    }
+  }, {
+    key: 'setText',
+    value: function setText(text) {
+      var source = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _emitter4.default.sources.API;
+
+      var delta = new _quillDelta2.default().insert(text);
+      return this.setContents(delta, source);
+    }
+  }, {
+    key: 'update',
+    value: function update() {
+      var source = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _emitter4.default.sources.USER;
+
+      var change = this.scroll.update(source); // Will update selection before selection.update() does if text changes
+      this.selection.update(source);
+      return change;
+    }
+  }, {
+    key: 'updateContents',
+    value: function updateContents(delta) {
+      var _this11 = this;
+
+      var source = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _emitter4.default.sources.API;
+
+      return modify.call(this, function () {
+        delta = new _quillDelta2.default(delta);
+        return _this11.editor.applyDelta(delta, source);
+      }, source, true);
+    }
+  }]);
+
+  return Quill;
+}();
+
+Quill.DEFAULTS = {
+  bounds: null,
+  formats: null,
+  modules: {},
+  placeholder: '',
+  readOnly: false,
+  scrollingContainer: null,
+  strict: true,
+  theme: 'default'
+};
+Quill.events = _emitter4.default.events;
+Quill.sources = _emitter4.default.sources;
+// eslint-disable-next-line no-undef
+Quill.version =  false ? 'dev' : "1.3.6";
+
+Quill.imports = {
+  'delta': _quillDelta2.default,
+  'parchment': _parchment2.default,
+  'core/module': _module2.default,
+  'core/theme': _theme2.default
+};
+
+function expandConfig(container, userConfig) {
+  userConfig = (0, _extend2.default)(true, {
+    container: container,
+    modules: {
+      clipboard: true,
+      keyboard: true,
+      history: true
+    }
+  }, userConfig);
+  if (!userConfig.theme || userConfig.theme === Quill.DEFAULTS.theme) {
+    userConfig.theme = _theme2.default;
+  } else {
+    userConfig.theme = Quill.import('themes/' + userConfig.theme);
+    if (userConfig.theme == null) {
+      throw new Error('Invalid theme ' + userConfig.theme + '. Did you register it?');
+    }
+  }
+  var themeConfig = (0, _extend2.default)(true, {}, userConfig.theme.DEFAULTS);
+  [themeConfig, userConfig].forEach(function (config) {
+    config.modules = config.modules || {};
+    Object.keys(config.modules).forEach(function (module) {
+      if (config.modules[module] === true) {
+        config.modules[module] = {};
+      }
+    });
+  });
+  var moduleNames = Object.keys(themeConfig.modules).concat(Object.keys(userConfig.modules));
+  var moduleConfig = moduleNames.reduce(function (config, name) {
+    var moduleClass = Quill.import('modules/' + name);
+    if (moduleClass == null) {
+      debug.error('Cannot load ' + name + ' module. Are you sure you registered it?');
+    } else {
+      config[name] = moduleClass.DEFAULTS || {};
+    }
+    return config;
+  }, {});
+  // Special case toolbar shorthand
+  if (userConfig.modules != null && userConfig.modules.toolbar && userConfig.modules.toolbar.constructor !== Object) {
+    userConfig.modules.toolbar = {
+      container: userConfig.modules.toolbar
+    };
+  }
+  userConfig = (0, _extend2.default)(true, {}, Quill.DEFAULTS, { modules: moduleConfig }, themeConfig, userConfig);
+  ['bounds', 'container', 'scrollingContainer'].forEach(function (key) {
+    if (typeof userConfig[key] === 'string') {
+      userConfig[key] = document.querySelector(userConfig[key]);
+    }
+  });
+  userConfig.modules = Object.keys(userConfig.modules).reduce(function (config, name) {
+    if (userConfig.modules[name]) {
+      config[name] = userConfig.modules[name];
+    }
+    return config;
+  }, {});
+  return userConfig;
+}
+
+// Handle selection preservation and TEXT_CHANGE emission
+// common to modification APIs
+function modify(modifier, source, index, shift) {
+  if (this.options.strict && !this.isEnabled() && source === _emitter4.default.sources.USER) {
+    return new _quillDelta2.default();
+  }
+  var range = index == null ? null : this.getSelection();
+  var oldDelta = this.editor.delta;
+  var change = modifier();
+  if (range != null) {
+    if (index === true) index = range.index;
+    if (shift == null) {
+      range = shiftRange(range, change, source);
+    } else if (shift !== 0) {
+      range = shiftRange(range, index, shift, source);
+    }
+    this.setSelection(range, _emitter4.default.sources.SILENT);
+  }
+  if (change.length() > 0) {
+    var _emitter;
+
+    var args = [_emitter4.default.events.TEXT_CHANGE, change, oldDelta, source];
+    (_emitter = this.emitter).emit.apply(_emitter, [_emitter4.default.events.EDITOR_CHANGE].concat(args));
+    if (source !== _emitter4.default.sources.SILENT) {
+      var _emitter2;
+
+      (_emitter2 = this.emitter).emit.apply(_emitter2, args);
+    }
+  }
+  return change;
+}
+
+function overload(index, length, name, value, source) {
+  var formats = {};
+  if (typeof index.index === 'number' && typeof index.length === 'number') {
+    // Allow for throwaway end (used by insertText/insertEmbed)
+    if (typeof length !== 'number') {
+      source = value, value = name, name = length, length = index.length, index = index.index;
+    } else {
+      length = index.length, index = index.index;
+    }
+  } else if (typeof length !== 'number') {
+    source = value, value = name, name = length, length = 0;
+  }
+  // Handle format being object, two format name/value strings or excluded
+  if ((typeof name === 'undefined' ? 'undefined' : _typeof(name)) === 'object') {
+    formats = name;
+    source = value;
+  } else if (typeof name === 'string') {
+    if (value != null) {
+      formats[name] = value;
+    } else {
+      source = name;
+    }
+  }
+  // Handle optional source
+  source = source || _emitter4.default.sources.API;
+  return [index, length, formats, source];
+}
+
+function shiftRange(range, index, length, source) {
+  if (range == null) return null;
+  var start = void 0,
+      end = void 0;
+  if (index instanceof _quillDelta2.default) {
+    var _map = [range.index, range.index + range.length].map(function (pos) {
+      return index.transformPosition(pos, source !== _emitter4.default.sources.USER);
+    });
+
+    var _map2 = _slicedToArray(_map, 2);
+
+    start = _map2[0];
+    end = _map2[1];
+  } else {
+    var _map3 = [range.index, range.index + range.length].map(function (pos) {
+      if (pos < index || pos === index && source === _emitter4.default.sources.USER) return pos;
+      if (length >= 0) {
+        return pos + length;
+      } else {
+        return Math.max(index, pos + length);
+      }
+    });
+
+    var _map4 = _slicedToArray(_map3, 2);
+
+    start = _map4[0];
+    end = _map4[1];
+  }
+  return new _selection.Range(start, end - start);
+}
+
+exports.expandConfig = expandConfig;
+exports.overload = overload;
+exports.default = Quill;
+
+/***/ }),
+/* 6 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };
+
+var _text = __webpack_require__(7);
+
+var _text2 = _interopRequireDefault(_text);
+
+var _parchment = __webpack_require__(0);
+
+var _parchment2 = _interopRequireDefault(_parchment);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+var Inline = function (_Parchment$Inline) {
+  _inherits(Inline, _Parchment$Inline);
+
+  function Inline() {
+    _classCallCheck(this, Inline);
+
+    return _possibleConstructorReturn(this, (Inline.__proto__ || Object.getPrototypeOf(Inline)).apply(this, arguments));
+  }
+
+  _createClass(Inline, [{
+    key: 'formatAt',
+    value: function formatAt(index, length, name, value) {
+      if (Inline.compare(this.statics.blotName, name) < 0 && _parchment2.default.query(name, _parchment2.default.Scope.BLOT)) {
+        var blot = this.isolate(index, length);
+        if (value) {
+          blot.wrap(name, value);
+        }
+      } else {
+        _get(Inline.prototype.__proto__ || Object.getPrototypeOf(Inline.prototype), 'formatAt', this).call(this, index, length, name, value);
+      }
+    }
+  }, {
+    key: 'optimize',
+    value: function optimize(context) {
+      _get(Inline.prototype.__proto__ || Object.getPrototypeOf(Inline.prototype), 'optimize', this).call(this, context);
+      if (this.parent instanceof Inline && Inline.compare(this.statics.blotName, this.parent.statics.blotName) > 0) {
+        var parent = this.parent.isolate(this.offset(), this.length());
+        this.moveChildren(parent);
+        parent.wrap(this);
+      }
+    }
+  }], [{
+    key: 'compare',
+    value: function compare(self, other) {
+      var selfIndex = Inline.order.indexOf(self);
+      var otherIndex = Inline.order.indexOf(other);
+      if (selfIndex >= 0 || otherIndex >= 0) {
+        return selfIndex - otherIndex;
+      } else if (self === other) {
+        return 0;
+      } else if (self < other) {
+        return -1;
+      } else {
+        return 1;
+      }
+    }
+  }]);
+
+  return Inline;
+}(_parchment2.default.Inline);
+
+Inline.allowedChildren = [Inline, _parchment2.default.Embed, _text2.default];
+// Lower index means deeper in the DOM tree, since not found (-1) is for embeds
+Inline.order = ['cursor', 'inline', // Must be lower
+'underline', 'strike', 'italic', 'bold', 'script', 'link', 'code' // Must be higher
+];
+
+exports.default = Inline;
+
+/***/ }),
+/* 7 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _parchment = __webpack_require__(0);
+
+var _parchment2 = _interopRequireDefault(_parchment);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+var TextBlot = function (_Parchment$Text) {
+  _inherits(TextBlot, _Parchment$Text);
+
+  function TextBlot() {
+    _classCallCheck(this, TextBlot);
+
+    return _possibleConstructorReturn(this, (TextBlot.__proto__ || Object.getPrototypeOf(TextBlot)).apply(this, arguments));
+  }
+
+  return TextBlot;
+}(_parchment2.default.Text);
+
+exports.default = TextBlot;
+
+/***/ }),
+/* 8 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };
+
+var _eventemitter = __webpack_require__(54);
+
+var _eventemitter2 = _interopRequireDefault(_eventemitter);
+
+var _logger = __webpack_require__(10);
+
+var _logger2 = _interopRequireDefault(_logger);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+var debug = (0, _logger2.default)('quill:events');
+
+var EVENTS = ['selectionchange', 'mousedown', 'mouseup', 'click'];
+
+EVENTS.forEach(function (eventName) {
+  document.addEventListener(eventName, function () {
+    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
+      args[_key] = arguments[_key];
+    }
+
+    [].slice.call(document.querySelectorAll('.ql-container')).forEach(function (node) {
+      // TODO use WeakMap
+      if (node.__quill && node.__quill.emitter) {
+        var _node$__quill$emitter;
+
+        (_node$__quill$emitter = node.__quill.emitter).handleDOM.apply(_node$__quill$emitter, args);
+      }
+    });
+  });
+});
+
+var Emitter = function (_EventEmitter) {
+  _inherits(Emitter, _EventEmitter);
+
+  function Emitter() {
+    _classCallCheck(this, Emitter);
+
+    var _this = _possibleConstructorReturn(this, (Emitter.__proto__ || Object.getPrototypeOf(Emitter)).call(this));
+
+    _this.listeners = {};
+    _this.on('error', debug.error);
+    return _this;
+  }
+
+  _createClass(Emitter, [{
+    key: 'emit',
+    value: function emit() {
+      debug.log.apply(debug, arguments);
+      _get(Emitter.prototype.__proto__ || Object.getPrototypeOf(Emitter.prototype), 'emit', this).apply(this, arguments);
+    }
+  }, {
+    key: 'handleDOM',
+    value: function handleDOM(event) {
+      for (var _len2 = arguments.length, args = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
+        args[_key2 - 1] = arguments[_key2];
+      }
+
+      (this.listeners[event.type] || []).forEach(function (_ref) {
+        var node = _ref.node,
+            handler = _ref.handler;
+
+        if (event.target === node || node.contains(event.target)) {
+          handler.apply(undefined, [event].concat(args));
+        }
+      });
+    }
+  }, {
+    key: 'listenDOM',
+    value: function listenDOM(eventName, node, handler) {
+      if (!this.listeners[eventName]) {
+        this.listeners[eventName] = [];
+      }
+      this.listeners[eventName].push({ node: node, handler: handler });
+    }
+  }]);
+
+  return Emitter;
+}(_eventemitter2.default);
+
+Emitter.events = {
+  EDITOR_CHANGE: 'editor-change',
+  SCROLL_BEFORE_UPDATE: 'scroll-before-update',
+  SCROLL_OPTIMIZE: 'scroll-optimize',
+  SCROLL_UPDATE: 'scroll-update',
+  SELECTION_CHANGE: 'selection-change',
+  TEXT_CHANGE: 'text-change'
+};
+Emitter.sources = {
+  API: 'api',
+  SILENT: 'silent',
+  USER: 'user'
+};
+
+exports.default = Emitter;
+
+/***/ }),
+/* 9 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+var Module = function Module(quill) {
+  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
+
+  _classCallCheck(this, Module);
+
+  this.quill = quill;
+  this.options = options;
+};
+
+Module.DEFAULTS = {};
+
+exports.default = Module;
+
+/***/ }),
+/* 10 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+var levels = ['error', 'warn', 'log', 'info'];
+var level = 'warn';
+
+function debug(method) {
+  if (levels.indexOf(method) <= levels.indexOf(level)) {
+    var _console;
+
+    for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
+      args[_key - 1] = arguments[_key];
+    }
+
+    (_console = console)[method].apply(_console, args); // eslint-disable-line no-console
+  }
+}
+
+function namespace(ns) {
+  return levels.reduce(function (logger, method) {
+    logger[method] = debug.bind(console, method, ns);
+    return logger;
+  }, {});
+}
+
+debug.level = namespace.level = function (newLevel) {
+  level = newLevel;
+};
+
+exports.default = namespace;
+
+/***/ }),
+/* 11 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var pSlice = Array.prototype.slice;
+var objectKeys = __webpack_require__(52);
+var isArguments = __webpack_require__(53);
+
+var deepEqual = module.exports = function (actual, expected, opts) {
+  if (!opts) opts = {};
+  // 7.1. All identical values are equivalent, as determined by ===.
+  if (actual === expected) {
+    return true;
+
+  } else if (actual instanceof Date && expected instanceof Date) {
+    return actual.getTime() === expected.getTime();
+
+  // 7.3. Other pairs that do not both pass typeof value == 'object',
+  // equivalence is determined by ==.
+  } else if (!actual || !expected || typeof actual != 'object' && typeof expected != 'object') {
+    return opts.strict ? actual === expected : actual == expected;
+
+  // 7.4. For all other Object pairs, including Array objects, equivalence is
+  // determined by having the same number of owned properties (as verified
+  // with Object.prototype.hasOwnProperty.call), the same set of keys
+  // (although not necessarily the same order), equivalent values for every
+  // corresponding key, and an identical 'prototype' property. Note: this
+  // accounts for both named and indexed properties on Arrays.
+  } else {
+    return objEquiv(actual, expected, opts);
+  }
+}
+
+function isUndefinedOrNull(value) {
+  return value === null || value === undefined;
+}
+
+function isBuffer (x) {
+  if (!x || typeof x !== 'object' || typeof x.length !== 'number') return false;
+  if (typeof x.copy !== 'function' || typeof x.slice !== 'function') {
+    return false;
+  }
+  if (x.length > 0 && typeof x[0] !== 'number') return false;
+  return true;
+}
+
+function objEquiv(a, b, opts) {
+  var i, key;
+  if (isUndefinedOrNull(a) || isUndefinedOrNull(b))
+    return false;
+  // an identical 'prototype' property.
+  if (a.prototype !== b.prototype) return false;
+  //~~~I've managed to break Object.keys through screwy arguments passing.
+  //   Converting to array solves the problem.
+  if (isArguments(a)) {
+    if (!isArguments(b)) {
+      return false;
+    }
+    a = pSlice.call(a);
+    b = pSlice.call(b);
+    return deepEqual(a, b, opts);
+  }
+  if (isBuffer(a)) {
+    if (!isBuffer(b)) {
+      return false;
+    }
+    if (a.length !== b.length) return false;
+    for (i = 0; i < a.length; i++) {
+      if (a[i] !== b[i]) return false;
+    }
+    return true;
+  }
+  try {
+    var ka = objectKeys(a),
+        kb = objectKeys(b);
+  } catch (e) {//happens when one is a string literal and the other isn't
+    return false;
+  }
+  // having the same number of owned properties (keys incorporates
+  // hasOwnProperty)
+  if (ka.length != kb.length)
+    return false;
+  //the same set of keys (although not necessarily the same order),
+  ka.sort();
+  kb.sort();
+  //~~~cheap key test
+  for (i = ka.length - 1; i >= 0; i--) {
+    if (ka[i] != kb[i])
+      return false;
+  }
+  //equivalent values for every corresponding key, and
+  //~~~possibly expensive deep test
+  for (i = ka.length - 1; i >= 0; i--) {
+    key = ka[i];
+    if (!deepEqual(a[key], b[key], opts)) return false;
+  }
+  return typeof a === typeof b;
+}
+
+
+/***/ }),
+/* 12 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", { value: true });
+var Registry = __webpack_require__(1);
+var Attributor = /** @class */ (function () {
+    function Attributor(attrName, keyName, options) {
+        if (options === void 0) { options = {}; }
+        this.attrName = attrName;
+        this.keyName = keyName;
+        var attributeBit = Registry.Scope.TYPE & Registry.Scope.ATTRIBUTE;
+        if (options.scope != null) {
+            // Ignore type bits, force attribute bit
+            this.scope = (options.scope & Registry.Scope.LEVEL) | attributeBit;
+        }
+        else {
+            this.scope = Registry.Scope.ATTRIBUTE;
+        }
+        if (options.whitelist != null)
+            this.whitelist = options.whitelist;
+    }
+    Attributor.keys = function (node) {
+        return [].map.call(node.attributes, function (item) {
+            return item.name;
+        });
+    };
+    Attributor.prototype.add = function (node, value) {
+        if (!this.canAdd(node, value))
+            return false;
+        node.setAttribute(this.keyName, value);
+        return true;
+    };
+    Attributor.prototype.canAdd = function (node, value) {
+        var match = Registry.query(node, Registry.Scope.BLOT & (this.scope | Registry.Scope.TYPE));
+        if (match == null)
+            return false;
+        if (this.whitelist == null)
+            return true;
+        if (typeof value === 'string') {
+            return this.whitelist.indexOf(value.replace(/["']/g, '')) > -1;
+        }
+        else {
+            return this.whitelist.indexOf(value) > -1;
+        }
+    };
+    Attributor.prototype.remove = function (node) {
+        node.removeAttribute(this.keyName);
+    };
+    Attributor.prototype.value = function (node) {
+        var value = node.getAttribute(this.keyName);
+        if (this.canAdd(node, value) && value) {
+            return value;
+        }
+        return '';
+    };
+    return Attributor;
+}());
+exports.default = Attributor;
+
+
+/***/ }),
+/* 13 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = exports.Code = undefined;
+
+var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };
+
+var _quillDelta = __webpack_require__(2);
+
+var _quillDelta2 = _interopRequireDefault(_quillDelta);
+
+var _parchment = __webpack_require__(0);
+
+var _parchment2 = _interopRequireDefault(_parchment);
+
+var _block = __webpack_require__(4);
+
+var _block2 = _interopRequireDefault(_block);
+
+var _inline = __webpack_require__(6);
+
+var _inline2 = _interopRequireDefault(_inline);
+
+var _text = __webpack_require__(7);
+
+var _text2 = _interopRequireDefault(_text);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+var Code = function (_Inline) {
+  _inherits(Code, _Inline);
+
+  function Code() {
+    _classCallCheck(this, Code);
+
+    return _possibleConstructorReturn(this, (Code.__proto__ || Object.getPrototypeOf(Code)).apply(this, arguments));
+  }
+
+  return Code;
+}(_inline2.default);
+
+Code.blotName = 'code';
+Code.tagName = 'CODE';
+
+var CodeBlock = function (_Block) {
+  _inherits(CodeBlock, _Block);
+
+  function CodeBlock() {
+    _classCallCheck(this, CodeBlock);
+
+    return _possibleConstructorReturn(this, (CodeBlock.__proto__ || Object.getPrototypeOf(CodeBlock)).apply(this, arguments));
+  }
+
+  _createClass(CodeBlock, [{
+    key: 'delta',
+    value: function delta() {
+      var _this3 = this;
+
+      var text = this.domNode.textContent;
+      if (text.endsWith('\n')) {
+        // Should always be true
+        text = text.slice(0, -1);
+      }
+      return text.split('\n').reduce(function (delta, frag) {
+        return delta.insert(frag).insert('\n', _this3.formats());
+      }, new _quillDelta2.default());
+    }
+  }, {
+    key: 'format',
+    value: function format(name, value) {
+      if (name === this.statics.blotName && value) return;
+
+      var _descendant = this.descendant(_text2.default, this.length() - 1),
+          _descendant2 = _slicedToArray(_descendant, 1),
+          text = _descendant2[0];
+
+      if (text != null) {
+        text.deleteAt(text.length() - 1, 1);
+      }
+      _get(CodeBlock.prototype.__proto__ || Object.getPrototypeOf(CodeBlock.prototype), 'format', this).call(this, name, value);
+    }
+  }, {
+    key: 'formatAt',
+    value: function formatAt(index, length, name, value) {
+      if (length === 0) return;
+      if (_parchment2.default.query(name, _parchment2.default.Scope.BLOCK) == null || name === this.statics.blotName && value === this.statics.formats(this.domNode)) {
+        return;
+      }
+      var nextNewline = this.newlineIndex(index);
+      if (nextNewline < 0 || nextNewline >= index + length) return;
+      var prevNewline = this.newlineIndex(index, true) + 1;
+      var isolateLength = nextNewline - prevNewline + 1;
+      var blot = this.isolate(prevNewline, isolateLength);
+      var next = blot.next;
+      blot.format(name, value);
+      if (next instanceof CodeBlock) {
+        next.formatAt(0, index - prevNewline + length - isolateLength, name, value);
+      }
+    }
+  }, {
+    key: 'insertAt',
+    value: function insertAt(index, value, def) {
+      if (def != null) return;
+
+      var _descendant3 = this.descendant(_text2.default, index),
+          _descendant4 = _slicedToArray(_descendant3, 2),
+          text = _descendant4[0],
+          offset = _descendant4[1];
+
+      text.insertAt(offset, value);
+    }
+  }, {
+    key: 'length',
+    value: function length() {
+      var length = this.domNode.textContent.length;
+      if (!this.domNode.textContent.endsWith('\n')) {
+        return length + 1;
+      }
+      return length;
+    }
+  }, {
+    key: 'newlineIndex',
+    value: function newlineIndex(searchIndex) {
+      var reverse = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
+
+      if (!reverse) {
+        var offset = this.domNode.textContent.slice(searchIndex).indexOf('\n');
+        return offset > -1 ? searchIndex + offset : -1;
+      } else {
+        return this.domNode.textContent.slice(0, searchIndex).lastIndexOf('\n');
+      }
+    }
+  }, {
+    key: 'optimize',
+    value: function optimize(context) {
+      if (!this.domNode.textContent.endsWith('\n')) {
+        this.appendChild(_parchment2.default.create('text', '\n'));
+      }
+      _get(CodeBlock.prototype.__proto__ || Object.getPrototypeOf(CodeBlock.prototype), 'optimize', this).call(this, context);
+      var next = this.next;
+      if (next != null && next.prev === this && next.statics.blotName === this.statics.blotName && this.statics.formats(this.domNode) === next.statics.formats(next.domNode)) {
+        next.optimize(context);
+        next.moveChildren(this);
+        next.remove();
+      }
+    }
+  }, {
+    key: 'replace',
+    value: function replace(target) {
+      _get(CodeBlock.prototype.__proto__ || Object.getPrototypeOf(CodeBlock.prototype), 'replace', this).call(this, target);
+      [].slice.call(this.domNode.querySelectorAll('*')).forEach(function (node) {
+        var blot = _parchment2.default.find(node);
+        if (blot == null) {
+          node.parentNode.removeChild(node);
+        } else if (blot instanceof _parchment2.default.Embed) {
+          blot.remove();
+        } else {
+          blot.unwrap();
+        }
+      });
+    }
+  }], [{
+    key: 'create',
+    value: function create(value) {
+      var domNode = _get(CodeBlock.__proto__ || Object.getPrototypeOf(CodeBlock), 'create', this).call(this, value);
+      domNode.setAttribute('spellcheck', false);
+      return domNode;
+    }
+  }, {
+    key: 'formats',
+    value: function formats() {
+      return true;
+    }
+  }]);
+
+  return CodeBlock;
+}(_block2.default);
+
+CodeBlock.blotName = 'code-block';
+CodeBlock.tagName = 'PRE';
+CodeBlock.TAB = '  ';
+
+exports.Code = Code;
+exports.default = CodeBlock;
+
+/***/ }),
+/* 14 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
+
+var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+var _quillDelta = __webpack_require__(2);
+
+var _quillDelta2 = _interopRequireDefault(_quillDelta);
+
+var _op = __webpack_require__(20);
+
+var _op2 = _interopRequireDefault(_op);
+
+var _parchment = __webpack_require__(0);
+
+var _parchment2 = _interopRequireDefault(_parchment);
+
+var _code = __webpack_require__(13);
+
+var _code2 = _interopRequireDefault(_code);
+
+var _cursor = __webpack_require__(24);
+
+var _cursor2 = _interopRequireDefault(_cursor);
+
+var _block = __webpack_require__(4);
+
+var _block2 = _interopRequireDefault(_block);
+
+var _break = __webpack_require__(16);
+
+var _break2 = _interopRequireDefault(_break);
+
+var _clone = __webpack_require__(21);
+
+var _clone2 = _interopRequireDefault(_clone);
+
+var _deepEqual = __webpack_require__(11);
+
+var _deepEqual2 = _interopRequireDefault(_deepEqual);
+
+var _extend = __webpack_require__(3);
+
+var _extend2 = _interopRequireDefault(_extend);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+var ASCII = /^[ -~]*$/;
+
+var Editor = function () {
+  function Editor(scroll) {
+    _classCallCheck(this, Editor);
+
+    this.scroll = scroll;
+    this.delta = this.getDelta();
+  }
+
+  _createClass(Editor, [{
+    key: 'applyDelta',
+    value: function applyDelta(delta) {
+      var _this = this;
+
+      var consumeNextNewline = false;
+      this.scroll.update();
+      var scrollLength = this.scroll.length();
+      this.scroll.batchStart();
+      delta = normalizeDelta(delta);
+      delta.reduce(function (index, op) {
+        var length = op.retain || op.delete || op.insert.length || 1;
+        var attributes = op.attributes || {};
+        if (op.insert != null) {
+          if (typeof op.insert === 'string') {
+            var text = op.insert;
+            if (text.endsWith('\n') && consumeNextNewline) {
+              consumeNextNewline = false;
+              text = text.slice(0, -1);
+            }
+            if (index >= scrollLength && !text.endsWith('\n')) {
+              consumeNextNewline = true;
+            }
+            _this.scroll.insertAt(index, text);
+
+            var _scroll$line = _this.scroll.line(index),
+                _scroll$line2 = _slicedToArray(_scroll$line, 2),
+                line = _scroll$line2[0],
+                offset = _scroll$line2[1];
+
+            var formats = (0, _extend2.default)({}, (0, _block.bubbleFormats)(line));
+            if (line instanceof _block2.default) {
+              var _line$descendant = line.descendant(_parchment2.default.Leaf, offset),
+                  _line$descendant2 = _slicedToArray(_line$descendant, 1),
+                  leaf = _line$descendant2[0];
+
+              formats = (0, _extend2.default)(formats, (0, _block.bubbleFormats)(leaf));
+            }
+            attributes = _op2.default.attributes.diff(formats, attributes) || {};
+          } else if (_typeof(op.insert) === 'object') {
+            var key = Object.keys(op.insert)[0]; // There should only be one key
+            if (key == null) return index;
+            _this.scroll.insertAt(index, key, op.insert[key]);
+          }
+          scrollLength += length;
+        }
+        Object.keys(attributes).forEach(function (name) {
+          _this.scroll.formatAt(index, length, name, attributes[name]);
+        });
+        return index + length;
+      }, 0);
+      delta.reduce(function (index, op) {
+        if (typeof op.delete === 'number') {
+          _this.scroll.deleteAt(index, op.delete);
+          return index;
+        }
+        return index + (op.retain || op.insert.length || 1);
+      }, 0);
+      this.scroll.batchEnd();
+      return this.update(delta);
+    }
+  }, {
+    key: 'deleteText',
+    value: function deleteText(index, length) {
+      this.scroll.deleteAt(index, length);
+      return this.update(new _quillDelta2.default().retain(index).delete(length));
+    }
+  }, {
+    key: 'formatLine',
+    value: function formatLine(index, length) {
+      var _this2 = this;
+
+      var formats = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
+
+      this.scroll.update();
+      Object.keys(formats).forEach(function (format) {
+        if (_this2.scroll.whitelist != null && !_this2.scroll.whitelist[format]) return;
+        var lines = _this2.scroll.lines(index, Math.max(length, 1));
+        var lengthRemaining = length;
+        lines.forEach(function (line) {
+          var lineLength = line.length();
+          if (!(line instanceof _code2.default)) {
+            line.format(format, formats[format]);
+          } else {
+            var codeIndex = index - line.offset(_this2.scroll);
+            var codeLength = line.newlineIndex(codeIndex + lengthRemaining) - codeIndex + 1;
+            line.formatAt(codeIndex, codeLength, format, formats[format]);
+          }
+          lengthRemaining -= lineLength;
+        });
+      });
+      this.scroll.optimize();
+      return this.update(new _quillDelta2.default().retain(index).retain(length, (0, _clone2.default)(formats)));
+    }
+  }, {
+    key: 'formatText',
+    value: function formatText(index, length) {
+      var _this3 = this;
+
+      var formats = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
+
+      Object.keys(formats).forEach(function (format) {
+        _this3.scroll.formatAt(index, length, format, formats[format]);
+      });
+      return this.update(new _quillDelta2.default().retain(index).retain(length, (0, _clone2.default)(formats)));
+    }
+  }, {
+    key: 'getContents',
+    value: function getContents(index, length) {
+      return this.delta.slice(index, index + length);
+    }
+  }, {
+    key: 'getDelta',
+    value: function getDelta() {
+      return this.scroll.lines().reduce(function (delta, line) {
+        return delta.concat(line.delta());
+      }, new _quillDelta2.default());
+    }
+  }, {
+    key: 'getFormat',
+    value: function getFormat(index) {
+      var length = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
+
+      var lines = [],
+          leaves = [];
+      if (length === 0) {
+        this.scroll.path(index).forEach(function (path) {
+          var _path = _slicedToArray(path, 1),
+              blot = _path[0];
+
+          if (blot instanceof _block2.default) {
+            lines.push(blot);
+          } else if (blot instanceof _parchment2.default.Leaf) {
+            leaves.push(blot);
+          }
+        });
+      } else {
+        lines = this.scroll.lines(index, length);
+        leaves = this.scroll.descendants(_parchment2.default.Leaf, index, length);
+      }
+      var formatsArr = [lines, leaves].map(function (blots) {
+        if (blots.length === 0) return {};
+        var formats = (0, _block.bubbleFormats)(blots.shift());
+        while (Object.keys(formats).length > 0) {
+          var blot = blots.shift();
+          if (blot == null) return formats;
+          formats = combineFormats((0, _block.bubbleFormats)(blot), formats);
+        }
+        return formats;
+      });
+      return _extend2.default.apply(_extend2.default, formatsArr);
+    }
+  }, {
+    key: 'getText',
+    value: function getText(index, length) {
+      return this.getContents(index, length).filter(function (op) {
+        return typeof op.insert === 'string';
+      }).map(function (op) {
+        return op.insert;
+      }).join('');
+    }
+  }, {
+    key: 'insertEmbed',
+    value: function insertEmbed(index, embed, value) {
+      this.scroll.insertAt(index, embed, value);
+      return this.update(new _quillDelta2.default().retain(index).insert(_defineProperty({}, embed, value)));
+    }
+  }, {
+    key: 'insertText',
+    value: function insertText(index, text) {
+      var _this4 = this;
+
+      var formats = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
+
+      text = text.replace(/\r\n/g, '\n').replace(/\r/g, '\n');
+      this.scroll.insertAt(index, text);
+      Object.keys(formats).forEach(function (format) {
+        _this4.scroll.formatAt(index, text.length, format, formats[format]);
+      });
+      return this.update(new _quillDelta2.default().retain(index).insert(text, (0, _clone2.default)(formats)));
+    }
+  }, {
+    key: 'isBlank',
+    value: function isBlank() {
+      if (this.scroll.children.length == 0) return true;
+      if (this.scroll.children.length > 1) return false;
+      var block = this.scroll.children.head;
+      if (block.statics.blotName !== _block2.default.blotName) return false;
+      if (block.children.length > 1) return false;
+      return block.children.head instanceof _break2.default;
+    }
+  }, {
+    key: 'removeFormat',
+    value: function removeFormat(index, length) {
+      var text = this.getText(index, length);
+
+      var _scroll$line3 = this.scroll.line(index + length),
+          _scroll$line4 = _slicedToArray(_scroll$line3, 2),
+          line = _scroll$line4[0],
+          offset = _scroll$line4[1];
+
+      var suffixLength = 0,
+          suffix = new _quillDelta2.default();
+      if (line != null) {
+        if (!(line instanceof _code2.default)) {
+          suffixLength = line.length() - offset;
+        } else {
+          suffixLength = line.newlineIndex(offset) - offset + 1;
+        }
+        suffix = line.delta().slice(offset, offset + suffixLength - 1).insert('\n');
+      }
+      var contents = this.getContents(index, length + suffixLength);
+      var diff = contents.diff(new _quillDelta2.default().insert(text).concat(suffix));
+      var delta = new _quillDelta2.default().retain(index).concat(diff);
+      return this.applyDelta(delta);
+    }
+  }, {
+    key: 'update',
+    value: function update(change) {
+      var mutations = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
+      var cursorIndex = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined;
+
+      var oldDelta = this.delta;
+      if (mutations.length === 1 && mutations[0].type === 'characterData' && mutations[0].target.data.match(ASCII) && _parchment2.default.find(mutations[0].target)) {
+        // Optimization for character changes
+        var textBlot = _parchment2.default.find(mutations[0].target);
+        var formats = (0, _block.bubbleFormats)(textBlot);
+        var index = textBlot.offset(this.scroll);
+        var oldValue = mutations[0].oldValue.replace(_cursor2.default.CONTENTS, '');
+        var oldText = new _quillDelta2.default().insert(oldValue);
+        var newText = new _quillDelta2.default().insert(textBlot.value());
+        var diffDelta = new _quillDelta2.default().retain(index).concat(oldText.diff(newText, cursorIndex));
+        change = diffDelta.reduce(function (delta, op) {
+          if (op.insert) {
+            return delta.insert(op.insert, formats);
+          } else {
+            return delta.push(op);
+          }
+        }, new _quillDelta2.default());
+        this.delta = oldDelta.compose(change);
+      } else {
+        this.delta = this.getDelta();
+        if (!change || !(0, _deepEqual2.default)(oldDelta.compose(change), this.delta)) {
+          change = oldDelta.diff(this.delta, cursorIndex);
+        }
+      }
+      return change;
+    }
+  }]);
+
+  return Editor;
+}();
+
+function combineFormats(formats, combined) {
+  return Object.keys(combined).reduce(function (merged, name) {
+    if (formats[name] == null) return merged;
+    if (combined[name] === formats[name]) {
+      merged[name] = combined[name];
+    } else if (Array.isArray(combined[name])) {
+      if (combined[name].indexOf(formats[name]) < 0) {
+        merged[name] = combined[name].concat([formats[name]]);
+      }
+    } else {
+      merged[name] = [combined[name], formats[name]];
+    }
+    return merged;
+  }, {});
+}
+
+function normalizeDelta(delta) {
+  return delta.reduce(function (delta, op) {
+    if (op.insert === 1) {
+      var attributes = (0, _clone2.default)(op.attributes);
+      delete attributes['image'];
+      return delta.insert({ image: op.attributes.image }, attributes);
+    }
+    if (op.attributes != null && (op.attributes.list === true || op.attributes.bullet === true)) {
+      op = (0, _clone2.default)(op);
+      if (op.attributes.list) {
+        op.attributes.list = 'ordered';
+      } else {
+        op.attributes.list = 'bullet';
+        delete op.attributes.bullet;
+      }
+    }
+    if (typeof op.insert === 'string') {
+      var text = op.insert.replace(/\r\n/g, '\n').replace(/\r/g, '\n');
+      return delta.insert(text, op.attributes);
+    }
+    return delta.push(op);
+  }, new _quillDelta2.default());
+}
+
+exports.default = Editor;
+
+/***/ }),
+/* 15 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = exports.Range = undefined;
+
+var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+var _parchment = __webpack_require__(0);
+
+var _parchment2 = _interopRequireDefault(_parchment);
+
+var _clone = __webpack_require__(21);
+
+var _clone2 = _interopRequireDefault(_clone);
+
+var _deepEqual = __webpack_require__(11);
+
+var _deepEqual2 = _interopRequireDefault(_deepEqual);
+
+var _emitter3 = __webpack_require__(8);
+
+var _emitter4 = _interopRequireDefault(_emitter3);
+
+var _logger = __webpack_require__(10);
+
+var _logger2 = _interopRequireDefault(_logger);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+var debug = (0, _logger2.default)('quill:selection');
+
+var Range = function Range(index) {
+  var length = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
+
+  _classCallCheck(this, Range);
+
+  this.index = index;
+  this.length = length;
+};
+
+var Selection = function () {
+  function Selection(scroll, emitter) {
+    var _this = this;
+
+    _classCallCheck(this, Selection);
+
+    this.emitter = emitter;
+    this.scroll = scroll;
+    this.composing = false;
+    this.mouseDown = false;
+    this.root = this.scroll.domNode;
+    this.cursor = _parchment2.default.create('cursor', this);
+    // savedRange is last non-null range
+    this.lastRange = this.savedRange = new Range(0, 0);
+    this.handleComposition();
+    this.handleDragging();
+    this.emitter.listenDOM('selectionchange', document, function () {
+      if (!_this.mouseDown) {
+        setTimeout(_this.update.bind(_this, _emitter4.default.sources.USER), 1);
+      }
+    });
+    this.emitter.on(_emitter4.default.events.EDITOR_CHANGE, function (type, delta) {
+      if (type === _emitter4.default.events.TEXT_CHANGE && delta.length() > 0) {
+        _this.update(_emitter4.default.sources.SILENT);
+      }
+    });
+    this.emitter.on(_emitter4.default.events.SCROLL_BEFORE_UPDATE, function () {
+      if (!_this.hasFocus()) return;
+      var native = _this.getNativeRange();
+      if (native == null) return;
+      if (native.start.node === _this.cursor.textNode) return; // cursor.restore() will handle
+      // TODO unclear if this has negative side effects
+      _this.emitter.once(_emitter4.default.events.SCROLL_UPDATE, function () {
+        try {
+          _this.setNativeRange(native.start.node, native.start.offset, native.end.node, native.end.offset);
+        } catch (ignored) {}
+      });
+    });
+    this.emitter.on(_emitter4.default.events.SCROLL_OPTIMIZE, function (mutations, context) {
+      if (context.range) {
+        var _context$range = context.range,
+            startNode = _context$range.startNode,
+            startOffset = _context$range.startOffset,
+            endNode = _context$range.endNode,
+            endOffset = _context$range.endOffset;
+
+        _this.setNativeRange(startNode, startOffset, endNode, endOffset);
+      }
+    });
+    this.update(_emitter4.default.sources.SILENT);
+  }
+
+  _createClass(Selection, [{
+    key: 'handleComposition',
+    value: function handleComposition() {
+      var _this2 = this;
+
+      this.root.addEventListener('compositionstart', function () {
+        _this2.composing = true;
+      });
+      this.root.addEventListener('compositionend', function () {
+        _this2.composing = false;
+        if (_this2.cursor.parent) {
+          var range = _this2.cursor.restore();
+          if (!range) return;
+          setTimeout(function () {
+            _this2.setNativeRange(range.startNode, range.startOffset, range.endNode, range.endOffset);
+          }, 1);
+        }
+      });
+    }
+  }, {
+    key: 'handleDragging',
+    value: function handleDragging() {
+      var _this3 = this;
+
+      this.emitter.listenDOM('mousedown', document.body, function () {
+        _this3.mouseDown = true;
+      });
+      this.emitter.listenDOM('mouseup', document.body, function () {
+        _this3.mouseDown = false;
+        _this3.update(_emitter4.default.sources.USER);
+      });
+    }
+  }, {
+    key: 'focus',
+    value: function focus() {
+      if (this.hasFocus()) return;
+      this.root.focus();
+      this.setRange(this.savedRange);
+    }
+  }, {
+    key: 'format',
+    value: function format(_format, value) {
+      if (this.scroll.whitelist != null && !this.scroll.whitelist[_format]) return;
+      this.scroll.update();
+      var nativeRange = this.getNativeRange();
+      if (nativeRange == null || !nativeRange.native.collapsed || _parchment2.default.query(_format, _parchment2.default.Scope.BLOCK)) return;
+      if (nativeRange.start.node !== this.cursor.textNode) {
+        var blot = _parchment2.default.find(nativeRange.start.node, false);
+        if (blot == null) return;
+        // TODO Give blot ability to not split
+        if (blot instanceof _parchment2.default.Leaf) {
+          var after = blot.split(nativeRange.start.offset);
+          blot.parent.insertBefore(this.cursor, after);
+        } else {
+          blot.insertBefore(this.cursor, nativeRange.start.node); // Should never happen
+        }
+        this.cursor.attach();
+      }
+      this.cursor.format(_format, value);
+      this.scroll.optimize();
+      this.setNativeRange(this.cursor.textNode, this.cursor.textNode.data.length);
+      this.update();
+    }
+  }, {
+    key: 'getBounds',
+    value: function getBounds(index) {
+      var length = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
+
+      var scrollLength = this.scroll.length();
+      index = Math.min(index, scrollLength - 1);
+      length = Math.min(index + length, scrollLength - 1) - index;
+      var node = void 0,
+          _scroll$leaf = this.scroll.leaf(index),
+          _scroll$leaf2 = _slicedToArray(_scroll$leaf, 2),
+          leaf = _scroll$leaf2[0],
+          offset = _scroll$leaf2[1];
+      if (leaf == null) return null;
+
+      var _leaf$position = leaf.position(offset, true);
+
+      var _leaf$position2 = _slicedToArray(_leaf$position, 2);
+
+      node = _leaf$position2[0];
+      offset = _leaf$position2[1];
+
+      var range = document.createRange();
+      if (length > 0) {
+        range.setStart(node, offset);
+
+        var _scroll$leaf3 = this.scroll.leaf(index + length);
+
+        var _scroll$leaf4 = _slicedToArray(_scroll$leaf3, 2);
+
+        leaf = _scroll$leaf4[0];
+        offset = _scroll$leaf4[1];
+
+        if (leaf == null) return null;
+
+        var _leaf$position3 = leaf.position(offset, true);
+
+        var _leaf$position4 = _slicedToArray(_leaf$position3, 2);
+
+        node = _leaf$position4[0];
+        offset = _leaf$position4[1];
+
+        range.setEnd(node, offset);
+        return range.getBoundingClientRect();
+      } else {
+        var side = 'left';
+        var rect = void 0;
+        if (node instanceof Text) {
+          if (offset < node.data.length) {
+            range.setStart(node, offset);
+            range.setEnd(node, offset + 1);
+          } else {
+            range.setStart(node, offset - 1);
+            range.setEnd(node, offset);
+            side = 'right';
+          }
+          rect = range.getBoundingClientRect();
+        } else {
+          rect = leaf.domNode.getBoundingClientRect();
+          if (offset > 0) side = 'right';
+        }
+        return {
+          bottom: rect.top + rect.height,
+          height: rect.height,
+          left: rect[side],
+          right: rect[side],
+          top: rect.top,
+          width: 0
+        };
+      }
+    }
+  }, {
+    key: 'getNativeRange',
+    value: function getNativeRange() {
+      var selection = document.getSelection();
+      if (selection == null || selection.rangeCount <= 0) return null;
+      var nativeRange = selection.getRangeAt(0);
+      if (nativeRange == null) return null;
+      var range = this.normalizeNative(nativeRange);
+      debug.info('getNativeRange', range);
+      return range;
+    }
+  }, {
+    key: 'getRange',
+    value: function getRange() {
+      var normalized = this.getNativeRange();
+      if (normalized == null) return [null, null];
+      var range = this.normalizedToRange(normalized);
+      return [range, normalized];
+    }
+  }, {
+    key: 'hasFocus',
+    value: function hasFocus() {
+      return document.activeElement === this.root;
+    }
+  }, {
+    key: 'normalizedToRange',
+    value: function normalizedToRange(range) {
+      var _this4 = this;
+
+      var positions = [[range.start.node, range.start.offset]];
+      if (!range.native.collapsed) {
+        positions.push([range.end.node, range.end.offset]);
+      }
+      var indexes = positions.map(function (position) {
+        var _position = _slicedToArray(position, 2),
+            node = _position[0],
+            offset = _position[1];
+
+        var blot = _parchment2.default.find(node, true);
+        var index = blot.offset(_this4.scroll);
+        if (offset === 0) {
+          return index;
+        } else if (blot instanceof _parchment2.default.Container) {
+          return index + blot.length();
+        } else {
+          return index + blot.index(node, offset);
+        }
+      });
+      var end = Math.min(Math.max.apply(Math, _toConsumableArray(indexes)), this.scroll.length() - 1);
+      var start = Math.min.apply(Math, [end].concat(_toConsumableArray(indexes)));
+      return new Range(start, end - start);
+    }
+  }, {
+    key: 'normalizeNative',
+    value: function normalizeNative(nativeRange) {
+      if (!contains(this.root, nativeRange.startContainer) || !nativeRange.collapsed && !contains(this.root, nativeRange.endContainer)) {
+        return null;
+      }
+      var range = {
+        start: { node: nativeRange.startContainer, offset: nativeRange.startOffset },
+        end: { node: nativeRange.endContainer, offset: nativeRange.endOffset },
+        native: nativeRange
+      };
+      [range.start, range.end].forEach(function (position) {
+        var node = position.node,
+            offset = position.offset;
+        while (!(node instanceof Text) && node.childNodes.length > 0) {
+          if (node.childNodes.length > offset) {
+            node = node.childNodes[offset];
+            offset = 0;
+          } else if (node.childNodes.length === offset) {
+            node = node.lastChild;
+            offset = node instanceof Text ? node.data.length : node.childNodes.length + 1;
+          } else {
+            break;
+          }
+        }
+        position.node = node, position.offset = offset;
+      });
+      return range;
+    }
+  }, {
+    key: 'rangeToNative',
+    value: function rangeToNative(range) {
+      var _this5 = this;
+
+      var indexes = range.collapsed ? [range.index] : [range.index, range.index + range.length];
+      var args = [];
+      var scrollLength = this.scroll.length();
+      indexes.forEach(function (index, i) {
+        index = Math.min(scrollLength - 1, index);
+        var node = void 0,
+            _scroll$leaf5 = _this5.scroll.leaf(index),
+            _scroll$leaf6 = _slicedToArray(_scroll$leaf5, 2),
+            leaf = _scroll$leaf6[0],
+            offset = _scroll$leaf6[1];
+        var _leaf$position5 = leaf.position(offset, i !== 0);
+
+        var _leaf$position6 = _slicedToArray(_leaf$position5, 2);
+
+        node = _leaf$position6[0];
+        offset = _leaf$position6[1];
+
+        args.push(node, offset);
+      });
+      if (args.length < 2) {
+        args = args.concat(args);
+      }
+      return args;
+    }
+  }, {
+    key: 'scrollIntoView',
+    value: function scrollIntoView(scrollingContainer) {
+      var range = this.lastRange;
+      if (range == null) return;
+      var bounds = this.getBounds(range.index, range.length);
+      if (bounds == null) return;
+      var limit = this.scroll.length() - 1;
+
+      var _scroll$line = this.scroll.line(Math.min(range.index, limit)),
+          _scroll$line2 = _slicedToArray(_scroll$line, 1),
+          first = _scroll$line2[0];
+
+      var last = first;
+      if (range.length > 0) {
+        var _scroll$line3 = this.scroll.line(Math.min(range.index + range.length, limit));
+
+        var _scroll$line4 = _slicedToArray(_scroll$line3, 1);
+
+        last = _scroll$line4[0];
+      }
+      if (first == null || last == null) return;
+      var scrollBounds = scrollingContainer.getBoundingClientRect();
+      if (bounds.top < scrollBounds.top) {
+        scrollingContainer.scrollTop -= scrollBounds.top - bounds.top;
+      } else if (bounds.bottom > scrollBounds.bottom) {
+        scrollingContainer.scrollTop += bounds.bottom - scrollBounds.bottom;
+      }
+    }
+  }, {
+    key: 'setNativeRange',
+    value: function setNativeRange(startNode, startOffset) {
+      var endNode = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : startNode;
+      var endOffset = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : startOffset;
+      var force = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;
+
+      debug.info('setNativeRange', startNode, startOffset, endNode, endOffset);
+      if (startNode != null && (this.root.parentNode == null || startNode.parentNode == null || endNode.parentNode == null)) {
+        return;
+      }
+      var selection = document.getSelection();
+      if (selection == null) return;
+      if (startNode != null) {
+        if (!this.hasFocus()) this.root.focus();
+        var native = (this.getNativeRange() || {}).native;
+        if (native == null || force || startNode !== native.startContainer || startOffset !== native.startOffset || endNode !== native.endContainer || endOffset !== native.endOffset) {
+
+          if (startNode.tagName == "BR") {
+            startOffset = [].indexOf.call(startNode.parentNode.childNodes, startNode);
+            startNode = startNode.parentNode;
+          }
+          if (endNode.tagName == "BR") {
+            endOffset = [].indexOf.call(endNode.parentNode.childNodes, endNode);
+            endNode = endNode.parentNode;
+          }
+          var range = document.createRange();
+          range.setStart(startNode, startOffset);
+          range.setEnd(endNode, endOffset);
+          selection.removeAllRanges();
+          selection.addRange(range);
+        }
+      } else {
+        selection.removeAllRanges();
+        this.root.blur();
+        document.body.focus(); // root.blur() not enough on IE11+Travis+SauceLabs (but not local VMs)
+      }
+    }
+  }, {
+    key: 'setRange',
+    value: function setRange(range) {
+      var force = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
+      var source = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : _emitter4.default.sources.API;
+
+      if (typeof force === 'string') {
+        source = force;
+        force = false;
+      }
+      debug.info('setRange', range);
+      if (range != null) {
+        var args = this.rangeToNative(range);
+        this.setNativeRange.apply(this, _toConsumableArray(args).concat([force]));
+      } else {
+        this.setNativeRange(null);
+      }
+      this.update(source);
+    }
+  }, {
+    key: 'update',
+    value: function update() {
+      var source = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _emitter4.default.sources.USER;
+
+      var oldRange = this.lastRange;
+
+      var _getRange = this.getRange(),
+          _getRange2 = _slicedToArray(_getRange, 2),
+          lastRange = _getRange2[0],
+          nativeRange = _getRange2[1];
+
+      this.lastRange = lastRange;
+      if (this.lastRange != null) {
+        this.savedRange = this.lastRange;
+      }
+      if (!(0, _deepEqual2.default)(oldRange, this.lastRange)) {
+        var _emitter;
+
+        if (!this.composing && nativeRange != null && nativeRange.native.collapsed && nativeRange.start.node !== this.cursor.textNode) {
+          this.cursor.restore();
+        }
+        var args = [_emitter4.default.events.SELECTION_CHANGE, (0, _clone2.default)(this.lastRange), (0, _clone2.default)(oldRange), source];
+        (_emitter = this.emitter).emit.apply(_emitter, [_emitter4.default.events.EDITOR_CHANGE].concat(args));
+        if (source !== _emitter4.default.sources.SILENT) {
+          var _emitter2;
+
+          (_emitter2 = this.emitter).emit.apply(_emitter2, args);
+        }
+      }
+    }
+  }]);
+
+  return Selection;
+}();
+
+function contains(parent, descendant) {
+  try {
+    // Firefox inserts inaccessible nodes around video elements
+    descendant.parentNode;
+  } catch (e) {
+    return false;
+  }
+  // IE11 has bug with Text nodes
+  // https://connect.microsoft.com/IE/feedback/details/780874/node-contains-is-incorrect
+  if (descendant instanceof Text) {
+    descendant = descendant.parentNode;
+  }
+  return parent.contains(descendant);
+}
+
+exports.Range = Range;
+exports.default = Selection;
+
+/***/ }),
+/* 16 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };
+
+var _parchment = __webpack_require__(0);
+
+var _parchment2 = _interopRequireDefault(_parchment);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+var Break = function (_Parchment$Embed) {
+  _inherits(Break, _Parchment$Embed);
+
+  function Break() {
+    _classCallCheck(this, Break);
+
+    return _possibleConstructorReturn(this, (Break.__proto__ || Object.getPrototypeOf(Break)).apply(this, arguments));
+  }
+
+  _createClass(Break, [{
+    key: 'insertInto',
+    value: function insertInto(parent, ref) {
+      if (parent.children.length === 0) {
+        _get(Break.prototype.__proto__ || Object.getPrototypeOf(Break.prototype), 'insertInto', this).call(this, parent, ref);
+      } else {
+        this.remove();
+      }
+    }
+  }, {
+    key: 'length',
+    value: function length() {
+      return 0;
+    }
+  }, {
+    key: 'value',
+    value: function value() {
+      return '';
+    }
+  }], [{
+    key: 'value',
+    value: function value() {
+      return undefined;
+    }
+  }]);
+
+  return Break;
+}(_parchment2.default.Embed);
+
+Break.blotName = 'break';
+Break.tagName = 'BR';
+
+exports.default = Break;
+
+/***/ }),
+/* 17 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+var __extends = (this && this.__extends) || (function () {
+    var extendStatics = Object.setPrototypeOf ||
+        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
+        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
+    return function (d, b) {
+        extendStatics(d, b);
+        function __() { this.constructor = d; }
+        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+    };
+})();
+Object.defineProperty(exports, "__esModule", { value: true });
+var linked_list_1 = __webpack_require__(44);
+var shadow_1 = __webpack_require__(30);
+var Registry = __webpack_require__(1);
+var ContainerBlot = /** @class */ (function (_super) {
+    __extends(ContainerBlot, _super);
+    function ContainerBlot(domNode) {
+        var _this = _super.call(this, domNode) || this;
+        _this.build();
+        return _this;
+    }
+    ContainerBlot.prototype.appendChild = function (other) {
+        this.insertBefore(other);
+    };
+    ContainerBlot.prototype.attach = function () {
+        _super.prototype.attach.call(this);
+        this.children.forEach(function (child) {
+            child.attach();
+        });
+    };
+    ContainerBlot.prototype.build = function () {
+        var _this = this;
+        this.children = new linked_list_1.default();
+        // Need to be reversed for if DOM nodes already in order
+        [].slice
+            .call(this.domNode.childNodes)
+            .reverse()
+            .forEach(function (node) {
+            try {
+                var child = makeBlot(node);
+                _this.insertBefore(child, _this.children.head || undefined);
+            }
+            catch (err) {
+                if (err instanceof Registry.ParchmentError)
+                    return;
+                else
+                    throw err;
+            }
+        });
+    };
+    ContainerBlot.prototype.deleteAt = function (index, length) {
+        if (index === 0 && length === this.length()) {
+            return this.remove();
+        }
+        this.children.forEachAt(index, length, function (child, offset, length) {
+            child.deleteAt(offset, length);
+        });
+    };
+    ContainerBlot.prototype.descendant = function (criteria, index) {
+        var _a = this.children.find(index), child = _a[0], offset = _a[1];
+        if ((criteria.blotName == null && criteria(child)) ||
+            (criteria.blotName != null && child instanceof criteria)) {
+            return [child, offset];
+        }
+        else if (child instanceof ContainerBlot) {
+            return child.descendant(criteria, offset);
+        }
+        else {
+            return [null, -1];
+        }
+    };
+    ContainerBlot.prototype.descendants = function (criteria, index, length) {
+        if (index === void 0) { index = 0; }
+        if (length === void 0) { length = Number.MAX_VALUE; }
+        var descendants = [];
+        var lengthLeft = length;
+        this.children.forEachAt(index, length, function (child, index, length) {
+            if ((criteria.blotName == null && criteria(child)) ||
+                (criteria.blotName != null && child instanceof criteria)) {
+                descendants.push(child);
+            }
+            if (child instanceof ContainerBlot) {
+                descendants = descendants.concat(child.descendants(criteria, index, lengthLeft));
+            }
+            lengthLeft -= length;
+        });
+        return descendants;
+    };
+    ContainerBlot.prototype.detach = function () {
+        this.children.forEach(function (child) {
+            child.detach();
+        });
+        _super.prototype.detach.call(this);
+    };
+    ContainerBlot.prototype.formatAt = function (index, length, name, value) {
+        this.children.forEachAt(index, length, function (child, offset, length) {
+            child.formatAt(offset, length, name, value);
+        });
+    };
+    ContainerBlot.prototype.insertAt = function (index, value, def) {
+        var _a = this.children.find(index), child = _a[0], offset = _a[1];
+        if (child) {
+            child.insertAt(offset, value, def);
+        }
+        else {
+            var blot = def == null ? Registry.create('text', value) : Registry.create(value, def);
+            this.appendChild(blot);
+        }
+    };
+    ContainerBlot.prototype.insertBefore = function (childBlot, refBlot) {
+        if (this.statics.allowedChildren != null &&
+            !this.statics.allowedChildren.some(function (child) {
+                return childBlot instanceof child;
+            })) {
+            throw new Registry.ParchmentError("Cannot insert " + childBlot.statics.blotName + " into " + this.statics.blotName);
+        }
+        childBlot.insertInto(this, refBlot);
+    };
+    ContainerBlot.prototype.length = function () {
+        return this.children.reduce(function (memo, child) {
+            return memo + child.length();
+        }, 0);
+    };
+    ContainerBlot.prototype.moveChildren = function (targetParent, refNode) {
+        this.children.forEach(function (child) {
+            targetParent.insertBefore(child, refNode);
+        });
+    };
+    ContainerBlot.prototype.optimize = function (context) {
+        _super.prototype.optimize.call(this, context);
+        if (this.children.length === 0) {
+            if (this.statics.defaultChild != null) {
+                var child = Registry.create(this.statics.defaultChild);
+                this.appendChild(child);
+                child.optimize(context);
+            }
+            else {
+                this.remove();
+            }
+        }
+    };
+    ContainerBlot.prototype.path = function (index, inclusive) {
+        if (inclusive === void 0) { inclusive = false; }
+        var _a = this.children.find(index, inclusive), child = _a[0], offset = _a[1];
+        var position = [[this, index]];
+        if (child instanceof ContainerBlot) {
+            return position.concat(child.path(offset, inclusive));
+        }
+        else if (child != null) {
+            position.push([child, offset]);
+        }
+        return position;
+    };
+    ContainerBlot.prototype.removeChild = function (child) {
+        this.children.remove(child);
+    };
+    ContainerBlot.prototype.replace = function (target) {
+        if (target instanceof ContainerBlot) {
+            target.moveChildren(this);
+        }
+        _super.prototype.replace.call(this, target);
+    };
+    ContainerBlot.prototype.split = function (index, force) {
+        if (force === void 0) { force = false; }
+        if (!force) {
+            if (index === 0)
+                return this;
+            if (index === this.length())
+                return this.next;
+        }
+        var after = this.clone();
+        this.parent.insertBefore(after, this.next);
+        this.children.forEachAt(index, this.length(), function (child, offset, length) {
+            child = child.split(offset, force);
+            after.appendChild(child);
+        });
+        return after;
+    };
+    ContainerBlot.prototype.unwrap = function () {
+        this.moveChildren(this.parent, this.next);
+        this.remove();
+    };
+    ContainerBlot.prototype.update = function (mutations, context) {
+        var _this = this;
+        var addedNodes = [];
+        var removedNodes = [];
+        mutations.forEach(function (mutation) {
+            if (mutation.target === _this.domNode && mutation.type === 'childList') {
+                addedNodes.push.apply(addedNodes, mutation.addedNodes);
+                removedNodes.push.apply(removedNodes, mutation.removedNodes);
+            }
+        });
+        removedNodes.forEach(function (node) {
+            // Check node has actually been removed
+            // One exception is Chrome does not immediately remove IFRAMEs
+            // from DOM but MutationRecord is correct in its reported removal
+            if (node.parentNode != null &&
+                // @ts-ignore
+                node.tagName !== 'IFRAME' &&
+                document.body.compareDocumentPosition(node) & Node.DOCUMENT_POSITION_CONTAINED_BY) {
+                return;
+            }
+            var blot = Registry.find(node);
+            if (blot == null)
+                return;
+            if (blot.domNode.parentNode == null || blot.domNode.parentNode === _this.domNode) {
+                blot.detach();
+            }
+        });
+        addedNodes
+            .filter(function (node) {
+            return node.parentNode == _this.domNode;
+        })
+            .sort(function (a, b) {
+            if (a === b)
+                return 0;
+            if (a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_FOLLOWING) {
+                return 1;
+            }
+            return -1;
+        })
+            .forEach(function (node) {
+            var refBlot = null;
+            if (node.nextSibling != null) {
+                refBlot = Registry.find(node.nextSibling);
+            }
+            var blot = makeBlot(node);
+            if (blot.next != refBlot || blot.next == null) {
+                if (blot.parent != null) {
+                    blot.parent.removeChild(_this);
+                }
+                _this.insertBefore(blot, refBlot || undefined);
+            }
+        });
+    };
+    return ContainerBlot;
+}(shadow_1.default));
+function makeBlot(node) {
+    var blot = Registry.find(node);
+    if (blot == null) {
+        try {
+            blot = Registry.create(node);
+        }
+        catch (e) {
+            blot = Registry.create(Registry.Scope.INLINE);
+            [].slice.call(node.childNodes).forEach(function (child) {
+                // @ts-ignore
+                blot.domNode.appendChild(child);
+            });
+            if (node.parentNode) {
+                node.parentNode.replaceChild(blot.domNode, node);
+            }
+            blot.attach();
+        }
+    }
+    return blot;
+}
+exports.default = ContainerBlot;
+
+
+/***/ }),
+/* 18 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+var __extends = (this && this.__extends) || (function () {
+    var extendStatics = Object.setPrototypeOf ||
+        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
+        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
+    return function (d, b) {
+        extendStatics(d, b);
+        function __() { this.constructor = d; }
+        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+    };
+})();
+Object.defineProperty(exports, "__esModule", { value: true });
+var attributor_1 = __webpack_require__(12);
+var store_1 = __webpack_require__(31);
+var container_1 = __webpack_require__(17);
+var Registry = __webpack_require__(1);
+var FormatBlot = /** @class */ (function (_super) {
+    __extends(FormatBlot, _super);
+    function FormatBlot(domNode) {
+        var _this = _super.call(this, domNode) || this;
+        _this.attributes = new store_1.default(_this.domNode);
+        return _this;
+    }
+    FormatBlot.formats = function (domNode) {
+        if (typeof this.tagName === 'string') {
+            return true;
+        }
+        else if (Array.isArray(this.tagName)) {
+            return domNode.tagName.toLowerCase();
+        }
+        return undefined;
+    };
+    FormatBlot.prototype.format = function (name, value) {
+        var format = Registry.query(name);
+        if (format instanceof attributor_1.default) {
+            this.attributes.attribute(format, value);
+        }
+        else if (value) {
+            if (format != null && (name !== this.statics.blotName || this.formats()[name] !== value)) {
+                this.replaceWith(name, value);
+            }
+        }
+    };
+    FormatBlot.prototype.formats = function () {
+        var formats = this.attributes.values();
+        var format = this.statics.formats(this.domNode);
+        if (format != null) {
+            formats[this.statics.blotName] = format;
+        }
+        return formats;
+    };
+    FormatBlot.prototype.replaceWith = function (name, value) {
+        var replacement = _super.prototype.replaceWith.call(this, name, value);
+        this.attributes.copy(replacement);
+        return replacement;
+    };
+    FormatBlot.prototype.update = function (mutations, context) {
+        var _this = this;
+        _super.prototype.update.call(this, mutations, context);
+        if (mutations.some(function (mutation) {
+            return mutation.target === _this.domNode && mutation.type === 'attributes';
+        })) {
+            this.attributes.build();
+        }
+    };
+    FormatBlot.prototype.wrap = function (name, value) {
+        var wrapper = _super.prototype.wrap.call(this, name, value);
+        if (wrapper instanceof FormatBlot && wrapper.statics.scope === this.statics.scope) {
+            this.attributes.move(wrapper);
+        }
+        return wrapper;
+    };
+    return FormatBlot;
+}(container_1.default));
+exports.default = FormatBlot;
+
+
+/***/ }),
+/* 19 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+var __extends = (this && this.__extends) || (function () {
+    var extendStatics = Object.setPrototypeOf ||
+        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
+        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
+    return function (d, b) {
+        extendStatics(d, b);
+        function __() { this.constructor = d; }
+        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+    };
+})();
+Object.defineProperty(exports, "__esModule", { value: true });
+var shadow_1 = __webpack_require__(30);
+var Registry = __webpack_require__(1);
+var LeafBlot = /** @class */ (function (_super) {
+    __extends(LeafBlot, _super);
+    function LeafBlot() {
+        return _super !== null && _super.apply(this, arguments) || this;
+    }
+    LeafBlot.value = function (domNode) {
+        return true;
+    };
+    LeafBlot.prototype.index = function (node, offset) {
+        if (this.domNode === node ||
+            this.domNode.compareDocumentPosition(node) & Node.DOCUMENT_POSITION_CONTAINED_BY) {
+            return Math.min(offset, 1);
+        }
+        return -1;
+    };
+    LeafBlot.prototype.position = function (index, inclusive) {
+        var offset = [].indexOf.call(this.parent.domNode.childNodes, this.domNode);
+        if (index > 0)
+            offset += 1;
+        return [this.parent.domNode, offset];
+    };
+    LeafBlot.prototype.value = function () {
+        return _a = {}, _a[this.statics.blotName] = this.statics.value(this.domNode) || true, _a;
+        var _a;
+    };
+    LeafBlot.scope = Registry.Scope.INLINE_BLOT;
+    return LeafBlot;
+}(shadow_1.default));
+exports.default = LeafBlot;
+
+
+/***/ }),
+/* 20 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var equal = __webpack_require__(11);
+var extend = __webpack_require__(3);
+
+
+var lib = {
+  attributes: {
+    compose: function (a, b, keepNull) {
+      if (typeof a !== 'object') a = {};
+      if (typeof b !== 'object') b = {};
+      var attributes = extend(true, {}, b);
+      if (!keepNull) {
+        attributes = Object.keys(attributes).reduce(function (copy, key) {
+          if (attributes[key] != null) {
+            copy[key] = attributes[key];
+          }
+          return copy;
+        }, {});
+      }
+      for (var key in a) {
+        if (a[key] !== undefined && b[key] === undefined) {
+          attributes[key] = a[key];
+        }
+      }
+      return Object.keys(attributes).length > 0 ? attributes : undefined;
+    },
+
+    diff: function(a, b) {
+      if (typeof a !== 'object') a = {};
+      if (typeof b !== 'object') b = {};
+      var attributes = Object.keys(a).concat(Object.keys(b)).reduce(function (attributes, key) {
+        if (!equal(a[key], b[key])) {
+          attributes[key] = b[key] === undefined ? null : b[key];
+        }
+        return attributes;
+      }, {});
+      return Object.keys(attributes).length > 0 ? attributes : undefined;
+    },
+
+    transform: function (a, b, priority) {
+      if (typeof a !== 'object') return b;
+      if (typeof b !== 'object') return undefined;
+      if (!priority) return b;  // b simply overwrites us without priority
+      var attributes = Object.keys(b).reduce(function (attributes, key) {
+        if (a[key] === undefined) attributes[key] = b[key];  // null is a valid value
+        return attributes;
+      }, {});
+      return Object.keys(attributes).length > 0 ? attributes : undefined;
+    }
+  },
+
+  iterator: function (ops) {
+    return new Iterator(ops);
+  },
+
+  length: function (op) {
+    if (typeof op['delete'] === 'number') {
+      return op['delete'];
+    } else if (typeof op.retain === 'number') {
+      return op.retain;
+    } else {
+      return typeof op.insert === 'string' ? op.insert.length : 1;
+    }
+  }
+};
+
+
+function Iterator(ops) {
+  this.ops = ops;
+  this.index = 0;
+  this.offset = 0;
+};
+
+Iterator.prototype.hasNext = function () {
+  return this.peekLength() < Infinity;
+};
+
+Iterator.prototype.next = function (length) {
+  if (!length) length = Infinity;
+  var nextOp = this.ops[this.index];
+  if (nextOp) {
+    var offset = this.offset;
+    var opLength = lib.length(nextOp)
+    if (length >= opLength - offset) {
+      length = opLength - offset;
+      this.index += 1;
+      this.offset = 0;
+    } else {
+      this.offset += length;
+    }
+    if (typeof nextOp['delete'] === 'number') {
+      return { 'delete': length };
+    } else {
+      var retOp = {};
+      if (nextOp.attributes) {
+        retOp.attributes = nextOp.attributes;
+      }
+      if (typeof nextOp.retain === 'number') {
+        retOp.retain = length;
+      } else if (typeof nextOp.insert === 'string') {
+        retOp.insert = nextOp.insert.substr(offset, length);
+      } else {
+        // offset should === 0, length should === 1
+        retOp.insert = nextOp.insert;
+      }
+      return retOp;
+    }
+  } else {
+    return { retain: Infinity };
+  }
+};
+
+Iterator.prototype.peek = function () {
+  return this.ops[this.index];
+};
+
+Iterator.prototype.peekLength = function () {
+  if (this.ops[this.index]) {
+    // Should never return 0 if our index is being managed correctly
+    return lib.length(this.ops[this.index]) - this.offset;
+  } else {
+    return Infinity;
+  }
+};
+
+Iterator.prototype.peekType = function () {
+  if (this.ops[this.index]) {
+    if (typeof this.ops[this.index]['delete'] === 'number') {
+      return 'delete';
+    } else if (typeof this.ops[this.index].retain === 'number') {
+      return 'retain';
+    } else {
+      return 'insert';
+    }
+  }
+  return 'retain';
+};
+
+
+module.exports = lib;
+
+
+/***/ }),
+/* 21 */
+/***/ (function(module, exports) {
+
+var clone = (function() {
+'use strict';
+
+function _instanceof(obj, type) {
+  return type != null && obj instanceof type;
+}
+
+var nativeMap;
+try {
+  nativeMap = Map;
+} catch(_) {
+  // maybe a reference error because no `Map`. Give it a dummy value that no
+  // value will ever be an instanceof.
+  nativeMap = function() {};
+}
+
+var nativeSet;
+try {
+  nativeSet = Set;
+} catch(_) {
+  nativeSet = function() {};
+}
+
+var nativePromise;
+try {
+  nativePromise = Promise;
+} catch(_) {
+  nativePromise = function() {};
+}
+
+/**
+ * Clones (copies) an Object using deep copying.
+ *
+ * This function supports circular references by default, but if you are certain
+ * there are no circular references in your object, you can save some CPU time
+ * by calling clone(obj, false).
+ *
+ * Caution: if `circular` is false and `parent` contains circular references,
+ * your program may enter an infinite loop and crash.
+ *
+ * @param `parent` - the object to be cloned
+ * @param `circular` - set to true if the object to be cloned may contain
+ *    circular references. (optional - true by default)
+ * @param `depth` - set to a number if the object is only to be cloned to
+ *    a particular depth. (optional - defaults to Infinity)
+ * @param `prototype` - sets the prototype to be used when cloning an object.
+ *    (optional - defaults to parent prototype).
+ * @param `includeNonEnumerable` - set to true if the non-enumerable properties
+ *    should be cloned as well. Non-enumerable properties on the prototype
+ *    chain will be ignored. (optional - false by default)
+*/
+function clone(parent, circular, depth, prototype, includeNonEnumerable) {
+  if (typeof circular === 'object') {
+    depth = circular.depth;
+    prototype = circular.prototype;
+    includeNonEnumerable = circular.includeNonEnumerable;
+    circular = circular.circular;
+  }
+  // maintain two arrays for circular references, where corresponding parents
+  // and children have the same index
+  var allParents = [];
+  var allChildren = [];
+
+  var useBuffer = typeof Buffer != 'undefined';
+
+  if (typeof circular == 'undefined')
+    circular = true;
+
+  if (typeof depth == 'undefined')
+    depth = Infinity;
+
+  // recurse this function so we don't reset allParents and allChildren
+  function _clone(parent, depth) {
+    // cloning null always returns null
+    if (parent === null)
+      return null;
+
+    if (depth === 0)
+      return parent;
+
+    var child;
+    var proto;
+    if (typeof parent != 'object') {
+      return parent;
+    }
+
+    if (_instanceof(parent, nativeMap)) {
+      child = new nativeMap();
+    } else if (_instanceof(parent, nativeSet)) {
+      child = new nativeSet();
+    } else if (_instanceof(parent, nativePromise)) {
+      child = new nativePromise(function (resolve, reject) {
+        parent.then(function(value) {
+          resolve(_clone(value, depth - 1));
+        }, function(err) {
+          reject(_clone(err, depth - 1));
+        });
+      });
+    } else if (clone.__isArray(parent)) {
+      child = [];
+    } else if (clone.__isRegExp(parent)) {
+      child = new RegExp(parent.source, __getRegExpFlags(parent));
+      if (parent.lastIndex) child.lastIndex = parent.lastIndex;
+    } else if (clone.__isDate(parent)) {
+      child = new Date(parent.getTime());
+    } else if (useBuffer && Buffer.isBuffer(parent)) {
+      child = new Buffer(parent.length);
+      parent.copy(child);
+      return child;
+    } else if (_instanceof(parent, Error)) {
+      child = Object.create(parent);
+    } else {
+      if (typeof prototype == 'undefined') {
+        proto = Object.getPrototypeOf(parent);
+        child = Object.create(proto);
+      }
+      else {
+        child = Object.create(prototype);
+        proto = prototype;
+      }
+    }
+
+    if (circular) {
+      var index = allParents.indexOf(parent);
+
+      if (index != -1) {
+        return allChildren[index];
+      }
+      allParents.push(parent);
+      allChildren.push(child);
+    }
+
+    if (_instanceof(parent, nativeMap)) {
+      parent.forEach(function(value, key) {
+        var keyChild = _clone(key, depth - 1);
+        var valueChild = _clone(value, depth - 1);
+        child.set(keyChild, valueChild);
+      });
+    }
+    if (_instanceof(parent, nativeSet)) {
+      parent.forEach(function(value) {
+        var entryChild = _clone(value, depth - 1);
+        child.add(entryChild);
+      });
+    }
+
+    for (var i in parent) {
+      var attrs;
+      if (proto) {
+        attrs = Object.getOwnPropertyDescriptor(proto, i);
+      }
+
+      if (attrs && attrs.set == null) {
+        continue;
+      }
+      child[i] = _clone(parent[i], depth - 1);
+    }
+
+    if (Object.getOwnPropertySymbols) {
+      var symbols = Object.getOwnPropertySymbols(parent);
+      for (var i = 0; i < symbols.length; i++) {
+        // Don't need to worry about cloning a symbol because it is a primitive,
+        // like a number or string.
+        var symbol = symbols[i];
+        var descriptor = Object.getOwnPropertyDescriptor(parent, symbol);
+        if (descriptor && !descriptor.enumerable && !includeNonEnumerable) {
+          continue;
+        }
+        child[symbol] = _clone(parent[symbol], depth - 1);
+        if (!descriptor.enumerable) {
+          Object.defineProperty(child, symbol, {
+            enumerable: false
+          });
+        }
+      }
+    }
+
+    if (includeNonEnumerable) {
+      var allPropertyNames = Object.getOwnPropertyNames(parent);
+      for (var i = 0; i < allPropertyNames.length; i++) {
+        var propertyName = allPropertyNames[i];
+        var descriptor = Object.getOwnPropertyDescriptor(parent, propertyName);
+        if (descriptor && descriptor.enumerable) {
+          continue;
+        }
+        child[propertyName] = _clone(parent[propertyName], depth - 1);
+        Object.defineProperty(child, propertyName, {
+          enumerable: false
+        });
+      }
+    }
+
+    return child;
+  }
+
+  return _clone(parent, depth);
+}
+
+/**
+ * Simple flat clone using prototype, accepts only objects, usefull for property
+ * override on FLAT configuration object (no nested props).
+ *
+ * USE WITH CAUTION! This may not behave as you wish if you do not know how this
+ * works.
+ */
+clone.clonePrototype = function clonePrototype(parent) {
+  if (parent === null)
+    return null;
+
+  var c = function () {};
+  c.prototype = parent;
+  return new c();
+};
+
+// private utility functions
+
+function __objToStr(o) {
+  return Object.prototype.toString.call(o);
+}
+clone.__objToStr = __objToStr;
+
+function __isDate(o) {
+  return typeof o === 'object' && __objToStr(o) === '[object Date]';
+}
+clone.__isDate = __isDate;
+
+function __isArray(o) {
+  return typeof o === 'object' && __objToStr(o) === '[object Array]';
+}
+clone.__isArray = __isArray;
+
+function __isRegExp(o) {
+  return typeof o === 'object' && __objToStr(o) === '[object RegExp]';
+}
+clone.__isRegExp = __isRegExp;
+
+function __getRegExpFlags(re) {
+  var flags = '';
+  if (re.global) flags += 'g';
+  if (re.ignoreCase) flags += 'i';
+  if (re.multiline) flags += 'm';
+  return flags;
+}
+clone.__getRegExpFlags = __getRegExpFlags;
+
+return clone;
+})();
+
+if (typeof module === 'object' && module.exports) {
+  module.exports = clone;
+}
+
+
+/***/ }),
+/* 22 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };
+
+var _parchment = __webpack_require__(0);
+
+var _parchment2 = _interopRequireDefault(_parchment);
+
+var _emitter = __webpack_require__(8);
+
+var _emitter2 = _interopRequireDefault(_emitter);
+
+var _block = __webpack_require__(4);
+
+var _block2 = _interopRequireDefault(_block);
+
+var _break = __webpack_require__(16);
+
+var _break2 = _interopRequireDefault(_break);
+
+var _code = __webpack_require__(13);
+
+var _code2 = _interopRequireDefault(_code);
+
+var _container = __webpack_require__(25);
+
+var _container2 = _interopRequireDefault(_container);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+function isLine(blot) {
+  return blot instanceof _block2.default || blot instanceof _block.BlockEmbed;
+}
+
+var Scroll = function (_Parchment$Scroll) {
+  _inherits(Scroll, _Parchment$Scroll);
+
+  function Scroll(domNode, config) {
+    _classCallCheck(this, Scroll);
+
+    var _this = _possibleConstructorReturn(this, (Scroll.__proto__ || Object.getPrototypeOf(Scroll)).call(this, domNode));
+
+    _this.emitter = config.emitter;
+    if (Array.isArray(config.whitelist)) {
+      _this.whitelist = config.whitelist.reduce(function (whitelist, format) {
+        whitelist[format] = true;
+        return whitelist;
+      }, {});
+    }
+    // Some reason fixes composition issues with character languages in Windows/Chrome, Safari
+    _this.domNode.addEventListener('DOMNodeInserted', function () {});
+    _this.optimize();
+    _this.enable();
+    return _this;
+  }
+
+  _createClass(Scroll, [{
+    key: 'batchStart',
+    value: function batchStart() {
+      this.batch = true;
+    }
+  }, {
+    key: 'batchEnd',
+    value: function batchEnd() {
+      this.batch = false;
+      this.optimize();
+    }
+  }, {
+    key: 'deleteAt',
+    value: function deleteAt(index, length) {
+      var _line = this.line(index),
+          _line2 = _slicedToArray(_line, 2),
+          first = _line2[0],
+          offset = _line2[1];
+
+      var _line3 = this.line(index + length),
+          _line4 = _slicedToArray(_line3, 1),
+          last = _line4[0];
+
+      _get(Scroll.prototype.__proto__ || Object.getPrototypeOf(Scroll.prototype), 'deleteAt', this).call(this, index, length);
+      if (last != null && first !== last && offset > 0) {
+        if (first instanceof _block.BlockEmbed || last instanceof _block.BlockEmbed) {
+          this.optimize();
+          return;
+        }
+        if (first instanceof _code2.default) {
+          var newlineIndex = first.newlineIndex(first.length(), true);
+          if (newlineIndex > -1) {
+            first = first.split(newlineIndex + 1);
+            if (first === last) {
+              this.optimize();
+              return;
+            }
+          }
+        } else if (last instanceof _code2.default) {
+          var _newlineIndex = last.newlineIndex(0);
+          if (_newlineIndex > -1) {
+            last.split(_newlineIndex + 1);
+          }
+        }
+        var ref = last.children.head instanceof _break2.default ? null : last.children.head;
+        first.moveChildren(last, ref);
+        first.remove();
+      }
+      this.optimize();
+    }
+  }, {
+    key: 'enable',
+    value: function enable() {
+      var enabled = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
+
+      this.domNode.setAttribute('contenteditable', enabled);
+    }
+  }, {
+    key: 'formatAt',
+    value: function formatAt(index, length, format, value) {
+      if (this.whitelist != null && !this.whitelist[format]) return;
+      _get(Scroll.prototype.__proto__ || Object.getPrototypeOf(Scroll.prototype), 'formatAt', this).call(this, index, length, format, value);
+      this.optimize();
+    }
+  }, {
+    key: 'insertAt',
+    value: function insertAt(index, value, def) {
+      if (def != null && this.whitelist != null && !this.whitelist[value]) return;
+      if (index >= this.length()) {
+        if (def == null || _parchment2.default.query(value, _parchment2.default.Scope.BLOCK) == null) {
+          var blot = _parchment2.default.create(this.statics.defaultChild);
+          this.appendChild(blot);
+          if (def == null && value.endsWith('\n')) {
+            value = value.slice(0, -1);
+          }
+          blot.insertAt(0, value, def);
+        } else {
+          var embed = _parchment2.default.create(value, def);
+          this.appendChild(embed);
+        }
+      } else {
+        _get(Scroll.prototype.__proto__ || Object.getPrototypeOf(Scroll.prototype), 'insertAt', this).call(this, index, value, def);
+      }
+      this.optimize();
+    }
+  }, {
+    key: 'insertBefore',
+    value: function insertBefore(blot, ref) {
+      if (blot.statics.scope === _parchment2.default.Scope.INLINE_BLOT) {
+        var wrapper = _parchment2.default.create(this.statics.defaultChild);
+        wrapper.appendChild(blot);
+        blot = wrapper;
+      }
+      _get(Scroll.prototype.__proto__ || Object.getPrototypeOf(Scroll.prototype), 'insertBefore', this).call(this, blot, ref);
+    }
+  }, {
+    key: 'leaf',
+    value: function leaf(index) {
+      return this.path(index).pop() || [null, -1];
+    }
+  }, {
+    key: 'line',
+    value: function line(index) {
+      if (index === this.length()) {
+        return this.line(index - 1);
+      }
+      return this.descendant(isLine, index);
+    }
+  }, {
+    key: 'lines',
+    value: function lines() {
+      var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
+      var length = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : Number.MAX_VALUE;
+
+      var getLines = function getLines(blot, index, length) {
+        var lines = [],
+            lengthLeft = length;
+        blot.children.forEachAt(index, length, function (child, index, length) {
+          if (isLine(child)) {
+            lines.push(child);
+          } else if (child instanceof _parchment2.default.Container) {
+            lines = lines.concat(getLines(child, index, lengthLeft));
+          }
+          lengthLeft -= length;
+        });
+        return lines;
+      };
+      return getLines(this, index, length);
+    }
+  }, {
+    key: 'optimize',
+    value: function optimize() {
+      var mutations = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
+      var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
+
+      if (this.batch === true) return;
+      _get(Scroll.prototype.__proto__ || Object.getPrototypeOf(Scroll.prototype), 'optimize', this).call(this, mutations, context);
+      if (mutations.length > 0) {
+        this.emitter.emit(_emitter2.default.events.SCROLL_OPTIMIZE, mutations, context);
+      }
+    }
+  }, {
+    key: 'path',
+    value: function path(index) {
+      return _get(Scroll.prototype.__proto__ || Object.getPrototypeOf(Scroll.prototype), 'path', this).call(this, index).slice(1); // Exclude self
+    }
+  }, {
+    key: 'update',
+    value: function update(mutations) {
+      if (this.batch === true) return;
+      var source = _emitter2.default.sources.USER;
+      if (typeof mutations === 'string') {
+        source = mutations;
+      }
+      if (!Array.isArray(mutations)) {
+        mutations = this.observer.takeRecords();
+      }
+      if (mutations.length > 0) {
+        this.emitter.emit(_emitter2.default.events.SCROLL_BEFORE_UPDATE, source, mutations);
+      }
+      _get(Scroll.prototype.__proto__ || Object.getPrototypeOf(Scroll.prototype), 'update', this).call(this, mutations.concat([])); // pass copy
+      if (mutations.length > 0) {
+        this.emitter.emit(_emitter2.default.events.SCROLL_UPDATE, source, mutations);
+      }
+    }
+  }]);
+
+  return Scroll;
+}(_parchment2.default.Scroll);
+
+Scroll.blotName = 'scroll';
+Scroll.className = 'ql-editor';
+Scroll.tagName = 'DIV';
+Scroll.defaultChild = 'block';
+Scroll.allowedChildren = [_block2.default, _block.BlockEmbed, _container2.default];
+
+exports.default = Scroll;
+
+/***/ }),
+/* 23 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.SHORTKEY = exports.default = undefined;
+
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
+
+var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+var _clone = __webpack_require__(21);
+
+var _clone2 = _interopRequireDefault(_clone);
+
+var _deepEqual = __webpack_require__(11);
+
+var _deepEqual2 = _interopRequireDefault(_deepEqual);
+
+var _extend = __webpack_require__(3);
+
+var _extend2 = _interopRequireDefault(_extend);
+
+var _quillDelta = __webpack_require__(2);
+
+var _quillDelta2 = _interopRequireDefault(_quillDelta);
+
+var _op = __webpack_require__(20);
+
+var _op2 = _interopRequireDefault(_op);
+
+var _parchment = __webpack_require__(0);
+
+var _parchment2 = _interopRequireDefault(_parchment);
+
+var _quill = __webpack_require__(5);
+
+var _quill2 = _interopRequireDefault(_quill);
+
+var _logger = __webpack_require__(10);
+
+var _logger2 = _interopRequireDefault(_logger);
+
+var _module = __webpack_require__(9);
+
+var _module2 = _interopRequireDefault(_module);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+var debug = (0, _logger2.default)('quill:keyboard');
+
+var SHORTKEY = /Mac/i.test(navigator.platform) ? 'metaKey' : 'ctrlKey';
+
+var Keyboard = function (_Module) {
+  _inherits(Keyboard, _Module);
+
+  _createClass(Keyboard, null, [{
+    key: 'match',
+    value: function match(evt, binding) {
+      binding = normalize(binding);
+      if (['altKey', 'ctrlKey', 'metaKey', 'shiftKey'].some(function (key) {
+        return !!binding[key] !== evt[key] && binding[key] !== null;
+      })) {
+        return false;
+      }
+      return binding.key === (evt.which || evt.keyCode);
+    }
+  }]);
+
+  function Keyboard(quill, options) {
+    _classCallCheck(this, Keyboard);
+
+    var _this = _possibleConstructorReturn(this, (Keyboard.__proto__ || Object.getPrototypeOf(Keyboard)).call(this, quill, options));
+
+    _this.bindings = {};
+    Object.keys(_this.options.bindings).forEach(function (name) {
+      if (name === 'list autofill' && quill.scroll.whitelist != null && !quill.scroll.whitelist['list']) {
+        return;
+      }
+      if (_this.options.bindings[name]) {
+        _this.addBinding(_this.options.bindings[name]);
+      }
+    });
+    _this.addBinding({ key: Keyboard.keys.ENTER, shiftKey: null }, handleEnter);
+    _this.addBinding({ key: Keyboard.keys.ENTER, metaKey: null, ctrlKey: null, altKey: null }, function () {});
+    if (/Firefox/i.test(navigator.userAgent)) {
+      // Need to handle delete and backspace for Firefox in the general case #1171
+      _this.addBinding({ key: Keyboard.keys.BACKSPACE }, { collapsed: true }, handleBackspace);
+      _this.addBinding({ key: Keyboard.keys.DELETE }, { collapsed: true }, handleDelete);
+    } else {
+      _this.addBinding({ key: Keyboard.keys.BACKSPACE }, { collapsed: true, prefix: /^.?$/ }, handleBackspace);
+      _this.addBinding({ key: Keyboard.keys.DELETE }, { collapsed: true, suffix: /^.?$/ }, handleDelete);
+    }
+    _this.addBinding({ key: Keyboard.keys.BACKSPACE }, { collapsed: false }, handleDeleteRange);
+    _this.addBinding({ key: Keyboard.keys.DELETE }, { collapsed: false }, handleDeleteRange);
+    _this.addBinding({ key: Keyboard.keys.BACKSPACE, altKey: null, ctrlKey: null, metaKey: null, shiftKey: null }, { collapsed: true, offset: 0 }, handleBackspace);
+    _this.listen();
+    return _this;
+  }
+
+  _createClass(Keyboard, [{
+    key: 'addBinding',
+    value: function addBinding(key) {
+      var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
+      var handler = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
+
+      var binding = normalize(key);
+      if (binding == null || binding.key == null) {
+        return debug.warn('Attempted to add invalid keyboard binding', binding);
+      }
+      if (typeof context === 'function') {
+        context = { handler: context };
+      }
+      if (typeof handler === 'function') {
+        handler = { handler: handler };
+      }
+      binding = (0, _extend2.default)(binding, context, handler);
+      this.bindings[binding.key] = this.bindings[binding.key] || [];
+      this.bindings[binding.key].push(binding);
+    }
+  }, {
+    key: 'listen',
+    value: function listen() {
+      var _this2 = this;
+
+      this.quill.root.addEventListener('keydown', function (evt) {
+        if (evt.defaultPrevented) return;
+        var which = evt.which || evt.keyCode;
+        var bindings = (_this2.bindings[which] || []).filter(function (binding) {
+          return Keyboard.match(evt, binding);
+        });
+        if (bindings.length === 0) return;
+        var range = _this2.quill.getSelection();
+        if (range == null || !_this2.quill.hasFocus()) return;
+
+        var _quill$getLine = _this2.quill.getLine(range.index),
+            _quill$getLine2 = _slicedToArray(_quill$getLine, 2),
+            line = _quill$getLine2[0],
+            offset = _quill$getLine2[1];
+
+        var _quill$getLeaf = _this2.quill.getLeaf(range.index),
+            _quill$getLeaf2 = _slicedToArray(_quill$getLeaf, 2),
+            leafStart = _quill$getLeaf2[0],
+            offsetStart = _quill$getLeaf2[1];
+
+        var _ref = range.length === 0 ? [leafStart, offsetStart] : _this2.quill.getLeaf(range.index + range.length),
+            _ref2 = _slicedToArray(_ref, 2),
+            leafEnd = _ref2[0],
+            offsetEnd = _ref2[1];
+
+        var prefixText = leafStart instanceof _parchment2.default.Text ? leafStart.value().slice(0, offsetStart) : '';
+        var suffixText = leafEnd instanceof _parchment2.default.Text ? leafEnd.value().slice(offsetEnd) : '';
+        var curContext = {
+          collapsed: range.length === 0,
+          empty: range.length === 0 && line.length() <= 1,
+          format: _this2.quill.getFormat(range),
+          offset: offset,
+          prefix: prefixText,
+          suffix: suffixText
+        };
+        var prevented = bindings.some(function (binding) {
+          if (binding.collapsed != null && binding.collapsed !== curContext.collapsed) return false;
+          if (binding.empty != null && binding.empty !== curContext.empty) return false;
+          if (binding.offset != null && binding.offset !== curContext.offset) return false;
+          if (Array.isArray(binding.format)) {
+            // any format is present
+            if (binding.format.every(function (name) {
+              return curContext.format[name] == null;
+            })) {
+              return false;
+            }
+          } else if (_typeof(binding.format) === 'object') {
+            // all formats must match
+            if (!Object.keys(binding.format).every(function (name) {
+              if (binding.format[name] === true) return curContext.format[name] != null;
+              if (binding.format[name] === false) return curContext.format[name] == null;
+              return (0, _deepEqual2.default)(binding.format[name], curContext.format[name]);
+            })) {
+              return false;
+            }
+          }
+          if (binding.prefix != null && !binding.prefix.test(curContext.prefix)) return false;
+          if (binding.suffix != null && !binding.suffix.test(curContext.suffix)) return false;
+          return binding.handler.call(_this2, range, curContext) !== true;
+        });
+        if (prevented) {
+          evt.preventDefault();
+        }
+      });
+    }
+  }]);
+
+  return Keyboard;
+}(_module2.default);
+
+Keyboard.keys = {
+  BACKSPACE: 8,
+  TAB: 9,
+  ENTER: 13,
+  ESCAPE: 27,
+  LEFT: 37,
+  UP: 38,
+  RIGHT: 39,
+  DOWN: 40,
+  DELETE: 46
+};
+
+Keyboard.DEFAULTS = {
+  bindings: {
+    'bold': makeFormatHandler('bold'),
+    'italic': makeFormatHandler('italic'),
+    'underline': makeFormatHandler('underline'),
+    'indent': {
+      // highlight tab or tab at beginning of list, indent or blockquote
+      key: Keyboard.keys.TAB,
+      format: ['blockquote', 'indent', 'list'],
+      handler: function handler(range, context) {
+        if (context.collapsed && context.offset !== 0) return true;
+        this.quill.format('indent', '+1', _quill2.default.sources.USER);
+      }
+    },
+    'outdent': {
+      key: Keyboard.keys.TAB,
+      shiftKey: true,
+      format: ['blockquote', 'indent', 'list'],
+      // highlight tab or tab at beginning of list, indent or blockquote
+      handler: function handler(range, context) {
+        if (context.collapsed && context.offset !== 0) return true;
+        this.quill.format('indent', '-1', _quill2.default.sources.USER);
+      }
+    },
+    'outdent backspace': {
+      key: Keyboard.keys.BACKSPACE,
+      collapsed: true,
+      shiftKey: null,
+      metaKey: null,
+      ctrlKey: null,
+      altKey: null,
+      format: ['indent', 'list'],
+      offset: 0,
+      handler: function handler(range, context) {
+        if (context.format.indent != null) {
+          this.quill.format('indent', '-1', _quill2.default.sources.USER);
+        } else if (context.format.list != null) {
+          this.quill.format('list', false, _quill2.default.sources.USER);
+        }
+      }
+    },
+    'indent code-block': makeCodeBlockHandler(true),
+    'outdent code-block': makeCodeBlockHandler(false),
+    'remove tab': {
+      key: Keyboard.keys.TAB,
+      shiftKey: true,
+      collapsed: true,
+      prefix: /\t$/,
+      handler: function handler(range) {
+        this.quill.deleteText(range.index - 1, 1, _quill2.default.sources.USER);
+      }
+    },
+    'tab': {
+      key: Keyboard.keys.TAB,
+      handler: function handler(range) {
+        this.quill.history.cutoff();
+        var delta = new _quillDelta2.default().retain(range.index).delete(range.length).insert('\t');
+        this.quill.updateContents(delta, _quill2.default.sources.USER);
+        this.quill.history.cutoff();
+        this.quill.setSelection(range.index + 1, _quill2.default.sources.SILENT);
+      }
+    },
+    'list empty enter': {
+      key: Keyboard.keys.ENTER,
+      collapsed: true,
+      format: ['list'],
+      empty: true,
+      handler: function handler(range, context) {
+        this.quill.format('list', false, _quill2.default.sources.USER);
+        if (context.format.indent) {
+          this.quill.format('indent', false, _quill2.default.sources.USER);
+        }
+      }
+    },
+    'checklist enter': {
+      key: Keyboard.keys.ENTER,
+      collapsed: true,
+      format: { list: 'checked' },
+      handler: function handler(range) {
+        var _quill$getLine3 = this.quill.getLine(range.index),
+            _quill$getLine4 = _slicedToArray(_quill$getLine3, 2),
+            line = _quill$getLine4[0],
+            offset = _quill$getLine4[1];
+
+        var formats = (0, _extend2.default)({}, line.formats(), { list: 'checked' });
+        var delta = new _quillDelta2.default().retain(range.index).insert('\n', formats).retain(line.length() - offset - 1).retain(1, { list: 'unchecked' });
+        this.quill.updateContents(delta, _quill2.default.sources.USER);
+        this.quill.setSelection(range.index + 1, _quill2.default.sources.SILENT);
+        this.quill.scrollIntoView();
+      }
+    },
+    'header enter': {
+      key: Keyboard.keys.ENTER,
+      collapsed: true,
+      format: ['header'],
+      suffix: /^$/,
+      handler: function handler(range, context) {
+        var _quill$getLine5 = this.quill.getLine(range.index),
+            _quill$getLine6 = _slicedToArray(_quill$getLine5, 2),
+            line = _quill$getLine6[0],
+            offset = _quill$getLine6[1];
+
+        var delta = new _quillDelta2.default().retain(range.index).insert('\n', context.format).retain(line.length() - offset - 1).retain(1, { header: null });
+        this.quill.updateContents(delta, _quill2.default.sources.USER);
+        this.quill.setSelection(range.index + 1, _quill2.default.sources.SILENT);
+        this.quill.scrollIntoView();
+      }
+    },
+    'list autofill': {
+      key: ' ',
+      collapsed: true,
+      format: { list: false },
+      prefix: /^\s*?(\d+\.|-|\*|\[ ?\]|\[x\])$/,
+      handler: function handler(range, context) {
+        var length = context.prefix.length;
+
+        var _quill$getLine7 = this.quill.getLine(range.index),
+            _quill$getLine8 = _slicedToArray(_quill$getLine7, 2),
+            line = _quill$getLine8[0],
+            offset = _quill$getLine8[1];
+
+        if (offset > length) return true;
+        var value = void 0;
+        switch (context.prefix.trim()) {
+          case '[]':case '[ ]':
+            value = 'unchecked';
+            break;
+          case '[x]':
+            value = 'checked';
+            break;
+          case '-':case '*':
+            value = 'bullet';
+            break;
+          default:
+            value = 'ordered';
+        }
+        this.quill.insertText(range.index, ' ', _quill2.default.sources.USER);
+        this.quill.history.cutoff();
+        var delta = new _quillDelta2.default().retain(range.index - offset).delete(length + 1).retain(line.length() - 2 - offset).retain(1, { list: value });
+        this.quill.updateContents(delta, _quill2.default.sources.USER);
+        this.quill.history.cutoff();
+        this.quill.setSelection(range.index - length, _quill2.default.sources.SILENT);
+      }
+    },
+    'code exit': {
+      key: Keyboard.keys.ENTER,
+      collapsed: true,
+      format: ['code-block'],
+      prefix: /\n\n$/,
+      suffix: /^\s+$/,
+      handler: function handler(range) {
+        var _quill$getLine9 = this.quill.getLine(range.index),
+            _quill$getLine10 = _slicedToArray(_quill$getLine9, 2),
+            line = _quill$getLine10[0],
+            offset = _quill$getLine10[1];
+
+        var delta = new _quillDelta2.default().retain(range.index + line.length() - offset - 2).retain(1, { 'code-block': null }).delete(1);
+        this.quill.updateContents(delta, _quill2.default.sources.USER);
+      }
+    },
+    'embed left': makeEmbedArrowHandler(Keyboard.keys.LEFT, false),
+    'embed left shift': makeEmbedArrowHandler(Keyboard.keys.LEFT, true),
+    'embed right': makeEmbedArrowHandler(Keyboard.keys.RIGHT, false),
+    'embed right shift': makeEmbedArrowHandler(Keyboard.keys.RIGHT, true)
+  }
+};
+
+function makeEmbedArrowHandler(key, shiftKey) {
+  var _ref3;
+
+  var where = key === Keyboard.keys.LEFT ? 'prefix' : 'suffix';
+  return _ref3 = {
+    key: key,
+    shiftKey: shiftKey,
+    altKey: null
+  }, _defineProperty(_ref3, where, /^$/), _defineProperty(_ref3, 'handler', function handler(range) {
+    var index = range.index;
+    if (key === Keyboard.keys.RIGHT) {
+      index += range.length + 1;
+    }
+
+    var _quill$getLeaf3 = this.quill.getLeaf(index),
+        _quill$getLeaf4 = _slicedToArray(_quill$getLeaf3, 1),
+        leaf = _quill$getLeaf4[0];
+
+    if (!(leaf instanceof _parchment2.default.Embed)) return true;
+    if (key === Keyboard.keys.LEFT) {
+      if (shiftKey) {
+        this.quill.setSelection(range.index - 1, range.length + 1, _quill2.default.sources.USER);
+      } else {
+        this.quill.setSelection(range.index - 1, _quill2.default.sources.USER);
+      }
+    } else {
+      if (shiftKey) {
+        this.quill.setSelection(range.index, range.length + 1, _quill2.default.sources.USER);
+      } else {
+        this.quill.setSelection(range.index + range.length + 1, _quill2.default.sources.USER);
+      }
+    }
+    return false;
+  }), _ref3;
+}
+
+function handleBackspace(range, context) {
+  if (range.index === 0 || this.quill.getLength() <= 1) return;
+
+  var _quill$getLine11 = this.quill.getLine(range.index),
+      _quill$getLine12 = _slicedToArray(_quill$getLine11, 1),
+      line = _quill$getLine12[0];
+
+  var formats = {};
+  if (context.offset === 0) {
+    var _quill$getLine13 = this.quill.getLine(range.index - 1),
+        _quill$getLine14 = _slicedToArray(_quill$getLine13, 1),
+        prev = _quill$getLine14[0];
+
+    if (prev != null && prev.length() > 1) {
+      var curFormats = line.formats();
+      var prevFormats = this.quill.getFormat(range.index - 1, 1);
+      formats = _op2.default.attributes.diff(curFormats, prevFormats) || {};
+    }
+  }
+  // Check for astral symbols
+  var length = /[\uD800-\uDBFF][\uDC00-\uDFFF]$/.test(context.prefix) ? 2 : 1;
+  this.quill.deleteText(range.index - length, length, _quill2.default.sources.USER);
+  if (Object.keys(formats).length > 0) {
+    this.quill.formatLine(range.index - length, length, formats, _quill2.default.sources.USER);
+  }
+  this.quill.focus();
+}
+
+function handleDelete(range, context) {
+  // Check for astral symbols
+  var length = /^[\uD800-\uDBFF][\uDC00-\uDFFF]/.test(context.suffix) ? 2 : 1;
+  if (range.index >= this.quill.getLength() - length) return;
+  var formats = {},
+      nextLength = 0;
+
+  var _quill$getLine15 = this.quill.getLine(range.index),
+      _quill$getLine16 = _slicedToArray(_quill$getLine15, 1),
+      line = _quill$getLine16[0];
+
+  if (context.offset >= line.length() - 1) {
+    var _quill$getLine17 = this.quill.getLine(range.index + 1),
+        _quill$getLine18 = _slicedToArray(_quill$getLine17, 1),
+        next = _quill$getLine18[0];
+
+    if (next) {
+      var curFormats = line.formats();
+      var nextFormats = this.quill.getFormat(range.index, 1);
+      formats = _op2.default.attributes.diff(curFormats, nextFormats) || {};
+      nextLength = next.length();
+    }
+  }
+  this.quill.deleteText(range.index, length, _quill2.default.sources.USER);
+  if (Object.keys(formats).length > 0) {
+    this.quill.formatLine(range.index + nextLength - 1, length, formats, _quill2.default.sources.USER);
+  }
+}
+
+function handleDeleteRange(range) {
+  var lines = this.quill.getLines(range);
+  var formats = {};
+  if (lines.length > 1) {
+    var firstFormats = lines[0].formats();
+    var lastFormats = lines[lines.length - 1].formats();
+    formats = _op2.default.attributes.diff(lastFormats, firstFormats) || {};
+  }
+  this.quill.deleteText(range, _quill2.default.sources.USER);
+  if (Object.keys(formats).length > 0) {
+    this.quill.formatLine(range.index, 1, formats, _quill2.default.sources.USER);
+  }
+  this.quill.setSelection(range.index, _quill2.default.sources.SILENT);
+  this.quill.focus();
+}
+
+function handleEnter(range, context) {
+  var _this3 = this;
+
+  if (range.length > 0) {
+    this.quill.scroll.deleteAt(range.index, range.length); // So we do not trigger text-change
+  }
+  var lineFormats = Object.keys(context.format).reduce(function (lineFormats, format) {
+    if (_parchment2.default.query(format, _parchment2.default.Scope.BLOCK) && !Array.isArray(context.format[format])) {
+      lineFormats[format] = context.format[format];
+    }
+    return lineFormats;
+  }, {});
+  this.quill.insertText(range.index, '\n', lineFormats, _quill2.default.sources.USER);
+  // Earlier scroll.deleteAt might have messed up our selection,
+  // so insertText's built in selection preservation is not reliable
+  this.quill.setSelection(range.index + 1, _quill2.default.sources.SILENT);
+  this.quill.focus();
+  Object.keys(context.format).forEach(function (name) {
+    if (lineFormats[name] != null) return;
+    if (Array.isArray(context.format[name])) return;
+    if (name === 'link') return;
+    _this3.quill.format(name, context.format[name], _quill2.default.sources.USER);
+  });
+}
+
+function makeCodeBlockHandler(indent) {
+  return {
+    key: Keyboard.keys.TAB,
+    shiftKey: !indent,
+    format: { 'code-block': true },
+    handler: function handler(range) {
+      var CodeBlock = _parchment2.default.query('code-block');
+      var index = range.index,
+          length = range.length;
+
+      var _quill$scroll$descend = this.quill.scroll.descendant(CodeBlock, index),
+          _quill$scroll$descend2 = _slicedToArray(_quill$scroll$descend, 2),
+          block = _quill$scroll$descend2[0],
+          offset = _quill$scroll$descend2[1];
+
+      if (block == null) return;
+      var scrollIndex = this.quill.getIndex(block);
+      var start = block.newlineIndex(offset, true) + 1;
+      var end = block.newlineIndex(scrollIndex + offset + length);
+      var lines = block.domNode.textContent.slice(start, end).split('\n');
+      offset = 0;
+      lines.forEach(function (line, i) {
+        if (indent) {
+          block.insertAt(start + offset, CodeBlock.TAB);
+          offset += CodeBlock.TAB.length;
+          if (i === 0) {
+            index += CodeBlock.TAB.length;
+          } else {
+            length += CodeBlock.TAB.length;
+          }
+        } else if (line.startsWith(CodeBlock.TAB)) {
+          block.deleteAt(start + offset, CodeBlock.TAB.length);
+          offset -= CodeBlock.TAB.length;
+          if (i === 0) {
+            index -= CodeBlock.TAB.length;
+          } else {
+            length -= CodeBlock.TAB.length;
+          }
+        }
+        offset += line.length + 1;
+      });
+      this.quill.update(_quill2.default.sources.USER);
+      this.quill.setSelection(index, length, _quill2.default.sources.SILENT);
+    }
+  };
+}
+
+function makeFormatHandler(format) {
+  return {
+    key: format[0].toUpperCase(),
+    shortKey: true,
+    handler: function handler(range, context) {
+      this.quill.format(format, !context.format[format], _quill2.default.sources.USER);
+    }
+  };
+}
+
+function normalize(binding) {
+  if (typeof binding === 'string' || typeof binding === 'number') {
+    return normalize({ key: binding });
+  }
+  if ((typeof binding === 'undefined' ? 'undefined' : _typeof(binding)) === 'object') {
+    binding = (0, _clone2.default)(binding, false);
+  }
+  if (typeof binding.key === 'string') {
+    if (Keyboard.keys[binding.key.toUpperCase()] != null) {
+      binding.key = Keyboard.keys[binding.key.toUpperCase()];
+    } else if (binding.key.length === 1) {
+      binding.key = binding.key.toUpperCase().charCodeAt(0);
+    } else {
+      return null;
+    }
+  }
+  if (binding.shortKey) {
+    binding[SHORTKEY] = binding.shortKey;
+    delete binding.shortKey;
+  }
+  return binding;
+}
+
+exports.default = Keyboard;
+exports.SHORTKEY = SHORTKEY;
+
+/***/ }),
+/* 24 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
+
+var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+var _parchment = __webpack_require__(0);
+
+var _parchment2 = _interopRequireDefault(_parchment);
+
+var _text = __webpack_require__(7);
+
+var _text2 = _interopRequireDefault(_text);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+var Cursor = function (_Parchment$Embed) {
+  _inherits(Cursor, _Parchment$Embed);
+
+  _createClass(Cursor, null, [{
+    key: 'value',
+    value: function value() {
+      return undefined;
+    }
+  }]);
+
+  function Cursor(domNode, selection) {
+    _classCallCheck(this, Cursor);
+
+    var _this = _possibleConstructorReturn(this, (Cursor.__proto__ || Object.getPrototypeOf(Cursor)).call(this, domNode));
+
+    _this.selection = selection;
+    _this.textNode = document.createTextNode(Cursor.CONTENTS);
+    _this.domNode.appendChild(_this.textNode);
+    _this._length = 0;
+    return _this;
+  }
+
+  _createClass(Cursor, [{
+    key: 'detach',
+    value: function detach() {
+      // super.detach() will also clear domNode.__blot
+      if (this.parent != null) this.parent.removeChild(this);
+    }
+  }, {
+    key: 'format',
+    value: function format(name, value) {
+      if (this._length !== 0) {
+        return _get(Cursor.prototype.__proto__ || Object.getPrototypeOf(Cursor.prototype), 'format', this).call(this, name, value);
+      }
+      var target = this,
+          index = 0;
+      while (target != null && target.statics.scope !== _parchment2.default.Scope.BLOCK_BLOT) {
+        index += target.offset(target.parent);
+        target = target.parent;
+      }
+      if (target != null) {
+        this._length = Cursor.CONTENTS.length;
+        target.optimize();
+        target.formatAt(index, Cursor.CONTENTS.length, name, value);
+        this._length = 0;
+      }
+    }
+  }, {
+    key: 'index',
+    value: function index(node, offset) {
+      if (node === this.textNode) return 0;
+      return _get(Cursor.prototype.__proto__ || Object.getPrototypeOf(Cursor.prototype), 'index', this).call(this, node, offset);
+    }
+  }, {
+    key: 'length',
+    value: function length() {
+      return this._length;
+    }
+  }, {
+    key: 'position',
+    value: function position() {
+      return [this.textNode, this.textNode.data.length];
+    }
+  }, {
+    key: 'remove',
+    value: function remove() {
+      _get(Cursor.prototype.__proto__ || Object.getPrototypeOf(Cursor.prototype), 'remove', this).call(this);
+      this.parent = null;
+    }
+  }, {
+    key: 'restore',
+    value: function restore() {
+      if (this.selection.composing || this.parent == null) return;
+      var textNode = this.textNode;
+      var range = this.selection.getNativeRange();
+      var restoreText = void 0,
+          start = void 0,
+          end = void 0;
+      if (range != null && range.start.node === textNode && range.end.node === textNode) {
+        var _ref = [textNode, range.start.offset, range.end.offset];
+        restoreText = _ref[0];
+        start = _ref[1];
+        end = _ref[2];
+      }
+      // Link format will insert text outside of anchor tag
+      while (this.domNode.lastChild != null && this.domNode.lastChild !== this.textNode) {
+        this.domNode.parentNode.insertBefore(this.domNode.lastChild, this.domNode);
+      }
+      if (this.textNode.data !== Cursor.CONTENTS) {
+        var text = this.textNode.data.split(Cursor.CONTENTS).join('');
+        if (this.next instanceof _text2.default) {
+          restoreText = this.next.domNode;
+          this.next.insertAt(0, text);
+          this.textNode.data = Cursor.CONTENTS;
+        } else {
+          this.textNode.data = text;
+          this.parent.insertBefore(_parchment2.default.create(this.textNode), this);
+          this.textNode = document.createTextNode(Cursor.CONTENTS);
+          this.domNode.appendChild(this.textNode);
+        }
+      }
+      this.remove();
+      if (start != null) {
+        var _map = [start, end].map(function (offset) {
+          return Math.max(0, Math.min(restoreText.data.length, offset - 1));
+        });
+
+        var _map2 = _slicedToArray(_map, 2);
+
+        start = _map2[0];
+        end = _map2[1];
+
+        return {
+          startNode: restoreText,
+          startOffset: start,
+          endNode: restoreText,
+          endOffset: end
+        };
+      }
+    }
+  }, {
+    key: 'update',
+    value: function update(mutations, context) {
+      var _this2 = this;
+
+      if (mutations.some(function (mutation) {
+        return mutation.type === 'characterData' && mutation.target === _this2.textNode;
+      })) {
+        var range = this.restore();
+        if (range) context.range = range;
+      }
+    }
+  }, {
+    key: 'value',
+    value: function value() {
+      return '';
+    }
+  }]);
+
+  return Cursor;
+}(_parchment2.default.Embed);
+
+Cursor.blotName = 'cursor';
+Cursor.className = 'ql-cursor';
+Cursor.tagName = 'span';
+Cursor.CONTENTS = '\uFEFF'; // Zero width no break space
+
+
+exports.default = Cursor;
+
+/***/ }),
+/* 25 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _parchment = __webpack_require__(0);
+
+var _parchment2 = _interopRequireDefault(_parchment);
+
+var _block = __webpack_require__(4);
+
+var _block2 = _interopRequireDefault(_block);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+var Container = function (_Parchment$Container) {
+  _inherits(Container, _Parchment$Container);
+
+  function Container() {
+    _classCallCheck(this, Container);
+
+    return _possibleConstructorReturn(this, (Container.__proto__ || Object.getPrototypeOf(Container)).apply(this, arguments));
+  }
+
+  return Container;
+}(_parchment2.default.Container);
+
+Container.allowedChildren = [_block2.default, _block.BlockEmbed, Container];
+
+exports.default = Container;
+
+/***/ }),
+/* 26 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.ColorStyle = exports.ColorClass = exports.ColorAttributor = undefined;
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };
+
+var _parchment = __webpack_require__(0);
+
+var _parchment2 = _interopRequireDefault(_parchment);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+var ColorAttributor = function (_Parchment$Attributor) {
+  _inherits(ColorAttributor, _Parchment$Attributor);
+
+  function ColorAttributor() {
+    _classCallCheck(this, ColorAttributor);
+
+    return _possibleConstructorReturn(this, (ColorAttributor.__proto__ || Object.getPrototypeOf(ColorAttributor)).apply(this, arguments));
+  }
+
+  _createClass(ColorAttributor, [{
+    key: 'value',
+    value: function value(domNode) {
+      var value = _get(ColorAttributor.prototype.__proto__ || Object.getPrototypeOf(ColorAttributor.prototype), 'value', this).call(this, domNode);
+      if (!value.startsWith('rgb(')) return value;
+      value = value.replace(/^[^\d]+/, '').replace(/[^\d]+$/, '');
+      return '#' + value.split(',').map(function (component) {
+        return ('00' + parseInt(component).toString(16)).slice(-2);
+      }).join('');
+    }
+  }]);
+
+  return ColorAttributor;
+}(_parchment2.default.Attributor.Style);
+
+var ColorClass = new _parchment2.default.Attributor.Class('color', 'ql-color', {
+  scope: _parchment2.default.Scope.INLINE
+});
+var ColorStyle = new ColorAttributor('color', 'color', {
+  scope: _parchment2.default.Scope.INLINE
+});
+
+exports.ColorAttributor = ColorAttributor;
+exports.ColorClass = ColorClass;
+exports.ColorStyle = ColorStyle;
+
+/***/ }),
+/* 27 */,
+/* 28 */,
+/* 29 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _parchment = __webpack_require__(0);
+
+var _parchment2 = _interopRequireDefault(_parchment);
+
+var _quill = __webpack_require__(5);
+
+var _quill2 = _interopRequireDefault(_quill);
+
+var _block = __webpack_require__(4);
+
+var _block2 = _interopRequireDefault(_block);
+
+var _break = __webpack_require__(16);
+
+var _break2 = _interopRequireDefault(_break);
+
+var _container = __webpack_require__(25);
+
+var _container2 = _interopRequireDefault(_container);
+
+var _cursor = __webpack_require__(24);
+
+var _cursor2 = _interopRequireDefault(_cursor);
+
+var _embed = __webpack_require__(35);
+
+var _embed2 = _interopRequireDefault(_embed);
+
+var _inline = __webpack_require__(6);
+
+var _inline2 = _interopRequireDefault(_inline);
+
+var _scroll = __webpack_require__(22);
+
+var _scroll2 = _interopRequireDefault(_scroll);
+
+var _text = __webpack_require__(7);
+
+var _text2 = _interopRequireDefault(_text);
+
+var _clipboard = __webpack_require__(55);
+
+var _clipboard2 = _interopRequireDefault(_clipboard);
+
+var _history = __webpack_require__(42);
+
+var _history2 = _interopRequireDefault(_history);
+
+var _keyboard = __webpack_require__(23);
+
+var _keyboard2 = _interopRequireDefault(_keyboard);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+_quill2.default.register({
+  'blots/block': _block2.default,
+  'blots/block/embed': _block.BlockEmbed,
+  'blots/break': _break2.default,
+  'blots/container': _container2.default,
+  'blots/cursor': _cursor2.default,
+  'blots/embed': _embed2.default,
+  'blots/inline': _inline2.default,
+  'blots/scroll': _scroll2.default,
+  'blots/text': _text2.default,
+
+  'modules/clipboard': _clipboard2.default,
+  'modules/history': _history2.default,
+  'modules/keyboard': _keyboard2.default
+});
+
+_parchment2.default.register(_block2.default, _break2.default, _cursor2.default, _inline2.default, _scroll2.default, _text2.default);
+
+exports.default = _quill2.default;
+
+/***/ }),
+/* 30 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", { value: true });
+var Registry = __webpack_require__(1);
+var ShadowBlot = /** @class */ (function () {
+    function ShadowBlot(domNode) {
+        this.domNode = domNode;
+        // @ts-ignore
+        this.domNode[Registry.DATA_KEY] = { blot: this };
+    }
+    Object.defineProperty(ShadowBlot.prototype, "statics", {
+        // Hack for accessing inherited static methods
+        get: function () {
+            return this.constructor;
+        },
+        enumerable: true,
+        configurable: true
+    });
+    ShadowBlot.create = function (value) {
+        if (this.tagName == null) {
+            throw new Registry.ParchmentError('Blot definition missing tagName');
+        }
+        var node;
+        if (Array.isArray(this.tagName)) {
+            if (typeof value === 'string') {
+                value = value.toUpperCase();
+                if (parseInt(value).toString() === value) {
+                    value = parseInt(value);
+                }
+            }
+            if (typeof value === 'number') {
+                node = document.createElement(this.tagName[value - 1]);
+            }
+            else if (this.tagName.indexOf(value) > -1) {
+                node = document.createElement(value);
+            }
+            else {
+                node = document.createElement(this.tagName[0]);
+            }
+        }
+        else {
+            node = document.createElement(this.tagName);
+        }
+        if (this.className) {
+            node.classList.add(this.className);
+        }
+        return node;
+    };
+    ShadowBlot.prototype.attach = function () {
+        if (this.parent != null) {
+            this.scroll = this.parent.scroll;
+        }
+    };
+    ShadowBlot.prototype.clone = function () {
+        var domNode = this.domNode.cloneNode(false);
+        return Registry.create(domNode);
+    };
+    ShadowBlot.prototype.detach = function () {
+        if (this.parent != null)
+            this.parent.removeChild(this);
+        // @ts-ignore
+        delete this.domNode[Registry.DATA_KEY];
+    };
+    ShadowBlot.prototype.deleteAt = function (index, length) {
+        var blot = this.isolate(index, length);
+        blot.remove();
+    };
+    ShadowBlot.prototype.formatAt = function (index, length, name, value) {
+        var blot = this.isolate(index, length);
+        if (Registry.query(name, Registry.Scope.BLOT) != null && value) {
+            blot.wrap(name, value);
+        }
+        else if (Registry.query(name, Registry.Scope.ATTRIBUTE) != null) {
+            var parent = Registry.create(this.statics.scope);
+            blot.wrap(parent);
+            parent.format(name, value);
+        }
+    };
+    ShadowBlot.prototype.insertAt = function (index, value, def) {
+        var blot = def == null ? Registry.create('text', value) : Registry.create(value, def);
+        var ref = this.split(index);
+        this.parent.insertBefore(blot, ref);
+    };
+    ShadowBlot.prototype.insertInto = function (parentBlot, refBlot) {
+        if (refBlot === void 0) { refBlot = null; }
+        if (this.parent != null) {
+            this.parent.children.remove(this);
+        }
+        var refDomNode = null;
+        parentBlot.children.insertBefore(this, refBlot);
+        if (refBlot != null) {
+            refDomNode = refBlot.domNode;
+        }
+        if (this.domNode.parentNode != parentBlot.domNode ||
+            this.domNode.nextSibling != refDomNode) {
+            parentBlot.domNode.insertBefore(this.domNode, refDomNode);
+        }
+        this.parent = parentBlot;
+        this.attach();
+    };
+    ShadowBlot.prototype.isolate = function (index, length) {
+        var target = this.split(index);
+        target.split(length);
+        return target;
+    };
+    ShadowBlot.prototype.length = function () {
+        return 1;
+    };
+    ShadowBlot.prototype.offset = function (root) {
+        if (root === void 0) { root = this.parent; }
+        if (this.parent == null || this == root)
+            return 0;
+        return this.parent.children.offset(this) + this.parent.offset(root);
+    };
+    ShadowBlot.prototype.optimize = function (context) {
+        // TODO clean up once we use WeakMap
+        // @ts-ignore
+        if (this.domNode[Registry.DATA_KEY] != null) {
+            // @ts-ignore
+            delete this.domNode[Registry.DATA_KEY].mutations;
+        }
+    };
+    ShadowBlot.prototype.remove = function () {
+        if (this.domNode.parentNode != null) {
+            this.domNode.parentNode.removeChild(this.domNode);
+        }
+        this.detach();
+    };
+    ShadowBlot.prototype.replace = function (target) {
+        if (target.parent == null)
+            return;
+        target.parent.insertBefore(this, target.next);
+        target.remove();
+    };
+    ShadowBlot.prototype.replaceWith = function (name, value) {
+        var replacement = typeof name === 'string' ? Registry.create(name, value) : name;
+        replacement.replace(this);
+        return replacement;
+    };
+    ShadowBlot.prototype.split = function (index, force) {
+        return index === 0 ? this : this.next;
+    };
+    ShadowBlot.prototype.update = function (mutations, context) {
+        // Nothing to do by default
+    };
+    ShadowBlot.prototype.wrap = function (name, value) {
+        var wrapper = typeof name === 'string' ? Registry.create(name, value) : name;
+        if (this.parent != null) {
+            this.parent.insertBefore(wrapper, this.next);
+        }
+        wrapper.appendChild(this);
+        return wrapper;
+    };
+    ShadowBlot.blotName = 'abstract';
+    return ShadowBlot;
+}());
+exports.default = ShadowBlot;
+
+
+/***/ }),
+/* 31 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", { value: true });
+var attributor_1 = __webpack_require__(12);
+var class_1 = __webpack_require__(32);
+var style_1 = __webpack_require__(33);
+var Registry = __webpack_require__(1);
+var AttributorStore = /** @class */ (function () {
+    function AttributorStore(domNode) {
+        this.attributes = {};
+        this.domNode = domNode;
+        this.build();
+    }
+    AttributorStore.prototype.attribute = function (attribute, value) {
+        // verb
+        if (value) {
+            if (attribute.add(this.domNode, value)) {
+                if (attribute.value(this.domNode) != null) {
+                    this.attributes[attribute.attrName] = attribute;
+                }
+                else {
+                    delete this.attributes[attribute.attrName];
+                }
+            }
+        }
+        else {
+            attribute.remove(this.domNode);
+            delete this.attributes[attribute.attrName];
+        }
+    };
+    AttributorStore.prototype.build = function () {
+        var _this = this;
+        this.attributes = {};
+        var attributes = attributor_1.default.keys(this.domNode);
+        var classes = class_1.default.keys(this.domNode);
+        var styles = style_1.default.keys(this.domNode);
+        attributes
+            .concat(classes)
+            .concat(styles)
+            .forEach(function (name) {
+            var attr = Registry.query(name, Registry.Scope.ATTRIBUTE);
+            if (attr instanceof attributor_1.default) {
+                _this.attributes[attr.attrName] = attr;
+            }
+        });
+    };
+    AttributorStore.prototype.copy = function (target) {
+        var _this = this;
+        Object.keys(this.attributes).forEach(function (key) {
+            var value = _this.attributes[key].value(_this.domNode);
+            target.format(key, value);
+        });
+    };
+    AttributorStore.prototype.move = function (target) {
+        var _this = this;
+        this.copy(target);
+        Object.keys(this.attributes).forEach(function (key) {
+            _this.attributes[key].remove(_this.domNode);
+        });
+        this.attributes = {};
+    };
+    AttributorStore.prototype.values = function () {
+        var _this = this;
+        return Object.keys(this.attributes).reduce(function (attributes, name) {
+            attributes[name] = _this.attributes[name].value(_this.domNode);
+            return attributes;
+        }, {});
+    };
+    return AttributorStore;
+}());
+exports.default = AttributorStore;
+
+
+/***/ }),
+/* 32 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+var __extends = (this && this.__extends) || (function () {
+    var extendStatics = Object.setPrototypeOf ||
+        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
+        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
+    return function (d, b) {
+        extendStatics(d, b);
+        function __() { this.constructor = d; }
+        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+    };
+})();
+Object.defineProperty(exports, "__esModule", { value: true });
+var attributor_1 = __webpack_require__(12);
+function match(node, prefix) {
+    var className = node.getAttribute('class') || '';
+    return className.split(/\s+/).filter(function (name) {
+        return name.indexOf(prefix + "-") === 0;
+    });
+}
+var ClassAttributor = /** @class */ (function (_super) {
+    __extends(ClassAttributor, _super);
+    function ClassAttributor() {
+        return _super !== null && _super.apply(this, arguments) || this;
+    }
+    ClassAttributor.keys = function (node) {
+        return (node.getAttribute('class') || '').split(/\s+/).map(function (name) {
+            return name
+                .split('-')
+                .slice(0, -1)
+                .join('-');
+        });
+    };
+    ClassAttributor.prototype.add = function (node, value) {
+        if (!this.canAdd(node, value))
+            return false;
+        this.remove(node);
+        node.classList.add(this.keyName + "-" + value);
+        return true;
+    };
+    ClassAttributor.prototype.remove = function (node) {
+        var matches = match(node, this.keyName);
+        matches.forEach(function (name) {
+            node.classList.remove(name);
+        });
+        if (node.classList.length === 0) {
+            node.removeAttribute('class');
+        }
+    };
+    ClassAttributor.prototype.value = function (node) {
+        var result = match(node, this.keyName)[0] || '';
+        var value = result.slice(this.keyName.length + 1); // +1 for hyphen
+        return this.canAdd(node, value) ? value : '';
+    };
+    return ClassAttributor;
+}(attributor_1.default));
+exports.default = ClassAttributor;
+
+
+/***/ }),
+/* 33 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+var __extends = (this && this.__extends) || (function () {
+    var extendStatics = Object.setPrototypeOf ||
+        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
+        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
+    return function (d, b) {
+        extendStatics(d, b);
+        function __() { this.constructor = d; }
+        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+    };
+})();
+Object.defineProperty(exports, "__esModule", { value: true });
+var attributor_1 = __webpack_require__(12);
+function camelize(name) {
+    var parts = name.split('-');
+    var rest = parts
+        .slice(1)
+        .map(function (part) {
+        return part[0].toUpperCase() + part.slice(1);
+    })
+        .join('');
+    return parts[0] + rest;
+}
+var StyleAttributor = /** @class */ (function (_super) {
+    __extends(StyleAttributor, _super);
+    function StyleAttributor() {
+        return _super !== null && _super.apply(this, arguments) || this;
+    }
+    StyleAttributor.keys = function (node) {
+        return (node.getAttribute('style') || '').split(';').map(function (value) {
+            var arr = value.split(':');
+            return arr[0].trim();
+        });
+    };
+    StyleAttributor.prototype.add = function (node, value) {
+        if (!this.canAdd(node, value))
+            return false;
+        // @ts-ignore
+        node.style[camelize(this.keyName)] = value;
+        return true;
+    };
+    StyleAttributor.prototype.remove = function (node) {
+        // @ts-ignore
+        node.style[camelize(this.keyName)] = '';
+        if (!node.getAttribute('style')) {
+            node.removeAttribute('style');
+        }
+    };
+    StyleAttributor.prototype.value = function (node) {
+        // @ts-ignore
+        var value = node.style[camelize(this.keyName)];
+        return this.canAdd(node, value) ? value : '';
+    };
+    return StyleAttributor;
+}(attributor_1.default));
+exports.default = StyleAttributor;
+
+
+/***/ }),
+/* 34 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+var Theme = function () {
+  function Theme(quill, options) {
+    _classCallCheck(this, Theme);
+
+    this.quill = quill;
+    this.options = options;
+    this.modules = {};
+  }
+
+  _createClass(Theme, [{
+    key: 'init',
+    value: function init() {
+      var _this = this;
+
+      Object.keys(this.options.modules).forEach(function (name) {
+        if (_this.modules[name] == null) {
+          _this.addModule(name);
+        }
+      });
+    }
+  }, {
+    key: 'addModule',
+    value: function addModule(name) {
+      var moduleClass = this.quill.constructor.import('modules/' + name);
+      this.modules[name] = new moduleClass(this.quill, this.options.modules[name] || {});
+      return this.modules[name];
+    }
+  }]);
+
+  return Theme;
+}();
+
+Theme.DEFAULTS = {
+  modules: {}
+};
+Theme.themes = {
+  'default': Theme
+};
+
+exports.default = Theme;
+
+/***/ }),
+/* 35 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };
+
+var _parchment = __webpack_require__(0);
+
+var _parchment2 = _interopRequireDefault(_parchment);
+
+var _text = __webpack_require__(7);
+
+var _text2 = _interopRequireDefault(_text);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+var GUARD_TEXT = '\uFEFF';
+
+var Embed = function (_Parchment$Embed) {
+  _inherits(Embed, _Parchment$Embed);
+
+  function Embed(node) {
+    _classCallCheck(this, Embed);
+
+    var _this = _possibleConstructorReturn(this, (Embed.__proto__ || Object.getPrototypeOf(Embed)).call(this, node));
+
+    _this.contentNode = document.createElement('span');
+    _this.contentNode.setAttribute('contenteditable', false);
+    [].slice.call(_this.domNode.childNodes).forEach(function (childNode) {
+      _this.contentNode.appendChild(childNode);
+    });
+    _this.leftGuard = document.createTextNode(GUARD_TEXT);
+    _this.rightGuard = document.createTextNode(GUARD_TEXT);
+    _this.domNode.appendChild(_this.leftGuard);
+    _this.domNode.appendChild(_this.contentNode);
+    _this.domNode.appendChild(_this.rightGuard);
+    return _this;
+  }
+
+  _createClass(Embed, [{
+    key: 'index',
+    value: function index(node, offset) {
+      if (node === this.leftGuard) return 0;
+      if (node === this.rightGuard) return 1;
+      return _get(Embed.prototype.__proto__ || Object.getPrototypeOf(Embed.prototype), 'index', this).call(this, node, offset);
+    }
+  }, {
+    key: 'restore',
+    value: function restore(node) {
+      var range = void 0,
+          textNode = void 0;
+      var text = node.data.split(GUARD_TEXT).join('');
+      if (node === this.leftGuard) {
+        if (this.prev instanceof _text2.default) {
+          var prevLength = this.prev.length();
+          this.prev.insertAt(prevLength, text);
+          range = {
+            startNode: this.prev.domNode,
+            startOffset: prevLength + text.length
+          };
+        } else {
+          textNode = document.createTextNode(text);
+          this.parent.insertBefore(_parchment2.default.create(textNode), this);
+          range = {
+            startNode: textNode,
+            startOffset: text.length
+          };
+        }
+      } else if (node === this.rightGuard) {
+        if (this.next instanceof _text2.default) {
+          this.next.insertAt(0, text);
+          range = {
+            startNode: this.next.domNode,
+            startOffset: text.length
+          };
+        } else {
+          textNode = document.createTextNode(text);
+          this.parent.insertBefore(_parchment2.default.create(textNode), this.next);
+          range = {
+            startNode: textNode,
+            startOffset: text.length
+          };
+        }
+      }
+      node.data = GUARD_TEXT;
+      return range;
+    }
+  }, {
+    key: 'update',
+    value: function update(mutations, context) {
+      var _this2 = this;
+
+      mutations.forEach(function (mutation) {
+        if (mutation.type === 'characterData' && (mutation.target === _this2.leftGuard || mutation.target === _this2.rightGuard)) {
+          var range = _this2.restore(mutation.target);
+          if (range) context.range = range;
+        }
+      });
+    }
+  }]);
+
+  return Embed;
+}(_parchment2.default.Embed);
+
+exports.default = Embed;
+
+/***/ }),
+/* 36 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.AlignStyle = exports.AlignClass = exports.AlignAttribute = undefined;
+
+var _parchment = __webpack_require__(0);
+
+var _parchment2 = _interopRequireDefault(_parchment);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+var config = {
+  scope: _parchment2.default.Scope.BLOCK,
+  whitelist: ['right', 'center', 'justify']
+};
+
+var AlignAttribute = new _parchment2.default.Attributor.Attribute('align', 'align', config);
+var AlignClass = new _parchment2.default.Attributor.Class('align', 'ql-align', config);
+var AlignStyle = new _parchment2.default.Attributor.Style('align', 'text-align', config);
+
+exports.AlignAttribute = AlignAttribute;
+exports.AlignClass = AlignClass;
+exports.AlignStyle = AlignStyle;
+
+/***/ }),
+/* 37 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.BackgroundStyle = exports.BackgroundClass = undefined;
+
+var _parchment = __webpack_require__(0);
+
+var _parchment2 = _interopRequireDefault(_parchment);
+
+var _color = __webpack_require__(26);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+var BackgroundClass = new _parchment2.default.Attributor.Class('background', 'ql-bg', {
+  scope: _parchment2.default.Scope.INLINE
+});
+var BackgroundStyle = new _color.ColorAttributor('background', 'background-color', {
+  scope: _parchment2.default.Scope.INLINE
+});
+
+exports.BackgroundClass = BackgroundClass;
+exports.BackgroundStyle = BackgroundStyle;
+
+/***/ }),
+/* 38 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.DirectionStyle = exports.DirectionClass = exports.DirectionAttribute = undefined;
+
+var _parchment = __webpack_require__(0);
+
+var _parchment2 = _interopRequireDefault(_parchment);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+var config = {
+  scope: _parchment2.default.Scope.BLOCK,
+  whitelist: ['rtl']
+};
+
+var DirectionAttribute = new _parchment2.default.Attributor.Attribute('direction', 'dir', config);
+var DirectionClass = new _parchment2.default.Attributor.Class('direction', 'ql-direction', config);
+var DirectionStyle = new _parchment2.default.Attributor.Style('direction', 'direction', config);
+
+exports.DirectionAttribute = DirectionAttribute;
+exports.DirectionClass = DirectionClass;
+exports.DirectionStyle = DirectionStyle;
+
+/***/ }),
+/* 39 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.FontClass = exports.FontStyle = undefined;
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };
+
+var _parchment = __webpack_require__(0);
+
+var _parchment2 = _interopRequireDefault(_parchment);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+var config = {
+  scope: _parchment2.default.Scope.INLINE,
+  whitelist: ['serif', 'monospace']
+};
+
+var FontClass = new _parchment2.default.Attributor.Class('font', 'ql-font', config);
+
+var FontStyleAttributor = function (_Parchment$Attributor) {
+  _inherits(FontStyleAttributor, _Parchment$Attributor);
+
+  function FontStyleAttributor() {
+    _classCallCheck(this, FontStyleAttributor);
+
+    return _possibleConstructorReturn(this, (FontStyleAttributor.__proto__ || Object.getPrototypeOf(FontStyleAttributor)).apply(this, arguments));
+  }
+
+  _createClass(FontStyleAttributor, [{
+    key: 'value',
+    value: function value(node) {
+      return _get(FontStyleAttributor.prototype.__proto__ || Object.getPrototypeOf(FontStyleAttributor.prototype), 'value', this).call(this, node).replace(/["']/g, '');
+    }
+  }]);
+
+  return FontStyleAttributor;
+}(_parchment2.default.Attributor.Style);
+
+var FontStyle = new FontStyleAttributor('font', 'font-family', config);
+
+exports.FontStyle = FontStyle;
+exports.FontClass = FontClass;
+
+/***/ }),
+/* 40 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.SizeStyle = exports.SizeClass = undefined;
+
+var _parchment = __webpack_require__(0);
+
+var _parchment2 = _interopRequireDefault(_parchment);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+var SizeClass = new _parchment2.default.Attributor.Class('size', 'ql-size', {
+  scope: _parchment2.default.Scope.INLINE,
+  whitelist: ['small', 'large', 'huge']
+});
+var SizeStyle = new _parchment2.default.Attributor.Style('size', 'font-size', {
+  scope: _parchment2.default.Scope.INLINE,
+  whitelist: ['10px', '18px', '32px']
+});
+
+exports.SizeClass = SizeClass;
+exports.SizeStyle = SizeStyle;
+
+/***/ }),
+/* 41 */,
+/* 42 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.getLastChangeIndex = exports.default = undefined;
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+var _parchment = __webpack_require__(0);
+
+var _parchment2 = _interopRequireDefault(_parchment);
+
+var _quill = __webpack_require__(5);
+
+var _quill2 = _interopRequireDefault(_quill);
+
+var _module = __webpack_require__(9);
+
+var _module2 = _interopRequireDefault(_module);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+var History = function (_Module) {
+  _inherits(History, _Module);
+
+  function History(quill, options) {
+    _classCallCheck(this, History);
+
+    var _this = _possibleConstructorReturn(this, (History.__proto__ || Object.getPrototypeOf(History)).call(this, quill, options));
+
+    _this.lastRecorded = 0;
+    _this.ignoreChange = false;
+    _this.clear();
+    _this.quill.on(_quill2.default.events.EDITOR_CHANGE, function (eventName, delta, oldDelta, source) {
+      if (eventName !== _quill2.default.events.TEXT_CHANGE || _this.ignoreChange) return;
+      if (!_this.options.userOnly || source === _quill2.default.sources.USER) {
+        _this.record(delta, oldDelta);
+      } else {
+        _this.transform(delta);
+      }
+    });
+    _this.quill.keyboard.addBinding({ key: 'Z', shortKey: true }, _this.undo.bind(_this));
+    _this.quill.keyboard.addBinding({ key: 'Z', shortKey: true, shiftKey: true }, _this.redo.bind(_this));
+    if (/Win/i.test(navigator.platform)) {
+      _this.quill.keyboard.addBinding({ key: 'Y', shortKey: true }, _this.redo.bind(_this));
+    }
+    return _this;
+  }
+
+  _createClass(History, [{
+    key: 'change',
+    value: function change(source, dest) {
+      if (this.stack[source].length === 0) return;
+      var delta = this.stack[source].pop();
+      this.stack[dest].push(delta);
+      this.lastRecorded = 0;
+      this.ignoreChange = true;
+      this.quill.updateContents(delta[source], _quill2.default.sources.USER);
+      this.ignoreChange = false;
+      var index = getLastChangeIndex(delta[source]);
+      this.quill.setSelection(index);
+    }
+  }, {
+    key: 'clear',
+    value: function clear() {
+      this.stack = { undo: [], redo: [] };
+    }
+  }, {
+    key: 'cutoff',
+    value: function cutoff() {
+      this.lastRecorded = 0;
+    }
+  }, {
+    key: 'record',
+    value: function record(changeDelta, oldDelta) {
+      if (changeDelta.ops.length === 0) return;
+      this.stack.redo = [];
+      var undoDelta = this.quill.getContents().diff(oldDelta);
+      var timestamp = Date.now();
+      if (this.lastRecorded + this.options.delay > timestamp && this.stack.undo.length > 0) {
+        var delta = this.stack.undo.pop();
+        undoDelta = undoDelta.compose(delta.undo);
+        changeDelta = delta.redo.compose(changeDelta);
+      } else {
+        this.lastRecorded = timestamp;
+      }
+      this.stack.undo.push({
+        redo: changeDelta,
+        undo: undoDelta
+      });
+      if (this.stack.undo.length > this.options.maxStack) {
+        this.stack.undo.shift();
+      }
+    }
+  }, {
+    key: 'redo',
+    value: function redo() {
+      this.change('redo', 'undo');
+    }
+  }, {
+    key: 'transform',
+    value: function transform(delta) {
+      this.stack.undo.forEach(function (change) {
+        change.undo = delta.transform(change.undo, true);
+        change.redo = delta.transform(change.redo, true);
+      });
+      this.stack.redo.forEach(function (change) {
+        change.undo = delta.transform(change.undo, true);
+        change.redo = delta.transform(change.redo, true);
+      });
+    }
+  }, {
+    key: 'undo',
+    value: function undo() {
+      this.change('undo', 'redo');
+    }
+  }]);
+
+  return History;
+}(_module2.default);
+
+History.DEFAULTS = {
+  delay: 1000,
+  maxStack: 100,
+  userOnly: false
+};
+
+function endsWithNewlineChange(delta) {
+  var lastOp = delta.ops[delta.ops.length - 1];
+  if (lastOp == null) return false;
+  if (lastOp.insert != null) {
+    return typeof lastOp.insert === 'string' && lastOp.insert.endsWith('\n');
+  }
+  if (lastOp.attributes != null) {
+    return Object.keys(lastOp.attributes).some(function (attr) {
+      return _parchment2.default.query(attr, _parchment2.default.Scope.BLOCK) != null;
+    });
+  }
+  return false;
+}
+
+function getLastChangeIndex(delta) {
+  var deleteLength = delta.reduce(function (length, op) {
+    length += op.delete || 0;
+    return length;
+  }, 0);
+  var changeIndex = delta.length() - deleteLength;
+  if (endsWithNewlineChange(delta)) {
+    changeIndex -= 1;
+  }
+  return changeIndex;
+}
+
+exports.default = History;
+exports.getLastChangeIndex = getLastChangeIndex;
+
+/***/ }),
+/* 43 */,
+/* 44 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", { value: true });
+var LinkedList = /** @class */ (function () {
+    function LinkedList() {
+        this.head = this.tail = null;
+        this.length = 0;
+    }
+    LinkedList.prototype.append = function () {
+        var nodes = [];
+        for (var _i = 0; _i < arguments.length; _i++) {
+            nodes[_i] = arguments[_i];
+        }
+        this.insertBefore(nodes[0], null);
+        if (nodes.length > 1) {
+            this.append.apply(this, nodes.slice(1));
+        }
+    };
+    LinkedList.prototype.contains = function (node) {
+        var cur, next = this.iterator();
+        while ((cur = next())) {
+            if (cur === node)
+                return true;
+        }
+        return false;
+    };
+    LinkedList.prototype.insertBefore = function (node, refNode) {
+        if (!node)
+            return;
+        node.next = refNode;
+        if (refNode != null) {
+            node.prev = refNode.prev;
+            if (refNode.prev != null) {
+                refNode.prev.next = node;
+            }
+            refNode.prev = node;
+            if (refNode === this.head) {
+                this.head = node;
+            }
+        }
+        else if (this.tail != null) {
+            this.tail.next = node;
+            node.prev = this.tail;
+            this.tail = node;
+        }
+        else {
+            node.prev = null;
+            this.head = this.tail = node;
+        }
+        this.length += 1;
+    };
+    LinkedList.prototype.offset = function (target) {
+        var index = 0, cur = this.head;
+        while (cur != null) {
+            if (cur === target)
+                return index;
+            index += cur.length();
+            cur = cur.next;
+        }
+        return -1;
+    };
+    LinkedList.prototype.remove = function (node) {
+        if (!this.contains(node))
+            return;
+        if (node.prev != null)
+            node.prev.next = node.next;
+        if (node.next != null)
+            node.next.prev = node.prev;
+        if (node === this.head)
+            this.head = node.next;
+        if (node === this.tail)
+            this.tail = node.prev;
+        this.length -= 1;
+    };
+    LinkedList.prototype.iterator = function (curNode) {
+        if (curNode === void 0) { curNode = this.head; }
+        // TODO use yield when we can
+        return function () {
+            var ret = curNode;
+            if (curNode != null)
+                curNode = curNode.next;
+            return ret;
+        };
+    };
+    LinkedList.prototype.find = function (index, inclusive) {
+        if (inclusive === void 0) { inclusive = false; }
+        var cur, next = this.iterator();
+        while ((cur = next())) {
+            var length = cur.length();
+            if (index < length ||
+                (inclusive && index === length && (cur.next == null || cur.next.length() !== 0))) {
+                return [cur, index];
+            }
+            index -= length;
+        }
+        return [null, 0];
+    };
+    LinkedList.prototype.forEach = function (callback) {
+        var cur, next = this.iterator();
+        while ((cur = next())) {
+            callback(cur);
+        }
+    };
+    LinkedList.prototype.forEachAt = function (index, length, callback) {
+        if (length <= 0)
+            return;
+        var _a = this.find(index), startNode = _a[0], offset = _a[1];
+        var cur, curIndex = index - offset, next = this.iterator(startNode);
+        while ((cur = next()) && curIndex < index + length) {
+            var curLength = cur.length();
+            if (index > curIndex) {
+                callback(cur, index - curIndex, Math.min(length, curIndex + curLength - index));
+            }
+            else {
+                callback(cur, 0, Math.min(curLength, index + length - curIndex));
+            }
+            curIndex += curLength;
+        }
+    };
+    LinkedList.prototype.map = function (callback) {
+        return this.reduce(function (memo, cur) {
+            memo.push(callback(cur));
+            return memo;
+        }, []);
+    };
+    LinkedList.prototype.reduce = function (callback, memo) {
+        var cur, next = this.iterator();
+        while ((cur = next())) {
+            memo = callback(memo, cur);
+        }
+        return memo;
+    };
+    return LinkedList;
+}());
+exports.default = LinkedList;
+
+
+/***/ }),
+/* 45 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+var __extends = (this && this.__extends) || (function () {
+    var extendStatics = Object.setPrototypeOf ||
+        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
+        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
+    return function (d, b) {
+        extendStatics(d, b);
+        function __() { this.constructor = d; }
+        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+    };
+})();
+Object.defineProperty(exports, "__esModule", { value: true });
+var container_1 = __webpack_require__(17);
+var Registry = __webpack_require__(1);
+var OBSERVER_CONFIG = {
+    attributes: true,
+    characterData: true,
+    characterDataOldValue: true,
+    childList: true,
+    subtree: true,
+};
+var MAX_OPTIMIZE_ITERATIONS = 100;
+var ScrollBlot = /** @class */ (function (_super) {
+    __extends(ScrollBlot, _super);
+    function ScrollBlot(node) {
+        var _this = _super.call(this, node) || this;
+        _this.scroll = _this;
+        _this.observer = new MutationObserver(function (mutations) {
+            _this.update(mutations);
+        });
+        _this.observer.observe(_this.domNode, OBSERVER_CONFIG);
+        _this.attach();
+        return _this;
+    }
+    ScrollBlot.prototype.detach = function () {
+        _super.prototype.detach.call(this);
+        this.observer.disconnect();
+    };
+    ScrollBlot.prototype.deleteAt = function (index, length) {
+        this.update();
+        if (index === 0 && length === this.length()) {
+            this.children.forEach(function (child) {
+                child.remove();
+            });
+        }
+        else {
+            _super.prototype.deleteAt.call(this, index, length);
+        }
+    };
+    ScrollBlot.prototype.formatAt = function (index, length, name, value) {
+        this.update();
+        _super.prototype.formatAt.call(this, index, length, name, value);
+    };
+    ScrollBlot.prototype.insertAt = function (index, value, def) {
+        this.update();
+        _super.prototype.insertAt.call(this, index, value, def);
+    };
+    ScrollBlot.prototype.optimize = function (mutations, context) {
+        var _this = this;
+        if (mutations === void 0) { mutations = []; }
+        if (context === void 0) { context = {}; }
+        _super.prototype.optimize.call(this, context);
+        // We must modify mutations directly, cannot make copy and then modify
+        var records = [].slice.call(this.observer.takeRecords());
+        // Array.push currently seems to be implemented by a non-tail recursive function
+        // so we cannot just mutations.push.apply(mutations, this.observer.takeRecords());
+        while (records.length > 0)
+            mutations.push(records.pop());
+        // TODO use WeakMap
+        var mark = function (blot, markParent) {
+            if (markParent === void 0) { markParent = true; }
+            if (blot == null || blot === _this)
+                return;
+            if (blot.domNode.parentNode == null)
+                return;
+            // @ts-ignore
+            if (blot.domNode[Registry.DATA_KEY].mutations == null) {
+                // @ts-ignore
+                blot.domNode[Registry.DATA_KEY].mutations = [];
+            }
+            if (markParent)
+                mark(blot.parent);
+        };
+        var optimize = function (blot) {
+            // Post-order traversal
+            if (
+            // @ts-ignore
+            blot.domNode[Registry.DATA_KEY] == null ||
+                // @ts-ignore
+                blot.domNode[Registry.DATA_KEY].mutations == null) {
+                return;
+            }
+            if (blot instanceof container_1.default) {
+                blot.children.forEach(optimize);
+            }
+            blot.optimize(context);
+        };
+        var remaining = mutations;
+        for (var i = 0; remaining.length > 0; i += 1) {
+            if (i >= MAX_OPTIMIZE_ITERATIONS) {
+                throw new Error('[Parchment] Maximum optimize iterations reached');
+            }
+            remaining.forEach(function (mutation) {
+                var blot = Registry.find(mutation.target, true);
+                if (blot == null)
+                    return;
+                if (blot.domNode === mutation.target) {
+                    if (mutation.type === 'childList') {
+                        mark(Registry.find(mutation.previousSibling, false));
+                        [].forEach.call(mutation.addedNodes, function (node) {
+                            var child = Registry.find(node, false);
+                            mark(child, false);
+                            if (child instanceof container_1.default) {
+                                child.children.forEach(function (grandChild) {
+                                    mark(grandChild, false);
+                                });
+                            }
+                        });
+                    }
+                    else if (mutation.type === 'attributes') {
+                        mark(blot.prev);
+                    }
+                }
+                mark(blot);
+            });
+            this.children.forEach(optimize);
+            remaining = [].slice.call(this.observer.takeRecords());
+            records = remaining.slice();
+            while (records.length > 0)
+                mutations.push(records.pop());
+        }
+    };
+    ScrollBlot.prototype.update = function (mutations, context) {
+        var _this = this;
+        if (context === void 0) { context = {}; }
+        mutations = mutations || this.observer.takeRecords();
+        // TODO use WeakMap
+        mutations
+            .map(function (mutation) {
+            var blot = Registry.find(mutation.target, true);
+            if (blot == null)
+                return null;
+            // @ts-ignore
+            if (blot.domNode[Registry.DATA_KEY].mutations == null) {
+                // @ts-ignore
+                blot.domNode[Registry.DATA_KEY].mutations = [mutation];
+                return blot;
+            }
+            else {
+                // @ts-ignore
+                blot.domNode[Registry.DATA_KEY].mutations.push(mutation);
+                return null;
+            }
+        })
+            .forEach(function (blot) {
+            if (blot == null ||
+                blot === _this ||
+                //@ts-ignore
+                blot.domNode[Registry.DATA_KEY] == null)
+                return;
+            // @ts-ignore
+            blot.update(blot.domNode[Registry.DATA_KEY].mutations || [], context);
+        });
+        // @ts-ignore
+        if (this.domNode[Registry.DATA_KEY].mutations != null) {
+            // @ts-ignore
+            _super.prototype.update.call(this, this.domNode[Registry.DATA_KEY].mutations, context);
+        }
+        this.optimize(mutations, context);
+    };
+    ScrollBlot.blotName = 'scroll';
+    ScrollBlot.defaultChild = 'block';
+    ScrollBlot.scope = Registry.Scope.BLOCK_BLOT;
+    ScrollBlot.tagName = 'DIV';
+    return ScrollBlot;
+}(container_1.default));
+exports.default = ScrollBlot;
+
+
+/***/ }),
+/* 46 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+var __extends = (this && this.__extends) || (function () {
+    var extendStatics = Object.setPrototypeOf ||
+        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
+        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
+    return function (d, b) {
+        extendStatics(d, b);
+        function __() { this.constructor = d; }
+        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+    };
+})();
+Object.defineProperty(exports, "__esModule", { value: true });
+var format_1 = __webpack_require__(18);
+var Registry = __webpack_require__(1);
+// Shallow object comparison
+function isEqual(obj1, obj2) {
+    if (Object.keys(obj1).length !== Object.keys(obj2).length)
+        return false;
+    // @ts-ignore
+    for (var prop in obj1) {
+        // @ts-ignore
+        if (obj1[prop] !== obj2[prop])
+            return false;
+    }
+    return true;
+}
+var InlineBlot = /** @class */ (function (_super) {
+    __extends(InlineBlot, _super);
+    function InlineBlot() {
+        return _super !== null && _super.apply(this, arguments) || this;
+    }
+    InlineBlot.formats = function (domNode) {
+        if (domNode.tagName === InlineBlot.tagName)
+            return undefined;
+        return _super.formats.call(this, domNode);
+    };
+    InlineBlot.prototype.format = function (name, value) {
+        var _this = this;
+        if (name === this.statics.blotName && !value) {
+            this.children.forEach(function (child) {
+                if (!(child instanceof format_1.default)) {
+                    child = child.wrap(InlineBlot.blotName, true);
+                }
+                _this.attributes.copy(child);
+            });
+            this.unwrap();
+        }
+        else {
+            _super.prototype.format.call(this, name, value);
+        }
+    };
+    InlineBlot.prototype.formatAt = function (index, length, name, value) {
+        if (this.formats()[name] != null || Registry.query(name, Registry.Scope.ATTRIBUTE)) {
+            var blot = this.isolate(index, length);
+            blot.format(name, value);
+        }
+        else {
+            _super.prototype.formatAt.call(this, index, length, name, value);
+        }
+    };
+    InlineBlot.prototype.optimize = function (context) {
+        _super.prototype.optimize.call(this, context);
+        var formats = this.formats();
+        if (Object.keys(formats).length === 0) {
+            return this.unwrap(); // unformatted span
+        }
+        var next = this.next;
+        if (next instanceof InlineBlot && next.prev === this && isEqual(formats, next.formats())) {
+            next.moveChildren(this);
+            next.remove();
+        }
+    };
+    InlineBlot.blotName = 'inline';
+    InlineBlot.scope = Registry.Scope.INLINE_BLOT;
+    InlineBlot.tagName = 'SPAN';
+    return InlineBlot;
+}(format_1.default));
+exports.default = InlineBlot;
+
+
+/***/ }),
+/* 47 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+var __extends = (this && this.__extends) || (function () {
+    var extendStatics = Object.setPrototypeOf ||
+        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
+        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
+    return function (d, b) {
+        extendStatics(d, b);
+        function __() { this.constructor = d; }
+        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+    };
+})();
+Object.defineProperty(exports, "__esModule", { value: true });
+var format_1 = __webpack_require__(18);
+var Registry = __webpack_require__(1);
+var BlockBlot = /** @class */ (function (_super) {
+    __extends(BlockBlot, _super);
+    function BlockBlot() {
+        return _super !== null && _super.apply(this, arguments) || this;
+    }
+    BlockBlot.formats = function (domNode) {
+        var tagName = Registry.query(BlockBlot.blotName).tagName;
+        if (domNode.tagName === tagName)
+            return undefined;
+        return _super.formats.call(this, domNode);
+    };
+    BlockBlot.prototype.format = function (name, value) {
+        if (Registry.query(name, Registry.Scope.BLOCK) == null) {
+            return;
+        }
+        else if (name === this.statics.blotName && !value) {
+            this.replaceWith(BlockBlot.blotName);
+        }
+        else {
+            _super.prototype.format.call(this, name, value);
+        }
+    };
+    BlockBlot.prototype.formatAt = function (index, length, name, value) {
+        if (Registry.query(name, Registry.Scope.BLOCK) != null) {
+            this.format(name, value);
+        }
+        else {
+            _super.prototype.formatAt.call(this, index, length, name, value);
+        }
+    };
+    BlockBlot.prototype.insertAt = function (index, value, def) {
+        if (def == null || Registry.query(value, Registry.Scope.INLINE) != null) {
+            // Insert text or inline
+            _super.prototype.insertAt.call(this, index, value, def);
+        }
+        else {
+            var after = this.split(index);
+            var blot = Registry.create(value, def);
+            after.parent.insertBefore(blot, after);
+        }
+    };
+    BlockBlot.prototype.update = function (mutations, context) {
+        if (navigator.userAgent.match(/Trident/)) {
+            this.build();
+        }
+        else {
+            _super.prototype.update.call(this, mutations, context);
+        }
+    };
+    BlockBlot.blotName = 'block';
+    BlockBlot.scope = Registry.Scope.BLOCK_BLOT;
+    BlockBlot.tagName = 'P';
+    return BlockBlot;
+}(format_1.default));
+exports.default = BlockBlot;
+
+
+/***/ }),
+/* 48 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+var __extends = (this && this.__extends) || (function () {
+    var extendStatics = Object.setPrototypeOf ||
+        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
+        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
+    return function (d, b) {
+        extendStatics(d, b);
+        function __() { this.constructor = d; }
+        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+    };
+})();
+Object.defineProperty(exports, "__esModule", { value: true });
+var leaf_1 = __webpack_require__(19);
+var EmbedBlot = /** @class */ (function (_super) {
+    __extends(EmbedBlot, _super);
+    function EmbedBlot() {
+        return _super !== null && _super.apply(this, arguments) || this;
+    }
+    EmbedBlot.formats = function (domNode) {
+        return undefined;
+    };
+    EmbedBlot.prototype.format = function (name, value) {
+        // super.formatAt wraps, which is what we want in general,
+        // but this allows subclasses to overwrite for formats
+        // that just apply to particular embeds
+        _super.prototype.formatAt.call(this, 0, this.length(), name, value);
+    };
+    EmbedBlot.prototype.formatAt = function (index, length, name, value) {
+        if (index === 0 && length === this.length()) {
+            this.format(name, value);
+        }
+        else {
+            _super.prototype.formatAt.call(this, index, length, name, value);
+        }
+    };
+    EmbedBlot.prototype.formats = function () {
+        return this.statics.formats(this.domNode);
+    };
+    return EmbedBlot;
+}(leaf_1.default));
+exports.default = EmbedBlot;
+
+
+/***/ }),
+/* 49 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+var __extends = (this && this.__extends) || (function () {
+    var extendStatics = Object.setPrototypeOf ||
+        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
+        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
+    return function (d, b) {
+        extendStatics(d, b);
+        function __() { this.constructor = d; }
+        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+    };
+})();
+Object.defineProperty(exports, "__esModule", { value: true });
+var leaf_1 = __webpack_require__(19);
+var Registry = __webpack_require__(1);
+var TextBlot = /** @class */ (function (_super) {
+    __extends(TextBlot, _super);
+    function TextBlot(node) {
+        var _this = _super.call(this, node) || this;
+        _this.text = _this.statics.value(_this.domNode);
+        return _this;
+    }
+    TextBlot.create = function (value) {
+        return document.createTextNode(value);
+    };
+    TextBlot.value = function (domNode) {
+        var text = domNode.data;
+        // @ts-ignore
+        if (text['normalize'])
+            text = text['normalize']();
+        return text;
+    };
+    TextBlot.prototype.deleteAt = function (index, length) {
+        this.domNode.data = this.text = this.text.slice(0, index) + this.text.slice(index + length);
+    };
+    TextBlot.prototype.index = function (node, offset) {
+        if (this.domNode === node) {
+            return offset;
+        }
+        return -1;
+    };
+    TextBlot.prototype.insertAt = function (index, value, def) {
+        if (def == null) {
+            this.text = this.text.slice(0, index) + value + this.text.slice(index);
+            this.domNode.data = this.text;
+        }
+        else {
+            _super.prototype.insertAt.call(this, index, value, def);
+        }
+    };
+    TextBlot.prototype.length = function () {
+        return this.text.length;
+    };
+    TextBlot.prototype.optimize = function (context) {
+        _super.prototype.optimize.call(this, context);
+        this.text = this.statics.value(this.domNode);
+        if (this.text.length === 0) {
+            this.remove();
+        }
+        else if (this.next instanceof TextBlot && this.next.prev === this) {
+            this.insertAt(this.length(), this.next.value());
+            this.next.remove();
+        }
+    };
+    TextBlot.prototype.position = function (index, inclusive) {
+        if (inclusive === void 0) { inclusive = false; }
+        return [this.domNode, index];
+    };
+    TextBlot.prototype.split = function (index, force) {
+        if (force === void 0) { force = false; }
+        if (!force) {
+            if (index === 0)
+                return this;
+            if (index === this.length())
+                return this.next;
+        }
+        var after = Registry.create(this.domNode.splitText(index));
+        this.parent.insertBefore(after, this.next);
+        this.text = this.statics.value(this.domNode);
+        return after;
+    };
+    TextBlot.prototype.update = function (mutations, context) {
+        var _this = this;
+        if (mutations.some(function (mutation) {
+            return mutation.type === 'characterData' && mutation.target === _this.domNode;
+        })) {
+            this.text = this.statics.value(this.domNode);
+        }
+    };
+    TextBlot.prototype.value = function () {
+        return this.text;
+    };
+    TextBlot.blotName = 'text';
+    TextBlot.scope = Registry.Scope.INLINE_BLOT;
+    return TextBlot;
+}(leaf_1.default));
+exports.default = TextBlot;
+
+
+/***/ }),
+/* 50 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var elem = document.createElement('div');
+elem.classList.toggle('test-class', false);
+if (elem.classList.contains('test-class')) {
+  var _toggle = DOMTokenList.prototype.toggle;
+  DOMTokenList.prototype.toggle = function (token, force) {
+    if (arguments.length > 1 && !this.contains(token) === !force) {
+      return force;
+    } else {
+      return _toggle.call(this, token);
+    }
+  };
+}
+
+if (!String.prototype.startsWith) {
+  String.prototype.startsWith = function (searchString, position) {
+    position = position || 0;
+    return this.substr(position, searchString.length) === searchString;
+  };
+}
+
+if (!String.prototype.endsWith) {
+  String.prototype.endsWith = function (searchString, position) {
+    var subjectString = this.toString();
+    if (typeof position !== 'number' || !isFinite(position) || Math.floor(position) !== position || position > subjectString.length) {
+      position = subjectString.length;
+    }
+    position -= searchString.length;
+    var lastIndex = subjectString.indexOf(searchString, position);
+    return lastIndex !== -1 && lastIndex === position;
+  };
+}
+
+if (!Array.prototype.find) {
+  Object.defineProperty(Array.prototype, "find", {
+    value: function value(predicate) {
+      if (this === null) {
+        throw new TypeError('Array.prototype.find called on null or undefined');
+      }
+      if (typeof predicate !== 'function') {
+        throw new TypeError('predicate must be a function');
+      }
+      var list = Object(this);
+      var length = list.length >>> 0;
+      var thisArg = arguments[1];
+      var value;
+
+      for (var i = 0; i < length; i++) {
+        value = list[i];
+        if (predicate.call(thisArg, value, i, list)) {
+          return value;
+        }
+      }
+      return undefined;
+    }
+  });
+}
+
+document.addEventListener("DOMContentLoaded", function () {
+  // Disable resizing in Firefox
+  document.execCommand("enableObjectResizing", false, false);
+  // Disable automatic linkifying in IE11
+  document.execCommand("autoUrlDetect", false, false);
+});
+
+/***/ }),
+/* 51 */
+/***/ (function(module, exports) {
+
+/**
+ * This library modifies the diff-patch-match library by Neil Fraser
+ * by removing the patch and match functionality and certain advanced
+ * options in the diff function. The original license is as follows:
+ *
+ * ===
+ *
+ * Diff Match and Patch
+ *
+ * Copyright 2006 Google Inc.
+ * http://code.google.com/p/google-diff-match-patch/
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+/**
+ * The data structure representing a diff is an array of tuples:
+ * [[DIFF_DELETE, 'Hello'], [DIFF_INSERT, 'Goodbye'], [DIFF_EQUAL, ' world.']]
+ * which means: delete 'Hello', add 'Goodbye' and keep ' world.'
+ */
+var DIFF_DELETE = -1;
+var DIFF_INSERT = 1;
+var DIFF_EQUAL = 0;
+
+
+/**
+ * Find the differences between two texts.  Simplifies the problem by stripping
+ * any common prefix or suffix off the texts before diffing.
+ * @param {string} text1 Old string to be diffed.
+ * @param {string} text2 New string to be diffed.
+ * @param {Int} cursor_pos Expected edit position in text1 (optional)
+ * @return {Array} Array of diff tuples.
+ */
+function diff_main(text1, text2, cursor_pos) {
+  // Check for equality (speedup).
+  if (text1 == text2) {
+    if (text1) {
+      return [[DIFF_EQUAL, text1]];
+    }
+    return [];
+  }
+
+  // Check cursor_pos within bounds
+  if (cursor_pos < 0 || text1.length < cursor_pos) {
+    cursor_pos = null;
+  }
+
+  // Trim off common prefix (speedup).
+  var commonlength = diff_commonPrefix(text1, text2);
+  var commonprefix = text1.substring(0, commonlength);
+  text1 = text1.substring(commonlength);
+  text2 = text2.substring(commonlength);
+
+  // Trim off common suffix (speedup).
+  commonlength = diff_commonSuffix(text1, text2);
+  var commonsuffix = text1.substring(text1.length - commonlength);
+  text1 = text1.substring(0, text1.length - commonlength);
+  text2 = text2.substring(0, text2.length - commonlength);
+
+  // Compute the diff on the middle block.
+  var diffs = diff_compute_(text1, text2);
+
+  // Restore the prefix and suffix.
+  if (commonprefix) {
+    diffs.unshift([DIFF_EQUAL, commonprefix]);
+  }
+  if (commonsuffix) {
+    diffs.push([DIFF_EQUAL, commonsuffix]);
+  }
+  diff_cleanupMerge(diffs);
+  if (cursor_pos != null) {
+    diffs = fix_cursor(diffs, cursor_pos);
+  }
+  diffs = fix_emoji(diffs);
+  return diffs;
+};
+
+
+/**
+ * Find the differences between two texts.  Assumes that the texts do not
+ * have any common prefix or suffix.
+ * @param {string} text1 Old string to be diffed.
+ * @param {string} text2 New string to be diffed.
+ * @return {Array} Array of diff tuples.
+ */
+function diff_compute_(text1, text2) {
+  var diffs;
+
+  if (!text1) {
+    // Just add some text (speedup).
+    return [[DIFF_INSERT, text2]];
+  }
+
+  if (!text2) {
+    // Just delete some text (speedup).
+    return [[DIFF_DELETE, text1]];
+  }
+
+  var longtext = text1.length > text2.length ? text1 : text2;
+  var shorttext = text1.length > text2.length ? text2 : text1;
+  var i = longtext.indexOf(shorttext);
+  if (i != -1) {
+    // Shorter text is inside the longer text (speedup).
+    diffs = [[DIFF_INSERT, longtext.substring(0, i)],
+             [DIFF_EQUAL, shorttext],
+             [DIFF_INSERT, longtext.substring(i + shorttext.length)]];
+    // Swap insertions for deletions if diff is reversed.
+    if (text1.length > text2.length) {
+      diffs[0][0] = diffs[2][0] = DIFF_DELETE;
+    }
+    return diffs;
+  }
+
+  if (shorttext.length == 1) {
+    // Single character string.
+    // After the previous speedup, the character can't be an equality.
+    return [[DIFF_DELETE, text1], [DIFF_INSERT, text2]];
+  }
+
+  // Check to see if the problem can be split in two.
+  var hm = diff_halfMatch_(text1, text2);
+  if (hm) {
+    // A half-match was found, sort out the return data.
+    var text1_a = hm[0];
+    var text1_b = hm[1];
+    var text2_a = hm[2];
+    var text2_b = hm[3];
+    var mid_common = hm[4];
+    // Send both pairs off for separate processing.
+    var diffs_a = diff_main(text1_a, text2_a);
+    var diffs_b = diff_main(text1_b, text2_b);
+    // Merge the results.
+    return diffs_a.concat([[DIFF_EQUAL, mid_common]], diffs_b);
+  }
+
+  return diff_bisect_(text1, text2);
+};
+
+
+/**
+ * Find the 'middle snake' of a diff, split the problem in two
+ * and return the recursively constructed diff.
+ * See Myers 1986 paper: An O(ND) Difference Algorithm and Its Variations.
+ * @param {string} text1 Old string to be diffed.
+ * @param {string} text2 New string to be diffed.
+ * @return {Array} Array of diff tuples.
+ * @private
+ */
+function diff_bisect_(text1, text2) {
+  // Cache the text lengths to prevent multiple calls.
+  var text1_length = text1.length;
+  var text2_length = text2.length;
+  var max_d = Math.ceil((text1_length + text2_length) / 2);
+  var v_offset = max_d;
+  var v_length = 2 * max_d;
+  var v1 = new Array(v_length);
+  var v2 = new Array(v_length);
+  // Setting all elements to -1 is faster in Chrome & Firefox than mixing
+  // integers and undefined.
+  for (var x = 0; x < v_length; x++) {
+    v1[x] = -1;
+    v2[x] = -1;
+  }
+  v1[v_offset + 1] = 0;
+  v2[v_offset + 1] = 0;
+  var delta = text1_length - text2_length;
+  // If the total number of characters is odd, then the front path will collide
+  // with the reverse path.
+  var front = (delta % 2 != 0);
+  // Offsets for start and end of k loop.
+  // Prevents mapping of space beyond the grid.
+  var k1start = 0;
+  var k1end = 0;
+  var k2start = 0;
+  var k2end = 0;
+  for (var d = 0; d < max_d; d++) {
+    // Walk the front path one step.
+    for (var k1 = -d + k1start; k1 <= d - k1end; k1 += 2) {
+      var k1_offset = v_offset + k1;
+      var x1;
+      if (k1 == -d || (k1 != d && v1[k1_offset - 1] < v1[k1_offset + 1])) {
+        x1 = v1[k1_offset + 1];
+      } else {
+        x1 = v1[k1_offset - 1] + 1;
+      }
+      var y1 = x1 - k1;
+      while (x1 < text1_length && y1 < text2_length &&
+             text1.charAt(x1) == text2.charAt(y1)) {
+        x1++;
+        y1++;
+      }
+      v1[k1_offset] = x1;
+      if (x1 > text1_length) {
+        // Ran off the right of the graph.
+        k1end += 2;
+      } else if (y1 > text2_length) {
+        // Ran off the bottom of the graph.
+        k1start += 2;
+      } else if (front) {
+        var k2_offset = v_offset + delta - k1;
+        if (k2_offset >= 0 && k2_offset < v_length && v2[k2_offset] != -1) {
+          // Mirror x2 onto top-left coordinate system.
+          var x2 = text1_length - v2[k2_offset];
+          if (x1 >= x2) {
+            // Overlap detected.
+            return diff_bisectSplit_(text1, text2, x1, y1);
+          }
+        }
+      }
+    }
+
+    // Walk the reverse path one step.
+    for (var k2 = -d + k2start; k2 <= d - k2end; k2 += 2) {
+      var k2_offset = v_offset + k2;
+      var x2;
+      if (k2 == -d || (k2 != d && v2[k2_offset - 1] < v2[k2_offset + 1])) {
+        x2 = v2[k2_offset + 1];
+      } else {
+        x2 = v2[k2_offset - 1] + 1;
+      }
+      var y2 = x2 - k2;
+      while (x2 < text1_length && y2 < text2_length &&
+             text1.charAt(text1_length - x2 - 1) ==
+             text2.charAt(text2_length - y2 - 1)) {
+        x2++;
+        y2++;
+      }
+      v2[k2_offset] = x2;
+      if (x2 > text1_length) {
+        // Ran off the left of the graph.
+        k2end += 2;
+      } else if (y2 > text2_length) {
+        // Ran off the top of the graph.
+        k2start += 2;
+      } else if (!front) {
+        var k1_offset = v_offset + delta - k2;
+        if (k1_offset >= 0 && k1_offset < v_length && v1[k1_offset] != -1) {
+          var x1 = v1[k1_offset];
+          var y1 = v_offset + x1 - k1_offset;
+          // Mirror x2 onto top-left coordinate system.
+          x2 = text1_length - x2;
+          if (x1 >= x2) {
+            // Overlap detected.
+            return diff_bisectSplit_(text1, text2, x1, y1);
+          }
+        }
+      }
+    }
+  }
+  // Diff took too long and hit the deadline or
+  // number of diffs equals number of characters, no commonality at all.
+  return [[DIFF_DELETE, text1], [DIFF_INSERT, text2]];
+};
+
+
+/**
+ * Given the location of the 'middle snake', split the diff in two parts
+ * and recurse.
+ * @param {string} text1 Old string to be diffed.
+ * @param {string} text2 New string to be diffed.
+ * @param {number} x Index of split point in text1.
+ * @param {number} y Index of split point in text2.
+ * @return {Array} Array of diff tuples.
+ */
+function diff_bisectSplit_(text1, text2, x, y) {
+  var text1a = text1.substring(0, x);
+  var text2a = text2.substring(0, y);
+  var text1b = text1.substring(x);
+  var text2b = text2.substring(y);
+
+  // Compute both diffs serially.
+  var diffs = diff_main(text1a, text2a);
+  var diffsb = diff_main(text1b, text2b);
+
+  return diffs.concat(diffsb);
+};
+
+
+/**
+ * Determine the common prefix of two strings.
+ * @param {string} text1 First string.
+ * @param {string} text2 Second string.
+ * @return {number} The number of characters common to the start of each
+ *     string.
+ */
+function diff_commonPrefix(text1, text2) {
+  // Quick check for common null cases.
+  if (!text1 || !text2 || text1.charAt(0) != text2.charAt(0)) {
+    return 0;
+  }
+  // Binary search.
+  // Performance analysis: http://neil.fraser.name/news/2007/10/09/
+  var pointermin = 0;
+  var pointermax = Math.min(text1.length, text2.length);
+  var pointermid = pointermax;
+  var pointerstart = 0;
+  while (pointermin < pointermid) {
+    if (text1.substring(pointerstart, pointermid) ==
+        text2.substring(pointerstart, pointermid)) {
+      pointermin = pointermid;
+      pointerstart = pointermin;
+    } else {
+      pointermax = pointermid;
+    }
+    pointermid = Math.floor((pointermax - pointermin) / 2 + pointermin);
+  }
+  return pointermid;
+};
+
+
+/**
+ * Determine the common suffix of two strings.
+ * @param {string} text1 First string.
+ * @param {string} text2 Second string.
+ * @return {number} The number of characters common to the end of each string.
+ */
+function diff_commonSuffix(text1, text2) {
+  // Quick check for common null cases.
+  if (!text1 || !text2 ||
+      text1.charAt(text1.length - 1) != text2.charAt(text2.length - 1)) {
+    return 0;
+  }
+  // Binary search.
+  // Performance analysis: http://neil.fraser.name/news/2007/10/09/
+  var pointermin = 0;
+  var pointermax = Math.min(text1.length, text2.length);
+  var pointermid = pointermax;
+  var pointerend = 0;
+  while (pointermin < pointermid) {
+    if (text1.substring(text1.length - pointermid, text1.length - pointerend) ==
+        text2.substring(text2.length - pointermid, text2.length - pointerend)) {
+      pointermin = pointermid;
+      pointerend = pointermin;
+    } else {
+      pointermax = pointermid;
+    }
+    pointermid = Math.floor((pointermax - pointermin) / 2 + pointermin);
+  }
+  return pointermid;
+};
+
+
+/**
+ * Do the two texts share a substring which is at least half the length of the
+ * longer text?
+ * This speedup can produce non-minimal diffs.
+ * @param {string} text1 First string.
+ * @param {string} text2 Second string.
+ * @return {Array.<string>} Five element Array, containing the prefix of
+ *     text1, the suffix of text1, the prefix of text2, the suffix of
+ *     text2 and the common middle.  Or null if there was no match.
+ */
+function diff_halfMatch_(text1, text2) {
+  var longtext = text1.length > text2.length ? text1 : text2;
+  var shorttext = text1.length > text2.length ? text2 : text1;
+  if (longtext.length < 4 || shorttext.length * 2 < longtext.length) {
+    return null;  // Pointless.
+  }
+
+  /**
+   * Does a substring of shorttext exist within longtext such that the substring
+   * is at least half the length of longtext?
+   * Closure, but does not reference any external variables.
+   * @param {string} longtext Longer string.
+   * @param {string} shorttext Shorter string.
+   * @param {number} i Start index of quarter length substring within longtext.
+   * @return {Array.<string>} Five element Array, containing the prefix of
+   *     longtext, the suffix of longtext, the prefix of shorttext, the suffix
+   *     of shorttext and the common middle.  Or null if there was no match.
+   * @private
+   */
+  function diff_halfMatchI_(longtext, shorttext, i) {
+    // Start with a 1/4 length substring at position i as a seed.
+    var seed = longtext.substring(i, i + Math.floor(longtext.length / 4));
+    var j = -1;
+    var best_common = '';
+    var best_longtext_a, best_longtext_b, best_shorttext_a, best_shorttext_b;
+    while ((j = shorttext.indexOf(seed, j + 1)) != -1) {
+      var prefixLength = diff_commonPrefix(longtext.substring(i),
+                                           shorttext.substring(j));
+      var suffixLength = diff_commonSuffix(longtext.substring(0, i),
+                                           shorttext.substring(0, j));
+      if (best_common.length < suffixLength + prefixLength) {
+        best_common = shorttext.substring(j - suffixLength, j) +
+            shorttext.substring(j, j + prefixLength);
+        best_longtext_a = longtext.substring(0, i - suffixLength);
+        best_longtext_b = longtext.substring(i + prefixLength);
+        best_shorttext_a = shorttext.substring(0, j - suffixLength);
+        best_shorttext_b = shorttext.substring(j + prefixLength);
+      }
+    }
+    if (best_common.length * 2 >= longtext.length) {
+      return [best_longtext_a, best_longtext_b,
+              best_shorttext_a, best_shorttext_b, best_common];
+    } else {
+      return null;
+    }
+  }
+
+  // First check if the second quarter is the seed for a half-match.
+  var hm1 = diff_halfMatchI_(longtext, shorttext,
+                             Math.ceil(longtext.length / 4));
+  // Check again based on the third quarter.
+  var hm2 = diff_halfMatchI_(longtext, shorttext,
+                             Math.ceil(longtext.length / 2));
+  var hm;
+  if (!hm1 && !hm2) {
+    return null;
+  } else if (!hm2) {
+    hm = hm1;
+  } else if (!hm1) {
+    hm = hm2;
+  } else {
+    // Both matched.  Select the longest.
+    hm = hm1[4].length > hm2[4].length ? hm1 : hm2;
+  }
+
+  // A half-match was found, sort out the return data.
+  var text1_a, text1_b, text2_a, text2_b;
+  if (text1.length > text2.length) {
+    text1_a = hm[0];
+    text1_b = hm[1];
+    text2_a = hm[2];
+    text2_b = hm[3];
+  } else {
+    text2_a = hm[0];
+    text2_b = hm[1];
+    text1_a = hm[2];
+    text1_b = hm[3];
+  }
+  var mid_common = hm[4];
+  return [text1_a, text1_b, text2_a, text2_b, mid_common];
+};
+
+
+/**
+ * Reorder and merge like edit sections.  Merge equalities.
+ * Any edit section can move as long as it doesn't cross an equality.
+ * @param {Array} diffs Array of diff tuples.
+ */
+function diff_cleanupMerge(diffs) {
+  diffs.push([DIFF_EQUAL, '']);  // Add a dummy entry at the end.
+  var pointer = 0;
+  var count_delete = 0;
+  var count_insert = 0;
+  var text_delete = '';
+  var text_insert = '';
+  var commonlength;
+  while (pointer < diffs.length) {
+    switch (diffs[pointer][0]) {
+      case DIFF_INSERT:
+        count_insert++;
+        text_insert += diffs[pointer][1];
+        pointer++;
+        break;
+      case DIFF_DELETE:
+        count_delete++;
+        text_delete += diffs[pointer][1];
+        pointer++;
+        break;
+      case DIFF_EQUAL:
+        // Upon reaching an equality, check for prior redundancies.
+        if (count_delete + count_insert > 1) {
+          if (count_delete !== 0 && count_insert !== 0) {
+            // Factor out any common prefixies.
+            commonlength = diff_commonPrefix(text_insert, text_delete);
+            if (commonlength !== 0) {
+              if ((pointer - count_delete - count_insert) > 0 &&
+                  diffs[pointer - count_delete - count_insert - 1][0] ==
+                  DIFF_EQUAL) {
+                diffs[pointer - count_delete - count_insert - 1][1] +=
+                    text_insert.substring(0, commonlength);
+              } else {
+                diffs.splice(0, 0, [DIFF_EQUAL,
+                                    text_insert.substring(0, commonlength)]);
+                pointer++;
+              }
+              text_insert = text_insert.substring(commonlength);
+              text_delete = text_delete.substring(commonlength);
+            }
+            // Factor out any common suffixies.
+            commonlength = diff_commonSuffix(text_insert, text_delete);
+            if (commonlength !== 0) {
+              diffs[pointer][1] = text_insert.substring(text_insert.length -
+                  commonlength) + diffs[pointer][1];
+              text_insert = text_insert.substring(0, text_insert.length -
+                  commonlength);
+              text_delete = text_delete.substring(0, text_delete.length -
+                  commonlength);
+            }
+          }
+          // Delete the offending records and add the merged ones.
+          if (count_delete === 0) {
+            diffs.splice(pointer - count_insert,
+                count_delete + count_insert, [DIFF_INSERT, text_insert]);
+          } else if (count_insert === 0) {
+            diffs.splice(pointer - count_delete,
+                count_delete + count_insert, [DIFF_DELETE, text_delete]);
+          } else {
+            diffs.splice(pointer - count_delete - count_insert,
+                count_delete + count_insert, [DIFF_DELETE, text_delete],
+                [DIFF_INSERT, text_insert]);
+          }
+          pointer = pointer - count_delete - count_insert +
+                    (count_delete ? 1 : 0) + (count_insert ? 1 : 0) + 1;
+        } else if (pointer !== 0 && diffs[pointer - 1][0] == DIFF_EQUAL) {
+          // Merge this equality with the previous one.
+          diffs[pointer - 1][1] += diffs[pointer][1];
+          diffs.splice(pointer, 1);
+        } else {
+          pointer++;
+        }
+        count_insert = 0;
+        count_delete = 0;
+        text_delete = '';
+        text_insert = '';
+        break;
+    }
+  }
+  if (diffs[diffs.length - 1][1] === '') {
+    diffs.pop();  // Remove the dummy entry at the end.
+  }
+
+  // Second pass: look for single edits surrounded on both sides by equalities
+  // which can be shifted sideways to eliminate an equality.
+  // e.g: A<ins>BA</ins>C -> <ins>AB</ins>AC
+  var changes = false;
+  pointer = 1;
+  // Intentionally ignore the first and last element (don't need checking).
+  while (pointer < diffs.length - 1) {
+    if (diffs[pointer - 1][0] == DIFF_EQUAL &&
+        diffs[pointer + 1][0] == DIFF_EQUAL) {
+      // This is a single edit surrounded by equalities.
+      if (diffs[pointer][1].substring(diffs[pointer][1].length -
+          diffs[pointer - 1][1].length) == diffs[pointer - 1][1]) {
+        // Shift the edit over the previous equality.
+        diffs[pointer][1] = diffs[pointer - 1][1] +
+            diffs[pointer][1].substring(0, diffs[pointer][1].length -
+                                        diffs[pointer - 1][1].length);
+        diffs[pointer + 1][1] = diffs[pointer - 1][1] + diffs[pointer + 1][1];
+        diffs.splice(pointer - 1, 1);
+        changes = true;
+      } else if (diffs[pointer][1].substring(0, diffs[pointer + 1][1].length) ==
+          diffs[pointer + 1][1]) {
+        // Shift the edit over the next equality.
+        diffs[pointer - 1][1] += diffs[pointer + 1][1];
+        diffs[pointer][1] =
+            diffs[pointer][1].substring(diffs[pointer + 1][1].length) +
+            diffs[pointer + 1][1];
+        diffs.splice(pointer + 1, 1);
+        changes = true;
+      }
+    }
+    pointer++;
+  }
+  // If shifts were made, the diff needs reordering and another shift sweep.
+  if (changes) {
+    diff_cleanupMerge(diffs);
+  }
+};
+
+
+var diff = diff_main;
+diff.INSERT = DIFF_INSERT;
+diff.DELETE = DIFF_DELETE;
+diff.EQUAL = DIFF_EQUAL;
+
+module.exports = diff;
+
+/*
+ * Modify a diff such that the cursor position points to the start of a change:
+ * E.g.
+ *   cursor_normalize_diff([[DIFF_EQUAL, 'abc']], 1)
+ *     => [1, [[DIFF_EQUAL, 'a'], [DIFF_EQUAL, 'bc']]]
+ *   cursor_normalize_diff([[DIFF_INSERT, 'new'], [DIFF_DELETE, 'xyz']], 2)
+ *     => [2, [[DIFF_INSERT, 'new'], [DIFF_DELETE, 'xy'], [DIFF_DELETE, 'z']]]
+ *
+ * @param {Array} diffs Array of diff tuples
+ * @param {Int} cursor_pos Suggested edit position. Must not be out of bounds!
+ * @return {Array} A tuple [cursor location in the modified diff, modified diff]
+ */
+function cursor_normalize_diff (diffs, cursor_pos) {
+  if (cursor_pos === 0) {
+    return [DIFF_EQUAL, diffs];
+  }
+  for (var current_pos = 0, i = 0; i < diffs.length; i++) {
+    var d = diffs[i];
+    if (d[0] === DIFF_DELETE || d[0] === DIFF_EQUAL) {
+      var next_pos = current_pos + d[1].length;
+      if (cursor_pos === next_pos) {
+        return [i + 1, diffs];
+      } else if (cursor_pos < next_pos) {
+        // copy to prevent side effects
+        diffs = diffs.slice();
+        // split d into two diff changes
+        var split_pos = cursor_pos - current_pos;
+        var d_left = [d[0], d[1].slice(0, split_pos)];
+        var d_right = [d[0], d[1].slice(split_pos)];
+        diffs.splice(i, 1, d_left, d_right);
+        return [i + 1, diffs];
+      } else {
+        current_pos = next_pos;
+      }
+    }
+  }
+  throw new Error('cursor_pos is out of bounds!')
+}
+
+/*
+ * Modify a diff such that the edit position is "shifted" to the proposed edit location (cursor_position).
+ *
+ * Case 1)
+ *   Check if a naive shift is possible:
+ *     [0, X], [ 1, Y] -> [ 1, Y], [0, X]    (if X + Y === Y + X)
+ *     [0, X], [-1, Y] -> [-1, Y], [0, X]    (if X + Y === Y + X) - holds same result
+ * Case 2)
+ *   Check if the following shifts are possible:
+ *     [0, 'pre'], [ 1, 'prefix'] -> [ 1, 'pre'], [0, 'pre'], [ 1, 'fix']
+ *     [0, 'pre'], [-1, 'prefix'] -> [-1, 'pre'], [0, 'pre'], [-1, 'fix']
+ *         ^            ^
+ *         d          d_next
+ *
+ * @param {Array} diffs Array of diff tuples
+ * @param {Int} cursor_pos Suggested edit position. Must not be out of bounds!
+ * @return {Array} Array of diff tuples
+ */
+function fix_cursor (diffs, cursor_pos) {
+  var norm = cursor_normalize_diff(diffs, cursor_pos);
+  var ndiffs = norm[1];
+  var cursor_pointer = norm[0];
+  var d = ndiffs[cursor_pointer];
+  var d_next = ndiffs[cursor_pointer + 1];
+
+  if (d == null) {
+    // Text was deleted from end of original string,
+    // cursor is now out of bounds in new string
+    return diffs;
+  } else if (d[0] !== DIFF_EQUAL) {
+    // A modification happened at the cursor location.
+    // This is the expected outcome, so we can return the original diff.
+    return diffs;
+  } else {
+    if (d_next != null && d[1] + d_next[1] === d_next[1] + d[1]) {
+      // Case 1)
+      // It is possible to perform a naive shift
+      ndiffs.splice(cursor_pointer, 2, d_next, d)
+      return merge_tuples(ndiffs, cursor_pointer, 2)
+    } else if (d_next != null && d_next[1].indexOf(d[1]) === 0) {
+      // Case 2)
+      // d[1] is a prefix of d_next[1]
+      // We can assume that d_next[0] !== 0, since d[0] === 0
+      // Shift edit locations..
+      ndiffs.splice(cursor_pointer, 2, [d_next[0], d[1]], [0, d[1]]);
+      var suffix = d_next[1].slice(d[1].length);
+      if (suffix.length > 0) {
+        ndiffs.splice(cursor_pointer + 2, 0, [d_next[0], suffix]);
+      }
+      return merge_tuples(ndiffs, cursor_pointer, 3)
+    } else {
+      // Not possible to perform any modification
+      return diffs;
+    }
+  }
+}
+
+/*
+ * Check diff did not split surrogate pairs.
+ * Ex. [0, '\uD83D'], [-1, '\uDC36'], [1, '\uDC2F'] -> [-1, '\uD83D\uDC36'], [1, '\uD83D\uDC2F']
+ *     '\uD83D\uDC36' === '🐶', '\uD83D\uDC2F' === '🐯'
+ *
+ * @param {Array} diffs Array of diff tuples
+ * @return {Array} Array of diff tuples
+ */
+function fix_emoji (diffs) {
+  var compact = false;
+  var starts_with_pair_end = function(str) {
+    return str.charCodeAt(0) >= 0xDC00 && str.charCodeAt(0) <= 0xDFFF;
+  }
+  var ends_with_pair_start = function(str) {
+    return str.charCodeAt(str.length-1) >= 0xD800 && str.charCodeAt(str.length-1) <= 0xDBFF;
+  }
+  for (var i = 2; i < diffs.length; i += 1) {
+    if (diffs[i-2][0] === DIFF_EQUAL && ends_with_pair_start(diffs[i-2][1]) &&
+        diffs[i-1][0] === DIFF_DELETE && starts_with_pair_end(diffs[i-1][1]) &&
+        diffs[i][0] === DIFF_INSERT && starts_with_pair_end(diffs[i][1])) {
+      compact = true;
+
+      diffs[i-1][1] = diffs[i-2][1].slice(-1) + diffs[i-1][1];
+      diffs[i][1] = diffs[i-2][1].slice(-1) + diffs[i][1];
+
+      diffs[i-2][1] = diffs[i-2][1].slice(0, -1);
+    }
+  }
+  if (!compact) {
+    return diffs;
+  }
+  var fixed_diffs = [];
+  for (var i = 0; i < diffs.length; i += 1) {
+    if (diffs[i][1].length > 0) {
+      fixed_diffs.push(diffs[i]);
+    }
+  }
+  return fixed_diffs;
+}
+
+/*
+ * Try to merge tuples with their neigbors in a given range.
+ * E.g. [0, 'a'], [0, 'b'] -> [0, 'ab']
+ *
+ * @param {Array} diffs Array of diff tuples.
+ * @param {Int} start Position of the first element to merge (diffs[start] is also merged with diffs[start - 1]).
+ * @param {Int} length Number of consecutive elements to check.
+ * @return {Array} Array of merged diff tuples.
+ */
+function merge_tuples (diffs, start, length) {
+  // Check from (start-1) to (start+length).
+  for (var i = start + length - 1; i >= 0 && i >= start - 1; i--) {
+    if (i + 1 < diffs.length) {
+      var left_d = diffs[i];
+      var right_d = diffs[i+1];
+      if (left_d[0] === right_d[1]) {
+        diffs.splice(i, 2, [left_d[0], left_d[1] + right_d[1]]);
+      }
+    }
+  }
+  return diffs;
+}
+
+
+/***/ }),
+/* 52 */
+/***/ (function(module, exports) {
+
+exports = module.exports = typeof Object.keys === 'function'
+  ? Object.keys : shim;
+
+exports.shim = shim;
+function shim (obj) {
+  var keys = [];
+  for (var key in obj) keys.push(key);
+  return keys;
+}
+
+
+/***/ }),
+/* 53 */
+/***/ (function(module, exports) {
+
+var supportsArgumentsClass = (function(){
+  return Object.prototype.toString.call(arguments)
+})() == '[object Arguments]';
+
+exports = module.exports = supportsArgumentsClass ? supported : unsupported;
+
+exports.supported = supported;
+function supported(object) {
+  return Object.prototype.toString.call(object) == '[object Arguments]';
+};
+
+exports.unsupported = unsupported;
+function unsupported(object){
+  return object &&
+    typeof object == 'object' &&
+    typeof object.length == 'number' &&
+    Object.prototype.hasOwnProperty.call(object, 'callee') &&
+    !Object.prototype.propertyIsEnumerable.call(object, 'callee') ||
+    false;
+};
+
+
+/***/ }),
+/* 54 */
+/***/ (function(module, exports) {
+
+'use strict';
+
+var has = Object.prototype.hasOwnProperty
+  , prefix = '~';
+
+/**
+ * Constructor to create a storage for our `EE` objects.
+ * An `Events` instance is a plain object whose properties are event names.
+ *
+ * @constructor
+ * @api private
+ */
+function Events() {}
+
+//
+// We try to not inherit from `Object.prototype`. In some engines creating an
+// instance in this way is faster than calling `Object.create(null)` directly.
+// If `Object.create(null)` is not supported we prefix the event names with a
+// character to make sure that the built-in object properties are not
+// overridden or used as an attack vector.
+//
+if (Object.create) {
+  Events.prototype = Object.create(null);
+
+  //
+  // This hack is needed because the `__proto__` property is still inherited in
+  // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.
+  //
+  if (!new Events().__proto__) prefix = false;
+}
+
+/**
+ * Representation of a single event listener.
+ *
+ * @param {Function} fn The listener function.
+ * @param {Mixed} context The context to invoke the listener with.
+ * @param {Boolean} [once=false] Specify if the listener is a one-time listener.
+ * @constructor
+ * @api private
+ */
+function EE(fn, context, once) {
+  this.fn = fn;
+  this.context = context;
+  this.once = once || false;
+}
+
+/**
+ * Minimal `EventEmitter` interface that is molded against the Node.js
+ * `EventEmitter` interface.
+ *
+ * @constructor
+ * @api public
+ */
+function EventEmitter() {
+  this._events = new Events();
+  this._eventsCount = 0;
+}
+
+/**
+ * Return an array listing the events for which the emitter has registered
+ * listeners.
+ *
+ * @returns {Array}
+ * @api public
+ */
+EventEmitter.prototype.eventNames = function eventNames() {
+  var names = []
+    , events
+    , name;
+
+  if (this._eventsCount === 0) return names;
+
+  for (name in (events = this._events)) {
+    if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);
+  }
+
+  if (Object.getOwnPropertySymbols) {
+    return names.concat(Object.getOwnPropertySymbols(events));
+  }
+
+  return names;
+};
+
+/**
+ * Return the listeners registered for a given event.
+ *
+ * @param {String|Symbol} event The event name.
+ * @param {Boolean} exists Only check if there are listeners.
+ * @returns {Array|Boolean}
+ * @api public
+ */
+EventEmitter.prototype.listeners = function listeners(event, exists) {
+  var evt = prefix ? prefix + event : event
+    , available = this._events[evt];
+
+  if (exists) return !!available;
+  if (!available) return [];
+  if (available.fn) return [available.fn];
+
+  for (var i = 0, l = available.length, ee = new Array(l); i < l; i++) {
+    ee[i] = available[i].fn;
+  }
+
+  return ee;
+};
+
+/**
+ * Calls each of the listeners registered for a given event.
+ *
+ * @param {String|Symbol} event The event name.
+ * @returns {Boolean} `true` if the event had listeners, else `false`.
+ * @api public
+ */
+EventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {
+  var evt = prefix ? prefix + event : event;
+
+  if (!this._events[evt]) return false;
+
+  var listeners = this._events[evt]
+    , len = arguments.length
+    , args
+    , i;
+
+  if (listeners.fn) {
+    if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);
+
+    switch (len) {
+      case 1: return listeners.fn.call(listeners.context), true;
+      case 2: return listeners.fn.call(listeners.context, a1), true;
+      case 3: return listeners.fn.call(listeners.context, a1, a2), true;
+      case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;
+      case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;
+      case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;
+    }
+
+    for (i = 1, args = new Array(len -1); i < len; i++) {
+      args[i - 1] = arguments[i];
+    }
+
+    listeners.fn.apply(listeners.context, args);
+  } else {
+    var length = listeners.length
+      , j;
+
+    for (i = 0; i < length; i++) {
+      if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);
+
+      switch (len) {
+        case 1: listeners[i].fn.call(listeners[i].context); break;
+        case 2: listeners[i].fn.call(listeners[i].context, a1); break;
+        case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;
+        case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;
+        default:
+          if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {
+            args[j - 1] = arguments[j];
+          }
+
+          listeners[i].fn.apply(listeners[i].context, args);
+      }
+    }
+  }
+
+  return true;
+};
+
+/**
+ * Add a listener for a given event.
+ *
+ * @param {String|Symbol} event The event name.
+ * @param {Function} fn The listener function.
+ * @param {Mixed} [context=this] The context to invoke the listener with.
+ * @returns {EventEmitter} `this`.
+ * @api public
+ */
+EventEmitter.prototype.on = function on(event, fn, context) {
+  var listener = new EE(fn, context || this)
+    , evt = prefix ? prefix + event : event;
+
+  if (!this._events[evt]) this._events[evt] = listener, this._eventsCount++;
+  else if (!this._events[evt].fn) this._events[evt].push(listener);
+  else this._events[evt] = [this._events[evt], listener];
+
+  return this;
+};
+
+/**
+ * Add a one-time listener for a given event.
+ *
+ * @param {String|Symbol} event The event name.
+ * @param {Function} fn The listener function.
+ * @param {Mixed} [context=this] The context to invoke the listener with.
+ * @returns {EventEmitter} `this`.
+ * @api public
+ */
+EventEmitter.prototype.once = function once(event, fn, context) {
+  var listener = new EE(fn, context || this, true)
+    , evt = prefix ? prefix + event : event;
+
+  if (!this._events[evt]) this._events[evt] = listener, this._eventsCount++;
+  else if (!this._events[evt].fn) this._events[evt].push(listener);
+  else this._events[evt] = [this._events[evt], listener];
+
+  return this;
+};
+
+/**
+ * Remove the listeners of a given event.
+ *
+ * @param {String|Symbol} event The event name.
+ * @param {Function} fn Only remove the listeners that match this function.
+ * @param {Mixed} context Only remove the listeners that have this context.
+ * @param {Boolean} once Only remove one-time listeners.
+ * @returns {EventEmitter} `this`.
+ * @api public
+ */
+EventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {
+  var evt = prefix ? prefix + event : event;
+
+  if (!this._events[evt]) return this;
+  if (!fn) {
+    if (--this._eventsCount === 0) this._events = new Events();
+    else delete this._events[evt];
+    return this;
+  }
+
+  var listeners = this._events[evt];
+
+  if (listeners.fn) {
+    if (
+         listeners.fn === fn
+      && (!once || listeners.once)
+      && (!context || listeners.context === context)
+    ) {
+      if (--this._eventsCount === 0) this._events = new Events();
+      else delete this._events[evt];
+    }
+  } else {
+    for (var i = 0, events = [], length = listeners.length; i < length; i++) {
+      if (
+           listeners[i].fn !== fn
+        || (once && !listeners[i].once)
+        || (context && listeners[i].context !== context)
+      ) {
+        events.push(listeners[i]);
+      }
+    }
+
+    //
+    // Reset the array, or remove it completely if we have no more listeners.
+    //
+    if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;
+    else if (--this._eventsCount === 0) this._events = new Events();
+    else delete this._events[evt];
+  }
+
+  return this;
+};
+
+/**
+ * Remove all listeners, or those of the specified event.
+ *
+ * @param {String|Symbol} [event] The event name.
+ * @returns {EventEmitter} `this`.
+ * @api public
+ */
+EventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {
+  var evt;
+
+  if (event) {
+    evt = prefix ? prefix + event : event;
+    if (this._events[evt]) {
+      if (--this._eventsCount === 0) this._events = new Events();
+      else delete this._events[evt];
+    }
+  } else {
+    this._events = new Events();
+    this._eventsCount = 0;
+  }
+
+  return this;
+};
+
+//
+// Alias methods names because people roll like that.
+//
+EventEmitter.prototype.off = EventEmitter.prototype.removeListener;
+EventEmitter.prototype.addListener = EventEmitter.prototype.on;
+
+//
+// This function doesn't apply anymore.
+//
+EventEmitter.prototype.setMaxListeners = function setMaxListeners() {
+  return this;
+};
+
+//
+// Expose the prefix.
+//
+EventEmitter.prefixed = prefix;
+
+//
+// Allow `EventEmitter` to be imported as module namespace.
+//
+EventEmitter.EventEmitter = EventEmitter;
+
+//
+// Expose the module.
+//
+if ('undefined' !== typeof module) {
+  module.exports = EventEmitter;
+}
+
+
+/***/ }),
+/* 55 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.matchText = exports.matchSpacing = exports.matchNewline = exports.matchBlot = exports.matchAttributor = exports.default = undefined;
+
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
+
+var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+var _extend2 = __webpack_require__(3);
+
+var _extend3 = _interopRequireDefault(_extend2);
+
+var _quillDelta = __webpack_require__(2);
+
+var _quillDelta2 = _interopRequireDefault(_quillDelta);
+
+var _parchment = __webpack_require__(0);
+
+var _parchment2 = _interopRequireDefault(_parchment);
+
+var _quill = __webpack_require__(5);
+
+var _quill2 = _interopRequireDefault(_quill);
+
+var _logger = __webpack_require__(10);
+
+var _logger2 = _interopRequireDefault(_logger);
+
+var _module = __webpack_require__(9);
+
+var _module2 = _interopRequireDefault(_module);
+
+var _align = __webpack_require__(36);
+
+var _background = __webpack_require__(37);
+
+var _code = __webpack_require__(13);
+
+var _code2 = _interopRequireDefault(_code);
+
+var _color = __webpack_require__(26);
+
+var _direction = __webpack_require__(38);
+
+var _font = __webpack_require__(39);
+
+var _size = __webpack_require__(40);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+var debug = (0, _logger2.default)('quill:clipboard');
+
+var DOM_KEY = '__ql-matcher';
+
+var CLIPBOARD_CONFIG = [[Node.TEXT_NODE, matchText], [Node.TEXT_NODE, matchNewline], ['br', matchBreak], [Node.ELEMENT_NODE, matchNewline], [Node.ELEMENT_NODE, matchBlot], [Node.ELEMENT_NODE, matchSpacing], [Node.ELEMENT_NODE, matchAttributor], [Node.ELEMENT_NODE, matchStyles], ['li', matchIndent], ['b', matchAlias.bind(matchAlias, 'bold')], ['i', matchAlias.bind(matchAlias, 'italic')], ['style', matchIgnore]];
+
+var ATTRIBUTE_ATTRIBUTORS = [_align.AlignAttribute, _direction.DirectionAttribute].reduce(function (memo, attr) {
+  memo[attr.keyName] = attr;
+  return memo;
+}, {});
+
+var STYLE_ATTRIBUTORS = [_align.AlignStyle, _background.BackgroundStyle, _color.ColorStyle, _direction.DirectionStyle, _font.FontStyle, _size.SizeStyle].reduce(function (memo, attr) {
+  memo[attr.keyName] = attr;
+  return memo;
+}, {});
+
+var Clipboard = function (_Module) {
+  _inherits(Clipboard, _Module);
+
+  function Clipboard(quill, options) {
+    _classCallCheck(this, Clipboard);
+
+    var _this = _possibleConstructorReturn(this, (Clipboard.__proto__ || Object.getPrototypeOf(Clipboard)).call(this, quill, options));
+
+    _this.quill.root.addEventListener('paste', _this.onPaste.bind(_this));
+    _this.container = _this.quill.addContainer('ql-clipboard');
+    _this.container.setAttribute('contenteditable', true);
+    _this.container.setAttribute('tabindex', -1);
+    _this.matchers = [];
+    CLIPBOARD_CONFIG.concat(_this.options.matchers).forEach(function (_ref) {
+      var _ref2 = _slicedToArray(_ref, 2),
+          selector = _ref2[0],
+          matcher = _ref2[1];
+
+      if (!options.matchVisual && matcher === matchSpacing) return;
+      _this.addMatcher(selector, matcher);
+    });
+    return _this;
+  }
+
+  _createClass(Clipboard, [{
+    key: 'addMatcher',
+    value: function addMatcher(selector, matcher) {
+      this.matchers.push([selector, matcher]);
+    }
+  }, {
+    key: 'convert',
+    value: function convert(html) {
+      if (typeof html === 'string') {
+        this.container.innerHTML = html.replace(/\>\r?\n +\</g, '><'); // Remove spaces between tags
+        return this.convert();
+      }
+      var formats = this.quill.getFormat(this.quill.selection.savedRange.index);
+      if (formats[_code2.default.blotName]) {
+        var text = this.container.innerText;
+        this.container.innerHTML = '';
+        return new _quillDelta2.default().insert(text, _defineProperty({}, _code2.default.blotName, formats[_code2.default.blotName]));
+      }
+
+      var _prepareMatching = this.prepareMatching(),
+          _prepareMatching2 = _slicedToArray(_prepareMatching, 2),
+          elementMatchers = _prepareMatching2[0],
+          textMatchers = _prepareMatching2[1];
+
+      var delta = traverse(this.container, elementMatchers, textMatchers);
+      // Remove trailing newline
+      if (deltaEndsWith(delta, '\n') && delta.ops[delta.ops.length - 1].attributes == null) {
+        delta = delta.compose(new _quillDelta2.default().retain(delta.length() - 1).delete(1));
+      }
+      debug.log('convert', this.container.innerHTML, delta);
+      this.container.innerHTML = '';
+      return delta;
+    }
+  }, {
+    key: 'dangerouslyPasteHTML',
+    value: function dangerouslyPasteHTML(index, html) {
+      var source = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : _quill2.default.sources.API;
+
+      if (typeof index === 'string') {
+        this.quill.setContents(this.convert(index), html);
+        this.quill.setSelection(0, _quill2.default.sources.SILENT);
+      } else {
+        var paste = this.convert(html);
+        this.quill.updateContents(new _quillDelta2.default().retain(index).concat(paste), source);
+        this.quill.setSelection(index + paste.length(), _quill2.default.sources.SILENT);
+      }
+    }
+  }, {
+    key: 'onPaste',
+    value: function onPaste(e) {
+      var _this2 = this;
+
+      if (e.defaultPrevented || !this.quill.isEnabled()) return;
+      var range = this.quill.getSelection();
+      var delta = new _quillDelta2.default().retain(range.index);
+      var scrollTop = this.quill.scrollingContainer.scrollTop;
+      this.container.focus();
+      this.quill.selection.update(_quill2.default.sources.SILENT);
+      setTimeout(function () {
+        delta = delta.concat(_this2.convert()).delete(range.length);
+        _this2.quill.updateContents(delta, _quill2.default.sources.USER);
+        // range.length contributes to delta.length()
+        _this2.quill.setSelection(delta.length() - range.length, _quill2.default.sources.SILENT);
+        _this2.quill.scrollingContainer.scrollTop = scrollTop;
+        _this2.quill.focus();
+      }, 1);
+    }
+  }, {
+    key: 'prepareMatching',
+    value: function prepareMatching() {
+      var _this3 = this;
+
+      var elementMatchers = [],
+          textMatchers = [];
+      this.matchers.forEach(function (pair) {
+        var _pair = _slicedToArray(pair, 2),
+            selector = _pair[0],
+            matcher = _pair[1];
+
+        switch (selector) {
+          case Node.TEXT_NODE:
+            textMatchers.push(matcher);
+            break;
+          case Node.ELEMENT_NODE:
+            elementMatchers.push(matcher);
+            break;
+          default:
+            [].forEach.call(_this3.container.querySelectorAll(selector), function (node) {
+              // TODO use weakmap
+              node[DOM_KEY] = node[DOM_KEY] || [];
+              node[DOM_KEY].push(matcher);
+            });
+            break;
+        }
+      });
+      return [elementMatchers, textMatchers];
+    }
+  }]);
+
+  return Clipboard;
+}(_module2.default);
+
+Clipboard.DEFAULTS = {
+  matchers: [],
+  matchVisual: true
+};
+
+function applyFormat(delta, format, value) {
+  if ((typeof format === 'undefined' ? 'undefined' : _typeof(format)) === 'object') {
+    return Object.keys(format).reduce(function (delta, key) {
+      return applyFormat(delta, key, format[key]);
+    }, delta);
+  } else {
+    return delta.reduce(function (delta, op) {
+      if (op.attributes && op.attributes[format]) {
+        return delta.push(op);
+      } else {
+        return delta.insert(op.insert, (0, _extend3.default)({}, _defineProperty({}, format, value), op.attributes));
+      }
+    }, new _quillDelta2.default());
+  }
+}
+
+function computeStyle(node) {
+  if (node.nodeType !== Node.ELEMENT_NODE) return {};
+  var DOM_KEY = '__ql-computed-style';
+  return node[DOM_KEY] || (node[DOM_KEY] = window.getComputedStyle(node));
+}
+
+function deltaEndsWith(delta, text) {
+  var endText = "";
+  for (var i = delta.ops.length - 1; i >= 0 && endText.length < text.length; --i) {
+    var op = delta.ops[i];
+    if (typeof op.insert !== 'string') break;
+    endText = op.insert + endText;
+  }
+  return endText.slice(-1 * text.length) === text;
+}
+
+function isLine(node) {
+  if (node.childNodes.length === 0) return false; // Exclude embed blocks
+  var style = computeStyle(node);
+  return ['block', 'list-item'].indexOf(style.display) > -1;
+}
+
+function traverse(node, elementMatchers, textMatchers) {
+  // Post-order
+  if (node.nodeType === node.TEXT_NODE) {
+    return textMatchers.reduce(function (delta, matcher) {
+      return matcher(node, delta);
+    }, new _quillDelta2.default());
+  } else if (node.nodeType === node.ELEMENT_NODE) {
+    return [].reduce.call(node.childNodes || [], function (delta, childNode) {
+      var childrenDelta = traverse(childNode, elementMatchers, textMatchers);
+      if (childNode.nodeType === node.ELEMENT_NODE) {
+        childrenDelta = elementMatchers.reduce(function (childrenDelta, matcher) {
+          return matcher(childNode, childrenDelta);
+        }, childrenDelta);
+        childrenDelta = (childNode[DOM_KEY] || []).reduce(function (childrenDelta, matcher) {
+          return matcher(childNode, childrenDelta);
+        }, childrenDelta);
+      }
+      return delta.concat(childrenDelta);
+    }, new _quillDelta2.default());
+  } else {
+    return new _quillDelta2.default();
+  }
+}
+
+function matchAlias(format, node, delta) {
+  return applyFormat(delta, format, true);
+}
+
+function matchAttributor(node, delta) {
+  var attributes = _parchment2.default.Attributor.Attribute.keys(node);
+  var classes = _parchment2.default.Attributor.Class.keys(node);
+  var styles = _parchment2.default.Attributor.Style.keys(node);
+  var formats = {};
+  attributes.concat(classes).concat(styles).forEach(function (name) {
+    var attr = _parchment2.default.query(name, _parchment2.default.Scope.ATTRIBUTE);
+    if (attr != null) {
+      formats[attr.attrName] = attr.value(node);
+      if (formats[attr.attrName]) return;
+    }
+    attr = ATTRIBUTE_ATTRIBUTORS[name];
+    if (attr != null && (attr.attrName === name || attr.keyName === name)) {
+      formats[attr.attrName] = attr.value(node) || undefined;
+    }
+    attr = STYLE_ATTRIBUTORS[name];
+    if (attr != null && (attr.attrName === name || attr.keyName === name)) {
+      attr = STYLE_ATTRIBUTORS[name];
+      formats[attr.attrName] = attr.value(node) || undefined;
+    }
+  });
+  if (Object.keys(formats).length > 0) {
+    delta = applyFormat(delta, formats);
+  }
+  return delta;
+}
+
+function matchBlot(node, delta) {
+  var match = _parchment2.default.query(node);
+  if (match == null) return delta;
+  if (match.prototype instanceof _parchment2.default.Embed) {
+    var embed = {};
+    var value = match.value(node);
+    if (value != null) {
+      embed[match.blotName] = value;
+      delta = new _quillDelta2.default().insert(embed, match.formats(node));
+    }
+  } else if (typeof match.formats === 'function') {
+    delta = applyFormat(delta, match.blotName, match.formats(node));
+  }
+  return delta;
+}
+
+function matchBreak(node, delta) {
+  if (!deltaEndsWith(delta, '\n')) {
+    delta.insert('\n');
+  }
+  return delta;
+}
+
+function matchIgnore() {
+  return new _quillDelta2.default();
+}
+
+function matchIndent(node, delta) {
+  var match = _parchment2.default.query(node);
+  if (match == null || match.blotName !== 'list-item' || !deltaEndsWith(delta, '\n')) {
+    return delta;
+  }
+  var indent = -1,
+      parent = node.parentNode;
+  while (!parent.classList.contains('ql-clipboard')) {
+    if ((_parchment2.default.query(parent) || {}).blotName === 'list') {
+      indent += 1;
+    }
+    parent = parent.parentNode;
+  }
+  if (indent <= 0) return delta;
+  return delta.compose(new _quillDelta2.default().retain(delta.length() - 1).retain(1, { indent: indent }));
+}
+
+function matchNewline(node, delta) {
+  if (!deltaEndsWith(delta, '\n')) {
+    if (isLine(node) || delta.length() > 0 && node.nextSibling && isLine(node.nextSibling)) {
+      delta.insert('\n');
+    }
+  }
+  return delta;
+}
+
+function matchSpacing(node, delta) {
+  if (isLine(node) && node.nextElementSibling != null && !deltaEndsWith(delta, '\n\n')) {
+    var nodeHeight = node.offsetHeight + parseFloat(computeStyle(node).marginTop) + parseFloat(computeStyle(node).marginBottom);
+    if (node.nextElementSibling.offsetTop > node.offsetTop + nodeHeight * 1.5) {
+      delta.insert('\n');
+    }
+  }
+  return delta;
+}
+
+function matchStyles(node, delta) {
+  var formats = {};
+  var style = node.style || {};
+  if (style.fontStyle && computeStyle(node).fontStyle === 'italic') {
+    formats.italic = true;
+  }
+  if (style.fontWeight && (computeStyle(node).fontWeight.startsWith('bold') || parseInt(computeStyle(node).fontWeight) >= 700)) {
+    formats.bold = true;
+  }
+  if (Object.keys(formats).length > 0) {
+    delta = applyFormat(delta, formats);
+  }
+  if (parseFloat(style.textIndent || 0) > 0) {
+    // Could be 0.5in
+    delta = new _quillDelta2.default().insert('\t').concat(delta);
+  }
+  return delta;
+}
+
+function matchText(node, delta) {
+  var text = node.data;
+  // Word represents empty line with <o:p>&nbsp;</o:p>
+  if (node.parentNode.tagName === 'O:P') {
+    return delta.insert(text.trim());
+  }
+  if (text.trim().length === 0 && node.parentNode.classList.contains('ql-clipboard')) {
+    return delta;
+  }
+  if (!computeStyle(node.parentNode).whiteSpace.startsWith('pre')) {
+    // eslint-disable-next-line func-style
+    var replacer = function replacer(collapse, match) {
+      match = match.replace(/[^\u00a0]/g, ''); // \u00a0 is nbsp;
+      return match.length < 1 && collapse ? ' ' : match;
+    };
+    text = text.replace(/\r\n/g, ' ').replace(/\n/g, ' ');
+    text = text.replace(/\s\s+/g, replacer.bind(replacer, true)); // collapse whitespace
+    if (node.previousSibling == null && isLine(node.parentNode) || node.previousSibling != null && isLine(node.previousSibling)) {
+      text = text.replace(/^\s+/, replacer.bind(replacer, false));
+    }
+    if (node.nextSibling == null && isLine(node.parentNode) || node.nextSibling != null && isLine(node.nextSibling)) {
+      text = text.replace(/\s+$/, replacer.bind(replacer, false));
+    }
+  }
+  return delta.insert(text);
+}
+
+exports.default = Clipboard;
+exports.matchAttributor = matchAttributor;
+exports.matchBlot = matchBlot;
+exports.matchNewline = matchNewline;
+exports.matchSpacing = matchSpacing;
+exports.matchText = matchText;
+
+/***/ }),
+/* 56 */,
+/* 57 */,
+/* 58 */,
+/* 59 */,
+/* 60 */,
+/* 61 */,
+/* 62 */,
+/* 63 */,
+/* 64 */,
+/* 65 */,
+/* 66 */,
+/* 67 */,
+/* 68 */,
+/* 69 */,
+/* 70 */,
+/* 71 */,
+/* 72 */,
+/* 73 */,
+/* 74 */,
+/* 75 */,
+/* 76 */,
+/* 77 */,
+/* 78 */,
+/* 79 */,
+/* 80 */,
+/* 81 */,
+/* 82 */,
+/* 83 */,
+/* 84 */,
+/* 85 */,
+/* 86 */,
+/* 87 */,
+/* 88 */,
+/* 89 */,
+/* 90 */,
+/* 91 */,
+/* 92 */,
+/* 93 */,
+/* 94 */,
+/* 95 */,
+/* 96 */,
+/* 97 */,
+/* 98 */,
+/* 99 */,
+/* 100 */,
+/* 101 */,
+/* 102 */,
+/* 103 */,
+/* 104 */,
+/* 105 */,
+/* 106 */,
+/* 107 */,
+/* 108 */,
+/* 109 */,
+/* 110 */
+/***/ (function(module, exports, __webpack_require__) {
+
+module.exports = __webpack_require__(29);
+
+
+/***/ })
+/******/ ])["default"];
+});
\ No newline at end of file
diff --git a/htdocs/cgi-bin/wsrc/quill/quill.js b/htdocs/cgi-bin/wsrc/quill/quill.js
new file mode 100644 (file)
index 0000000..5dc8fbe
--- /dev/null
@@ -0,0 +1,11489 @@
+/*!
+ * Quill Editor v1.3.6
+ * https://quilljs.com/
+ * Copyright (c) 2014, Jason Chen
+ * Copyright (c) 2013, salesforce.com
+ */
+(function webpackUniversalModuleDefinition(root, factory) {
+       if(typeof exports === 'object' && typeof module === 'object')
+               module.exports = factory();
+       else if(typeof define === 'function' && define.amd)
+               define([], factory);
+       else if(typeof exports === 'object')
+               exports["Quill"] = factory();
+       else
+               root["Quill"] = factory();
+})(typeof self !== 'undefined' ? self : this, function() {
+return /******/ (function(modules) { // webpackBootstrap
+/******/       // The module cache
+/******/       var installedModules = {};
+/******/
+/******/       // The require function
+/******/       function __webpack_require__(moduleId) {
+/******/
+/******/               // Check if module is in cache
+/******/               if(installedModules[moduleId]) {
+/******/                       return installedModules[moduleId].exports;
+/******/               }
+/******/               // Create a new module (and put it into the cache)
+/******/               var module = installedModules[moduleId] = {
+/******/                       i: moduleId,
+/******/                       l: false,
+/******/                       exports: {}
+/******/               };
+/******/
+/******/               // Execute the module function
+/******/               modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/               // Flag the module as loaded
+/******/               module.l = true;
+/******/
+/******/               // Return the exports of the module
+/******/               return module.exports;
+/******/       }
+/******/
+/******/
+/******/       // expose the modules object (__webpack_modules__)
+/******/       __webpack_require__.m = modules;
+/******/
+/******/       // expose the module cache
+/******/       __webpack_require__.c = installedModules;
+/******/
+/******/       // define getter function for harmony exports
+/******/       __webpack_require__.d = function(exports, name, getter) {
+/******/               if(!__webpack_require__.o(exports, name)) {
+/******/                       Object.defineProperty(exports, name, {
+/******/                               configurable: false,
+/******/                               enumerable: true,
+/******/                               get: getter
+/******/                       });
+/******/               }
+/******/       };
+/******/
+/******/       // getDefaultExport function for compatibility with non-harmony modules
+/******/       __webpack_require__.n = function(module) {
+/******/               var getter = module && module.__esModule ?
+/******/                       function getDefault() { return module['default']; } :
+/******/                       function getModuleExports() { return module; };
+/******/               __webpack_require__.d(getter, 'a', getter);
+/******/               return getter;
+/******/       };
+/******/
+/******/       // Object.prototype.hasOwnProperty.call
+/******/       __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/       // __webpack_public_path__
+/******/       __webpack_require__.p = "";
+/******/
+/******/       // Load entry module and return exports
+/******/       return __webpack_require__(__webpack_require__.s = 109);
+/******/ })
+/************************************************************************/
+/******/ ([
+/* 0 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", { value: true });
+var container_1 = __webpack_require__(17);
+var format_1 = __webpack_require__(18);
+var leaf_1 = __webpack_require__(19);
+var scroll_1 = __webpack_require__(45);
+var inline_1 = __webpack_require__(46);
+var block_1 = __webpack_require__(47);
+var embed_1 = __webpack_require__(48);
+var text_1 = __webpack_require__(49);
+var attributor_1 = __webpack_require__(12);
+var class_1 = __webpack_require__(32);
+var style_1 = __webpack_require__(33);
+var store_1 = __webpack_require__(31);
+var Registry = __webpack_require__(1);
+var Parchment = {
+    Scope: Registry.Scope,
+    create: Registry.create,
+    find: Registry.find,
+    query: Registry.query,
+    register: Registry.register,
+    Container: container_1.default,
+    Format: format_1.default,
+    Leaf: leaf_1.default,
+    Embed: embed_1.default,
+    Scroll: scroll_1.default,
+    Block: block_1.default,
+    Inline: inline_1.default,
+    Text: text_1.default,
+    Attributor: {
+        Attribute: attributor_1.default,
+        Class: class_1.default,
+        Style: style_1.default,
+        Store: store_1.default,
+    },
+};
+exports.default = Parchment;
+
+
+/***/ }),
+/* 1 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+var __extends = (this && this.__extends) || (function () {
+    var extendStatics = Object.setPrototypeOf ||
+        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
+        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
+    return function (d, b) {
+        extendStatics(d, b);
+        function __() { this.constructor = d; }
+        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+    };
+})();
+Object.defineProperty(exports, "__esModule", { value: true });
+var ParchmentError = /** @class */ (function (_super) {
+    __extends(ParchmentError, _super);
+    function ParchmentError(message) {
+        var _this = this;
+        message = '[Parchment] ' + message;
+        _this = _super.call(this, message) || this;
+        _this.message = message;
+        _this.name = _this.constructor.name;
+        return _this;
+    }
+    return ParchmentError;
+}(Error));
+exports.ParchmentError = ParchmentError;
+var attributes = {};
+var classes = {};
+var tags = {};
+var types = {};
+exports.DATA_KEY = '__blot';
+var Scope;
+(function (Scope) {
+    Scope[Scope["TYPE"] = 3] = "TYPE";
+    Scope[Scope["LEVEL"] = 12] = "LEVEL";
+    Scope[Scope["ATTRIBUTE"] = 13] = "ATTRIBUTE";
+    Scope[Scope["BLOT"] = 14] = "BLOT";
+    Scope[Scope["INLINE"] = 7] = "INLINE";
+    Scope[Scope["BLOCK"] = 11] = "BLOCK";
+    Scope[Scope["BLOCK_BLOT"] = 10] = "BLOCK_BLOT";
+    Scope[Scope["INLINE_BLOT"] = 6] = "INLINE_BLOT";
+    Scope[Scope["BLOCK_ATTRIBUTE"] = 9] = "BLOCK_ATTRIBUTE";
+    Scope[Scope["INLINE_ATTRIBUTE"] = 5] = "INLINE_ATTRIBUTE";
+    Scope[Scope["ANY"] = 15] = "ANY";
+})(Scope = exports.Scope || (exports.Scope = {}));
+function create(input, value) {
+    var match = query(input);
+    if (match == null) {
+        throw new ParchmentError("Unable to create " + input + " blot");
+    }
+    var BlotClass = match;
+    var node = 
+    // @ts-ignore
+    input instanceof Node || input['nodeType'] === Node.TEXT_NODE ? input : BlotClass.create(value);
+    return new BlotClass(node, value);
+}
+exports.create = create;
+function find(node, bubble) {
+    if (bubble === void 0) { bubble = false; }
+    if (node == null)
+        return null;
+    // @ts-ignore
+    if (node[exports.DATA_KEY] != null)
+        return node[exports.DATA_KEY].blot;
+    if (bubble)
+        return find(node.parentNode, bubble);
+    return null;
+}
+exports.find = find;
+function query(query, scope) {
+    if (scope === void 0) { scope = Scope.ANY; }
+    var match;
+    if (typeof query === 'string') {
+        match = types[query] || attributes[query];
+        // @ts-ignore
+    }
+    else if (query instanceof Text || query['nodeType'] === Node.TEXT_NODE) {
+        match = types['text'];
+    }
+    else if (typeof query === 'number') {
+        if (query & Scope.LEVEL & Scope.BLOCK) {
+            match = types['block'];
+        }
+        else if (query & Scope.LEVEL & Scope.INLINE) {
+            match = types['inline'];
+        }
+    }
+    else if (query instanceof HTMLElement) {
+        var names = (query.getAttribute('class') || '').split(/\s+/);
+        for (var i in names) {
+            match = classes[names[i]];
+            if (match)
+                break;
+        }
+        match = match || tags[query.tagName];
+    }
+    if (match == null)
+        return null;
+    // @ts-ignore
+    if (scope & Scope.LEVEL & match.scope && scope & Scope.TYPE & match.scope)
+        return match;
+    return null;
+}
+exports.query = query;
+function register() {
+    var Definitions = [];
+    for (var _i = 0; _i < arguments.length; _i++) {
+        Definitions[_i] = arguments[_i];
+    }
+    if (Definitions.length > 1) {
+        return Definitions.map(function (d) {
+            return register(d);
+        });
+    }
+    var Definition = Definitions[0];
+    if (typeof Definition.blotName !== 'string' && typeof Definition.attrName !== 'string') {
+        throw new ParchmentError('Invalid definition');
+    }
+    else if (Definition.blotName === 'abstract') {
+        throw new ParchmentError('Cannot register abstract class');
+    }
+    types[Definition.blotName || Definition.attrName] = Definition;
+    if (typeof Definition.keyName === 'string') {
+        attributes[Definition.keyName] = Definition;
+    }
+    else {
+        if (Definition.className != null) {
+            classes[Definition.className] = Definition;
+        }
+        if (Definition.tagName != null) {
+            if (Array.isArray(Definition.tagName)) {
+                Definition.tagName = Definition.tagName.map(function (tagName) {
+                    return tagName.toUpperCase();
+                });
+            }
+            else {
+                Definition.tagName = Definition.tagName.toUpperCase();
+            }
+            var tagNames = Array.isArray(Definition.tagName) ? Definition.tagName : [Definition.tagName];
+            tagNames.forEach(function (tag) {
+                if (tags[tag] == null || Definition.className == null) {
+                    tags[tag] = Definition;
+                }
+            });
+        }
+    }
+    return Definition;
+}
+exports.register = register;
+
+
+/***/ }),
+/* 2 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var diff = __webpack_require__(51);
+var equal = __webpack_require__(11);
+var extend = __webpack_require__(3);
+var op = __webpack_require__(20);
+
+
+var NULL_CHARACTER = String.fromCharCode(0);  // Placeholder char for embed in diff()
+
+
+var Delta = function (ops) {
+  // Assume we are given a well formed ops
+  if (Array.isArray(ops)) {
+    this.ops = ops;
+  } else if (ops != null && Array.isArray(ops.ops)) {
+    this.ops = ops.ops;
+  } else {
+    this.ops = [];
+  }
+};
+
+
+Delta.prototype.insert = function (text, attributes) {
+  var newOp = {};
+  if (text.length === 0) return this;
+  newOp.insert = text;
+  if (attributes != null && typeof attributes === 'object' && Object.keys(attributes).length > 0) {
+    newOp.attributes = attributes;
+  }
+  return this.push(newOp);
+};
+
+Delta.prototype['delete'] = function (length) {
+  if (length <= 0) return this;
+  return this.push({ 'delete': length });
+};
+
+Delta.prototype.retain = function (length, attributes) {
+  if (length <= 0) return this;
+  var newOp = { retain: length };
+  if (attributes != null && typeof attributes === 'object' && Object.keys(attributes).length > 0) {
+    newOp.attributes = attributes;
+  }
+  return this.push(newOp);
+};
+
+Delta.prototype.push = function (newOp) {
+  var index = this.ops.length;
+  var lastOp = this.ops[index - 1];
+  newOp = extend(true, {}, newOp);
+  if (typeof lastOp === 'object') {
+    if (typeof newOp['delete'] === 'number' && typeof lastOp['delete'] === 'number') {
+      this.ops[index - 1] = { 'delete': lastOp['delete'] + newOp['delete'] };
+      return this;
+    }
+    // Since it does not matter if we insert before or after deleting at the same index,
+    // always prefer to insert first
+    if (typeof lastOp['delete'] === 'number' && newOp.insert != null) {
+      index -= 1;
+      lastOp = this.ops[index - 1];
+      if (typeof lastOp !== 'object') {
+        this.ops.unshift(newOp);
+        return this;
+      }
+    }
+    if (equal(newOp.attributes, lastOp.attributes)) {
+      if (typeof newOp.insert === 'string' && typeof lastOp.insert === 'string') {
+        this.ops[index - 1] = { insert: lastOp.insert + newOp.insert };
+        if (typeof newOp.attributes === 'object') this.ops[index - 1].attributes = newOp.attributes
+        return this;
+      } else if (typeof newOp.retain === 'number' && typeof lastOp.retain === 'number') {
+        this.ops[index - 1] = { retain: lastOp.retain + newOp.retain };
+        if (typeof newOp.attributes === 'object') this.ops[index - 1].attributes = newOp.attributes
+        return this;
+      }
+    }
+  }
+  if (index === this.ops.length) {
+    this.ops.push(newOp);
+  } else {
+    this.ops.splice(index, 0, newOp);
+  }
+  return this;
+};
+
+Delta.prototype.chop = function () {
+  var lastOp = this.ops[this.ops.length - 1];
+  if (lastOp && lastOp.retain && !lastOp.attributes) {
+    this.ops.pop();
+  }
+  return this;
+};
+
+Delta.prototype.filter = function (predicate) {
+  return this.ops.filter(predicate);
+};
+
+Delta.prototype.forEach = function (predicate) {
+  this.ops.forEach(predicate);
+};
+
+Delta.prototype.map = function (predicate) {
+  return this.ops.map(predicate);
+};
+
+Delta.prototype.partition = function (predicate) {
+  var passed = [], failed = [];
+  this.forEach(function(op) {
+    var target = predicate(op) ? passed : failed;
+    target.push(op);
+  });
+  return [passed, failed];
+};
+
+Delta.prototype.reduce = function (predicate, initial) {
+  return this.ops.reduce(predicate, initial);
+};
+
+Delta.prototype.changeLength = function () {
+  return this.reduce(function (length, elem) {
+    if (elem.insert) {
+      return length + op.length(elem);
+    } else if (elem.delete) {
+      return length - elem.delete;
+    }
+    return length;
+  }, 0);
+};
+
+Delta.prototype.length = function () {
+  return this.reduce(function (length, elem) {
+    return length + op.length(elem);
+  }, 0);
+};
+
+Delta.prototype.slice = function (start, end) {
+  start = start || 0;
+  if (typeof end !== 'number') end = Infinity;
+  var ops = [];
+  var iter = op.iterator(this.ops);
+  var index = 0;
+  while (index < end && iter.hasNext()) {
+    var nextOp;
+    if (index < start) {
+      nextOp = iter.next(start - index);
+    } else {
+      nextOp = iter.next(end - index);
+      ops.push(nextOp);
+    }
+    index += op.length(nextOp);
+  }
+  return new Delta(ops);
+};
+
+
+Delta.prototype.compose = function (other) {
+  var thisIter = op.iterator(this.ops);
+  var otherIter = op.iterator(other.ops);
+  var delta = new Delta();
+  while (thisIter.hasNext() || otherIter.hasNext()) {
+    if (otherIter.peekType() === 'insert') {
+      delta.push(otherIter.next());
+    } else if (thisIter.peekType() === 'delete') {
+      delta.push(thisIter.next());
+    } else {
+      var length = Math.min(thisIter.peekLength(), otherIter.peekLength());
+      var thisOp = thisIter.next(length);
+      var otherOp = otherIter.next(length);
+      if (typeof otherOp.retain === 'number') {
+        var newOp = {};
+        if (typeof thisOp.retain === 'number') {
+          newOp.retain = length;
+        } else {
+          newOp.insert = thisOp.insert;
+        }
+        // Preserve null when composing with a retain, otherwise remove it for inserts
+        var attributes = op.attributes.compose(thisOp.attributes, otherOp.attributes, typeof thisOp.retain === 'number');
+        if (attributes) newOp.attributes = attributes;
+        delta.push(newOp);
+      // Other op should be delete, we could be an insert or retain
+      // Insert + delete cancels out
+      } else if (typeof otherOp['delete'] === 'number' && typeof thisOp.retain === 'number') {
+        delta.push(otherOp);
+      }
+    }
+  }
+  return delta.chop();
+};
+
+Delta.prototype.concat = function (other) {
+  var delta = new Delta(this.ops.slice());
+  if (other.ops.length > 0) {
+    delta.push(other.ops[0]);
+    delta.ops = delta.ops.concat(other.ops.slice(1));
+  }
+  return delta;
+};
+
+Delta.prototype.diff = function (other, index) {
+  if (this.ops === other.ops) {
+    return new Delta();
+  }
+  var strings = [this, other].map(function (delta) {
+    return delta.map(function (op) {
+      if (op.insert != null) {
+        return typeof op.insert === 'string' ? op.insert : NULL_CHARACTER;
+      }
+      var prep = (delta === other) ? 'on' : 'with';
+      throw new Error('diff() called ' + prep + ' non-document');
+    }).join('');
+  });
+  var delta = new Delta();
+  var diffResult = diff(strings[0], strings[1], index);
+  var thisIter = op.iterator(this.ops);
+  var otherIter = op.iterator(other.ops);
+  diffResult.forEach(function (component) {
+    var length = component[1].length;
+    while (length > 0) {
+      var opLength = 0;
+      switch (component[0]) {
+        case diff.INSERT:
+          opLength = Math.min(otherIter.peekLength(), length);
+          delta.push(otherIter.next(opLength));
+          break;
+        case diff.DELETE:
+          opLength = Math.min(length, thisIter.peekLength());
+          thisIter.next(opLength);
+          delta['delete'](opLength);
+          break;
+        case diff.EQUAL:
+          opLength = Math.min(thisIter.peekLength(), otherIter.peekLength(), length);
+          var thisOp = thisIter.next(opLength);
+          var otherOp = otherIter.next(opLength);
+          if (equal(thisOp.insert, otherOp.insert)) {
+            delta.retain(opLength, op.attributes.diff(thisOp.attributes, otherOp.attributes));
+          } else {
+            delta.push(otherOp)['delete'](opLength);
+          }
+          break;
+      }
+      length -= opLength;
+    }
+  });
+  return delta.chop();
+};
+
+Delta.prototype.eachLine = function (predicate, newline) {
+  newline = newline || '\n';
+  var iter = op.iterator(this.ops);
+  var line = new Delta();
+  var i = 0;
+  while (iter.hasNext()) {
+    if (iter.peekType() !== 'insert') return;
+    var thisOp = iter.peek();
+    var start = op.length(thisOp) - iter.peekLength();
+    var index = typeof thisOp.insert === 'string' ?
+      thisOp.insert.indexOf(newline, start) - start : -1;
+    if (index < 0) {
+      line.push(iter.next());
+    } else if (index > 0) {
+      line.push(iter.next(index));
+    } else {
+      if (predicate(line, iter.next(1).attributes || {}, i) === false) {
+        return;
+      }
+      i += 1;
+      line = new Delta();
+    }
+  }
+  if (line.length() > 0) {
+    predicate(line, {}, i);
+  }
+};
+
+Delta.prototype.transform = function (other, priority) {
+  priority = !!priority;
+  if (typeof other === 'number') {
+    return this.transformPosition(other, priority);
+  }
+  var thisIter = op.iterator(this.ops);
+  var otherIter = op.iterator(other.ops);
+  var delta = new Delta();
+  while (thisIter.hasNext() || otherIter.hasNext()) {
+    if (thisIter.peekType() === 'insert' && (priority || otherIter.peekType() !== 'insert')) {
+      delta.retain(op.length(thisIter.next()));
+    } else if (otherIter.peekType() === 'insert') {
+      delta.push(otherIter.next());
+    } else {
+      var length = Math.min(thisIter.peekLength(), otherIter.peekLength());
+      var thisOp = thisIter.next(length);
+      var otherOp = otherIter.next(length);
+      if (thisOp['delete']) {
+        // Our delete either makes their delete redundant or removes their retain
+        continue;
+      } else if (otherOp['delete']) {
+        delta.push(otherOp);
+      } else {
+        // We retain either their retain or insert
+        delta.retain(length, op.attributes.transform(thisOp.attributes, otherOp.attributes, priority));
+      }
+    }
+  }
+  return delta.chop();
+};
+
+Delta.prototype.transformPosition = function (index, priority) {
+  priority = !!priority;
+  var thisIter = op.iterator(this.ops);
+  var offset = 0;
+  while (thisIter.hasNext() && offset <= index) {
+    var length = thisIter.peekLength();
+    var nextType = thisIter.peekType();
+    thisIter.next();
+    if (nextType === 'delete') {
+      index -= Math.min(length, index - offset);
+      continue;
+    } else if (nextType === 'insert' && (offset < index || !priority)) {
+      index += length;
+    }
+    offset += length;
+  }
+  return index;
+};
+
+
+module.exports = Delta;
+
+
+/***/ }),
+/* 3 */
+/***/ (function(module, exports) {
+
+'use strict';
+
+var hasOwn = Object.prototype.hasOwnProperty;
+var toStr = Object.prototype.toString;
+
+var isArray = function isArray(arr) {
+       if (typeof Array.isArray === 'function') {
+               return Array.isArray(arr);
+       }
+
+       return toStr.call(arr) === '[object Array]';
+};
+
+var isPlainObject = function isPlainObject(obj) {
+       if (!obj || toStr.call(obj) !== '[object Object]') {
+               return false;
+       }
+
+       var hasOwnConstructor = hasOwn.call(obj, 'constructor');
+       var hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf');
+       // Not own constructor property must be Object
+       if (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {
+               return false;
+       }
+
+       // Own properties are enumerated firstly, so to speed up,
+       // if last one is own, then all properties are own.
+       var key;
+       for (key in obj) { /**/ }
+
+       return typeof key === 'undefined' || hasOwn.call(obj, key);
+};
+
+module.exports = function extend() {
+       var options, name, src, copy, copyIsArray, clone;
+       var target = arguments[0];
+       var i = 1;
+       var length = arguments.length;
+       var deep = false;
+
+       // Handle a deep copy situation
+       if (typeof target === 'boolean') {
+               deep = target;
+               target = arguments[1] || {};
+               // skip the boolean and the target
+               i = 2;
+       }
+       if (target == null || (typeof target !== 'object' && typeof target !== 'function')) {
+               target = {};
+       }
+
+       for (; i < length; ++i) {
+               options = arguments[i];
+               // Only deal with non-null/undefined values
+               if (options != null) {
+                       // Extend the base object
+                       for (name in options) {
+                               src = target[name];
+                               copy = options[name];
+
+                               // Prevent never-ending loop
+                               if (target !== copy) {
+                                       // Recurse if we're merging plain objects or arrays
+                                       if (deep && copy && (isPlainObject(copy) || (copyIsArray = isArray(copy)))) {
+                                               if (copyIsArray) {
+                                                       copyIsArray = false;
+                                                       clone = src && isArray(src) ? src : [];
+                                               } else {
+                                                       clone = src && isPlainObject(src) ? src : {};
+                                               }
+
+                                               // Never move original objects, clone them
+                                               target[name] = extend(deep, clone, copy);
+
+                                       // Don't bring in undefined values
+                                       } else if (typeof copy !== 'undefined') {
+                                               target[name] = copy;
+                                       }
+                               }
+                       }
+               }
+       }
+
+       // Return the modified object
+       return target;
+};
+
+
+/***/ }),
+/* 4 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = exports.BlockEmbed = exports.bubbleFormats = undefined;
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };
+
+var _extend = __webpack_require__(3);
+
+var _extend2 = _interopRequireDefault(_extend);
+
+var _quillDelta = __webpack_require__(2);
+
+var _quillDelta2 = _interopRequireDefault(_quillDelta);
+
+var _parchment = __webpack_require__(0);
+
+var _parchment2 = _interopRequireDefault(_parchment);
+
+var _break = __webpack_require__(16);
+
+var _break2 = _interopRequireDefault(_break);
+
+var _inline = __webpack_require__(6);
+
+var _inline2 = _interopRequireDefault(_inline);
+
+var _text = __webpack_require__(7);
+
+var _text2 = _interopRequireDefault(_text);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+var NEWLINE_LENGTH = 1;
+
+var BlockEmbed = function (_Parchment$Embed) {
+  _inherits(BlockEmbed, _Parchment$Embed);
+
+  function BlockEmbed() {
+    _classCallCheck(this, BlockEmbed);
+
+    return _possibleConstructorReturn(this, (BlockEmbed.__proto__ || Object.getPrototypeOf(BlockEmbed)).apply(this, arguments));
+  }
+
+  _createClass(BlockEmbed, [{
+    key: 'attach',
+    value: function attach() {
+      _get(BlockEmbed.prototype.__proto__ || Object.getPrototypeOf(BlockEmbed.prototype), 'attach', this).call(this);
+      this.attributes = new _parchment2.default.Attributor.Store(this.domNode);
+    }
+  }, {
+    key: 'delta',
+    value: function delta() {
+      return new _quillDelta2.default().insert(this.value(), (0, _extend2.default)(this.formats(), this.attributes.values()));
+    }
+  }, {
+    key: 'format',
+    value: function format(name, value) {
+      var attribute = _parchment2.default.query(name, _parchment2.default.Scope.BLOCK_ATTRIBUTE);
+      if (attribute != null) {
+        this.attributes.attribute(attribute, value);
+      }
+    }
+  }, {
+    key: 'formatAt',
+    value: function formatAt(index, length, name, value) {
+      this.format(name, value);
+    }
+  }, {
+    key: 'insertAt',
+    value: function insertAt(index, value, def) {
+      if (typeof value === 'string' && value.endsWith('\n')) {
+        var block = _parchment2.default.create(Block.blotName);
+        this.parent.insertBefore(block, index === 0 ? this : this.next);
+        block.insertAt(0, value.slice(0, -1));
+      } else {
+        _get(BlockEmbed.prototype.__proto__ || Object.getPrototypeOf(BlockEmbed.prototype), 'insertAt', this).call(this, index, value, def);
+      }
+    }
+  }]);
+
+  return BlockEmbed;
+}(_parchment2.default.Embed);
+
+BlockEmbed.scope = _parchment2.default.Scope.BLOCK_BLOT;
+// It is important for cursor behavior BlockEmbeds use tags that are block level elements
+
+
+var Block = function (_Parchment$Block) {
+  _inherits(Block, _Parchment$Block);
+
+  function Block(domNode) {
+    _classCallCheck(this, Block);
+
+    var _this2 = _possibleConstructorReturn(this, (Block.__proto__ || Object.getPrototypeOf(Block)).call(this, domNode));
+
+    _this2.cache = {};
+    return _this2;
+  }
+
+  _createClass(Block, [{
+    key: 'delta',
+    value: function delta() {
+      if (this.cache.delta == null) {
+        this.cache.delta = this.descendants(_parchment2.default.Leaf).reduce(function (delta, leaf) {
+          if (leaf.length() === 0) {
+            return delta;
+          } else {
+            return delta.insert(leaf.value(), bubbleFormats(leaf));
+          }
+        }, new _quillDelta2.default()).insert('\n', bubbleFormats(this));
+      }
+      return this.cache.delta;
+    }
+  }, {
+    key: 'deleteAt',
+    value: function deleteAt(index, length) {
+      _get(Block.prototype.__proto__ || Object.getPrototypeOf(Block.prototype), 'deleteAt', this).call(this, index, length);
+      this.cache = {};
+    }
+  }, {
+    key: 'formatAt',
+    value: function formatAt(index, length, name, value) {
+      if (length <= 0) return;
+      if (_parchment2.default.query(name, _parchment2.default.Scope.BLOCK)) {
+        if (index + length === this.length()) {
+          this.format(name, value);
+        }
+      } else {
+        _get(Block.prototype.__proto__ || Object.getPrototypeOf(Block.prototype), 'formatAt', this).call(this, index, Math.min(length, this.length() - index - 1), name, value);
+      }
+      this.cache = {};
+    }
+  }, {
+    key: 'insertAt',
+    value: function insertAt(index, value, def) {
+      if (def != null) return _get(Block.prototype.__proto__ || Object.getPrototypeOf(Block.prototype), 'insertAt', this).call(this, index, value, def);
+      if (value.length === 0) return;
+      var lines = value.split('\n');
+      var text = lines.shift();
+      if (text.length > 0) {
+        if (index < this.length() - 1 || this.children.tail == null) {
+          _get(Block.prototype.__proto__ || Object.getPrototypeOf(Block.prototype), 'insertAt', this).call(this, Math.min(index, this.length() - 1), text);
+        } else {
+          this.children.tail.insertAt(this.children.tail.length(), text);
+        }
+        this.cache = {};
+      }
+      var block = this;
+      lines.reduce(function (index, line) {
+        block = block.split(index, true);
+        block.insertAt(0, line);
+        return line.length;
+      }, index + text.length);
+    }
+  }, {
+    key: 'insertBefore',
+    value: function insertBefore(blot, ref) {
+      var head = this.children.head;
+      _get(Block.prototype.__proto__ || Object.getPrototypeOf(Block.prototype), 'insertBefore', this).call(this, blot, ref);
+      if (head instanceof _break2.default) {
+        head.remove();
+      }
+      this.cache = {};
+    }
+  }, {
+    key: 'length',
+    value: function length() {
+      if (this.cache.length == null) {
+        this.cache.length = _get(Block.prototype.__proto__ || Object.getPrototypeOf(Block.prototype), 'length', this).call(this) + NEWLINE_LENGTH;
+      }
+      return this.cache.length;
+    }
+  }, {
+    key: 'moveChildren',
+    value: function moveChildren(target, ref) {
+      _get(Block.prototype.__proto__ || Object.getPrototypeOf(Block.prototype), 'moveChildren', this).call(this, target, ref);
+      this.cache = {};
+    }
+  }, {
+    key: 'optimize',
+    value: function optimize(context) {
+      _get(Block.prototype.__proto__ || Object.getPrototypeOf(Block.prototype), 'optimize', this).call(this, context);
+      this.cache = {};
+    }
+  }, {
+    key: 'path',
+    value: function path(index) {
+      return _get(Block.prototype.__proto__ || Object.getPrototypeOf(Block.prototype), 'path', this).call(this, index, true);
+    }
+  }, {
+    key: 'removeChild',
+    value: function removeChild(child) {
+      _get(Block.prototype.__proto__ || Object.getPrototypeOf(Block.prototype), 'removeChild', this).call(this, child);
+      this.cache = {};
+    }
+  }, {
+    key: 'split',
+    value: function split(index) {
+      var force = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
+
+      if (force && (index === 0 || index >= this.length() - NEWLINE_LENGTH)) {
+        var clone = this.clone();
+        if (index === 0) {
+          this.parent.insertBefore(clone, this);
+          return this;
+        } else {
+          this.parent.insertBefore(clone, this.next);
+          return clone;
+        }
+      } else {
+        var next = _get(Block.prototype.__proto__ || Object.getPrototypeOf(Block.prototype), 'split', this).call(this, index, force);
+        this.cache = {};
+        return next;
+      }
+    }
+  }]);
+
+  return Block;
+}(_parchment2.default.Block);
+
+Block.blotName = 'block';
+Block.tagName = 'P';
+Block.defaultChild = 'break';
+Block.allowedChildren = [_inline2.default, _parchment2.default.Embed, _text2.default];
+
+function bubbleFormats(blot) {
+  var formats = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
+
+  if (blot == null) return formats;
+  if (typeof blot.formats === 'function') {
+    formats = (0, _extend2.default)(formats, blot.formats());
+  }
+  if (blot.parent == null || blot.parent.blotName == 'scroll' || blot.parent.statics.scope !== blot.statics.scope) {
+    return formats;
+  }
+  return bubbleFormats(blot.parent, formats);
+}
+
+exports.bubbleFormats = bubbleFormats;
+exports.BlockEmbed = BlockEmbed;
+exports.default = Block;
+
+/***/ }),
+/* 5 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = exports.overload = exports.expandConfig = undefined;
+
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
+
+var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+__webpack_require__(50);
+
+var _quillDelta = __webpack_require__(2);
+
+var _quillDelta2 = _interopRequireDefault(_quillDelta);
+
+var _editor = __webpack_require__(14);
+
+var _editor2 = _interopRequireDefault(_editor);
+
+var _emitter3 = __webpack_require__(8);
+
+var _emitter4 = _interopRequireDefault(_emitter3);
+
+var _module = __webpack_require__(9);
+
+var _module2 = _interopRequireDefault(_module);
+
+var _parchment = __webpack_require__(0);
+
+var _parchment2 = _interopRequireDefault(_parchment);
+
+var _selection = __webpack_require__(15);
+
+var _selection2 = _interopRequireDefault(_selection);
+
+var _extend = __webpack_require__(3);
+
+var _extend2 = _interopRequireDefault(_extend);
+
+var _logger = __webpack_require__(10);
+
+var _logger2 = _interopRequireDefault(_logger);
+
+var _theme = __webpack_require__(34);
+
+var _theme2 = _interopRequireDefault(_theme);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+var debug = (0, _logger2.default)('quill');
+
+var Quill = function () {
+  _createClass(Quill, null, [{
+    key: 'debug',
+    value: function debug(limit) {
+      if (limit === true) {
+        limit = 'log';
+      }
+      _logger2.default.level(limit);
+    }
+  }, {
+    key: 'find',
+    value: function find(node) {
+      return node.__quill || _parchment2.default.find(node);
+    }
+  }, {
+    key: 'import',
+    value: function _import(name) {
+      if (this.imports[name] == null) {
+        debug.error('Cannot import ' + name + '. Are you sure it was registered?');
+      }
+      return this.imports[name];
+    }
+  }, {
+    key: 'register',
+    value: function register(path, target) {
+      var _this = this;
+
+      var overwrite = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
+
+      if (typeof path !== 'string') {
+        var name = path.attrName || path.blotName;
+        if (typeof name === 'string') {
+          // register(Blot | Attributor, overwrite)
+          this.register('formats/' + name, path, target);
+        } else {
+          Object.keys(path).forEach(function (key) {
+            _this.register(key, path[key], target);
+          });
+        }
+      } else {
+        if (this.imports[path] != null && !overwrite) {
+          debug.warn('Overwriting ' + path + ' with', target);
+        }
+        this.imports[path] = target;
+        if ((path.startsWith('blots/') || path.startsWith('formats/')) && target.blotName !== 'abstract') {
+          _parchment2.default.register(target);
+        } else if (path.startsWith('modules') && typeof target.register === 'function') {
+          target.register();
+        }
+      }
+    }
+  }]);
+
+  function Quill(container) {
+    var _this2 = this;
+
+    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
+
+    _classCallCheck(this, Quill);
+
+    this.options = expandConfig(container, options);
+    this.container = this.options.container;
+    if (this.container == null) {
+      return debug.error('Invalid Quill container', container);
+    }
+    if (this.options.debug) {
+      Quill.debug(this.options.debug);
+    }
+    var html = this.container.innerHTML.trim();
+    this.container.classList.add('ql-container');
+    this.container.innerHTML = '';
+    this.container.__quill = this;
+    this.root = this.addContainer('ql-editor');
+    this.root.classList.add('ql-blank');
+    this.root.setAttribute('data-gramm', false);
+    this.scrollingContainer = this.options.scrollingContainer || this.root;
+    this.emitter = new _emitter4.default();
+    this.scroll = _parchment2.default.create(this.root, {
+      emitter: this.emitter,
+      whitelist: this.options.formats
+    });
+    this.editor = new _editor2.default(this.scroll);
+    this.selection = new _selection2.default(this.scroll, this.emitter);
+    this.theme = new this.options.theme(this, this.options);
+    this.keyboard = this.theme.addModule('keyboard');
+    this.clipboard = this.theme.addModule('clipboard');
+    this.history = this.theme.addModule('history');
+    this.theme.init();
+    this.emitter.on(_emitter4.default.events.EDITOR_CHANGE, function (type) {
+      if (type === _emitter4.default.events.TEXT_CHANGE) {
+        _this2.root.classList.toggle('ql-blank', _this2.editor.isBlank());
+      }
+    });
+    this.emitter.on(_emitter4.default.events.SCROLL_UPDATE, function (source, mutations) {
+      var range = _this2.selection.lastRange;
+      var index = range && range.length === 0 ? range.index : undefined;
+      modify.call(_this2, function () {
+        return _this2.editor.update(null, mutations, index);
+      }, source);
+    });
+    var contents = this.clipboard.convert('<div class=\'ql-editor\' style="white-space: normal;">' + html + '<p><br></p></div>');
+    this.setContents(contents);
+    this.history.clear();
+    if (this.options.placeholder) {
+      this.root.setAttribute('data-placeholder', this.options.placeholder);
+    }
+    if (this.options.readOnly) {
+      this.disable();
+    }
+  }
+
+  _createClass(Quill, [{
+    key: 'addContainer',
+    value: function addContainer(container) {
+      var refNode = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
+
+      if (typeof container === 'string') {
+        var className = container;
+        container = document.createElement('div');
+        container.classList.add(className);
+      }
+      this.container.insertBefore(container, refNode);
+      return container;
+    }
+  }, {
+    key: 'blur',
+    value: function blur() {
+      this.selection.setRange(null);
+    }
+  }, {
+    key: 'deleteText',
+    value: function deleteText(index, length, source) {
+      var _this3 = this;
+
+      var _overload = overload(index, length, source);
+
+      var _overload2 = _slicedToArray(_overload, 4);
+
+      index = _overload2[0];
+      length = _overload2[1];
+      source = _overload2[3];
+
+      return modify.call(this, function () {
+        return _this3.editor.deleteText(index, length);
+      }, source, index, -1 * length);
+    }
+  }, {
+    key: 'disable',
+    value: function disable() {
+      this.enable(false);
+    }
+  }, {
+    key: 'enable',
+    value: function enable() {
+      var enabled = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
+
+      this.scroll.enable(enabled);
+      this.container.classList.toggle('ql-disabled', !enabled);
+    }
+  }, {
+    key: 'focus',
+    value: function focus() {
+      var scrollTop = this.scrollingContainer.scrollTop;
+      this.selection.focus();
+      this.scrollingContainer.scrollTop = scrollTop;
+      this.scrollIntoView();
+    }
+  }, {
+    key: 'format',
+    value: function format(name, value) {
+      var _this4 = this;
+
+      var source = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : _emitter4.default.sources.API;
+
+      return modify.call(this, function () {
+        var range = _this4.getSelection(true);
+        var change = new _quillDelta2.default();
+        if (range == null) {
+          return change;
+        } else if (_parchment2.default.query(name, _parchment2.default.Scope.BLOCK)) {
+          change = _this4.editor.formatLine(range.index, range.length, _defineProperty({}, name, value));
+        } else if (range.length === 0) {
+          _this4.selection.format(name, value);
+          return change;
+        } else {
+          change = _this4.editor.formatText(range.index, range.length, _defineProperty({}, name, value));
+        }
+        _this4.setSelection(range, _emitter4.default.sources.SILENT);
+        return change;
+      }, source);
+    }
+  }, {
+    key: 'formatLine',
+    value: function formatLine(index, length, name, value, source) {
+      var _this5 = this;
+
+      var formats = void 0;
+
+      var _overload3 = overload(index, length, name, value, source);
+
+      var _overload4 = _slicedToArray(_overload3, 4);
+
+      index = _overload4[0];
+      length = _overload4[1];
+      formats = _overload4[2];
+      source = _overload4[3];
+
+      return modify.call(this, function () {
+        return _this5.editor.formatLine(index, length, formats);
+      }, source, index, 0);
+    }
+  }, {
+    key: 'formatText',
+    value: function formatText(index, length, name, value, source) {
+      var _this6 = this;
+
+      var formats = void 0;
+
+      var _overload5 = overload(index, length, name, value, source);
+
+      var _overload6 = _slicedToArray(_overload5, 4);
+
+      index = _overload6[0];
+      length = _overload6[1];
+      formats = _overload6[2];
+      source = _overload6[3];
+
+      return modify.call(this, function () {
+        return _this6.editor.formatText(index, length, formats);
+      }, source, index, 0);
+    }
+  }, {
+    key: 'getBounds',
+    value: function getBounds(index) {
+      var length = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
+
+      var bounds = void 0;
+      if (typeof index === 'number') {
+        bounds = this.selection.getBounds(index, length);
+      } else {
+        bounds = this.selection.getBounds(index.index, index.length);
+      }
+      var containerBounds = this.container.getBoundingClientRect();
+      return {
+        bottom: bounds.bottom - containerBounds.top,
+        height: bounds.height,
+        left: bounds.left - containerBounds.left,
+        right: bounds.right - containerBounds.left,
+        top: bounds.top - containerBounds.top,
+        width: bounds.width
+      };
+    }
+  }, {
+    key: 'getContents',
+    value: function getContents() {
+      var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
+      var length = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.getLength() - index;
+
+      var _overload7 = overload(index, length);
+
+      var _overload8 = _slicedToArray(_overload7, 2);
+
+      index = _overload8[0];
+      length = _overload8[1];
+
+      return this.editor.getContents(index, length);
+    }
+  }, {
+    key: 'getFormat',
+    value: function getFormat() {
+      var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.getSelection(true);
+      var length = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
+
+      if (typeof index === 'number') {
+        return this.editor.getFormat(index, length);
+      } else {
+        return this.editor.getFormat(index.index, index.length);
+      }
+    }
+  }, {
+    key: 'getIndex',
+    value: function getIndex(blot) {
+      return blot.offset(this.scroll);
+    }
+  }, {
+    key: 'getLength',
+    value: function getLength() {
+      return this.scroll.length();
+    }
+  }, {
+    key: 'getLeaf',
+    value: function getLeaf(index) {
+      return this.scroll.leaf(index);
+    }
+  }, {
+    key: 'getLine',
+    value: function getLine(index) {
+      return this.scroll.line(index);
+    }
+  }, {
+    key: 'getLines',
+    value: function getLines() {
+      var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
+      var length = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : Number.MAX_VALUE;
+
+      if (typeof index !== 'number') {
+        return this.scroll.lines(index.index, index.length);
+      } else {
+        return this.scroll.lines(index, length);
+      }
+    }
+  }, {
+    key: 'getModule',
+    value: function getModule(name) {
+      return this.theme.modules[name];
+    }
+  }, {
+    key: 'getSelection',
+    value: function getSelection() {
+      var focus = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
+
+      if (focus) this.focus();
+      this.update(); // Make sure we access getRange with editor in consistent state
+      return this.selection.getRange()[0];
+    }
+  }, {
+    key: 'getText',
+    value: function getText() {
+      var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
+      var length = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.getLength() - index;
+
+      var _overload9 = overload(index, length);
+
+      var _overload10 = _slicedToArray(_overload9, 2);
+
+      index = _overload10[0];
+      length = _overload10[1];
+
+      return this.editor.getText(index, length);
+    }
+  }, {
+    key: 'hasFocus',
+    value: function hasFocus() {
+      return this.selection.hasFocus();
+    }
+  }, {
+    key: 'insertEmbed',
+    value: function insertEmbed(index, embed, value) {
+      var _this7 = this;
+
+      var source = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : Quill.sources.API;
+
+      return modify.call(this, function () {
+        return _this7.editor.insertEmbed(index, embed, value);
+      }, source, index);
+    }
+  }, {
+    key: 'insertText',
+    value: function insertText(index, text, name, value, source) {
+      var _this8 = this;
+
+      var formats = void 0;
+
+      var _overload11 = overload(index, 0, name, value, source);
+
+      var _overload12 = _slicedToArray(_overload11, 4);
+
+      index = _overload12[0];
+      formats = _overload12[2];
+      source = _overload12[3];
+
+      return modify.call(this, function () {
+        return _this8.editor.insertText(index, text, formats);
+      }, source, index, text.length);
+    }
+  }, {
+    key: 'isEnabled',
+    value: function isEnabled() {
+      return !this.container.classList.contains('ql-disabled');
+    }
+  }, {
+    key: 'off',
+    value: function off() {
+      return this.emitter.off.apply(this.emitter, arguments);
+    }
+  }, {
+    key: 'on',
+    value: function on() {
+      return this.emitter.on.apply(this.emitter, arguments);
+    }
+  }, {
+    key: 'once',
+    value: function once() {
+      return this.emitter.once.apply(this.emitter, arguments);
+    }
+  }, {
+    key: 'pasteHTML',
+    value: function pasteHTML(index, html, source) {
+      this.clipboard.dangerouslyPasteHTML(index, html, source);
+    }
+  }, {
+    key: 'removeFormat',
+    value: function removeFormat(index, length, source) {
+      var _this9 = this;
+
+      var _overload13 = overload(index, length, source);
+
+      var _overload14 = _slicedToArray(_overload13, 4);
+
+      index = _overload14[0];
+      length = _overload14[1];
+      source = _overload14[3];
+
+      return modify.call(this, function () {
+        return _this9.editor.removeFormat(index, length);
+      }, source, index);
+    }
+  }, {
+    key: 'scrollIntoView',
+    value: function scrollIntoView() {
+      this.selection.scrollIntoView(this.scrollingContainer);
+    }
+  }, {
+    key: 'setContents',
+    value: function setContents(delta) {
+      var _this10 = this;
+
+      var source = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _emitter4.default.sources.API;
+
+      return modify.call(this, function () {
+        delta = new _quillDelta2.default(delta);
+        var length = _this10.getLength();
+        var deleted = _this10.editor.deleteText(0, length);
+        var applied = _this10.editor.applyDelta(delta);
+        var lastOp = applied.ops[applied.ops.length - 1];
+        if (lastOp != null && typeof lastOp.insert === 'string' && lastOp.insert[lastOp.insert.length - 1] === '\n') {
+          _this10.editor.deleteText(_this10.getLength() - 1, 1);
+          applied.delete(1);
+        }
+        var ret = deleted.compose(applied);
+        return ret;
+      }, source);
+    }
+  }, {
+    key: 'setSelection',
+    value: function setSelection(index, length, source) {
+      if (index == null) {
+        this.selection.setRange(null, length || Quill.sources.API);
+      } else {
+        var _overload15 = overload(index, length, source);
+
+        var _overload16 = _slicedToArray(_overload15, 4);
+
+        index = _overload16[0];
+        length = _overload16[1];
+        source = _overload16[3];
+
+        this.selection.setRange(new _selection.Range(index, length), source);
+        if (source !== _emitter4.default.sources.SILENT) {
+          this.selection.scrollIntoView(this.scrollingContainer);
+        }
+      }
+    }
+  }, {
+    key: 'setText',
+    value: function setText(text) {
+      var source = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _emitter4.default.sources.API;
+
+      var delta = new _quillDelta2.default().insert(text);
+      return this.setContents(delta, source);
+    }
+  }, {
+    key: 'update',
+    value: function update() {
+      var source = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _emitter4.default.sources.USER;
+
+      var change = this.scroll.update(source); // Will update selection before selection.update() does if text changes
+      this.selection.update(source);
+      return change;
+    }
+  }, {
+    key: 'updateContents',
+    value: function updateContents(delta) {
+      var _this11 = this;
+
+      var source = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _emitter4.default.sources.API;
+
+      return modify.call(this, function () {
+        delta = new _quillDelta2.default(delta);
+        return _this11.editor.applyDelta(delta, source);
+      }, source, true);
+    }
+  }]);
+
+  return Quill;
+}();
+
+Quill.DEFAULTS = {
+  bounds: null,
+  formats: null,
+  modules: {},
+  placeholder: '',
+  readOnly: false,
+  scrollingContainer: null,
+  strict: true,
+  theme: 'default'
+};
+Quill.events = _emitter4.default.events;
+Quill.sources = _emitter4.default.sources;
+// eslint-disable-next-line no-undef
+Quill.version =  false ? 'dev' : "1.3.6";
+
+Quill.imports = {
+  'delta': _quillDelta2.default,
+  'parchment': _parchment2.default,
+  'core/module': _module2.default,
+  'core/theme': _theme2.default
+};
+
+function expandConfig(container, userConfig) {
+  userConfig = (0, _extend2.default)(true, {
+    container: container,
+    modules: {
+      clipboard: true,
+      keyboard: true,
+      history: true
+    }
+  }, userConfig);
+  if (!userConfig.theme || userConfig.theme === Quill.DEFAULTS.theme) {
+    userConfig.theme = _theme2.default;
+  } else {
+    userConfig.theme = Quill.import('themes/' + userConfig.theme);
+    if (userConfig.theme == null) {
+      throw new Error('Invalid theme ' + userConfig.theme + '. Did you register it?');
+    }
+  }
+  var themeConfig = (0, _extend2.default)(true, {}, userConfig.theme.DEFAULTS);
+  [themeConfig, userConfig].forEach(function (config) {
+    config.modules = config.modules || {};
+    Object.keys(config.modules).forEach(function (module) {
+      if (config.modules[module] === true) {
+        config.modules[module] = {};
+      }
+    });
+  });
+  var moduleNames = Object.keys(themeConfig.modules).concat(Object.keys(userConfig.modules));
+  var moduleConfig = moduleNames.reduce(function (config, name) {
+    var moduleClass = Quill.import('modules/' + name);
+    if (moduleClass == null) {
+      debug.error('Cannot load ' + name + ' module. Are you sure you registered it?');
+    } else {
+      config[name] = moduleClass.DEFAULTS || {};
+    }
+    return config;
+  }, {});
+  // Special case toolbar shorthand
+  if (userConfig.modules != null && userConfig.modules.toolbar && userConfig.modules.toolbar.constructor !== Object) {
+    userConfig.modules.toolbar = {
+      container: userConfig.modules.toolbar
+    };
+  }
+  userConfig = (0, _extend2.default)(true, {}, Quill.DEFAULTS, { modules: moduleConfig }, themeConfig, userConfig);
+  ['bounds', 'container', 'scrollingContainer'].forEach(function (key) {
+    if (typeof userConfig[key] === 'string') {
+      userConfig[key] = document.querySelector(userConfig[key]);
+    }
+  });
+  userConfig.modules = Object.keys(userConfig.modules).reduce(function (config, name) {
+    if (userConfig.modules[name]) {
+      config[name] = userConfig.modules[name];
+    }
+    return config;
+  }, {});
+  return userConfig;
+}
+
+// Handle selection preservation and TEXT_CHANGE emission
+// common to modification APIs
+function modify(modifier, source, index, shift) {
+  if (this.options.strict && !this.isEnabled() && source === _emitter4.default.sources.USER) {
+    return new _quillDelta2.default();
+  }
+  var range = index == null ? null : this.getSelection();
+  var oldDelta = this.editor.delta;
+  var change = modifier();
+  if (range != null) {
+    if (index === true) index = range.index;
+    if (shift == null) {
+      range = shiftRange(range, change, source);
+    } else if (shift !== 0) {
+      range = shiftRange(range, index, shift, source);
+    }
+    this.setSelection(range, _emitter4.default.sources.SILENT);
+  }
+  if (change.length() > 0) {
+    var _emitter;
+
+    var args = [_emitter4.default.events.TEXT_CHANGE, change, oldDelta, source];
+    (_emitter = this.emitter).emit.apply(_emitter, [_emitter4.default.events.EDITOR_CHANGE].concat(args));
+    if (source !== _emitter4.default.sources.SILENT) {
+      var _emitter2;
+
+      (_emitter2 = this.emitter).emit.apply(_emitter2, args);
+    }
+  }
+  return change;
+}
+
+function overload(index, length, name, value, source) {
+  var formats = {};
+  if (typeof index.index === 'number' && typeof index.length === 'number') {
+    // Allow for throwaway end (used by insertText/insertEmbed)
+    if (typeof length !== 'number') {
+      source = value, value = name, name = length, length = index.length, index = index.index;
+    } else {
+      length = index.length, index = index.index;
+    }
+  } else if (typeof length !== 'number') {
+    source = value, value = name, name = length, length = 0;
+  }
+  // Handle format being object, two format name/value strings or excluded
+  if ((typeof name === 'undefined' ? 'undefined' : _typeof(name)) === 'object') {
+    formats = name;
+    source = value;
+  } else if (typeof name === 'string') {
+    if (value != null) {
+      formats[name] = value;
+    } else {
+      source = name;
+    }
+  }
+  // Handle optional source
+  source = source || _emitter4.default.sources.API;
+  return [index, length, formats, source];
+}
+
+function shiftRange(range, index, length, source) {
+  if (range == null) return null;
+  var start = void 0,
+      end = void 0;
+  if (index instanceof _quillDelta2.default) {
+    var _map = [range.index, range.index + range.length].map(function (pos) {
+      return index.transformPosition(pos, source !== _emitter4.default.sources.USER);
+    });
+
+    var _map2 = _slicedToArray(_map, 2);
+
+    start = _map2[0];
+    end = _map2[1];
+  } else {
+    var _map3 = [range.index, range.index + range.length].map(function (pos) {
+      if (pos < index || pos === index && source === _emitter4.default.sources.USER) return pos;
+      if (length >= 0) {
+        return pos + length;
+      } else {
+        return Math.max(index, pos + length);
+      }
+    });
+
+    var _map4 = _slicedToArray(_map3, 2);
+
+    start = _map4[0];
+    end = _map4[1];
+  }
+  return new _selection.Range(start, end - start);
+}
+
+exports.expandConfig = expandConfig;
+exports.overload = overload;
+exports.default = Quill;
+
+/***/ }),
+/* 6 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };
+
+var _text = __webpack_require__(7);
+
+var _text2 = _interopRequireDefault(_text);
+
+var _parchment = __webpack_require__(0);
+
+var _parchment2 = _interopRequireDefault(_parchment);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+var Inline = function (_Parchment$Inline) {
+  _inherits(Inline, _Parchment$Inline);
+
+  function Inline() {
+    _classCallCheck(this, Inline);
+
+    return _possibleConstructorReturn(this, (Inline.__proto__ || Object.getPrototypeOf(Inline)).apply(this, arguments));
+  }
+
+  _createClass(Inline, [{
+    key: 'formatAt',
+    value: function formatAt(index, length, name, value) {
+      if (Inline.compare(this.statics.blotName, name) < 0 && _parchment2.default.query(name, _parchment2.default.Scope.BLOT)) {
+        var blot = this.isolate(index, length);
+        if (value) {
+          blot.wrap(name, value);
+        }
+      } else {
+        _get(Inline.prototype.__proto__ || Object.getPrototypeOf(Inline.prototype), 'formatAt', this).call(this, index, length, name, value);
+      }
+    }
+  }, {
+    key: 'optimize',
+    value: function optimize(context) {
+      _get(Inline.prototype.__proto__ || Object.getPrototypeOf(Inline.prototype), 'optimize', this).call(this, context);
+      if (this.parent instanceof Inline && Inline.compare(this.statics.blotName, this.parent.statics.blotName) > 0) {
+        var parent = this.parent.isolate(this.offset(), this.length());
+        this.moveChildren(parent);
+        parent.wrap(this);
+      }
+    }
+  }], [{
+    key: 'compare',
+    value: function compare(self, other) {
+      var selfIndex = Inline.order.indexOf(self);
+      var otherIndex = Inline.order.indexOf(other);
+      if (selfIndex >= 0 || otherIndex >= 0) {
+        return selfIndex - otherIndex;
+      } else if (self === other) {
+        return 0;
+      } else if (self < other) {
+        return -1;
+      } else {
+        return 1;
+      }
+    }
+  }]);
+
+  return Inline;
+}(_parchment2.default.Inline);
+
+Inline.allowedChildren = [Inline, _parchment2.default.Embed, _text2.default];
+// Lower index means deeper in the DOM tree, since not found (-1) is for embeds
+Inline.order = ['cursor', 'inline', // Must be lower
+'underline', 'strike', 'italic', 'bold', 'script', 'link', 'code' // Must be higher
+];
+
+exports.default = Inline;
+
+/***/ }),
+/* 7 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _parchment = __webpack_require__(0);
+
+var _parchment2 = _interopRequireDefault(_parchment);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+var TextBlot = function (_Parchment$Text) {
+  _inherits(TextBlot, _Parchment$Text);
+
+  function TextBlot() {
+    _classCallCheck(this, TextBlot);
+
+    return _possibleConstructorReturn(this, (TextBlot.__proto__ || Object.getPrototypeOf(TextBlot)).apply(this, arguments));
+  }
+
+  return TextBlot;
+}(_parchment2.default.Text);
+
+exports.default = TextBlot;
+
+/***/ }),
+/* 8 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };
+
+var _eventemitter = __webpack_require__(54);
+
+var _eventemitter2 = _interopRequireDefault(_eventemitter);
+
+var _logger = __webpack_require__(10);
+
+var _logger2 = _interopRequireDefault(_logger);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+var debug = (0, _logger2.default)('quill:events');
+
+var EVENTS = ['selectionchange', 'mousedown', 'mouseup', 'click'];
+
+EVENTS.forEach(function (eventName) {
+  document.addEventListener(eventName, function () {
+    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
+      args[_key] = arguments[_key];
+    }
+
+    [].slice.call(document.querySelectorAll('.ql-container')).forEach(function (node) {
+      // TODO use WeakMap
+      if (node.__quill && node.__quill.emitter) {
+        var _node$__quill$emitter;
+
+        (_node$__quill$emitter = node.__quill.emitter).handleDOM.apply(_node$__quill$emitter, args);
+      }
+    });
+  });
+});
+
+var Emitter = function (_EventEmitter) {
+  _inherits(Emitter, _EventEmitter);
+
+  function Emitter() {
+    _classCallCheck(this, Emitter);
+
+    var _this = _possibleConstructorReturn(this, (Emitter.__proto__ || Object.getPrototypeOf(Emitter)).call(this));
+
+    _this.listeners = {};
+    _this.on('error', debug.error);
+    return _this;
+  }
+
+  _createClass(Emitter, [{
+    key: 'emit',
+    value: function emit() {
+      debug.log.apply(debug, arguments);
+      _get(Emitter.prototype.__proto__ || Object.getPrototypeOf(Emitter.prototype), 'emit', this).apply(this, arguments);
+    }
+  }, {
+    key: 'handleDOM',
+    value: function handleDOM(event) {
+      for (var _len2 = arguments.length, args = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
+        args[_key2 - 1] = arguments[_key2];
+      }
+
+      (this.listeners[event.type] || []).forEach(function (_ref) {
+        var node = _ref.node,
+            handler = _ref.handler;
+
+        if (event.target === node || node.contains(event.target)) {
+          handler.apply(undefined, [event].concat(args));
+        }
+      });
+    }
+  }, {
+    key: 'listenDOM',
+    value: function listenDOM(eventName, node, handler) {
+      if (!this.listeners[eventName]) {
+        this.listeners[eventName] = [];
+      }
+      this.listeners[eventName].push({ node: node, handler: handler });
+    }
+  }]);
+
+  return Emitter;
+}(_eventemitter2.default);
+
+Emitter.events = {
+  EDITOR_CHANGE: 'editor-change',
+  SCROLL_BEFORE_UPDATE: 'scroll-before-update',
+  SCROLL_OPTIMIZE: 'scroll-optimize',
+  SCROLL_UPDATE: 'scroll-update',
+  SELECTION_CHANGE: 'selection-change',
+  TEXT_CHANGE: 'text-change'
+};
+Emitter.sources = {
+  API: 'api',
+  SILENT: 'silent',
+  USER: 'user'
+};
+
+exports.default = Emitter;
+
+/***/ }),
+/* 9 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+var Module = function Module(quill) {
+  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
+
+  _classCallCheck(this, Module);
+
+  this.quill = quill;
+  this.options = options;
+};
+
+Module.DEFAULTS = {};
+
+exports.default = Module;
+
+/***/ }),
+/* 10 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+var levels = ['error', 'warn', 'log', 'info'];
+var level = 'warn';
+
+function debug(method) {
+  if (levels.indexOf(method) <= levels.indexOf(level)) {
+    var _console;
+
+    for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
+      args[_key - 1] = arguments[_key];
+    }
+
+    (_console = console)[method].apply(_console, args); // eslint-disable-line no-console
+  }
+}
+
+function namespace(ns) {
+  return levels.reduce(function (logger, method) {
+    logger[method] = debug.bind(console, method, ns);
+    return logger;
+  }, {});
+}
+
+debug.level = namespace.level = function (newLevel) {
+  level = newLevel;
+};
+
+exports.default = namespace;
+
+/***/ }),
+/* 11 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var pSlice = Array.prototype.slice;
+var objectKeys = __webpack_require__(52);
+var isArguments = __webpack_require__(53);
+
+var deepEqual = module.exports = function (actual, expected, opts) {
+  if (!opts) opts = {};
+  // 7.1. All identical values are equivalent, as determined by ===.
+  if (actual === expected) {
+    return true;
+
+  } else if (actual instanceof Date && expected instanceof Date) {
+    return actual.getTime() === expected.getTime();
+
+  // 7.3. Other pairs that do not both pass typeof value == 'object',
+  // equivalence is determined by ==.
+  } else if (!actual || !expected || typeof actual != 'object' && typeof expected != 'object') {
+    return opts.strict ? actual === expected : actual == expected;
+
+  // 7.4. For all other Object pairs, including Array objects, equivalence is
+  // determined by having the same number of owned properties (as verified
+  // with Object.prototype.hasOwnProperty.call), the same set of keys
+  // (although not necessarily the same order), equivalent values for every
+  // corresponding key, and an identical 'prototype' property. Note: this
+  // accounts for both named and indexed properties on Arrays.
+  } else {
+    return objEquiv(actual, expected, opts);
+  }
+}
+
+function isUndefinedOrNull(value) {
+  return value === null || value === undefined;
+}
+
+function isBuffer (x) {
+  if (!x || typeof x !== 'object' || typeof x.length !== 'number') return false;
+  if (typeof x.copy !== 'function' || typeof x.slice !== 'function') {
+    return false;
+  }
+  if (x.length > 0 && typeof x[0] !== 'number') return false;
+  return true;
+}
+
+function objEquiv(a, b, opts) {
+  var i, key;
+  if (isUndefinedOrNull(a) || isUndefinedOrNull(b))
+    return false;
+  // an identical 'prototype' property.
+  if (a.prototype !== b.prototype) return false;
+  //~~~I've managed to break Object.keys through screwy arguments passing.
+  //   Converting to array solves the problem.
+  if (isArguments(a)) {
+    if (!isArguments(b)) {
+      return false;
+    }
+    a = pSlice.call(a);
+    b = pSlice.call(b);
+    return deepEqual(a, b, opts);
+  }
+  if (isBuffer(a)) {
+    if (!isBuffer(b)) {
+      return false;
+    }
+    if (a.length !== b.length) return false;
+    for (i = 0; i < a.length; i++) {
+      if (a[i] !== b[i]) return false;
+    }
+    return true;
+  }
+  try {
+    var ka = objectKeys(a),
+        kb = objectKeys(b);
+  } catch (e) {//happens when one is a string literal and the other isn't
+    return false;
+  }
+  // having the same number of owned properties (keys incorporates
+  // hasOwnProperty)
+  if (ka.length != kb.length)
+    return false;
+  //the same set of keys (although not necessarily the same order),
+  ka.sort();
+  kb.sort();
+  //~~~cheap key test
+  for (i = ka.length - 1; i >= 0; i--) {
+    if (ka[i] != kb[i])
+      return false;
+  }
+  //equivalent values for every corresponding key, and
+  //~~~possibly expensive deep test
+  for (i = ka.length - 1; i >= 0; i--) {
+    key = ka[i];
+    if (!deepEqual(a[key], b[key], opts)) return false;
+  }
+  return typeof a === typeof b;
+}
+
+
+/***/ }),
+/* 12 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", { value: true });
+var Registry = __webpack_require__(1);
+var Attributor = /** @class */ (function () {
+    function Attributor(attrName, keyName, options) {
+        if (options === void 0) { options = {}; }
+        this.attrName = attrName;
+        this.keyName = keyName;
+        var attributeBit = Registry.Scope.TYPE & Registry.Scope.ATTRIBUTE;
+        if (options.scope != null) {
+            // Ignore type bits, force attribute bit
+            this.scope = (options.scope & Registry.Scope.LEVEL) | attributeBit;
+        }
+        else {
+            this.scope = Registry.Scope.ATTRIBUTE;
+        }
+        if (options.whitelist != null)
+            this.whitelist = options.whitelist;
+    }
+    Attributor.keys = function (node) {
+        return [].map.call(node.attributes, function (item) {
+            return item.name;
+        });
+    };
+    Attributor.prototype.add = function (node, value) {
+        if (!this.canAdd(node, value))
+            return false;
+        node.setAttribute(this.keyName, value);
+        return true;
+    };
+    Attributor.prototype.canAdd = function (node, value) {
+        var match = Registry.query(node, Registry.Scope.BLOT & (this.scope | Registry.Scope.TYPE));
+        if (match == null)
+            return false;
+        if (this.whitelist == null)
+            return true;
+        if (typeof value === 'string') {
+            return this.whitelist.indexOf(value.replace(/["']/g, '')) > -1;
+        }
+        else {
+            return this.whitelist.indexOf(value) > -1;
+        }
+    };
+    Attributor.prototype.remove = function (node) {
+        node.removeAttribute(this.keyName);
+    };
+    Attributor.prototype.value = function (node) {
+        var value = node.getAttribute(this.keyName);
+        if (this.canAdd(node, value) && value) {
+            return value;
+        }
+        return '';
+    };
+    return Attributor;
+}());
+exports.default = Attributor;
+
+
+/***/ }),
+/* 13 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = exports.Code = undefined;
+
+var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };
+
+var _quillDelta = __webpack_require__(2);
+
+var _quillDelta2 = _interopRequireDefault(_quillDelta);
+
+var _parchment = __webpack_require__(0);
+
+var _parchment2 = _interopRequireDefault(_parchment);
+
+var _block = __webpack_require__(4);
+
+var _block2 = _interopRequireDefault(_block);
+
+var _inline = __webpack_require__(6);
+
+var _inline2 = _interopRequireDefault(_inline);
+
+var _text = __webpack_require__(7);
+
+var _text2 = _interopRequireDefault(_text);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+var Code = function (_Inline) {
+  _inherits(Code, _Inline);
+
+  function Code() {
+    _classCallCheck(this, Code);
+
+    return _possibleConstructorReturn(this, (Code.__proto__ || Object.getPrototypeOf(Code)).apply(this, arguments));
+  }
+
+  return Code;
+}(_inline2.default);
+
+Code.blotName = 'code';
+Code.tagName = 'CODE';
+
+var CodeBlock = function (_Block) {
+  _inherits(CodeBlock, _Block);
+
+  function CodeBlock() {
+    _classCallCheck(this, CodeBlock);
+
+    return _possibleConstructorReturn(this, (CodeBlock.__proto__ || Object.getPrototypeOf(CodeBlock)).apply(this, arguments));
+  }
+
+  _createClass(CodeBlock, [{
+    key: 'delta',
+    value: function delta() {
+      var _this3 = this;
+
+      var text = this.domNode.textContent;
+      if (text.endsWith('\n')) {
+        // Should always be true
+        text = text.slice(0, -1);
+      }
+      return text.split('\n').reduce(function (delta, frag) {
+        return delta.insert(frag).insert('\n', _this3.formats());
+      }, new _quillDelta2.default());
+    }
+  }, {
+    key: 'format',
+    value: function format(name, value) {
+      if (name === this.statics.blotName && value) return;
+
+      var _descendant = this.descendant(_text2.default, this.length() - 1),
+          _descendant2 = _slicedToArray(_descendant, 1),
+          text = _descendant2[0];
+
+      if (text != null) {
+        text.deleteAt(text.length() - 1, 1);
+      }
+      _get(CodeBlock.prototype.__proto__ || Object.getPrototypeOf(CodeBlock.prototype), 'format', this).call(this, name, value);
+    }
+  }, {
+    key: 'formatAt',
+    value: function formatAt(index, length, name, value) {
+      if (length === 0) return;
+      if (_parchment2.default.query(name, _parchment2.default.Scope.BLOCK) == null || name === this.statics.blotName && value === this.statics.formats(this.domNode)) {
+        return;
+      }
+      var nextNewline = this.newlineIndex(index);
+      if (nextNewline < 0 || nextNewline >= index + length) return;
+      var prevNewline = this.newlineIndex(index, true) + 1;
+      var isolateLength = nextNewline - prevNewline + 1;
+      var blot = this.isolate(prevNewline, isolateLength);
+      var next = blot.next;
+      blot.format(name, value);
+      if (next instanceof CodeBlock) {
+        next.formatAt(0, index - prevNewline + length - isolateLength, name, value);
+      }
+    }
+  }, {
+    key: 'insertAt',
+    value: function insertAt(index, value, def) {
+      if (def != null) return;
+
+      var _descendant3 = this.descendant(_text2.default, index),
+          _descendant4 = _slicedToArray(_descendant3, 2),
+          text = _descendant4[0],
+          offset = _descendant4[1];
+
+      text.insertAt(offset, value);
+    }
+  }, {
+    key: 'length',
+    value: function length() {
+      var length = this.domNode.textContent.length;
+      if (!this.domNode.textContent.endsWith('\n')) {
+        return length + 1;
+      }
+      return length;
+    }
+  }, {
+    key: 'newlineIndex',
+    value: function newlineIndex(searchIndex) {
+      var reverse = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
+
+      if (!reverse) {
+        var offset = this.domNode.textContent.slice(searchIndex).indexOf('\n');
+        return offset > -1 ? searchIndex + offset : -1;
+      } else {
+        return this.domNode.textContent.slice(0, searchIndex).lastIndexOf('\n');
+      }
+    }
+  }, {
+    key: 'optimize',
+    value: function optimize(context) {
+      if (!this.domNode.textContent.endsWith('\n')) {
+        this.appendChild(_parchment2.default.create('text', '\n'));
+      }
+      _get(CodeBlock.prototype.__proto__ || Object.getPrototypeOf(CodeBlock.prototype), 'optimize', this).call(this, context);
+      var next = this.next;
+      if (next != null && next.prev === this && next.statics.blotName === this.statics.blotName && this.statics.formats(this.domNode) === next.statics.formats(next.domNode)) {
+        next.optimize(context);
+        next.moveChildren(this);
+        next.remove();
+      }
+    }
+  }, {
+    key: 'replace',
+    value: function replace(target) {
+      _get(CodeBlock.prototype.__proto__ || Object.getPrototypeOf(CodeBlock.prototype), 'replace', this).call(this, target);
+      [].slice.call(this.domNode.querySelectorAll('*')).forEach(function (node) {
+        var blot = _parchment2.default.find(node);
+        if (blot == null) {
+          node.parentNode.removeChild(node);
+        } else if (blot instanceof _parchment2.default.Embed) {
+          blot.remove();
+        } else {
+          blot.unwrap();
+        }
+      });
+    }
+  }], [{
+    key: 'create',
+    value: function create(value) {
+      var domNode = _get(CodeBlock.__proto__ || Object.getPrototypeOf(CodeBlock), 'create', this).call(this, value);
+      domNode.setAttribute('spellcheck', false);
+      return domNode;
+    }
+  }, {
+    key: 'formats',
+    value: function formats() {
+      return true;
+    }
+  }]);
+
+  return CodeBlock;
+}(_block2.default);
+
+CodeBlock.blotName = 'code-block';
+CodeBlock.tagName = 'PRE';
+CodeBlock.TAB = '  ';
+
+exports.Code = Code;
+exports.default = CodeBlock;
+
+/***/ }),
+/* 14 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
+
+var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+var _quillDelta = __webpack_require__(2);
+
+var _quillDelta2 = _interopRequireDefault(_quillDelta);
+
+var _op = __webpack_require__(20);
+
+var _op2 = _interopRequireDefault(_op);
+
+var _parchment = __webpack_require__(0);
+
+var _parchment2 = _interopRequireDefault(_parchment);
+
+var _code = __webpack_require__(13);
+
+var _code2 = _interopRequireDefault(_code);
+
+var _cursor = __webpack_require__(24);
+
+var _cursor2 = _interopRequireDefault(_cursor);
+
+var _block = __webpack_require__(4);
+
+var _block2 = _interopRequireDefault(_block);
+
+var _break = __webpack_require__(16);
+
+var _break2 = _interopRequireDefault(_break);
+
+var _clone = __webpack_require__(21);
+
+var _clone2 = _interopRequireDefault(_clone);
+
+var _deepEqual = __webpack_require__(11);
+
+var _deepEqual2 = _interopRequireDefault(_deepEqual);
+
+var _extend = __webpack_require__(3);
+
+var _extend2 = _interopRequireDefault(_extend);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+var ASCII = /^[ -~]*$/;
+
+var Editor = function () {
+  function Editor(scroll) {
+    _classCallCheck(this, Editor);
+
+    this.scroll = scroll;
+    this.delta = this.getDelta();
+  }
+
+  _createClass(Editor, [{
+    key: 'applyDelta',
+    value: function applyDelta(delta) {
+      var _this = this;
+
+      var consumeNextNewline = false;
+      this.scroll.update();
+      var scrollLength = this.scroll.length();
+      this.scroll.batchStart();
+      delta = normalizeDelta(delta);
+      delta.reduce(function (index, op) {
+        var length = op.retain || op.delete || op.insert.length || 1;
+        var attributes = op.attributes || {};
+        if (op.insert != null) {
+          if (typeof op.insert === 'string') {
+            var text = op.insert;
+            if (text.endsWith('\n') && consumeNextNewline) {
+              consumeNextNewline = false;
+              text = text.slice(0, -1);
+            }
+            if (index >= scrollLength && !text.endsWith('\n')) {
+              consumeNextNewline = true;
+            }
+            _this.scroll.insertAt(index, text);
+
+            var _scroll$line = _this.scroll.line(index),
+                _scroll$line2 = _slicedToArray(_scroll$line, 2),
+                line = _scroll$line2[0],
+                offset = _scroll$line2[1];
+
+            var formats = (0, _extend2.default)({}, (0, _block.bubbleFormats)(line));
+            if (line instanceof _block2.default) {
+              var _line$descendant = line.descendant(_parchment2.default.Leaf, offset),
+                  _line$descendant2 = _slicedToArray(_line$descendant, 1),
+                  leaf = _line$descendant2[0];
+
+              formats = (0, _extend2.default)(formats, (0, _block.bubbleFormats)(leaf));
+            }
+            attributes = _op2.default.attributes.diff(formats, attributes) || {};
+          } else if (_typeof(op.insert) === 'object') {
+            var key = Object.keys(op.insert)[0]; // There should only be one key
+            if (key == null) return index;
+            _this.scroll.insertAt(index, key, op.insert[key]);
+          }
+          scrollLength += length;
+        }
+        Object.keys(attributes).forEach(function (name) {
+          _this.scroll.formatAt(index, length, name, attributes[name]);
+        });
+        return index + length;
+      }, 0);
+      delta.reduce(function (index, op) {
+        if (typeof op.delete === 'number') {
+          _this.scroll.deleteAt(index, op.delete);
+          return index;
+        }
+        return index + (op.retain || op.insert.length || 1);
+      }, 0);
+      this.scroll.batchEnd();
+      return this.update(delta);
+    }
+  }, {
+    key: 'deleteText',
+    value: function deleteText(index, length) {
+      this.scroll.deleteAt(index, length);
+      return this.update(new _quillDelta2.default().retain(index).delete(length));
+    }
+  }, {
+    key: 'formatLine',
+    value: function formatLine(index, length) {
+      var _this2 = this;
+
+      var formats = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
+
+      this.scroll.update();
+      Object.keys(formats).forEach(function (format) {
+        if (_this2.scroll.whitelist != null && !_this2.scroll.whitelist[format]) return;
+        var lines = _this2.scroll.lines(index, Math.max(length, 1));
+        var lengthRemaining = length;
+        lines.forEach(function (line) {
+          var lineLength = line.length();
+          if (!(line instanceof _code2.default)) {
+            line.format(format, formats[format]);
+          } else {
+            var codeIndex = index - line.offset(_this2.scroll);
+            var codeLength = line.newlineIndex(codeIndex + lengthRemaining) - codeIndex + 1;
+            line.formatAt(codeIndex, codeLength, format, formats[format]);
+          }
+          lengthRemaining -= lineLength;
+        });
+      });
+      this.scroll.optimize();
+      return this.update(new _quillDelta2.default().retain(index).retain(length, (0, _clone2.default)(formats)));
+    }
+  }, {
+    key: 'formatText',
+    value: function formatText(index, length) {
+      var _this3 = this;
+
+      var formats = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
+
+      Object.keys(formats).forEach(function (format) {
+        _this3.scroll.formatAt(index, length, format, formats[format]);
+      });
+      return this.update(new _quillDelta2.default().retain(index).retain(length, (0, _clone2.default)(formats)));
+    }
+  }, {
+    key: 'getContents',
+    value: function getContents(index, length) {
+      return this.delta.slice(index, index + length);
+    }
+  }, {
+    key: 'getDelta',
+    value: function getDelta() {
+      return this.scroll.lines().reduce(function (delta, line) {
+        return delta.concat(line.delta());
+      }, new _quillDelta2.default());
+    }
+  }, {
+    key: 'getFormat',
+    value: function getFormat(index) {
+      var length = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
+
+      var lines = [],
+          leaves = [];
+      if (length === 0) {
+        this.scroll.path(index).forEach(function (path) {
+          var _path = _slicedToArray(path, 1),
+              blot = _path[0];
+
+          if (blot instanceof _block2.default) {
+            lines.push(blot);
+          } else if (blot instanceof _parchment2.default.Leaf) {
+            leaves.push(blot);
+          }
+        });
+      } else {
+        lines = this.scroll.lines(index, length);
+        leaves = this.scroll.descendants(_parchment2.default.Leaf, index, length);
+      }
+      var formatsArr = [lines, leaves].map(function (blots) {
+        if (blots.length === 0) return {};
+        var formats = (0, _block.bubbleFormats)(blots.shift());
+        while (Object.keys(formats).length > 0) {
+          var blot = blots.shift();
+          if (blot == null) return formats;
+          formats = combineFormats((0, _block.bubbleFormats)(blot), formats);
+        }
+        return formats;
+      });
+      return _extend2.default.apply(_extend2.default, formatsArr);
+    }
+  }, {
+    key: 'getText',
+    value: function getText(index, length) {
+      return this.getContents(index, length).filter(function (op) {
+        return typeof op.insert === 'string';
+      }).map(function (op) {
+        return op.insert;
+      }).join('');
+    }
+  }, {
+    key: 'insertEmbed',
+    value: function insertEmbed(index, embed, value) {
+      this.scroll.insertAt(index, embed, value);
+      return this.update(new _quillDelta2.default().retain(index).insert(_defineProperty({}, embed, value)));
+    }
+  }, {
+    key: 'insertText',
+    value: function insertText(index, text) {
+      var _this4 = this;
+
+      var formats = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
+
+      text = text.replace(/\r\n/g, '\n').replace(/\r/g, '\n');
+      this.scroll.insertAt(index, text);
+      Object.keys(formats).forEach(function (format) {
+        _this4.scroll.formatAt(index, text.length, format, formats[format]);
+      });
+      return this.update(new _quillDelta2.default().retain(index).insert(text, (0, _clone2.default)(formats)));
+    }
+  }, {
+    key: 'isBlank',
+    value: function isBlank() {
+      if (this.scroll.children.length == 0) return true;
+      if (this.scroll.children.length > 1) return false;
+      var block = this.scroll.children.head;
+      if (block.statics.blotName !== _block2.default.blotName) return false;
+      if (block.children.length > 1) return false;
+      return block.children.head instanceof _break2.default;
+    }
+  }, {
+    key: 'removeFormat',
+    value: function removeFormat(index, length) {
+      var text = this.getText(index, length);
+
+      var _scroll$line3 = this.scroll.line(index + length),
+          _scroll$line4 = _slicedToArray(_scroll$line3, 2),
+          line = _scroll$line4[0],
+          offset = _scroll$line4[1];
+
+      var suffixLength = 0,
+          suffix = new _quillDelta2.default();
+      if (line != null) {
+        if (!(line instanceof _code2.default)) {
+          suffixLength = line.length() - offset;
+        } else {
+          suffixLength = line.newlineIndex(offset) - offset + 1;
+        }
+        suffix = line.delta().slice(offset, offset + suffixLength - 1).insert('\n');
+      }
+      var contents = this.getContents(index, length + suffixLength);
+      var diff = contents.diff(new _quillDelta2.default().insert(text).concat(suffix));
+      var delta = new _quillDelta2.default().retain(index).concat(diff);
+      return this.applyDelta(delta);
+    }
+  }, {
+    key: 'update',
+    value: function update(change) {
+      var mutations = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
+      var cursorIndex = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined;
+
+      var oldDelta = this.delta;
+      if (mutations.length === 1 && mutations[0].type === 'characterData' && mutations[0].target.data.match(ASCII) && _parchment2.default.find(mutations[0].target)) {
+        // Optimization for character changes
+        var textBlot = _parchment2.default.find(mutations[0].target);
+        var formats = (0, _block.bubbleFormats)(textBlot);
+        var index = textBlot.offset(this.scroll);
+        var oldValue = mutations[0].oldValue.replace(_cursor2.default.CONTENTS, '');
+        var oldText = new _quillDelta2.default().insert(oldValue);
+        var newText = new _quillDelta2.default().insert(textBlot.value());
+        var diffDelta = new _quillDelta2.default().retain(index).concat(oldText.diff(newText, cursorIndex));
+        change = diffDelta.reduce(function (delta, op) {
+          if (op.insert) {
+            return delta.insert(op.insert, formats);
+          } else {
+            return delta.push(op);
+          }
+        }, new _quillDelta2.default());
+        this.delta = oldDelta.compose(change);
+      } else {
+        this.delta = this.getDelta();
+        if (!change || !(0, _deepEqual2.default)(oldDelta.compose(change), this.delta)) {
+          change = oldDelta.diff(this.delta, cursorIndex);
+        }
+      }
+      return change;
+    }
+  }]);
+
+  return Editor;
+}();
+
+function combineFormats(formats, combined) {
+  return Object.keys(combined).reduce(function (merged, name) {
+    if (formats[name] == null) return merged;
+    if (combined[name] === formats[name]) {
+      merged[name] = combined[name];
+    } else if (Array.isArray(combined[name])) {
+      if (combined[name].indexOf(formats[name]) < 0) {
+        merged[name] = combined[name].concat([formats[name]]);
+      }
+    } else {
+      merged[name] = [combined[name], formats[name]];
+    }
+    return merged;
+  }, {});
+}
+
+function normalizeDelta(delta) {
+  return delta.reduce(function (delta, op) {
+    if (op.insert === 1) {
+      var attributes = (0, _clone2.default)(op.attributes);
+      delete attributes['image'];
+      return delta.insert({ image: op.attributes.image }, attributes);
+    }
+    if (op.attributes != null && (op.attributes.list === true || op.attributes.bullet === true)) {
+      op = (0, _clone2.default)(op);
+      if (op.attributes.list) {
+        op.attributes.list = 'ordered';
+      } else {
+        op.attributes.list = 'bullet';
+        delete op.attributes.bullet;
+      }
+    }
+    if (typeof op.insert === 'string') {
+      var text = op.insert.replace(/\r\n/g, '\n').replace(/\r/g, '\n');
+      return delta.insert(text, op.attributes);
+    }
+    return delta.push(op);
+  }, new _quillDelta2.default());
+}
+
+exports.default = Editor;
+
+/***/ }),
+/* 15 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = exports.Range = undefined;
+
+var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+var _parchment = __webpack_require__(0);
+
+var _parchment2 = _interopRequireDefault(_parchment);
+
+var _clone = __webpack_require__(21);
+
+var _clone2 = _interopRequireDefault(_clone);
+
+var _deepEqual = __webpack_require__(11);
+
+var _deepEqual2 = _interopRequireDefault(_deepEqual);
+
+var _emitter3 = __webpack_require__(8);
+
+var _emitter4 = _interopRequireDefault(_emitter3);
+
+var _logger = __webpack_require__(10);
+
+var _logger2 = _interopRequireDefault(_logger);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+var debug = (0, _logger2.default)('quill:selection');
+
+var Range = function Range(index) {
+  var length = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
+
+  _classCallCheck(this, Range);
+
+  this.index = index;
+  this.length = length;
+};
+
+var Selection = function () {
+  function Selection(scroll, emitter) {
+    var _this = this;
+
+    _classCallCheck(this, Selection);
+
+    this.emitter = emitter;
+    this.scroll = scroll;
+    this.composing = false;
+    this.mouseDown = false;
+    this.root = this.scroll.domNode;
+    this.cursor = _parchment2.default.create('cursor', this);
+    // savedRange is last non-null range
+    this.lastRange = this.savedRange = new Range(0, 0);
+    this.handleComposition();
+    this.handleDragging();
+    this.emitter.listenDOM('selectionchange', document, function () {
+      if (!_this.mouseDown) {
+        setTimeout(_this.update.bind(_this, _emitter4.default.sources.USER), 1);
+      }
+    });
+    this.emitter.on(_emitter4.default.events.EDITOR_CHANGE, function (type, delta) {
+      if (type === _emitter4.default.events.TEXT_CHANGE && delta.length() > 0) {
+        _this.update(_emitter4.default.sources.SILENT);
+      }
+    });
+    this.emitter.on(_emitter4.default.events.SCROLL_BEFORE_UPDATE, function () {
+      if (!_this.hasFocus()) return;
+      var native = _this.getNativeRange();
+      if (native == null) return;
+      if (native.start.node === _this.cursor.textNode) return; // cursor.restore() will handle
+      // TODO unclear if this has negative side effects
+      _this.emitter.once(_emitter4.default.events.SCROLL_UPDATE, function () {
+        try {
+          _this.setNativeRange(native.start.node, native.start.offset, native.end.node, native.end.offset);
+        } catch (ignored) {}
+      });
+    });
+    this.emitter.on(_emitter4.default.events.SCROLL_OPTIMIZE, function (mutations, context) {
+      if (context.range) {
+        var _context$range = context.range,
+            startNode = _context$range.startNode,
+            startOffset = _context$range.startOffset,
+            endNode = _context$range.endNode,
+            endOffset = _context$range.endOffset;
+
+        _this.setNativeRange(startNode, startOffset, endNode, endOffset);
+      }
+    });
+    this.update(_emitter4.default.sources.SILENT);
+  }
+
+  _createClass(Selection, [{
+    key: 'handleComposition',
+    value: function handleComposition() {
+      var _this2 = this;
+
+      this.root.addEventListener('compositionstart', function () {
+        _this2.composing = true;
+      });
+      this.root.addEventListener('compositionend', function () {
+        _this2.composing = false;
+        if (_this2.cursor.parent) {
+          var range = _this2.cursor.restore();
+          if (!range) return;
+          setTimeout(function () {
+            _this2.setNativeRange(range.startNode, range.startOffset, range.endNode, range.endOffset);
+          }, 1);
+        }
+      });
+    }
+  }, {
+    key: 'handleDragging',
+    value: function handleDragging() {
+      var _this3 = this;
+
+      this.emitter.listenDOM('mousedown', document.body, function () {
+        _this3.mouseDown = true;
+      });
+      this.emitter.listenDOM('mouseup', document.body, function () {
+        _this3.mouseDown = false;
+        _this3.update(_emitter4.default.sources.USER);
+      });
+    }
+  }, {
+    key: 'focus',
+    value: function focus() {
+      if (this.hasFocus()) return;
+      this.root.focus();
+      this.setRange(this.savedRange);
+    }
+  }, {
+    key: 'format',
+    value: function format(_format, value) {
+      if (this.scroll.whitelist != null && !this.scroll.whitelist[_format]) return;
+      this.scroll.update();
+      var nativeRange = this.getNativeRange();
+      if (nativeRange == null || !nativeRange.native.collapsed || _parchment2.default.query(_format, _parchment2.default.Scope.BLOCK)) return;
+      if (nativeRange.start.node !== this.cursor.textNode) {
+        var blot = _parchment2.default.find(nativeRange.start.node, false);
+        if (blot == null) return;
+        // TODO Give blot ability to not split
+        if (blot instanceof _parchment2.default.Leaf) {
+          var after = blot.split(nativeRange.start.offset);
+          blot.parent.insertBefore(this.cursor, after);
+        } else {
+          blot.insertBefore(this.cursor, nativeRange.start.node); // Should never happen
+        }
+        this.cursor.attach();
+      }
+      this.cursor.format(_format, value);
+      this.scroll.optimize();
+      this.setNativeRange(this.cursor.textNode, this.cursor.textNode.data.length);
+      this.update();
+    }
+  }, {
+    key: 'getBounds',
+    value: function getBounds(index) {
+      var length = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
+
+      var scrollLength = this.scroll.length();
+      index = Math.min(index, scrollLength - 1);
+      length = Math.min(index + length, scrollLength - 1) - index;
+      var node = void 0,
+          _scroll$leaf = this.scroll.leaf(index),
+          _scroll$leaf2 = _slicedToArray(_scroll$leaf, 2),
+          leaf = _scroll$leaf2[0],
+          offset = _scroll$leaf2[1];
+      if (leaf == null) return null;
+
+      var _leaf$position = leaf.position(offset, true);
+
+      var _leaf$position2 = _slicedToArray(_leaf$position, 2);
+
+      node = _leaf$position2[0];
+      offset = _leaf$position2[1];
+
+      var range = document.createRange();
+      if (length > 0) {
+        range.setStart(node, offset);
+
+        var _scroll$leaf3 = this.scroll.leaf(index + length);
+
+        var _scroll$leaf4 = _slicedToArray(_scroll$leaf3, 2);
+
+        leaf = _scroll$leaf4[0];
+        offset = _scroll$leaf4[1];
+
+        if (leaf == null) return null;
+
+        var _leaf$position3 = leaf.position(offset, true);
+
+        var _leaf$position4 = _slicedToArray(_leaf$position3, 2);
+
+        node = _leaf$position4[0];
+        offset = _leaf$position4[1];
+
+        range.setEnd(node, offset);
+        return range.getBoundingClientRect();
+      } else {
+        var side = 'left';
+        var rect = void 0;
+        if (node instanceof Text) {
+          if (offset < node.data.length) {
+            range.setStart(node, offset);
+            range.setEnd(node, offset + 1);
+          } else {
+            range.setStart(node, offset - 1);
+            range.setEnd(node, offset);
+            side = 'right';
+          }
+          rect = range.getBoundingClientRect();
+        } else {
+          rect = leaf.domNode.getBoundingClientRect();
+          if (offset > 0) side = 'right';
+        }
+        return {
+          bottom: rect.top + rect.height,
+          height: rect.height,
+          left: rect[side],
+          right: rect[side],
+          top: rect.top,
+          width: 0
+        };
+      }
+    }
+  }, {
+    key: 'getNativeRange',
+    value: function getNativeRange() {
+      var selection = document.getSelection();
+      if (selection == null || selection.rangeCount <= 0) return null;
+      var nativeRange = selection.getRangeAt(0);
+      if (nativeRange == null) return null;
+      var range = this.normalizeNative(nativeRange);
+      debug.info('getNativeRange', range);
+      return range;
+    }
+  }, {
+    key: 'getRange',
+    value: function getRange() {
+      var normalized = this.getNativeRange();
+      if (normalized == null) return [null, null];
+      var range = this.normalizedToRange(normalized);
+      return [range, normalized];
+    }
+  }, {
+    key: 'hasFocus',
+    value: function hasFocus() {
+      return document.activeElement === this.root;
+    }
+  }, {
+    key: 'normalizedToRange',
+    value: function normalizedToRange(range) {
+      var _this4 = this;
+
+      var positions = [[range.start.node, range.start.offset]];
+      if (!range.native.collapsed) {
+        positions.push([range.end.node, range.end.offset]);
+      }
+      var indexes = positions.map(function (position) {
+        var _position = _slicedToArray(position, 2),
+            node = _position[0],
+            offset = _position[1];
+
+        var blot = _parchment2.default.find(node, true);
+        var index = blot.offset(_this4.scroll);
+        if (offset === 0) {
+          return index;
+        } else if (blot instanceof _parchment2.default.Container) {
+          return index + blot.length();
+        } else {
+          return index + blot.index(node, offset);
+        }
+      });
+      var end = Math.min(Math.max.apply(Math, _toConsumableArray(indexes)), this.scroll.length() - 1);
+      var start = Math.min.apply(Math, [end].concat(_toConsumableArray(indexes)));
+      return new Range(start, end - start);
+    }
+  }, {
+    key: 'normalizeNative',
+    value: function normalizeNative(nativeRange) {
+      if (!contains(this.root, nativeRange.startContainer) || !nativeRange.collapsed && !contains(this.root, nativeRange.endContainer)) {
+        return null;
+      }
+      var range = {
+        start: { node: nativeRange.startContainer, offset: nativeRange.startOffset },
+        end: { node: nativeRange.endContainer, offset: nativeRange.endOffset },
+        native: nativeRange
+      };
+      [range.start, range.end].forEach(function (position) {
+        var node = position.node,
+            offset = position.offset;
+        while (!(node instanceof Text) && node.childNodes.length > 0) {
+          if (node.childNodes.length > offset) {
+            node = node.childNodes[offset];
+            offset = 0;
+          } else if (node.childNodes.length === offset) {
+            node = node.lastChild;
+            offset = node instanceof Text ? node.data.length : node.childNodes.length + 1;
+          } else {
+            break;
+          }
+        }
+        position.node = node, position.offset = offset;
+      });
+      return range;
+    }
+  }, {
+    key: 'rangeToNative',
+    value: function rangeToNative(range) {
+      var _this5 = this;
+
+      var indexes = range.collapsed ? [range.index] : [range.index, range.index + range.length];
+      var args = [];
+      var scrollLength = this.scroll.length();
+      indexes.forEach(function (index, i) {
+        index = Math.min(scrollLength - 1, index);
+        var node = void 0,
+            _scroll$leaf5 = _this5.scroll.leaf(index),
+            _scroll$leaf6 = _slicedToArray(_scroll$leaf5, 2),
+            leaf = _scroll$leaf6[0],
+            offset = _scroll$leaf6[1];
+        var _leaf$position5 = leaf.position(offset, i !== 0);
+
+        var _leaf$position6 = _slicedToArray(_leaf$position5, 2);
+
+        node = _leaf$position6[0];
+        offset = _leaf$position6[1];
+
+        args.push(node, offset);
+      });
+      if (args.length < 2) {
+        args = args.concat(args);
+      }
+      return args;
+    }
+  }, {
+    key: 'scrollIntoView',
+    value: function scrollIntoView(scrollingContainer) {
+      var range = this.lastRange;
+      if (range == null) return;
+      var bounds = this.getBounds(range.index, range.length);
+      if (bounds == null) return;
+      var limit = this.scroll.length() - 1;
+
+      var _scroll$line = this.scroll.line(Math.min(range.index, limit)),
+          _scroll$line2 = _slicedToArray(_scroll$line, 1),
+          first = _scroll$line2[0];
+
+      var last = first;
+      if (range.length > 0) {
+        var _scroll$line3 = this.scroll.line(Math.min(range.index + range.length, limit));
+
+        var _scroll$line4 = _slicedToArray(_scroll$line3, 1);
+
+        last = _scroll$line4[0];
+      }
+      if (first == null || last == null) return;
+      var scrollBounds = scrollingContainer.getBoundingClientRect();
+      if (bounds.top < scrollBounds.top) {
+        scrollingContainer.scrollTop -= scrollBounds.top - bounds.top;
+      } else if (bounds.bottom > scrollBounds.bottom) {
+        scrollingContainer.scrollTop += bounds.bottom - scrollBounds.bottom;
+      }
+    }
+  }, {
+    key: 'setNativeRange',
+    value: function setNativeRange(startNode, startOffset) {
+      var endNode = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : startNode;
+      var endOffset = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : startOffset;
+      var force = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;
+
+      debug.info('setNativeRange', startNode, startOffset, endNode, endOffset);
+      if (startNode != null && (this.root.parentNode == null || startNode.parentNode == null || endNode.parentNode == null)) {
+        return;
+      }
+      var selection = document.getSelection();
+      if (selection == null) return;
+      if (startNode != null) {
+        if (!this.hasFocus()) this.root.focus();
+        var native = (this.getNativeRange() || {}).native;
+        if (native == null || force || startNode !== native.startContainer || startOffset !== native.startOffset || endNode !== native.endContainer || endOffset !== native.endOffset) {
+
+          if (startNode.tagName == "BR") {
+            startOffset = [].indexOf.call(startNode.parentNode.childNodes, startNode);
+            startNode = startNode.parentNode;
+          }
+          if (endNode.tagName == "BR") {
+            endOffset = [].indexOf.call(endNode.parentNode.childNodes, endNode);
+            endNode = endNode.parentNode;
+          }
+          var range = document.createRange();
+          range.setStart(startNode, startOffset);
+          range.setEnd(endNode, endOffset);
+          selection.removeAllRanges();
+          selection.addRange(range);
+        }
+      } else {
+        selection.removeAllRanges();
+        this.root.blur();
+        document.body.focus(); // root.blur() not enough on IE11+Travis+SauceLabs (but not local VMs)
+      }
+    }
+  }, {
+    key: 'setRange',
+    value: function setRange(range) {
+      var force = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
+      var source = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : _emitter4.default.sources.API;
+
+      if (typeof force === 'string') {
+        source = force;
+        force = false;
+      }
+      debug.info('setRange', range);
+      if (range != null) {
+        var args = this.rangeToNative(range);
+        this.setNativeRange.apply(this, _toConsumableArray(args).concat([force]));
+      } else {
+        this.setNativeRange(null);
+      }
+      this.update(source);
+    }
+  }, {
+    key: 'update',
+    value: function update() {
+      var source = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _emitter4.default.sources.USER;
+
+      var oldRange = this.lastRange;
+
+      var _getRange = this.getRange(),
+          _getRange2 = _slicedToArray(_getRange, 2),
+          lastRange = _getRange2[0],
+          nativeRange = _getRange2[1];
+
+      this.lastRange = lastRange;
+      if (this.lastRange != null) {
+        this.savedRange = this.lastRange;
+      }
+      if (!(0, _deepEqual2.default)(oldRange, this.lastRange)) {
+        var _emitter;
+
+        if (!this.composing && nativeRange != null && nativeRange.native.collapsed && nativeRange.start.node !== this.cursor.textNode) {
+          this.cursor.restore();
+        }
+        var args = [_emitter4.default.events.SELECTION_CHANGE, (0, _clone2.default)(this.lastRange), (0, _clone2.default)(oldRange), source];
+        (_emitter = this.emitter).emit.apply(_emitter, [_emitter4.default.events.EDITOR_CHANGE].concat(args));
+        if (source !== _emitter4.default.sources.SILENT) {
+          var _emitter2;
+
+          (_emitter2 = this.emitter).emit.apply(_emitter2, args);
+        }
+      }
+    }
+  }]);
+
+  return Selection;
+}();
+
+function contains(parent, descendant) {
+  try {
+    // Firefox inserts inaccessible nodes around video elements
+    descendant.parentNode;
+  } catch (e) {
+    return false;
+  }
+  // IE11 has bug with Text nodes
+  // https://connect.microsoft.com/IE/feedback/details/780874/node-contains-is-incorrect
+  if (descendant instanceof Text) {
+    descendant = descendant.parentNode;
+  }
+  return parent.contains(descendant);
+}
+
+exports.Range = Range;
+exports.default = Selection;
+
+/***/ }),
+/* 16 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };
+
+var _parchment = __webpack_require__(0);
+
+var _parchment2 = _interopRequireDefault(_parchment);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+var Break = function (_Parchment$Embed) {
+  _inherits(Break, _Parchment$Embed);
+
+  function Break() {
+    _classCallCheck(this, Break);
+
+    return _possibleConstructorReturn(this, (Break.__proto__ || Object.getPrototypeOf(Break)).apply(this, arguments));
+  }
+
+  _createClass(Break, [{
+    key: 'insertInto',
+    value: function insertInto(parent, ref) {
+      if (parent.children.length === 0) {
+        _get(Break.prototype.__proto__ || Object.getPrototypeOf(Break.prototype), 'insertInto', this).call(this, parent, ref);
+      } else {
+        this.remove();
+      }
+    }
+  }, {
+    key: 'length',
+    value: function length() {
+      return 0;
+    }
+  }, {
+    key: 'value',
+    value: function value() {
+      return '';
+    }
+  }], [{
+    key: 'value',
+    value: function value() {
+      return undefined;
+    }
+  }]);
+
+  return Break;
+}(_parchment2.default.Embed);
+
+Break.blotName = 'break';
+Break.tagName = 'BR';
+
+exports.default = Break;
+
+/***/ }),
+/* 17 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+var __extends = (this && this.__extends) || (function () {
+    var extendStatics = Object.setPrototypeOf ||
+        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
+        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
+    return function (d, b) {
+        extendStatics(d, b);
+        function __() { this.constructor = d; }
+        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+    };
+})();
+Object.defineProperty(exports, "__esModule", { value: true });
+var linked_list_1 = __webpack_require__(44);
+var shadow_1 = __webpack_require__(30);
+var Registry = __webpack_require__(1);
+var ContainerBlot = /** @class */ (function (_super) {
+    __extends(ContainerBlot, _super);
+    function ContainerBlot(domNode) {
+        var _this = _super.call(this, domNode) || this;
+        _this.build();
+        return _this;
+    }
+    ContainerBlot.prototype.appendChild = function (other) {
+        this.insertBefore(other);
+    };
+    ContainerBlot.prototype.attach = function () {
+        _super.prototype.attach.call(this);
+        this.children.forEach(function (child) {
+            child.attach();
+        });
+    };
+    ContainerBlot.prototype.build = function () {
+        var _this = this;
+        this.children = new linked_list_1.default();
+        // Need to be reversed for if DOM nodes already in order
+        [].slice
+            .call(this.domNode.childNodes)
+            .reverse()
+            .forEach(function (node) {
+            try {
+                var child = makeBlot(node);
+                _this.insertBefore(child, _this.children.head || undefined);
+            }
+            catch (err) {
+                if (err instanceof Registry.ParchmentError)
+                    return;
+                else
+                    throw err;
+            }
+        });
+    };
+    ContainerBlot.prototype.deleteAt = function (index, length) {
+        if (index === 0 && length === this.length()) {
+            return this.remove();
+        }
+        this.children.forEachAt(index, length, function (child, offset, length) {
+            child.deleteAt(offset, length);
+        });
+    };
+    ContainerBlot.prototype.descendant = function (criteria, index) {
+        var _a = this.children.find(index), child = _a[0], offset = _a[1];
+        if ((criteria.blotName == null && criteria(child)) ||
+            (criteria.blotName != null && child instanceof criteria)) {
+            return [child, offset];
+        }
+        else if (child instanceof ContainerBlot) {
+            return child.descendant(criteria, offset);
+        }
+        else {
+            return [null, -1];
+        }
+    };
+    ContainerBlot.prototype.descendants = function (criteria, index, length) {
+        if (index === void 0) { index = 0; }
+        if (length === void 0) { length = Number.MAX_VALUE; }
+        var descendants = [];
+        var lengthLeft = length;
+        this.children.forEachAt(index, length, function (child, index, length) {
+            if ((criteria.blotName == null && criteria(child)) ||
+                (criteria.blotName != null && child instanceof criteria)) {
+                descendants.push(child);
+            }
+            if (child instanceof ContainerBlot) {
+                descendants = descendants.concat(child.descendants(criteria, index, lengthLeft));
+            }
+            lengthLeft -= length;
+        });
+        return descendants;
+    };
+    ContainerBlot.prototype.detach = function () {
+        this.children.forEach(function (child) {
+            child.detach();
+        });
+        _super.prototype.detach.call(this);
+    };
+    ContainerBlot.prototype.formatAt = function (index, length, name, value) {
+        this.children.forEachAt(index, length, function (child, offset, length) {
+            child.formatAt(offset, length, name, value);
+        });
+    };
+    ContainerBlot.prototype.insertAt = function (index, value, def) {
+        var _a = this.children.find(index), child = _a[0], offset = _a[1];
+        if (child) {
+            child.insertAt(offset, value, def);
+        }
+        else {
+            var blot = def == null ? Registry.create('text', value) : Registry.create(value, def);
+            this.appendChild(blot);
+        }
+    };
+    ContainerBlot.prototype.insertBefore = function (childBlot, refBlot) {
+        if (this.statics.allowedChildren != null &&
+            !this.statics.allowedChildren.some(function (child) {
+                return childBlot instanceof child;
+            })) {
+            throw new Registry.ParchmentError("Cannot insert " + childBlot.statics.blotName + " into " + this.statics.blotName);
+        }
+        childBlot.insertInto(this, refBlot);
+    };
+    ContainerBlot.prototype.length = function () {
+        return this.children.reduce(function (memo, child) {
+            return memo + child.length();
+        }, 0);
+    };
+    ContainerBlot.prototype.moveChildren = function (targetParent, refNode) {
+        this.children.forEach(function (child) {
+            targetParent.insertBefore(child, refNode);
+        });
+    };
+    ContainerBlot.prototype.optimize = function (context) {
+        _super.prototype.optimize.call(this, context);
+        if (this.children.length === 0) {
+            if (this.statics.defaultChild != null) {
+                var child = Registry.create(this.statics.defaultChild);
+                this.appendChild(child);
+                child.optimize(context);
+            }
+            else {
+                this.remove();
+            }
+        }
+    };
+    ContainerBlot.prototype.path = function (index, inclusive) {
+        if (inclusive === void 0) { inclusive = false; }
+        var _a = this.children.find(index, inclusive), child = _a[0], offset = _a[1];
+        var position = [[this, index]];
+        if (child instanceof ContainerBlot) {
+            return position.concat(child.path(offset, inclusive));
+        }
+        else if (child != null) {
+            position.push([child, offset]);
+        }
+        return position;
+    };
+    ContainerBlot.prototype.removeChild = function (child) {
+        this.children.remove(child);
+    };
+    ContainerBlot.prototype.replace = function (target) {
+        if (target instanceof ContainerBlot) {
+            target.moveChildren(this);
+        }
+        _super.prototype.replace.call(this, target);
+    };
+    ContainerBlot.prototype.split = function (index, force) {
+        if (force === void 0) { force = false; }
+        if (!force) {
+            if (index === 0)
+                return this;
+            if (index === this.length())
+                return this.next;
+        }
+        var after = this.clone();
+        this.parent.insertBefore(after, this.next);
+        this.children.forEachAt(index, this.length(), function (child, offset, length) {
+            child = child.split(offset, force);
+            after.appendChild(child);
+        });
+        return after;
+    };
+    ContainerBlot.prototype.unwrap = function () {
+        this.moveChildren(this.parent, this.next);
+        this.remove();
+    };
+    ContainerBlot.prototype.update = function (mutations, context) {
+        var _this = this;
+        var addedNodes = [];
+        var removedNodes = [];
+        mutations.forEach(function (mutation) {
+            if (mutation.target === _this.domNode && mutation.type === 'childList') {
+                addedNodes.push.apply(addedNodes, mutation.addedNodes);
+                removedNodes.push.apply(removedNodes, mutation.removedNodes);
+            }
+        });
+        removedNodes.forEach(function (node) {
+            // Check node has actually been removed
+            // One exception is Chrome does not immediately remove IFRAMEs
+            // from DOM but MutationRecord is correct in its reported removal
+            if (node.parentNode != null &&
+                // @ts-ignore
+                node.tagName !== 'IFRAME' &&
+                document.body.compareDocumentPosition(node) & Node.DOCUMENT_POSITION_CONTAINED_BY) {
+                return;
+            }
+            var blot = Registry.find(node);
+            if (blot == null)
+                return;
+            if (blot.domNode.parentNode == null || blot.domNode.parentNode === _this.domNode) {
+                blot.detach();
+            }
+        });
+        addedNodes
+            .filter(function (node) {
+            return node.parentNode == _this.domNode;
+        })
+            .sort(function (a, b) {
+            if (a === b)
+                return 0;
+            if (a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_FOLLOWING) {
+                return 1;
+            }
+            return -1;
+        })
+            .forEach(function (node) {
+            var refBlot = null;
+            if (node.nextSibling != null) {
+                refBlot = Registry.find(node.nextSibling);
+            }
+            var blot = makeBlot(node);
+            if (blot.next != refBlot || blot.next == null) {
+                if (blot.parent != null) {
+                    blot.parent.removeChild(_this);
+                }
+                _this.insertBefore(blot, refBlot || undefined);
+            }
+        });
+    };
+    return ContainerBlot;
+}(shadow_1.default));
+function makeBlot(node) {
+    var blot = Registry.find(node);
+    if (blot == null) {
+        try {
+            blot = Registry.create(node);
+        }
+        catch (e) {
+            blot = Registry.create(Registry.Scope.INLINE);
+            [].slice.call(node.childNodes).forEach(function (child) {
+                // @ts-ignore
+                blot.domNode.appendChild(child);
+            });
+            if (node.parentNode) {
+                node.parentNode.replaceChild(blot.domNode, node);
+            }
+            blot.attach();
+        }
+    }
+    return blot;
+}
+exports.default = ContainerBlot;
+
+
+/***/ }),
+/* 18 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+var __extends = (this && this.__extends) || (function () {
+    var extendStatics = Object.setPrototypeOf ||
+        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
+        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
+    return function (d, b) {
+        extendStatics(d, b);
+        function __() { this.constructor = d; }
+        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+    };
+})();
+Object.defineProperty(exports, "__esModule", { value: true });
+var attributor_1 = __webpack_require__(12);
+var store_1 = __webpack_require__(31);
+var container_1 = __webpack_require__(17);
+var Registry = __webpack_require__(1);
+var FormatBlot = /** @class */ (function (_super) {
+    __extends(FormatBlot, _super);
+    function FormatBlot(domNode) {
+        var _this = _super.call(this, domNode) || this;
+        _this.attributes = new store_1.default(_this.domNode);
+        return _this;
+    }
+    FormatBlot.formats = function (domNode) {
+        if (typeof this.tagName === 'string') {
+            return true;
+        }
+        else if (Array.isArray(this.tagName)) {
+            return domNode.tagName.toLowerCase();
+        }
+        return undefined;
+    };
+    FormatBlot.prototype.format = function (name, value) {
+        var format = Registry.query(name);
+        if (format instanceof attributor_1.default) {
+            this.attributes.attribute(format, value);
+        }
+        else if (value) {
+            if (format != null && (name !== this.statics.blotName || this.formats()[name] !== value)) {
+                this.replaceWith(name, value);
+            }
+        }
+    };
+    FormatBlot.prototype.formats = function () {
+        var formats = this.attributes.values();
+        var format = this.statics.formats(this.domNode);
+        if (format != null) {
+            formats[this.statics.blotName] = format;
+        }
+        return formats;
+    };
+    FormatBlot.prototype.replaceWith = function (name, value) {
+        var replacement = _super.prototype.replaceWith.call(this, name, value);
+        this.attributes.copy(replacement);
+        return replacement;
+    };
+    FormatBlot.prototype.update = function (mutations, context) {
+        var _this = this;
+        _super.prototype.update.call(this, mutations, context);
+        if (mutations.some(function (mutation) {
+            return mutation.target === _this.domNode && mutation.type === 'attributes';
+        })) {
+            this.attributes.build();
+        }
+    };
+    FormatBlot.prototype.wrap = function (name, value) {
+        var wrapper = _super.prototype.wrap.call(this, name, value);
+        if (wrapper instanceof FormatBlot && wrapper.statics.scope === this.statics.scope) {
+            this.attributes.move(wrapper);
+        }
+        return wrapper;
+    };
+    return FormatBlot;
+}(container_1.default));
+exports.default = FormatBlot;
+
+
+/***/ }),
+/* 19 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+var __extends = (this && this.__extends) || (function () {
+    var extendStatics = Object.setPrototypeOf ||
+        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
+        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
+    return function (d, b) {
+        extendStatics(d, b);
+        function __() { this.constructor = d; }
+        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+    };
+})();
+Object.defineProperty(exports, "__esModule", { value: true });
+var shadow_1 = __webpack_require__(30);
+var Registry = __webpack_require__(1);
+var LeafBlot = /** @class */ (function (_super) {
+    __extends(LeafBlot, _super);
+    function LeafBlot() {
+        return _super !== null && _super.apply(this, arguments) || this;
+    }
+    LeafBlot.value = function (domNode) {
+        return true;
+    };
+    LeafBlot.prototype.index = function (node, offset) {
+        if (this.domNode === node ||
+            this.domNode.compareDocumentPosition(node) & Node.DOCUMENT_POSITION_CONTAINED_BY) {
+            return Math.min(offset, 1);
+        }
+        return -1;
+    };
+    LeafBlot.prototype.position = function (index, inclusive) {
+        var offset = [].indexOf.call(this.parent.domNode.childNodes, this.domNode);
+        if (index > 0)
+            offset += 1;
+        return [this.parent.domNode, offset];
+    };
+    LeafBlot.prototype.value = function () {
+        return _a = {}, _a[this.statics.blotName] = this.statics.value(this.domNode) || true, _a;
+        var _a;
+    };
+    LeafBlot.scope = Registry.Scope.INLINE_BLOT;
+    return LeafBlot;
+}(shadow_1.default));
+exports.default = LeafBlot;
+
+
+/***/ }),
+/* 20 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var equal = __webpack_require__(11);
+var extend = __webpack_require__(3);
+
+
+var lib = {
+  attributes: {
+    compose: function (a, b, keepNull) {
+      if (typeof a !== 'object') a = {};
+      if (typeof b !== 'object') b = {};
+      var attributes = extend(true, {}, b);
+      if (!keepNull) {
+        attributes = Object.keys(attributes).reduce(function (copy, key) {
+          if (attributes[key] != null) {
+            copy[key] = attributes[key];
+          }
+          return copy;
+        }, {});
+      }
+      for (var key in a) {
+        if (a[key] !== undefined && b[key] === undefined) {
+          attributes[key] = a[key];
+        }
+      }
+      return Object.keys(attributes).length > 0 ? attributes : undefined;
+    },
+
+    diff: function(a, b) {
+      if (typeof a !== 'object') a = {};
+      if (typeof b !== 'object') b = {};
+      var attributes = Object.keys(a).concat(Object.keys(b)).reduce(function (attributes, key) {
+        if (!equal(a[key], b[key])) {
+          attributes[key] = b[key] === undefined ? null : b[key];
+        }
+        return attributes;
+      }, {});
+      return Object.keys(attributes).length > 0 ? attributes : undefined;
+    },
+
+    transform: function (a, b, priority) {
+      if (typeof a !== 'object') return b;
+      if (typeof b !== 'object') return undefined;
+      if (!priority) return b;  // b simply overwrites us without priority
+      var attributes = Object.keys(b).reduce(function (attributes, key) {
+        if (a[key] === undefined) attributes[key] = b[key];  // null is a valid value
+        return attributes;
+      }, {});
+      return Object.keys(attributes).length > 0 ? attributes : undefined;
+    }
+  },
+
+  iterator: function (ops) {
+    return new Iterator(ops);
+  },
+
+  length: function (op) {
+    if (typeof op['delete'] === 'number') {
+      return op['delete'];
+    } else if (typeof op.retain === 'number') {
+      return op.retain;
+    } else {
+      return typeof op.insert === 'string' ? op.insert.length : 1;
+    }
+  }
+};
+
+
+function Iterator(ops) {
+  this.ops = ops;
+  this.index = 0;
+  this.offset = 0;
+};
+
+Iterator.prototype.hasNext = function () {
+  return this.peekLength() < Infinity;
+};
+
+Iterator.prototype.next = function (length) {
+  if (!length) length = Infinity;
+  var nextOp = this.ops[this.index];
+  if (nextOp) {
+    var offset = this.offset;
+    var opLength = lib.length(nextOp)
+    if (length >= opLength - offset) {
+      length = opLength - offset;
+      this.index += 1;
+      this.offset = 0;
+    } else {
+      this.offset += length;
+    }
+    if (typeof nextOp['delete'] === 'number') {
+      return { 'delete': length };
+    } else {
+      var retOp = {};
+      if (nextOp.attributes) {
+        retOp.attributes = nextOp.attributes;
+      }
+      if (typeof nextOp.retain === 'number') {
+        retOp.retain = length;
+      } else if (typeof nextOp.insert === 'string') {
+        retOp.insert = nextOp.insert.substr(offset, length);
+      } else {
+        // offset should === 0, length should === 1
+        retOp.insert = nextOp.insert;
+      }
+      return retOp;
+    }
+  } else {
+    return { retain: Infinity };
+  }
+};
+
+Iterator.prototype.peek = function () {
+  return this.ops[this.index];
+};
+
+Iterator.prototype.peekLength = function () {
+  if (this.ops[this.index]) {
+    // Should never return 0 if our index is being managed correctly
+    return lib.length(this.ops[this.index]) - this.offset;
+  } else {
+    return Infinity;
+  }
+};
+
+Iterator.prototype.peekType = function () {
+  if (this.ops[this.index]) {
+    if (typeof this.ops[this.index]['delete'] === 'number') {
+      return 'delete';
+    } else if (typeof this.ops[this.index].retain === 'number') {
+      return 'retain';
+    } else {
+      return 'insert';
+    }
+  }
+  return 'retain';
+};
+
+
+module.exports = lib;
+
+
+/***/ }),
+/* 21 */
+/***/ (function(module, exports) {
+
+var clone = (function() {
+'use strict';
+
+function _instanceof(obj, type) {
+  return type != null && obj instanceof type;
+}
+
+var nativeMap;
+try {
+  nativeMap = Map;
+} catch(_) {
+  // maybe a reference error because no `Map`. Give it a dummy value that no
+  // value will ever be an instanceof.
+  nativeMap = function() {};
+}
+
+var nativeSet;
+try {
+  nativeSet = Set;
+} catch(_) {
+  nativeSet = function() {};
+}
+
+var nativePromise;
+try {
+  nativePromise = Promise;
+} catch(_) {
+  nativePromise = function() {};
+}
+
+/**
+ * Clones (copies) an Object using deep copying.
+ *
+ * This function supports circular references by default, but if you are certain
+ * there are no circular references in your object, you can save some CPU time
+ * by calling clone(obj, false).
+ *
+ * Caution: if `circular` is false and `parent` contains circular references,
+ * your program may enter an infinite loop and crash.
+ *
+ * @param `parent` - the object to be cloned
+ * @param `circular` - set to true if the object to be cloned may contain
+ *    circular references. (optional - true by default)
+ * @param `depth` - set to a number if the object is only to be cloned to
+ *    a particular depth. (optional - defaults to Infinity)
+ * @param `prototype` - sets the prototype to be used when cloning an object.
+ *    (optional - defaults to parent prototype).
+ * @param `includeNonEnumerable` - set to true if the non-enumerable properties
+ *    should be cloned as well. Non-enumerable properties on the prototype
+ *    chain will be ignored. (optional - false by default)
+*/
+function clone(parent, circular, depth, prototype, includeNonEnumerable) {
+  if (typeof circular === 'object') {
+    depth = circular.depth;
+    prototype = circular.prototype;
+    includeNonEnumerable = circular.includeNonEnumerable;
+    circular = circular.circular;
+  }
+  // maintain two arrays for circular references, where corresponding parents
+  // and children have the same index
+  var allParents = [];
+  var allChildren = [];
+
+  var useBuffer = typeof Buffer != 'undefined';
+
+  if (typeof circular == 'undefined')
+    circular = true;
+
+  if (typeof depth == 'undefined')
+    depth = Infinity;
+
+  // recurse this function so we don't reset allParents and allChildren
+  function _clone(parent, depth) {
+    // cloning null always returns null
+    if (parent === null)
+      return null;
+
+    if (depth === 0)
+      return parent;
+
+    var child;
+    var proto;
+    if (typeof parent != 'object') {
+      return parent;
+    }
+
+    if (_instanceof(parent, nativeMap)) {
+      child = new nativeMap();
+    } else if (_instanceof(parent, nativeSet)) {
+      child = new nativeSet();
+    } else if (_instanceof(parent, nativePromise)) {
+      child = new nativePromise(function (resolve, reject) {
+        parent.then(function(value) {
+          resolve(_clone(value, depth - 1));
+        }, function(err) {
+          reject(_clone(err, depth - 1));
+        });
+      });
+    } else if (clone.__isArray(parent)) {
+      child = [];
+    } else if (clone.__isRegExp(parent)) {
+      child = new RegExp(parent.source, __getRegExpFlags(parent));
+      if (parent.lastIndex) child.lastIndex = parent.lastIndex;
+    } else if (clone.__isDate(parent)) {
+      child = new Date(parent.getTime());
+    } else if (useBuffer && Buffer.isBuffer(parent)) {
+      child = new Buffer(parent.length);
+      parent.copy(child);
+      return child;
+    } else if (_instanceof(parent, Error)) {
+      child = Object.create(parent);
+    } else {
+      if (typeof prototype == 'undefined') {
+        proto = Object.getPrototypeOf(parent);
+        child = Object.create(proto);
+      }
+      else {
+        child = Object.create(prototype);
+        proto = prototype;
+      }
+    }
+
+    if (circular) {
+      var index = allParents.indexOf(parent);
+
+      if (index != -1) {
+        return allChildren[index];
+      }
+      allParents.push(parent);
+      allChildren.push(child);
+    }
+
+    if (_instanceof(parent, nativeMap)) {
+      parent.forEach(function(value, key) {
+        var keyChild = _clone(key, depth - 1);
+        var valueChild = _clone(value, depth - 1);
+        child.set(keyChild, valueChild);
+      });
+    }
+    if (_instanceof(parent, nativeSet)) {
+      parent.forEach(function(value) {
+        var entryChild = _clone(value, depth - 1);
+        child.add(entryChild);
+      });
+    }
+
+    for (var i in parent) {
+      var attrs;
+      if (proto) {
+        attrs = Object.getOwnPropertyDescriptor(proto, i);
+      }
+
+      if (attrs && attrs.set == null) {
+        continue;
+      }
+      child[i] = _clone(parent[i], depth - 1);
+    }
+
+    if (Object.getOwnPropertySymbols) {
+      var symbols = Object.getOwnPropertySymbols(parent);
+      for (var i = 0; i < symbols.length; i++) {
+        // Don't need to worry about cloning a symbol because it is a primitive,
+        // like a number or string.
+        var symbol = symbols[i];
+        var descriptor = Object.getOwnPropertyDescriptor(parent, symbol);
+        if (descriptor && !descriptor.enumerable && !includeNonEnumerable) {
+          continue;
+        }
+        child[symbol] = _clone(parent[symbol], depth - 1);
+        if (!descriptor.enumerable) {
+          Object.defineProperty(child, symbol, {
+            enumerable: false
+          });
+        }
+      }
+    }
+
+    if (includeNonEnumerable) {
+      var allPropertyNames = Object.getOwnPropertyNames(parent);
+      for (var i = 0; i < allPropertyNames.length; i++) {
+        var propertyName = allPropertyNames[i];
+        var descriptor = Object.getOwnPropertyDescriptor(parent, propertyName);
+        if (descriptor && descriptor.enumerable) {
+          continue;
+        }
+        child[propertyName] = _clone(parent[propertyName], depth - 1);
+        Object.defineProperty(child, propertyName, {
+          enumerable: false
+        });
+      }
+    }
+
+    return child;
+  }
+
+  return _clone(parent, depth);
+}
+
+/**
+ * Simple flat clone using prototype, accepts only objects, usefull for property
+ * override on FLAT configuration object (no nested props).
+ *
+ * USE WITH CAUTION! This may not behave as you wish if you do not know how this
+ * works.
+ */
+clone.clonePrototype = function clonePrototype(parent) {
+  if (parent === null)
+    return null;
+
+  var c = function () {};
+  c.prototype = parent;
+  return new c();
+};
+
+// private utility functions
+
+function __objToStr(o) {
+  return Object.prototype.toString.call(o);
+}
+clone.__objToStr = __objToStr;
+
+function __isDate(o) {
+  return typeof o === 'object' && __objToStr(o) === '[object Date]';
+}
+clone.__isDate = __isDate;
+
+function __isArray(o) {
+  return typeof o === 'object' && __objToStr(o) === '[object Array]';
+}
+clone.__isArray = __isArray;
+
+function __isRegExp(o) {
+  return typeof o === 'object' && __objToStr(o) === '[object RegExp]';
+}
+clone.__isRegExp = __isRegExp;
+
+function __getRegExpFlags(re) {
+  var flags = '';
+  if (re.global) flags += 'g';
+  if (re.ignoreCase) flags += 'i';
+  if (re.multiline) flags += 'm';
+  return flags;
+}
+clone.__getRegExpFlags = __getRegExpFlags;
+
+return clone;
+})();
+
+if (typeof module === 'object' && module.exports) {
+  module.exports = clone;
+}
+
+
+/***/ }),
+/* 22 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };
+
+var _parchment = __webpack_require__(0);
+
+var _parchment2 = _interopRequireDefault(_parchment);
+
+var _emitter = __webpack_require__(8);
+
+var _emitter2 = _interopRequireDefault(_emitter);
+
+var _block = __webpack_require__(4);
+
+var _block2 = _interopRequireDefault(_block);
+
+var _break = __webpack_require__(16);
+
+var _break2 = _interopRequireDefault(_break);
+
+var _code = __webpack_require__(13);
+
+var _code2 = _interopRequireDefault(_code);
+
+var _container = __webpack_require__(25);
+
+var _container2 = _interopRequireDefault(_container);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+function isLine(blot) {
+  return blot instanceof _block2.default || blot instanceof _block.BlockEmbed;
+}
+
+var Scroll = function (_Parchment$Scroll) {
+  _inherits(Scroll, _Parchment$Scroll);
+
+  function Scroll(domNode, config) {
+    _classCallCheck(this, Scroll);
+
+    var _this = _possibleConstructorReturn(this, (Scroll.__proto__ || Object.getPrototypeOf(Scroll)).call(this, domNode));
+
+    _this.emitter = config.emitter;
+    if (Array.isArray(config.whitelist)) {
+      _this.whitelist = config.whitelist.reduce(function (whitelist, format) {
+        whitelist[format] = true;
+        return whitelist;
+      }, {});
+    }
+    // Some reason fixes composition issues with character languages in Windows/Chrome, Safari
+    _this.domNode.addEventListener('DOMNodeInserted', function () {});
+    _this.optimize();
+    _this.enable();
+    return _this;
+  }
+
+  _createClass(Scroll, [{
+    key: 'batchStart',
+    value: function batchStart() {
+      this.batch = true;
+    }
+  }, {
+    key: 'batchEnd',
+    value: function batchEnd() {
+      this.batch = false;
+      this.optimize();
+    }
+  }, {
+    key: 'deleteAt',
+    value: function deleteAt(index, length) {
+      var _line = this.line(index),
+          _line2 = _slicedToArray(_line, 2),
+          first = _line2[0],
+          offset = _line2[1];
+
+      var _line3 = this.line(index + length),
+          _line4 = _slicedToArray(_line3, 1),
+          last = _line4[0];
+
+      _get(Scroll.prototype.__proto__ || Object.getPrototypeOf(Scroll.prototype), 'deleteAt', this).call(this, index, length);
+      if (last != null && first !== last && offset > 0) {
+        if (first instanceof _block.BlockEmbed || last instanceof _block.BlockEmbed) {
+          this.optimize();
+          return;
+        }
+        if (first instanceof _code2.default) {
+          var newlineIndex = first.newlineIndex(first.length(), true);
+          if (newlineIndex > -1) {
+            first = first.split(newlineIndex + 1);
+            if (first === last) {
+              this.optimize();
+              return;
+            }
+          }
+        } else if (last instanceof _code2.default) {
+          var _newlineIndex = last.newlineIndex(0);
+          if (_newlineIndex > -1) {
+            last.split(_newlineIndex + 1);
+          }
+        }
+        var ref = last.children.head instanceof _break2.default ? null : last.children.head;
+        first.moveChildren(last, ref);
+        first.remove();
+      }
+      this.optimize();
+    }
+  }, {
+    key: 'enable',
+    value: function enable() {
+      var enabled = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
+
+      this.domNode.setAttribute('contenteditable', enabled);
+    }
+  }, {
+    key: 'formatAt',
+    value: function formatAt(index, length, format, value) {
+      if (this.whitelist != null && !this.whitelist[format]) return;
+      _get(Scroll.prototype.__proto__ || Object.getPrototypeOf(Scroll.prototype), 'formatAt', this).call(this, index, length, format, value);
+      this.optimize();
+    }
+  }, {
+    key: 'insertAt',
+    value: function insertAt(index, value, def) {
+      if (def != null && this.whitelist != null && !this.whitelist[value]) return;
+      if (index >= this.length()) {
+        if (def == null || _parchment2.default.query(value, _parchment2.default.Scope.BLOCK) == null) {
+          var blot = _parchment2.default.create(this.statics.defaultChild);
+          this.appendChild(blot);
+          if (def == null && value.endsWith('\n')) {
+            value = value.slice(0, -1);
+          }
+          blot.insertAt(0, value, def);
+        } else {
+          var embed = _parchment2.default.create(value, def);
+          this.appendChild(embed);
+        }
+      } else {
+        _get(Scroll.prototype.__proto__ || Object.getPrototypeOf(Scroll.prototype), 'insertAt', this).call(this, index, value, def);
+      }
+      this.optimize();
+    }
+  }, {
+    key: 'insertBefore',
+    value: function insertBefore(blot, ref) {
+      if (blot.statics.scope === _parchment2.default.Scope.INLINE_BLOT) {
+        var wrapper = _parchment2.default.create(this.statics.defaultChild);
+        wrapper.appendChild(blot);
+        blot = wrapper;
+      }
+      _get(Scroll.prototype.__proto__ || Object.getPrototypeOf(Scroll.prototype), 'insertBefore', this).call(this, blot, ref);
+    }
+  }, {
+    key: 'leaf',
+    value: function leaf(index) {
+      return this.path(index).pop() || [null, -1];
+    }
+  }, {
+    key: 'line',
+    value: function line(index) {
+      if (index === this.length()) {
+        return this.line(index - 1);
+      }
+      return this.descendant(isLine, index);
+    }
+  }, {
+    key: 'lines',
+    value: function lines() {
+      var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
+      var length = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : Number.MAX_VALUE;
+
+      var getLines = function getLines(blot, index, length) {
+        var lines = [],
+            lengthLeft = length;
+        blot.children.forEachAt(index, length, function (child, index, length) {
+          if (isLine(child)) {
+            lines.push(child);
+          } else if (child instanceof _parchment2.default.Container) {
+            lines = lines.concat(getLines(child, index, lengthLeft));
+          }
+          lengthLeft -= length;
+        });
+        return lines;
+      };
+      return getLines(this, index, length);
+    }
+  }, {
+    key: 'optimize',
+    value: function optimize() {
+      var mutations = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
+      var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
+
+      if (this.batch === true) return;
+      _get(Scroll.prototype.__proto__ || Object.getPrototypeOf(Scroll.prototype), 'optimize', this).call(this, mutations, context);
+      if (mutations.length > 0) {
+        this.emitter.emit(_emitter2.default.events.SCROLL_OPTIMIZE, mutations, context);
+      }
+    }
+  }, {
+    key: 'path',
+    value: function path(index) {
+      return _get(Scroll.prototype.__proto__ || Object.getPrototypeOf(Scroll.prototype), 'path', this).call(this, index).slice(1); // Exclude self
+    }
+  }, {
+    key: 'update',
+    value: function update(mutations) {
+      if (this.batch === true) return;
+      var source = _emitter2.default.sources.USER;
+      if (typeof mutations === 'string') {
+        source = mutations;
+      }
+      if (!Array.isArray(mutations)) {
+        mutations = this.observer.takeRecords();
+      }
+      if (mutations.length > 0) {
+        this.emitter.emit(_emitter2.default.events.SCROLL_BEFORE_UPDATE, source, mutations);
+      }
+      _get(Scroll.prototype.__proto__ || Object.getPrototypeOf(Scroll.prototype), 'update', this).call(this, mutations.concat([])); // pass copy
+      if (mutations.length > 0) {
+        this.emitter.emit(_emitter2.default.events.SCROLL_UPDATE, source, mutations);
+      }
+    }
+  }]);
+
+  return Scroll;
+}(_parchment2.default.Scroll);
+
+Scroll.blotName = 'scroll';
+Scroll.className = 'ql-editor';
+Scroll.tagName = 'DIV';
+Scroll.defaultChild = 'block';
+Scroll.allowedChildren = [_block2.default, _block.BlockEmbed, _container2.default];
+
+exports.default = Scroll;
+
+/***/ }),
+/* 23 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.SHORTKEY = exports.default = undefined;
+
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
+
+var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+var _clone = __webpack_require__(21);
+
+var _clone2 = _interopRequireDefault(_clone);
+
+var _deepEqual = __webpack_require__(11);
+
+var _deepEqual2 = _interopRequireDefault(_deepEqual);
+
+var _extend = __webpack_require__(3);
+
+var _extend2 = _interopRequireDefault(_extend);
+
+var _quillDelta = __webpack_require__(2);
+
+var _quillDelta2 = _interopRequireDefault(_quillDelta);
+
+var _op = __webpack_require__(20);
+
+var _op2 = _interopRequireDefault(_op);
+
+var _parchment = __webpack_require__(0);
+
+var _parchment2 = _interopRequireDefault(_parchment);
+
+var _quill = __webpack_require__(5);
+
+var _quill2 = _interopRequireDefault(_quill);
+
+var _logger = __webpack_require__(10);
+
+var _logger2 = _interopRequireDefault(_logger);
+
+var _module = __webpack_require__(9);
+
+var _module2 = _interopRequireDefault(_module);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+var debug = (0, _logger2.default)('quill:keyboard');
+
+var SHORTKEY = /Mac/i.test(navigator.platform) ? 'metaKey' : 'ctrlKey';
+
+var Keyboard = function (_Module) {
+  _inherits(Keyboard, _Module);
+
+  _createClass(Keyboard, null, [{
+    key: 'match',
+    value: function match(evt, binding) {
+      binding = normalize(binding);
+      if (['altKey', 'ctrlKey', 'metaKey', 'shiftKey'].some(function (key) {
+        return !!binding[key] !== evt[key] && binding[key] !== null;
+      })) {
+        return false;
+      }
+      return binding.key === (evt.which || evt.keyCode);
+    }
+  }]);
+
+  function Keyboard(quill, options) {
+    _classCallCheck(this, Keyboard);
+
+    var _this = _possibleConstructorReturn(this, (Keyboard.__proto__ || Object.getPrototypeOf(Keyboard)).call(this, quill, options));
+
+    _this.bindings = {};
+    Object.keys(_this.options.bindings).forEach(function (name) {
+      if (name === 'list autofill' && quill.scroll.whitelist != null && !quill.scroll.whitelist['list']) {
+        return;
+      }
+      if (_this.options.bindings[name]) {
+        _this.addBinding(_this.options.bindings[name]);
+      }
+    });
+    _this.addBinding({ key: Keyboard.keys.ENTER, shiftKey: null }, handleEnter);
+    _this.addBinding({ key: Keyboard.keys.ENTER, metaKey: null, ctrlKey: null, altKey: null }, function () {});
+    if (/Firefox/i.test(navigator.userAgent)) {
+      // Need to handle delete and backspace for Firefox in the general case #1171
+      _this.addBinding({ key: Keyboard.keys.BACKSPACE }, { collapsed: true }, handleBackspace);
+      _this.addBinding({ key: Keyboard.keys.DELETE }, { collapsed: true }, handleDelete);
+    } else {
+      _this.addBinding({ key: Keyboard.keys.BACKSPACE }, { collapsed: true, prefix: /^.?$/ }, handleBackspace);
+      _this.addBinding({ key: Keyboard.keys.DELETE }, { collapsed: true, suffix: /^.?$/ }, handleDelete);
+    }
+    _this.addBinding({ key: Keyboard.keys.BACKSPACE }, { collapsed: false }, handleDeleteRange);
+    _this.addBinding({ key: Keyboard.keys.DELETE }, { collapsed: false }, handleDeleteRange);
+    _this.addBinding({ key: Keyboard.keys.BACKSPACE, altKey: null, ctrlKey: null, metaKey: null, shiftKey: null }, { collapsed: true, offset: 0 }, handleBackspace);
+    _this.listen();
+    return _this;
+  }
+
+  _createClass(Keyboard, [{
+    key: 'addBinding',
+    value: function addBinding(key) {
+      var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
+      var handler = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
+
+      var binding = normalize(key);
+      if (binding == null || binding.key == null) {
+        return debug.warn('Attempted to add invalid keyboard binding', binding);
+      }
+      if (typeof context === 'function') {
+        context = { handler: context };
+      }
+      if (typeof handler === 'function') {
+        handler = { handler: handler };
+      }
+      binding = (0, _extend2.default)(binding, context, handler);
+      this.bindings[binding.key] = this.bindings[binding.key] || [];
+      this.bindings[binding.key].push(binding);
+    }
+  }, {
+    key: 'listen',
+    value: function listen() {
+      var _this2 = this;
+
+      this.quill.root.addEventListener('keydown', function (evt) {
+        if (evt.defaultPrevented) return;
+        var which = evt.which || evt.keyCode;
+        var bindings = (_this2.bindings[which] || []).filter(function (binding) {
+          return Keyboard.match(evt, binding);
+        });
+        if (bindings.length === 0) return;
+        var range = _this2.quill.getSelection();
+        if (range == null || !_this2.quill.hasFocus()) return;
+
+        var _quill$getLine = _this2.quill.getLine(range.index),
+            _quill$getLine2 = _slicedToArray(_quill$getLine, 2),
+            line = _quill$getLine2[0],
+            offset = _quill$getLine2[1];
+
+        var _quill$getLeaf = _this2.quill.getLeaf(range.index),
+            _quill$getLeaf2 = _slicedToArray(_quill$getLeaf, 2),
+            leafStart = _quill$getLeaf2[0],
+            offsetStart = _quill$getLeaf2[1];
+
+        var _ref = range.length === 0 ? [leafStart, offsetStart] : _this2.quill.getLeaf(range.index + range.length),
+            _ref2 = _slicedToArray(_ref, 2),
+            leafEnd = _ref2[0],
+            offsetEnd = _ref2[1];
+
+        var prefixText = leafStart instanceof _parchment2.default.Text ? leafStart.value().slice(0, offsetStart) : '';
+        var suffixText = leafEnd instanceof _parchment2.default.Text ? leafEnd.value().slice(offsetEnd) : '';
+        var curContext = {
+          collapsed: range.length === 0,
+          empty: range.length === 0 && line.length() <= 1,
+          format: _this2.quill.getFormat(range),
+          offset: offset,
+          prefix: prefixText,
+          suffix: suffixText
+        };
+        var prevented = bindings.some(function (binding) {
+          if (binding.collapsed != null && binding.collapsed !== curContext.collapsed) return false;
+          if (binding.empty != null && binding.empty !== curContext.empty) return false;
+          if (binding.offset != null && binding.offset !== curContext.offset) return false;
+          if (Array.isArray(binding.format)) {
+            // any format is present
+            if (binding.format.every(function (name) {
+              return curContext.format[name] == null;
+            })) {
+              return false;
+            }
+          } else if (_typeof(binding.format) === 'object') {
+            // all formats must match
+            if (!Object.keys(binding.format).every(function (name) {
+              if (binding.format[name] === true) return curContext.format[name] != null;
+              if (binding.format[name] === false) return curContext.format[name] == null;
+              return (0, _deepEqual2.default)(binding.format[name], curContext.format[name]);
+            })) {
+              return false;
+            }
+          }
+          if (binding.prefix != null && !binding.prefix.test(curContext.prefix)) return false;
+          if (binding.suffix != null && !binding.suffix.test(curContext.suffix)) return false;
+          return binding.handler.call(_this2, range, curContext) !== true;
+        });
+        if (prevented) {
+          evt.preventDefault();
+        }
+      });
+    }
+  }]);
+
+  return Keyboard;
+}(_module2.default);
+
+Keyboard.keys = {
+  BACKSPACE: 8,
+  TAB: 9,
+  ENTER: 13,
+  ESCAPE: 27,
+  LEFT: 37,
+  UP: 38,
+  RIGHT: 39,
+  DOWN: 40,
+  DELETE: 46
+};
+
+Keyboard.DEFAULTS = {
+  bindings: {
+    'bold': makeFormatHandler('bold'),
+    'italic': makeFormatHandler('italic'),
+    'underline': makeFormatHandler('underline'),
+    'indent': {
+      // highlight tab or tab at beginning of list, indent or blockquote
+      key: Keyboard.keys.TAB,
+      format: ['blockquote', 'indent', 'list'],
+      handler: function handler(range, context) {
+        if (context.collapsed && context.offset !== 0) return true;
+        this.quill.format('indent', '+1', _quill2.default.sources.USER);
+      }
+    },
+    'outdent': {
+      key: Keyboard.keys.TAB,
+      shiftKey: true,
+      format: ['blockquote', 'indent', 'list'],
+      // highlight tab or tab at beginning of list, indent or blockquote
+      handler: function handler(range, context) {
+        if (context.collapsed && context.offset !== 0) return true;
+        this.quill.format('indent', '-1', _quill2.default.sources.USER);
+      }
+    },
+    'outdent backspace': {
+      key: Keyboard.keys.BACKSPACE,
+      collapsed: true,
+      shiftKey: null,
+      metaKey: null,
+      ctrlKey: null,
+      altKey: null,
+      format: ['indent', 'list'],
+      offset: 0,
+      handler: function handler(range, context) {
+        if (context.format.indent != null) {
+          this.quill.format('indent', '-1', _quill2.default.sources.USER);
+        } else if (context.format.list != null) {
+          this.quill.format('list', false, _quill2.default.sources.USER);
+        }
+      }
+    },
+    'indent code-block': makeCodeBlockHandler(true),
+    'outdent code-block': makeCodeBlockHandler(false),
+    'remove tab': {
+      key: Keyboard.keys.TAB,
+      shiftKey: true,
+      collapsed: true,
+      prefix: /\t$/,
+      handler: function handler(range) {
+        this.quill.deleteText(range.index - 1, 1, _quill2.default.sources.USER);
+      }
+    },
+    'tab': {
+      key: Keyboard.keys.TAB,
+      handler: function handler(range) {
+        this.quill.history.cutoff();
+        var delta = new _quillDelta2.default().retain(range.index).delete(range.length).insert('\t');
+        this.quill.updateContents(delta, _quill2.default.sources.USER);
+        this.quill.history.cutoff();
+        this.quill.setSelection(range.index + 1, _quill2.default.sources.SILENT);
+      }
+    },
+    'list empty enter': {
+      key: Keyboard.keys.ENTER,
+      collapsed: true,
+      format: ['list'],
+      empty: true,
+      handler: function handler(range, context) {
+        this.quill.format('list', false, _quill2.default.sources.USER);
+        if (context.format.indent) {
+          this.quill.format('indent', false, _quill2.default.sources.USER);
+        }
+      }
+    },
+    'checklist enter': {
+      key: Keyboard.keys.ENTER,
+      collapsed: true,
+      format: { list: 'checked' },
+      handler: function handler(range) {
+        var _quill$getLine3 = this.quill.getLine(range.index),
+            _quill$getLine4 = _slicedToArray(_quill$getLine3, 2),
+            line = _quill$getLine4[0],
+            offset = _quill$getLine4[1];
+
+        var formats = (0, _extend2.default)({}, line.formats(), { list: 'checked' });
+        var delta = new _quillDelta2.default().retain(range.index).insert('\n', formats).retain(line.length() - offset - 1).retain(1, { list: 'unchecked' });
+        this.quill.updateContents(delta, _quill2.default.sources.USER);
+        this.quill.setSelection(range.index + 1, _quill2.default.sources.SILENT);
+        this.quill.scrollIntoView();
+      }
+    },
+    'header enter': {
+      key: Keyboard.keys.ENTER,
+      collapsed: true,
+      format: ['header'],
+      suffix: /^$/,
+      handler: function handler(range, context) {
+        var _quill$getLine5 = this.quill.getLine(range.index),
+            _quill$getLine6 = _slicedToArray(_quill$getLine5, 2),
+            line = _quill$getLine6[0],
+            offset = _quill$getLine6[1];
+
+        var delta = new _quillDelta2.default().retain(range.index).insert('\n', context.format).retain(line.length() - offset - 1).retain(1, { header: null });
+        this.quill.updateContents(delta, _quill2.default.sources.USER);
+        this.quill.setSelection(range.index + 1, _quill2.default.sources.SILENT);
+        this.quill.scrollIntoView();
+      }
+    },
+    'list autofill': {
+      key: ' ',
+      collapsed: true,
+      format: { list: false },
+      prefix: /^\s*?(\d+\.|-|\*|\[ ?\]|\[x\])$/,
+      handler: function handler(range, context) {
+        var length = context.prefix.length;
+
+        var _quill$getLine7 = this.quill.getLine(range.index),
+            _quill$getLine8 = _slicedToArray(_quill$getLine7, 2),
+            line = _quill$getLine8[0],
+            offset = _quill$getLine8[1];
+
+        if (offset > length) return true;
+        var value = void 0;
+        switch (context.prefix.trim()) {
+          case '[]':case '[ ]':
+            value = 'unchecked';
+            break;
+          case '[x]':
+            value = 'checked';
+            break;
+          case '-':case '*':
+            value = 'bullet';
+            break;
+          default:
+            value = 'ordered';
+        }
+        this.quill.insertText(range.index, ' ', _quill2.default.sources.USER);
+        this.quill.history.cutoff();
+        var delta = new _quillDelta2.default().retain(range.index - offset).delete(length + 1).retain(line.length() - 2 - offset).retain(1, { list: value });
+        this.quill.updateContents(delta, _quill2.default.sources.USER);
+        this.quill.history.cutoff();
+        this.quill.setSelection(range.index - length, _quill2.default.sources.SILENT);
+      }
+    },
+    'code exit': {
+      key: Keyboard.keys.ENTER,
+      collapsed: true,
+      format: ['code-block'],
+      prefix: /\n\n$/,
+      suffix: /^\s+$/,
+      handler: function handler(range) {
+        var _quill$getLine9 = this.quill.getLine(range.index),
+            _quill$getLine10 = _slicedToArray(_quill$getLine9, 2),
+            line = _quill$getLine10[0],
+            offset = _quill$getLine10[1];
+
+        var delta = new _quillDelta2.default().retain(range.index + line.length() - offset - 2).retain(1, { 'code-block': null }).delete(1);
+        this.quill.updateContents(delta, _quill2.default.sources.USER);
+      }
+    },
+    'embed left': makeEmbedArrowHandler(Keyboard.keys.LEFT, false),
+    'embed left shift': makeEmbedArrowHandler(Keyboard.keys.LEFT, true),
+    'embed right': makeEmbedArrowHandler(Keyboard.keys.RIGHT, false),
+    'embed right shift': makeEmbedArrowHandler(Keyboard.keys.RIGHT, true)
+  }
+};
+
+function makeEmbedArrowHandler(key, shiftKey) {
+  var _ref3;
+
+  var where = key === Keyboard.keys.LEFT ? 'prefix' : 'suffix';
+  return _ref3 = {
+    key: key,
+    shiftKey: shiftKey,
+    altKey: null
+  }, _defineProperty(_ref3, where, /^$/), _defineProperty(_ref3, 'handler', function handler(range) {
+    var index = range.index;
+    if (key === Keyboard.keys.RIGHT) {
+      index += range.length + 1;
+    }
+
+    var _quill$getLeaf3 = this.quill.getLeaf(index),
+        _quill$getLeaf4 = _slicedToArray(_quill$getLeaf3, 1),
+        leaf = _quill$getLeaf4[0];
+
+    if (!(leaf instanceof _parchment2.default.Embed)) return true;
+    if (key === Keyboard.keys.LEFT) {
+      if (shiftKey) {
+        this.quill.setSelection(range.index - 1, range.length + 1, _quill2.default.sources.USER);
+      } else {
+        this.quill.setSelection(range.index - 1, _quill2.default.sources.USER);
+      }
+    } else {
+      if (shiftKey) {
+        this.quill.setSelection(range.index, range.length + 1, _quill2.default.sources.USER);
+      } else {
+        this.quill.setSelection(range.index + range.length + 1, _quill2.default.sources.USER);
+      }
+    }
+    return false;
+  }), _ref3;
+}
+
+function handleBackspace(range, context) {
+  if (range.index === 0 || this.quill.getLength() <= 1) return;
+
+  var _quill$getLine11 = this.quill.getLine(range.index),
+      _quill$getLine12 = _slicedToArray(_quill$getLine11, 1),
+      line = _quill$getLine12[0];
+
+  var formats = {};
+  if (context.offset === 0) {
+    var _quill$getLine13 = this.quill.getLine(range.index - 1),
+        _quill$getLine14 = _slicedToArray(_quill$getLine13, 1),
+        prev = _quill$getLine14[0];
+
+    if (prev != null && prev.length() > 1) {
+      var curFormats = line.formats();
+      var prevFormats = this.quill.getFormat(range.index - 1, 1);
+      formats = _op2.default.attributes.diff(curFormats, prevFormats) || {};
+    }
+  }
+  // Check for astral symbols
+  var length = /[\uD800-\uDBFF][\uDC00-\uDFFF]$/.test(context.prefix) ? 2 : 1;
+  this.quill.deleteText(range.index - length, length, _quill2.default.sources.USER);
+  if (Object.keys(formats).length > 0) {
+    this.quill.formatLine(range.index - length, length, formats, _quill2.default.sources.USER);
+  }
+  this.quill.focus();
+}
+
+function handleDelete(range, context) {
+  // Check for astral symbols
+  var length = /^[\uD800-\uDBFF][\uDC00-\uDFFF]/.test(context.suffix) ? 2 : 1;
+  if (range.index >= this.quill.getLength() - length) return;
+  var formats = {},
+      nextLength = 0;
+
+  var _quill$getLine15 = this.quill.getLine(range.index),
+      _quill$getLine16 = _slicedToArray(_quill$getLine15, 1),
+      line = _quill$getLine16[0];
+
+  if (context.offset >= line.length() - 1) {
+    var _quill$getLine17 = this.quill.getLine(range.index + 1),
+        _quill$getLine18 = _slicedToArray(_quill$getLine17, 1),
+        next = _quill$getLine18[0];
+
+    if (next) {
+      var curFormats = line.formats();
+      var nextFormats = this.quill.getFormat(range.index, 1);
+      formats = _op2.default.attributes.diff(curFormats, nextFormats) || {};
+      nextLength = next.length();
+    }
+  }
+  this.quill.deleteText(range.index, length, _quill2.default.sources.USER);
+  if (Object.keys(formats).length > 0) {
+    this.quill.formatLine(range.index + nextLength - 1, length, formats, _quill2.default.sources.USER);
+  }
+}
+
+function handleDeleteRange(range) {
+  var lines = this.quill.getLines(range);
+  var formats = {};
+  if (lines.length > 1) {
+    var firstFormats = lines[0].formats();
+    var lastFormats = lines[lines.length - 1].formats();
+    formats = _op2.default.attributes.diff(lastFormats, firstFormats) || {};
+  }
+  this.quill.deleteText(range, _quill2.default.sources.USER);
+  if (Object.keys(formats).length > 0) {
+    this.quill.formatLine(range.index, 1, formats, _quill2.default.sources.USER);
+  }
+  this.quill.setSelection(range.index, _quill2.default.sources.SILENT);
+  this.quill.focus();
+}
+
+function handleEnter(range, context) {
+  var _this3 = this;
+
+  if (range.length > 0) {
+    this.quill.scroll.deleteAt(range.index, range.length); // So we do not trigger text-change
+  }
+  var lineFormats = Object.keys(context.format).reduce(function (lineFormats, format) {
+    if (_parchment2.default.query(format, _parchment2.default.Scope.BLOCK) && !Array.isArray(context.format[format])) {
+      lineFormats[format] = context.format[format];
+    }
+    return lineFormats;
+  }, {});
+  this.quill.insertText(range.index, '\n', lineFormats, _quill2.default.sources.USER);
+  // Earlier scroll.deleteAt might have messed up our selection,
+  // so insertText's built in selection preservation is not reliable
+  this.quill.setSelection(range.index + 1, _quill2.default.sources.SILENT);
+  this.quill.focus();
+  Object.keys(context.format).forEach(function (name) {
+    if (lineFormats[name] != null) return;
+    if (Array.isArray(context.format[name])) return;
+    if (name === 'link') return;
+    _this3.quill.format(name, context.format[name], _quill2.default.sources.USER);
+  });
+}
+
+function makeCodeBlockHandler(indent) {
+  return {
+    key: Keyboard.keys.TAB,
+    shiftKey: !indent,
+    format: { 'code-block': true },
+    handler: function handler(range) {
+      var CodeBlock = _parchment2.default.query('code-block');
+      var index = range.index,
+          length = range.length;
+
+      var _quill$scroll$descend = this.quill.scroll.descendant(CodeBlock, index),
+          _quill$scroll$descend2 = _slicedToArray(_quill$scroll$descend, 2),
+          block = _quill$scroll$descend2[0],
+          offset = _quill$scroll$descend2[1];
+
+      if (block == null) return;
+      var scrollIndex = this.quill.getIndex(block);
+      var start = block.newlineIndex(offset, true) + 1;
+      var end = block.newlineIndex(scrollIndex + offset + length);
+      var lines = block.domNode.textContent.slice(start, end).split('\n');
+      offset = 0;
+      lines.forEach(function (line, i) {
+        if (indent) {
+          block.insertAt(start + offset, CodeBlock.TAB);
+          offset += CodeBlock.TAB.length;
+          if (i === 0) {
+            index += CodeBlock.TAB.length;
+          } else {
+            length += CodeBlock.TAB.length;
+          }
+        } else if (line.startsWith(CodeBlock.TAB)) {
+          block.deleteAt(start + offset, CodeBlock.TAB.length);
+          offset -= CodeBlock.TAB.length;
+          if (i === 0) {
+            index -= CodeBlock.TAB.length;
+          } else {
+            length -= CodeBlock.TAB.length;
+          }
+        }
+        offset += line.length + 1;
+      });
+      this.quill.update(_quill2.default.sources.USER);
+      this.quill.setSelection(index, length, _quill2.default.sources.SILENT);
+    }
+  };
+}
+
+function makeFormatHandler(format) {
+  return {
+    key: format[0].toUpperCase(),
+    shortKey: true,
+    handler: function handler(range, context) {
+      this.quill.format(format, !context.format[format], _quill2.default.sources.USER);
+    }
+  };
+}
+
+function normalize(binding) {
+  if (typeof binding === 'string' || typeof binding === 'number') {
+    return normalize({ key: binding });
+  }
+  if ((typeof binding === 'undefined' ? 'undefined' : _typeof(binding)) === 'object') {
+    binding = (0, _clone2.default)(binding, false);
+  }
+  if (typeof binding.key === 'string') {
+    if (Keyboard.keys[binding.key.toUpperCase()] != null) {
+      binding.key = Keyboard.keys[binding.key.toUpperCase()];
+    } else if (binding.key.length === 1) {
+      binding.key = binding.key.toUpperCase().charCodeAt(0);
+    } else {
+      return null;
+    }
+  }
+  if (binding.shortKey) {
+    binding[SHORTKEY] = binding.shortKey;
+    delete binding.shortKey;
+  }
+  return binding;
+}
+
+exports.default = Keyboard;
+exports.SHORTKEY = SHORTKEY;
+
+/***/ }),
+/* 24 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
+
+var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+var _parchment = __webpack_require__(0);
+
+var _parchment2 = _interopRequireDefault(_parchment);
+
+var _text = __webpack_require__(7);
+
+var _text2 = _interopRequireDefault(_text);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+var Cursor = function (_Parchment$Embed) {
+  _inherits(Cursor, _Parchment$Embed);
+
+  _createClass(Cursor, null, [{
+    key: 'value',
+    value: function value() {
+      return undefined;
+    }
+  }]);
+
+  function Cursor(domNode, selection) {
+    _classCallCheck(this, Cursor);
+
+    var _this = _possibleConstructorReturn(this, (Cursor.__proto__ || Object.getPrototypeOf(Cursor)).call(this, domNode));
+
+    _this.selection = selection;
+    _this.textNode = document.createTextNode(Cursor.CONTENTS);
+    _this.domNode.appendChild(_this.textNode);
+    _this._length = 0;
+    return _this;
+  }
+
+  _createClass(Cursor, [{
+    key: 'detach',
+    value: function detach() {
+      // super.detach() will also clear domNode.__blot
+      if (this.parent != null) this.parent.removeChild(this);
+    }
+  }, {
+    key: 'format',
+    value: function format(name, value) {
+      if (this._length !== 0) {
+        return _get(Cursor.prototype.__proto__ || Object.getPrototypeOf(Cursor.prototype), 'format', this).call(this, name, value);
+      }
+      var target = this,
+          index = 0;
+      while (target != null && target.statics.scope !== _parchment2.default.Scope.BLOCK_BLOT) {
+        index += target.offset(target.parent);
+        target = target.parent;
+      }
+      if (target != null) {
+        this._length = Cursor.CONTENTS.length;
+        target.optimize();
+        target.formatAt(index, Cursor.CONTENTS.length, name, value);
+        this._length = 0;
+      }
+    }
+  }, {
+    key: 'index',
+    value: function index(node, offset) {
+      if (node === this.textNode) return 0;
+      return _get(Cursor.prototype.__proto__ || Object.getPrototypeOf(Cursor.prototype), 'index', this).call(this, node, offset);
+    }
+  }, {
+    key: 'length',
+    value: function length() {
+      return this._length;
+    }
+  }, {
+    key: 'position',
+    value: function position() {
+      return [this.textNode, this.textNode.data.length];
+    }
+  }, {
+    key: 'remove',
+    value: function remove() {
+      _get(Cursor.prototype.__proto__ || Object.getPrototypeOf(Cursor.prototype), 'remove', this).call(this);
+      this.parent = null;
+    }
+  }, {
+    key: 'restore',
+    value: function restore() {
+      if (this.selection.composing || this.parent == null) return;
+      var textNode = this.textNode;
+      var range = this.selection.getNativeRange();
+      var restoreText = void 0,
+          start = void 0,
+          end = void 0;
+      if (range != null && range.start.node === textNode && range.end.node === textNode) {
+        var _ref = [textNode, range.start.offset, range.end.offset];
+        restoreText = _ref[0];
+        start = _ref[1];
+        end = _ref[2];
+      }
+      // Link format will insert text outside of anchor tag
+      while (this.domNode.lastChild != null && this.domNode.lastChild !== this.textNode) {
+        this.domNode.parentNode.insertBefore(this.domNode.lastChild, this.domNode);
+      }
+      if (this.textNode.data !== Cursor.CONTENTS) {
+        var text = this.textNode.data.split(Cursor.CONTENTS).join('');
+        if (this.next instanceof _text2.default) {
+          restoreText = this.next.domNode;
+          this.next.insertAt(0, text);
+          this.textNode.data = Cursor.CONTENTS;
+        } else {
+          this.textNode.data = text;
+          this.parent.insertBefore(_parchment2.default.create(this.textNode), this);
+          this.textNode = document.createTextNode(Cursor.CONTENTS);
+          this.domNode.appendChild(this.textNode);
+        }
+      }
+      this.remove();
+      if (start != null) {
+        var _map = [start, end].map(function (offset) {
+          return Math.max(0, Math.min(restoreText.data.length, offset - 1));
+        });
+
+        var _map2 = _slicedToArray(_map, 2);
+
+        start = _map2[0];
+        end = _map2[1];
+
+        return {
+          startNode: restoreText,
+          startOffset: start,
+          endNode: restoreText,
+          endOffset: end
+        };
+      }
+    }
+  }, {
+    key: 'update',
+    value: function update(mutations, context) {
+      var _this2 = this;
+
+      if (mutations.some(function (mutation) {
+        return mutation.type === 'characterData' && mutation.target === _this2.textNode;
+      })) {
+        var range = this.restore();
+        if (range) context.range = range;
+      }
+    }
+  }, {
+    key: 'value',
+    value: function value() {
+      return '';
+    }
+  }]);
+
+  return Cursor;
+}(_parchment2.default.Embed);
+
+Cursor.blotName = 'cursor';
+Cursor.className = 'ql-cursor';
+Cursor.tagName = 'span';
+Cursor.CONTENTS = '\uFEFF'; // Zero width no break space
+
+
+exports.default = Cursor;
+
+/***/ }),
+/* 25 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _parchment = __webpack_require__(0);
+
+var _parchment2 = _interopRequireDefault(_parchment);
+
+var _block = __webpack_require__(4);
+
+var _block2 = _interopRequireDefault(_block);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+var Container = function (_Parchment$Container) {
+  _inherits(Container, _Parchment$Container);
+
+  function Container() {
+    _classCallCheck(this, Container);
+
+    return _possibleConstructorReturn(this, (Container.__proto__ || Object.getPrototypeOf(Container)).apply(this, arguments));
+  }
+
+  return Container;
+}(_parchment2.default.Container);
+
+Container.allowedChildren = [_block2.default, _block.BlockEmbed, Container];
+
+exports.default = Container;
+
+/***/ }),
+/* 26 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.ColorStyle = exports.ColorClass = exports.ColorAttributor = undefined;
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };
+
+var _parchment = __webpack_require__(0);
+
+var _parchment2 = _interopRequireDefault(_parchment);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+var ColorAttributor = function (_Parchment$Attributor) {
+  _inherits(ColorAttributor, _Parchment$Attributor);
+
+  function ColorAttributor() {
+    _classCallCheck(this, ColorAttributor);
+
+    return _possibleConstructorReturn(this, (ColorAttributor.__proto__ || Object.getPrototypeOf(ColorAttributor)).apply(this, arguments));
+  }
+
+  _createClass(ColorAttributor, [{
+    key: 'value',
+    value: function value(domNode) {
+      var value = _get(ColorAttributor.prototype.__proto__ || Object.getPrototypeOf(ColorAttributor.prototype), 'value', this).call(this, domNode);
+      if (!value.startsWith('rgb(')) return value;
+      value = value.replace(/^[^\d]+/, '').replace(/[^\d]+$/, '');
+      return '#' + value.split(',').map(function (component) {
+        return ('00' + parseInt(component).toString(16)).slice(-2);
+      }).join('');
+    }
+  }]);
+
+  return ColorAttributor;
+}(_parchment2.default.Attributor.Style);
+
+var ColorClass = new _parchment2.default.Attributor.Class('color', 'ql-color', {
+  scope: _parchment2.default.Scope.INLINE
+});
+var ColorStyle = new ColorAttributor('color', 'color', {
+  scope: _parchment2.default.Scope.INLINE
+});
+
+exports.ColorAttributor = ColorAttributor;
+exports.ColorClass = ColorClass;
+exports.ColorStyle = ColorStyle;
+
+/***/ }),
+/* 27 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.sanitize = exports.default = undefined;
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };
+
+var _inline = __webpack_require__(6);
+
+var _inline2 = _interopRequireDefault(_inline);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+var Link = function (_Inline) {
+  _inherits(Link, _Inline);
+
+  function Link() {
+    _classCallCheck(this, Link);
+
+    return _possibleConstructorReturn(this, (Link.__proto__ || Object.getPrototypeOf(Link)).apply(this, arguments));
+  }
+
+  _createClass(Link, [{
+    key: 'format',
+    value: function format(name, value) {
+      if (name !== this.statics.blotName || !value) return _get(Link.prototype.__proto__ || Object.getPrototypeOf(Link.prototype), 'format', this).call(this, name, value);
+      value = this.constructor.sanitize(value);
+      this.domNode.setAttribute('href', value);
+    }
+  }], [{
+    key: 'create',
+    value: function create(value) {
+      var node = _get(Link.__proto__ || Object.getPrototypeOf(Link), 'create', this).call(this, value);
+      value = this.sanitize(value);
+      node.setAttribute('href', value);
+      node.setAttribute('target', '_blank');
+      return node;
+    }
+  }, {
+    key: 'formats',
+    value: function formats(domNode) {
+      return domNode.getAttribute('href');
+    }
+  }, {
+    key: 'sanitize',
+    value: function sanitize(url) {
+      return _sanitize(url, this.PROTOCOL_WHITELIST) ? url : this.SANITIZED_URL;
+    }
+  }]);
+
+  return Link;
+}(_inline2.default);
+
+Link.blotName = 'link';
+Link.tagName = 'A';
+Link.SANITIZED_URL = 'about:blank';
+Link.PROTOCOL_WHITELIST = ['http', 'https', 'mailto', 'tel'];
+
+function _sanitize(url, protocols) {
+  var anchor = document.createElement('a');
+  anchor.href = url;
+  var protocol = anchor.href.slice(0, anchor.href.indexOf(':'));
+  return protocols.indexOf(protocol) > -1;
+}
+
+exports.default = Link;
+exports.sanitize = _sanitize;
+
+/***/ }),
+/* 28 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+var _keyboard = __webpack_require__(23);
+
+var _keyboard2 = _interopRequireDefault(_keyboard);
+
+var _dropdown = __webpack_require__(107);
+
+var _dropdown2 = _interopRequireDefault(_dropdown);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+var optionsCounter = 0;
+
+function toggleAriaAttribute(element, attribute) {
+  element.setAttribute(attribute, !(element.getAttribute(attribute) === 'true'));
+}
+
+var Picker = function () {
+  function Picker(select) {
+    var _this = this;
+
+    _classCallCheck(this, Picker);
+
+    this.select = select;
+    this.container = document.createElement('span');
+    this.buildPicker();
+    this.select.style.display = 'none';
+    this.select.parentNode.insertBefore(this.container, this.select);
+
+    this.label.addEventListener('mousedown', function () {
+      _this.togglePicker();
+    });
+    this.label.addEventListener('keydown', function (event) {
+      switch (event.keyCode) {
+        // Allows the "Enter" key to open the picker
+        case _keyboard2.default.keys.ENTER:
+          _this.togglePicker();
+          break;
+
+        // Allows the "Escape" key to close the picker
+        case _keyboard2.default.keys.ESCAPE:
+          _this.escape();
+          event.preventDefault();
+          break;
+        default:
+      }
+    });
+    this.select.addEventListener('change', this.update.bind(this));
+  }
+
+  _createClass(Picker, [{
+    key: 'togglePicker',
+    value: function togglePicker() {
+      this.container.classList.toggle('ql-expanded');
+      // Toggle aria-expanded and aria-hidden to make the picker accessible
+      toggleAriaAttribute(this.label, 'aria-expanded');
+      toggleAriaAttribute(this.options, 'aria-hidden');
+    }
+  }, {
+    key: 'buildItem',
+    value: function buildItem(option) {
+      var _this2 = this;
+
+      var item = document.createElement('span');
+      item.tabIndex = '0';
+      item.setAttribute('role', 'button');
+
+      item.classList.add('ql-picker-item');
+      if (option.hasAttribute('value')) {
+        item.setAttribute('data-value', option.getAttribute('value'));
+      }
+      if (option.textContent) {
+        item.setAttribute('data-label', option.textContent);
+      }
+      item.addEventListener('click', function () {
+        _this2.selectItem(item, true);
+      });
+      item.addEventListener('keydown', function (event) {
+        switch (event.keyCode) {
+          // Allows the "Enter" key to select an item
+          case _keyboard2.default.keys.ENTER:
+            _this2.selectItem(item, true);
+            event.preventDefault();
+            break;
+
+          // Allows the "Escape" key to close the picker
+          case _keyboard2.default.keys.ESCAPE:
+            _this2.escape();
+            event.preventDefault();
+            break;
+          default:
+        }
+      });
+
+      return item;
+    }
+  }, {
+    key: 'buildLabel',
+    value: function buildLabel() {
+      var label = document.createElement('span');
+      label.classList.add('ql-picker-label');
+      label.innerHTML = _dropdown2.default;
+      label.tabIndex = '0';
+      label.setAttribute('role', 'button');
+      label.setAttribute('aria-expanded', 'false');
+      this.container.appendChild(label);
+      return label;
+    }
+  }, {
+    key: 'buildOptions',
+    value: function buildOptions() {
+      var _this3 = this;
+
+      var options = document.createElement('span');
+      options.classList.add('ql-picker-options');
+
+      // Don't want screen readers to read this until options are visible
+      options.setAttribute('aria-hidden', 'true');
+      options.tabIndex = '-1';
+
+      // Need a unique id for aria-controls
+      options.id = 'ql-picker-options-' + optionsCounter;
+      optionsCounter += 1;
+      this.label.setAttribute('aria-controls', options.id);
+
+      this.options = options;
+
+      [].slice.call(this.select.options).forEach(function (option) {
+        var item = _this3.buildItem(option);
+        options.appendChild(item);
+        if (option.selected === true) {
+          _this3.selectItem(item);
+        }
+      });
+      this.container.appendChild(options);
+    }
+  }, {
+    key: 'buildPicker',
+    value: function buildPicker() {
+      var _this4 = this;
+
+      [].slice.call(this.select.attributes).forEach(function (item) {
+        _this4.container.setAttribute(item.name, item.value);
+      });
+      this.container.classList.add('ql-picker');
+      this.label = this.buildLabel();
+      this.buildOptions();
+    }
+  }, {
+    key: 'escape',
+    value: function escape() {
+      var _this5 = this;
+
+      // Close menu and return focus to trigger label
+      this.close();
+      // Need setTimeout for accessibility to ensure that the browser executes
+      // focus on the next process thread and after any DOM content changes
+      setTimeout(function () {
+        return _this5.label.focus();
+      }, 1);
+    }
+  }, {
+    key: 'close',
+    value: function close() {
+      this.container.classList.remove('ql-expanded');
+      this.label.setAttribute('aria-expanded', 'false');
+      this.options.setAttribute('aria-hidden', 'true');
+    }
+  }, {
+    key: 'selectItem',
+    value: function selectItem(item) {
+      var trigger = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
+
+      var selected = this.container.querySelector('.ql-selected');
+      if (item === selected) return;
+      if (selected != null) {
+        selected.classList.remove('ql-selected');
+      }
+      if (item == null) return;
+      item.classList.add('ql-selected');
+      this.select.selectedIndex = [].indexOf.call(item.parentNode.children, item);
+      if (item.hasAttribute('data-value')) {
+        this.label.setAttribute('data-value', item.getAttribute('data-value'));
+      } else {
+        this.label.removeAttribute('data-value');
+      }
+      if (item.hasAttribute('data-label')) {
+        this.label.setAttribute('data-label', item.getAttribute('data-label'));
+      } else {
+        this.label.removeAttribute('data-label');
+      }
+      if (trigger) {
+        if (typeof Event === 'function') {
+          this.select.dispatchEvent(new Event('change'));
+        } else if ((typeof Event === 'undefined' ? 'undefined' : _typeof(Event)) === 'object') {
+          // IE11
+          var event = document.createEvent('Event');
+          event.initEvent('change', true, true);
+          this.select.dispatchEvent(event);
+        }
+        this.close();
+      }
+    }
+  }, {
+    key: 'update',
+    value: function update() {
+      var option = void 0;
+      if (this.select.selectedIndex > -1) {
+        var item = this.container.querySelector('.ql-picker-options').children[this.select.selectedIndex];
+        option = this.select.options[this.select.selectedIndex];
+        this.selectItem(item);
+      } else {
+        this.selectItem(null);
+      }
+      var isActive = option != null && option !== this.select.querySelector('option[selected]');
+      this.label.classList.toggle('ql-active', isActive);
+    }
+  }]);
+
+  return Picker;
+}();
+
+exports.default = Picker;
+
+/***/ }),
+/* 29 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _parchment = __webpack_require__(0);
+
+var _parchment2 = _interopRequireDefault(_parchment);
+
+var _quill = __webpack_require__(5);
+
+var _quill2 = _interopRequireDefault(_quill);
+
+var _block = __webpack_require__(4);
+
+var _block2 = _interopRequireDefault(_block);
+
+var _break = __webpack_require__(16);
+
+var _break2 = _interopRequireDefault(_break);
+
+var _container = __webpack_require__(25);
+
+var _container2 = _interopRequireDefault(_container);
+
+var _cursor = __webpack_require__(24);
+
+var _cursor2 = _interopRequireDefault(_cursor);
+
+var _embed = __webpack_require__(35);
+
+var _embed2 = _interopRequireDefault(_embed);
+
+var _inline = __webpack_require__(6);
+
+var _inline2 = _interopRequireDefault(_inline);
+
+var _scroll = __webpack_require__(22);
+
+var _scroll2 = _interopRequireDefault(_scroll);
+
+var _text = __webpack_require__(7);
+
+var _text2 = _interopRequireDefault(_text);
+
+var _clipboard = __webpack_require__(55);
+
+var _clipboard2 = _interopRequireDefault(_clipboard);
+
+var _history = __webpack_require__(42);
+
+var _history2 = _interopRequireDefault(_history);
+
+var _keyboard = __webpack_require__(23);
+
+var _keyboard2 = _interopRequireDefault(_keyboard);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+_quill2.default.register({
+  'blots/block': _block2.default,
+  'blots/block/embed': _block.BlockEmbed,
+  'blots/break': _break2.default,
+  'blots/container': _container2.default,
+  'blots/cursor': _cursor2.default,
+  'blots/embed': _embed2.default,
+  'blots/inline': _inline2.default,
+  'blots/scroll': _scroll2.default,
+  'blots/text': _text2.default,
+
+  'modules/clipboard': _clipboard2.default,
+  'modules/history': _history2.default,
+  'modules/keyboard': _keyboard2.default
+});
+
+_parchment2.default.register(_block2.default, _break2.default, _cursor2.default, _inline2.default, _scroll2.default, _text2.default);
+
+exports.default = _quill2.default;
+
+/***/ }),
+/* 30 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", { value: true });
+var Registry = __webpack_require__(1);
+var ShadowBlot = /** @class */ (function () {
+    function ShadowBlot(domNode) {
+        this.domNode = domNode;
+        // @ts-ignore
+        this.domNode[Registry.DATA_KEY] = { blot: this };
+    }
+    Object.defineProperty(ShadowBlot.prototype, "statics", {
+        // Hack for accessing inherited static methods
+        get: function () {
+            return this.constructor;
+        },
+        enumerable: true,
+        configurable: true
+    });
+    ShadowBlot.create = function (value) {
+        if (this.tagName == null) {
+            throw new Registry.ParchmentError('Blot definition missing tagName');
+        }
+        var node;
+        if (Array.isArray(this.tagName)) {
+            if (typeof value === 'string') {
+                value = value.toUpperCase();
+                if (parseInt(value).toString() === value) {
+                    value = parseInt(value);
+                }
+            }
+            if (typeof value === 'number') {
+                node = document.createElement(this.tagName[value - 1]);
+            }
+            else if (this.tagName.indexOf(value) > -1) {
+                node = document.createElement(value);
+            }
+            else {
+                node = document.createElement(this.tagName[0]);
+            }
+        }
+        else {
+            node = document.createElement(this.tagName);
+        }
+        if (this.className) {
+            node.classList.add(this.className);
+        }
+        return node;
+    };
+    ShadowBlot.prototype.attach = function () {
+        if (this.parent != null) {
+            this.scroll = this.parent.scroll;
+        }
+    };
+    ShadowBlot.prototype.clone = function () {
+        var domNode = this.domNode.cloneNode(false);
+        return Registry.create(domNode);
+    };
+    ShadowBlot.prototype.detach = function () {
+        if (this.parent != null)
+            this.parent.removeChild(this);
+        // @ts-ignore
+        delete this.domNode[Registry.DATA_KEY];
+    };
+    ShadowBlot.prototype.deleteAt = function (index, length) {
+        var blot = this.isolate(index, length);
+        blot.remove();
+    };
+    ShadowBlot.prototype.formatAt = function (index, length, name, value) {
+        var blot = this.isolate(index, length);
+        if (Registry.query(name, Registry.Scope.BLOT) != null && value) {
+            blot.wrap(name, value);
+        }
+        else if (Registry.query(name, Registry.Scope.ATTRIBUTE) != null) {
+            var parent = Registry.create(this.statics.scope);
+            blot.wrap(parent);
+            parent.format(name, value);
+        }
+    };
+    ShadowBlot.prototype.insertAt = function (index, value, def) {
+        var blot = def == null ? Registry.create('text', value) : Registry.create(value, def);
+        var ref = this.split(index);
+        this.parent.insertBefore(blot, ref);
+    };
+    ShadowBlot.prototype.insertInto = function (parentBlot, refBlot) {
+        if (refBlot === void 0) { refBlot = null; }
+        if (this.parent != null) {
+            this.parent.children.remove(this);
+        }
+        var refDomNode = null;
+        parentBlot.children.insertBefore(this, refBlot);
+        if (refBlot != null) {
+            refDomNode = refBlot.domNode;
+        }
+        if (this.domNode.parentNode != parentBlot.domNode ||
+            this.domNode.nextSibling != refDomNode) {
+            parentBlot.domNode.insertBefore(this.domNode, refDomNode);
+        }
+        this.parent = parentBlot;
+        this.attach();
+    };
+    ShadowBlot.prototype.isolate = function (index, length) {
+        var target = this.split(index);
+        target.split(length);
+        return target;
+    };
+    ShadowBlot.prototype.length = function () {
+        return 1;
+    };
+    ShadowBlot.prototype.offset = function (root) {
+        if (root === void 0) { root = this.parent; }
+        if (this.parent == null || this == root)
+            return 0;
+        return this.parent.children.offset(this) + this.parent.offset(root);
+    };
+    ShadowBlot.prototype.optimize = function (context) {
+        // TODO clean up once we use WeakMap
+        // @ts-ignore
+        if (this.domNode[Registry.DATA_KEY] != null) {
+            // @ts-ignore
+            delete this.domNode[Registry.DATA_KEY].mutations;
+        }
+    };
+    ShadowBlot.prototype.remove = function () {
+        if (this.domNode.parentNode != null) {
+            this.domNode.parentNode.removeChild(this.domNode);
+        }
+        this.detach();
+    };
+    ShadowBlot.prototype.replace = function (target) {
+        if (target.parent == null)
+            return;
+        target.parent.insertBefore(this, target.next);
+        target.remove();
+    };
+    ShadowBlot.prototype.replaceWith = function (name, value) {
+        var replacement = typeof name === 'string' ? Registry.create(name, value) : name;
+        replacement.replace(this);
+        return replacement;
+    };
+    ShadowBlot.prototype.split = function (index, force) {
+        return index === 0 ? this : this.next;
+    };
+    ShadowBlot.prototype.update = function (mutations, context) {
+        // Nothing to do by default
+    };
+    ShadowBlot.prototype.wrap = function (name, value) {
+        var wrapper = typeof name === 'string' ? Registry.create(name, value) : name;
+        if (this.parent != null) {
+            this.parent.insertBefore(wrapper, this.next);
+        }
+        wrapper.appendChild(this);
+        return wrapper;
+    };
+    ShadowBlot.blotName = 'abstract';
+    return ShadowBlot;
+}());
+exports.default = ShadowBlot;
+
+
+/***/ }),
+/* 31 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", { value: true });
+var attributor_1 = __webpack_require__(12);
+var class_1 = __webpack_require__(32);
+var style_1 = __webpack_require__(33);
+var Registry = __webpack_require__(1);
+var AttributorStore = /** @class */ (function () {
+    function AttributorStore(domNode) {
+        this.attributes = {};
+        this.domNode = domNode;
+        this.build();
+    }
+    AttributorStore.prototype.attribute = function (attribute, value) {
+        // verb
+        if (value) {
+            if (attribute.add(this.domNode, value)) {
+                if (attribute.value(this.domNode) != null) {
+                    this.attributes[attribute.attrName] = attribute;
+                }
+                else {
+                    delete this.attributes[attribute.attrName];
+                }
+            }
+        }
+        else {
+            attribute.remove(this.domNode);
+            delete this.attributes[attribute.attrName];
+        }
+    };
+    AttributorStore.prototype.build = function () {
+        var _this = this;
+        this.attributes = {};
+        var attributes = attributor_1.default.keys(this.domNode);
+        var classes = class_1.default.keys(this.domNode);
+        var styles = style_1.default.keys(this.domNode);
+        attributes
+            .concat(classes)
+            .concat(styles)
+            .forEach(function (name) {
+            var attr = Registry.query(name, Registry.Scope.ATTRIBUTE);
+            if (attr instanceof attributor_1.default) {
+                _this.attributes[attr.attrName] = attr;
+            }
+        });
+    };
+    AttributorStore.prototype.copy = function (target) {
+        var _this = this;
+        Object.keys(this.attributes).forEach(function (key) {
+            var value = _this.attributes[key].value(_this.domNode);
+            target.format(key, value);
+        });
+    };
+    AttributorStore.prototype.move = function (target) {
+        var _this = this;
+        this.copy(target);
+        Object.keys(this.attributes).forEach(function (key) {
+            _this.attributes[key].remove(_this.domNode);
+        });
+        this.attributes = {};
+    };
+    AttributorStore.prototype.values = function () {
+        var _this = this;
+        return Object.keys(this.attributes).reduce(function (attributes, name) {
+            attributes[name] = _this.attributes[name].value(_this.domNode);
+            return attributes;
+        }, {});
+    };
+    return AttributorStore;
+}());
+exports.default = AttributorStore;
+
+
+/***/ }),
+/* 32 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+var __extends = (this && this.__extends) || (function () {
+    var extendStatics = Object.setPrototypeOf ||
+        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
+        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
+    return function (d, b) {
+        extendStatics(d, b);
+        function __() { this.constructor = d; }
+        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+    };
+})();
+Object.defineProperty(exports, "__esModule", { value: true });
+var attributor_1 = __webpack_require__(12);
+function match(node, prefix) {
+    var className = node.getAttribute('class') || '';
+    return className.split(/\s+/).filter(function (name) {
+        return name.indexOf(prefix + "-") === 0;
+    });
+}
+var ClassAttributor = /** @class */ (function (_super) {
+    __extends(ClassAttributor, _super);
+    function ClassAttributor() {
+        return _super !== null && _super.apply(this, arguments) || this;
+    }
+    ClassAttributor.keys = function (node) {
+        return (node.getAttribute('class') || '').split(/\s+/).map(function (name) {
+            return name
+                .split('-')
+                .slice(0, -1)
+                .join('-');
+        });
+    };
+    ClassAttributor.prototype.add = function (node, value) {
+        if (!this.canAdd(node, value))
+            return false;
+        this.remove(node);
+        node.classList.add(this.keyName + "-" + value);
+        return true;
+    };
+    ClassAttributor.prototype.remove = function (node) {
+        var matches = match(node, this.keyName);
+        matches.forEach(function (name) {
+            node.classList.remove(name);
+        });
+        if (node.classList.length === 0) {
+            node.removeAttribute('class');
+        }
+    };
+    ClassAttributor.prototype.value = function (node) {
+        var result = match(node, this.keyName)[0] || '';
+        var value = result.slice(this.keyName.length + 1); // +1 for hyphen
+        return this.canAdd(node, value) ? value : '';
+    };
+    return ClassAttributor;
+}(attributor_1.default));
+exports.default = ClassAttributor;
+
+
+/***/ }),
+/* 33 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+var __extends = (this && this.__extends) || (function () {
+    var extendStatics = Object.setPrototypeOf ||
+        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
+        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
+    return function (d, b) {
+        extendStatics(d, b);
+        function __() { this.constructor = d; }
+        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+    };
+})();
+Object.defineProperty(exports, "__esModule", { value: true });
+var attributor_1 = __webpack_require__(12);
+function camelize(name) {
+    var parts = name.split('-');
+    var rest = parts
+        .slice(1)
+        .map(function (part) {
+        return part[0].toUpperCase() + part.slice(1);
+    })
+        .join('');
+    return parts[0] + rest;
+}
+var StyleAttributor = /** @class */ (function (_super) {
+    __extends(StyleAttributor, _super);
+    function StyleAttributor() {
+        return _super !== null && _super.apply(this, arguments) || this;
+    }
+    StyleAttributor.keys = function (node) {
+        return (node.getAttribute('style') || '').split(';').map(function (value) {
+            var arr = value.split(':');
+            return arr[0].trim();
+        });
+    };
+    StyleAttributor.prototype.add = function (node, value) {
+        if (!this.canAdd(node, value))
+            return false;
+        // @ts-ignore
+        node.style[camelize(this.keyName)] = value;
+        return true;
+    };
+    StyleAttributor.prototype.remove = function (node) {
+        // @ts-ignore
+        node.style[camelize(this.keyName)] = '';
+        if (!node.getAttribute('style')) {
+            node.removeAttribute('style');
+        }
+    };
+    StyleAttributor.prototype.value = function (node) {
+        // @ts-ignore
+        var value = node.style[camelize(this.keyName)];
+        return this.canAdd(node, value) ? value : '';
+    };
+    return StyleAttributor;
+}(attributor_1.default));
+exports.default = StyleAttributor;
+
+
+/***/ }),
+/* 34 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+var Theme = function () {
+  function Theme(quill, options) {
+    _classCallCheck(this, Theme);
+
+    this.quill = quill;
+    this.options = options;
+    this.modules = {};
+  }
+
+  _createClass(Theme, [{
+    key: 'init',
+    value: function init() {
+      var _this = this;
+
+      Object.keys(this.options.modules).forEach(function (name) {
+        if (_this.modules[name] == null) {
+          _this.addModule(name);
+        }
+      });
+    }
+  }, {
+    key: 'addModule',
+    value: function addModule(name) {
+      var moduleClass = this.quill.constructor.import('modules/' + name);
+      this.modules[name] = new moduleClass(this.quill, this.options.modules[name] || {});
+      return this.modules[name];
+    }
+  }]);
+
+  return Theme;
+}();
+
+Theme.DEFAULTS = {
+  modules: {}
+};
+Theme.themes = {
+  'default': Theme
+};
+
+exports.default = Theme;
+
+/***/ }),
+/* 35 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };
+
+var _parchment = __webpack_require__(0);
+
+var _parchment2 = _interopRequireDefault(_parchment);
+
+var _text = __webpack_require__(7);
+
+var _text2 = _interopRequireDefault(_text);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+var GUARD_TEXT = '\uFEFF';
+
+var Embed = function (_Parchment$Embed) {
+  _inherits(Embed, _Parchment$Embed);
+
+  function Embed(node) {
+    _classCallCheck(this, Embed);
+
+    var _this = _possibleConstructorReturn(this, (Embed.__proto__ || Object.getPrototypeOf(Embed)).call(this, node));
+
+    _this.contentNode = document.createElement('span');
+    _this.contentNode.setAttribute('contenteditable', false);
+    [].slice.call(_this.domNode.childNodes).forEach(function (childNode) {
+      _this.contentNode.appendChild(childNode);
+    });
+    _this.leftGuard = document.createTextNode(GUARD_TEXT);
+    _this.rightGuard = document.createTextNode(GUARD_TEXT);
+    _this.domNode.appendChild(_this.leftGuard);
+    _this.domNode.appendChild(_this.contentNode);
+    _this.domNode.appendChild(_this.rightGuard);
+    return _this;
+  }
+
+  _createClass(Embed, [{
+    key: 'index',
+    value: function index(node, offset) {
+      if (node === this.leftGuard) return 0;
+      if (node === this.rightGuard) return 1;
+      return _get(Embed.prototype.__proto__ || Object.getPrototypeOf(Embed.prototype), 'index', this).call(this, node, offset);
+    }
+  }, {
+    key: 'restore',
+    value: function restore(node) {
+      var range = void 0,
+          textNode = void 0;
+      var text = node.data.split(GUARD_TEXT).join('');
+      if (node === this.leftGuard) {
+        if (this.prev instanceof _text2.default) {
+          var prevLength = this.prev.length();
+          this.prev.insertAt(prevLength, text);
+          range = {
+            startNode: this.prev.domNode,
+            startOffset: prevLength + text.length
+          };
+        } else {
+          textNode = document.createTextNode(text);
+          this.parent.insertBefore(_parchment2.default.create(textNode), this);
+          range = {
+            startNode: textNode,
+            startOffset: text.length
+          };
+        }
+      } else if (node === this.rightGuard) {
+        if (this.next instanceof _text2.default) {
+          this.next.insertAt(0, text);
+          range = {
+            startNode: this.next.domNode,
+            startOffset: text.length
+          };
+        } else {
+          textNode = document.createTextNode(text);
+          this.parent.insertBefore(_parchment2.default.create(textNode), this.next);
+          range = {
+            startNode: textNode,
+            startOffset: text.length
+          };
+        }
+      }
+      node.data = GUARD_TEXT;
+      return range;
+    }
+  }, {
+    key: 'update',
+    value: function update(mutations, context) {
+      var _this2 = this;
+
+      mutations.forEach(function (mutation) {
+        if (mutation.type === 'characterData' && (mutation.target === _this2.leftGuard || mutation.target === _this2.rightGuard)) {
+          var range = _this2.restore(mutation.target);
+          if (range) context.range = range;
+        }
+      });
+    }
+  }]);
+
+  return Embed;
+}(_parchment2.default.Embed);
+
+exports.default = Embed;
+
+/***/ }),
+/* 36 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.AlignStyle = exports.AlignClass = exports.AlignAttribute = undefined;
+
+var _parchment = __webpack_require__(0);
+
+var _parchment2 = _interopRequireDefault(_parchment);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+var config = {
+  scope: _parchment2.default.Scope.BLOCK,
+  whitelist: ['right', 'center', 'justify']
+};
+
+var AlignAttribute = new _parchment2.default.Attributor.Attribute('align', 'align', config);
+var AlignClass = new _parchment2.default.Attributor.Class('align', 'ql-align', config);
+var AlignStyle = new _parchment2.default.Attributor.Style('align', 'text-align', config);
+
+exports.AlignAttribute = AlignAttribute;
+exports.AlignClass = AlignClass;
+exports.AlignStyle = AlignStyle;
+
+/***/ }),
+/* 37 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.BackgroundStyle = exports.BackgroundClass = undefined;
+
+var _parchment = __webpack_require__(0);
+
+var _parchment2 = _interopRequireDefault(_parchment);
+
+var _color = __webpack_require__(26);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+var BackgroundClass = new _parchment2.default.Attributor.Class('background', 'ql-bg', {
+  scope: _parchment2.default.Scope.INLINE
+});
+var BackgroundStyle = new _color.ColorAttributor('background', 'background-color', {
+  scope: _parchment2.default.Scope.INLINE
+});
+
+exports.BackgroundClass = BackgroundClass;
+exports.BackgroundStyle = BackgroundStyle;
+
+/***/ }),
+/* 38 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.DirectionStyle = exports.DirectionClass = exports.DirectionAttribute = undefined;
+
+var _parchment = __webpack_require__(0);
+
+var _parchment2 = _interopRequireDefault(_parchment);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+var config = {
+  scope: _parchment2.default.Scope.BLOCK,
+  whitelist: ['rtl']
+};
+
+var DirectionAttribute = new _parchment2.default.Attributor.Attribute('direction', 'dir', config);
+var DirectionClass = new _parchment2.default.Attributor.Class('direction', 'ql-direction', config);
+var DirectionStyle = new _parchment2.default.Attributor.Style('direction', 'direction', config);
+
+exports.DirectionAttribute = DirectionAttribute;
+exports.DirectionClass = DirectionClass;
+exports.DirectionStyle = DirectionStyle;
+
+/***/ }),
+/* 39 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.FontClass = exports.FontStyle = undefined;
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };
+
+var _parchment = __webpack_require__(0);
+
+var _parchment2 = _interopRequireDefault(_parchment);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+var config = {
+  scope: _parchment2.default.Scope.INLINE,
+  whitelist: ['serif', 'monospace']
+};
+
+var FontClass = new _parchment2.default.Attributor.Class('font', 'ql-font', config);
+
+var FontStyleAttributor = function (_Parchment$Attributor) {
+  _inherits(FontStyleAttributor, _Parchment$Attributor);
+
+  function FontStyleAttributor() {
+    _classCallCheck(this, FontStyleAttributor);
+
+    return _possibleConstructorReturn(this, (FontStyleAttributor.__proto__ || Object.getPrototypeOf(FontStyleAttributor)).apply(this, arguments));
+  }
+
+  _createClass(FontStyleAttributor, [{
+    key: 'value',
+    value: function value(node) {
+      return _get(FontStyleAttributor.prototype.__proto__ || Object.getPrototypeOf(FontStyleAttributor.prototype), 'value', this).call(this, node).replace(/["']/g, '');
+    }
+  }]);
+
+  return FontStyleAttributor;
+}(_parchment2.default.Attributor.Style);
+
+var FontStyle = new FontStyleAttributor('font', 'font-family', config);
+
+exports.FontStyle = FontStyle;
+exports.FontClass = FontClass;
+
+/***/ }),
+/* 40 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.SizeStyle = exports.SizeClass = undefined;
+
+var _parchment = __webpack_require__(0);
+
+var _parchment2 = _interopRequireDefault(_parchment);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+var SizeClass = new _parchment2.default.Attributor.Class('size', 'ql-size', {
+  scope: _parchment2.default.Scope.INLINE,
+  whitelist: ['small', 'large', 'huge']
+});
+var SizeStyle = new _parchment2.default.Attributor.Style('size', 'font-size', {
+  scope: _parchment2.default.Scope.INLINE,
+  whitelist: ['10px', '18px', '32px']
+});
+
+exports.SizeClass = SizeClass;
+exports.SizeStyle = SizeStyle;
+
+/***/ }),
+/* 41 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+module.exports = {
+  'align': {
+    '': __webpack_require__(76),
+    'center': __webpack_require__(77),
+    'right': __webpack_require__(78),
+    'justify': __webpack_require__(79)
+  },
+  'background': __webpack_require__(80),
+  'blockquote': __webpack_require__(81),
+  'bold': __webpack_require__(82),
+  'clean': __webpack_require__(83),
+  'code': __webpack_require__(58),
+  'code-block': __webpack_require__(58),
+  'color': __webpack_require__(84),
+  'direction': {
+    '': __webpack_require__(85),
+    'rtl': __webpack_require__(86)
+  },
+  'float': {
+    'center': __webpack_require__(87),
+    'full': __webpack_require__(88),
+    'left': __webpack_require__(89),
+    'right': __webpack_require__(90)
+  },
+  'formula': __webpack_require__(91),
+  'header': {
+    '1': __webpack_require__(92),
+    '2': __webpack_require__(93)
+  },
+  'italic': __webpack_require__(94),
+  'image': __webpack_require__(95),
+  'indent': {
+    '+1': __webpack_require__(96),
+    '-1': __webpack_require__(97)
+  },
+  'link': __webpack_require__(98),
+  'list': {
+    'ordered': __webpack_require__(99),
+    'bullet': __webpack_require__(100),
+    'check': __webpack_require__(101)
+  },
+  'script': {
+    'sub': __webpack_require__(102),
+    'super': __webpack_require__(103)
+  },
+  'strike': __webpack_require__(104),
+  'underline': __webpack_require__(105),
+  'video': __webpack_require__(106)
+};
+
+/***/ }),
+/* 42 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.getLastChangeIndex = exports.default = undefined;
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+var _parchment = __webpack_require__(0);
+
+var _parchment2 = _interopRequireDefault(_parchment);
+
+var _quill = __webpack_require__(5);
+
+var _quill2 = _interopRequireDefault(_quill);
+
+var _module = __webpack_require__(9);
+
+var _module2 = _interopRequireDefault(_module);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+var History = function (_Module) {
+  _inherits(History, _Module);
+
+  function History(quill, options) {
+    _classCallCheck(this, History);
+
+    var _this = _possibleConstructorReturn(this, (History.__proto__ || Object.getPrototypeOf(History)).call(this, quill, options));
+
+    _this.lastRecorded = 0;
+    _this.ignoreChange = false;
+    _this.clear();
+    _this.quill.on(_quill2.default.events.EDITOR_CHANGE, function (eventName, delta, oldDelta, source) {
+      if (eventName !== _quill2.default.events.TEXT_CHANGE || _this.ignoreChange) return;
+      if (!_this.options.userOnly || source === _quill2.default.sources.USER) {
+        _this.record(delta, oldDelta);
+      } else {
+        _this.transform(delta);
+      }
+    });
+    _this.quill.keyboard.addBinding({ key: 'Z', shortKey: true }, _this.undo.bind(_this));
+    _this.quill.keyboard.addBinding({ key: 'Z', shortKey: true, shiftKey: true }, _this.redo.bind(_this));
+    if (/Win/i.test(navigator.platform)) {
+      _this.quill.keyboard.addBinding({ key: 'Y', shortKey: true }, _this.redo.bind(_this));
+    }
+    return _this;
+  }
+
+  _createClass(History, [{
+    key: 'change',
+    value: function change(source, dest) {
+      if (this.stack[source].length === 0) return;
+      var delta = this.stack[source].pop();
+      this.stack[dest].push(delta);
+      this.lastRecorded = 0;
+      this.ignoreChange = true;
+      this.quill.updateContents(delta[source], _quill2.default.sources.USER);
+      this.ignoreChange = false;
+      var index = getLastChangeIndex(delta[source]);
+      this.quill.setSelection(index);
+    }
+  }, {
+    key: 'clear',
+    value: function clear() {
+      this.stack = { undo: [], redo: [] };
+    }
+  }, {
+    key: 'cutoff',
+    value: function cutoff() {
+      this.lastRecorded = 0;
+    }
+  }, {
+    key: 'record',
+    value: function record(changeDelta, oldDelta) {
+      if (changeDelta.ops.length === 0) return;
+      this.stack.redo = [];
+      var undoDelta = this.quill.getContents().diff(oldDelta);
+      var timestamp = Date.now();
+      if (this.lastRecorded + this.options.delay > timestamp && this.stack.undo.length > 0) {
+        var delta = this.stack.undo.pop();
+        undoDelta = undoDelta.compose(delta.undo);
+        changeDelta = delta.redo.compose(changeDelta);
+      } else {
+        this.lastRecorded = timestamp;
+      }
+      this.stack.undo.push({
+        redo: changeDelta,
+        undo: undoDelta
+      });
+      if (this.stack.undo.length > this.options.maxStack) {
+        this.stack.undo.shift();
+      }
+    }
+  }, {
+    key: 'redo',
+    value: function redo() {
+      this.change('redo', 'undo');
+    }
+  }, {
+    key: 'transform',
+    value: function transform(delta) {
+      this.stack.undo.forEach(function (change) {
+        change.undo = delta.transform(change.undo, true);
+        change.redo = delta.transform(change.redo, true);
+      });
+      this.stack.redo.forEach(function (change) {
+        change.undo = delta.transform(change.undo, true);
+        change.redo = delta.transform(change.redo, true);
+      });
+    }
+  }, {
+    key: 'undo',
+    value: function undo() {
+      this.change('undo', 'redo');
+    }
+  }]);
+
+  return History;
+}(_module2.default);
+
+History.DEFAULTS = {
+  delay: 1000,
+  maxStack: 100,
+  userOnly: false
+};
+
+function endsWithNewlineChange(delta) {
+  var lastOp = delta.ops[delta.ops.length - 1];
+  if (lastOp == null) return false;
+  if (lastOp.insert != null) {
+    return typeof lastOp.insert === 'string' && lastOp.insert.endsWith('\n');
+  }
+  if (lastOp.attributes != null) {
+    return Object.keys(lastOp.attributes).some(function (attr) {
+      return _parchment2.default.query(attr, _parchment2.default.Scope.BLOCK) != null;
+    });
+  }
+  return false;
+}
+
+function getLastChangeIndex(delta) {
+  var deleteLength = delta.reduce(function (length, op) {
+    length += op.delete || 0;
+    return length;
+  }, 0);
+  var changeIndex = delta.length() - deleteLength;
+  if (endsWithNewlineChange(delta)) {
+    changeIndex -= 1;
+  }
+  return changeIndex;
+}
+
+exports.default = History;
+exports.getLastChangeIndex = getLastChangeIndex;
+
+/***/ }),
+/* 43 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = exports.BaseTooltip = undefined;
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };
+
+var _extend = __webpack_require__(3);
+
+var _extend2 = _interopRequireDefault(_extend);
+
+var _quillDelta = __webpack_require__(2);
+
+var _quillDelta2 = _interopRequireDefault(_quillDelta);
+
+var _emitter = __webpack_require__(8);
+
+var _emitter2 = _interopRequireDefault(_emitter);
+
+var _keyboard = __webpack_require__(23);
+
+var _keyboard2 = _interopRequireDefault(_keyboard);
+
+var _theme = __webpack_require__(34);
+
+var _theme2 = _interopRequireDefault(_theme);
+
+var _colorPicker = __webpack_require__(59);
+
+var _colorPicker2 = _interopRequireDefault(_colorPicker);
+
+var _iconPicker = __webpack_require__(60);
+
+var _iconPicker2 = _interopRequireDefault(_iconPicker);
+
+var _picker = __webpack_require__(28);
+
+var _picker2 = _interopRequireDefault(_picker);
+
+var _tooltip = __webpack_require__(61);
+
+var _tooltip2 = _interopRequireDefault(_tooltip);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+var ALIGNS = [false, 'center', 'right', 'justify'];
+
+var COLORS = ["#000000", "#e60000", "#ff9900", "#ffff00", "#008a00", "#0066cc", "#9933ff", "#ffffff", "#facccc", "#ffebcc", "#ffffcc", "#cce8cc", "#cce0f5", "#ebd6ff", "#bbbbbb", "#f06666", "#ffc266", "#ffff66", "#66b966", "#66a3e0", "#c285ff", "#888888", "#a10000", "#b26b00", "#b2b200", "#006100", "#0047b2", "#6b24b2", "#444444", "#5c0000", "#663d00", "#666600", "#003700", "#002966", "#3d1466"];
+
+var FONTS = [false, 'serif', 'monospace'];
+
+var HEADERS = ['1', '2', '3', false];
+
+var SIZES = ['small', false, 'large', 'huge'];
+
+var BaseTheme = function (_Theme) {
+  _inherits(BaseTheme, _Theme);
+
+  function BaseTheme(quill, options) {
+    _classCallCheck(this, BaseTheme);
+
+    var _this = _possibleConstructorReturn(this, (BaseTheme.__proto__ || Object.getPrototypeOf(BaseTheme)).call(this, quill, options));
+
+    var listener = function listener(e) {
+      if (!document.body.contains(quill.root)) {
+        return document.body.removeEventListener('click', listener);
+      }
+      if (_this.tooltip != null && !_this.tooltip.root.contains(e.target) && document.activeElement !== _this.tooltip.textbox && !_this.quill.hasFocus()) {
+        _this.tooltip.hide();
+      }
+      if (_this.pickers != null) {
+        _this.pickers.forEach(function (picker) {
+          if (!picker.container.contains(e.target)) {
+            picker.close();
+          }
+        });
+      }
+    };
+    quill.emitter.listenDOM('click', document.body, listener);
+    return _this;
+  }
+
+  _createClass(BaseTheme, [{
+    key: 'addModule',
+    value: function addModule(name) {
+      var module = _get(BaseTheme.prototype.__proto__ || Object.getPrototypeOf(BaseTheme.prototype), 'addModule', this).call(this, name);
+      if (name === 'toolbar') {
+        this.extendToolbar(module);
+      }
+      return module;
+    }
+  }, {
+    key: 'buildButtons',
+    value: function buildButtons(buttons, icons) {
+      buttons.forEach(function (button) {
+        var className = button.getAttribute('class') || '';
+        className.split(/\s+/).forEach(function (name) {
+          if (!name.startsWith('ql-')) return;
+          name = name.slice('ql-'.length);
+          if (icons[name] == null) return;
+          if (name === 'direction') {
+            button.innerHTML = icons[name][''] + icons[name]['rtl'];
+          } else if (typeof icons[name] === 'string') {
+            button.innerHTML = icons[name];
+          } else {
+            var value = button.value || '';
+            if (value != null && icons[name][value]) {
+              button.innerHTML = icons[name][value];
+            }
+          }
+        });
+      });
+    }
+  }, {
+    key: 'buildPickers',
+    value: function buildPickers(selects, icons) {
+      var _this2 = this;
+
+      this.pickers = selects.map(function (select) {
+        if (select.classList.contains('ql-align')) {
+          if (select.querySelector('option') == null) {
+            fillSelect(select, ALIGNS);
+          }
+          return new _iconPicker2.default(select, icons.align);
+        } else if (select.classList.contains('ql-background') || select.classList.contains('ql-color')) {
+          var format = select.classList.contains('ql-background') ? 'background' : 'color';
+          if (select.querySelector('option') == null) {
+            fillSelect(select, COLORS, format === 'background' ? '#ffffff' : '#000000');
+          }
+          return new _colorPicker2.default(select, icons[format]);
+        } else {
+          if (select.querySelector('option') == null) {
+            if (select.classList.contains('ql-font')) {
+              fillSelect(select, FONTS);
+            } else if (select.classList.contains('ql-header')) {
+              fillSelect(select, HEADERS);
+            } else if (select.classList.contains('ql-size')) {
+              fillSelect(select, SIZES);
+            }
+          }
+          return new _picker2.default(select);
+        }
+      });
+      var update = function update() {
+        _this2.pickers.forEach(function (picker) {
+          picker.update();
+        });
+      };
+      this.quill.on(_emitter2.default.events.EDITOR_CHANGE, update);
+    }
+  }]);
+
+  return BaseTheme;
+}(_theme2.default);
+
+BaseTheme.DEFAULTS = (0, _extend2.default)(true, {}, _theme2.default.DEFAULTS, {
+  modules: {
+    toolbar: {
+      handlers: {
+        formula: function formula() {
+          this.quill.theme.tooltip.edit('formula');
+        },
+        image: function image() {
+          var _this3 = this;
+
+          var fileInput = this.container.querySelector('input.ql-image[type=file]');
+          if (fileInput == null) {
+            fileInput = document.createElement('input');
+            fileInput.setAttribute('type', 'file');
+            fileInput.setAttribute('accept', 'image/png, image/gif, image/jpeg, image/bmp, image/x-icon');
+            fileInput.classList.add('ql-image');
+            fileInput.addEventListener('change', function () {
+              if (fileInput.files != null && fileInput.files[0] != null) {
+                var reader = new FileReader();
+                reader.onload = function (e) {
+                  var range = _this3.quill.getSelection(true);
+                  _this3.quill.updateContents(new _quillDelta2.default().retain(range.index).delete(range.length).insert({ image: e.target.result }), _emitter2.default.sources.USER);
+                  _this3.quill.setSelection(range.index + 1, _emitter2.default.sources.SILENT);
+                  fileInput.value = "";
+                };
+                reader.readAsDataURL(fileInput.files[0]);
+              }
+            });
+            this.container.appendChild(fileInput);
+          }
+          fileInput.click();
+        },
+        video: function video() {
+          this.quill.theme.tooltip.edit('video');
+        }
+      }
+    }
+  }
+});
+
+var BaseTooltip = function (_Tooltip) {
+  _inherits(BaseTooltip, _Tooltip);
+
+  function BaseTooltip(quill, boundsContainer) {
+    _classCallCheck(this, BaseTooltip);
+
+    var _this4 = _possibleConstructorReturn(this, (BaseTooltip.__proto__ || Object.getPrototypeOf(BaseTooltip)).call(this, quill, boundsContainer));
+
+    _this4.textbox = _this4.root.querySelector('input[type="text"]');
+    _this4.listen();
+    return _this4;
+  }
+
+  _createClass(BaseTooltip, [{
+    key: 'listen',
+    value: function listen() {
+      var _this5 = this;
+
+      this.textbox.addEventListener('keydown', function (event) {
+        if (_keyboard2.default.match(event, 'enter')) {
+          _this5.save();
+          event.preventDefault();
+        } else if (_keyboard2.default.match(event, 'escape')) {
+          _this5.cancel();
+          event.preventDefault();
+        }
+      });
+    }
+  }, {
+    key: 'cancel',
+    value: function cancel() {
+      this.hide();
+    }
+  }, {
+    key: 'edit',
+    value: function edit() {
+      var mode = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'link';
+      var preview = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
+
+      this.root.classList.remove('ql-hidden');
+      this.root.classList.add('ql-editing');
+      if (preview != null) {
+        this.textbox.value = preview;
+      } else if (mode !== this.root.getAttribute('data-mode')) {
+        this.textbox.value = '';
+      }
+      this.position(this.quill.getBounds(this.quill.selection.savedRange));
+      this.textbox.select();
+      this.textbox.setAttribute('placeholder', this.textbox.getAttribute('data-' + mode) || '');
+      this.root.setAttribute('data-mode', mode);
+    }
+  }, {
+    key: 'restoreFocus',
+    value: function restoreFocus() {
+      var scrollTop = this.quill.scrollingContainer.scrollTop;
+      this.quill.focus();
+      this.quill.scrollingContainer.scrollTop = scrollTop;
+    }
+  }, {
+    key: 'save',
+    value: function save() {
+      var value = this.textbox.value;
+      switch (this.root.getAttribute('data-mode')) {
+        case 'link':
+          {
+            var scrollTop = this.quill.root.scrollTop;
+            if (this.linkRange) {
+              this.quill.formatText(this.linkRange, 'link', value, _emitter2.default.sources.USER);
+              delete this.linkRange;
+            } else {
+              this.restoreFocus();
+              this.quill.format('link', value, _emitter2.default.sources.USER);
+            }
+            this.quill.root.scrollTop = scrollTop;
+            break;
+          }
+        case 'video':
+          {
+            value = extractVideoUrl(value);
+          } // eslint-disable-next-line no-fallthrough
+        case 'formula':
+          {
+            if (!value) break;
+            var range = this.quill.getSelection(true);
+            if (range != null) {
+              var index = range.index + range.length;
+              this.quill.insertEmbed(index, this.root.getAttribute('data-mode'), value, _emitter2.default.sources.USER);
+              if (this.root.getAttribute('data-mode') === 'formula') {
+                this.quill.insertText(index + 1, ' ', _emitter2.default.sources.USER);
+              }
+              this.quill.setSelection(index + 2, _emitter2.default.sources.USER);
+            }
+            break;
+          }
+        default:
+      }
+      this.textbox.value = '';
+      this.hide();
+    }
+  }]);
+
+  return BaseTooltip;
+}(_tooltip2.default);
+
+function extractVideoUrl(url) {
+  var match = url.match(/^(?:(https?):\/\/)?(?:(?:www|m)\.)?youtube\.com\/watch.*v=([a-zA-Z0-9_-]+)/) || url.match(/^(?:(https?):\/\/)?(?:(?:www|m)\.)?youtu\.be\/([a-zA-Z0-9_-]+)/);
+  if (match) {
+    return (match[1] || 'https') + '://www.youtube.com/embed/' + match[2] + '?showinfo=0';
+  }
+  if (match = url.match(/^(?:(https?):\/\/)?(?:www\.)?vimeo\.com\/(\d+)/)) {
+    // eslint-disable-line no-cond-assign
+    return (match[1] || 'https') + '://player.vimeo.com/video/' + match[2] + '/';
+  }
+  return url;
+}
+
+function fillSelect(select, values) {
+  var defaultValue = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
+
+  values.forEach(function (value) {
+    var option = document.createElement('option');
+    if (value === defaultValue) {
+      option.setAttribute('selected', 'selected');
+    } else {
+      option.setAttribute('value', value);
+    }
+    select.appendChild(option);
+  });
+}
+
+exports.BaseTooltip = BaseTooltip;
+exports.default = BaseTheme;
+
+/***/ }),
+/* 44 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", { value: true });
+var LinkedList = /** @class */ (function () {
+    function LinkedList() {
+        this.head = this.tail = null;
+        this.length = 0;
+    }
+    LinkedList.prototype.append = function () {
+        var nodes = [];
+        for (var _i = 0; _i < arguments.length; _i++) {
+            nodes[_i] = arguments[_i];
+        }
+        this.insertBefore(nodes[0], null);
+        if (nodes.length > 1) {
+            this.append.apply(this, nodes.slice(1));
+        }
+    };
+    LinkedList.prototype.contains = function (node) {
+        var cur, next = this.iterator();
+        while ((cur = next())) {
+            if (cur === node)
+                return true;
+        }
+        return false;
+    };
+    LinkedList.prototype.insertBefore = function (node, refNode) {
+        if (!node)
+            return;
+        node.next = refNode;
+        if (refNode != null) {
+            node.prev = refNode.prev;
+            if (refNode.prev != null) {
+                refNode.prev.next = node;
+            }
+            refNode.prev = node;
+            if (refNode === this.head) {
+                this.head = node;
+            }
+        }
+        else if (this.tail != null) {
+            this.tail.next = node;
+            node.prev = this.tail;
+            this.tail = node;
+        }
+        else {
+            node.prev = null;
+            this.head = this.tail = node;
+        }
+        this.length += 1;
+    };
+    LinkedList.prototype.offset = function (target) {
+        var index = 0, cur = this.head;
+        while (cur != null) {
+            if (cur === target)
+                return index;
+            index += cur.length();
+            cur = cur.next;
+        }
+        return -1;
+    };
+    LinkedList.prototype.remove = function (node) {
+        if (!this.contains(node))
+            return;
+        if (node.prev != null)
+            node.prev.next = node.next;
+        if (node.next != null)
+            node.next.prev = node.prev;
+        if (node === this.head)
+            this.head = node.next;
+        if (node === this.tail)
+            this.tail = node.prev;
+        this.length -= 1;
+    };
+    LinkedList.prototype.iterator = function (curNode) {
+        if (curNode === void 0) { curNode = this.head; }
+        // TODO use yield when we can
+        return function () {
+            var ret = curNode;
+            if (curNode != null)
+                curNode = curNode.next;
+            return ret;
+        };
+    };
+    LinkedList.prototype.find = function (index, inclusive) {
+        if (inclusive === void 0) { inclusive = false; }
+        var cur, next = this.iterator();
+        while ((cur = next())) {
+            var length = cur.length();
+            if (index < length ||
+                (inclusive && index === length && (cur.next == null || cur.next.length() !== 0))) {
+                return [cur, index];
+            }
+            index -= length;
+        }
+        return [null, 0];
+    };
+    LinkedList.prototype.forEach = function (callback) {
+        var cur, next = this.iterator();
+        while ((cur = next())) {
+            callback(cur);
+        }
+    };
+    LinkedList.prototype.forEachAt = function (index, length, callback) {
+        if (length <= 0)
+            return;
+        var _a = this.find(index), startNode = _a[0], offset = _a[1];
+        var cur, curIndex = index - offset, next = this.iterator(startNode);
+        while ((cur = next()) && curIndex < index + length) {
+            var curLength = cur.length();
+            if (index > curIndex) {
+                callback(cur, index - curIndex, Math.min(length, curIndex + curLength - index));
+            }
+            else {
+                callback(cur, 0, Math.min(curLength, index + length - curIndex));
+            }
+            curIndex += curLength;
+        }
+    };
+    LinkedList.prototype.map = function (callback) {
+        return this.reduce(function (memo, cur) {
+            memo.push(callback(cur));
+            return memo;
+        }, []);
+    };
+    LinkedList.prototype.reduce = function (callback, memo) {
+        var cur, next = this.iterator();
+        while ((cur = next())) {
+            memo = callback(memo, cur);
+        }
+        return memo;
+    };
+    return LinkedList;
+}());
+exports.default = LinkedList;
+
+
+/***/ }),
+/* 45 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+var __extends = (this && this.__extends) || (function () {
+    var extendStatics = Object.setPrototypeOf ||
+        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
+        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
+    return function (d, b) {
+        extendStatics(d, b);
+        function __() { this.constructor = d; }
+        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+    };
+})();
+Object.defineProperty(exports, "__esModule", { value: true });
+var container_1 = __webpack_require__(17);
+var Registry = __webpack_require__(1);
+var OBSERVER_CONFIG = {
+    attributes: true,
+    characterData: true,
+    characterDataOldValue: true,
+    childList: true,
+    subtree: true,
+};
+var MAX_OPTIMIZE_ITERATIONS = 100;
+var ScrollBlot = /** @class */ (function (_super) {
+    __extends(ScrollBlot, _super);
+    function ScrollBlot(node) {
+        var _this = _super.call(this, node) || this;
+        _this.scroll = _this;
+        _this.observer = new MutationObserver(function (mutations) {
+            _this.update(mutations);
+        });
+        _this.observer.observe(_this.domNode, OBSERVER_CONFIG);
+        _this.attach();
+        return _this;
+    }
+    ScrollBlot.prototype.detach = function () {
+        _super.prototype.detach.call(this);
+        this.observer.disconnect();
+    };
+    ScrollBlot.prototype.deleteAt = function (index, length) {
+        this.update();
+        if (index === 0 && length === this.length()) {
+            this.children.forEach(function (child) {
+                child.remove();
+            });
+        }
+        else {
+            _super.prototype.deleteAt.call(this, index, length);
+        }
+    };
+    ScrollBlot.prototype.formatAt = function (index, length, name, value) {
+        this.update();
+        _super.prototype.formatAt.call(this, index, length, name, value);
+    };
+    ScrollBlot.prototype.insertAt = function (index, value, def) {
+        this.update();
+        _super.prototype.insertAt.call(this, index, value, def);
+    };
+    ScrollBlot.prototype.optimize = function (mutations, context) {
+        var _this = this;
+        if (mutations === void 0) { mutations = []; }
+        if (context === void 0) { context = {}; }
+        _super.prototype.optimize.call(this, context);
+        // We must modify mutations directly, cannot make copy and then modify
+        var records = [].slice.call(this.observer.takeRecords());
+        // Array.push currently seems to be implemented by a non-tail recursive function
+        // so we cannot just mutations.push.apply(mutations, this.observer.takeRecords());
+        while (records.length > 0)
+            mutations.push(records.pop());
+        // TODO use WeakMap
+        var mark = function (blot, markParent) {
+            if (markParent === void 0) { markParent = true; }
+            if (blot == null || blot === _this)
+                return;
+            if (blot.domNode.parentNode == null)
+                return;
+            // @ts-ignore
+            if (blot.domNode[Registry.DATA_KEY].mutations == null) {
+                // @ts-ignore
+                blot.domNode[Registry.DATA_KEY].mutations = [];
+            }
+            if (markParent)
+                mark(blot.parent);
+        };
+        var optimize = function (blot) {
+            // Post-order traversal
+            if (
+            // @ts-ignore
+            blot.domNode[Registry.DATA_KEY] == null ||
+                // @ts-ignore
+                blot.domNode[Registry.DATA_KEY].mutations == null) {
+                return;
+            }
+            if (blot instanceof container_1.default) {
+                blot.children.forEach(optimize);
+            }
+            blot.optimize(context);
+        };
+        var remaining = mutations;
+        for (var i = 0; remaining.length > 0; i += 1) {
+            if (i >= MAX_OPTIMIZE_ITERATIONS) {
+                throw new Error('[Parchment] Maximum optimize iterations reached');
+            }
+            remaining.forEach(function (mutation) {
+                var blot = Registry.find(mutation.target, true);
+                if (blot == null)
+                    return;
+                if (blot.domNode === mutation.target) {
+                    if (mutation.type === 'childList') {
+                        mark(Registry.find(mutation.previousSibling, false));
+                        [].forEach.call(mutation.addedNodes, function (node) {
+                            var child = Registry.find(node, false);
+                            mark(child, false);
+                            if (child instanceof container_1.default) {
+                                child.children.forEach(function (grandChild) {
+                                    mark(grandChild, false);
+                                });
+                            }
+                        });
+                    }
+                    else if (mutation.type === 'attributes') {
+                        mark(blot.prev);
+                    }
+                }
+                mark(blot);
+            });
+            this.children.forEach(optimize);
+            remaining = [].slice.call(this.observer.takeRecords());
+            records = remaining.slice();
+            while (records.length > 0)
+                mutations.push(records.pop());
+        }
+    };
+    ScrollBlot.prototype.update = function (mutations, context) {
+        var _this = this;
+        if (context === void 0) { context = {}; }
+        mutations = mutations || this.observer.takeRecords();
+        // TODO use WeakMap
+        mutations
+            .map(function (mutation) {
+            var blot = Registry.find(mutation.target, true);
+            if (blot == null)
+                return null;
+            // @ts-ignore
+            if (blot.domNode[Registry.DATA_KEY].mutations == null) {
+                // @ts-ignore
+                blot.domNode[Registry.DATA_KEY].mutations = [mutation];
+                return blot;
+            }
+            else {
+                // @ts-ignore
+                blot.domNode[Registry.DATA_KEY].mutations.push(mutation);
+                return null;
+            }
+        })
+            .forEach(function (blot) {
+            if (blot == null ||
+                blot === _this ||
+                //@ts-ignore
+                blot.domNode[Registry.DATA_KEY] == null)
+                return;
+            // @ts-ignore
+            blot.update(blot.domNode[Registry.DATA_KEY].mutations || [], context);
+        });
+        // @ts-ignore
+        if (this.domNode[Registry.DATA_KEY].mutations != null) {
+            // @ts-ignore
+            _super.prototype.update.call(this, this.domNode[Registry.DATA_KEY].mutations, context);
+        }
+        this.optimize(mutations, context);
+    };
+    ScrollBlot.blotName = 'scroll';
+    ScrollBlot.defaultChild = 'block';
+    ScrollBlot.scope = Registry.Scope.BLOCK_BLOT;
+    ScrollBlot.tagName = 'DIV';
+    return ScrollBlot;
+}(container_1.default));
+exports.default = ScrollBlot;
+
+
+/***/ }),
+/* 46 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+var __extends = (this && this.__extends) || (function () {
+    var extendStatics = Object.setPrototypeOf ||
+        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
+        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
+    return function (d, b) {
+        extendStatics(d, b);
+        function __() { this.constructor = d; }
+        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+    };
+})();
+Object.defineProperty(exports, "__esModule", { value: true });
+var format_1 = __webpack_require__(18);
+var Registry = __webpack_require__(1);
+// Shallow object comparison
+function isEqual(obj1, obj2) {
+    if (Object.keys(obj1).length !== Object.keys(obj2).length)
+        return false;
+    // @ts-ignore
+    for (var prop in obj1) {
+        // @ts-ignore
+        if (obj1[prop] !== obj2[prop])
+            return false;
+    }
+    return true;
+}
+var InlineBlot = /** @class */ (function (_super) {
+    __extends(InlineBlot, _super);
+    function InlineBlot() {
+        return _super !== null && _super.apply(this, arguments) || this;
+    }
+    InlineBlot.formats = function (domNode) {
+        if (domNode.tagName === InlineBlot.tagName)
+            return undefined;
+        return _super.formats.call(this, domNode);
+    };
+    InlineBlot.prototype.format = function (name, value) {
+        var _this = this;
+        if (name === this.statics.blotName && !value) {
+            this.children.forEach(function (child) {
+                if (!(child instanceof format_1.default)) {
+                    child = child.wrap(InlineBlot.blotName, true);
+                }
+                _this.attributes.copy(child);
+            });
+            this.unwrap();
+        }
+        else {
+            _super.prototype.format.call(this, name, value);
+        }
+    };
+    InlineBlot.prototype.formatAt = function (index, length, name, value) {
+        if (this.formats()[name] != null || Registry.query(name, Registry.Scope.ATTRIBUTE)) {
+            var blot = this.isolate(index, length);
+            blot.format(name, value);
+        }
+        else {
+            _super.prototype.formatAt.call(this, index, length, name, value);
+        }
+    };
+    InlineBlot.prototype.optimize = function (context) {
+        _super.prototype.optimize.call(this, context);
+        var formats = this.formats();
+        if (Object.keys(formats).length === 0) {
+            return this.unwrap(); // unformatted span
+        }
+        var next = this.next;
+        if (next instanceof InlineBlot && next.prev === this && isEqual(formats, next.formats())) {
+            next.moveChildren(this);
+            next.remove();
+        }
+    };
+    InlineBlot.blotName = 'inline';
+    InlineBlot.scope = Registry.Scope.INLINE_BLOT;
+    InlineBlot.tagName = 'SPAN';
+    return InlineBlot;
+}(format_1.default));
+exports.default = InlineBlot;
+
+
+/***/ }),
+/* 47 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+var __extends = (this && this.__extends) || (function () {
+    var extendStatics = Object.setPrototypeOf ||
+        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
+        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
+    return function (d, b) {
+        extendStatics(d, b);
+        function __() { this.constructor = d; }
+        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+    };
+})();
+Object.defineProperty(exports, "__esModule", { value: true });
+var format_1 = __webpack_require__(18);
+var Registry = __webpack_require__(1);
+var BlockBlot = /** @class */ (function (_super) {
+    __extends(BlockBlot, _super);
+    function BlockBlot() {
+        return _super !== null && _super.apply(this, arguments) || this;
+    }
+    BlockBlot.formats = function (domNode) {
+        var tagName = Registry.query(BlockBlot.blotName).tagName;
+        if (domNode.tagName === tagName)
+            return undefined;
+        return _super.formats.call(this, domNode);
+    };
+    BlockBlot.prototype.format = function (name, value) {
+        if (Registry.query(name, Registry.Scope.BLOCK) == null) {
+            return;
+        }
+        else if (name === this.statics.blotName && !value) {
+            this.replaceWith(BlockBlot.blotName);
+        }
+        else {
+            _super.prototype.format.call(this, name, value);
+        }
+    };
+    BlockBlot.prototype.formatAt = function (index, length, name, value) {
+        if (Registry.query(name, Registry.Scope.BLOCK) != null) {
+            this.format(name, value);
+        }
+        else {
+            _super.prototype.formatAt.call(this, index, length, name, value);
+        }
+    };
+    BlockBlot.prototype.insertAt = function (index, value, def) {
+        if (def == null || Registry.query(value, Registry.Scope.INLINE) != null) {
+            // Insert text or inline
+            _super.prototype.insertAt.call(this, index, value, def);
+        }
+        else {
+            var after = this.split(index);
+            var blot = Registry.create(value, def);
+            after.parent.insertBefore(blot, after);
+        }
+    };
+    BlockBlot.prototype.update = function (mutations, context) {
+        if (navigator.userAgent.match(/Trident/)) {
+            this.build();
+        }
+        else {
+            _super.prototype.update.call(this, mutations, context);
+        }
+    };
+    BlockBlot.blotName = 'block';
+    BlockBlot.scope = Registry.Scope.BLOCK_BLOT;
+    BlockBlot.tagName = 'P';
+    return BlockBlot;
+}(format_1.default));
+exports.default = BlockBlot;
+
+
+/***/ }),
+/* 48 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+var __extends = (this && this.__extends) || (function () {
+    var extendStatics = Object.setPrototypeOf ||
+        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
+        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
+    return function (d, b) {
+        extendStatics(d, b);
+        function __() { this.constructor = d; }
+        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+    };
+})();
+Object.defineProperty(exports, "__esModule", { value: true });
+var leaf_1 = __webpack_require__(19);
+var EmbedBlot = /** @class */ (function (_super) {
+    __extends(EmbedBlot, _super);
+    function EmbedBlot() {
+        return _super !== null && _super.apply(this, arguments) || this;
+    }
+    EmbedBlot.formats = function (domNode) {
+        return undefined;
+    };
+    EmbedBlot.prototype.format = function (name, value) {
+        // super.formatAt wraps, which is what we want in general,
+        // but this allows subclasses to overwrite for formats
+        // that just apply to particular embeds
+        _super.prototype.formatAt.call(this, 0, this.length(), name, value);
+    };
+    EmbedBlot.prototype.formatAt = function (index, length, name, value) {
+        if (index === 0 && length === this.length()) {
+            this.format(name, value);
+        }
+        else {
+            _super.prototype.formatAt.call(this, index, length, name, value);
+        }
+    };
+    EmbedBlot.prototype.formats = function () {
+        return this.statics.formats(this.domNode);
+    };
+    return EmbedBlot;
+}(leaf_1.default));
+exports.default = EmbedBlot;
+
+
+/***/ }),
+/* 49 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+var __extends = (this && this.__extends) || (function () {
+    var extendStatics = Object.setPrototypeOf ||
+        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
+        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
+    return function (d, b) {
+        extendStatics(d, b);
+        function __() { this.constructor = d; }
+        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+    };
+})();
+Object.defineProperty(exports, "__esModule", { value: true });
+var leaf_1 = __webpack_require__(19);
+var Registry = __webpack_require__(1);
+var TextBlot = /** @class */ (function (_super) {
+    __extends(TextBlot, _super);
+    function TextBlot(node) {
+        var _this = _super.call(this, node) || this;
+        _this.text = _this.statics.value(_this.domNode);
+        return _this;
+    }
+    TextBlot.create = function (value) {
+        return document.createTextNode(value);
+    };
+    TextBlot.value = function (domNode) {
+        var text = domNode.data;
+        // @ts-ignore
+        if (text['normalize'])
+            text = text['normalize']();
+        return text;
+    };
+    TextBlot.prototype.deleteAt = function (index, length) {
+        this.domNode.data = this.text = this.text.slice(0, index) + this.text.slice(index + length);
+    };
+    TextBlot.prototype.index = function (node, offset) {
+        if (this.domNode === node) {
+            return offset;
+        }
+        return -1;
+    };
+    TextBlot.prototype.insertAt = function (index, value, def) {
+        if (def == null) {
+            this.text = this.text.slice(0, index) + value + this.text.slice(index);
+            this.domNode.data = this.text;
+        }
+        else {
+            _super.prototype.insertAt.call(this, index, value, def);
+        }
+    };
+    TextBlot.prototype.length = function () {
+        return this.text.length;
+    };
+    TextBlot.prototype.optimize = function (context) {
+        _super.prototype.optimize.call(this, context);
+        this.text = this.statics.value(this.domNode);
+        if (this.text.length === 0) {
+            this.remove();
+        }
+        else if (this.next instanceof TextBlot && this.next.prev === this) {
+            this.insertAt(this.length(), this.next.value());
+            this.next.remove();
+        }
+    };
+    TextBlot.prototype.position = function (index, inclusive) {
+        if (inclusive === void 0) { inclusive = false; }
+        return [this.domNode, index];
+    };
+    TextBlot.prototype.split = function (index, force) {
+        if (force === void 0) { force = false; }
+        if (!force) {
+            if (index === 0)
+                return this;
+            if (index === this.length())
+                return this.next;
+        }
+        var after = Registry.create(this.domNode.splitText(index));
+        this.parent.insertBefore(after, this.next);
+        this.text = this.statics.value(this.domNode);
+        return after;
+    };
+    TextBlot.prototype.update = function (mutations, context) {
+        var _this = this;
+        if (mutations.some(function (mutation) {
+            return mutation.type === 'characterData' && mutation.target === _this.domNode;
+        })) {
+            this.text = this.statics.value(this.domNode);
+        }
+    };
+    TextBlot.prototype.value = function () {
+        return this.text;
+    };
+    TextBlot.blotName = 'text';
+    TextBlot.scope = Registry.Scope.INLINE_BLOT;
+    return TextBlot;
+}(leaf_1.default));
+exports.default = TextBlot;
+
+
+/***/ }),
+/* 50 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var elem = document.createElement('div');
+elem.classList.toggle('test-class', false);
+if (elem.classList.contains('test-class')) {
+  var _toggle = DOMTokenList.prototype.toggle;
+  DOMTokenList.prototype.toggle = function (token, force) {
+    if (arguments.length > 1 && !this.contains(token) === !force) {
+      return force;
+    } else {
+      return _toggle.call(this, token);
+    }
+  };
+}
+
+if (!String.prototype.startsWith) {
+  String.prototype.startsWith = function (searchString, position) {
+    position = position || 0;
+    return this.substr(position, searchString.length) === searchString;
+  };
+}
+
+if (!String.prototype.endsWith) {
+  String.prototype.endsWith = function (searchString, position) {
+    var subjectString = this.toString();
+    if (typeof position !== 'number' || !isFinite(position) || Math.floor(position) !== position || position > subjectString.length) {
+      position = subjectString.length;
+    }
+    position -= searchString.length;
+    var lastIndex = subjectString.indexOf(searchString, position);
+    return lastIndex !== -1 && lastIndex === position;
+  };
+}
+
+if (!Array.prototype.find) {
+  Object.defineProperty(Array.prototype, "find", {
+    value: function value(predicate) {
+      if (this === null) {
+        throw new TypeError('Array.prototype.find called on null or undefined');
+      }
+      if (typeof predicate !== 'function') {
+        throw new TypeError('predicate must be a function');
+      }
+      var list = Object(this);
+      var length = list.length >>> 0;
+      var thisArg = arguments[1];
+      var value;
+
+      for (var i = 0; i < length; i++) {
+        value = list[i];
+        if (predicate.call(thisArg, value, i, list)) {
+          return value;
+        }
+      }
+      return undefined;
+    }
+  });
+}
+
+document.addEventListener("DOMContentLoaded", function () {
+  // Disable resizing in Firefox
+  document.execCommand("enableObjectResizing", false, false);
+  // Disable automatic linkifying in IE11
+  document.execCommand("autoUrlDetect", false, false);
+});
+
+/***/ }),
+/* 51 */
+/***/ (function(module, exports) {
+
+/**
+ * This library modifies the diff-patch-match library by Neil Fraser
+ * by removing the patch and match functionality and certain advanced
+ * options in the diff function. The original license is as follows:
+ *
+ * ===
+ *
+ * Diff Match and Patch
+ *
+ * Copyright 2006 Google Inc.
+ * http://code.google.com/p/google-diff-match-patch/
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+/**
+ * The data structure representing a diff is an array of tuples:
+ * [[DIFF_DELETE, 'Hello'], [DIFF_INSERT, 'Goodbye'], [DIFF_EQUAL, ' world.']]
+ * which means: delete 'Hello', add 'Goodbye' and keep ' world.'
+ */
+var DIFF_DELETE = -1;
+var DIFF_INSERT = 1;
+var DIFF_EQUAL = 0;
+
+
+/**
+ * Find the differences between two texts.  Simplifies the problem by stripping
+ * any common prefix or suffix off the texts before diffing.
+ * @param {string} text1 Old string to be diffed.
+ * @param {string} text2 New string to be diffed.
+ * @param {Int} cursor_pos Expected edit position in text1 (optional)
+ * @return {Array} Array of diff tuples.
+ */
+function diff_main(text1, text2, cursor_pos) {
+  // Check for equality (speedup).
+  if (text1 == text2) {
+    if (text1) {
+      return [[DIFF_EQUAL, text1]];
+    }
+    return [];
+  }
+
+  // Check cursor_pos within bounds
+  if (cursor_pos < 0 || text1.length < cursor_pos) {
+    cursor_pos = null;
+  }
+
+  // Trim off common prefix (speedup).
+  var commonlength = diff_commonPrefix(text1, text2);
+  var commonprefix = text1.substring(0, commonlength);
+  text1 = text1.substring(commonlength);
+  text2 = text2.substring(commonlength);
+
+  // Trim off common suffix (speedup).
+  commonlength = diff_commonSuffix(text1, text2);
+  var commonsuffix = text1.substring(text1.length - commonlength);
+  text1 = text1.substring(0, text1.length - commonlength);
+  text2 = text2.substring(0, text2.length - commonlength);
+
+  // Compute the diff on the middle block.
+  var diffs = diff_compute_(text1, text2);
+
+  // Restore the prefix and suffix.
+  if (commonprefix) {
+    diffs.unshift([DIFF_EQUAL, commonprefix]);
+  }
+  if (commonsuffix) {
+    diffs.push([DIFF_EQUAL, commonsuffix]);
+  }
+  diff_cleanupMerge(diffs);
+  if (cursor_pos != null) {
+    diffs = fix_cursor(diffs, cursor_pos);
+  }
+  diffs = fix_emoji(diffs);
+  return diffs;
+};
+
+
+/**
+ * Find the differences between two texts.  Assumes that the texts do not
+ * have any common prefix or suffix.
+ * @param {string} text1 Old string to be diffed.
+ * @param {string} text2 New string to be diffed.
+ * @return {Array} Array of diff tuples.
+ */
+function diff_compute_(text1, text2) {
+  var diffs;
+
+  if (!text1) {
+    // Just add some text (speedup).
+    return [[DIFF_INSERT, text2]];
+  }
+
+  if (!text2) {
+    // Just delete some text (speedup).
+    return [[DIFF_DELETE, text1]];
+  }
+
+  var longtext = text1.length > text2.length ? text1 : text2;
+  var shorttext = text1.length > text2.length ? text2 : text1;
+  var i = longtext.indexOf(shorttext);
+  if (i != -1) {
+    // Shorter text is inside the longer text (speedup).
+    diffs = [[DIFF_INSERT, longtext.substring(0, i)],
+             [DIFF_EQUAL, shorttext],
+             [DIFF_INSERT, longtext.substring(i + shorttext.length)]];
+    // Swap insertions for deletions if diff is reversed.
+    if (text1.length > text2.length) {
+      diffs[0][0] = diffs[2][0] = DIFF_DELETE;
+    }
+    return diffs;
+  }
+
+  if (shorttext.length == 1) {
+    // Single character string.
+    // After the previous speedup, the character can't be an equality.
+    return [[DIFF_DELETE, text1], [DIFF_INSERT, text2]];
+  }
+
+  // Check to see if the problem can be split in two.
+  var hm = diff_halfMatch_(text1, text2);
+  if (hm) {
+    // A half-match was found, sort out the return data.
+    var text1_a = hm[0];
+    var text1_b = hm[1];
+    var text2_a = hm[2];
+    var text2_b = hm[3];
+    var mid_common = hm[4];
+    // Send both pairs off for separate processing.
+    var diffs_a = diff_main(text1_a, text2_a);
+    var diffs_b = diff_main(text1_b, text2_b);
+    // Merge the results.
+    return diffs_a.concat([[DIFF_EQUAL, mid_common]], diffs_b);
+  }
+
+  return diff_bisect_(text1, text2);
+};
+
+
+/**
+ * Find the 'middle snake' of a diff, split the problem in two
+ * and return the recursively constructed diff.
+ * See Myers 1986 paper: An O(ND) Difference Algorithm and Its Variations.
+ * @param {string} text1 Old string to be diffed.
+ * @param {string} text2 New string to be diffed.
+ * @return {Array} Array of diff tuples.
+ * @private
+ */
+function diff_bisect_(text1, text2) {
+  // Cache the text lengths to prevent multiple calls.
+  var text1_length = text1.length;
+  var text2_length = text2.length;
+  var max_d = Math.ceil((text1_length + text2_length) / 2);
+  var v_offset = max_d;
+  var v_length = 2 * max_d;
+  var v1 = new Array(v_length);
+  var v2 = new Array(v_length);
+  // Setting all elements to -1 is faster in Chrome & Firefox than mixing
+  // integers and undefined.
+  for (var x = 0; x < v_length; x++) {
+    v1[x] = -1;
+    v2[x] = -1;
+  }
+  v1[v_offset + 1] = 0;
+  v2[v_offset + 1] = 0;
+  var delta = text1_length - text2_length;
+  // If the total number of characters is odd, then the front path will collide
+  // with the reverse path.
+  var front = (delta % 2 != 0);
+  // Offsets for start and end of k loop.
+  // Prevents mapping of space beyond the grid.
+  var k1start = 0;
+  var k1end = 0;
+  var k2start = 0;
+  var k2end = 0;
+  for (var d = 0; d < max_d; d++) {
+    // Walk the front path one step.
+    for (var k1 = -d + k1start; k1 <= d - k1end; k1 += 2) {
+      var k1_offset = v_offset + k1;
+      var x1;
+      if (k1 == -d || (k1 != d && v1[k1_offset - 1] < v1[k1_offset + 1])) {
+        x1 = v1[k1_offset + 1];
+      } else {
+        x1 = v1[k1_offset - 1] + 1;
+      }
+      var y1 = x1 - k1;
+      while (x1 < text1_length && y1 < text2_length &&
+             text1.charAt(x1) == text2.charAt(y1)) {
+        x1++;
+        y1++;
+      }
+      v1[k1_offset] = x1;
+      if (x1 > text1_length) {
+        // Ran off the right of the graph.
+        k1end += 2;
+      } else if (y1 > text2_length) {
+        // Ran off the bottom of the graph.
+        k1start += 2;
+      } else if (front) {
+        var k2_offset = v_offset + delta - k1;
+        if (k2_offset >= 0 && k2_offset < v_length && v2[k2_offset] != -1) {
+          // Mirror x2 onto top-left coordinate system.
+          var x2 = text1_length - v2[k2_offset];
+          if (x1 >= x2) {
+            // Overlap detected.
+            return diff_bisectSplit_(text1, text2, x1, y1);
+          }
+        }
+      }
+    }
+
+    // Walk the reverse path one step.
+    for (var k2 = -d + k2start; k2 <= d - k2end; k2 += 2) {
+      var k2_offset = v_offset + k2;
+      var x2;
+      if (k2 == -d || (k2 != d && v2[k2_offset - 1] < v2[k2_offset + 1])) {
+        x2 = v2[k2_offset + 1];
+      } else {
+        x2 = v2[k2_offset - 1] + 1;
+      }
+      var y2 = x2 - k2;
+      while (x2 < text1_length && y2 < text2_length &&
+             text1.charAt(text1_length - x2 - 1) ==
+             text2.charAt(text2_length - y2 - 1)) {
+        x2++;
+        y2++;
+      }
+      v2[k2_offset] = x2;
+      if (x2 > text1_length) {
+        // Ran off the left of the graph.
+        k2end += 2;
+      } else if (y2 > text2_length) {
+        // Ran off the top of the graph.
+        k2start += 2;
+      } else if (!front) {
+        var k1_offset = v_offset + delta - k2;
+        if (k1_offset >= 0 && k1_offset < v_length && v1[k1_offset] != -1) {
+          var x1 = v1[k1_offset];
+          var y1 = v_offset + x1 - k1_offset;
+          // Mirror x2 onto top-left coordinate system.
+          x2 = text1_length - x2;
+          if (x1 >= x2) {
+            // Overlap detected.
+            return diff_bisectSplit_(text1, text2, x1, y1);
+          }
+        }
+      }
+    }
+  }
+  // Diff took too long and hit the deadline or
+  // number of diffs equals number of characters, no commonality at all.
+  return [[DIFF_DELETE, text1], [DIFF_INSERT, text2]];
+};
+
+
+/**
+ * Given the location of the 'middle snake', split the diff in two parts
+ * and recurse.
+ * @param {string} text1 Old string to be diffed.
+ * @param {string} text2 New string to be diffed.
+ * @param {number} x Index of split point in text1.
+ * @param {number} y Index of split point in text2.
+ * @return {Array} Array of diff tuples.
+ */
+function diff_bisectSplit_(text1, text2, x, y) {
+  var text1a = text1.substring(0, x);
+  var text2a = text2.substring(0, y);
+  var text1b = text1.substring(x);
+  var text2b = text2.substring(y);
+
+  // Compute both diffs serially.
+  var diffs = diff_main(text1a, text2a);
+  var diffsb = diff_main(text1b, text2b);
+
+  return diffs.concat(diffsb);
+};
+
+
+/**
+ * Determine the common prefix of two strings.
+ * @param {string} text1 First string.
+ * @param {string} text2 Second string.
+ * @return {number} The number of characters common to the start of each
+ *     string.
+ */
+function diff_commonPrefix(text1, text2) {
+  // Quick check for common null cases.
+  if (!text1 || !text2 || text1.charAt(0) != text2.charAt(0)) {
+    return 0;
+  }
+  // Binary search.
+  // Performance analysis: http://neil.fraser.name/news/2007/10/09/
+  var pointermin = 0;
+  var pointermax = Math.min(text1.length, text2.length);
+  var pointermid = pointermax;
+  var pointerstart = 0;
+  while (pointermin < pointermid) {
+    if (text1.substring(pointerstart, pointermid) ==
+        text2.substring(pointerstart, pointermid)) {
+      pointermin = pointermid;
+      pointerstart = pointermin;
+    } else {
+      pointermax = pointermid;
+    }
+    pointermid = Math.floor((pointermax - pointermin) / 2 + pointermin);
+  }
+  return pointermid;
+};
+
+
+/**
+ * Determine the common suffix of two strings.
+ * @param {string} text1 First string.
+ * @param {string} text2 Second string.
+ * @return {number} The number of characters common to the end of each string.
+ */
+function diff_commonSuffix(text1, text2) {
+  // Quick check for common null cases.
+  if (!text1 || !text2 ||
+      text1.charAt(text1.length - 1) != text2.charAt(text2.length - 1)) {
+    return 0;
+  }
+  // Binary search.
+  // Performance analysis: http://neil.fraser.name/news/2007/10/09/
+  var pointermin = 0;
+  var pointermax = Math.min(text1.length, text2.length);
+  var pointermid = pointermax;
+  var pointerend = 0;
+  while (pointermin < pointermid) {
+    if (text1.substring(text1.length - pointermid, text1.length - pointerend) ==
+        text2.substring(text2.length - pointermid, text2.length - pointerend)) {
+      pointermin = pointermid;
+      pointerend = pointermin;
+    } else {
+      pointermax = pointermid;
+    }
+    pointermid = Math.floor((pointermax - pointermin) / 2 + pointermin);
+  }
+  return pointermid;
+};
+
+
+/**
+ * Do the two texts share a substring which is at least half the length of the
+ * longer text?
+ * This speedup can produce non-minimal diffs.
+ * @param {string} text1 First string.
+ * @param {string} text2 Second string.
+ * @return {Array.<string>} Five element Array, containing the prefix of
+ *     text1, the suffix of text1, the prefix of text2, the suffix of
+ *     text2 and the common middle.  Or null if there was no match.
+ */
+function diff_halfMatch_(text1, text2) {
+  var longtext = text1.length > text2.length ? text1 : text2;
+  var shorttext = text1.length > text2.length ? text2 : text1;
+  if (longtext.length < 4 || shorttext.length * 2 < longtext.length) {
+    return null;  // Pointless.
+  }
+
+  /**
+   * Does a substring of shorttext exist within longtext such that the substring
+   * is at least half the length of longtext?
+   * Closure, but does not reference any external variables.
+   * @param {string} longtext Longer string.
+   * @param {string} shorttext Shorter string.
+   * @param {number} i Start index of quarter length substring within longtext.
+   * @return {Array.<string>} Five element Array, containing the prefix of
+   *     longtext, the suffix of longtext, the prefix of shorttext, the suffix
+   *     of shorttext and the common middle.  Or null if there was no match.
+   * @private
+   */
+  function diff_halfMatchI_(longtext, shorttext, i) {
+    // Start with a 1/4 length substring at position i as a seed.
+    var seed = longtext.substring(i, i + Math.floor(longtext.length / 4));
+    var j = -1;
+    var best_common = '';
+    var best_longtext_a, best_longtext_b, best_shorttext_a, best_shorttext_b;
+    while ((j = shorttext.indexOf(seed, j + 1)) != -1) {
+      var prefixLength = diff_commonPrefix(longtext.substring(i),
+                                           shorttext.substring(j));
+      var suffixLength = diff_commonSuffix(longtext.substring(0, i),
+                                           shorttext.substring(0, j));
+      if (best_common.length < suffixLength + prefixLength) {
+        best_common = shorttext.substring(j - suffixLength, j) +
+            shorttext.substring(j, j + prefixLength);
+        best_longtext_a = longtext.substring(0, i - suffixLength);
+        best_longtext_b = longtext.substring(i + prefixLength);
+        best_shorttext_a = shorttext.substring(0, j - suffixLength);
+        best_shorttext_b = shorttext.substring(j + prefixLength);
+      }
+    }
+    if (best_common.length * 2 >= longtext.length) {
+      return [best_longtext_a, best_longtext_b,
+              best_shorttext_a, best_shorttext_b, best_common];
+    } else {
+      return null;
+    }
+  }
+
+  // First check if the second quarter is the seed for a half-match.
+  var hm1 = diff_halfMatchI_(longtext, shorttext,
+                             Math.ceil(longtext.length / 4));
+  // Check again based on the third quarter.
+  var hm2 = diff_halfMatchI_(longtext, shorttext,
+                             Math.ceil(longtext.length / 2));
+  var hm;
+  if (!hm1 && !hm2) {
+    return null;
+  } else if (!hm2) {
+    hm = hm1;
+  } else if (!hm1) {
+    hm = hm2;
+  } else {
+    // Both matched.  Select the longest.
+    hm = hm1[4].length > hm2[4].length ? hm1 : hm2;
+  }
+
+  // A half-match was found, sort out the return data.
+  var text1_a, text1_b, text2_a, text2_b;
+  if (text1.length > text2.length) {
+    text1_a = hm[0];
+    text1_b = hm[1];
+    text2_a = hm[2];
+    text2_b = hm[3];
+  } else {
+    text2_a = hm[0];
+    text2_b = hm[1];
+    text1_a = hm[2];
+    text1_b = hm[3];
+  }
+  var mid_common = hm[4];
+  return [text1_a, text1_b, text2_a, text2_b, mid_common];
+};
+
+
+/**
+ * Reorder and merge like edit sections.  Merge equalities.
+ * Any edit section can move as long as it doesn't cross an equality.
+ * @param {Array} diffs Array of diff tuples.
+ */
+function diff_cleanupMerge(diffs) {
+  diffs.push([DIFF_EQUAL, '']);  // Add a dummy entry at the end.
+  var pointer = 0;
+  var count_delete = 0;
+  var count_insert = 0;
+  var text_delete = '';
+  var text_insert = '';
+  var commonlength;
+  while (pointer < diffs.length) {
+    switch (diffs[pointer][0]) {
+      case DIFF_INSERT:
+        count_insert++;
+        text_insert += diffs[pointer][1];
+        pointer++;
+        break;
+      case DIFF_DELETE:
+        count_delete++;
+        text_delete += diffs[pointer][1];
+        pointer++;
+        break;
+      case DIFF_EQUAL:
+        // Upon reaching an equality, check for prior redundancies.
+        if (count_delete + count_insert > 1) {
+          if (count_delete !== 0 && count_insert !== 0) {
+            // Factor out any common prefixies.
+            commonlength = diff_commonPrefix(text_insert, text_delete);
+            if (commonlength !== 0) {
+              if ((pointer - count_delete - count_insert) > 0 &&
+                  diffs[pointer - count_delete - count_insert - 1][0] ==
+                  DIFF_EQUAL) {
+                diffs[pointer - count_delete - count_insert - 1][1] +=
+                    text_insert.substring(0, commonlength);
+              } else {
+                diffs.splice(0, 0, [DIFF_EQUAL,
+                                    text_insert.substring(0, commonlength)]);
+                pointer++;
+              }
+              text_insert = text_insert.substring(commonlength);
+              text_delete = text_delete.substring(commonlength);
+            }
+            // Factor out any common suffixies.
+            commonlength = diff_commonSuffix(text_insert, text_delete);
+            if (commonlength !== 0) {
+              diffs[pointer][1] = text_insert.substring(text_insert.length -
+                  commonlength) + diffs[pointer][1];
+              text_insert = text_insert.substring(0, text_insert.length -
+                  commonlength);
+              text_delete = text_delete.substring(0, text_delete.length -
+                  commonlength);
+            }
+          }
+          // Delete the offending records and add the merged ones.
+          if (count_delete === 0) {
+            diffs.splice(pointer - count_insert,
+                count_delete + count_insert, [DIFF_INSERT, text_insert]);
+          } else if (count_insert === 0) {
+            diffs.splice(pointer - count_delete,
+                count_delete + count_insert, [DIFF_DELETE, text_delete]);
+          } else {
+            diffs.splice(pointer - count_delete - count_insert,
+                count_delete + count_insert, [DIFF_DELETE, text_delete],
+                [DIFF_INSERT, text_insert]);
+          }
+          pointer = pointer - count_delete - count_insert +
+                    (count_delete ? 1 : 0) + (count_insert ? 1 : 0) + 1;
+        } else if (pointer !== 0 && diffs[pointer - 1][0] == DIFF_EQUAL) {
+          // Merge this equality with the previous one.
+          diffs[pointer - 1][1] += diffs[pointer][1];
+          diffs.splice(pointer, 1);
+        } else {
+          pointer++;
+        }
+        count_insert = 0;
+        count_delete = 0;
+        text_delete = '';
+        text_insert = '';
+        break;
+    }
+  }
+  if (diffs[diffs.length - 1][1] === '') {
+    diffs.pop();  // Remove the dummy entry at the end.
+  }
+
+  // Second pass: look for single edits surrounded on both sides by equalities
+  // which can be shifted sideways to eliminate an equality.
+  // e.g: A<ins>BA</ins>C -> <ins>AB</ins>AC
+  var changes = false;
+  pointer = 1;
+  // Intentionally ignore the first and last element (don't need checking).
+  while (pointer < diffs.length - 1) {
+    if (diffs[pointer - 1][0] == DIFF_EQUAL &&
+        diffs[pointer + 1][0] == DIFF_EQUAL) {
+      // This is a single edit surrounded by equalities.
+      if (diffs[pointer][1].substring(diffs[pointer][1].length -
+          diffs[pointer - 1][1].length) == diffs[pointer - 1][1]) {
+        // Shift the edit over the previous equality.
+        diffs[pointer][1] = diffs[pointer - 1][1] +
+            diffs[pointer][1].substring(0, diffs[pointer][1].length -
+                                        diffs[pointer - 1][1].length);
+        diffs[pointer + 1][1] = diffs[pointer - 1][1] + diffs[pointer + 1][1];
+        diffs.splice(pointer - 1, 1);
+        changes = true;
+      } else if (diffs[pointer][1].substring(0, diffs[pointer + 1][1].length) ==
+          diffs[pointer + 1][1]) {
+        // Shift the edit over the next equality.
+        diffs[pointer - 1][1] += diffs[pointer + 1][1];
+        diffs[pointer][1] =
+            diffs[pointer][1].substring(diffs[pointer + 1][1].length) +
+            diffs[pointer + 1][1];
+        diffs.splice(pointer + 1, 1);
+        changes = true;
+      }
+    }
+    pointer++;
+  }
+  // If shifts were made, the diff needs reordering and another shift sweep.
+  if (changes) {
+    diff_cleanupMerge(diffs);
+  }
+};
+
+
+var diff = diff_main;
+diff.INSERT = DIFF_INSERT;
+diff.DELETE = DIFF_DELETE;
+diff.EQUAL = DIFF_EQUAL;
+
+module.exports = diff;
+
+/*
+ * Modify a diff such that the cursor position points to the start of a change:
+ * E.g.
+ *   cursor_normalize_diff([[DIFF_EQUAL, 'abc']], 1)
+ *     => [1, [[DIFF_EQUAL, 'a'], [DIFF_EQUAL, 'bc']]]
+ *   cursor_normalize_diff([[DIFF_INSERT, 'new'], [DIFF_DELETE, 'xyz']], 2)
+ *     => [2, [[DIFF_INSERT, 'new'], [DIFF_DELETE, 'xy'], [DIFF_DELETE, 'z']]]
+ *
+ * @param {Array} diffs Array of diff tuples
+ * @param {Int} cursor_pos Suggested edit position. Must not be out of bounds!
+ * @return {Array} A tuple [cursor location in the modified diff, modified diff]
+ */
+function cursor_normalize_diff (diffs, cursor_pos) {
+  if (cursor_pos === 0) {
+    return [DIFF_EQUAL, diffs];
+  }
+  for (var current_pos = 0, i = 0; i < diffs.length; i++) {
+    var d = diffs[i];
+    if (d[0] === DIFF_DELETE || d[0] === DIFF_EQUAL) {
+      var next_pos = current_pos + d[1].length;
+      if (cursor_pos === next_pos) {
+        return [i + 1, diffs];
+      } else if (cursor_pos < next_pos) {
+        // copy to prevent side effects
+        diffs = diffs.slice();
+        // split d into two diff changes
+        var split_pos = cursor_pos - current_pos;
+        var d_left = [d[0], d[1].slice(0, split_pos)];
+        var d_right = [d[0], d[1].slice(split_pos)];
+        diffs.splice(i, 1, d_left, d_right);
+        return [i + 1, diffs];
+      } else {
+        current_pos = next_pos;
+      }
+    }
+  }
+  throw new Error('cursor_pos is out of bounds!')
+}
+
+/*
+ * Modify a diff such that the edit position is "shifted" to the proposed edit location (cursor_position).
+ *
+ * Case 1)
+ *   Check if a naive shift is possible:
+ *     [0, X], [ 1, Y] -> [ 1, Y], [0, X]    (if X + Y === Y + X)
+ *     [0, X], [-1, Y] -> [-1, Y], [0, X]    (if X + Y === Y + X) - holds same result
+ * Case 2)
+ *   Check if the following shifts are possible:
+ *     [0, 'pre'], [ 1, 'prefix'] -> [ 1, 'pre'], [0, 'pre'], [ 1, 'fix']
+ *     [0, 'pre'], [-1, 'prefix'] -> [-1, 'pre'], [0, 'pre'], [-1, 'fix']
+ *         ^            ^
+ *         d          d_next
+ *
+ * @param {Array} diffs Array of diff tuples
+ * @param {Int} cursor_pos Suggested edit position. Must not be out of bounds!
+ * @return {Array} Array of diff tuples
+ */
+function fix_cursor (diffs, cursor_pos) {
+  var norm = cursor_normalize_diff(diffs, cursor_pos);
+  var ndiffs = norm[1];
+  var cursor_pointer = norm[0];
+  var d = ndiffs[cursor_pointer];
+  var d_next = ndiffs[cursor_pointer + 1];
+
+  if (d == null) {
+    // Text was deleted from end of original string,
+    // cursor is now out of bounds in new string
+    return diffs;
+  } else if (d[0] !== DIFF_EQUAL) {
+    // A modification happened at the cursor location.
+    // This is the expected outcome, so we can return the original diff.
+    return diffs;
+  } else {
+    if (d_next != null && d[1] + d_next[1] === d_next[1] + d[1]) {
+      // Case 1)
+      // It is possible to perform a naive shift
+      ndiffs.splice(cursor_pointer, 2, d_next, d)
+      return merge_tuples(ndiffs, cursor_pointer, 2)
+    } else if (d_next != null && d_next[1].indexOf(d[1]) === 0) {
+      // Case 2)
+      // d[1] is a prefix of d_next[1]
+      // We can assume that d_next[0] !== 0, since d[0] === 0
+      // Shift edit locations..
+      ndiffs.splice(cursor_pointer, 2, [d_next[0], d[1]], [0, d[1]]);
+      var suffix = d_next[1].slice(d[1].length);
+      if (suffix.length > 0) {
+        ndiffs.splice(cursor_pointer + 2, 0, [d_next[0], suffix]);
+      }
+      return merge_tuples(ndiffs, cursor_pointer, 3)
+    } else {
+      // Not possible to perform any modification
+      return diffs;
+    }
+  }
+}
+
+/*
+ * Check diff did not split surrogate pairs.
+ * Ex. [0, '\uD83D'], [-1, '\uDC36'], [1, '\uDC2F'] -> [-1, '\uD83D\uDC36'], [1, '\uD83D\uDC2F']
+ *     '\uD83D\uDC36' === '🐶', '\uD83D\uDC2F' === '🐯'
+ *
+ * @param {Array} diffs Array of diff tuples
+ * @return {Array} Array of diff tuples
+ */
+function fix_emoji (diffs) {
+  var compact = false;
+  var starts_with_pair_end = function(str) {
+    return str.charCodeAt(0) >= 0xDC00 && str.charCodeAt(0) <= 0xDFFF;
+  }
+  var ends_with_pair_start = function(str) {
+    return str.charCodeAt(str.length-1) >= 0xD800 && str.charCodeAt(str.length-1) <= 0xDBFF;
+  }
+  for (var i = 2; i < diffs.length; i += 1) {
+    if (diffs[i-2][0] === DIFF_EQUAL && ends_with_pair_start(diffs[i-2][1]) &&
+        diffs[i-1][0] === DIFF_DELETE && starts_with_pair_end(diffs[i-1][1]) &&
+        diffs[i][0] === DIFF_INSERT && starts_with_pair_end(diffs[i][1])) {
+      compact = true;
+
+      diffs[i-1][1] = diffs[i-2][1].slice(-1) + diffs[i-1][1];
+      diffs[i][1] = diffs[i-2][1].slice(-1) + diffs[i][1];
+
+      diffs[i-2][1] = diffs[i-2][1].slice(0, -1);
+    }
+  }
+  if (!compact) {
+    return diffs;
+  }
+  var fixed_diffs = [];
+  for (var i = 0; i < diffs.length; i += 1) {
+    if (diffs[i][1].length > 0) {
+      fixed_diffs.push(diffs[i]);
+    }
+  }
+  return fixed_diffs;
+}
+
+/*
+ * Try to merge tuples with their neigbors in a given range.
+ * E.g. [0, 'a'], [0, 'b'] -> [0, 'ab']
+ *
+ * @param {Array} diffs Array of diff tuples.
+ * @param {Int} start Position of the first element to merge (diffs[start] is also merged with diffs[start - 1]).
+ * @param {Int} length Number of consecutive elements to check.
+ * @return {Array} Array of merged diff tuples.
+ */
+function merge_tuples (diffs, start, length) {
+  // Check from (start-1) to (start+length).
+  for (var i = start + length - 1; i >= 0 && i >= start - 1; i--) {
+    if (i + 1 < diffs.length) {
+      var left_d = diffs[i];
+      var right_d = diffs[i+1];
+      if (left_d[0] === right_d[1]) {
+        diffs.splice(i, 2, [left_d[0], left_d[1] + right_d[1]]);
+      }
+    }
+  }
+  return diffs;
+}
+
+
+/***/ }),
+/* 52 */
+/***/ (function(module, exports) {
+
+exports = module.exports = typeof Object.keys === 'function'
+  ? Object.keys : shim;
+
+exports.shim = shim;
+function shim (obj) {
+  var keys = [];
+  for (var key in obj) keys.push(key);
+  return keys;
+}
+
+
+/***/ }),
+/* 53 */
+/***/ (function(module, exports) {
+
+var supportsArgumentsClass = (function(){
+  return Object.prototype.toString.call(arguments)
+})() == '[object Arguments]';
+
+exports = module.exports = supportsArgumentsClass ? supported : unsupported;
+
+exports.supported = supported;
+function supported(object) {
+  return Object.prototype.toString.call(object) == '[object Arguments]';
+};
+
+exports.unsupported = unsupported;
+function unsupported(object){
+  return object &&
+    typeof object == 'object' &&
+    typeof object.length == 'number' &&
+    Object.prototype.hasOwnProperty.call(object, 'callee') &&
+    !Object.prototype.propertyIsEnumerable.call(object, 'callee') ||
+    false;
+};
+
+
+/***/ }),
+/* 54 */
+/***/ (function(module, exports) {
+
+'use strict';
+
+var has = Object.prototype.hasOwnProperty
+  , prefix = '~';
+
+/**
+ * Constructor to create a storage for our `EE` objects.
+ * An `Events` instance is a plain object whose properties are event names.
+ *
+ * @constructor
+ * @api private
+ */
+function Events() {}
+
+//
+// We try to not inherit from `Object.prototype`. In some engines creating an
+// instance in this way is faster than calling `Object.create(null)` directly.
+// If `Object.create(null)` is not supported we prefix the event names with a
+// character to make sure that the built-in object properties are not
+// overridden or used as an attack vector.
+//
+if (Object.create) {
+  Events.prototype = Object.create(null);
+
+  //
+  // This hack is needed because the `__proto__` property is still inherited in
+  // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.
+  //
+  if (!new Events().__proto__) prefix = false;
+}
+
+/**
+ * Representation of a single event listener.
+ *
+ * @param {Function} fn The listener function.
+ * @param {Mixed} context The context to invoke the listener with.
+ * @param {Boolean} [once=false] Specify if the listener is a one-time listener.
+ * @constructor
+ * @api private
+ */
+function EE(fn, context, once) {
+  this.fn = fn;
+  this.context = context;
+  this.once = once || false;
+}
+
+/**
+ * Minimal `EventEmitter` interface that is molded against the Node.js
+ * `EventEmitter` interface.
+ *
+ * @constructor
+ * @api public
+ */
+function EventEmitter() {
+  this._events = new Events();
+  this._eventsCount = 0;
+}
+
+/**
+ * Return an array listing the events for which the emitter has registered
+ * listeners.
+ *
+ * @returns {Array}
+ * @api public
+ */
+EventEmitter.prototype.eventNames = function eventNames() {
+  var names = []
+    , events
+    , name;
+
+  if (this._eventsCount === 0) return names;
+
+  for (name in (events = this._events)) {
+    if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);
+  }
+
+  if (Object.getOwnPropertySymbols) {
+    return names.concat(Object.getOwnPropertySymbols(events));
+  }
+
+  return names;
+};
+
+/**
+ * Return the listeners registered for a given event.
+ *
+ * @param {String|Symbol} event The event name.
+ * @param {Boolean} exists Only check if there are listeners.
+ * @returns {Array|Boolean}
+ * @api public
+ */
+EventEmitter.prototype.listeners = function listeners(event, exists) {
+  var evt = prefix ? prefix + event : event
+    , available = this._events[evt];
+
+  if (exists) return !!available;
+  if (!available) return [];
+  if (available.fn) return [available.fn];
+
+  for (var i = 0, l = available.length, ee = new Array(l); i < l; i++) {
+    ee[i] = available[i].fn;
+  }
+
+  return ee;
+};
+
+/**
+ * Calls each of the listeners registered for a given event.
+ *
+ * @param {String|Symbol} event The event name.
+ * @returns {Boolean} `true` if the event had listeners, else `false`.
+ * @api public
+ */
+EventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {
+  var evt = prefix ? prefix + event : event;
+
+  if (!this._events[evt]) return false;
+
+  var listeners = this._events[evt]
+    , len = arguments.length
+    , args
+    , i;
+
+  if (listeners.fn) {
+    if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);
+
+    switch (len) {
+      case 1: return listeners.fn.call(listeners.context), true;
+      case 2: return listeners.fn.call(listeners.context, a1), true;
+      case 3: return listeners.fn.call(listeners.context, a1, a2), true;
+      case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;
+      case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;
+      case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;
+    }
+
+    for (i = 1, args = new Array(len -1); i < len; i++) {
+      args[i - 1] = arguments[i];
+    }
+
+    listeners.fn.apply(listeners.context, args);
+  } else {
+    var length = listeners.length
+      , j;
+
+    for (i = 0; i < length; i++) {
+      if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);
+
+      switch (len) {
+        case 1: listeners[i].fn.call(listeners[i].context); break;
+        case 2: listeners[i].fn.call(listeners[i].context, a1); break;
+        case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;
+        case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;
+        default:
+          if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {
+            args[j - 1] = arguments[j];
+          }
+
+          listeners[i].fn.apply(listeners[i].context, args);
+      }
+    }
+  }
+
+  return true;
+};
+
+/**
+ * Add a listener for a given event.
+ *
+ * @param {String|Symbol} event The event name.
+ * @param {Function} fn The listener function.
+ * @param {Mixed} [context=this] The context to invoke the listener with.
+ * @returns {EventEmitter} `this`.
+ * @api public
+ */
+EventEmitter.prototype.on = function on(event, fn, context) {
+  var listener = new EE(fn, context || this)
+    , evt = prefix ? prefix + event : event;
+
+  if (!this._events[evt]) this._events[evt] = listener, this._eventsCount++;
+  else if (!this._events[evt].fn) this._events[evt].push(listener);
+  else this._events[evt] = [this._events[evt], listener];
+
+  return this;
+};
+
+/**
+ * Add a one-time listener for a given event.
+ *
+ * @param {String|Symbol} event The event name.
+ * @param {Function} fn The listener function.
+ * @param {Mixed} [context=this] The context to invoke the listener with.
+ * @returns {EventEmitter} `this`.
+ * @api public
+ */
+EventEmitter.prototype.once = function once(event, fn, context) {
+  var listener = new EE(fn, context || this, true)
+    , evt = prefix ? prefix + event : event;
+
+  if (!this._events[evt]) this._events[evt] = listener, this._eventsCount++;
+  else if (!this._events[evt].fn) this._events[evt].push(listener);
+  else this._events[evt] = [this._events[evt], listener];
+
+  return this;
+};
+
+/**
+ * Remove the listeners of a given event.
+ *
+ * @param {String|Symbol} event The event name.
+ * @param {Function} fn Only remove the listeners that match this function.
+ * @param {Mixed} context Only remove the listeners that have this context.
+ * @param {Boolean} once Only remove one-time listeners.
+ * @returns {EventEmitter} `this`.
+ * @api public
+ */
+EventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {
+  var evt = prefix ? prefix + event : event;
+
+  if (!this._events[evt]) return this;
+  if (!fn) {
+    if (--this._eventsCount === 0) this._events = new Events();
+    else delete this._events[evt];
+    return this;
+  }
+
+  var listeners = this._events[evt];
+
+  if (listeners.fn) {
+    if (
+         listeners.fn === fn
+      && (!once || listeners.once)
+      && (!context || listeners.context === context)
+    ) {
+      if (--this._eventsCount === 0) this._events = new Events();
+      else delete this._events[evt];
+    }
+  } else {
+    for (var i = 0, events = [], length = listeners.length; i < length; i++) {
+      if (
+           listeners[i].fn !== fn
+        || (once && !listeners[i].once)
+        || (context && listeners[i].context !== context)
+      ) {
+        events.push(listeners[i]);
+      }
+    }
+
+    //
+    // Reset the array, or remove it completely if we have no more listeners.
+    //
+    if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;
+    else if (--this._eventsCount === 0) this._events = new Events();
+    else delete this._events[evt];
+  }
+
+  return this;
+};
+
+/**
+ * Remove all listeners, or those of the specified event.
+ *
+ * @param {String|Symbol} [event] The event name.
+ * @returns {EventEmitter} `this`.
+ * @api public
+ */
+EventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {
+  var evt;
+
+  if (event) {
+    evt = prefix ? prefix + event : event;
+    if (this._events[evt]) {
+      if (--this._eventsCount === 0) this._events = new Events();
+      else delete this._events[evt];
+    }
+  } else {
+    this._events = new Events();
+    this._eventsCount = 0;
+  }
+
+  return this;
+};
+
+//
+// Alias methods names because people roll like that.
+//
+EventEmitter.prototype.off = EventEmitter.prototype.removeListener;
+EventEmitter.prototype.addListener = EventEmitter.prototype.on;
+
+//
+// This function doesn't apply anymore.
+//
+EventEmitter.prototype.setMaxListeners = function setMaxListeners() {
+  return this;
+};
+
+//
+// Expose the prefix.
+//
+EventEmitter.prefixed = prefix;
+
+//
+// Allow `EventEmitter` to be imported as module namespace.
+//
+EventEmitter.EventEmitter = EventEmitter;
+
+//
+// Expose the module.
+//
+if ('undefined' !== typeof module) {
+  module.exports = EventEmitter;
+}
+
+
+/***/ }),
+/* 55 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.matchText = exports.matchSpacing = exports.matchNewline = exports.matchBlot = exports.matchAttributor = exports.default = undefined;
+
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
+
+var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+var _extend2 = __webpack_require__(3);
+
+var _extend3 = _interopRequireDefault(_extend2);
+
+var _quillDelta = __webpack_require__(2);
+
+var _quillDelta2 = _interopRequireDefault(_quillDelta);
+
+var _parchment = __webpack_require__(0);
+
+var _parchment2 = _interopRequireDefault(_parchment);
+
+var _quill = __webpack_require__(5);
+
+var _quill2 = _interopRequireDefault(_quill);
+
+var _logger = __webpack_require__(10);
+
+var _logger2 = _interopRequireDefault(_logger);
+
+var _module = __webpack_require__(9);
+
+var _module2 = _interopRequireDefault(_module);
+
+var _align = __webpack_require__(36);
+
+var _background = __webpack_require__(37);
+
+var _code = __webpack_require__(13);
+
+var _code2 = _interopRequireDefault(_code);
+
+var _color = __webpack_require__(26);
+
+var _direction = __webpack_require__(38);
+
+var _font = __webpack_require__(39);
+
+var _size = __webpack_require__(40);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+var debug = (0, _logger2.default)('quill:clipboard');
+
+var DOM_KEY = '__ql-matcher';
+
+var CLIPBOARD_CONFIG = [[Node.TEXT_NODE, matchText], [Node.TEXT_NODE, matchNewline], ['br', matchBreak], [Node.ELEMENT_NODE, matchNewline], [Node.ELEMENT_NODE, matchBlot], [Node.ELEMENT_NODE, matchSpacing], [Node.ELEMENT_NODE, matchAttributor], [Node.ELEMENT_NODE, matchStyles], ['li', matchIndent], ['b', matchAlias.bind(matchAlias, 'bold')], ['i', matchAlias.bind(matchAlias, 'italic')], ['style', matchIgnore]];
+
+var ATTRIBUTE_ATTRIBUTORS = [_align.AlignAttribute, _direction.DirectionAttribute].reduce(function (memo, attr) {
+  memo[attr.keyName] = attr;
+  return memo;
+}, {});
+
+var STYLE_ATTRIBUTORS = [_align.AlignStyle, _background.BackgroundStyle, _color.ColorStyle, _direction.DirectionStyle, _font.FontStyle, _size.SizeStyle].reduce(function (memo, attr) {
+  memo[attr.keyName] = attr;
+  return memo;
+}, {});
+
+var Clipboard = function (_Module) {
+  _inherits(Clipboard, _Module);
+
+  function Clipboard(quill, options) {
+    _classCallCheck(this, Clipboard);
+
+    var _this = _possibleConstructorReturn(this, (Clipboard.__proto__ || Object.getPrototypeOf(Clipboard)).call(this, quill, options));
+
+    _this.quill.root.addEventListener('paste', _this.onPaste.bind(_this));
+    _this.container = _this.quill.addContainer('ql-clipboard');
+    _this.container.setAttribute('contenteditable', true);
+    _this.container.setAttribute('tabindex', -1);
+    _this.matchers = [];
+    CLIPBOARD_CONFIG.concat(_this.options.matchers).forEach(function (_ref) {
+      var _ref2 = _slicedToArray(_ref, 2),
+          selector = _ref2[0],
+          matcher = _ref2[1];
+
+      if (!options.matchVisual && matcher === matchSpacing) return;
+      _this.addMatcher(selector, matcher);
+    });
+    return _this;
+  }
+
+  _createClass(Clipboard, [{
+    key: 'addMatcher',
+    value: function addMatcher(selector, matcher) {
+      this.matchers.push([selector, matcher]);
+    }
+  }, {
+    key: 'convert',
+    value: function convert(html) {
+      if (typeof html === 'string') {
+        this.container.innerHTML = html.replace(/\>\r?\n +\</g, '><'); // Remove spaces between tags
+        return this.convert();
+      }
+      var formats = this.quill.getFormat(this.quill.selection.savedRange.index);
+      if (formats[_code2.default.blotName]) {
+        var text = this.container.innerText;
+        this.container.innerHTML = '';
+        return new _quillDelta2.default().insert(text, _defineProperty({}, _code2.default.blotName, formats[_code2.default.blotName]));
+      }
+
+      var _prepareMatching = this.prepareMatching(),
+          _prepareMatching2 = _slicedToArray(_prepareMatching, 2),
+          elementMatchers = _prepareMatching2[0],
+          textMatchers = _prepareMatching2[1];
+
+      var delta = traverse(this.container, elementMatchers, textMatchers);
+      // Remove trailing newline
+      if (deltaEndsWith(delta, '\n') && delta.ops[delta.ops.length - 1].attributes == null) {
+        delta = delta.compose(new _quillDelta2.default().retain(delta.length() - 1).delete(1));
+      }
+      debug.log('convert', this.container.innerHTML, delta);
+      this.container.innerHTML = '';
+      return delta;
+    }
+  }, {
+    key: 'dangerouslyPasteHTML',
+    value: function dangerouslyPasteHTML(index, html) {
+      var source = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : _quill2.default.sources.API;
+
+      if (typeof index === 'string') {
+        this.quill.setContents(this.convert(index), html);
+        this.quill.setSelection(0, _quill2.default.sources.SILENT);
+      } else {
+        var paste = this.convert(html);
+        this.quill.updateContents(new _quillDelta2.default().retain(index).concat(paste), source);
+        this.quill.setSelection(index + paste.length(), _quill2.default.sources.SILENT);
+      }
+    }
+  }, {
+    key: 'onPaste',
+    value: function onPaste(e) {
+      var _this2 = this;
+
+      if (e.defaultPrevented || !this.quill.isEnabled()) return;
+      var range = this.quill.getSelection();
+      var delta = new _quillDelta2.default().retain(range.index);
+      var scrollTop = this.quill.scrollingContainer.scrollTop;
+      this.container.focus();
+      this.quill.selection.update(_quill2.default.sources.SILENT);
+      setTimeout(function () {
+        delta = delta.concat(_this2.convert()).delete(range.length);
+        _this2.quill.updateContents(delta, _quill2.default.sources.USER);
+        // range.length contributes to delta.length()
+        _this2.quill.setSelection(delta.length() - range.length, _quill2.default.sources.SILENT);
+        _this2.quill.scrollingContainer.scrollTop = scrollTop;
+        _this2.quill.focus();
+      }, 1);
+    }
+  }, {
+    key: 'prepareMatching',
+    value: function prepareMatching() {
+      var _this3 = this;
+
+      var elementMatchers = [],
+          textMatchers = [];
+      this.matchers.forEach(function (pair) {
+        var _pair = _slicedToArray(pair, 2),
+            selector = _pair[0],
+            matcher = _pair[1];
+
+        switch (selector) {
+          case Node.TEXT_NODE:
+            textMatchers.push(matcher);
+            break;
+          case Node.ELEMENT_NODE:
+            elementMatchers.push(matcher);
+            break;
+          default:
+            [].forEach.call(_this3.container.querySelectorAll(selector), function (node) {
+              // TODO use weakmap
+              node[DOM_KEY] = node[DOM_KEY] || [];
+              node[DOM_KEY].push(matcher);
+            });
+            break;
+        }
+      });
+      return [elementMatchers, textMatchers];
+    }
+  }]);
+
+  return Clipboard;
+}(_module2.default);
+
+Clipboard.DEFAULTS = {
+  matchers: [],
+  matchVisual: true
+};
+
+function applyFormat(delta, format, value) {
+  if ((typeof format === 'undefined' ? 'undefined' : _typeof(format)) === 'object') {
+    return Object.keys(format).reduce(function (delta, key) {
+      return applyFormat(delta, key, format[key]);
+    }, delta);
+  } else {
+    return delta.reduce(function (delta, op) {
+      if (op.attributes && op.attributes[format]) {
+        return delta.push(op);
+      } else {
+        return delta.insert(op.insert, (0, _extend3.default)({}, _defineProperty({}, format, value), op.attributes));
+      }
+    }, new _quillDelta2.default());
+  }
+}
+
+function computeStyle(node) {
+  if (node.nodeType !== Node.ELEMENT_NODE) return {};
+  var DOM_KEY = '__ql-computed-style';
+  return node[DOM_KEY] || (node[DOM_KEY] = window.getComputedStyle(node));
+}
+
+function deltaEndsWith(delta, text) {
+  var endText = "";
+  for (var i = delta.ops.length - 1; i >= 0 && endText.length < text.length; --i) {
+    var op = delta.ops[i];
+    if (typeof op.insert !== 'string') break;
+    endText = op.insert + endText;
+  }
+  return endText.slice(-1 * text.length) === text;
+}
+
+function isLine(node) {
+  if (node.childNodes.length === 0) return false; // Exclude embed blocks
+  var style = computeStyle(node);
+  return ['block', 'list-item'].indexOf(style.display) > -1;
+}
+
+function traverse(node, elementMatchers, textMatchers) {
+  // Post-order
+  if (node.nodeType === node.TEXT_NODE) {
+    return textMatchers.reduce(function (delta, matcher) {
+      return matcher(node, delta);
+    }, new _quillDelta2.default());
+  } else if (node.nodeType === node.ELEMENT_NODE) {
+    return [].reduce.call(node.childNodes || [], function (delta, childNode) {
+      var childrenDelta = traverse(childNode, elementMatchers, textMatchers);
+      if (childNode.nodeType === node.ELEMENT_NODE) {
+        childrenDelta = elementMatchers.reduce(function (childrenDelta, matcher) {
+          return matcher(childNode, childrenDelta);
+        }, childrenDelta);
+        childrenDelta = (childNode[DOM_KEY] || []).reduce(function (childrenDelta, matcher) {
+          return matcher(childNode, childrenDelta);
+        }, childrenDelta);
+      }
+      return delta.concat(childrenDelta);
+    }, new _quillDelta2.default());
+  } else {
+    return new _quillDelta2.default();
+  }
+}
+
+function matchAlias(format, node, delta) {
+  return applyFormat(delta, format, true);
+}
+
+function matchAttributor(node, delta) {
+  var attributes = _parchment2.default.Attributor.Attribute.keys(node);
+  var classes = _parchment2.default.Attributor.Class.keys(node);
+  var styles = _parchment2.default.Attributor.Style.keys(node);
+  var formats = {};
+  attributes.concat(classes).concat(styles).forEach(function (name) {
+    var attr = _parchment2.default.query(name, _parchment2.default.Scope.ATTRIBUTE);
+    if (attr != null) {
+      formats[attr.attrName] = attr.value(node);
+      if (formats[attr.attrName]) return;
+    }
+    attr = ATTRIBUTE_ATTRIBUTORS[name];
+    if (attr != null && (attr.attrName === name || attr.keyName === name)) {
+      formats[attr.attrName] = attr.value(node) || undefined;
+    }
+    attr = STYLE_ATTRIBUTORS[name];
+    if (attr != null && (attr.attrName === name || attr.keyName === name)) {
+      attr = STYLE_ATTRIBUTORS[name];
+      formats[attr.attrName] = attr.value(node) || undefined;
+    }
+  });
+  if (Object.keys(formats).length > 0) {
+    delta = applyFormat(delta, formats);
+  }
+  return delta;
+}
+
+function matchBlot(node, delta) {
+  var match = _parchment2.default.query(node);
+  if (match == null) return delta;
+  if (match.prototype instanceof _parchment2.default.Embed) {
+    var embed = {};
+    var value = match.value(node);
+    if (value != null) {
+      embed[match.blotName] = value;
+      delta = new _quillDelta2.default().insert(embed, match.formats(node));
+    }
+  } else if (typeof match.formats === 'function') {
+    delta = applyFormat(delta, match.blotName, match.formats(node));
+  }
+  return delta;
+}
+
+function matchBreak(node, delta) {
+  if (!deltaEndsWith(delta, '\n')) {
+    delta.insert('\n');
+  }
+  return delta;
+}
+
+function matchIgnore() {
+  return new _quillDelta2.default();
+}
+
+function matchIndent(node, delta) {
+  var match = _parchment2.default.query(node);
+  if (match == null || match.blotName !== 'list-item' || !deltaEndsWith(delta, '\n')) {
+    return delta;
+  }
+  var indent = -1,
+      parent = node.parentNode;
+  while (!parent.classList.contains('ql-clipboard')) {
+    if ((_parchment2.default.query(parent) || {}).blotName === 'list') {
+      indent += 1;
+    }
+    parent = parent.parentNode;
+  }
+  if (indent <= 0) return delta;
+  return delta.compose(new _quillDelta2.default().retain(delta.length() - 1).retain(1, { indent: indent }));
+}
+
+function matchNewline(node, delta) {
+  if (!deltaEndsWith(delta, '\n')) {
+    if (isLine(node) || delta.length() > 0 && node.nextSibling && isLine(node.nextSibling)) {
+      delta.insert('\n');
+    }
+  }
+  return delta;
+}
+
+function matchSpacing(node, delta) {
+  if (isLine(node) && node.nextElementSibling != null && !deltaEndsWith(delta, '\n\n')) {
+    var nodeHeight = node.offsetHeight + parseFloat(computeStyle(node).marginTop) + parseFloat(computeStyle(node).marginBottom);
+    if (node.nextElementSibling.offsetTop > node.offsetTop + nodeHeight * 1.5) {
+      delta.insert('\n');
+    }
+  }
+  return delta;
+}
+
+function matchStyles(node, delta) {
+  var formats = {};
+  var style = node.style || {};
+  if (style.fontStyle && computeStyle(node).fontStyle === 'italic') {
+    formats.italic = true;
+  }
+  if (style.fontWeight && (computeStyle(node).fontWeight.startsWith('bold') || parseInt(computeStyle(node).fontWeight) >= 700)) {
+    formats.bold = true;
+  }
+  if (Object.keys(formats).length > 0) {
+    delta = applyFormat(delta, formats);
+  }
+  if (parseFloat(style.textIndent || 0) > 0) {
+    // Could be 0.5in
+    delta = new _quillDelta2.default().insert('\t').concat(delta);
+  }
+  return delta;
+}
+
+function matchText(node, delta) {
+  var text = node.data;
+  // Word represents empty line with <o:p>&nbsp;</o:p>
+  if (node.parentNode.tagName === 'O:P') {
+    return delta.insert(text.trim());
+  }
+  if (text.trim().length === 0 && node.parentNode.classList.contains('ql-clipboard')) {
+    return delta;
+  }
+  if (!computeStyle(node.parentNode).whiteSpace.startsWith('pre')) {
+    // eslint-disable-next-line func-style
+    var replacer = function replacer(collapse, match) {
+      match = match.replace(/[^\u00a0]/g, ''); // \u00a0 is nbsp;
+      return match.length < 1 && collapse ? ' ' : match;
+    };
+    text = text.replace(/\r\n/g, ' ').replace(/\n/g, ' ');
+    text = text.replace(/\s\s+/g, replacer.bind(replacer, true)); // collapse whitespace
+    if (node.previousSibling == null && isLine(node.parentNode) || node.previousSibling != null && isLine(node.previousSibling)) {
+      text = text.replace(/^\s+/, replacer.bind(replacer, false));
+    }
+    if (node.nextSibling == null && isLine(node.parentNode) || node.nextSibling != null && isLine(node.nextSibling)) {
+      text = text.replace(/\s+$/, replacer.bind(replacer, false));
+    }
+  }
+  return delta.insert(text);
+}
+
+exports.default = Clipboard;
+exports.matchAttributor = matchAttributor;
+exports.matchBlot = matchBlot;
+exports.matchNewline = matchNewline;
+exports.matchSpacing = matchSpacing;
+exports.matchText = matchText;
+
+/***/ }),
+/* 56 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };
+
+var _inline = __webpack_require__(6);
+
+var _inline2 = _interopRequireDefault(_inline);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+var Bold = function (_Inline) {
+  _inherits(Bold, _Inline);
+
+  function Bold() {
+    _classCallCheck(this, Bold);
+
+    return _possibleConstructorReturn(this, (Bold.__proto__ || Object.getPrototypeOf(Bold)).apply(this, arguments));
+  }
+
+  _createClass(Bold, [{
+    key: 'optimize',
+    value: function optimize(context) {
+      _get(Bold.prototype.__proto__ || Object.getPrototypeOf(Bold.prototype), 'optimize', this).call(this, context);
+      if (this.domNode.tagName !== this.statics.tagName[0]) {
+        this.replaceWith(this.statics.blotName);
+      }
+    }
+  }], [{
+    key: 'create',
+    value: function create() {
+      return _get(Bold.__proto__ || Object.getPrototypeOf(Bold), 'create', this).call(this);
+    }
+  }, {
+    key: 'formats',
+    value: function formats() {
+      return true;
+    }
+  }]);
+
+  return Bold;
+}(_inline2.default);
+
+Bold.blotName = 'bold';
+Bold.tagName = ['STRONG', 'B'];
+
+exports.default = Bold;
+
+/***/ }),
+/* 57 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.addControls = exports.default = undefined;
+
+var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+var _quillDelta = __webpack_require__(2);
+
+var _quillDelta2 = _interopRequireDefault(_quillDelta);
+
+var _parchment = __webpack_require__(0);
+
+var _parchment2 = _interopRequireDefault(_parchment);
+
+var _quill = __webpack_require__(5);
+
+var _quill2 = _interopRequireDefault(_quill);
+
+var _logger = __webpack_require__(10);
+
+var _logger2 = _interopRequireDefault(_logger);
+
+var _module = __webpack_require__(9);
+
+var _module2 = _interopRequireDefault(_module);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+var debug = (0, _logger2.default)('quill:toolbar');
+
+var Toolbar = function (_Module) {
+  _inherits(Toolbar, _Module);
+
+  function Toolbar(quill, options) {
+    _classCallCheck(this, Toolbar);
+
+    var _this = _possibleConstructorReturn(this, (Toolbar.__proto__ || Object.getPrototypeOf(Toolbar)).call(this, quill, options));
+
+    if (Array.isArray(_this.options.container)) {
+      var container = document.createElement('div');
+      addControls(container, _this.options.container);
+      quill.container.parentNode.insertBefore(container, quill.container);
+      _this.container = container;
+    } else if (typeof _this.options.container === 'string') {
+      _this.container = document.querySelector(_this.options.container);
+    } else {
+      _this.container = _this.options.container;
+    }
+    if (!(_this.container instanceof HTMLElement)) {
+      var _ret;
+
+      return _ret = debug.error('Container required for toolbar', _this.options), _possibleConstructorReturn(_this, _ret);
+    }
+    _this.container.classList.add('ql-toolbar');
+    _this.controls = [];
+    _this.handlers = {};
+    Object.keys(_this.options.handlers).forEach(function (format) {
+      _this.addHandler(format, _this.options.handlers[format]);
+    });
+    [].forEach.call(_this.container.querySelectorAll('button, select'), function (input) {
+      _this.attach(input);
+    });
+    _this.quill.on(_quill2.default.events.EDITOR_CHANGE, function (type, range) {
+      if (type === _quill2.default.events.SELECTION_CHANGE) {
+        _this.update(range);
+      }
+    });
+    _this.quill.on(_quill2.default.events.SCROLL_OPTIMIZE, function () {
+      var _this$quill$selection = _this.quill.selection.getRange(),
+          _this$quill$selection2 = _slicedToArray(_this$quill$selection, 1),
+          range = _this$quill$selection2[0]; // quill.getSelection triggers update
+
+
+      _this.update(range);
+    });
+    return _this;
+  }
+
+  _createClass(Toolbar, [{
+    key: 'addHandler',
+    value: function addHandler(format, handler) {
+      this.handlers[format] = handler;
+    }
+  }, {
+    key: 'attach',
+    value: function attach(input) {
+      var _this2 = this;
+
+      var format = [].find.call(input.classList, function (className) {
+        return className.indexOf('ql-') === 0;
+      });
+      if (!format) return;
+      format = format.slice('ql-'.length);
+      if (input.tagName === 'BUTTON') {
+        input.setAttribute('type', 'button');
+      }
+      if (this.handlers[format] == null) {
+        if (this.quill.scroll.whitelist != null && this.quill.scroll.whitelist[format] == null) {
+          debug.warn('ignoring attaching to disabled format', format, input);
+          return;
+        }
+        if (_parchment2.default.query(format) == null) {
+          debug.warn('ignoring attaching to nonexistent format', format, input);
+          return;
+        }
+      }
+      var eventName = input.tagName === 'SELECT' ? 'change' : 'click';
+      input.addEventListener(eventName, function (e) {
+        var value = void 0;
+        if (input.tagName === 'SELECT') {
+          if (input.selectedIndex < 0) return;
+          var selected = input.options[input.selectedIndex];
+          if (selected.hasAttribute('selected')) {
+            value = false;
+          } else {
+            value = selected.value || false;
+          }
+        } else {
+          if (input.classList.contains('ql-active')) {
+            value = false;
+          } else {
+            value = input.value || !input.hasAttribute('value');
+          }
+          e.preventDefault();
+        }
+        _this2.quill.focus();
+
+        var _quill$selection$getR = _this2.quill.selection.getRange(),
+            _quill$selection$getR2 = _slicedToArray(_quill$selection$getR, 1),
+            range = _quill$selection$getR2[0];
+
+        if (_this2.handlers[format] != null) {
+          _this2.handlers[format].call(_this2, value);
+        } else if (_parchment2.default.query(format).prototype instanceof _parchment2.default.Embed) {
+          value = prompt('Enter ' + format);
+          if (!value) return;
+          _this2.quill.updateContents(new _quillDelta2.default().retain(range.index).delete(range.length).insert(_defineProperty({}, format, value)), _quill2.default.sources.USER);
+        } else {
+          _this2.quill.format(format, value, _quill2.default.sources.USER);
+        }
+        _this2.update(range);
+      });
+      // TODO use weakmap
+      this.controls.push([format, input]);
+    }
+  }, {
+    key: 'update',
+    value: function update(range) {
+      var formats = range == null ? {} : this.quill.getFormat(range);
+      this.controls.forEach(function (pair) {
+        var _pair = _slicedToArray(pair, 2),
+            format = _pair[0],
+            input = _pair[1];
+
+        if (input.tagName === 'SELECT') {
+          var option = void 0;
+          if (range == null) {
+            option = null;
+          } else if (formats[format] == null) {
+            option = input.querySelector('option[selected]');
+          } else if (!Array.isArray(formats[format])) {
+            var value = formats[format];
+            if (typeof value === 'string') {
+              value = value.replace(/\"/g, '\\"');
+            }
+            option = input.querySelector('option[value="' + value + '"]');
+          }
+          if (option == null) {
+            input.value = ''; // TODO make configurable?
+            input.selectedIndex = -1;
+          } else {
+            option.selected = true;
+          }
+        } else {
+          if (range == null) {
+            input.classList.remove('ql-active');
+          } else if (input.hasAttribute('value')) {
+            // both being null should match (default values)
+            // '1' should match with 1 (headers)
+            var isActive = formats[format] === input.getAttribute('value') || formats[format] != null && formats[format].toString() === input.getAttribute('value') || formats[format] == null && !input.getAttribute('value');
+            input.classList.toggle('ql-active', isActive);
+          } else {
+            input.classList.toggle('ql-active', formats[format] != null);
+          }
+        }
+      });
+    }
+  }]);
+
+  return Toolbar;
+}(_module2.default);
+
+Toolbar.DEFAULTS = {};
+
+function addButton(container, format, value) {
+  var input = document.createElement('button');
+  input.setAttribute('type', 'button');
+  input.classList.add('ql-' + format);
+  if (value != null) {
+    input.value = value;
+  }
+  container.appendChild(input);
+}
+
+function addControls(container, groups) {
+  if (!Array.isArray(groups[0])) {
+    groups = [groups];
+  }
+  groups.forEach(function (controls) {
+    var group = document.createElement('span');
+    group.classList.add('ql-formats');
+    controls.forEach(function (control) {
+      if (typeof control === 'string') {
+        addButton(group, control);
+      } else {
+        var format = Object.keys(control)[0];
+        var value = control[format];
+        if (Array.isArray(value)) {
+          addSelect(group, format, value);
+        } else {
+          addButton(group, format, value);
+        }
+      }
+    });
+    container.appendChild(group);
+  });
+}
+
+function addSelect(container, format, values) {
+  var input = document.createElement('select');
+  input.classList.add('ql-' + format);
+  values.forEach(function (value) {
+    var option = document.createElement('option');
+    if (value !== false) {
+      option.setAttribute('value', value);
+    } else {
+      option.setAttribute('selected', 'selected');
+    }
+    input.appendChild(option);
+  });
+  container.appendChild(input);
+}
+
+Toolbar.DEFAULTS = {
+  container: null,
+  handlers: {
+    clean: function clean() {
+      var _this3 = this;
+
+      var range = this.quill.getSelection();
+      if (range == null) return;
+      if (range.length == 0) {
+        var formats = this.quill.getFormat();
+        Object.keys(formats).forEach(function (name) {
+          // Clean functionality in existing apps only clean inline formats
+          if (_parchment2.default.query(name, _parchment2.default.Scope.INLINE) != null) {
+            _this3.quill.format(name, false);
+          }
+        });
+      } else {
+        this.quill.removeFormat(range, _quill2.default.sources.USER);
+      }
+    },
+    direction: function direction(value) {
+      var align = this.quill.getFormat()['align'];
+      if (value === 'rtl' && align == null) {
+        this.quill.format('align', 'right', _quill2.default.sources.USER);
+      } else if (!value && align === 'right') {
+        this.quill.format('align', false, _quill2.default.sources.USER);
+      }
+      this.quill.format('direction', value, _quill2.default.sources.USER);
+    },
+    indent: function indent(value) {
+      var range = this.quill.getSelection();
+      var formats = this.quill.getFormat(range);
+      var indent = parseInt(formats.indent || 0);
+      if (value === '+1' || value === '-1') {
+        var modifier = value === '+1' ? 1 : -1;
+        if (formats.direction === 'rtl') modifier *= -1;
+        this.quill.format('indent', indent + modifier, _quill2.default.sources.USER);
+      }
+    },
+    link: function link(value) {
+      if (value === true) {
+        value = prompt('Enter link URL:');
+      }
+      this.quill.format('link', value, _quill2.default.sources.USER);
+    },
+    list: function list(value) {
+      var range = this.quill.getSelection();
+      var formats = this.quill.getFormat(range);
+      if (value === 'check') {
+        if (formats['list'] === 'checked' || formats['list'] === 'unchecked') {
+          this.quill.format('list', false, _quill2.default.sources.USER);
+        } else {
+          this.quill.format('list', 'unchecked', _quill2.default.sources.USER);
+        }
+      } else {
+        this.quill.format('list', value, _quill2.default.sources.USER);
+      }
+    }
+  }
+};
+
+exports.default = Toolbar;
+exports.addControls = addControls;
+
+/***/ }),
+/* 58 */
+/***/ (function(module, exports) {
+
+module.exports = "<svg viewbox=\"0 0 18 18\"> <polyline class=\"ql-even ql-stroke\" points=\"5 7 3 9 5 11\"></polyline> <polyline class=\"ql-even ql-stroke\" points=\"13 7 15 9 13 11\"></polyline> <line class=ql-stroke x1=10 x2=8 y1=5 y2=13></line> </svg>";
+
+/***/ }),
+/* 59 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };
+
+var _picker = __webpack_require__(28);
+
+var _picker2 = _interopRequireDefault(_picker);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+var ColorPicker = function (_Picker) {
+  _inherits(ColorPicker, _Picker);
+
+  function ColorPicker(select, label) {
+    _classCallCheck(this, ColorPicker);
+
+    var _this = _possibleConstructorReturn(this, (ColorPicker.__proto__ || Object.getPrototypeOf(ColorPicker)).call(this, select));
+
+    _this.label.innerHTML = label;
+    _this.container.classList.add('ql-color-picker');
+    [].slice.call(_this.container.querySelectorAll('.ql-picker-item'), 0, 7).forEach(function (item) {
+      item.classList.add('ql-primary');
+    });
+    return _this;
+  }
+
+  _createClass(ColorPicker, [{
+    key: 'buildItem',
+    value: function buildItem(option) {
+      var item = _get(ColorPicker.prototype.__proto__ || Object.getPrototypeOf(ColorPicker.prototype), 'buildItem', this).call(this, option);
+      item.style.backgroundColor = option.getAttribute('value') || '';
+      return item;
+    }
+  }, {
+    key: 'selectItem',
+    value: function selectItem(item, trigger) {
+      _get(ColorPicker.prototype.__proto__ || Object.getPrototypeOf(ColorPicker.prototype), 'selectItem', this).call(this, item, trigger);
+      var colorLabel = this.label.querySelector('.ql-color-label');
+      var value = item ? item.getAttribute('data-value') || '' : '';
+      if (colorLabel) {
+        if (colorLabel.tagName === 'line') {
+          colorLabel.style.stroke = value;
+        } else {
+          colorLabel.style.fill = value;
+        }
+      }
+    }
+  }]);
+
+  return ColorPicker;
+}(_picker2.default);
+
+exports.default = ColorPicker;
+
+/***/ }),
+/* 60 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };
+
+var _picker = __webpack_require__(28);
+
+var _picker2 = _interopRequireDefault(_picker);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+var IconPicker = function (_Picker) {
+  _inherits(IconPicker, _Picker);
+
+  function IconPicker(select, icons) {
+    _classCallCheck(this, IconPicker);
+
+    var _this = _possibleConstructorReturn(this, (IconPicker.__proto__ || Object.getPrototypeOf(IconPicker)).call(this, select));
+
+    _this.container.classList.add('ql-icon-picker');
+    [].forEach.call(_this.container.querySelectorAll('.ql-picker-item'), function (item) {
+      item.innerHTML = icons[item.getAttribute('data-value') || ''];
+    });
+    _this.defaultItem = _this.container.querySelector('.ql-selected');
+    _this.selectItem(_this.defaultItem);
+    return _this;
+  }
+
+  _createClass(IconPicker, [{
+    key: 'selectItem',
+    value: function selectItem(item, trigger) {
+      _get(IconPicker.prototype.__proto__ || Object.getPrototypeOf(IconPicker.prototype), 'selectItem', this).call(this, item, trigger);
+      item = item || this.defaultItem;
+      this.label.innerHTML = item.innerHTML;
+    }
+  }]);
+
+  return IconPicker;
+}(_picker2.default);
+
+exports.default = IconPicker;
+
+/***/ }),
+/* 61 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+var Tooltip = function () {
+  function Tooltip(quill, boundsContainer) {
+    var _this = this;
+
+    _classCallCheck(this, Tooltip);
+
+    this.quill = quill;
+    this.boundsContainer = boundsContainer || document.body;
+    this.root = quill.addContainer('ql-tooltip');
+    this.root.innerHTML = this.constructor.TEMPLATE;
+    if (this.quill.root === this.quill.scrollingContainer) {
+      this.quill.root.addEventListener('scroll', function () {
+        _this.root.style.marginTop = -1 * _this.quill.root.scrollTop + 'px';
+      });
+    }
+    this.hide();
+  }
+
+  _createClass(Tooltip, [{
+    key: 'hide',
+    value: function hide() {
+      this.root.classList.add('ql-hidden');
+    }
+  }, {
+    key: 'position',
+    value: function position(reference) {
+      var left = reference.left + reference.width / 2 - this.root.offsetWidth / 2;
+      // root.scrollTop should be 0 if scrollContainer !== root
+      var top = reference.bottom + this.quill.root.scrollTop;
+      this.root.style.left = left + 'px';
+      this.root.style.top = top + 'px';
+      this.root.classList.remove('ql-flip');
+      var containerBounds = this.boundsContainer.getBoundingClientRect();
+      var rootBounds = this.root.getBoundingClientRect();
+      var shift = 0;
+      if (rootBounds.right > containerBounds.right) {
+        shift = containerBounds.right - rootBounds.right;
+        this.root.style.left = left + shift + 'px';
+      }
+      if (rootBounds.left < containerBounds.left) {
+        shift = containerBounds.left - rootBounds.left;
+        this.root.style.left = left + shift + 'px';
+      }
+      if (rootBounds.bottom > containerBounds.bottom) {
+        var height = rootBounds.bottom - rootBounds.top;
+        var verticalShift = reference.bottom - reference.top + height;
+        this.root.style.top = top - verticalShift + 'px';
+        this.root.classList.add('ql-flip');
+      }
+      return shift;
+    }
+  }, {
+    key: 'show',
+    value: function show() {
+      this.root.classList.remove('ql-editing');
+      this.root.classList.remove('ql-hidden');
+    }
+  }]);
+
+  return Tooltip;
+}();
+
+exports.default = Tooltip;
+
+/***/ }),
+/* 62 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
+
+var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+var _extend = __webpack_require__(3);
+
+var _extend2 = _interopRequireDefault(_extend);
+
+var _emitter = __webpack_require__(8);
+
+var _emitter2 = _interopRequireDefault(_emitter);
+
+var _base = __webpack_require__(43);
+
+var _base2 = _interopRequireDefault(_base);
+
+var _link = __webpack_require__(27);
+
+var _link2 = _interopRequireDefault(_link);
+
+var _selection = __webpack_require__(15);
+
+var _icons = __webpack_require__(41);
+
+var _icons2 = _interopRequireDefault(_icons);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+var TOOLBAR_CONFIG = [[{ header: ['1', '2', '3', false] }], ['bold', 'italic', 'underline', 'link'], [{ list: 'ordered' }, { list: 'bullet' }], ['clean']];
+
+var SnowTheme = function (_BaseTheme) {
+  _inherits(SnowTheme, _BaseTheme);
+
+  function SnowTheme(quill, options) {
+    _classCallCheck(this, SnowTheme);
+
+    if (options.modules.toolbar != null && options.modules.toolbar.container == null) {
+      options.modules.toolbar.container = TOOLBAR_CONFIG;
+    }
+
+    var _this = _possibleConstructorReturn(this, (SnowTheme.__proto__ || Object.getPrototypeOf(SnowTheme)).call(this, quill, options));
+
+    _this.quill.container.classList.add('ql-snow');
+    return _this;
+  }
+
+  _createClass(SnowTheme, [{
+    key: 'extendToolbar',
+    value: function extendToolbar(toolbar) {
+      toolbar.container.classList.add('ql-snow');
+      this.buildButtons([].slice.call(toolbar.container.querySelectorAll('button')), _icons2.default);
+      this.buildPickers([].slice.call(toolbar.container.querySelectorAll('select')), _icons2.default);
+      this.tooltip = new SnowTooltip(this.quill, this.options.bounds);
+      if (toolbar.container.querySelector('.ql-link')) {
+        this.quill.keyboard.addBinding({ key: 'K', shortKey: true }, function (range, context) {
+          toolbar.handlers['link'].call(toolbar, !context.format.link);
+        });
+      }
+    }
+  }]);
+
+  return SnowTheme;
+}(_base2.default);
+
+SnowTheme.DEFAULTS = (0, _extend2.default)(true, {}, _base2.default.DEFAULTS, {
+  modules: {
+    toolbar: {
+      handlers: {
+        link: function link(value) {
+          if (value) {
+            var range = this.quill.getSelection();
+            if (range == null || range.length == 0) return;
+            var preview = this.quill.getText(range);
+            if (/^\S+@\S+\.\S+$/.test(preview) && preview.indexOf('mailto:') !== 0) {
+              preview = 'mailto:' + preview;
+            }
+            var tooltip = this.quill.theme.tooltip;
+            tooltip.edit('link', preview);
+          } else {
+            this.quill.format('link', false);
+          }
+        }
+      }
+    }
+  }
+});
+
+var SnowTooltip = function (_BaseTooltip) {
+  _inherits(SnowTooltip, _BaseTooltip);
+
+  function SnowTooltip(quill, bounds) {
+    _classCallCheck(this, SnowTooltip);
+
+    var _this2 = _possibleConstructorReturn(this, (SnowTooltip.__proto__ || Object.getPrototypeOf(SnowTooltip)).call(this, quill, bounds));
+
+    _this2.preview = _this2.root.querySelector('a.ql-preview');
+    return _this2;
+  }
+
+  _createClass(SnowTooltip, [{
+    key: 'listen',
+    value: function listen() {
+      var _this3 = this;
+
+      _get(SnowTooltip.prototype.__proto__ || Object.getPrototypeOf(SnowTooltip.prototype), 'listen', this).call(this);
+      this.root.querySelector('a.ql-action').addEventListener('click', function (event) {
+        if (_this3.root.classList.contains('ql-editing')) {
+          _this3.save();
+        } else {
+          _this3.edit('link', _this3.preview.textContent);
+        }
+        event.preventDefault();
+      });
+      this.root.querySelector('a.ql-remove').addEventListener('click', function (event) {
+        if (_this3.linkRange != null) {
+          var range = _this3.linkRange;
+          _this3.restoreFocus();
+          _this3.quill.formatText(range, 'link', false, _emitter2.default.sources.USER);
+          delete _this3.linkRange;
+        }
+        event.preventDefault();
+        _this3.hide();
+      });
+      this.quill.on(_emitter2.default.events.SELECTION_CHANGE, function (range, oldRange, source) {
+        if (range == null) return;
+        if (range.length === 0 && source === _emitter2.default.sources.USER) {
+          var _quill$scroll$descend = _this3.quill.scroll.descendant(_link2.default, range.index),
+              _quill$scroll$descend2 = _slicedToArray(_quill$scroll$descend, 2),
+              link = _quill$scroll$descend2[0],
+              offset = _quill$scroll$descend2[1];
+
+          if (link != null) {
+            _this3.linkRange = new _selection.Range(range.index - offset, link.length());
+            var preview = _link2.default.formats(link.domNode);
+            _this3.preview.textContent = preview;
+            _this3.preview.setAttribute('href', preview);
+            _this3.show();
+            _this3.position(_this3.quill.getBounds(_this3.linkRange));
+            return;
+          }
+        } else {
+          delete _this3.linkRange;
+        }
+        _this3.hide();
+      });
+    }
+  }, {
+    key: 'show',
+    value: function show() {
+      _get(SnowTooltip.prototype.__proto__ || Object.getPrototypeOf(SnowTooltip.prototype), 'show', this).call(this);
+      this.root.removeAttribute('data-mode');
+    }
+  }]);
+
+  return SnowTooltip;
+}(_base.BaseTooltip);
+
+SnowTooltip.TEMPLATE = ['<a class="ql-preview" target="_blank" href="about:blank"></a>', '<input type="text" data-formula="e=mc^2" data-link="https://quilljs.com" data-video="Embed URL">', '<a class="ql-action"></a>', '<a class="ql-remove"></a>'].join('');
+
+exports.default = SnowTheme;
+
+/***/ }),
+/* 63 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _core = __webpack_require__(29);
+
+var _core2 = _interopRequireDefault(_core);
+
+var _align = __webpack_require__(36);
+
+var _direction = __webpack_require__(38);
+
+var _indent = __webpack_require__(64);
+
+var _blockquote = __webpack_require__(65);
+
+var _blockquote2 = _interopRequireDefault(_blockquote);
+
+var _header = __webpack_require__(66);
+
+var _header2 = _interopRequireDefault(_header);
+
+var _list = __webpack_require__(67);
+
+var _list2 = _interopRequireDefault(_list);
+
+var _background = __webpack_require__(37);
+
+var _color = __webpack_require__(26);
+
+var _font = __webpack_require__(39);
+
+var _size = __webpack_require__(40);
+
+var _bold = __webpack_require__(56);
+
+var _bold2 = _interopRequireDefault(_bold);
+
+var _italic = __webpack_require__(68);
+
+var _italic2 = _interopRequireDefault(_italic);
+
+var _link = __webpack_require__(27);
+
+var _link2 = _interopRequireDefault(_link);
+
+var _script = __webpack_require__(69);
+
+var _script2 = _interopRequireDefault(_script);
+
+var _strike = __webpack_require__(70);
+
+var _strike2 = _interopRequireDefault(_strike);
+
+var _underline = __webpack_require__(71);
+
+var _underline2 = _interopRequireDefault(_underline);
+
+var _image = __webpack_require__(72);
+
+var _image2 = _interopRequireDefault(_image);
+
+var _video = __webpack_require__(73);
+
+var _video2 = _interopRequireDefault(_video);
+
+var _code = __webpack_require__(13);
+
+var _code2 = _interopRequireDefault(_code);
+
+var _formula = __webpack_require__(74);
+
+var _formula2 = _interopRequireDefault(_formula);
+
+var _syntax = __webpack_require__(75);
+
+var _syntax2 = _interopRequireDefault(_syntax);
+
+var _toolbar = __webpack_require__(57);
+
+var _toolbar2 = _interopRequireDefault(_toolbar);
+
+var _icons = __webpack_require__(41);
+
+var _icons2 = _interopRequireDefault(_icons);
+
+var _picker = __webpack_require__(28);
+
+var _picker2 = _interopRequireDefault(_picker);
+
+var _colorPicker = __webpack_require__(59);
+
+var _colorPicker2 = _interopRequireDefault(_colorPicker);
+
+var _iconPicker = __webpack_require__(60);
+
+var _iconPicker2 = _interopRequireDefault(_iconPicker);
+
+var _tooltip = __webpack_require__(61);
+
+var _tooltip2 = _interopRequireDefault(_tooltip);
+
+var _bubble = __webpack_require__(108);
+
+var _bubble2 = _interopRequireDefault(_bubble);
+
+var _snow = __webpack_require__(62);
+
+var _snow2 = _interopRequireDefault(_snow);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+_core2.default.register({
+  'attributors/attribute/direction': _direction.DirectionAttribute,
+
+  'attributors/class/align': _align.AlignClass,
+  'attributors/class/background': _background.BackgroundClass,
+  'attributors/class/color': _color.ColorClass,
+  'attributors/class/direction': _direction.DirectionClass,
+  'attributors/class/font': _font.FontClass,
+  'attributors/class/size': _size.SizeClass,
+
+  'attributors/style/align': _align.AlignStyle,
+  'attributors/style/background': _background.BackgroundStyle,
+  'attributors/style/color': _color.ColorStyle,
+  'attributors/style/direction': _direction.DirectionStyle,
+  'attributors/style/font': _font.FontStyle,
+  'attributors/style/size': _size.SizeStyle
+}, true);
+
+_core2.default.register({
+  'formats/align': _align.AlignClass,
+  'formats/direction': _direction.DirectionClass,
+  'formats/indent': _indent.IndentClass,
+
+  'formats/background': _background.BackgroundStyle,
+  'formats/color': _color.ColorStyle,
+  'formats/font': _font.FontClass,
+  'formats/size': _size.SizeClass,
+
+  'formats/blockquote': _blockquote2.default,
+  'formats/code-block': _code2.default,
+  'formats/header': _header2.default,
+  'formats/list': _list2.default,
+
+  'formats/bold': _bold2.default,
+  'formats/code': _code.Code,
+  'formats/italic': _italic2.default,
+  'formats/link': _link2.default,
+  'formats/script': _script2.default,
+  'formats/strike': _strike2.default,
+  'formats/underline': _underline2.default,
+
+  'formats/image': _image2.default,
+  'formats/video': _video2.default,
+
+  'formats/list/item': _list.ListItem,
+
+  'modules/formula': _formula2.default,
+  'modules/syntax': _syntax2.default,
+  'modules/toolbar': _toolbar2.default,
+
+  'themes/bubble': _bubble2.default,
+  'themes/snow': _snow2.default,
+
+  'ui/icons': _icons2.default,
+  'ui/picker': _picker2.default,
+  'ui/icon-picker': _iconPicker2.default,
+  'ui/color-picker': _colorPicker2.default,
+  'ui/tooltip': _tooltip2.default
+}, true);
+
+exports.default = _core2.default;
+
+/***/ }),
+/* 64 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.IndentClass = undefined;
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };
+
+var _parchment = __webpack_require__(0);
+
+var _parchment2 = _interopRequireDefault(_parchment);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+var IdentAttributor = function (_Parchment$Attributor) {
+  _inherits(IdentAttributor, _Parchment$Attributor);
+
+  function IdentAttributor() {
+    _classCallCheck(this, IdentAttributor);
+
+    return _possibleConstructorReturn(this, (IdentAttributor.__proto__ || Object.getPrototypeOf(IdentAttributor)).apply(this, arguments));
+  }
+
+  _createClass(IdentAttributor, [{
+    key: 'add',
+    value: function add(node, value) {
+      if (value === '+1' || value === '-1') {
+        var indent = this.value(node) || 0;
+        value = value === '+1' ? indent + 1 : indent - 1;
+      }
+      if (value === 0) {
+        this.remove(node);
+        return true;
+      } else {
+        return _get(IdentAttributor.prototype.__proto__ || Object.getPrototypeOf(IdentAttributor.prototype), 'add', this).call(this, node, value);
+      }
+    }
+  }, {
+    key: 'canAdd',
+    value: function canAdd(node, value) {
+      return _get(IdentAttributor.prototype.__proto__ || Object.getPrototypeOf(IdentAttributor.prototype), 'canAdd', this).call(this, node, value) || _get(IdentAttributor.prototype.__proto__ || Object.getPrototypeOf(IdentAttributor.prototype), 'canAdd', this).call(this, node, parseInt(value));
+    }
+  }, {
+    key: 'value',
+    value: function value(node) {
+      return parseInt(_get(IdentAttributor.prototype.__proto__ || Object.getPrototypeOf(IdentAttributor.prototype), 'value', this).call(this, node)) || undefined; // Don't return NaN
+    }
+  }]);
+
+  return IdentAttributor;
+}(_parchment2.default.Attributor.Class);
+
+var IndentClass = new IdentAttributor('indent', 'ql-indent', {
+  scope: _parchment2.default.Scope.BLOCK,
+  whitelist: [1, 2, 3, 4, 5, 6, 7, 8]
+});
+
+exports.IndentClass = IndentClass;
+
+/***/ }),
+/* 65 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _block = __webpack_require__(4);
+
+var _block2 = _interopRequireDefault(_block);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+var Blockquote = function (_Block) {
+  _inherits(Blockquote, _Block);
+
+  function Blockquote() {
+    _classCallCheck(this, Blockquote);
+
+    return _possibleConstructorReturn(this, (Blockquote.__proto__ || Object.getPrototypeOf(Blockquote)).apply(this, arguments));
+  }
+
+  return Blockquote;
+}(_block2.default);
+
+Blockquote.blotName = 'blockquote';
+Blockquote.tagName = 'blockquote';
+
+exports.default = Blockquote;
+
+/***/ }),
+/* 66 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+var _block = __webpack_require__(4);
+
+var _block2 = _interopRequireDefault(_block);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+var Header = function (_Block) {
+  _inherits(Header, _Block);
+
+  function Header() {
+    _classCallCheck(this, Header);
+
+    return _possibleConstructorReturn(this, (Header.__proto__ || Object.getPrototypeOf(Header)).apply(this, arguments));
+  }
+
+  _createClass(Header, null, [{
+    key: 'formats',
+    value: function formats(domNode) {
+      return this.tagName.indexOf(domNode.tagName) + 1;
+    }
+  }]);
+
+  return Header;
+}(_block2.default);
+
+Header.blotName = 'header';
+Header.tagName = ['H1', 'H2', 'H3', 'H4', 'H5', 'H6'];
+
+exports.default = Header;
+
+/***/ }),
+/* 67 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = exports.ListItem = undefined;
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };
+
+var _parchment = __webpack_require__(0);
+
+var _parchment2 = _interopRequireDefault(_parchment);
+
+var _block = __webpack_require__(4);
+
+var _block2 = _interopRequireDefault(_block);
+
+var _container = __webpack_require__(25);
+
+var _container2 = _interopRequireDefault(_container);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+var ListItem = function (_Block) {
+  _inherits(ListItem, _Block);
+
+  function ListItem() {
+    _classCallCheck(this, ListItem);
+
+    return _possibleConstructorReturn(this, (ListItem.__proto__ || Object.getPrototypeOf(ListItem)).apply(this, arguments));
+  }
+
+  _createClass(ListItem, [{
+    key: 'format',
+    value: function format(name, value) {
+      if (name === List.blotName && !value) {
+        this.replaceWith(_parchment2.default.create(this.statics.scope));
+      } else {
+        _get(ListItem.prototype.__proto__ || Object.getPrototypeOf(ListItem.prototype), 'format', this).call(this, name, value);
+      }
+    }
+  }, {
+    key: 'remove',
+    value: function remove() {
+      if (this.prev == null && this.next == null) {
+        this.parent.remove();
+      } else {
+        _get(ListItem.prototype.__proto__ || Object.getPrototypeOf(ListItem.prototype), 'remove', this).call(this);
+      }
+    }
+  }, {
+    key: 'replaceWith',
+    value: function replaceWith(name, value) {
+      this.parent.isolate(this.offset(this.parent), this.length());
+      if (name === this.parent.statics.blotName) {
+        this.parent.replaceWith(name, value);
+        return this;
+      } else {
+        this.parent.unwrap();
+        return _get(ListItem.prototype.__proto__ || Object.getPrototypeOf(ListItem.prototype), 'replaceWith', this).call(this, name, value);
+      }
+    }
+  }], [{
+    key: 'formats',
+    value: function formats(domNode) {
+      return domNode.tagName === this.tagName ? undefined : _get(ListItem.__proto__ || Object.getPrototypeOf(ListItem), 'formats', this).call(this, domNode);
+    }
+  }]);
+
+  return ListItem;
+}(_block2.default);
+
+ListItem.blotName = 'list-item';
+ListItem.tagName = 'LI';
+
+var List = function (_Container) {
+  _inherits(List, _Container);
+
+  _createClass(List, null, [{
+    key: 'create',
+    value: function create(value) {
+      var tagName = value === 'ordered' ? 'OL' : 'UL';
+      var node = _get(List.__proto__ || Object.getPrototypeOf(List), 'create', this).call(this, tagName);
+      if (value === 'checked' || value === 'unchecked') {
+        node.setAttribute('data-checked', value === 'checked');
+      }
+      return node;
+    }
+  }, {
+    key: 'formats',
+    value: function formats(domNode) {
+      if (domNode.tagName === 'OL') return 'ordered';
+      if (domNode.tagName === 'UL') {
+        if (domNode.hasAttribute('data-checked')) {
+          return domNode.getAttribute('data-checked') === 'true' ? 'checked' : 'unchecked';
+        } else {
+          return 'bullet';
+        }
+      }
+      return undefined;
+    }
+  }]);
+
+  function List(domNode) {
+    _classCallCheck(this, List);
+
+    var _this2 = _possibleConstructorReturn(this, (List.__proto__ || Object.getPrototypeOf(List)).call(this, domNode));
+
+    var listEventHandler = function listEventHandler(e) {
+      if (e.target.parentNode !== domNode) return;
+      var format = _this2.statics.formats(domNode);
+      var blot = _parchment2.default.find(e.target);
+      if (format === 'checked') {
+        blot.format('list', 'unchecked');
+      } else if (format === 'unchecked') {
+        blot.format('list', 'checked');
+      }
+    };
+
+    domNode.addEventListener('touchstart', listEventHandler);
+    domNode.addEventListener('mousedown', listEventHandler);
+    return _this2;
+  }
+
+  _createClass(List, [{
+    key: 'format',
+    value: function format(name, value) {
+      if (this.children.length > 0) {
+        this.children.tail.format(name, value);
+      }
+    }
+  }, {
+    key: 'formats',
+    value: function formats() {
+      // We don't inherit from FormatBlot
+      return _defineProperty({}, this.statics.blotName, this.statics.formats(this.domNode));
+    }
+  }, {
+    key: 'insertBefore',
+    value: function insertBefore(blot, ref) {
+      if (blot instanceof ListItem) {
+        _get(List.prototype.__proto__ || Object.getPrototypeOf(List.prototype), 'insertBefore', this).call(this, blot, ref);
+      } else {
+        var index = ref == null ? this.length() : ref.offset(this);
+        var after = this.split(index);
+        after.parent.insertBefore(blot, after);
+      }
+    }
+  }, {
+    key: 'optimize',
+    value: function optimize(context) {
+      _get(List.prototype.__proto__ || Object.getPrototypeOf(List.prototype), 'optimize', this).call(this, context);
+      var next = this.next;
+      if (next != null && next.prev === this && next.statics.blotName === this.statics.blotName && next.domNode.tagName === this.domNode.tagName && next.domNode.getAttribute('data-checked') === this.domNode.getAttribute('data-checked')) {
+        next.moveChildren(this);
+        next.remove();
+      }
+    }
+  }, {
+    key: 'replace',
+    value: function replace(target) {
+      if (target.statics.blotName !== this.statics.blotName) {
+        var item = _parchment2.default.create(this.statics.defaultChild);
+        target.moveChildren(item);
+        this.appendChild(item);
+      }
+      _get(List.prototype.__proto__ || Object.getPrototypeOf(List.prototype), 'replace', this).call(this, target);
+    }
+  }]);
+
+  return List;
+}(_container2.default);
+
+List.blotName = 'list';
+List.scope = _parchment2.default.Scope.BLOCK_BLOT;
+List.tagName = ['OL', 'UL'];
+List.defaultChild = 'list-item';
+List.allowedChildren = [ListItem];
+
+exports.ListItem = ListItem;
+exports.default = List;
+
+/***/ }),
+/* 68 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _bold = __webpack_require__(56);
+
+var _bold2 = _interopRequireDefault(_bold);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+var Italic = function (_Bold) {
+  _inherits(Italic, _Bold);
+
+  function Italic() {
+    _classCallCheck(this, Italic);
+
+    return _possibleConstructorReturn(this, (Italic.__proto__ || Object.getPrototypeOf(Italic)).apply(this, arguments));
+  }
+
+  return Italic;
+}(_bold2.default);
+
+Italic.blotName = 'italic';
+Italic.tagName = ['EM', 'I'];
+
+exports.default = Italic;
+
+/***/ }),
+/* 69 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };
+
+var _inline = __webpack_require__(6);
+
+var _inline2 = _interopRequireDefault(_inline);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+var Script = function (_Inline) {
+  _inherits(Script, _Inline);
+
+  function Script() {
+    _classCallCheck(this, Script);
+
+    return _possibleConstructorReturn(this, (Script.__proto__ || Object.getPrototypeOf(Script)).apply(this, arguments));
+  }
+
+  _createClass(Script, null, [{
+    key: 'create',
+    value: function create(value) {
+      if (value === 'super') {
+        return document.createElement('sup');
+      } else if (value === 'sub') {
+        return document.createElement('sub');
+      } else {
+        return _get(Script.__proto__ || Object.getPrototypeOf(Script), 'create', this).call(this, value);
+      }
+    }
+  }, {
+    key: 'formats',
+    value: function formats(domNode) {
+      if (domNode.tagName === 'SUB') return 'sub';
+      if (domNode.tagName === 'SUP') return 'super';
+      return undefined;
+    }
+  }]);
+
+  return Script;
+}(_inline2.default);
+
+Script.blotName = 'script';
+Script.tagName = ['SUB', 'SUP'];
+
+exports.default = Script;
+
+/***/ }),
+/* 70 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _inline = __webpack_require__(6);
+
+var _inline2 = _interopRequireDefault(_inline);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+var Strike = function (_Inline) {
+  _inherits(Strike, _Inline);
+
+  function Strike() {
+    _classCallCheck(this, Strike);
+
+    return _possibleConstructorReturn(this, (Strike.__proto__ || Object.getPrototypeOf(Strike)).apply(this, arguments));
+  }
+
+  return Strike;
+}(_inline2.default);
+
+Strike.blotName = 'strike';
+Strike.tagName = 'S';
+
+exports.default = Strike;
+
+/***/ }),
+/* 71 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _inline = __webpack_require__(6);
+
+var _inline2 = _interopRequireDefault(_inline);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+var Underline = function (_Inline) {
+  _inherits(Underline, _Inline);
+
+  function Underline() {
+    _classCallCheck(this, Underline);
+
+    return _possibleConstructorReturn(this, (Underline.__proto__ || Object.getPrototypeOf(Underline)).apply(this, arguments));
+  }
+
+  return Underline;
+}(_inline2.default);
+
+Underline.blotName = 'underline';
+Underline.tagName = 'U';
+
+exports.default = Underline;
+
+/***/ }),
+/* 72 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };
+
+var _parchment = __webpack_require__(0);
+
+var _parchment2 = _interopRequireDefault(_parchment);
+
+var _link = __webpack_require__(27);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+var ATTRIBUTES = ['alt', 'height', 'width'];
+
+var Image = function (_Parchment$Embed) {
+  _inherits(Image, _Parchment$Embed);
+
+  function Image() {
+    _classCallCheck(this, Image);
+
+    return _possibleConstructorReturn(this, (Image.__proto__ || Object.getPrototypeOf(Image)).apply(this, arguments));
+  }
+
+  _createClass(Image, [{
+    key: 'format',
+    value: function format(name, value) {
+      if (ATTRIBUTES.indexOf(name) > -1) {
+        if (value) {
+          this.domNode.setAttribute(name, value);
+        } else {
+          this.domNode.removeAttribute(name);
+        }
+      } else {
+        _get(Image.prototype.__proto__ || Object.getPrototypeOf(Image.prototype), 'format', this).call(this, name, value);
+      }
+    }
+  }], [{
+    key: 'create',
+    value: function create(value) {
+      var node = _get(Image.__proto__ || Object.getPrototypeOf(Image), 'create', this).call(this, value);
+      if (typeof value === 'string') {
+        node.setAttribute('src', this.sanitize(value));
+      }
+      return node;
+    }
+  }, {
+    key: 'formats',
+    value: function formats(domNode) {
+      return ATTRIBUTES.reduce(function (formats, attribute) {
+        if (domNode.hasAttribute(attribute)) {
+          formats[attribute] = domNode.getAttribute(attribute);
+        }
+        return formats;
+      }, {});
+    }
+  }, {
+    key: 'match',
+    value: function match(url) {
+      return (/\.(jpe?g|gif|png)$/.test(url) || /^data:image\/.+;base64/.test(url)
+      );
+    }
+  }, {
+    key: 'sanitize',
+    value: function sanitize(url) {
+      return (0, _link.sanitize)(url, ['http', 'https', 'data']) ? url : '//:0';
+    }
+  }, {
+    key: 'value',
+    value: function value(domNode) {
+      return domNode.getAttribute('src');
+    }
+  }]);
+
+  return Image;
+}(_parchment2.default.Embed);
+
+Image.blotName = 'image';
+Image.tagName = 'IMG';
+
+exports.default = Image;
+
+/***/ }),
+/* 73 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };
+
+var _block = __webpack_require__(4);
+
+var _link = __webpack_require__(27);
+
+var _link2 = _interopRequireDefault(_link);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+var ATTRIBUTES = ['height', 'width'];
+
+var Video = function (_BlockEmbed) {
+  _inherits(Video, _BlockEmbed);
+
+  function Video() {
+    _classCallCheck(this, Video);
+
+    return _possibleConstructorReturn(this, (Video.__proto__ || Object.getPrototypeOf(Video)).apply(this, arguments));
+  }
+
+  _createClass(Video, [{
+    key: 'format',
+    value: function format(name, value) {
+      if (ATTRIBUTES.indexOf(name) > -1) {
+        if (value) {
+          this.domNode.setAttribute(name, value);
+        } else {
+          this.domNode.removeAttribute(name);
+        }
+      } else {
+        _get(Video.prototype.__proto__ || Object.getPrototypeOf(Video.prototype), 'format', this).call(this, name, value);
+      }
+    }
+  }], [{
+    key: 'create',
+    value: function create(value) {
+      var node = _get(Video.__proto__ || Object.getPrototypeOf(Video), 'create', this).call(this, value);
+      node.setAttribute('frameborder', '0');
+      node.setAttribute('allowfullscreen', true);
+      node.setAttribute('src', this.sanitize(value));
+      return node;
+    }
+  }, {
+    key: 'formats',
+    value: function formats(domNode) {
+      return ATTRIBUTES.reduce(function (formats, attribute) {
+        if (domNode.hasAttribute(attribute)) {
+          formats[attribute] = domNode.getAttribute(attribute);
+        }
+        return formats;
+      }, {});
+    }
+  }, {
+    key: 'sanitize',
+    value: function sanitize(url) {
+      return _link2.default.sanitize(url);
+    }
+  }, {
+    key: 'value',
+    value: function value(domNode) {
+      return domNode.getAttribute('src');
+    }
+  }]);
+
+  return Video;
+}(_block.BlockEmbed);
+
+Video.blotName = 'video';
+Video.className = 'ql-video';
+Video.tagName = 'IFRAME';
+
+exports.default = Video;
+
+/***/ }),
+/* 74 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = exports.FormulaBlot = undefined;
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };
+
+var _embed = __webpack_require__(35);
+
+var _embed2 = _interopRequireDefault(_embed);
+
+var _quill = __webpack_require__(5);
+
+var _quill2 = _interopRequireDefault(_quill);
+
+var _module = __webpack_require__(9);
+
+var _module2 = _interopRequireDefault(_module);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+var FormulaBlot = function (_Embed) {
+  _inherits(FormulaBlot, _Embed);
+
+  function FormulaBlot() {
+    _classCallCheck(this, FormulaBlot);
+
+    return _possibleConstructorReturn(this, (FormulaBlot.__proto__ || Object.getPrototypeOf(FormulaBlot)).apply(this, arguments));
+  }
+
+  _createClass(FormulaBlot, null, [{
+    key: 'create',
+    value: function create(value) {
+      var node = _get(FormulaBlot.__proto__ || Object.getPrototypeOf(FormulaBlot), 'create', this).call(this, value);
+      if (typeof value === 'string') {
+        window.katex.render(value, node, {
+          throwOnError: false,
+          errorColor: '#f00'
+        });
+        node.setAttribute('data-value', value);
+      }
+      return node;
+    }
+  }, {
+    key: 'value',
+    value: function value(domNode) {
+      return domNode.getAttribute('data-value');
+    }
+  }]);
+
+  return FormulaBlot;
+}(_embed2.default);
+
+FormulaBlot.blotName = 'formula';
+FormulaBlot.className = 'ql-formula';
+FormulaBlot.tagName = 'SPAN';
+
+var Formula = function (_Module) {
+  _inherits(Formula, _Module);
+
+  _createClass(Formula, null, [{
+    key: 'register',
+    value: function register() {
+      _quill2.default.register(FormulaBlot, true);
+    }
+  }]);
+
+  function Formula() {
+    _classCallCheck(this, Formula);
+
+    var _this2 = _possibleConstructorReturn(this, (Formula.__proto__ || Object.getPrototypeOf(Formula)).call(this));
+
+    if (window.katex == null) {
+      throw new Error('Formula module requires KaTeX.');
+    }
+    return _this2;
+  }
+
+  return Formula;
+}(_module2.default);
+
+exports.FormulaBlot = FormulaBlot;
+exports.default = Formula;
+
+/***/ }),
+/* 75 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = exports.CodeToken = exports.CodeBlock = undefined;
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };
+
+var _parchment = __webpack_require__(0);
+
+var _parchment2 = _interopRequireDefault(_parchment);
+
+var _quill = __webpack_require__(5);
+
+var _quill2 = _interopRequireDefault(_quill);
+
+var _module = __webpack_require__(9);
+
+var _module2 = _interopRequireDefault(_module);
+
+var _code = __webpack_require__(13);
+
+var _code2 = _interopRequireDefault(_code);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+var SyntaxCodeBlock = function (_CodeBlock) {
+  _inherits(SyntaxCodeBlock, _CodeBlock);
+
+  function SyntaxCodeBlock() {
+    _classCallCheck(this, SyntaxCodeBlock);
+
+    return _possibleConstructorReturn(this, (SyntaxCodeBlock.__proto__ || Object.getPrototypeOf(SyntaxCodeBlock)).apply(this, arguments));
+  }
+
+  _createClass(SyntaxCodeBlock, [{
+    key: 'replaceWith',
+    value: function replaceWith(block) {
+      this.domNode.textContent = this.domNode.textContent;
+      this.attach();
+      _get(SyntaxCodeBlock.prototype.__proto__ || Object.getPrototypeOf(SyntaxCodeBlock.prototype), 'replaceWith', this).call(this, block);
+    }
+  }, {
+    key: 'highlight',
+    value: function highlight(_highlight) {
+      var text = this.domNode.textContent;
+      if (this.cachedText !== text) {
+        if (text.trim().length > 0 || this.cachedText == null) {
+          this.domNode.innerHTML = _highlight(text);
+          this.domNode.normalize();
+          this.attach();
+        }
+        this.cachedText = text;
+      }
+    }
+  }]);
+
+  return SyntaxCodeBlock;
+}(_code2.default);
+
+SyntaxCodeBlock.className = 'ql-syntax';
+
+var CodeToken = new _parchment2.default.Attributor.Class('token', 'hljs', {
+  scope: _parchment2.default.Scope.INLINE
+});
+
+var Syntax = function (_Module) {
+  _inherits(Syntax, _Module);
+
+  _createClass(Syntax, null, [{
+    key: 'register',
+    value: function register() {
+      _quill2.default.register(CodeToken, true);
+      _quill2.default.register(SyntaxCodeBlock, true);
+    }
+  }]);
+
+  function Syntax(quill, options) {
+    _classCallCheck(this, Syntax);
+
+    var _this2 = _possibleConstructorReturn(this, (Syntax.__proto__ || Object.getPrototypeOf(Syntax)).call(this, quill, options));
+
+    if (typeof _this2.options.highlight !== 'function') {
+      throw new Error('Syntax module requires highlight.js. Please include the library on the page before Quill.');
+    }
+    var timer = null;
+    _this2.quill.on(_quill2.default.events.SCROLL_OPTIMIZE, function () {
+      clearTimeout(timer);
+      timer = setTimeout(function () {
+        _this2.highlight();
+        timer = null;
+      }, _this2.options.interval);
+    });
+    _this2.highlight();
+    return _this2;
+  }
+
+  _createClass(Syntax, [{
+    key: 'highlight',
+    value: function highlight() {
+      var _this3 = this;
+
+      if (this.quill.selection.composing) return;
+      this.quill.update(_quill2.default.sources.USER);
+      var range = this.quill.getSelection();
+      this.quill.scroll.descendants(SyntaxCodeBlock).forEach(function (code) {
+        code.highlight(_this3.options.highlight);
+      });
+      this.quill.update(_quill2.default.sources.SILENT);
+      if (range != null) {
+        this.quill.setSelection(range, _quill2.default.sources.SILENT);
+      }
+    }
+  }]);
+
+  return Syntax;
+}(_module2.default);
+
+Syntax.DEFAULTS = {
+  highlight: function () {
+    if (window.hljs == null) return null;
+    return function (text) {
+      var result = window.hljs.highlightAuto(text);
+      return result.value;
+    };
+  }(),
+  interval: 1000
+};
+
+exports.CodeBlock = SyntaxCodeBlock;
+exports.CodeToken = CodeToken;
+exports.default = Syntax;
+
+/***/ }),
+/* 76 */
+/***/ (function(module, exports) {
+
+module.exports = "<svg viewbox=\"0 0 18 18\"> <line class=ql-stroke x1=3 x2=15 y1=9 y2=9></line> <line class=ql-stroke x1=3 x2=13 y1=14 y2=14></line> <line class=ql-stroke x1=3 x2=9 y1=4 y2=4></line> </svg>";
+
+/***/ }),
+/* 77 */
+/***/ (function(module, exports) {
+
+module.exports = "<svg viewbox=\"0 0 18 18\"> <line class=ql-stroke x1=15 x2=3 y1=9 y2=9></line> <line class=ql-stroke x1=14 x2=4 y1=14 y2=14></line> <line class=ql-stroke x1=12 x2=6 y1=4 y2=4></line> </svg>";
+
+/***/ }),
+/* 78 */
+/***/ (function(module, exports) {
+
+module.exports = "<svg viewbox=\"0 0 18 18\"> <line class=ql-stroke x1=15 x2=3 y1=9 y2=9></line> <line class=ql-stroke x1=15 x2=5 y1=14 y2=14></line> <line class=ql-stroke x1=15 x2=9 y1=4 y2=4></line> </svg>";
+
+/***/ }),
+/* 79 */
+/***/ (function(module, exports) {
+
+module.exports = "<svg viewbox=\"0 0 18 18\"> <line class=ql-stroke x1=15 x2=3 y1=9 y2=9></line> <line class=ql-stroke x1=15 x2=3 y1=14 y2=14></line> <line class=ql-stroke x1=15 x2=3 y1=4 y2=4></line> </svg>";
+
+/***/ }),
+/* 80 */
+/***/ (function(module, exports) {
+
+module.exports = "<svg viewbox=\"0 0 18 18\"> <g class=\"ql-fill ql-color-label\"> <polygon points=\"6 6.868 6 6 5 6 5 7 5.942 7 6 6.868\"></polygon> <rect height=1 width=1 x=4 y=4></rect> <polygon points=\"6.817 5 6 5 6 6 6.38 6 6.817 5\"></polygon> <rect height=1 width=1 x=2 y=6></rect> <rect height=1 width=1 x=3 y=5></rect> <rect height=1 width=1 x=4 y=7></rect> <polygon points=\"4 11.439 4 11 3 11 3 12 3.755 12 4 11.439\"></polygon> <rect height=1 width=1 x=2 y=12></rect> <rect height=1 width=1 x=2 y=9></rect> <rect height=1 width=1 x=2 y=15></rect> <polygon points=\"4.63 10 4 10 4 11 4.192 11 4.63 10\"></polygon> <rect height=1 width=1 x=3 y=8></rect> <path d=M10.832,4.2L11,4.582V4H10.708A1.948,1.948,0,0,1,10.832,4.2Z></path> <path d=M7,4.582L7.168,4.2A1.929,1.929,0,0,1,7.292,4H7V4.582Z></path> <path d=M8,13H7.683l-0.351.8a1.933,1.933,0,0,1-.124.2H8V13Z></path> <rect height=1 width=1 x=12 y=2></rect> <rect height=1 width=1 x=11 y=3></rect> <path d=M9,3H8V3.282A1.985,1.985,0,0,1,9,3Z></path> <rect height=1 width=1 x=2 y=3></rect> <rect height=1 width=1 x=6 y=2></rect> <rect height=1 width=1 x=3 y=2></rect> <rect height=1 width=1 x=5 y=3></rect> <rect height=1 width=1 x=9 y=2></rect> <rect height=1 width=1 x=15 y=14></rect> <polygon points=\"13.447 10.174 13.469 10.225 13.472 10.232 13.808 11 14 11 14 10 13.37 10 13.447 10.174\"></polygon> <rect height=1 width=1 x=13 y=7></rect> <rect height=1 width=1 x=15 y=5></rect> <rect height=1 width=1 x=14 y=6></rect> <rect height=1 width=1 x=15 y=8></rect> <rect height=1 width=1 x=14 y=9></rect> <path d=M3.775,14H3v1H4V14.314A1.97,1.97,0,0,1,3.775,14Z></path> <rect height=1 width=1 x=14 y=3></rect> <polygon points=\"12 6.868 12 6 11.62 6 12 6.868\"></polygon> <rect height=1 width=1 x=15 y=2></rect> <rect height=1 width=1 x=12 y=5></rect> <rect height=1 width=1 x=13 y=4></rect> <polygon points=\"12.933 9 13 9 13 8 12.495 8 12.933 9\"></polygon> <rect height=1 width=1 x=9 y=14></rect> <rect height=1 width=1 x=8 y=15></rect> <path d=M6,14.926V15H7V14.316A1.993,1.993,0,0,1,6,14.926Z></path> <rect height=1 width=1 x=5 y=15></rect> <path d=M10.668,13.8L10.317,13H10v1h0.792A1.947,1.947,0,0,1,10.668,13.8Z></path> <rect height=1 width=1 x=11 y=15></rect> <path d=M14.332,12.2a1.99,1.99,0,0,1,.166.8H15V12H14.245Z></path> <rect height=1 width=1 x=14 y=15></rect> <rect height=1 width=1 x=15 y=11></rect> </g> <polyline class=ql-stroke points=\"5.5 13 9 5 12.5 13\"></polyline> <line class=ql-stroke x1=11.63 x2=6.38 y1=11 y2=11></line> </svg>";
+
+/***/ }),
+/* 81 */
+/***/ (function(module, exports) {
+
+module.exports = "<svg viewbox=\"0 0 18 18\"> <rect class=\"ql-fill ql-stroke\" height=3 width=3 x=4 y=5></rect> <rect class=\"ql-fill ql-stroke\" height=3 width=3 x=11 y=5></rect> <path class=\"ql-even ql-fill ql-stroke\" d=M7,8c0,4.031-3,5-3,5></path> <path class=\"ql-even ql-fill ql-stroke\" d=M14,8c0,4.031-3,5-3,5></path> </svg>";
+
+/***/ }),
+/* 82 */
+/***/ (function(module, exports) {
+
+module.exports = "<svg viewbox=\"0 0 18 18\"> <path class=ql-stroke d=M5,4H9.5A2.5,2.5,0,0,1,12,6.5v0A2.5,2.5,0,0,1,9.5,9H5A0,0,0,0,1,5,9V4A0,0,0,0,1,5,4Z></path> <path class=ql-stroke d=M5,9h5.5A2.5,2.5,0,0,1,13,11.5v0A2.5,2.5,0,0,1,10.5,14H5a0,0,0,0,1,0,0V9A0,0,0,0,1,5,9Z></path> </svg>";
+
+/***/ }),
+/* 83 */
+/***/ (function(module, exports) {
+
+module.exports = "<svg class=\"\" viewbox=\"0 0 18 18\"> <line class=ql-stroke x1=5 x2=13 y1=3 y2=3></line> <line class=ql-stroke x1=6 x2=9.35 y1=12 y2=3></line> <line class=ql-stroke x1=11 x2=15 y1=11 y2=15></line> <line class=ql-stroke x1=15 x2=11 y1=11 y2=15></line> <rect class=ql-fill height=1 rx=0.5 ry=0.5 width=7 x=2 y=14></rect> </svg>";
+
+/***/ }),
+/* 84 */
+/***/ (function(module, exports) {
+
+module.exports = "<svg viewbox=\"0 0 18 18\"> <line class=\"ql-color-label ql-stroke ql-transparent\" x1=3 x2=15 y1=15 y2=15></line> <polyline class=ql-stroke points=\"5.5 11 9 3 12.5 11\"></polyline> <line class=ql-stroke x1=11.63 x2=6.38 y1=9 y2=9></line> </svg>";
+
+/***/ }),
+/* 85 */
+/***/ (function(module, exports) {
+
+module.exports = "<svg viewbox=\"0 0 18 18\"> <polygon class=\"ql-stroke ql-fill\" points=\"3 11 5 9 3 7 3 11\"></polygon> <line class=\"ql-stroke ql-fill\" x1=15 x2=11 y1=4 y2=4></line> <path class=ql-fill d=M11,3a3,3,0,0,0,0,6h1V3H11Z></path> <rect class=ql-fill height=11 width=1 x=11 y=4></rect> <rect class=ql-fill height=11 width=1 x=13 y=4></rect> </svg>";
+
+/***/ }),
+/* 86 */
+/***/ (function(module, exports) {
+
+module.exports = "<svg viewbox=\"0 0 18 18\"> <polygon class=\"ql-stroke ql-fill\" points=\"15 12 13 10 15 8 15 12\"></polygon> <line class=\"ql-stroke ql-fill\" x1=9 x2=5 y1=4 y2=4></line> <path class=ql-fill d=M5,3A3,3,0,0,0,5,9H6V3H5Z></path> <rect class=ql-fill height=11 width=1 x=5 y=4></rect> <rect class=ql-fill height=11 width=1 x=7 y=4></rect> </svg>";
+
+/***/ }),
+/* 87 */
+/***/ (function(module, exports) {
+
+module.exports = "<svg viewbox=\"0 0 18 18\"> <path class=ql-fill d=M14,16H4a1,1,0,0,1,0-2H14A1,1,0,0,1,14,16Z /> <path class=ql-fill d=M14,4H4A1,1,0,0,1,4,2H14A1,1,0,0,1,14,4Z /> <rect class=ql-fill x=3 y=6 width=12 height=6 rx=1 ry=1 /> </svg>";
+
+/***/ }),
+/* 88 */
+/***/ (function(module, exports) {
+
+module.exports = "<svg viewbox=\"0 0 18 18\"> <path class=ql-fill d=M13,16H5a1,1,0,0,1,0-2h8A1,1,0,0,1,13,16Z /> <path class=ql-fill d=M13,4H5A1,1,0,0,1,5,2h8A1,1,0,0,1,13,4Z /> <rect class=ql-fill x=2 y=6 width=14 height=6 rx=1 ry=1 /> </svg>";
+
+/***/ }),
+/* 89 */
+/***/ (function(module, exports) {
+
+module.exports = "<svg viewbox=\"0 0 18 18\"> <path class=ql-fill d=M15,8H13a1,1,0,0,1,0-2h2A1,1,0,0,1,15,8Z /> <path class=ql-fill d=M15,12H13a1,1,0,0,1,0-2h2A1,1,0,0,1,15,12Z /> <path class=ql-fill d=M15,16H5a1,1,0,0,1,0-2H15A1,1,0,0,1,15,16Z /> <path class=ql-fill d=M15,4H5A1,1,0,0,1,5,2H15A1,1,0,0,1,15,4Z /> <rect class=ql-fill x=2 y=6 width=8 height=6 rx=1 ry=1 /> </svg>";
+
+/***/ }),
+/* 90 */
+/***/ (function(module, exports) {
+
+module.exports = "<svg viewbox=\"0 0 18 18\"> <path class=ql-fill d=M5,8H3A1,1,0,0,1,3,6H5A1,1,0,0,1,5,8Z /> <path class=ql-fill d=M5,12H3a1,1,0,0,1,0-2H5A1,1,0,0,1,5,12Z /> <path class=ql-fill d=M13,16H3a1,1,0,0,1,0-2H13A1,1,0,0,1,13,16Z /> <path class=ql-fill d=M13,4H3A1,1,0,0,1,3,2H13A1,1,0,0,1,13,4Z /> <rect class=ql-fill x=8 y=6 width=8 height=6 rx=1 ry=1 transform=\"translate(24 18) rotate(-180)\"/> </svg>";
+
+/***/ }),
+/* 91 */
+/***/ (function(module, exports) {
+
+module.exports = "<svg viewbox=\"0 0 18 18\"> <path class=ql-fill d=M11.759,2.482a2.561,2.561,0,0,0-3.53.607A7.656,7.656,0,0,0,6.8,6.2C6.109,9.188,5.275,14.677,4.15,14.927a1.545,1.545,0,0,0-1.3-.933A0.922,0.922,0,0,0,2,15.036S1.954,16,4.119,16s3.091-2.691,3.7-5.553c0.177-.826.36-1.726,0.554-2.6L8.775,6.2c0.381-1.421.807-2.521,1.306-2.676a1.014,1.014,0,0,0,1.02.56A0.966,0.966,0,0,0,11.759,2.482Z></path> <rect class=ql-fill height=1.6 rx=0.8 ry=0.8 width=5 x=5.15 y=6.2></rect> <path class=ql-fill d=M13.663,12.027a1.662,1.662,0,0,1,.266-0.276q0.193,0.069.456,0.138a2.1,2.1,0,0,0,.535.069,1.075,1.075,0,0,0,.767-0.3,1.044,1.044,0,0,0,.314-0.8,0.84,0.84,0,0,0-.238-0.619,0.8,0.8,0,0,0-.594-0.239,1.154,1.154,0,0,0-.781.3,4.607,4.607,0,0,0-.781,1q-0.091.15-.218,0.346l-0.246.38c-0.068-.288-0.137-0.582-0.212-0.885-0.459-1.847-2.494-.984-2.941-0.8-0.482.2-.353,0.647-0.094,0.529a0.869,0.869,0,0,1,1.281.585c0.217,0.751.377,1.436,0.527,2.038a5.688,5.688,0,0,1-.362.467,2.69,2.69,0,0,1-.264.271q-0.221-.08-0.471-0.147a2.029,2.029,0,0,0-.522-0.066,1.079,1.079,0,0,0-.768.3A1.058,1.058,0,0,0,9,15.131a0.82,0.82,0,0,0,.832.852,1.134,1.134,0,0,0,.787-0.3,5.11,5.11,0,0,0,.776-0.993q0.141-.219.215-0.34c0.046-.076.122-0.194,0.223-0.346a2.786,2.786,0,0,0,.918,1.726,2.582,2.582,0,0,0,2.376-.185c0.317-.181.212-0.565,0-0.494A0.807,0.807,0,0,1,14.176,15a5.159,5.159,0,0,1-.913-2.446l0,0Q13.487,12.24,13.663,12.027Z></path> </svg>";
+
+/***/ }),
+/* 92 */
+/***/ (function(module, exports) {
+
+module.exports = "<svg viewBox=\"0 0 18 18\"> <path class=ql-fill d=M10,4V14a1,1,0,0,1-2,0V10H3v4a1,1,0,0,1-2,0V4A1,1,0,0,1,3,4V8H8V4a1,1,0,0,1,2,0Zm6.06787,9.209H14.98975V7.59863a.54085.54085,0,0,0-.605-.60547h-.62744a1.01119,1.01119,0,0,0-.748.29688L11.645,8.56641a.5435.5435,0,0,0-.022.8584l.28613.30762a.53861.53861,0,0,0,.84717.0332l.09912-.08789a1.2137,1.2137,0,0,0,.2417-.35254h.02246s-.01123.30859-.01123.60547V13.209H12.041a.54085.54085,0,0,0-.605.60547v.43945a.54085.54085,0,0,0,.605.60547h4.02686a.54085.54085,0,0,0,.605-.60547v-.43945A.54085.54085,0,0,0,16.06787,13.209Z /> </svg>";
+
+/***/ }),
+/* 93 */
+/***/ (function(module, exports) {
+
+module.exports = "<svg viewBox=\"0 0 18 18\"> <path class=ql-fill d=M16.73975,13.81445v.43945a.54085.54085,0,0,1-.605.60547H11.855a.58392.58392,0,0,1-.64893-.60547V14.0127c0-2.90527,3.39941-3.42187,3.39941-4.55469a.77675.77675,0,0,0-.84717-.78125,1.17684,1.17684,0,0,0-.83594.38477c-.2749.26367-.561.374-.85791.13184l-.4292-.34082c-.30811-.24219-.38525-.51758-.1543-.81445a2.97155,2.97155,0,0,1,2.45361-1.17676,2.45393,2.45393,0,0,1,2.68408,2.40918c0,2.45312-3.1792,2.92676-3.27832,3.93848h2.79443A.54085.54085,0,0,1,16.73975,13.81445ZM9,3A.99974.99974,0,0,0,8,4V8H3V4A1,1,0,0,0,1,4V14a1,1,0,0,0,2,0V10H8v4a1,1,0,0,0,2,0V4A.99974.99974,0,0,0,9,3Z /> </svg>";
+
+/***/ }),
+/* 94 */
+/***/ (function(module, exports) {
+
+module.exports = "<svg viewbox=\"0 0 18 18\"> <line class=ql-stroke x1=7 x2=13 y1=4 y2=4></line> <line class=ql-stroke x1=5 x2=11 y1=14 y2=14></line> <line class=ql-stroke x1=8 x2=10 y1=14 y2=4></line> </svg>";
+
+/***/ }),
+/* 95 */
+/***/ (function(module, exports) {
+
+module.exports = "<svg viewbox=\"0 0 18 18\"> <rect class=ql-stroke height=10 width=12 x=3 y=4></rect> <circle class=ql-fill cx=6 cy=7 r=1></circle> <polyline class=\"ql-even ql-fill\" points=\"5 12 5 11 7 9 8 10 11 7 13 9 13 12 5 12\"></polyline> </svg>";
+
+/***/ }),
+/* 96 */
+/***/ (function(module, exports) {
+
+module.exports = "<svg viewbox=\"0 0 18 18\"> <line class=ql-stroke x1=3 x2=15 y1=14 y2=14></line> <line class=ql-stroke x1=3 x2=15 y1=4 y2=4></line> <line class=ql-stroke x1=9 x2=15 y1=9 y2=9></line> <polyline class=\"ql-fill ql-stroke\" points=\"3 7 3 11 5 9 3 7\"></polyline> </svg>";
+
+/***/ }),
+/* 97 */
+/***/ (function(module, exports) {
+
+module.exports = "<svg viewbox=\"0 0 18 18\"> <line class=ql-stroke x1=3 x2=15 y1=14 y2=14></line> <line class=ql-stroke x1=3 x2=15 y1=4 y2=4></line> <line class=ql-stroke x1=9 x2=15 y1=9 y2=9></line> <polyline class=ql-stroke points=\"5 7 5 11 3 9 5 7\"></polyline> </svg>";
+
+/***/ }),
+/* 98 */
+/***/ (function(module, exports) {
+
+module.exports = "<svg viewbox=\"0 0 18 18\"> <line class=ql-stroke x1=7 x2=11 y1=7 y2=11></line> <path class=\"ql-even ql-stroke\" d=M8.9,4.577a3.476,3.476,0,0,1,.36,4.679A3.476,3.476,0,0,1,4.577,8.9C3.185,7.5,2.035,6.4,4.217,4.217S7.5,3.185,8.9,4.577Z></path> <path class=\"ql-even ql-stroke\" d=M13.423,9.1a3.476,3.476,0,0,0-4.679-.36,3.476,3.476,0,0,0,.36,4.679c1.392,1.392,2.5,2.542,4.679.36S14.815,10.5,13.423,9.1Z></path> </svg>";
+
+/***/ }),
+/* 99 */
+/***/ (function(module, exports) {
+
+module.exports = "<svg viewbox=\"0 0 18 18\"> <line class=ql-stroke x1=7 x2=15 y1=4 y2=4></line> <line class=ql-stroke x1=7 x2=15 y1=9 y2=9></line> <line class=ql-stroke x1=7 x2=15 y1=14 y2=14></line> <line class=\"ql-stroke ql-thin\" x1=2.5 x2=4.5 y1=5.5 y2=5.5></line> <path class=ql-fill d=M3.5,6A0.5,0.5,0,0,1,3,5.5V3.085l-0.276.138A0.5,0.5,0,0,1,2.053,3c-0.124-.247-0.023-0.324.224-0.447l1-.5A0.5,0.5,0,0,1,4,2.5v3A0.5,0.5,0,0,1,3.5,6Z></path> <path class=\"ql-stroke ql-thin\" d=M4.5,10.5h-2c0-.234,1.85-1.076,1.85-2.234A0.959,0.959,0,0,0,2.5,8.156></path> <path class=\"ql-stroke ql-thin\" d=M2.5,14.846a0.959,0.959,0,0,0,1.85-.109A0.7,0.7,0,0,0,3.75,14a0.688,0.688,0,0,0,.6-0.736,0.959,0.959,0,0,0-1.85-.109></path> </svg>";
+
+/***/ }),
+/* 100 */
+/***/ (function(module, exports) {
+
+module.exports = "<svg viewbox=\"0 0 18 18\"> <line class=ql-stroke x1=6 x2=15 y1=4 y2=4></line> <line class=ql-stroke x1=6 x2=15 y1=9 y2=9></line> <line class=ql-stroke x1=6 x2=15 y1=14 y2=14></line> <line class=ql-stroke x1=3 x2=3 y1=4 y2=4></line> <line class=ql-stroke x1=3 x2=3 y1=9 y2=9></line> <line class=ql-stroke x1=3 x2=3 y1=14 y2=14></line> </svg>";
+
+/***/ }),
+/* 101 */
+/***/ (function(module, exports) {
+
+module.exports = "<svg class=\"\" viewbox=\"0 0 18 18\"> <line class=ql-stroke x1=9 x2=15 y1=4 y2=4></line> <polyline class=ql-stroke points=\"3 4 4 5 6 3\"></polyline> <line class=ql-stroke x1=9 x2=15 y1=14 y2=14></line> <polyline class=ql-stroke points=\"3 14 4 15 6 13\"></polyline> <line class=ql-stroke x1=9 x2=15 y1=9 y2=9></line> <polyline class=ql-stroke points=\"3 9 4 10 6 8\"></polyline> </svg>";
+
+/***/ }),
+/* 102 */
+/***/ (function(module, exports) {
+
+module.exports = "<svg viewbox=\"0 0 18 18\"> <path class=ql-fill d=M15.5,15H13.861a3.858,3.858,0,0,0,1.914-2.975,1.8,1.8,0,0,0-1.6-1.751A1.921,1.921,0,0,0,12.021,11.7a0.50013,0.50013,0,1,0,.957.291h0a0.914,0.914,0,0,1,1.053-.725,0.81,0.81,0,0,1,.744.762c0,1.076-1.16971,1.86982-1.93971,2.43082A1.45639,1.45639,0,0,0,12,15.5a0.5,0.5,0,0,0,.5.5h3A0.5,0.5,0,0,0,15.5,15Z /> <path class=ql-fill d=M9.65,5.241a1,1,0,0,0-1.409.108L6,7.964,3.759,5.349A1,1,0,0,0,2.192,6.59178Q2.21541,6.6213,2.241,6.649L4.684,9.5,2.241,12.35A1,1,0,0,0,3.71,13.70722q0.02557-.02768.049-0.05722L6,11.036,8.241,13.65a1,1,0,1,0,1.567-1.24277Q9.78459,12.3777,9.759,12.35L7.316,9.5,9.759,6.651A1,1,0,0,0,9.65,5.241Z /> </svg>";
+
+/***/ }),
+/* 103 */
+/***/ (function(module, exports) {
+
+module.exports = "<svg viewbox=\"0 0 18 18\"> <path class=ql-fill d=M15.5,7H13.861a4.015,4.015,0,0,0,1.914-2.975,1.8,1.8,0,0,0-1.6-1.751A1.922,1.922,0,0,0,12.021,3.7a0.5,0.5,0,1,0,.957.291,0.917,0.917,0,0,1,1.053-.725,0.81,0.81,0,0,1,.744.762c0,1.077-1.164,1.925-1.934,2.486A1.423,1.423,0,0,0,12,7.5a0.5,0.5,0,0,0,.5.5h3A0.5,0.5,0,0,0,15.5,7Z /> <path class=ql-fill d=M9.651,5.241a1,1,0,0,0-1.41.108L6,7.964,3.759,5.349a1,1,0,1,0-1.519,1.3L4.683,9.5,2.241,12.35a1,1,0,1,0,1.519,1.3L6,11.036,8.241,13.65a1,1,0,0,0,1.519-1.3L7.317,9.5,9.759,6.651A1,1,0,0,0,9.651,5.241Z /> </svg>";
+
+/***/ }),
+/* 104 */
+/***/ (function(module, exports) {
+
+module.exports = "<svg viewbox=\"0 0 18 18\"> <line class=\"ql-stroke ql-thin\" x1=15.5 x2=2.5 y1=8.5 y2=9.5></line> <path class=ql-fill d=M9.007,8C6.542,7.791,6,7.519,6,6.5,6,5.792,7.283,5,9,5c1.571,0,2.765.679,2.969,1.309a1,1,0,0,0,1.9-.617C13.356,4.106,11.354,3,9,3,6.2,3,4,4.538,4,6.5a3.2,3.2,0,0,0,.5,1.843Z></path> <path class=ql-fill d=M8.984,10C11.457,10.208,12,10.479,12,11.5c0,0.708-1.283,1.5-3,1.5-1.571,0-2.765-.679-2.969-1.309a1,1,0,1,0-1.9.617C4.644,13.894,6.646,15,9,15c2.8,0,5-1.538,5-3.5a3.2,3.2,0,0,0-.5-1.843Z></path> </svg>";
+
+/***/ }),
+/* 105 */
+/***/ (function(module, exports) {
+
+module.exports = "<svg viewbox=\"0 0 18 18\"> <path class=ql-stroke d=M5,3V9a4.012,4.012,0,0,0,4,4H9a4.012,4.012,0,0,0,4-4V3></path> <rect class=ql-fill height=1 rx=0.5 ry=0.5 width=12 x=3 y=15></rect> </svg>";
+
+/***/ }),
+/* 106 */
+/***/ (function(module, exports) {
+
+module.exports = "<svg viewbox=\"0 0 18 18\"> <rect class=ql-stroke height=12 width=12 x=3 y=3></rect> <rect class=ql-fill height=12 width=1 x=5 y=3></rect> <rect class=ql-fill height=12 width=1 x=12 y=3></rect> <rect class=ql-fill height=2 width=8 x=5 y=8></rect> <rect class=ql-fill height=1 width=3 x=3 y=5></rect> <rect class=ql-fill height=1 width=3 x=3 y=7></rect> <rect class=ql-fill height=1 width=3 x=3 y=10></rect> <rect class=ql-fill height=1 width=3 x=3 y=12></rect> <rect class=ql-fill height=1 width=3 x=12 y=5></rect> <rect class=ql-fill height=1 width=3 x=12 y=7></rect> <rect class=ql-fill height=1 width=3 x=12 y=10></rect> <rect class=ql-fill height=1 width=3 x=12 y=12></rect> </svg>";
+
+/***/ }),
+/* 107 */
+/***/ (function(module, exports) {
+
+module.exports = "<svg viewbox=\"0 0 18 18\"> <polygon class=ql-stroke points=\"7 11 9 13 11 11 7 11\"></polygon> <polygon class=ql-stroke points=\"7 7 9 5 11 7 7 7\"></polygon> </svg>";
+
+/***/ }),
+/* 108 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = exports.BubbleTooltip = undefined;
+
+var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+var _extend = __webpack_require__(3);
+
+var _extend2 = _interopRequireDefault(_extend);
+
+var _emitter = __webpack_require__(8);
+
+var _emitter2 = _interopRequireDefault(_emitter);
+
+var _base = __webpack_require__(43);
+
+var _base2 = _interopRequireDefault(_base);
+
+var _selection = __webpack_require__(15);
+
+var _icons = __webpack_require__(41);
+
+var _icons2 = _interopRequireDefault(_icons);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+var TOOLBAR_CONFIG = [['bold', 'italic', 'link'], [{ header: 1 }, { header: 2 }, 'blockquote']];
+
+var BubbleTheme = function (_BaseTheme) {
+  _inherits(BubbleTheme, _BaseTheme);
+
+  function BubbleTheme(quill, options) {
+    _classCallCheck(this, BubbleTheme);
+
+    if (options.modules.toolbar != null && options.modules.toolbar.container == null) {
+      options.modules.toolbar.container = TOOLBAR_CONFIG;
+    }
+
+    var _this = _possibleConstructorReturn(this, (BubbleTheme.__proto__ || Object.getPrototypeOf(BubbleTheme)).call(this, quill, options));
+
+    _this.quill.container.classList.add('ql-bubble');
+    return _this;
+  }
+
+  _createClass(BubbleTheme, [{
+    key: 'extendToolbar',
+    value: function extendToolbar(toolbar) {
+      this.tooltip = new BubbleTooltip(this.quill, this.options.bounds);
+      this.tooltip.root.appendChild(toolbar.container);
+      this.buildButtons([].slice.call(toolbar.container.querySelectorAll('button')), _icons2.default);
+      this.buildPickers([].slice.call(toolbar.container.querySelectorAll('select')), _icons2.default);
+    }
+  }]);
+
+  return BubbleTheme;
+}(_base2.default);
+
+BubbleTheme.DEFAULTS = (0, _extend2.default)(true, {}, _base2.default.DEFAULTS, {
+  modules: {
+    toolbar: {
+      handlers: {
+        link: function link(value) {
+          if (!value) {
+            this.quill.format('link', false);
+          } else {
+            this.quill.theme.tooltip.edit();
+          }
+        }
+      }
+    }
+  }
+});
+
+var BubbleTooltip = function (_BaseTooltip) {
+  _inherits(BubbleTooltip, _BaseTooltip);
+
+  function BubbleTooltip(quill, bounds) {
+    _classCallCheck(this, BubbleTooltip);
+
+    var _this2 = _possibleConstructorReturn(this, (BubbleTooltip.__proto__ || Object.getPrototypeOf(BubbleTooltip)).call(this, quill, bounds));
+
+    _this2.quill.on(_emitter2.default.events.EDITOR_CHANGE, function (type, range, oldRange, source) {
+      if (type !== _emitter2.default.events.SELECTION_CHANGE) return;
+      if (range != null && range.length > 0 && source === _emitter2.default.sources.USER) {
+        _this2.show();
+        // Lock our width so we will expand beyond our offsetParent boundaries
+        _this2.root.style.left = '0px';
+        _this2.root.style.width = '';
+        _this2.root.style.width = _this2.root.offsetWidth + 'px';
+        var lines = _this2.quill.getLines(range.index, range.length);
+        if (lines.length === 1) {
+          _this2.position(_this2.quill.getBounds(range));
+        } else {
+          var lastLine = lines[lines.length - 1];
+          var index = _this2.quill.getIndex(lastLine);
+          var length = Math.min(lastLine.length() - 1, range.index + range.length - index);
+          var _bounds = _this2.quill.getBounds(new _selection.Range(index, length));
+          _this2.position(_bounds);
+        }
+      } else if (document.activeElement !== _this2.textbox && _this2.quill.hasFocus()) {
+        _this2.hide();
+      }
+    });
+    return _this2;
+  }
+
+  _createClass(BubbleTooltip, [{
+    key: 'listen',
+    value: function listen() {
+      var _this3 = this;
+
+      _get(BubbleTooltip.prototype.__proto__ || Object.getPrototypeOf(BubbleTooltip.prototype), 'listen', this).call(this);
+      this.root.querySelector('.ql-close').addEventListener('click', function () {
+        _this3.root.classList.remove('ql-editing');
+      });
+      this.quill.on(_emitter2.default.events.SCROLL_OPTIMIZE, function () {
+        // Let selection be restored by toolbar handlers before repositioning
+        setTimeout(function () {
+          if (_this3.root.classList.contains('ql-hidden')) return;
+          var range = _this3.quill.getSelection();
+          if (range != null) {
+            _this3.position(_this3.quill.getBounds(range));
+          }
+        }, 1);
+      });
+    }
+  }, {
+    key: 'cancel',
+    value: function cancel() {
+      this.show();
+    }
+  }, {
+    key: 'position',
+    value: function position(reference) {
+      var shift = _get(BubbleTooltip.prototype.__proto__ || Object.getPrototypeOf(BubbleTooltip.prototype), 'position', this).call(this, reference);
+      var arrow = this.root.querySelector('.ql-tooltip-arrow');
+      arrow.style.marginLeft = '';
+      if (shift === 0) return shift;
+      arrow.style.marginLeft = -1 * shift - arrow.offsetWidth / 2 + 'px';
+    }
+  }]);
+
+  return BubbleTooltip;
+}(_base.BaseTooltip);
+
+BubbleTooltip.TEMPLATE = ['<span class="ql-tooltip-arrow"></span>', '<div class="ql-tooltip-editor">', '<input type="text" data-formula="e=mc^2" data-link="https://quilljs.com" data-video="Embed URL">', '<a class="ql-close"></a>', '</div>'].join('');
+
+exports.BubbleTooltip = BubbleTooltip;
+exports.default = BubbleTheme;
+
+/***/ }),
+/* 109 */
+/***/ (function(module, exports, __webpack_require__) {
+
+module.exports = __webpack_require__(63);
+
+
+/***/ })
+/******/ ])["default"];
+});
\ No newline at end of file
diff --git a/htdocs/cgi-bin/wsrc/quill/quill.min.js b/htdocs/cgi-bin/wsrc/quill/quill.min.js
new file mode 100644 (file)
index 0000000..ff30fd9
--- /dev/null
@@ -0,0 +1,8 @@
+/*!
+ * Quill Editor v1.3.6
+ * https://quilljs.com/
+ * Copyright (c) 2014, Jason Chen
+ * Copyright (c) 2013, salesforce.com
+ */
+!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.Quill=e():t.Quill=e()}("undefined"!=typeof self?self:this,function(){return function(t){function e(r){if(n[r])return n[r].exports;var o=n[r]={i:r,l:!1,exports:{}};return t[r].call(o.exports,o,o.exports,e),o.l=!0,o.exports}var n={};return e.m=t,e.c=n,e.d=function(t,n,r){e.o(t,n)||Object.defineProperty(t,n,{configurable:!1,enumerable:!0,get:r})},e.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,"a",n),n},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p="",e(e.s=45)}([function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(17),o=n(18),i=n(19),l=n(48),a=n(49),s=n(50),u=n(51),c=n(52),f=n(11),h=n(29),p=n(30),d=n(28),y=n(1),v={Scope:y.Scope,create:y.create,find:y.find,query:y.query,register:y.register,Container:r.default,Format:o.default,Leaf:i.default,Embed:u.default,Scroll:l.default,Block:s.default,Inline:a.default,Text:c.default,Attributor:{Attribute:f.default,Class:h.default,Style:p.default,Store:d.default}};e.default=v},function(t,e,n){"use strict";function r(t,e){var n=i(t);if(null==n)throw new s("Unable to create "+t+" blot");var r=n;return new r(t instanceof Node||t.nodeType===Node.TEXT_NODE?t:r.create(e),e)}function o(t,n){return void 0===n&&(n=!1),null==t?null:null!=t[e.DATA_KEY]?t[e.DATA_KEY].blot:n?o(t.parentNode,n):null}function i(t,e){void 0===e&&(e=p.ANY);var n;if("string"==typeof t)n=h[t]||u[t];else if(t instanceof Text||t.nodeType===Node.TEXT_NODE)n=h.text;else if("number"==typeof t)t&p.LEVEL&p.BLOCK?n=h.block:t&p.LEVEL&p.INLINE&&(n=h.inline);else if(t instanceof HTMLElement){var r=(t.getAttribute("class")||"").split(/\s+/);for(var o in r)if(n=c[r[o]])break;n=n||f[t.tagName]}return null==n?null:e&p.LEVEL&n.scope&&e&p.TYPE&n.scope?n:null}function l(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];if(t.length>1)return t.map(function(t){return l(t)});var n=t[0];if("string"!=typeof n.blotName&&"string"!=typeof n.attrName)throw new s("Invalid definition");if("abstract"===n.blotName)throw new s("Cannot register abstract class");if(h[n.blotName||n.attrName]=n,"string"==typeof n.keyName)u[n.keyName]=n;else if(null!=n.className&&(c[n.className]=n),null!=n.tagName){Array.isArray(n.tagName)?n.tagName=n.tagName.map(function(t){return t.toUpperCase()}):n.tagName=n.tagName.toUpperCase();var r=Array.isArray(n.tagName)?n.tagName:[n.tagName];r.forEach(function(t){null!=f[t]&&null!=n.className||(f[t]=n)})}return n}var a=this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}();Object.defineProperty(e,"__esModule",{value:!0});var s=function(t){function e(e){var n=this;return e="[Parchment] "+e,n=t.call(this,e)||this,n.message=e,n.name=n.constructor.name,n}return a(e,t),e}(Error);e.ParchmentError=s;var u={},c={},f={},h={};e.DATA_KEY="__blot";var p;!function(t){t[t.TYPE=3]="TYPE",t[t.LEVEL=12]="LEVEL",t[t.ATTRIBUTE=13]="ATTRIBUTE",t[t.BLOT=14]="BLOT",t[t.INLINE=7]="INLINE",t[t.BLOCK=11]="BLOCK",t[t.BLOCK_BLOT=10]="BLOCK_BLOT",t[t.INLINE_BLOT=6]="INLINE_BLOT",t[t.BLOCK_ATTRIBUTE=9]="BLOCK_ATTRIBUTE",t[t.INLINE_ATTRIBUTE=5]="INLINE_ATTRIBUTE",t[t.ANY=15]="ANY"}(p=e.Scope||(e.Scope={})),e.create=r,e.find=o,e.query=i,e.register=l},function(t,e){"use strict";var n=Object.prototype.hasOwnProperty,r=Object.prototype.toString,o=function(t){return"function"==typeof Array.isArray?Array.isArray(t):"[object Array]"===r.call(t)},i=function(t){if(!t||"[object Object]"!==r.call(t))return!1;var e=n.call(t,"constructor"),o=t.constructor&&t.constructor.prototype&&n.call(t.constructor.prototype,"isPrototypeOf");if(t.constructor&&!e&&!o)return!1;var i;for(i in t);return void 0===i||n.call(t,i)};t.exports=function t(){var e,n,r,l,a,s,u=arguments[0],c=1,f=arguments.length,h=!1;for("boolean"==typeof u&&(h=u,u=arguments[1]||{},c=2),(null==u||"object"!=typeof u&&"function"!=typeof u)&&(u={});c<f;++c)if(null!=(e=arguments[c]))for(n in e)r=u[n],l=e[n],u!==l&&(h&&l&&(i(l)||(a=o(l)))?(a?(a=!1,s=r&&o(r)?r:[]):s=r&&i(r)?r:{},u[n]=t(h,s,l)):void 0!==l&&(u[n]=l));return u}},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function i(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function l(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}function a(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return null==t?e:("function"==typeof t.formats&&(e=(0,f.default)(e,t.formats())),null==t.parent||"scroll"==t.parent.blotName||t.parent.statics.scope!==t.statics.scope?e:a(t.parent,e))}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.BlockEmbed=e.bubbleFormats=void 0;var s=function(){function t(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,n,r){return n&&t(e.prototype,n),r&&t(e,r),e}}(),u=function t(e,n,r){null===e&&(e=Function.prototype);var o=Object.getOwnPropertyDescriptor(e,n);if(void 0===o){var i=Object.getPrototypeOf(e);return null===i?void 0:t(i,n,r)}if("value"in o)return o.value;var l=o.get;if(void 0!==l)return l.call(r)},c=n(2),f=r(c),h=n(4),p=r(h),d=n(0),y=r(d),v=n(14),b=r(v),g=n(5),m=r(g),_=n(8),O=r(_),w=function(t){function e(){return o(this,e),i(this,(e.__proto__||Object.getPrototypeOf(e)).apply(this,arguments))}return l(e,t),s(e,[{key:"attach",value:function(){u(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"attach",this).call(this),this.attributes=new y.default.Attributor.Store(this.domNode)}},{key:"delta",value:function(){return(new p.default).insert(this.value(),(0,f.default)(this.formats(),this.attributes.values()))}},{key:"format",value:function(t,e){var n=y.default.query(t,y.default.Scope.BLOCK_ATTRIBUTE);null!=n&&this.attributes.attribute(n,e)}},{key:"formatAt",value:function(t,e,n,r){this.format(n,r)}},{key:"insertAt",value:function(t,n,r){if("string"==typeof n&&n.endsWith("\n")){var o=y.default.create(x.blotName);this.parent.insertBefore(o,0===t?this:this.next),o.insertAt(0,n.slice(0,-1))}else u(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"insertAt",this).call(this,t,n,r)}}]),e}(y.default.Embed);w.scope=y.default.Scope.BLOCK_BLOT;var x=function(t){function e(t){o(this,e);var n=i(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t));return n.cache={},n}return l(e,t),s(e,[{key:"delta",value:function(){return null==this.cache.delta&&(this.cache.delta=this.descendants(y.default.Leaf).reduce(function(t,e){return 0===e.length()?t:t.insert(e.value(),a(e))},new p.default).insert("\n",a(this))),this.cache.delta}},{key:"deleteAt",value:function(t,n){u(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"deleteAt",this).call(this,t,n),this.cache={}}},{key:"formatAt",value:function(t,n,r,o){n<=0||(y.default.query(r,y.default.Scope.BLOCK)?t+n===this.length()&&this.format(r,o):u(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"formatAt",this).call(this,t,Math.min(n,this.length()-t-1),r,o),this.cache={})}},{key:"insertAt",value:function(t,n,r){if(null!=r)return u(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"insertAt",this).call(this,t,n,r);if(0!==n.length){var o=n.split("\n"),i=o.shift();i.length>0&&(t<this.length()-1||null==this.children.tail?u(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"insertAt",this).call(this,Math.min(t,this.length()-1),i):this.children.tail.insertAt(this.children.tail.length(),i),this.cache={});var l=this;o.reduce(function(t,e){return l=l.split(t,!0),l.insertAt(0,e),e.length},t+i.length)}}},{key:"insertBefore",value:function(t,n){var r=this.children.head;u(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"insertBefore",this).call(this,t,n),r instanceof b.default&&r.remove(),this.cache={}}},{key:"length",value:function(){return null==this.cache.length&&(this.cache.length=u(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"length",this).call(this)+1),this.cache.length}},{key:"moveChildren",value:function(t,n){u(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"moveChildren",this).call(this,t,n),this.cache={}}},{key:"optimize",value:function(t){u(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"optimize",this).call(this,t),this.cache={}}},{key:"path",value:function(t){return u(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"path",this).call(this,t,!0)}},{key:"removeChild",value:function(t){u(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"removeChild",this).call(this,t),this.cache={}}},{key:"split",value:function(t){var n=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(n&&(0===t||t>=this.length()-1)){var r=this.clone();return 0===t?(this.parent.insertBefore(r,this),this):(this.parent.insertBefore(r,this.next),r)}var o=u(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"split",this).call(this,t,n);return this.cache={},o}}]),e}(y.default.Block);x.blotName="block",x.tagName="P",x.defaultChild="break",x.allowedChildren=[m.default,y.default.Embed,O.default],e.bubbleFormats=a,e.BlockEmbed=w,e.default=x},function(t,e,n){var r=n(54),o=n(12),i=n(2),l=n(20),a=String.fromCharCode(0),s=function(t){Array.isArray(t)?this.ops=t:null!=t&&Array.isArray(t.ops)?this.ops=t.ops:this.ops=[]};s.prototype.insert=function(t,e){var n={};return 0===t.length?this:(n.insert=t,null!=e&&"object"==typeof e&&Object.keys(e).length>0&&(n.attributes=e),this.push(n))},s.prototype.delete=function(t){return t<=0?this:this.push({delete:t})},s.prototype.retain=function(t,e){if(t<=0)return this;var n={retain:t};return null!=e&&"object"==typeof e&&Object.keys(e).length>0&&(n.attributes=e),this.push(n)},s.prototype.push=function(t){var e=this.ops.length,n=this.ops[e-1];if(t=i(!0,{},t),"object"==typeof n){if("number"==typeof t.delete&&"number"==typeof n.delete)return this.ops[e-1]={delete:n.delete+t.delete},this;if("number"==typeof n.delete&&null!=t.insert&&(e-=1,"object"!=typeof(n=this.ops[e-1])))return this.ops.unshift(t),this;if(o(t.attributes,n.attributes)){if("string"==typeof t.insert&&"string"==typeof n.insert)return this.ops[e-1]={insert:n.insert+t.insert},"object"==typeof t.attributes&&(this.ops[e-1].attributes=t.attributes),this;if("number"==typeof t.retain&&"number"==typeof n.retain)return this.ops[e-1]={retain:n.retain+t.retain},"object"==typeof t.attributes&&(this.ops[e-1].attributes=t.attributes),this}}return e===this.ops.length?this.ops.push(t):this.ops.splice(e,0,t),this},s.prototype.chop=function(){var t=this.ops[this.ops.length-1];return t&&t.retain&&!t.attributes&&this.ops.pop(),this},s.prototype.filter=function(t){return this.ops.filter(t)},s.prototype.forEach=function(t){this.ops.forEach(t)},s.prototype.map=function(t){return this.ops.map(t)},s.prototype.partition=function(t){var e=[],n=[];return this.forEach(function(r){(t(r)?e:n).push(r)}),[e,n]},s.prototype.reduce=function(t,e){return this.ops.reduce(t,e)},s.prototype.changeLength=function(){return this.reduce(function(t,e){return e.insert?t+l.length(e):e.delete?t-e.delete:t},0)},s.prototype.length=function(){return this.reduce(function(t,e){return t+l.length(e)},0)},s.prototype.slice=function(t,e){t=t||0,"number"!=typeof e&&(e=1/0);for(var n=[],r=l.iterator(this.ops),o=0;o<e&&r.hasNext();){var i;o<t?i=r.next(t-o):(i=r.next(e-o),n.push(i)),o+=l.length(i)}return new s(n)},s.prototype.compose=function(t){for(var e=l.iterator(this.ops),n=l.iterator(t.ops),r=new s;e.hasNext()||n.hasNext();)if("insert"===n.peekType())r.push(n.next());else if("delete"===e.peekType())r.push(e.next());else{var o=Math.min(e.peekLength(),n.peekLength()),i=e.next(o),a=n.next(o);if("number"==typeof a.retain){var u={};"number"==typeof i.retain?u.retain=o:u.insert=i.insert;var c=l.attributes.compose(i.attributes,a.attributes,"number"==typeof i.retain);c&&(u.attributes=c),r.push(u)}else"number"==typeof a.delete&&"number"==typeof i.retain&&r.push(a)}return r.chop()},s.prototype.concat=function(t){var e=new s(this.ops.slice());return t.ops.length>0&&(e.push(t.ops[0]),e.ops=e.ops.concat(t.ops.slice(1))),e},s.prototype.diff=function(t,e){if(this.ops===t.ops)return new s;var n=[this,t].map(function(e){return e.map(function(n){if(null!=n.insert)return"string"==typeof n.insert?n.insert:a;var r=e===t?"on":"with";throw new Error("diff() called "+r+" non-document")}).join("")}),i=new s,u=r(n[0],n[1],e),c=l.iterator(this.ops),f=l.iterator(t.ops);return u.forEach(function(t){for(var e=t[1].length;e>0;){var n=0;switch(t[0]){case r.INSERT:n=Math.min(f.peekLength(),e),i.push(f.next(n));break;case r.DELETE:n=Math.min(e,c.peekLength()),c.next(n),i.delete(n);break;case r.EQUAL:n=Math.min(c.peekLength(),f.peekLength(),e);var a=c.next(n),s=f.next(n);o(a.insert,s.insert)?i.retain(n,l.attributes.diff(a.attributes,s.attributes)):i.push(s).delete(n)}e-=n}}),i.chop()},s.prototype.eachLine=function(t,e){e=e||"\n";for(var n=l.iterator(this.ops),r=new s,o=0;n.hasNext();){if("insert"!==n.peekType())return;var i=n.peek(),a=l.length(i)-n.peekLength(),u="string"==typeof i.insert?i.insert.indexOf(e,a)-a:-1;if(u<0)r.push(n.next());else if(u>0)r.push(n.next(u));else{if(!1===t(r,n.next(1).attributes||{},o))return;o+=1,r=new s}}r.length()>0&&t(r,{},o)},s.prototype.transform=function(t,e){if(e=!!e,"number"==typeof t)return this.transformPosition(t,e);for(var n=l.iterator(this.ops),r=l.iterator(t.ops),o=new s;n.hasNext()||r.hasNext();)if("insert"!==n.peekType()||!e&&"insert"===r.peekType())if("insert"===r.peekType())o.push(r.next());else{var i=Math.min(n.peekLength(),r.peekLength()),a=n.next(i),u=r.next(i);if(a.delete)continue;u.delete?o.push(u):o.retain(i,l.attributes.transform(a.attributes,u.attributes,e))}else o.retain(l.length(n.next()));return o.chop()},s.prototype.transformPosition=function(t,e){e=!!e;for(var n=l.iterator(this.ops),r=0;n.hasNext()&&r<=t;){var o=n.peekLength(),i=n.peekType();n.next(),"delete"!==i?("insert"===i&&(r<t||!e)&&(t+=o),r+=o):t-=Math.min(o,t-r)}return t},t.exports=s},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function i(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function l(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0});var a=function(){function t(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,n,r){return n&&t(e.prototype,n),r&&t(e,r),e}}(),s=function t(e,n,r){null===e&&(e=Function.prototype);var o=Object.getOwnPropertyDescriptor(e,n);if(void 0===o){var i=Object.getPrototypeOf(e);return null===i?void 0:t(i,n,r)}if("value"in o)return o.value;var l=o.get;if(void 0!==l)return l.call(r)},u=n(8),c=r(u),f=n(0),h=r(f),p=function(t){function e(){return o(this,e),i(this,(e.__proto__||Object.getPrototypeOf(e)).apply(this,arguments))}return l(e,t),a(e,[{key:"formatAt",value:function(t,n,r,o){if(e.compare(this.statics.blotName,r)<0&&h.default.query(r,h.default.Scope.BLOT)){var i=this.isolate(t,n);o&&i.wrap(r,o)}else s(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"formatAt",this).call(this,t,n,r,o)}},{key:"optimize",value:function(t){if(s(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"optimize",this).call(this,t),this.parent instanceof e&&e.compare(this.statics.blotName,this.parent.statics.blotName)>0){var n=this.parent.isolate(this.offset(),this.length());this.moveChildren(n),n.wrap(this)}}}],[{key:"compare",value:function(t,n){var r=e.order.indexOf(t),o=e.order.indexOf(n);return r>=0||o>=0?r-o:t===n?0:t<n?-1:1}}]),e}(h.default.Inline);p.allowedChildren=[p,h.default.Embed,c.default],p.order=["cursor","inline","underline","strike","italic","bold","script","link","code"],e.default=p},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function o(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function i(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function l(t,e){if(e=(0,N.default)(!0,{container:t,modules:{clipboard:!0,keyboard:!0,history:!0}},e),e.theme&&e.theme!==S.DEFAULTS.theme){if(e.theme=S.import("themes/"+e.theme),null==e.theme)throw new Error("Invalid theme "+e.theme+". Did you register it?")}else e.theme=T.default;var n=(0,N.default)(!0,{},e.theme.DEFAULTS);[n,e].forEach(function(t){t.modules=t.modules||{},Object.keys(t.modules).forEach(function(e){!0===t.modules[e]&&(t.modules[e]={})})});var r=Object.keys(n.modules).concat(Object.keys(e.modules)),o=r.reduce(function(t,e){var n=S.import("modules/"+e);return null==n?P.error("Cannot load "+e+" module. Are you sure you registered it?"):t[e]=n.DEFAULTS||{},t},{});return null!=e.modules&&e.modules.toolbar&&e.modules.toolbar.constructor!==Object&&(e.modules.toolbar={container:e.modules.toolbar}),e=(0,N.default)(!0,{},S.DEFAULTS,{modules:o},n,e),["bounds","container","scrollingContainer"].forEach(function(t){"string"==typeof e[t]&&(e[t]=document.querySelector(e[t]))}),e.modules=Object.keys(e.modules).reduce(function(t,n){return e.modules[n]&&(t[n]=e.modules[n]),t},{}),e}function a(t,e,n,r){if(this.options.strict&&!this.isEnabled()&&e===g.default.sources.USER)return new d.default;var o=null==n?null:this.getSelection(),i=this.editor.delta,l=t();if(null!=o&&(!0===n&&(n=o.index),null==r?o=u(o,l,e):0!==r&&(o=u(o,n,r,e)),this.setSelection(o,g.default.sources.SILENT)),l.length()>0){var a,s=[g.default.events.TEXT_CHANGE,l,i,e];if((a=this.emitter).emit.apply(a,[g.default.events.EDITOR_CHANGE].concat(s)),e!==g.default.sources.SILENT){var c;(c=this.emitter).emit.apply(c,s)}}return l}function s(t,e,n,r,o){var i={};return"number"==typeof t.index&&"number"==typeof t.length?"number"!=typeof e?(o=r,r=n,n=e,e=t.length,t=t.index):(e=t.length,t=t.index):"number"!=typeof e&&(o=r,r=n,n=e,e=0),"object"===(void 0===n?"undefined":c(n))?(i=n,o=r):"string"==typeof n&&(null!=r?i[n]=r:o=n),o=o||g.default.sources.API,[t,e,i,o]}function u(t,e,n,r){if(null==t)return null;var o=void 0,i=void 0;if(e instanceof d.default){var l=[t.index,t.index+t.length].map(function(t){return e.transformPosition(t,r!==g.default.sources.USER)}),a=f(l,2);o=a[0],i=a[1]}else{var s=[t.index,t.index+t.length].map(function(t){return t<e||t===e&&r===g.default.sources.USER?t:n>=0?t+n:Math.max(e,t+n)}),u=f(s,2);o=u[0],i=u[1]}return new x.Range(o,i-o)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.overload=e.expandConfig=void 0;var c="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},f=function(){function t(t,e){var n=[],r=!0,o=!1,i=void 0;try{for(var l,a=t[Symbol.iterator]();!(r=(l=a.next()).done)&&(n.push(l.value),!e||n.length!==e);r=!0);}catch(t){o=!0,i=t}finally{try{!r&&a.return&&a.return()}finally{if(o)throw i}}return n}return function(e,n){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return t(e,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),h=function(){function t(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,n,r){return n&&t(e.prototype,n),r&&t(e,r),e}}();n(53);var p=n(4),d=r(p),y=n(57),v=r(y),b=n(9),g=r(b),m=n(7),_=r(m),O=n(0),w=r(O),x=n(22),k=r(x),E=n(2),N=r(E),j=n(10),A=r(j),q=n(32),T=r(q),P=(0,A.default)("quill"),S=function(){function t(e){var n=this,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(i(this,t),this.options=l(e,r),this.container=this.options.container,null==this.container)return P.error("Invalid Quill container",e);this.options.debug&&t.debug(this.options.debug);var o=this.container.innerHTML.trim();this.container.classList.add("ql-container"),this.container.innerHTML="",this.container.__quill=this,this.root=this.addContainer("ql-editor"),this.root.classList.add("ql-blank"),this.root.setAttribute("data-gramm",!1),this.scrollingContainer=this.options.scrollingContainer||this.root,this.emitter=new g.default,this.scroll=w.default.create(this.root,{emitter:this.emitter,whitelist:this.options.formats}),this.editor=new v.default(this.scroll),this.selection=new k.default(this.scroll,this.emitter),this.theme=new this.options.theme(this,this.options),this.keyboard=this.theme.addModule("keyboard"),this.clipboard=this.theme.addModule("clipboard"),this.history=this.theme.addModule("history"),this.theme.init(),this.emitter.on(g.default.events.EDITOR_CHANGE,function(t){t===g.default.events.TEXT_CHANGE&&n.root.classList.toggle("ql-blank",n.editor.isBlank())}),this.emitter.on(g.default.events.SCROLL_UPDATE,function(t,e){var r=n.selection.lastRange,o=r&&0===r.length?r.index:void 0;a.call(n,function(){return n.editor.update(null,e,o)},t)});var s=this.clipboard.convert("<div class='ql-editor' style=\"white-space: normal;\">"+o+"<p><br></p></div>");this.setContents(s),this.history.clear(),this.options.placeholder&&this.root.setAttribute("data-placeholder",this.options.placeholder),this.options.readOnly&&this.disable()}return h(t,null,[{key:"debug",value:function(t){!0===t&&(t="log"),A.default.level(t)}},{key:"find",value:function(t){return t.__quill||w.default.find(t)}},{key:"import",value:function(t){return null==this.imports[t]&&P.error("Cannot import "+t+". Are you sure it was registered?"),this.imports[t]}},{key:"register",value:function(t,e){var n=this,r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if("string"!=typeof t){var o=t.attrName||t.blotName;"string"==typeof o?this.register("formats/"+o,t,e):Object.keys(t).forEach(function(r){n.register(r,t[r],e)})}else null==this.imports[t]||r||P.warn("Overwriting "+t+" with",e),this.imports[t]=e,(t.startsWith("blots/")||t.startsWith("formats/"))&&"abstract"!==e.blotName?w.default.register(e):t.startsWith("modules")&&"function"==typeof e.register&&e.register()}}]),h(t,[{key:"addContainer",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;if("string"==typeof t){var n=t;t=document.createElement("div"),t.classList.add(n)}return this.container.insertBefore(t,e),t}},{key:"blur",value:function(){this.selection.setRange(null)}},{key:"deleteText",value:function(t,e,n){var r=this,o=s(t,e,n),i=f(o,4);return t=i[0],e=i[1],n=i[3],a.call(this,function(){return r.editor.deleteText(t,e)},n,t,-1*e)}},{key:"disable",value:function(){this.enable(!1)}},{key:"enable",value:function(){var t=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];this.scroll.enable(t),this.container.classList.toggle("ql-disabled",!t)}},{key:"focus",value:function(){var t=this.scrollingContainer.scrollTop;this.selection.focus(),this.scrollingContainer.scrollTop=t,this.scrollIntoView()}},{key:"format",value:function(t,e){var n=this,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:g.default.sources.API;return a.call(this,function(){var r=n.getSelection(!0),i=new d.default;if(null==r)return i;if(w.default.query(t,w.default.Scope.BLOCK))i=n.editor.formatLine(r.index,r.length,o({},t,e));else{if(0===r.length)return n.selection.format(t,e),i;i=n.editor.formatText(r.index,r.length,o({},t,e))}return n.setSelection(r,g.default.sources.SILENT),i},r)}},{key:"formatLine",value:function(t,e,n,r,o){var i=this,l=void 0,u=s(t,e,n,r,o),c=f(u,4);return t=c[0],e=c[1],l=c[2],o=c[3],a.call(this,function(){return i.editor.formatLine(t,e,l)},o,t,0)}},{key:"formatText",value:function(t,e,n,r,o){var i=this,l=void 0,u=s(t,e,n,r,o),c=f(u,4);return t=c[0],e=c[1],l=c[2],o=c[3],a.call(this,function(){return i.editor.formatText(t,e,l)},o,t,0)}},{key:"getBounds",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=void 0;n="number"==typeof t?this.selection.getBounds(t,e):this.selection.getBounds(t.index,t.length);var r=this.container.getBoundingClientRect();return{bottom:n.bottom-r.top,height:n.height,left:n.left-r.left,right:n.right-r.left,top:n.top-r.top,width:n.width}}},{key:"getContents",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.getLength()-t,n=s(t,e),r=f(n,2);return t=r[0],e=r[1],this.editor.getContents(t,e)}},{key:"getFormat",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.getSelection(!0),e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return"number"==typeof t?this.editor.getFormat(t,e):this.editor.getFormat(t.index,t.length)}},{key:"getIndex",value:function(t){return t.offset(this.scroll)}},{key:"getLength",value:function(){return this.scroll.length()}},{key:"getLeaf",value:function(t){return this.scroll.leaf(t)}},{key:"getLine",value:function(t){return this.scroll.line(t)}},{key:"getLines",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Number.MAX_VALUE;return"number"!=typeof t?this.scroll.lines(t.index,t.length):this.scroll.lines(t,e)}},{key:"getModule",value:function(t){return this.theme.modules[t]}},{key:"getSelection",value:function(){return arguments.length>0&&void 0!==arguments[0]&&arguments[0]&&this.focus(),this.update(),this.selection.getRange()[0]}},{key:"getText",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.getLength()-t,n=s(t,e),r=f(n,2);return t=r[0],e=r[1],this.editor.getText(t,e)}},{key:"hasFocus",value:function(){return this.selection.hasFocus()}},{key:"insertEmbed",value:function(e,n,r){var o=this,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:t.sources.API;return a.call(this,function(){return o.editor.insertEmbed(e,n,r)},i,e)}},{key:"insertText",value:function(t,e,n,r,o){var i=this,l=void 0,u=s(t,0,n,r,o),c=f(u,4);return t=c[0],l=c[2],o=c[3],a.call(this,function(){return i.editor.insertText(t,e,l)},o,t,e.length)}},{key:"isEnabled",value:function(){return!this.container.classList.contains("ql-disabled")}},{key:"off",value:function(){return this.emitter.off.apply(this.emitter,arguments)}},{key:"on",value:function(){return this.emitter.on.apply(this.emitter,arguments)}},{key:"once",value:function(){return this.emitter.once.apply(this.emitter,arguments)}},{key:"pasteHTML",value:function(t,e,n){this.clipboard.dangerouslyPasteHTML(t,e,n)}},{key:"removeFormat",value:function(t,e,n){var r=this,o=s(t,e,n),i=f(o,4);return t=i[0],e=i[1],n=i[3],a.call(this,function(){return r.editor.removeFormat(t,e)},n,t)}},{key:"scrollIntoView",value:function(){this.selection.scrollIntoView(this.scrollingContainer)}},{key:"setContents",value:function(t){var e=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:g.default.sources.API;return a.call(this,function(){t=new d.default(t);var n=e.getLength(),r=e.editor.deleteText(0,n),o=e.editor.applyDelta(t),i=o.ops[o.ops.length-1];return null!=i&&"string"==typeof i.insert&&"\n"===i.insert[i.insert.length-1]&&(e.editor.deleteText(e.getLength()-1,1),o.delete(1)),r.compose(o)},n)}},{key:"setSelection",value:function(e,n,r){if(null==e)this.selection.setRange(null,n||t.sources.API);else{var o=s(e,n,r),i=f(o,4);e=i[0],n=i[1],r=i[3],this.selection.setRange(new x.Range(e,n),r),r!==g.default.sources.SILENT&&this.selection.scrollIntoView(this.scrollingContainer)}}},{key:"setText",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:g.default.sources.API,n=(new d.default).insert(t);return this.setContents(n,e)}},{key:"update",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:g.default.sources.USER,e=this.scroll.update(t);return this.selection.update(t),e}},{key:"updateContents",value:function(t){var e=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:g.default.sources.API;return a.call(this,function(){return t=new d.default(t),e.editor.applyDelta(t,n)},n,!0)}}]),t}();S.DEFAULTS={bounds:null,formats:null,modules:{},placeholder:"",readOnly:!1,scrollingContainer:null,strict:!0,theme:"default"},S.events=g.default.events,S.sources=g.default.sources,S.version="1.3.6",S.imports={delta:d.default,parchment:w.default,"core/module":_.default,"core/theme":T.default},e.expandConfig=l,e.overload=s,e.default=S},function(t,e,n){"use strict";function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var o=function t(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};r(this,t),this.quill=e,this.options=n};o.DEFAULTS={},e.default=o},function(t,e,n){"use strict";function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function o(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function i(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0});var l=n(0),a=function(t){return t&&t.__esModule?t:{default:t}}(l),s=function(t){function e(){return r(this,e),o(this,(e.__proto__||Object.getPrototypeOf(e)).apply(this,arguments))}return i(e,t),e}(a.default.Text);e.default=s},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function i(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function l(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0});var a=function(){function t(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,n,r){return n&&t(e.prototype,n),r&&t(e,r),e}}(),s=function t(e,n,r){null===e&&(e=Function.prototype);var o=Object.getOwnPropertyDescriptor(e,n);if(void 0===o){var i=Object.getPrototypeOf(e);return null===i?void 0:t(i,n,r)}if("value"in o)return o.value;var l=o.get;if(void 0!==l)return l.call(r)},u=n(58),c=r(u),f=n(10),h=r(f),p=(0,h.default)("quill:events");["selectionchange","mousedown","mouseup","click"].forEach(function(t){document.addEventListener(t,function(){for(var t=arguments.length,e=Array(t),n=0;n<t;n++)e[n]=arguments[n];[].slice.call(document.querySelectorAll(".ql-container")).forEach(function(t){if(t.__quill&&t.__quill.emitter){var n;(n=t.__quill.emitter).handleDOM.apply(n,e)}})})});var d=function(t){function e(){o(this,e);var t=i(this,(e.__proto__||Object.getPrototypeOf(e)).call(this));return t.listeners={},t.on("error",p.error),t}return l(e,t),a(e,[{key:"emit",value:function(){p.log.apply(p,arguments),s(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"emit",this).apply(this,arguments)}},{key:"handleDOM",value:function(t){for(var e=arguments.length,n=Array(e>1?e-1:0),r=1;r<e;r++)n[r-1]=arguments[r];(this.listeners[t.type]||[]).forEach(function(e){var r=e.node,o=e.handler;(t.target===r||r.contains(t.target))&&o.apply(void 0,[t].concat(n))})}},{key:"listenDOM",value:function(t,e,n){this.listeners[t]||(this.listeners[t]=[]),this.listeners[t].push({node:e,handler:n})}}]),e}(c.default);d.events={EDITOR_CHANGE:"editor-change",SCROLL_BEFORE_UPDATE:"scroll-before-update",SCROLL_OPTIMIZE:"scroll-optimize",SCROLL_UPDATE:"scroll-update",SELECTION_CHANGE:"selection-change",TEXT_CHANGE:"text-change"},d.sources={API:"api",SILENT:"silent",USER:"user"},e.default=d},function(t,e,n){"use strict";function r(t){if(i.indexOf(t)<=i.indexOf(l)){for(var e,n=arguments.length,r=Array(n>1?n-1:0),o=1;o<n;o++)r[o-1]=arguments[o];(e=console)[t].apply(e,r)}}function o(t){return i.reduce(function(e,n){return e[n]=r.bind(console,n,t),e},{})}Object.defineProperty(e,"__esModule",{value:!0});var i=["error","warn","log","info"],l="warn";r.level=o.level=function(t){l=t},e.default=o},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(1),o=function(){function t(t,e,n){void 0===n&&(n={}),this.attrName=t,this.keyName=e;var o=r.Scope.TYPE&r.Scope.ATTRIBUTE;null!=n.scope?this.scope=n.scope&r.Scope.LEVEL|o:this.scope=r.Scope.ATTRIBUTE,null!=n.whitelist&&(this.whitelist=n.whitelist)}return t.keys=function(t){return[].map.call(t.attributes,function(t){return t.name})},t.prototype.add=function(t,e){return!!this.canAdd(t,e)&&(t.setAttribute(this.keyName,e),!0)},t.prototype.canAdd=function(t,e){return null!=r.query(t,r.Scope.BLOT&(this.scope|r.Scope.TYPE))&&(null==this.whitelist||("string"==typeof e?this.whitelist.indexOf(e.replace(/["']/g,""))>-1:this.whitelist.indexOf(e)>-1))},t.prototype.remove=function(t){t.removeAttribute(this.keyName)},t.prototype.value=function(t){var e=t.getAttribute(this.keyName);return this.canAdd(t,e)&&e?e:""},t}();e.default=o},function(t,e,n){function r(t){return null===t||void 0===t}function o(t){return!(!t||"object"!=typeof t||"number"!=typeof t.length)&&("function"==typeof t.copy&&"function"==typeof t.slice&&!(t.length>0&&"number"!=typeof t[0]))}function i(t,e,n){var i,c;if(r(t)||r(e))return!1;if(t.prototype!==e.prototype)return!1;if(s(t))return!!s(e)&&(t=l.call(t),e=l.call(e),u(t,e,n));if(o(t)){if(!o(e))return!1;if(t.length!==e.length)return!1;for(i=0;i<t.length;i++)if(t[i]!==e[i])return!1;return!0}try{var f=a(t),h=a(e)}catch(t){return!1}if(f.length!=h.length)return!1;for(f.sort(),h.sort(),i=f.length-1;i>=0;i--)if(f[i]!=h[i])return!1;for(i=f.length-1;i>=0;i--)if(c=f[i],!u(t[c],e[c],n))return!1;return typeof t==typeof e}var l=Array.prototype.slice,a=n(55),s=n(56),u=t.exports=function(t,e,n){return n||(n={}),t===e||(t instanceof Date&&e instanceof Date?t.getTime()===e.getTime():!t||!e||"object"!=typeof t&&"object"!=typeof e?n.strict?t===e:t==e:i(t,e,n))}},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function i(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function l(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.Code=void 0;var a=function(){function t(t,e){var n=[],r=!0,o=!1,i=void 0;try{for(var l,a=t[Symbol.iterator]();!(r=(l=a.next()).done)&&(n.push(l.value),!e||n.length!==e);r=!0);}catch(t){o=!0,i=t}finally{try{!r&&a.return&&a.return()}finally{if(o)throw i}}return n}return function(e,n){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return t(e,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),s=function(){function t(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,n,r){return n&&t(e.prototype,n),r&&t(e,r),e}}(),u=function t(e,n,r){null===e&&(e=Function.prototype);var o=Object.getOwnPropertyDescriptor(e,n);if(void 0===o){var i=Object.getPrototypeOf(e);return null===i?void 0:t(i,n,r)}if("value"in o)return o.value;var l=o.get;if(void 0!==l)return l.call(r)},c=n(4),f=r(c),h=n(0),p=r(h),d=n(3),y=r(d),v=n(5),b=r(v),g=n(8),m=r(g),_=function(t){function e(){return o(this,e),i(this,(e.__proto__||Object.getPrototypeOf(e)).apply(this,arguments))}return l(e,t),e}(b.default);_.blotName="code",_.tagName="CODE";var O=function(t){function e(){return o(this,e),i(this,(e.__proto__||Object.getPrototypeOf(e)).apply(this,arguments))}return l(e,t),s(e,[{key:"delta",value:function(){var t=this,e=this.domNode.textContent;return e.endsWith("\n")&&(e=e.slice(0,-1)),e.split("\n").reduce(function(e,n){return e.insert(n).insert("\n",t.formats())},new f.default)}},{key:"format",value:function(t,n){if(t!==this.statics.blotName||!n){var r=this.descendant(m.default,this.length()-1),o=a(r,1),i=o[0];null!=i&&i.deleteAt(i.length()-1,1),u(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"format",this).call(this,t,n)}}},{key:"formatAt",value:function(t,n,r,o){if(0!==n&&null!=p.default.query(r,p.default.Scope.BLOCK)&&(r!==this.statics.blotName||o!==this.statics.formats(this.domNode))){var i=this.newlineIndex(t);if(!(i<0||i>=t+n)){var l=this.newlineIndex(t,!0)+1,a=i-l+1,s=this.isolate(l,a),u=s.next;s.format(r,o),u instanceof e&&u.formatAt(0,t-l+n-a,r,o)}}}},{key:"insertAt",value:function(t,e,n){if(null==n){var r=this.descendant(m.default,t),o=a(r,2),i=o[0],l=o[1];i.insertAt(l,e)}}},{key:"length",value:function(){var t=this.domNode.textContent.length;return this.domNode.textContent.endsWith("\n")?t:t+1}},{key:"newlineIndex",value:function(t){if(arguments.length>1&&void 0!==arguments[1]&&arguments[1])return this.domNode.textContent.slice(0,t).lastIndexOf("\n");var e=this.domNode.textContent.slice(t).indexOf("\n");return e>-1?t+e:-1}},{key:"optimize",value:function(t){this.domNode.textContent.endsWith("\n")||this.appendChild(p.default.create("text","\n")),u(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"optimize",this).call(this,t);var n=this.next;null!=n&&n.prev===this&&n.statics.blotName===this.statics.blotName&&this.statics.formats(this.domNode)===n.statics.formats(n.domNode)&&(n.optimize(t),n.moveChildren(this),n.remove())}},{key:"replace",value:function(t){u(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"replace",this).call(this,t),[].slice.call(this.domNode.querySelectorAll("*")).forEach(function(t){var e=p.default.find(t);null==e?t.parentNode.removeChild(t):e instanceof p.default.Embed?e.remove():e.unwrap()})}}],[{key:"create",value:function(t){var n=u(e.__proto__||Object.getPrototypeOf(e),"create",this).call(this,t);return n.setAttribute("spellcheck",!1),n}},{key:"formats",value:function(){return!0}}]),e}(y.default);O.blotName="code-block",O.tagName="PRE",O.TAB="  ",e.Code=_,e.default=O},function(t,e,n){"use strict";function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function o(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function i(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0});var l=function(){function t(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,n,r){return n&&t(e.prototype,n),r&&t(e,r),e}}(),a=function t(e,n,r){null===e&&(e=Function.prototype);var o=Object.getOwnPropertyDescriptor(e,n);if(void 0===o){var i=Object.getPrototypeOf(e);return null===i?void 0:t(i,n,r)}if("value"in o)return o.value;var l=o.get;if(void 0!==l)return l.call(r)},s=n(0),u=function(t){return t&&t.__esModule?t:{default:t}}(s),c=function(t){function e(){return r(this,e),o(this,(e.__proto__||Object.getPrototypeOf(e)).apply(this,arguments))}return i(e,t),l(e,[{key:"insertInto",value:function(t,n){0===t.children.length?a(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"insertInto",this).call(this,t,n):this.remove()}},{key:"length",value:function(){return 0}},{key:"value",value:function(){return""}}],[{key:"value",value:function(){}}]),e}(u.default.Embed);c.blotName="break",c.tagName="BR",e.default=c},function(t,e,n){"use strict";function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function o(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function i(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}function l(t,e){var n=document.createElement("a");n.href=t;var r=n.href.slice(0,n.href.indexOf(":"));return e.indexOf(r)>-1}Object.defineProperty(e,"__esModule",{value:!0}),e.sanitize=e.default=void 0;var a=function(){function t(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,n,r){return n&&t(e.prototype,n),r&&t(e,r),e}}(),s=function t(e,n,r){null===e&&(e=Function.prototype);var o=Object.getOwnPropertyDescriptor(e,n);if(void 0===o){var i=Object.getPrototypeOf(e);return null===i?void 0:t(i,n,r)}if("value"in o)return o.value;var l=o.get;if(void 0!==l)return l.call(r)},u=n(5),c=function(t){return t&&t.__esModule?t:{default:t}}(u),f=function(t){function e(){return r(this,e),o(this,(e.__proto__||Object.getPrototypeOf(e)).apply(this,arguments))}return i(e,t),a(e,[{key:"format",value:function(t,n){if(t!==this.statics.blotName||!n)return s(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"format",this).call(this,t,n);n=this.constructor.sanitize(n),this.domNode.setAttribute("href",n)}}],[{key:"create",value:function(t){var n=s(e.__proto__||Object.getPrototypeOf(e),"create",this).call(this,t);return t=this.sanitize(t),n.setAttribute("href",t),n.setAttribute("target","_blank"),n}},{key:"formats",value:function(t){return t.getAttribute("href")}},{key:"sanitize",value:function(t){return l(t,this.PROTOCOL_WHITELIST)?t:this.SANITIZED_URL}}]),e}(c.default);f.blotName="link",f.tagName="A",f.SANITIZED_URL="about:blank",f.PROTOCOL_WHITELIST=["http","https","mailto","tel"],e.default=f,e.sanitize=l},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function i(t,e){t.setAttribute(e,!("true"===t.getAttribute(e)))}Object.defineProperty(e,"__esModule",{value:!0});var l="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},a=function(){function t(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,n,r){return n&&t(e.prototype,n),r&&t(e,r),e}}(),s=n(25),u=r(s),c=n(106),f=r(c),h=0,p=function(){function t(e){var n=this;o(this,t),this.select=e,this.container=document.createElement("span"),this.buildPicker(),this.select.style.display="none",this.select.parentNode.insertBefore(this.container,this.select),this.label.addEventListener("mousedown",function(){n.togglePicker()}),this.label.addEventListener("keydown",function(t){switch(t.keyCode){case u.default.keys.ENTER:n.togglePicker();break;case u.default.keys.ESCAPE:n.escape(),t.preventDefault()}}),this.select.addEventListener("change",this.update.bind(this))}return a(t,[{key:"togglePicker",value:function(){this.container.classList.toggle("ql-expanded"),i(this.label,"aria-expanded"),i(this.options,"aria-hidden")}},{key:"buildItem",value:function(t){var e=this,n=document.createElement("span");return n.tabIndex="0",n.setAttribute("role","button"),n.classList.add("ql-picker-item"),t.hasAttribute("value")&&n.setAttribute("data-value",t.getAttribute("value")),t.textContent&&n.setAttribute("data-label",t.textContent),n.addEventListener("click",function(){e.selectItem(n,!0)}),n.addEventListener("keydown",function(t){switch(t.keyCode){case u.default.keys.ENTER:e.selectItem(n,!0),t.preventDefault();break;case u.default.keys.ESCAPE:e.escape(),t.preventDefault()}}),n}},{key:"buildLabel",value:function(){var t=document.createElement("span");return t.classList.add("ql-picker-label"),t.innerHTML=f.default,t.tabIndex="0",t.setAttribute("role","button"),t.setAttribute("aria-expanded","false"),this.container.appendChild(t),t}},{key:"buildOptions",value:function(){var t=this,e=document.createElement("span");e.classList.add("ql-picker-options"),e.setAttribute("aria-hidden","true"),e.tabIndex="-1",e.id="ql-picker-options-"+h,h+=1,this.label.setAttribute("aria-controls",e.id),this.options=e,[].slice.call(this.select.options).forEach(function(n){var r=t.buildItem(n);e.appendChild(r),!0===n.selected&&t.selectItem(r)}),this.container.appendChild(e)}},{key:"buildPicker",value:function(){var t=this;[].slice.call(this.select.attributes).forEach(function(e){t.container.setAttribute(e.name,e.value)}),this.container.classList.add("ql-picker"),this.label=this.buildLabel(),this.buildOptions()}},{key:"escape",value:function(){var t=this;this.close(),setTimeout(function(){return t.label.focus()},1)}},{key:"close",value:function(){this.container.classList.remove("ql-expanded"),this.label.setAttribute("aria-expanded","false"),this.options.setAttribute("aria-hidden","true")}},{key:"selectItem",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=this.container.querySelector(".ql-selected");if(t!==n&&(null!=n&&n.classList.remove("ql-selected"),null!=t&&(t.classList.add("ql-selected"),this.select.selectedIndex=[].indexOf.call(t.parentNode.children,t),t.hasAttribute("data-value")?this.label.setAttribute("data-value",t.getAttribute("data-value")):this.label.removeAttribute("data-value"),t.hasAttribute("data-label")?this.label.setAttribute("data-label",t.getAttribute("data-label")):this.label.removeAttribute("data-label"),e))){if("function"==typeof Event)this.select.dispatchEvent(new Event("change"));else if("object"===("undefined"==typeof Event?"undefined":l(Event))){var r=document.createEvent("Event");r.initEvent("change",!0,!0),this.select.dispatchEvent(r)}this.close()}}},{key:"update",value:function(){var t=void 0;if(this.select.selectedIndex>-1){var e=this.container.querySelector(".ql-picker-options").children[this.select.selectedIndex];t=this.select.options[this.select.selectedIndex],this.selectItem(e)}else this.selectItem(null);var n=null!=t&&t!==this.select.querySelector("option[selected]");this.label.classList.toggle("ql-active",n)}}]),t}();e.default=p},function(t,e,n){"use strict";function r(t){var e=a.find(t);if(null==e)try{e=a.create(t)}catch(n){e=a.create(a.Scope.INLINE),[].slice.call(t.childNodes).forEach(function(t){e.domNode.appendChild(t)}),t.parentNode&&t.parentNode.replaceChild(e.domNode,t),e.attach()}return e}var o=this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}();Object.defineProperty(e,"__esModule",{value:!0});var i=n(47),l=n(27),a=n(1),s=function(t){function e(e){var n=t.call(this,e)||this;return n.build(),n}return o(e,t),e.prototype.appendChild=function(t){this.insertBefore(t)},e.prototype.attach=function(){t.prototype.attach.call(this),this.children.forEach(function(t){t.attach()})},e.prototype.build=function(){var t=this;this.children=new i.default,[].slice.call(this.domNode.childNodes).reverse().forEach(function(e){try{var n=r(e);t.insertBefore(n,t.children.head||void 0)}catch(t){if(t instanceof a.ParchmentError)return;throw t}})},e.prototype.deleteAt=function(t,e){if(0===t&&e===this.length())return this.remove();this.children.forEachAt(t,e,function(t,e,n){t.deleteAt(e,n)})},e.prototype.descendant=function(t,n){var r=this.children.find(n),o=r[0],i=r[1];return null==t.blotName&&t(o)||null!=t.blotName&&o instanceof t?[o,i]:o instanceof e?o.descendant(t,i):[null,-1]},e.prototype.descendants=function(t,n,r){void 0===n&&(n=0),void 0===r&&(r=Number.MAX_VALUE);var o=[],i=r;return this.children.forEachAt(n,r,function(n,r,l){(null==t.blotName&&t(n)||null!=t.blotName&&n instanceof t)&&o.push(n),n instanceof e&&(o=o.concat(n.descendants(t,r,i))),i-=l}),o},e.prototype.detach=function(){this.children.forEach(function(t){t.detach()}),t.prototype.detach.call(this)},e.prototype.formatAt=function(t,e,n,r){this.children.forEachAt(t,e,function(t,e,o){t.formatAt(e,o,n,r)})},e.prototype.insertAt=function(t,e,n){var r=this.children.find(t),o=r[0],i=r[1];if(o)o.insertAt(i,e,n);else{var l=null==n?a.create("text",e):a.create(e,n);this.appendChild(l)}},e.prototype.insertBefore=function(t,e){if(null!=this.statics.allowedChildren&&!this.statics.allowedChildren.some(function(e){return t instanceof e}))throw new a.ParchmentError("Cannot insert "+t.statics.blotName+" into "+this.statics.blotName);t.insertInto(this,e)},e.prototype.length=function(){return this.children.reduce(function(t,e){return t+e.length()},0)},e.prototype.moveChildren=function(t,e){this.children.forEach(function(n){t.insertBefore(n,e)})},e.prototype.optimize=function(e){if(t.prototype.optimize.call(this,e),0===this.children.length)if(null!=this.statics.defaultChild){var n=a.create(this.statics.defaultChild);this.appendChild(n),n.optimize(e)}else this.remove()},e.prototype.path=function(t,n){void 0===n&&(n=!1);var r=this.children.find(t,n),o=r[0],i=r[1],l=[[this,t]];return o instanceof e?l.concat(o.path(i,n)):(null!=o&&l.push([o,i]),l)},e.prototype.removeChild=function(t){this.children.remove(t)},e.prototype.replace=function(n){n instanceof e&&n.moveChildren(this),t.prototype.replace.call(this,n)},e.prototype.split=function(t,e){if(void 0===e&&(e=!1),!e){if(0===t)return this;if(t===this.length())return this.next}var n=this.clone();return this.parent.insertBefore(n,this.next),this.children.forEachAt(t,this.length(),function(t,r,o){t=t.split(r,e),n.appendChild(t)}),n},e.prototype.unwrap=function(){this.moveChildren(this.parent,this.next),this.remove()},e.prototype.update=function(t,e){var n=this,o=[],i=[];t.forEach(function(t){t.target===n.domNode&&"childList"===t.type&&(o.push.apply(o,t.addedNodes),i.push.apply(i,t.removedNodes))}),i.forEach(function(t){if(!(null!=t.parentNode&&"IFRAME"!==t.tagName&&document.body.compareDocumentPosition(t)&Node.DOCUMENT_POSITION_CONTAINED_BY)){var e=a.find(t);null!=e&&(null!=e.domNode.parentNode&&e.domNode.parentNode!==n.domNode||e.detach())}}),o.filter(function(t){return t.parentNode==n.domNode}).sort(function(t,e){return t===e?0:t.compareDocumentPosition(e)&Node.DOCUMENT_POSITION_FOLLOWING?1:-1}).forEach(function(t){var e=null;null!=t.nextSibling&&(e=a.find(t.nextSibling));var o=r(t);o.next==e&&null!=o.next||(null!=o.parent&&o.parent.removeChild(n),n.insertBefore(o,e||void 0))})},e}(l.default);e.default=s},function(t,e,n){"use strict";var r=this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}();Object.defineProperty(e,"__esModule",{value:!0});var o=n(11),i=n(28),l=n(17),a=n(1),s=function(t){function e(e){var n=t.call(this,e)||this;return n.attributes=new i.default(n.domNode),n}return r(e,t),e.formats=function(t){return"string"==typeof this.tagName||(Array.isArray(this.tagName)?t.tagName.toLowerCase():void 0)},e.prototype.format=function(t,e){var n=a.query(t);n instanceof o.default?this.attributes.attribute(n,e):e&&(null==n||t===this.statics.blotName&&this.formats()[t]===e||this.replaceWith(t,e))},e.prototype.formats=function(){var t=this.attributes.values(),e=this.statics.formats(this.domNode);return null!=e&&(t[this.statics.blotName]=e),t},e.prototype.replaceWith=function(e,n){var r=t.prototype.replaceWith.call(this,e,n);return this.attributes.copy(r),r},e.prototype.update=function(e,n){var r=this;t.prototype.update.call(this,e,n),e.some(function(t){return t.target===r.domNode&&"attributes"===t.type})&&this.attributes.build()},e.prototype.wrap=function(n,r){var o=t.prototype.wrap.call(this,n,r);return o instanceof e&&o.statics.scope===this.statics.scope&&this.attributes.move(o),o},e}(l.default);e.default=s},function(t,e,n){"use strict";var r=this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}();Object.defineProperty(e,"__esModule",{value:!0});var o=n(27),i=n(1),l=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return r(e,t),e.value=function(t){return!0},e.prototype.index=function(t,e){return this.domNode===t||this.domNode.compareDocumentPosition(t)&Node.DOCUMENT_POSITION_CONTAINED_BY?Math.min(e,1):-1},e.prototype.position=function(t,e){var n=[].indexOf.call(this.parent.domNode.childNodes,this.domNode);return t>0&&(n+=1),[this.parent.domNode,n]},e.prototype.value=function(){return t={},t[this.statics.blotName]=this.statics.value(this.domNode)||!0,t;var t},e.scope=i.Scope.INLINE_BLOT,e}(o.default);e.default=l},function(t,e,n){function r(t){this.ops=t,this.index=0,this.offset=0}var o=n(12),i=n(2),l={attributes:{compose:function(t,e,n){"object"!=typeof t&&(t={}),"object"!=typeof e&&(e={});var r=i(!0,{},e);n||(r=Object.keys(r).reduce(function(t,e){return null!=r[e]&&(t[e]=r[e]),t},{}));for(var o in t)void 0!==t[o]&&void 0===e[o]&&(r[o]=t[o]);return Object.keys(r).length>0?r:void 0},diff:function(t,e){"object"!=typeof t&&(t={}),"object"!=typeof e&&(e={});var n=Object.keys(t).concat(Object.keys(e)).reduce(function(n,r){return o(t[r],e[r])||(n[r]=void 0===e[r]?null:e[r]),n},{});return Object.keys(n).length>0?n:void 0},transform:function(t,e,n){if("object"!=typeof t)return e;if("object"==typeof e){if(!n)return e;var r=Object.keys(e).reduce(function(n,r){return void 0===t[r]&&(n[r]=e[r]),n},{});return Object.keys(r).length>0?r:void 0}}},iterator:function(t){return new r(t)},length:function(t){return"number"==typeof t.delete?t.delete:"number"==typeof t.retain?t.retain:"string"==typeof t.insert?t.insert.length:1}};r.prototype.hasNext=function(){return this.peekLength()<1/0},r.prototype.next=function(t){t||(t=1/0);var e=this.ops[this.index];if(e){var n=this.offset,r=l.length(e);if(t>=r-n?(t=r-n,this.index+=1,this.offset=0):this.offset+=t,"number"==typeof e.delete)return{delete:t};var o={};return e.attributes&&(o.attributes=e.attributes),"number"==typeof e.retain?o.retain=t:"string"==typeof e.insert?o.insert=e.insert.substr(n,t):o.insert=e.insert,o}return{retain:1/0}},r.prototype.peek=function(){return this.ops[this.index]},r.prototype.peekLength=function(){return this.ops[this.index]?l.length(this.ops[this.index])-this.offset:1/0},r.prototype.peekType=function(){return this.ops[this.index]?"number"==typeof this.ops[this.index].delete?"delete":"number"==typeof this.ops[this.index].retain?"retain":"insert":"retain"},t.exports=l},function(t,e){var n=function(){"use strict";function t(t,e){return null!=e&&t instanceof e}function e(n,r,o,i,c){function f(n,o){if(null===n)return null;if(0===o)return n;var y,v;if("object"!=typeof n)return n;if(t(n,a))y=new a;else if(t(n,s))y=new s;else if(t(n,u))y=new u(function(t,e){n.then(function(e){t(f(e,o-1))},function(t){e(f(t,o-1))})});else if(e.__isArray(n))y=[];else if(e.__isRegExp(n))y=new RegExp(n.source,l(n)),n.lastIndex&&(y.lastIndex=n.lastIndex);else if(e.__isDate(n))y=new Date(n.getTime());else{if(d&&Buffer.isBuffer(n))return y=new Buffer(n.length),n.copy(y),y;t(n,Error)?y=Object.create(n):void 0===i?(v=Object.getPrototypeOf(n),y=Object.create(v)):(y=Object.create(i),v=i)}if(r){var b=h.indexOf(n);if(-1!=b)return p[b];h.push(n),p.push(y)}t(n,a)&&n.forEach(function(t,e){var n=f(e,o-1),r=f(t,o-1);y.set(n,r)}),t(n,s)&&n.forEach(function(t){var e=f(t,o-1);y.add(e)});for(var g in n){var m;v&&(m=Object.getOwnPropertyDescriptor(v,g)),m&&null==m.set||(y[g]=f(n[g],o-1))}if(Object.getOwnPropertySymbols)for(var _=Object.getOwnPropertySymbols(n),g=0;g<_.length;g++){var O=_[g],w=Object.getOwnPropertyDescriptor(n,O);(!w||w.enumerable||c)&&(y[O]=f(n[O],o-1),w.enumerable||Object.defineProperty(y,O,{enumerable:!1}))}if(c)for(var x=Object.getOwnPropertyNames(n),g=0;g<x.length;g++){var k=x[g],w=Object.getOwnPropertyDescriptor(n,k);w&&w.enumerable||(y[k]=f(n[k],o-1),Object.defineProperty(y,k,{enumerable:!1}))}return y}"object"==typeof r&&(o=r.depth,i=r.prototype,c=r.includeNonEnumerable,r=r.circular);var h=[],p=[],d="undefined"!=typeof Buffer;return void 0===r&&(r=!0),void 0===o&&(o=1/0),f(n,o)}function n(t){return Object.prototype.toString.call(t)}function r(t){return"object"==typeof t&&"[object Date]"===n(t)}function o(t){return"object"==typeof t&&"[object Array]"===n(t)}function i(t){return"object"==typeof t&&"[object RegExp]"===n(t)}function l(t){var e="";return t.global&&(e+="g"),t.ignoreCase&&(e+="i"),t.multiline&&(e+="m"),e}var a;try{a=Map}catch(t){a=function(){}}var s;try{s=Set}catch(t){s=function(){}}var u;try{u=Promise}catch(t){u=function(){}}return e.clonePrototype=function(t){if(null===t)return null;var e=function(){};return e.prototype=t,new e},e.__objToStr=n,e.__isDate=r,e.__isArray=o,e.__isRegExp=i,e.__getRegExpFlags=l,e}();"object"==typeof t&&t.exports&&(t.exports=n)},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function o(t){if(Array.isArray(t)){for(var e=0,n=Array(t.length);e<t.length;e++)n[e]=t[e];return n}return Array.from(t)}function i(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function l(t,e){try{e.parentNode}catch(t){return!1}return e instanceof Text&&(e=e.parentNode),t.contains(e)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.Range=void 0;var a=function(){function t(t,e){var n=[],r=!0,o=!1,i=void 0;try{for(var l,a=t[Symbol.iterator]();!(r=(l=a.next()).done)&&(n.push(l.value),!e||n.length!==e);r=!0);}catch(t){o=!0,i=t}finally{try{!r&&a.return&&a.return()}finally{if(o)throw i}}return n}return function(e,n){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return t(e,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),s=function(){function t(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,n,r){return n&&t(e.prototype,n),r&&t(e,r),e}}(),u=n(0),c=r(u),f=n(21),h=r(f),p=n(12),d=r(p),y=n(9),v=r(y),b=n(10),g=r(b),m=(0,g.default)("quill:selection"),_=function t(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;i(this,t),this.index=e,this.length=n},O=function(){function t(e,n){var r=this;i(this,t),this.emitter=n,this.scroll=e,this.composing=!1,this.mouseDown=!1,this.root=this.scroll.domNode,this.cursor=c.default.create("cursor",this),this.lastRange=this.savedRange=new _(0,0),this.handleComposition(),this.handleDragging(),this.emitter.listenDOM("selectionchange",document,function(){r.mouseDown||setTimeout(r.update.bind(r,v.default.sources.USER),1)}),this.emitter.on(v.default.events.EDITOR_CHANGE,function(t,e){t===v.default.events.TEXT_CHANGE&&e.length()>0&&r.update(v.default.sources.SILENT)}),this.emitter.on(v.default.events.SCROLL_BEFORE_UPDATE,function(){if(r.hasFocus()){var t=r.getNativeRange();null!=t&&t.start.node!==r.cursor.textNode&&r.emitter.once(v.default.events.SCROLL_UPDATE,function(){try{r.setNativeRange(t.start.node,t.start.offset,t.end.node,t.end.offset)}catch(t){}})}}),this.emitter.on(v.default.events.SCROLL_OPTIMIZE,function(t,e){if(e.range){var n=e.range,o=n.startNode,i=n.startOffset,l=n.endNode,a=n.endOffset;r.setNativeRange(o,i,l,a)}}),this.update(v.default.sources.SILENT)}return s(t,[{key:"handleComposition",value:function(){var t=this;this.root.addEventListener("compositionstart",function(){t.composing=!0}),this.root.addEventListener("compositionend",function(){if(t.composing=!1,t.cursor.parent){var e=t.cursor.restore();if(!e)return;setTimeout(function(){t.setNativeRange(e.startNode,e.startOffset,e.endNode,e.endOffset)},1)}})}},{key:"handleDragging",value:function(){var t=this;this.emitter.listenDOM("mousedown",document.body,function(){t.mouseDown=!0}),this.emitter.listenDOM("mouseup",document.body,function(){t.mouseDown=!1,t.update(v.default.sources.USER)})}},{key:"focus",value:function(){this.hasFocus()||(this.root.focus(),this.setRange(this.savedRange))}},{key:"format",value:function(t,e){if(null==this.scroll.whitelist||this.scroll.whitelist[t]){this.scroll.update();var n=this.getNativeRange();if(null!=n&&n.native.collapsed&&!c.default.query(t,c.default.Scope.BLOCK)){if(n.start.node!==this.cursor.textNode){var r=c.default.find(n.start.node,!1);if(null==r)return;if(r instanceof c.default.Leaf){var o=r.split(n.start.offset);r.parent.insertBefore(this.cursor,o)}else r.insertBefore(this.cursor,n.start.node);this.cursor.attach()}this.cursor.format(t,e),this.scroll.optimize(),this.setNativeRange(this.cursor.textNode,this.cursor.textNode.data.length),this.update()}}}},{key:"getBounds",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=this.scroll.length();t=Math.min(t,n-1),e=Math.min(t+e,n-1)-t;var r=void 0,o=this.scroll.leaf(t),i=a(o,2),l=i[0],s=i[1];if(null==l)return null;var u=l.position(s,!0),c=a(u,2);r=c[0],s=c[1];var f=document.createRange();if(e>0){f.setStart(r,s);var h=this.scroll.leaf(t+e),p=a(h,2);if(l=p[0],s=p[1],null==l)return null;var d=l.position(s,!0),y=a(d,2);return r=y[0],s=y[1],f.setEnd(r,s),f.getBoundingClientRect()}var v="left",b=void 0;return r instanceof Text?(s<r.data.length?(f.setStart(r,s),f.setEnd(r,s+1)):(f.setStart(r,s-1),f.setEnd(r,s),v="right"),b=f.getBoundingClientRect()):(b=l.domNode.getBoundingClientRect(),s>0&&(v="right")),{bottom:b.top+b.height,height:b.height,left:b[v],right:b[v],top:b.top,width:0}}},{key:"getNativeRange",value:function(){var t=document.getSelection();if(null==t||t.rangeCount<=0)return null;var e=t.getRangeAt(0);if(null==e)return null;var n=this.normalizeNative(e);return m.info("getNativeRange",n),n}},{key:"getRange",value:function(){var t=this.getNativeRange();return null==t?[null,null]:[this.normalizedToRange(t),t]}},{key:"hasFocus",value:function(){return document.activeElement===this.root}},{key:"normalizedToRange",value:function(t){var e=this,n=[[t.start.node,t.start.offset]];t.native.collapsed||n.push([t.end.node,t.end.offset]);var r=n.map(function(t){var n=a(t,2),r=n[0],o=n[1],i=c.default.find(r,!0),l=i.offset(e.scroll);return 0===o?l:i instanceof c.default.Container?l+i.length():l+i.index(r,o)}),i=Math.min(Math.max.apply(Math,o(r)),this.scroll.length()-1),l=Math.min.apply(Math,[i].concat(o(r)));return new _(l,i-l)}},{key:"normalizeNative",value:function(t){if(!l(this.root,t.startContainer)||!t.collapsed&&!l(this.root,t.endContainer))return null;var e={start:{node:t.startContainer,offset:t.startOffset},end:{node:t.endContainer,offset:t.endOffset},native:t};return[e.start,e.end].forEach(function(t){for(var e=t.node,n=t.offset;!(e instanceof Text)&&e.childNodes.length>0;)if(e.childNodes.length>n)e=e.childNodes[n],n=0;else{if(e.childNodes.length!==n)break;e=e.lastChild,n=e instanceof Text?e.data.length:e.childNodes.length+1}t.node=e,t.offset=n}),e}},{key:"rangeToNative",value:function(t){var e=this,n=t.collapsed?[t.index]:[t.index,t.index+t.length],r=[],o=this.scroll.length();return n.forEach(function(t,n){t=Math.min(o-1,t);var i=void 0,l=e.scroll.leaf(t),s=a(l,2),u=s[0],c=s[1],f=u.position(c,0!==n),h=a(f,2);i=h[0],c=h[1],r.push(i,c)}),r.length<2&&(r=r.concat(r)),r}},{key:"scrollIntoView",value:function(t){var e=this.lastRange;if(null!=e){var n=this.getBounds(e.index,e.length);if(null!=n){var r=this.scroll.length()-1,o=this.scroll.line(Math.min(e.index,r)),i=a(o,1),l=i[0],s=l;if(e.length>0){var u=this.scroll.line(Math.min(e.index+e.length,r));s=a(u,1)[0]}if(null!=l&&null!=s){var c=t.getBoundingClientRect();n.top<c.top?t.scrollTop-=c.top-n.top:n.bottom>c.bottom&&(t.scrollTop+=n.bottom-c.bottom)}}}}},{key:"setNativeRange",value:function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:t,r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:e,o=arguments.length>4&&void 0!==arguments[4]&&arguments[4];if(m.info("setNativeRange",t,e,n,r),null==t||null!=this.root.parentNode&&null!=t.parentNode&&null!=n.parentNode){var i=document.getSelection();if(null!=i)if(null!=t){this.hasFocus()||this.root.focus();var l=(this.getNativeRange()||{}).native;if(null==l||o||t!==l.startContainer||e!==l.startOffset||n!==l.endContainer||r!==l.endOffset){"BR"==t.tagName&&(e=[].indexOf.call(t.parentNode.childNodes,t),t=t.parentNode),"BR"==n.tagName&&(r=[].indexOf.call(n.parentNode.childNodes,n),n=n.parentNode);var a=document.createRange();a.setStart(t,e),a.setEnd(n,r),i.removeAllRanges(),i.addRange(a)}}else i.removeAllRanges(),this.root.blur(),document.body.focus()}}},{key:"setRange",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:v.default.sources.API;if("string"==typeof e&&(n=e,e=!1),m.info("setRange",t),null!=t){var r=this.rangeToNative(t);this.setNativeRange.apply(this,o(r).concat([e]))}else this.setNativeRange(null);this.update(n)}},{key:"update",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:v.default.sources.USER,e=this.lastRange,n=this.getRange(),r=a(n,2),o=r[0],i=r[1];if(this.lastRange=o,null!=this.lastRange&&(this.savedRange=this.lastRange),!(0,d.default)(e,this.lastRange)){var l;!this.composing&&null!=i&&i.native.collapsed&&i.start.node!==this.cursor.textNode&&this.cursor.restore();var s=[v.default.events.SELECTION_CHANGE,(0,h.default)(this.lastRange),(0,h.default)(e),t];if((l=this.emitter).emit.apply(l,[v.default.events.EDITOR_CHANGE].concat(s)),t!==v.default.sources.SILENT){var u;(u=this.emitter).emit.apply(u,s)}}}}]),t}();e.Range=_,e.default=O},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function i(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function l(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0});var a=n(0),s=r(a),u=n(3),c=r(u),f=function(t){function e(){return o(this,e),i(this,(e.__proto__||Object.getPrototypeOf(e)).apply(this,arguments))}return l(e,t),e}(s.default.Container);f.allowedChildren=[c.default,u.BlockEmbed,f],e.default=f},function(t,e,n){"use strict";function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function o(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function i(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0}),e.ColorStyle=e.ColorClass=e.ColorAttributor=void 0;var l=function(){function t(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,n,r){return n&&t(e.prototype,n),r&&t(e,r),e}}(),a=function t(e,n,r){null===e&&(e=Function.prototype);var o=Object.getOwnPropertyDescriptor(e,n);if(void 0===o){var i=Object.getPrototypeOf(e);return null===i?void 0:t(i,n,r)}if("value"in o)return o.value;var l=o.get;if(void 0!==l)return l.call(r)},s=n(0),u=function(t){return t&&t.__esModule?t:{default:t}}(s),c=function(t){function e(){return r(this,e),o(this,(e.__proto__||Object.getPrototypeOf(e)).apply(this,arguments))}return i(e,t),l(e,[{key:"value",value:function(t){var n=a(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"value",this).call(this,t);return n.startsWith("rgb(")?(n=n.replace(/^[^\d]+/,"").replace(/[^\d]+$/,""),"#"+n.split(",").map(function(t){return("00"+parseInt(t).toString(16)).slice(-2)}).join("")):n}}]),e}(u.default.Attributor.Style),f=new u.default.Attributor.Class("color","ql-color",{scope:u.default.Scope.INLINE}),h=new c("color","color",{scope:u.default.Scope.INLINE});e.ColorAttributor=c,e.ColorClass=f,e.ColorStyle=h},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function o(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function i(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function l(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function a(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}function s(t,e){var n,r=t===D.keys.LEFT?"prefix":"suffix";return n={key:t,shiftKey:e,altKey:null},o(n,r,/^$/),o(n,"handler",function(n){var r=n.index;t===D.keys.RIGHT&&(r+=n.length+1);var o=this.quill.getLeaf(r);return!(b(o,1)[0]instanceof T.default.Embed)||(t===D.keys.LEFT?e?this.quill.setSelection(n.index-1,n.length+1,S.default.sources.USER):this.quill.setSelection(n.index-1,S.default.sources.USER):e?this.quill.setSelection(n.index,n.length+1,S.default.sources.USER):this.quill.setSelection(n.index+n.length+1,S.default.sources.USER),!1)}),n}function u(t,e){if(!(0===t.index||this.quill.getLength()<=1)){var n=this.quill.getLine(t.index),r=b(n,1),o=r[0],i={};if(0===e.offset){var l=this.quill.getLine(t.index-1),a=b(l,1),s=a[0];if(null!=s&&s.length()>1){var u=o.formats(),c=this.quill.getFormat(t.index-1,1);i=A.default.attributes.diff(u,c)||{}}}var f=/[\uD800-\uDBFF][\uDC00-\uDFFF]$/.test(e.prefix)?2:1;this.quill.deleteText(t.index-f,f,S.default.sources.USER),Object.keys(i).length>0&&this.quill.formatLine(t.index-f,f,i,S.default.sources.USER),this.quill.focus()}}function c(t,e){var n=/^[\uD800-\uDBFF][\uDC00-\uDFFF]/.test(e.suffix)?2:1;if(!(t.index>=this.quill.getLength()-n)){var r={},o=0,i=this.quill.getLine(t.index),l=b(i,1),a=l[0];if(e.offset>=a.length()-1){var s=this.quill.getLine(t.index+1),u=b(s,1),c=u[0];if(c){var f=a.formats(),h=this.quill.getFormat(t.index,1);r=A.default.attributes.diff(f,h)||{},o=c.length()}}this.quill.deleteText(t.index,n,S.default.sources.USER),Object.keys(r).length>0&&this.quill.formatLine(t.index+o-1,n,r,S.default.sources.USER)}}function f(t){var e=this.quill.getLines(t),n={};if(e.length>1){var r=e[0].formats(),o=e[e.length-1].formats();n=A.default.attributes.diff(o,r)||{}}this.quill.deleteText(t,S.default.sources.USER),Object.keys(n).length>0&&this.quill.formatLine(t.index,1,n,S.default.sources.USER),this.quill.setSelection(t.index,S.default.sources.SILENT),this.quill.focus()}function h(t,e){var n=this;t.length>0&&this.quill.scroll.deleteAt(t.index,t.length);var r=Object.keys(e.format).reduce(function(t,n){return T.default.query(n,T.default.Scope.BLOCK)&&!Array.isArray(e.format[n])&&(t[n]=e.format[n]),t},{});this.quill.insertText(t.index,"\n",r,S.default.sources.USER),this.quill.setSelection(t.index+1,S.default.sources.SILENT),this.quill.focus(),Object.keys(e.format).forEach(function(t){null==r[t]&&(Array.isArray(e.format[t])||"link"!==t&&n.quill.format(t,e.format[t],S.default.sources.USER))})}function p(t){return{key:D.keys.TAB,shiftKey:!t,format:{"code-block":!0},handler:function(e){var n=T.default.query("code-block"),r=e.index,o=e.length,i=this.quill.scroll.descendant(n,r),l=b(i,2),a=l[0],s=l[1];if(null!=a){var u=this.quill.getIndex(a),c=a.newlineIndex(s,!0)+1,f=a.newlineIndex(u+s+o),h=a.domNode.textContent.slice(c,f).split("\n");s=0,h.forEach(function(e,i){t?(a.insertAt(c+s,n.TAB),s+=n.TAB.length,0===i?r+=n.TAB.length:o+=n.TAB.length):e.startsWith(n.TAB)&&(a.deleteAt(c+s,n.TAB.length),s-=n.TAB.length,0===i?r-=n.TAB.length:o-=n.TAB.length),s+=e.length+1}),this.quill.update(S.default.sources.USER),this.quill.setSelection(r,o,S.default.sources.SILENT)}}}}function d(t){return{key:t[0].toUpperCase(),shortKey:!0,handler:function(e,n){this.quill.format(t,!n.format[t],S.default.sources.USER)}}}function y(t){if("string"==typeof t||"number"==typeof t)return y({key:t});if("object"===(void 0===t?"undefined":v(t))&&(t=(0,_.default)(t,!1)),"string"==typeof t.key)if(null!=D.keys[t.key.toUpperCase()])t.key=D.keys[t.key.toUpperCase()];else{if(1!==t.key.length)return null;t.key=t.key.toUpperCase().charCodeAt(0)}return t.shortKey&&(t[B]=t.shortKey,delete t.shortKey),t}Object.defineProperty(e,"__esModule",{value:!0}),e.SHORTKEY=e.default=void 0;var v="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},b=function(){function t(t,e){var n=[],r=!0,o=!1,i=void 0;try{for(var l,a=t[Symbol.iterator]();!(r=(l=a.next()).done)&&(n.push(l.value),!e||n.length!==e);r=!0);}catch(t){o=!0,i=t}finally{try{!r&&a.return&&a.return()}finally{if(o)throw i}}return n}return function(e,n){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return t(e,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),g=function(){function t(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,n,r){return n&&t(e.prototype,n),r&&t(e,r),e}}(),m=n(21),_=r(m),O=n(12),w=r(O),x=n(2),k=r(x),E=n(4),N=r(E),j=n(20),A=r(j),q=n(0),T=r(q),P=n(6),S=r(P),C=n(10),L=r(C),M=n(7),R=r(M),I=(0,L.default)("quill:keyboard"),B=/Mac/i.test(navigator.platform)?"metaKey":"ctrlKey",D=function(t){function e(t,n){i(this,e);var r=l(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t,n));return r.bindings={},Object.keys(r.options.bindings).forEach(function(e){("list autofill"!==e||null==t.scroll.whitelist||t.scroll.whitelist.list)&&r.options.bindings[e]&&r.addBinding(r.options.bindings[e])}),r.addBinding({key:e.keys.ENTER,shiftKey:null},h),r.addBinding({key:e.keys.ENTER,metaKey:null,ctrlKey:null,altKey:null},function(){}),/Firefox/i.test(navigator.userAgent)?(r.addBinding({key:e.keys.BACKSPACE},{collapsed:!0},u),r.addBinding({key:e.keys.DELETE},{collapsed:!0},c)):(r.addBinding({key:e.keys.BACKSPACE},{collapsed:!0,prefix:/^.?$/},u),r.addBinding({key:e.keys.DELETE},{collapsed:!0,suffix:/^.?$/},c)),r.addBinding({key:e.keys.BACKSPACE},{collapsed:!1},f),r.addBinding({key:e.keys.DELETE},{collapsed:!1},f),r.addBinding({key:e.keys.BACKSPACE,altKey:null,ctrlKey:null,metaKey:null,shiftKey:null},{collapsed:!0,offset:0},u),r.listen(),r}return a(e,t),g(e,null,[{key:"match",value:function(t,e){return e=y(e),!["altKey","ctrlKey","metaKey","shiftKey"].some(function(n){return!!e[n]!==t[n]&&null!==e[n]})&&e.key===(t.which||t.keyCode)}}]),g(e,[{key:"addBinding",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=y(t);if(null==r||null==r.key)return I.warn("Attempted to add invalid keyboard binding",r);"function"==typeof e&&(e={handler:e}),"function"==typeof n&&(n={handler:n}),r=(0,k.default)(r,e,n),this.bindings[r.key]=this.bindings[r.key]||[],this.bindings[r.key].push(r)}},{key:"listen",value:function(){var t=this;this.quill.root.addEventListener("keydown",function(n){if(!n.defaultPrevented){var r=n.which||n.keyCode,o=(t.bindings[r]||[]).filter(function(t){return e.match(n,t)});if(0!==o.length){var i=t.quill.getSelection();if(null!=i&&t.quill.hasFocus()){var l=t.quill.getLine(i.index),a=b(l,2),s=a[0],u=a[1],c=t.quill.getLeaf(i.index),f=b(c,2),h=f[0],p=f[1],d=0===i.length?[h,p]:t.quill.getLeaf(i.index+i.length),y=b(d,2),g=y[0],m=y[1],_=h instanceof T.default.Text?h.value().slice(0,p):"",O=g instanceof T.default.Text?g.value().slice(m):"",x={collapsed:0===i.length,empty:0===i.length&&s.length()<=1,format:t.quill.getFormat(i),offset:u,prefix:_,suffix:O};o.some(function(e){if(null!=e.collapsed&&e.collapsed!==x.collapsed)return!1;if(null!=e.empty&&e.empty!==x.empty)return!1;if(null!=e.offset&&e.offset!==x.offset)return!1;if(Array.isArray(e.format)){if(e.format.every(function(t){return null==x.format[t]}))return!1}else if("object"===v(e.format)&&!Object.keys(e.format).every(function(t){return!0===e.format[t]?null!=x.format[t]:!1===e.format[t]?null==x.format[t]:(0,w.default)(e.format[t],x.format[t])}))return!1;return!(null!=e.prefix&&!e.prefix.test(x.prefix))&&(!(null!=e.suffix&&!e.suffix.test(x.suffix))&&!0!==e.handler.call(t,i,x))})&&n.preventDefault()}}}})}}]),e}(R.default);D.keys={BACKSPACE:8,TAB:9,ENTER:13,ESCAPE:27,LEFT:37,UP:38,RIGHT:39,DOWN:40,DELETE:46},D.DEFAULTS={bindings:{bold:d("bold"),italic:d("italic"),underline:d("underline"),indent:{key:D.keys.TAB,format:["blockquote","indent","list"],handler:function(t,e){if(e.collapsed&&0!==e.offset)return!0;this.quill.format("indent","+1",S.default.sources.USER)}},outdent:{key:D.keys.TAB,shiftKey:!0,format:["blockquote","indent","list"],handler:function(t,e){if(e.collapsed&&0!==e.offset)return!0;this.quill.format("indent","-1",S.default.sources.USER)}},"outdent backspace":{key:D.keys.BACKSPACE,collapsed:!0,shiftKey:null,metaKey:null,ctrlKey:null,altKey:null,format:["indent","list"],offset:0,handler:function(t,e){null!=e.format.indent?this.quill.format("indent","-1",S.default.sources.USER):null!=e.format.list&&this.quill.format("list",!1,S.default.sources.USER)}},"indent code-block":p(!0),"outdent code-block":p(!1),"remove tab":{key:D.keys.TAB,shiftKey:!0,collapsed:!0,prefix:/\t$/,handler:function(t){this.quill.deleteText(t.index-1,1,S.default.sources.USER)}},tab:{key:D.keys.TAB,handler:function(t){this.quill.history.cutoff();var e=(new N.default).retain(t.index).delete(t.length).insert("\t");this.quill.updateContents(e,S.default.sources.USER),this.quill.history.cutoff(),this.quill.setSelection(t.index+1,S.default.sources.SILENT)}},"list empty enter":{key:D.keys.ENTER,collapsed:!0,format:["list"],empty:!0,handler:function(t,e){this.quill.format("list",!1,S.default.sources.USER),e.format.indent&&this.quill.format("indent",!1,S.default.sources.USER)}},"checklist enter":{key:D.keys.ENTER,collapsed:!0,format:{list:"checked"},handler:function(t){var e=this.quill.getLine(t.index),n=b(e,2),r=n[0],o=n[1],i=(0,k.default)({},r.formats(),{list:"checked"}),l=(new N.default).retain(t.index).insert("\n",i).retain(r.length()-o-1).retain(1,{list:"unchecked"});this.quill.updateContents(l,S.default.sources.USER),this.quill.setSelection(t.index+1,S.default.sources.SILENT),this.quill.scrollIntoView()}},"header enter":{key:D.keys.ENTER,collapsed:!0,format:["header"],suffix:/^$/,handler:function(t,e){var n=this.quill.getLine(t.index),r=b(n,2),o=r[0],i=r[1],l=(new N.default).retain(t.index).insert("\n",e.format).retain(o.length()-i-1).retain(1,{header:null});this.quill.updateContents(l,S.default.sources.USER),this.quill.setSelection(t.index+1,S.default.sources.SILENT),this.quill.scrollIntoView()}},"list autofill":{key:" ",collapsed:!0,format:{list:!1},prefix:/^\s*?(\d+\.|-|\*|\[ ?\]|\[x\])$/,handler:function(t,e){var n=e.prefix.length,r=this.quill.getLine(t.index),o=b(r,2),i=o[0],l=o[1];if(l>n)return!0;var a=void 0;switch(e.prefix.trim()){case"[]":case"[ ]":a="unchecked";break;case"[x]":a="checked";break;case"-":case"*":a="bullet";break;default:a="ordered"}this.quill.insertText(t.index," ",S.default.sources.USER),this.quill.history.cutoff();var s=(new N.default).retain(t.index-l).delete(n+1).retain(i.length()-2-l).retain(1,{list:a});this.quill.updateContents(s,S.default.sources.USER),this.quill.history.cutoff(),this.quill.setSelection(t.index-n,S.default.sources.SILENT)}},"code exit":{key:D.keys.ENTER,collapsed:!0,format:["code-block"],prefix:/\n\n$/,suffix:/^\s+$/,handler:function(t){var e=this.quill.getLine(t.index),n=b(e,2),r=n[0],o=n[1],i=(new N.default).retain(t.index+r.length()-o-2).retain(1,{"code-block":null}).delete(1);this.quill.updateContents(i,S.default.sources.USER)}},"embed left":s(D.keys.LEFT,!1),"embed left shift":s(D.keys.LEFT,!0),"embed right":s(D.keys.RIGHT,!1),"embed right shift":s(D.keys.RIGHT,!0)}},e.default=D,e.SHORTKEY=B},function(t,e,n){"use strict";t.exports={align:{"":n(75),center:n(76),right:n(77),justify:n(78)},background:n(79),blockquote:n(80),bold:n(81),clean:n(82),code:n(40),"code-block":n(40),color:n(83),direction:{"":n(84),rtl:n(85)},float:{center:n(86),full:n(87),left:n(88),right:n(89)},formula:n(90),header:{1:n(91),2:n(92)},italic:n(93),image:n(94),indent:{"+1":n(95),"-1":n(96)},link:n(97),list:{ordered:n(98),bullet:n(99),check:n(100)},script:{sub:n(101),super:n(102)},strike:n(103),underline:n(104),video:n(105)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(1),o=function(){function t(t){this.domNode=t,this.domNode[r.DATA_KEY]={blot:this}}return Object.defineProperty(t.prototype,"statics",{get:function(){return this.constructor},enumerable:!0,configurable:!0}),t.create=function(t){if(null==this.tagName)throw new r.ParchmentError("Blot definition missing tagName");var e;return Array.isArray(this.tagName)?("string"==typeof t&&(t=t.toUpperCase(),parseInt(t).toString()===t&&(t=parseInt(t))),e="number"==typeof t?document.createElement(this.tagName[t-1]):this.tagName.indexOf(t)>-1?document.createElement(t):document.createElement(this.tagName[0])):e=document.createElement(this.tagName),this.className&&e.classList.add(this.className),e},t.prototype.attach=function(){null!=this.parent&&(this.scroll=this.parent.scroll)},t.prototype.clone=function(){var t=this.domNode.cloneNode(!1);return r.create(t)},t.prototype.detach=function(){null!=this.parent&&this.parent.removeChild(this),delete this.domNode[r.DATA_KEY]},t.prototype.deleteAt=function(t,e){this.isolate(t,e).remove()},t.prototype.formatAt=function(t,e,n,o){var i=this.isolate(t,e);if(null!=r.query(n,r.Scope.BLOT)&&o)i.wrap(n,o);else if(null!=r.query(n,r.Scope.ATTRIBUTE)){var l=r.create(this.statics.scope);i.wrap(l),l.format(n,o)}},t.prototype.insertAt=function(t,e,n){var o=null==n?r.create("text",e):r.create(e,n),i=this.split(t);this.parent.insertBefore(o,i)},t.prototype.insertInto=function(t,e){void 0===e&&(e=null),null!=this.parent&&this.parent.children.remove(this);var n=null;t.children.insertBefore(this,e),null!=e&&(n=e.domNode),this.domNode.parentNode==t.domNode&&this.domNode.nextSibling==n||t.domNode.insertBefore(this.domNode,n),this.parent=t,this.attach()},t.prototype.isolate=function(t,e){var n=this.split(t);return n.split(e),n},t.prototype.length=function(){return 1},t.prototype.offset=function(t){return void 0===t&&(t=this.parent),null==this.parent||this==t?0:this.parent.children.offset(this)+this.parent.offset(t)},t.prototype.optimize=function(t){null!=this.domNode[r.DATA_KEY]&&delete this.domNode[r.DATA_KEY].mutations},t.prototype.remove=function(){null!=this.domNode.parentNode&&this.domNode.parentNode.removeChild(this.domNode),this.detach()},t.prototype.replace=function(t){null!=t.parent&&(t.parent.insertBefore(this,t.next),t.remove())},t.prototype.replaceWith=function(t,e){var n="string"==typeof t?r.create(t,e):t;return n.replace(this),n},t.prototype.split=function(t,e){return 0===t?this:this.next},t.prototype.update=function(t,e){},t.prototype.wrap=function(t,e){var n="string"==typeof t?r.create(t,e):t;return null!=this.parent&&this.parent.insertBefore(n,this.next),n.appendChild(this),n},t.blotName="abstract",t}();e.default=o},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(11),o=n(29),i=n(30),l=n(1),a=function(){function t(t){this.attributes={},this.domNode=t,this.build()}return t.prototype.attribute=function(t,e){e?t.add(this.domNode,e)&&(null!=t.value(this.domNode)?this.attributes[t.attrName]=t:delete this.attributes[t.attrName]):(t.remove(this.domNode),delete this.attributes[t.attrName])},t.prototype.build=function(){var t=this;this.attributes={};var e=r.default.keys(this.domNode),n=o.default.keys(this.domNode),a=i.default.keys(this.domNode);e.concat(n).concat(a).forEach(function(e){var n=l.query(e,l.Scope.ATTRIBUTE);n instanceof r.default&&(t.attributes[n.attrName]=n)})},t.prototype.copy=function(t){var e=this;Object.keys(this.attributes).forEach(function(n){var r=e.attributes[n].value(e.domNode);t.format(n,r)})},t.prototype.move=function(t){var e=this;this.copy(t),Object.keys(this.attributes).forEach(function(t){e.attributes[t].remove(e.domNode)}),this.attributes={}},t.prototype.values=function(){var t=this;return Object.keys(this.attributes).reduce(function(e,n){return e[n]=t.attributes[n].value(t.domNode),e},{})},t}();e.default=a},function(t,e,n){"use strict";function r(t,e){return(t.getAttribute("class")||"").split(/\s+/).filter(function(t){return 0===t.indexOf(e+"-")})}var o=this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}();Object.defineProperty(e,"__esModule",{value:!0});var i=n(11),l=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e.keys=function(t){return(t.getAttribute("class")||"").split(/\s+/).map(function(t){return t.split("-").slice(0,-1).join("-")})},e.prototype.add=function(t,e){return!!this.canAdd(t,e)&&(this.remove(t),t.classList.add(this.keyName+"-"+e),!0)},e.prototype.remove=function(t){r(t,this.keyName).forEach(function(e){t.classList.remove(e)}),0===t.classList.length&&t.removeAttribute("class")},e.prototype.value=function(t){var e=r(t,this.keyName)[0]||"",n=e.slice(this.keyName.length+1);return this.canAdd(t,n)?n:""},e}(i.default);e.default=l},function(t,e,n){"use strict";function r(t){var e=t.split("-"),n=e.slice(1).map(function(t){return t[0].toUpperCase()+t.slice(1)}).join("");return e[0]+n}var o=this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}();Object.defineProperty(e,"__esModule",{value:!0});var i=n(11),l=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e.keys=function(t){return(t.getAttribute("style")||"").split(";").map(function(t){return t.split(":")[0].trim()})},e.prototype.add=function(t,e){return!!this.canAdd(t,e)&&(t.style[r(this.keyName)]=e,!0)},e.prototype.remove=function(t){t.style[r(this.keyName)]="",t.getAttribute("style")||t.removeAttribute("style")},e.prototype.value=function(t){var e=t.style[r(this.keyName)];return this.canAdd(t,e)?e:""},e}(i.default);e.default=l},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function i(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function l(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0});var a=function(){function t(t,e){var n=[],r=!0,o=!1,i=void 0;try{for(var l,a=t[Symbol.iterator]();!(r=(l=a.next()).done)&&(n.push(l.value),!e||n.length!==e);r=!0);}catch(t){o=!0,i=t}finally{try{!r&&a.return&&a.return()}finally{if(o)throw i}}return n}return function(e,n){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return t(e,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),s=function t(e,n,r){null===e&&(e=Function.prototype);var o=Object.getOwnPropertyDescriptor(e,n);if(void 0===o){var i=Object.getPrototypeOf(e);return null===i?void 0:t(i,n,r)}if("value"in o)return o.value;var l=o.get;if(void 0!==l)return l.call(r)},u=function(){function t(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,n,r){return n&&t(e.prototype,n),r&&t(e,r),e}}(),c=n(0),f=r(c),h=n(8),p=r(h),d=function(t){function e(t,n){o(this,e);var r=i(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t));return r.selection=n,r.textNode=document.createTextNode(e.CONTENTS),r.domNode.appendChild(r.textNode),r._length=0,r}return l(e,t),u(e,null,[{key:"value",value:function(){}}]),u(e,[{key:"detach",value:function(){null!=this.parent&&this.parent.removeChild(this)}},{key:"format",value:function(t,n){if(0!==this._length)return s(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"format",this).call(this,t,n);for(var r=this,o=0;null!=r&&r.statics.scope!==f.default.Scope.BLOCK_BLOT;)o+=r.offset(r.parent),r=r.parent;null!=r&&(this._length=e.CONTENTS.length,r.optimize(),r.formatAt(o,e.CONTENTS.length,t,n),this._length=0)}},{key:"index",value:function(t,n){return t===this.textNode?0:s(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"index",this).call(this,t,n)}},{key:"length",value:function(){return this._length}},{key:"position",value:function(){return[this.textNode,this.textNode.data.length]}},{key:"remove",value:function(){s(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"remove",this).call(this),this.parent=null}},{key:"restore",value:function(){if(!this.selection.composing&&null!=this.parent){var t=this.textNode,n=this.selection.getNativeRange(),r=void 0,o=void 0,i=void 0;if(null!=n&&n.start.node===t&&n.end.node===t){var l=[t,n.start.offset,n.end.offset];r=l[0],o=l[1],i=l[2]}for(;null!=this.domNode.lastChild&&this.domNode.lastChild!==this.textNode;)this.domNode.parentNode.insertBefore(this.domNode.lastChild,this.domNode);if(this.textNode.data!==e.CONTENTS){var s=this.textNode.data.split(e.CONTENTS).join("");this.next instanceof p.default?(r=this.next.domNode,this.next.insertAt(0,s),this.textNode.data=e.CONTENTS):(this.textNode.data=s,this.parent.insertBefore(f.default.create(this.textNode),this),this.textNode=document.createTextNode(e.CONTENTS),this.domNode.appendChild(this.textNode))}if(this.remove(),null!=o){var u=[o,i].map(function(t){return Math.max(0,Math.min(r.data.length,t-1))}),c=a(u,2);return o=c[0],i=c[1],{startNode:r,startOffset:o,endNode:r,endOffset:i}}}}},{key:"update",value:function(t,e){var n=this;if(t.some(function(t){return"characterData"===t.type&&t.target===n.textNode})){var r=this.restore();r&&(e.range=r)}}},{key:"value",value:function(){return""}}]),e}(f.default.Embed);d.blotName="cursor",d.className="ql-cursor",d.tagName="span",d.CONTENTS="\ufeff",e.default=d},function(t,e,n){"use strict";function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var o=function(){function t(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,n,r){return n&&t(e.prototype,n),r&&t(e,r),e}}(),i=function(){function t(e,n){r(this,t),this.quill=e,this.options=n,this.modules={}}return o(t,[{key:"init",value:function(){var t=this;Object.keys(this.options.modules).forEach(function(e){null==t.modules[e]&&t.addModule(e)})}},{key:"addModule",value:function(t){var e=this.quill.constructor.import("modules/"+t);return this.modules[t]=new e(this.quill,this.options.modules[t]||{}),this.modules[t]}}]),t}();i.DEFAULTS={modules:{}},i.themes={default:i},e.default=i},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function i(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function l(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0});var a=function(){function t(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,n,r){return n&&t(e.prototype,n),r&&t(e,r),e}}(),s=function t(e,n,r){null===e&&(e=Function.prototype);var o=Object.getOwnPropertyDescriptor(e,n);if(void 0===o){var i=Object.getPrototypeOf(e);return null===i?void 0:t(i,n,r)}if("value"in o)return o.value;var l=o.get;if(void 0!==l)return l.call(r)},u=n(0),c=r(u),f=n(8),h=r(f),p="\ufeff",d=function(t){function e(t){o(this,e);var n=i(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t));return n.contentNode=document.createElement("span"),n.contentNode.setAttribute("contenteditable",!1),[].slice.call(n.domNode.childNodes).forEach(function(t){n.contentNode.appendChild(t)}),n.leftGuard=document.createTextNode(p),n.rightGuard=document.createTextNode(p),n.domNode.appendChild(n.leftGuard),n.domNode.appendChild(n.contentNode),n.domNode.appendChild(n.rightGuard),n}return l(e,t),a(e,[{key:"index",value:function(t,n){return t===this.leftGuard?0:t===this.rightGuard?1:s(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"index",this).call(this,t,n)}},{key:"restore",value:function(t){var e=void 0,n=void 0,r=t.data.split(p).join("");if(t===this.leftGuard)if(this.prev instanceof h.default){var o=this.prev.length();this.prev.insertAt(o,r),e={startNode:this.prev.domNode,startOffset:o+r.length}}else n=document.createTextNode(r),this.parent.insertBefore(c.default.create(n),this),e={startNode:n,startOffset:r.length};else t===this.rightGuard&&(this.next instanceof h.default?(this.next.insertAt(0,r),e={startNode:this.next.domNode,startOffset:r.length}):(n=document.createTextNode(r),this.parent.insertBefore(c.default.create(n),this.next),e={startNode:n,startOffset:r.length}));return t.data=p,e}},{key:"update",value:function(t,e){var n=this;t.forEach(function(t){if("characterData"===t.type&&(t.target===n.leftGuard||t.target===n.rightGuard)){var r=n.restore(t.target);r&&(e.range=r)}})}}]),e}(c.default.Embed);e.default=d},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.AlignStyle=e.AlignClass=e.AlignAttribute=void 0;var r=n(0),o=function(t){return t&&t.__esModule?t:{default:t}}(r),i={scope:o.default.Scope.BLOCK,whitelist:["right","center","justify"]},l=new o.default.Attributor.Attribute("align","align",i),a=new o.default.Attributor.Class("align","ql-align",i),s=new o.default.Attributor.Style("align","text-align",i);e.AlignAttribute=l,e.AlignClass=a,e.AlignStyle=s},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.BackgroundStyle=e.BackgroundClass=void 0;var r=n(0),o=function(t){return t&&t.__esModule?t:{default:t}}(r),i=n(24),l=new o.default.Attributor.Class("background","ql-bg",{scope:o.default.Scope.INLINE}),a=new i.ColorAttributor("background","background-color",{scope:o.default.Scope.INLINE});e.BackgroundClass=l,e.BackgroundStyle=a},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.DirectionStyle=e.DirectionClass=e.DirectionAttribute=void 0;var r=n(0),o=function(t){return t&&t.__esModule?t:{default:t}}(r),i={scope:o.default.Scope.BLOCK,whitelist:["rtl"]},l=new o.default.Attributor.Attribute("direction","dir",i),a=new o.default.Attributor.Class("direction","ql-direction",i),s=new o.default.Attributor.Style("direction","direction",i);e.DirectionAttribute=l,e.DirectionClass=a,e.DirectionStyle=s},function(t,e,n){"use strict";function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function o(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function i(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0}),e.FontClass=e.FontStyle=void 0;var l=function(){function t(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,n,r){return n&&t(e.prototype,n),r&&t(e,r),e}}(),a=function t(e,n,r){null===e&&(e=Function.prototype);var o=Object.getOwnPropertyDescriptor(e,n);if(void 0===o){var i=Object.getPrototypeOf(e);return null===i?void 0:t(i,n,r)}if("value"in o)return o.value;var l=o.get;if(void 0!==l)return l.call(r)},s=n(0),u=function(t){return t&&t.__esModule?t:{default:t}}(s),c={scope:u.default.Scope.INLINE,whitelist:["serif","monospace"]},f=new u.default.Attributor.Class("font","ql-font",c),h=function(t){function e(){return r(this,e),o(this,(e.__proto__||Object.getPrototypeOf(e)).apply(this,arguments))}return i(e,t),l(e,[{key:"value",value:function(t){return a(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"value",this).call(this,t).replace(/["']/g,"")}}]),e}(u.default.Attributor.Style),p=new h("font","font-family",c);e.FontStyle=p,e.FontClass=f},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.SizeStyle=e.SizeClass=void 0;var r=n(0),o=function(t){return t&&t.__esModule?t:{default:t}}(r),i=new o.default.Attributor.Class("size","ql-size",{scope:o.default.Scope.INLINE,whitelist:["small","large","huge"]}),l=new o.default.Attributor.Style("size","font-size",{scope:o.default.Scope.INLINE,whitelist:["10px","18px","32px"]});e.SizeClass=i,e.SizeStyle=l},function(t,e,n){"use strict";function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function o(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function i(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0});var l=function(){function t(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,n,r){return n&&t(e.prototype,n),r&&t(e,r),e}}(),a=function t(e,n,r){null===e&&(e=Function.prototype);var o=Object.getOwnPropertyDescriptor(e,n);if(void 0===o){var i=Object.getPrototypeOf(e);return null===i?void 0:t(i,n,r)}if("value"in o)return o.value;var l=o.get;if(void 0!==l)return l.call(r)},s=n(5),u=function(t){return t&&t.__esModule?t:{default:t}}(s),c=function(t){function e(){return r(this,e),o(this,(e.__proto__||Object.getPrototypeOf(e)).apply(this,arguments))}return i(e,t),l(e,[{key:"optimize",value:function(t){a(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"optimize",this).call(this,t),this.domNode.tagName!==this.statics.tagName[0]&&this.replaceWith(this.statics.blotName)}}],[{key:"create",value:function(){return a(e.__proto__||Object.getPrototypeOf(e),"create",this).call(this)}},{key:"formats",value:function(){return!0}}]),e}(u.default);c.blotName="bold",c.tagName=["STRONG","B"],e.default=c},function(t,e){t.exports='<svg viewbox="0 0 18 18"> <polyline class="ql-even ql-stroke" points="5 7 3 9 5 11"></polyline> <polyline class="ql-even ql-stroke" points="13 7 15 9 13 11"></polyline> <line class=ql-stroke x1=10 x2=8 y1=5 y2=13></line> </svg>'},function(t,e,n){"use strict";function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function o(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function i(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0});var l=function(){function t(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,n,r){return n&&t(e.prototype,n),r&&t(e,r),e}}(),a=function t(e,n,r){null===e&&(e=Function.prototype);var o=Object.getOwnPropertyDescriptor(e,n);if(void 0===o){var i=Object.getPrototypeOf(e);return null===i?void 0:t(i,n,r)}if("value"in o)return o.value;var l=o.get;if(void 0!==l)return l.call(r)},s=n(16),u=function(t){return t&&t.__esModule?t:{default:t}}(s),c=function(t){function e(t,n){r(this,e);var i=o(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t));return i.label.innerHTML=n,i.container.classList.add("ql-color-picker"),[].slice.call(i.container.querySelectorAll(".ql-picker-item"),0,7).forEach(function(t){t.classList.add("ql-primary")}),i}return i(e,t),l(e,[{key:"buildItem",value:function(t){var n=a(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"buildItem",this).call(this,t);return n.style.backgroundColor=t.getAttribute("value")||"",n}},{key:"selectItem",value:function(t,n){a(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"selectItem",this).call(this,t,n);var r=this.label.querySelector(".ql-color-label"),o=t?t.getAttribute("data-value")||"":"";r&&("line"===r.tagName?r.style.stroke=o:r.style.fill=o)}}]),e}(u.default);e.default=c},function(t,e,n){"use strict";function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function o(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function i(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0});var l=function(){function t(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,n,r){return n&&t(e.prototype,n),r&&t(e,r),e}}(),a=function t(e,n,r){null===e&&(e=Function.prototype);var o=Object.getOwnPropertyDescriptor(e,n);if(void 0===o){var i=Object.getPrototypeOf(e);return null===i?void 0:t(i,n,r)}if("value"in o)return o.value;var l=o.get;if(void 0!==l)return l.call(r)},s=n(16),u=function(t){return t&&t.__esModule?t:{default:t}}(s),c=function(t){function e(t,n){r(this,e);var i=o(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t));return i.container.classList.add("ql-icon-picker"),[].forEach.call(i.container.querySelectorAll(".ql-picker-item"),function(t){t.innerHTML=n[t.getAttribute("data-value")||""]}),i.defaultItem=i.container.querySelector(".ql-selected"),i.selectItem(i.defaultItem),i}return i(e,t),l(e,[{key:"selectItem",value:function(t,n){a(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"selectItem",this).call(this,t,n),t=t||this.defaultItem,this.label.innerHTML=t.innerHTML}}]),e}(u.default);e.default=c},function(t,e,n){"use strict";function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var o=function(){function t(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,n,r){return n&&t(e.prototype,n),r&&t(e,r),e}}(),i=function(){function t(e,n){var o=this;r(this,t),this.quill=e,this.boundsContainer=n||document.body,this.root=e.addContainer("ql-tooltip"),this.root.innerHTML=this.constructor.TEMPLATE,this.quill.root===this.quill.scrollingContainer&&this.quill.root.addEventListener("scroll",function(){o.root.style.marginTop=-1*o.quill.root.scrollTop+"px"}),this.hide()}return o(t,[{key:"hide",value:function(){this.root.classList.add("ql-hidden")}},{key:"position",value:function(t){var e=t.left+t.width/2-this.root.offsetWidth/2,n=t.bottom+this.quill.root.scrollTop;this.root.style.left=e+"px",this.root.style.top=n+"px",this.root.classList.remove("ql-flip");var r=this.boundsContainer.getBoundingClientRect(),o=this.root.getBoundingClientRect(),i=0;if(o.right>r.right&&(i=r.right-o.right,this.root.style.left=e+i+"px"),o.left<r.left&&(i=r.left-o.left,this.root.style.left=e+i+"px"),o.bottom>r.bottom){var l=o.bottom-o.top,a=t.bottom-t.top+l;this.root.style.top=n-a+"px",this.root.classList.add("ql-flip")}return i}},{key:"show",value:function(){this.root.classList.remove("ql-editing"),this.root.classList.remove("ql-hidden")}}]),t}();e.default=i},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function i(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function l(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}function a(t){var e=t.match(/^(?:(https?):\/\/)?(?:(?:www|m)\.)?youtube\.com\/watch.*v=([a-zA-Z0-9_-]+)/)||t.match(/^(?:(https?):\/\/)?(?:(?:www|m)\.)?youtu\.be\/([a-zA-Z0-9_-]+)/);return e?(e[1]||"https")+"://www.youtube.com/embed/"+e[2]+"?showinfo=0":(e=t.match(/^(?:(https?):\/\/)?(?:www\.)?vimeo\.com\/(\d+)/))?(e[1]||"https")+"://player.vimeo.com/video/"+e[2]+"/":t}function s(t,e){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];e.forEach(function(e){var r=document.createElement("option");e===n?r.setAttribute("selected","selected"):r.setAttribute("value",e),t.appendChild(r)})}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.BaseTooltip=void 0;var u=function(){function t(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,n,r){return n&&t(e.prototype,n),r&&t(e,r),e}}(),c=function t(e,n,r){null===e&&(e=Function.prototype);var o=Object.getOwnPropertyDescriptor(e,n);if(void 0===o){var i=Object.getPrototypeOf(e);return null===i?void 0:t(i,n,r)}if("value"in o)return o.value;var l=o.get;if(void 0!==l)return l.call(r)},f=n(2),h=r(f),p=n(4),d=r(p),y=n(9),v=r(y),b=n(25),g=r(b),m=n(32),_=r(m),O=n(41),w=r(O),x=n(42),k=r(x),E=n(16),N=r(E),j=n(43),A=r(j),q=[!1,"center","right","justify"],T=["#000000","#e60000","#ff9900","#ffff00","#008a00","#0066cc","#9933ff","#ffffff","#facccc","#ffebcc","#ffffcc","#cce8cc","#cce0f5","#ebd6ff","#bbbbbb","#f06666","#ffc266","#ffff66","#66b966","#66a3e0","#c285ff","#888888","#a10000","#b26b00","#b2b200","#006100","#0047b2","#6b24b2","#444444","#5c0000","#663d00","#666600","#003700","#002966","#3d1466"],P=[!1,"serif","monospace"],S=["1","2","3",!1],C=["small",!1,"large","huge"],L=function(t){function e(t,n){o(this,e);var r=i(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t,n)),l=function e(n){if(!document.body.contains(t.root))return document.body.removeEventListener("click",e);null==r.tooltip||r.tooltip.root.contains(n.target)||document.activeElement===r.tooltip.textbox||r.quill.hasFocus()||r.tooltip.hide(),null!=r.pickers&&r.pickers.forEach(function(t){t.container.contains(n.target)||t.close()})};return t.emitter.listenDOM("click",document.body,l),r}return l(e,t),u(e,[{key:"addModule",value:function(t){var n=c(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"addModule",this).call(this,t);return"toolbar"===t&&this.extendToolbar(n),n}},{key:"buildButtons",value:function(t,e){t.forEach(function(t){(t.getAttribute("class")||"").split(/\s+/).forEach(function(n){if(n.startsWith("ql-")&&(n=n.slice("ql-".length),null!=e[n]))if("direction"===n)t.innerHTML=e[n][""]+e[n].rtl;else if("string"==typeof e[n])t.innerHTML=e[n];else{var r=t.value||"";null!=r&&e[n][r]&&(t.innerHTML=e[n][r])}})})}},{key:"buildPickers",value:function(t,e){var n=this;this.pickers=t.map(function(t){if(t.classList.contains("ql-align"))return null==t.querySelector("option")&&s(t,q),new k.default(t,e.align);if(t.classList.contains("ql-background")||t.classList.contains("ql-color")){var n=t.classList.contains("ql-background")?"background":"color";return null==t.querySelector("option")&&s(t,T,"background"===n?"#ffffff":"#000000"),new w.default(t,e[n])}return null==t.querySelector("option")&&(t.classList.contains("ql-font")?s(t,P):t.classList.contains("ql-header")?s(t,S):t.classList.contains("ql-size")&&s(t,C)),new N.default(t)});var r=function(){n.pickers.forEach(function(t){t.update()})};this.quill.on(v.default.events.EDITOR_CHANGE,r)}}]),e}(_.default);L.DEFAULTS=(0,h.default)(!0,{},_.default.DEFAULTS,{modules:{toolbar:{handlers:{formula:function(){this.quill.theme.tooltip.edit("formula")},image:function(){var t=this,e=this.container.querySelector("input.ql-image[type=file]");null==e&&(e=document.createElement("input"),e.setAttribute("type","file"),e.setAttribute("accept","image/png, image/gif, image/jpeg, image/bmp, image/x-icon"),e.classList.add("ql-image"),e.addEventListener("change",function(){if(null!=e.files&&null!=e.files[0]){var n=new FileReader;n.onload=function(n){var r=t.quill.getSelection(!0);t.quill.updateContents((new d.default).retain(r.index).delete(r.length).insert({image:n.target.result}),v.default.sources.USER),t.quill.setSelection(r.index+1,v.default.sources.SILENT),e.value=""},n.readAsDataURL(e.files[0])}}),this.container.appendChild(e)),e.click()},video:function(){this.quill.theme.tooltip.edit("video")}}}}});var M=function(t){function e(t,n){o(this,e);var r=i(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t,n));return r.textbox=r.root.querySelector('input[type="text"]'),r.listen(),r}return l(e,t),u(e,[{key:"listen",value:function(){var t=this;this.textbox.addEventListener("keydown",function(e){g.default.match(e,"enter")?(t.save(),e.preventDefault()):g.default.match(e,"escape")&&(t.cancel(),e.preventDefault())})}},{key:"cancel",value:function(){this.hide()}},{key:"edit",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"link",e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;this.root.classList.remove("ql-hidden"),this.root.classList.add("ql-editing"),null!=e?this.textbox.value=e:t!==this.root.getAttribute("data-mode")&&(this.textbox.value=""),this.position(this.quill.getBounds(this.quill.selection.savedRange)),this.textbox.select(),this.textbox.setAttribute("placeholder",this.textbox.getAttribute("data-"+t)||""),this.root.setAttribute("data-mode",t)}},{key:"restoreFocus",value:function(){var t=this.quill.scrollingContainer.scrollTop;this.quill.focus(),this.quill.scrollingContainer.scrollTop=t}},{key:"save",value:function(){var t=this.textbox.value;switch(this.root.getAttribute("data-mode")){case"link":var e=this.quill.root.scrollTop;this.linkRange?(this.quill.formatText(this.linkRange,"link",t,v.default.sources.USER),delete this.linkRange):(this.restoreFocus(),this.quill.format("link",t,v.default.sources.USER)),this.quill.root.scrollTop=e;break;case"video":t=a(t);case"formula":if(!t)break;var n=this.quill.getSelection(!0);if(null!=n){var r=n.index+n.length;this.quill.insertEmbed(r,this.root.getAttribute("data-mode"),t,v.default.sources.USER),"formula"===this.root.getAttribute("data-mode")&&this.quill.insertText(r+1," ",v.default.sources.USER),this.quill.setSelection(r+2,v.default.sources.USER)}}this.textbox.value="",this.hide()}}]),e}(A.default);e.BaseTooltip=M,e.default=L},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var o=n(46),i=r(o),l=n(34),a=n(36),s=n(62),u=n(63),c=r(u),f=n(64),h=r(f),p=n(65),d=r(p),y=n(35),v=n(24),b=n(37),g=n(38),m=n(39),_=r(m),O=n(66),w=r(O),x=n(15),k=r(x),E=n(67),N=r(E),j=n(68),A=r(j),q=n(69),T=r(q),P=n(70),S=r(P),C=n(71),L=r(C),M=n(13),R=r(M),I=n(72),B=r(I),D=n(73),U=r(D),F=n(74),H=r(F),K=n(26),z=r(K),Z=n(16),V=r(Z),W=n(41),G=r(W),Y=n(42),X=r(Y),$=n(43),Q=r($),J=n(107),tt=r(J),et=n(108),nt=r(et);i.default.register({"attributors/attribute/direction":a.DirectionAttribute,"attributors/class/align":l.AlignClass,"attributors/class/background":y.BackgroundClass,"attributors/class/color":v.ColorClass,"attributors/class/direction":a.DirectionClass,"attributors/class/font":b.FontClass,"attributors/class/size":g.SizeClass,"attributors/style/align":l.AlignStyle,"attributors/style/background":y.BackgroundStyle,"attributors/style/color":v.ColorStyle,"attributors/style/direction":a.DirectionStyle,"attributors/style/font":b.FontStyle,"attributors/style/size":g.SizeStyle},!0),i.default.register({"formats/align":l.AlignClass,"formats/direction":a.DirectionClass,"formats/indent":s.IndentClass,"formats/background":y.BackgroundStyle,"formats/color":v.ColorStyle,"formats/font":b.FontClass,"formats/size":g.SizeClass,"formats/blockquote":c.default,"formats/code-block":R.default,"formats/header":h.default,"formats/list":d.default,"formats/bold":_.default,"formats/code":M.Code,"formats/italic":w.default,"formats/link":k.default,"formats/script":N.default,"formats/strike":A.default,"formats/underline":T.default,"formats/image":S.default,"formats/video":L.default,"formats/list/item":p.ListItem,"modules/formula":B.default,"modules/syntax":U.default,"modules/toolbar":H.default,"themes/bubble":tt.default,"themes/snow":nt.default,"ui/icons":z.default,"ui/picker":V.default,"ui/icon-picker":X.default,"ui/color-picker":G.default,"ui/tooltip":Q.default},!0),e.default=i.default},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var o=n(0),i=r(o),l=n(6),a=r(l),s=n(3),u=r(s),c=n(14),f=r(c),h=n(23),p=r(h),d=n(31),y=r(d),v=n(33),b=r(v),g=n(5),m=r(g),_=n(59),O=r(_),w=n(8),x=r(w),k=n(60),E=r(k),N=n(61),j=r(N),A=n(25),q=r(A);a.default.register({"blots/block":u.default,"blots/block/embed":s.BlockEmbed,"blots/break":f.default,"blots/container":p.default,"blots/cursor":y.default,"blots/embed":b.default,"blots/inline":m.default,"blots/scroll":O.default,"blots/text":x.default,"modules/clipboard":E.default,"modules/history":j.default,"modules/keyboard":q.default}),i.default.register(u.default,f.default,y.default,m.default,O.default,x.default),e.default=a.default},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=function(){function t(){this.head=this.tail=null,this.length=0}return t.prototype.append=function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];this.insertBefore(t[0],null),t.length>1&&this.append.apply(this,t.slice(1))},t.prototype.contains=function(t){for(var e,n=this.iterator();e=n();)if(e===t)return!0;return!1},t.prototype.insertBefore=function(t,e){t&&(t.next=e,null!=e?(t.prev=e.prev,null!=e.prev&&(e.prev.next=t),e.prev=t,e===this.head&&(this.head=t)):null!=this.tail?(this.tail.next=t,t.prev=this.tail,this.tail=t):(t.prev=null,this.head=this.tail=t),this.length+=1)},t.prototype.offset=function(t){for(var e=0,n=this.head;null!=n;){if(n===t)return e;e+=n.length(),n=n.next}return-1},t.prototype.remove=function(t){this.contains(t)&&(null!=t.prev&&(t.prev.next=t.next),null!=t.next&&(t.next.prev=t.prev),t===this.head&&(this.head=t.next),t===this.tail&&(this.tail=t.prev),this.length-=1)},t.prototype.iterator=function(t){return void 0===t&&(t=this.head),function(){var e=t;return null!=t&&(t=t.next),e}},t.prototype.find=function(t,e){void 0===e&&(e=!1);for(var n,r=this.iterator();n=r();){var o=n.length();if(t<o||e&&t===o&&(null==n.next||0!==n.next.length()))return[n,t];t-=o}return[null,0]},t.prototype.forEach=function(t){for(var e,n=this.iterator();e=n();)t(e)},t.prototype.forEachAt=function(t,e,n){if(!(e<=0))for(var r,o=this.find(t),i=o[0],l=o[1],a=t-l,s=this.iterator(i);(r=s())&&a<t+e;){var u=r.length();t>a?n(r,t-a,Math.min(e,a+u-t)):n(r,0,Math.min(u,t+e-a)),a+=u}},t.prototype.map=function(t){return this.reduce(function(e,n){return e.push(t(n)),e},[])},t.prototype.reduce=function(t,e){for(var n,r=this.iterator();n=r();)e=t(e,n);return e},t}();e.default=r},function(t,e,n){"use strict";var r=this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}();Object.defineProperty(e,"__esModule",{value:!0});var o=n(17),i=n(1),l={attributes:!0,characterData:!0,characterDataOldValue:!0,childList:!0,subtree:!0},a=function(t){function e(e){var n=t.call(this,e)||this;return n.scroll=n,n.observer=new MutationObserver(function(t){n.update(t)}),n.observer.observe(n.domNode,l),n.attach(),n}return r(e,t),e.prototype.detach=function(){t.prototype.detach.call(this),this.observer.disconnect()},e.prototype.deleteAt=function(e,n){this.update(),0===e&&n===this.length()?this.children.forEach(function(t){t.remove()}):t.prototype.deleteAt.call(this,e,n)},e.prototype.formatAt=function(e,n,r,o){this.update(),t.prototype.formatAt.call(this,e,n,r,o)},e.prototype.insertAt=function(e,n,r){this.update(),t.prototype.insertAt.call(this,e,n,r)},e.prototype.optimize=function(e,n){var r=this;void 0===e&&(e=[]),void 0===n&&(n={}),t.prototype.optimize.call(this,n);for(var l=[].slice.call(this.observer.takeRecords());l.length>0;)e.push(l.pop());for(var a=function(t,e){void 0===e&&(e=!0),null!=t&&t!==r&&null!=t.domNode.parentNode&&(null==t.domNode[i.DATA_KEY].mutations&&(t.domNode[i.DATA_KEY].mutations=[]),e&&a(t.parent))},s=function(t){null!=t.domNode[i.DATA_KEY]&&null!=t.domNode[i.DATA_KEY].mutations&&(t instanceof o.default&&t.children.forEach(s),t.optimize(n))},u=e,c=0;u.length>0;c+=1){if(c>=100)throw new Error("[Parchment] Maximum optimize iterations reached");for(u.forEach(function(t){var e=i.find(t.target,!0);null!=e&&(e.domNode===t.target&&("childList"===t.type?(a(i.find(t.previousSibling,!1)),[].forEach.call(t.addedNodes,function(t){var e=i.find(t,!1);a(e,!1),e instanceof o.default&&e.children.forEach(function(t){a(t,!1)})})):"attributes"===t.type&&a(e.prev)),a(e))}),this.children.forEach(s),u=[].slice.call(this.observer.takeRecords()),l=u.slice();l.length>0;)e.push(l.pop())}},e.prototype.update=function(e,n){var r=this;void 0===n&&(n={}),e=e||this.observer.takeRecords(),e.map(function(t){var e=i.find(t.target,!0);return null==e?null:null==e.domNode[i.DATA_KEY].mutations?(e.domNode[i.DATA_KEY].mutations=[t],e):(e.domNode[i.DATA_KEY].mutations.push(t),null)}).forEach(function(t){null!=t&&t!==r&&null!=t.domNode[i.DATA_KEY]&&t.update(t.domNode[i.DATA_KEY].mutations||[],n)}),null!=this.domNode[i.DATA_KEY].mutations&&t.prototype.update.call(this,this.domNode[i.DATA_KEY].mutations,n),this.optimize(e,n)},e.blotName="scroll",e.defaultChild="block",e.scope=i.Scope.BLOCK_BLOT,e.tagName="DIV",e}(o.default);e.default=a},function(t,e,n){"use strict";function r(t,e){if(Object.keys(t).length!==Object.keys(e).length)return!1;for(var n in t)if(t[n]!==e[n])return!1;return!0}var o=this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}();Object.defineProperty(e,"__esModule",{value:!0});var i=n(18),l=n(1),a=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e.formats=function(n){if(n.tagName!==e.tagName)return t.formats.call(this,n)},e.prototype.format=function(n,r){var o=this;n!==this.statics.blotName||r?t.prototype.format.call(this,n,r):(this.children.forEach(function(t){t instanceof i.default||(t=t.wrap(e.blotName,!0)),o.attributes.copy(t)}),this.unwrap())},e.prototype.formatAt=function(e,n,r,o){if(null!=this.formats()[r]||l.query(r,l.Scope.ATTRIBUTE)){this.isolate(e,n).format(r,o)}else t.prototype.formatAt.call(this,e,n,r,o)},e.prototype.optimize=function(n){t.prototype.optimize.call(this,n);var o=this.formats();if(0===Object.keys(o).length)return this.unwrap();var i=this.next;i instanceof e&&i.prev===this&&r(o,i.formats())&&(i.moveChildren(this),i.remove())},e.blotName="inline",e.scope=l.Scope.INLINE_BLOT,e.tagName="SPAN",e}(i.default);e.default=a},function(t,e,n){"use strict";var r=this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}();Object.defineProperty(e,"__esModule",{value:!0});var o=n(18),i=n(1),l=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return r(e,t),e.formats=function(n){var r=i.query(e.blotName).tagName;if(n.tagName!==r)return t.formats.call(this,n)},e.prototype.format=function(n,r){null!=i.query(n,i.Scope.BLOCK)&&(n!==this.statics.blotName||r?t.prototype.format.call(this,n,r):this.replaceWith(e.blotName))},e.prototype.formatAt=function(e,n,r,o){null!=i.query(r,i.Scope.BLOCK)?this.format(r,o):t.prototype.formatAt.call(this,e,n,r,o)},e.prototype.insertAt=function(e,n,r){if(null==r||null!=i.query(n,i.Scope.INLINE))t.prototype.insertAt.call(this,e,n,r);else{var o=this.split(e),l=i.create(n,r);o.parent.insertBefore(l,o)}},e.prototype.update=function(e,n){navigator.userAgent.match(/Trident/)?this.build():t.prototype.update.call(this,e,n)},e.blotName="block",e.scope=i.Scope.BLOCK_BLOT,e.tagName="P",e}(o.default);e.default=l},function(t,e,n){"use strict";var r=this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}();Object.defineProperty(e,"__esModule",{value:!0});var o=n(19),i=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return r(e,t),e.formats=function(t){},e.prototype.format=function(e,n){t.prototype.formatAt.call(this,0,this.length(),e,n)},e.prototype.formatAt=function(e,n,r,o){0===e&&n===this.length()?this.format(r,o):t.prototype.formatAt.call(this,e,n,r,o)},e.prototype.formats=function(){return this.statics.formats(this.domNode)},e}(o.default);e.default=i},function(t,e,n){"use strict";var r=this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}();Object.defineProperty(e,"__esModule",{value:!0});var o=n(19),i=n(1),l=function(t){function e(e){var n=t.call(this,e)||this;return n.text=n.statics.value(n.domNode),n}return r(e,t),e.create=function(t){return document.createTextNode(t)},e.value=function(t){var e=t.data;return e.normalize&&(e=e.normalize()),e},e.prototype.deleteAt=function(t,e){this.domNode.data=this.text=this.text.slice(0,t)+this.text.slice(t+e)},e.prototype.index=function(t,e){return this.domNode===t?e:-1},e.prototype.insertAt=function(e,n,r){null==r?(this.text=this.text.slice(0,e)+n+this.text.slice(e),this.domNode.data=this.text):t.prototype.insertAt.call(this,e,n,r)},e.prototype.length=function(){return this.text.length},e.prototype.optimize=function(n){t.prototype.optimize.call(this,n),this.text=this.statics.value(this.domNode),0===this.text.length?this.remove():this.next instanceof e&&this.next.prev===this&&(this.insertAt(this.length(),this.next.value()),this.next.remove())},e.prototype.position=function(t,e){return void 0===e&&(e=!1),[this.domNode,t]},e.prototype.split=function(t,e){if(void 0===e&&(e=!1),!e){if(0===t)return this;if(t===this.length())return this.next}var n=i.create(this.domNode.splitText(t));return this.parent.insertBefore(n,this.next),this.text=this.statics.value(this.domNode),n},e.prototype.update=function(t,e){var n=this;t.some(function(t){return"characterData"===t.type&&t.target===n.domNode})&&(this.text=this.statics.value(this.domNode))},e.prototype.value=function(){return this.text},e.blotName="text",e.scope=i.Scope.INLINE_BLOT,e}(o.default);e.default=l},function(t,e,n){"use strict";var r=document.createElement("div");if(r.classList.toggle("test-class",!1),r.classList.contains("test-class")){var o=DOMTokenList.prototype.toggle;DOMTokenList.prototype.toggle=function(t,e){return arguments.length>1&&!this.contains(t)==!e?e:o.call(this,t)}}String.prototype.startsWith||(String.prototype.startsWith=function(t,e){return e=e||0,this.substr(e,t.length)===t}),String.prototype.endsWith||(String.prototype.endsWith=function(t,e){var n=this.toString();("number"!=typeof e||!isFinite(e)||Math.floor(e)!==e||e>n.length)&&(e=n.length),e-=t.length;var r=n.indexOf(t,e);return-1!==r&&r===e}),Array.prototype.find||Object.defineProperty(Array.prototype,"find",{value:function(t){if(null===this)throw new TypeError("Array.prototype.find called on null or undefined");if("function"!=typeof t)throw new TypeError("predicate must be a function");for(var e,n=Object(this),r=n.length>>>0,o=arguments[1],i=0;i<r;i++)if(e=n[i],t.call(o,e,i,n))return e}}),document.addEventListener("DOMContentLoaded",function(){document.execCommand("enableObjectResizing",!1,!1),document.execCommand("autoUrlDetect",!1,!1)})},function(t,e){function n(t,e,n){if(t==e)return t?[[v,t]]:[];(n<0||t.length<n)&&(n=null);var o=l(t,e),i=t.substring(0,o);t=t.substring(o),e=e.substring(o),o=a(t,e);var s=t.substring(t.length-o);t=t.substring(0,t.length-o),e=e.substring(0,e.length-o);var c=r(t,e);return i&&c.unshift([v,i]),s&&c.push([v,s]),u(c),null!=n&&(c=f(c,n)),c=h(c)}function r(t,e){var r;if(!t)return[[y,e]];if(!e)return[[d,t]];var i=t.length>e.length?t:e,l=t.length>e.length?e:t,a=i.indexOf(l);if(-1!=a)return r=[[y,i.substring(0,a)],[v,l],[y,i.substring(a+l.length)]],t.length>e.length&&(r[0][0]=r[2][0]=d),r;if(1==l.length)return[[d,t],[y,e]];var u=s(t,e);if(u){var c=u[0],f=u[1],h=u[2],p=u[3],b=u[4],g=n(c,h),m=n(f,p);return g.concat([[v,b]],m)}return o(t,e)}function o(t,e){for(var n=t.length,r=e.length,o=Math.ceil((n+r)/2),l=o,a=2*o,s=new Array(a),u=new Array(a),c=0;c<a;c++)s[c]=-1,u[c]=-1;s[l+1]=0,u[l+1]=0;for(var f=n-r,h=f%2!=0,p=0,v=0,b=0,g=0,m=0;m<o;m++){for(var _=-m+p;_<=m-v;_+=2){var O,w=l+_;O=_==-m||_!=m&&s[w-1]<s[w+1]?s[w+1]:s[w-1]+1;for(var x=O-_;O<n&&x<r&&t.charAt(O)==e.charAt(x);)O++,x++;if(s[w]=O,O>n)v+=2;else if(x>r)p+=2;else if(h){var k=l+f-_;if(k>=0&&k<a&&-1!=u[k]){var E=n-u[k];if(O>=E)return i(t,e,O,x)}}}for(var N=-m+b;N<=m-g;N+=2){var E,k=l+N;E=N==-m||N!=m&&u[k-1]<u[k+1]?u[k+1]:u[k-1]+1;for(var j=E-N;E<n&&j<r&&t.charAt(n-E-1)==e.charAt(r-j-1);)E++,j++;if(u[k]=E,E>n)g+=2;else if(j>r)b+=2;else if(!h){var w=l+f-N;if(w>=0&&w<a&&-1!=s[w]){var O=s[w],x=l+O-w;if(E=n-E,O>=E)return i(t,e,O,x)}}}}return[[d,t],[y,e]]}function i(t,e,r,o){var i=t.substring(0,r),l=e.substring(0,o),a=t.substring(r),s=e.substring(o),u=n(i,l),c=n(a,s);return u.concat(c)}function l(t,e){if(!t||!e||t.charAt(0)!=e.charAt(0))return 0;for(var n=0,r=Math.min(t.length,e.length),o=r,i=0;n<o;)t.substring(i,o)==e.substring(i,o)?(n=o,i=n):r=o,o=Math.floor((r-n)/2+n);return o}function a(t,e){if(!t||!e||t.charAt(t.length-1)!=e.charAt(e.length-1))return 0;for(var n=0,r=Math.min(t.length,e.length),o=r,i=0;n<o;)t.substring(t.length-o,t.length-i)==e.substring(e.length-o,e.length-i)?(n=o,i=n):r=o,o=Math.floor((r-n)/2+n);return o}function s(t,e){function n(t,e,n){for(var r,o,i,s,u=t.substring(n,n+Math.floor(t.length/4)),c=-1,f="";-1!=(c=e.indexOf(u,c+1));){var h=l(t.substring(n),e.substring(c)),p=a(t.substring(0,n),e.substring(0,c));f.length<p+h&&(f=e.substring(c-p,c)+e.substring(c,c+h),r=t.substring(0,n-p),o=t.substring(n+h),i=e.substring(0,c-p),s=e.substring(c+h))}return 2*f.length>=t.length?[r,o,i,s,f]:null}var r=t.length>e.length?t:e,o=t.length>e.length?e:t;if(r.length<4||2*o.length<r.length)return null;var i,s=n(r,o,Math.ceil(r.length/4)),u=n(r,o,Math.ceil(r.length/2));if(!s&&!u)return null;i=u?s&&s[4].length>u[4].length?s:u:s;var c,f,h,p;return t.length>e.length?(c=i[0],f=i[1],h=i[2],p=i[3]):(h=i[0],p=i[1],c=i[2],f=i[3]),[c,f,h,p,i[4]]}function u(t){t.push([v,""]);for(var e,n=0,r=0,o=0,i="",s="";n<t.length;)switch(t[n][0]){case y:o++,s+=t[n][1],n++;break;case d:r++,i+=t[n][1],n++;break;case v:r+o>1?(0!==r&&0!==o&&(e=l(s,i),0!==e&&(n-r-o>0&&t[n-r-o-1][0]==v?t[n-r-o-1][1]+=s.substring(0,e):(t.splice(0,0,[v,s.substring(0,e)]),n++),s=s.substring(e),i=i.substring(e)),0!==(e=a(s,i))&&(t[n][1]=s.substring(s.length-e)+t[n][1],s=s.substring(0,s.length-e),i=i.substring(0,i.length-e))),0===r?t.splice(n-o,r+o,[y,s]):0===o?t.splice(n-r,r+o,[d,i]):t.splice(n-r-o,r+o,[d,i],[y,s]),n=n-r-o+(r?1:0)+(o?1:0)+1):0!==n&&t[n-1][0]==v?(t[n-1][1]+=t[n][1],t.splice(n,1)):n++,o=0,r=0,i="",s=""}""===t[t.length-1][1]&&t.pop();var c=!1;for(n=1;n<t.length-1;)t[n-1][0]==v&&t[n+1][0]==v&&(t[n][1].substring(t[n][1].length-t[n-1][1].length)==t[n-1][1]?(t[n][1]=t[n-1][1]+t[n][1].substring(0,t[n][1].length-t[n-1][1].length),t[n+1][1]=t[n-1][1]+t[n+1][1],t.splice(n-1,1),c=!0):t[n][1].substring(0,t[n+1][1].length)==t[n+1][1]&&(t[n-1][1]+=t[n+1][1],t[n][1]=t[n][1].substring(t[n+1][1].length)+t[n+1][1],t.splice(n+1,1),c=!0)),n++;c&&u(t)}function c(t,e){if(0===e)return[v,t];for(var n=0,r=0;r<t.length;r++){var o=t[r];if(o[0]===d||o[0]===v){var i=n+o[1].length;if(e===i)return[r+1,t];if(e<i){t=t.slice();var l=e-n,a=[o[0],o[1].slice(0,l)],s=[o[0],o[1].slice(l)];return t.splice(r,1,a,s),[r+1,t]}n=i}}throw new Error("cursor_pos is out of bounds!")}function f(t,e){var n=c(t,e),r=n[1],o=n[0],i=r[o],l=r[o+1];if(null==i)return t;if(i[0]!==v)return t;if(null!=l&&i[1]+l[1]===l[1]+i[1])return r.splice(o,2,l,i),p(r,o,2);if(null!=l&&0===l[1].indexOf(i[1])){r.splice(o,2,[l[0],i[1]],[0,i[1]]);var a=l[1].slice(i[1].length);return a.length>0&&r.splice(o+2,0,[l[0],a]),p(r,o,3)}return t}function h(t){for(var e=!1,n=function(t){return t.charCodeAt(0)>=56320&&t.charCodeAt(0)<=57343},r=2;r<t.length;r+=1)t[r-2][0]===v&&function(t){return t.charCodeAt(t.length-1)>=55296&&t.charCodeAt(t.length-1)<=56319}(t[r-2][1])&&t[r-1][0]===d&&n(t[r-1][1])&&t[r][0]===y&&n(t[r][1])&&(e=!0,t[r-1][1]=t[r-2][1].slice(-1)+t[r-1][1],t[r][1]=t[r-2][1].slice(-1)+t[r][1],t[r-2][1]=t[r-2][1].slice(0,-1));if(!e)return t;for(var o=[],r=0;r<t.length;r+=1)t[r][1].length>0&&o.push(t[r]);return o}function p(t,e,n){for(var r=e+n-1;r>=0&&r>=e-1;r--)if(r+1<t.length){var o=t[r],i=t[r+1];o[0]===i[1]&&t.splice(r,2,[o[0],o[1]+i[1]])}return t}var d=-1,y=1,v=0,b=n;b.INSERT=y,b.DELETE=d,b.EQUAL=v,t.exports=b},function(t,e){function n(t){var e=[];for(var n in t)e.push(n);return e}e=t.exports="function"==typeof Object.keys?Object.keys:n,e.shim=n},function(t,e){function n(t){return"[object Arguments]"==Object.prototype.toString.call(t)}function r(t){return t&&"object"==typeof t&&"number"==typeof t.length&&Object.prototype.hasOwnProperty.call(t,"callee")&&!Object.prototype.propertyIsEnumerable.call(t,"callee")||!1}var o="[object Arguments]"==function(){return Object.prototype.toString.call(arguments)}();e=t.exports=o?n:r,e.supported=n,e.unsupported=r},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function o(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function i(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function l(t,e){return Object.keys(e).reduce(function(n,r){return null==t[r]?n:(e[r]===t[r]?n[r]=e[r]:Array.isArray(e[r])?e[r].indexOf(t[r])<0&&(n[r]=e[r].concat([t[r]])):n[r]=[e[r],t[r]],n)},{})}function a(t){return t.reduce(function(t,e){if(1===e.insert){var n=(0,N.default)(e.attributes);return delete n.image,t.insert({image:e.attributes.image},n)}if(null==e.attributes||!0!==e.attributes.list&&!0!==e.attributes.bullet||(e=(0,N.default)(e),e.attributes.list?e.attributes.list="ordered":(e.attributes.list="bullet",delete e.attributes.bullet)),"string"==typeof e.insert){var r=e.insert.replace(/\r\n/g,"\n").replace(/\r/g,"\n");return t.insert(r,e.attributes)}return t.push(e)},new h.default)}Object.defineProperty(e,"__esModule",{value:!0});var s="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},u=function(){function t(t,e){var n=[],r=!0,o=!1,i=void 0;try{for(var l,a=t[Symbol.iterator]();!(r=(l=a.next()).done)&&(n.push(l.value),!e||n.length!==e);r=!0);}catch(t){o=!0,i=t}finally{try{!r&&a.return&&a.return()}finally{if(o)throw i}}return n}return function(e,n){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return t(e,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),c=function(){function t(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,n,r){return n&&t(e.prototype,n),r&&t(e,r),e}}(),f=n(4),h=r(f),p=n(20),d=r(p),y=n(0),v=r(y),b=n(13),g=r(b),m=n(31),_=r(m),O=n(3),w=r(O),x=n(14),k=r(x),E=n(21),N=r(E),j=n(12),A=r(j),q=n(2),T=r(q),P=/^[ -~]*$/,S=function(){function t(e){i(this,t),this.scroll=e,this.delta=this.getDelta()}return c(t,[{key:"applyDelta",value:function(t){var e=this,n=!1;this.scroll.update();var r=this.scroll.length();return this.scroll.batchStart(),t=a(t),t.reduce(function(t,o){var i=o.retain||o.delete||o.insert.length||1,l=o.attributes||{};if(null!=o.insert){if("string"==typeof o.insert){var a=o.insert;a.endsWith("\n")&&n&&(n=!1,a=a.slice(0,-1)),t>=r&&!a.endsWith("\n")&&(n=!0),e.scroll.insertAt(t,a);var c=e.scroll.line(t),f=u(c,2),h=f[0],p=f[1],y=(0,T.default)({},(0,O.bubbleFormats)(h));if(h instanceof w.default){var b=h.descendant(v.default.Leaf,p),g=u(b,1),m=g[0];y=(0,T.default)(y,(0,O.bubbleFormats)(m))}l=d.default.attributes.diff(y,l)||{}}else if("object"===s(o.insert)){var _=Object.keys(o.insert)[0];if(null==_)return t;e.scroll.insertAt(t,_,o.insert[_])}r+=i}return Object.keys(l).forEach(function(n){e.scroll.formatAt(t,i,n,l[n])}),t+i},0),t.reduce(function(t,n){return"number"==typeof n.delete?(e.scroll.deleteAt(t,n.delete),t):t+(n.retain||n.insert.length||1)},0),this.scroll.batchEnd(),this.update(t)}},{key:"deleteText",value:function(t,e){return this.scroll.deleteAt(t,e),this.update((new h.default).retain(t).delete(e))}},{key:"formatLine",value:function(t,e){var n=this,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.scroll.update(),Object.keys(r).forEach(function(o){if(null==n.scroll.whitelist||n.scroll.whitelist[o]){var i=n.scroll.lines(t,Math.max(e,1)),l=e;i.forEach(function(e){var i=e.length();if(e instanceof g.default){var a=t-e.offset(n.scroll),s=e.newlineIndex(a+l)-a+1;e.formatAt(a,s,o,r[o])}else e.format(o,r[o]);l-=i})}}),this.scroll.optimize(),this.update((new h.default).retain(t).retain(e,(0,N.default)(r)))}},{key:"formatText",value:function(t,e){var n=this,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return Object.keys(r).forEach(function(o){n.scroll.formatAt(t,e,o,r[o])}),this.update((new h.default).retain(t).retain(e,(0,N.default)(r)))}},{key:"getContents",value:function(t,e){return this.delta.slice(t,t+e)}},{key:"getDelta",value:function(){return this.scroll.lines().reduce(function(t,e){return t.concat(e.delta())},new h.default)}},{key:"getFormat",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=[],r=[];0===e?this.scroll.path(t).forEach(function(t){var e=u(t,1),o=e[0];o instanceof w.default?n.push(o):o instanceof v.default.Leaf&&r.push(o)}):(n=this.scroll.lines(t,e),r=this.scroll.descendants(v.default.Leaf,t,e));var o=[n,r].map(function(t){if(0===t.length)return{};for(var e=(0,O.bubbleFormats)(t.shift());Object.keys(e).length>0;){var n=t.shift();if(null==n)return e;e=l((0,O.bubbleFormats)(n),e)}return e});return T.default.apply(T.default,o)}},{key:"getText",value:function(t,e){return this.getContents(t,e).filter(function(t){return"string"==typeof t.insert}).map(function(t){return t.insert}).join("")}},{key:"insertEmbed",value:function(t,e,n){return this.scroll.insertAt(t,e,n),this.update((new h.default).retain(t).insert(o({},e,n)))}},{key:"insertText",value:function(t,e){var n=this,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return e=e.replace(/\r\n/g,"\n").replace(/\r/g,"\n"),this.scroll.insertAt(t,e),Object.keys(r).forEach(function(o){n.scroll.formatAt(t,e.length,o,r[o])}),this.update((new h.default).retain(t).insert(e,(0,N.default)(r)))}},{key:"isBlank",value:function(){if(0==this.scroll.children.length)return!0;if(this.scroll.children.length>1)return!1;var t=this.scroll.children.head;return t.statics.blotName===w.default.blotName&&(!(t.children.length>1)&&t.children.head instanceof k.default)}},{key:"removeFormat",value:function(t,e){var n=this.getText(t,e),r=this.scroll.line(t+e),o=u(r,2),i=o[0],l=o[1],a=0,s=new h.default;null!=i&&(a=i instanceof g.default?i.newlineIndex(l)-l+1:i.length()-l,s=i.delta().slice(l,l+a-1).insert("\n"));var c=this.getContents(t,e+a),f=c.diff((new h.default).insert(n).concat(s)),p=(new h.default).retain(t).concat(f);return this.applyDelta(p)}},{key:"update",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0,r=this.delta;if(1===e.length&&"characterData"===e[0].type&&e[0].target.data.match(P)&&v.default.find(e[0].target)){var o=v.default.find(e[0].target),i=(0,O.bubbleFormats)(o),l=o.offset(this.scroll),a=e[0].oldValue.replace(_.default.CONTENTS,""),s=(new h.default).insert(a),u=(new h.default).insert(o.value());t=(new h.default).retain(l).concat(s.diff(u,n)).reduce(function(t,e){return e.insert?t.insert(e.insert,i):t.push(e)},new h.default),this.delta=r.compose(t)}else this.delta=this.getDelta(),t&&(0,A.default)(r.compose(t),this.delta)||(t=r.diff(this.delta,n));return t}}]),t}();e.default=S},function(t,e){"use strict";function n(){}function r(t,e,n){this.fn=t,this.context=e,this.once=n||!1}function o(){this._events=new n,this._eventsCount=0}var i=Object.prototype.hasOwnProperty,l="~";Object.create&&(n.prototype=Object.create(null),(new n).__proto__||(l=!1)),o.prototype.eventNames=function(){var t,e,n=[];if(0===this._eventsCount)return n;for(e in t=this._events)i.call(t,e)&&n.push(l?e.slice(1):e);return Object.getOwnPropertySymbols?n.concat(Object.getOwnPropertySymbols(t)):n},o.prototype.listeners=function(t,e){var n=l?l+t:t,r=this._events[n];if(e)return!!r;if(!r)return[];if(r.fn)return[r.fn];for(var o=0,i=r.length,a=new Array(i);o<i;o++)a[o]=r[o].fn;return a},o.prototype.emit=function(t,e,n,r,o,i){var a=l?l+t:t;if(!this._events[a])return!1;var s,u,c=this._events[a],f=arguments.length;if(c.fn){switch(c.once&&this.removeListener(t,c.fn,void 0,!0),f){case 1:return c.fn.call(c.context),!0;case 2:return c.fn.call(c.context,e),!0;case 3:return c.fn.call(c.context,e,n),!0;case 4:return c.fn.call(c.context,e,n,r),!0;case 5:return c.fn.call(c.context,e,n,r,o),!0;case 6:return c.fn.call(c.context,e,n,r,o,i),!0}for(u=1,s=new Array(f-1);u<f;u++)s[u-1]=arguments[u];c.fn.apply(c.context,s)}else{var h,p=c.length;for(u=0;u<p;u++)switch(c[u].once&&this.removeListener(t,c[u].fn,void 0,!0),f){case 1:c[u].fn.call(c[u].context);break;case 2:c[u].fn.call(c[u].context,e);break;case 3:c[u].fn.call(c[u].context,e,n);break;case 4:c[u].fn.call(c[u].context,e,n,r);break;default:if(!s)for(h=1,s=new Array(f-1);h<f;h++)s[h-1]=arguments[h];c[u].fn.apply(c[u].context,s)}}return!0},o.prototype.on=function(t,e,n){var o=new r(e,n||this),i=l?l+t:t;return this._events[i]?this._events[i].fn?this._events[i]=[this._events[i],o]:this._events[i].push(o):(this._events[i]=o,this._eventsCount++),this},o.prototype.once=function(t,e,n){var o=new r(e,n||this,!0),i=l?l+t:t;return this._events[i]?this._events[i].fn?this._events[i]=[this._events[i],o]:this._events[i].push(o):(this._events[i]=o,this._eventsCount++),this},o.prototype.removeListener=function(t,e,r,o){var i=l?l+t:t;if(!this._events[i])return this;if(!e)return 0==--this._eventsCount?this._events=new n:delete this._events[i],this;var a=this._events[i];if(a.fn)a.fn!==e||o&&!a.once||r&&a.context!==r||(0==--this._eventsCount?this._events=new n:delete this._events[i]);else{for(var s=0,u=[],c=a.length;s<c;s++)(a[s].fn!==e||o&&!a[s].once||r&&a[s].context!==r)&&u.push(a[s]);u.length?this._events[i]=1===u.length?u[0]:u:0==--this._eventsCount?this._events=new n:delete this._events[i]}return this},o.prototype.removeAllListeners=function(t){var e;return t?(e=l?l+t:t,this._events[e]&&(0==--this._eventsCount?this._events=new n:delete this._events[e])):(this._events=new n,this._eventsCount=0),this},o.prototype.off=o.prototype.removeListener,o.prototype.addListener=o.prototype.on,o.prototype.setMaxListeners=function(){return this},o.prefixed=l,o.EventEmitter=o,void 0!==t&&(t.exports=o)},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function i(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function l(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}function a(t){return t instanceof v.default||t instanceof y.BlockEmbed}Object.defineProperty(e,"__esModule",{value:!0});var s=function(){function t(t,e){var n=[],r=!0,o=!1,i=void 0;try{for(var l,a=t[Symbol.iterator]();!(r=(l=a.next()).done)&&(n.push(l.value),!e||n.length!==e);r=!0);}catch(t){o=!0,i=t}finally{try{!r&&a.return&&a.return()}finally{if(o)throw i}}return n}return function(e,n){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return t(e,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),u=function(){function t(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,n,r){return n&&t(e.prototype,n),r&&t(e,r),e}}(),c=function t(e,n,r){null===e&&(e=Function.prototype);var o=Object.getOwnPropertyDescriptor(e,n);if(void 0===o){var i=Object.getPrototypeOf(e);return null===i?void 0:t(i,n,r)}if("value"in o)return o.value;var l=o.get;if(void 0!==l)return l.call(r)},f=n(0),h=r(f),p=n(9),d=r(p),y=n(3),v=r(y),b=n(14),g=r(b),m=n(13),_=r(m),O=n(23),w=r(O),x=function(t){function e(t,n){o(this,e);var r=i(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t));return r.emitter=n.emitter,Array.isArray(n.whitelist)&&(r.whitelist=n.whitelist.reduce(function(t,e){return t[e]=!0,t},{})),r.domNode.addEventListener("DOMNodeInserted",function(){}),r.optimize(),r.enable(),r}return l(e,t),u(e,[{key:"batchStart",value:function(){this.batch=!0}},{key:"batchEnd",value:function(){this.batch=!1,this.optimize()}},{key:"deleteAt",value:function(t,n){var r=this.line(t),o=s(r,2),i=o[0],l=o[1],a=this.line(t+n),u=s(a,1),f=u[0];if(c(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"deleteAt",this).call(this,t,n),null!=f&&i!==f&&l>0){if(i instanceof y.BlockEmbed||f instanceof y.BlockEmbed)return void this.optimize();if(i instanceof _.default){var h=i.newlineIndex(i.length(),!0);if(h>-1&&(i=i.split(h+1))===f)return void this.optimize()}else if(f instanceof _.default){var p=f.newlineIndex(0);p>-1&&f.split(p+1)}var d=f.children.head instanceof g.default?null:f.children.head;i.moveChildren(f,d),i.remove()}this.optimize()}},{key:"enable",value:function(){var t=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];this.domNode.setAttribute("contenteditable",t)}},{key:"formatAt",value:function(t,n,r,o){(null==this.whitelist||this.whitelist[r])&&(c(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"formatAt",this).call(this,t,n,r,o),this.optimize())}},{key:"insertAt",value:function(t,n,r){if(null==r||null==this.whitelist||this.whitelist[n]){if(t>=this.length())if(null==r||null==h.default.query(n,h.default.Scope.BLOCK)){var o=h.default.create(this.statics.defaultChild);this.appendChild(o),null==r&&n.endsWith("\n")&&(n=n.slice(0,-1)),o.insertAt(0,n,r)}else{var i=h.default.create(n,r);this.appendChild(i)}else c(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"insertAt",this).call(this,t,n,r);this.optimize()}}},{key:"insertBefore",value:function(t,n){if(t.statics.scope===h.default.Scope.INLINE_BLOT){var r=h.default.create(this.statics.defaultChild);r.appendChild(t),t=r}c(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"insertBefore",this).call(this,t,n)}},{key:"leaf",value:function(t){return this.path(t).pop()||[null,-1]}},{key:"line",value:function(t){return t===this.length()?this.line(t-1):this.descendant(a,t)}},{key:"lines",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Number.MAX_VALUE;return function t(e,n,r){var o=[],i=r;return e.children.forEachAt(n,r,function(e,n,r){a(e)?o.push(e):e instanceof h.default.Container&&(o=o.concat(t(e,n,i))),i-=r}),o}(this,t,e)}},{key:"optimize",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};!0!==this.batch&&(c(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"optimize",this).call(this,t,n),t.length>0&&this.emitter.emit(d.default.events.SCROLL_OPTIMIZE,t,n))}},{key:"path",value:function(t){return c(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"path",this).call(this,t).slice(1)}},{key:"update",value:function(t){if(!0!==this.batch){var n=d.default.sources.USER;"string"==typeof t&&(n=t),Array.isArray(t)||(t=this.observer.takeRecords()),t.length>0&&this.emitter.emit(d.default.events.SCROLL_BEFORE_UPDATE,n,t),c(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"update",this).call(this,t.concat([])),t.length>0&&this.emitter.emit(d.default.events.SCROLL_UPDATE,n,t)}}}]),e}(h.default.Scroll);x.blotName="scroll",x.className="ql-editor",x.tagName="DIV",x.defaultChild="block",x.allowedChildren=[v.default,y.BlockEmbed,w.default],e.default=x},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function o(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function i(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function l(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function a(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}function s(t,e,n){return"object"===(void 0===e?"undefined":x(e))?Object.keys(e).reduce(function(t,n){return s(t,n,e[n])},t):t.reduce(function(t,r){return r.attributes&&r.attributes[e]?t.push(r):t.insert(r.insert,(0,j.default)({},o({},e,n),r.attributes))},new q.default)}function u(t){if(t.nodeType!==Node.ELEMENT_NODE)return{};return t["__ql-computed-style"]||(t["__ql-computed-style"]=window.getComputedStyle(t))}function c(t,e){for(var n="",r=t.ops.length-1;r>=0&&n.length<e.length;--r){var o=t.ops[r];if("string"!=typeof o.insert)break;n=o.insert+n}return n.slice(-1*e.length)===e}function f(t){return 0!==t.childNodes.length&&["block","list-item"].indexOf(u(t).display)>-1}function h(t,e,n){return t.nodeType===t.TEXT_NODE?n.reduce(function(e,n){return n(t,e)},new q.default):t.nodeType===t.ELEMENT_NODE?[].reduce.call(t.childNodes||[],function(r,o){var i=h(o,e,n);return o.nodeType===t.ELEMENT_NODE&&(i=e.reduce(function(t,e){return e(o,t)},i),i=(o[W]||[]).reduce(function(t,e){return e(o,t)},i)),r.concat(i)},new q.default):new q.default}function p(t,e,n){return s(n,t,!0)}function d(t,e){var n=P.default.Attributor.Attribute.keys(t),r=P.default.Attributor.Class.keys(t),o=P.default.Attributor.Style.keys(t),i={};return n.concat(r).concat(o).forEach(function(e){var n=P.default.query(e,P.default.Scope.ATTRIBUTE);null!=n&&(i[n.attrName]=n.value(t),i[n.attrName])||(n=Y[e],null==n||n.attrName!==e&&n.keyName!==e||(i[n.attrName]=n.value(t)||void 0),null==(n=X[e])||n.attrName!==e&&n.keyName!==e||(n=X[e],i[n.attrName]=n.value(t)||void 0))}),Object.keys(i).length>0&&(e=s(e,i)),e}function y(t,e){var n=P.default.query(t);if(null==n)return e;if(n.prototype instanceof P.default.Embed){var r={},o=n.value(t);null!=o&&(r[n.blotName]=o,e=(new q.default).insert(r,n.formats(t)))}else"function"==typeof n.formats&&(e=s(e,n.blotName,n.formats(t)));return e}function v(t,e){return c(e,"\n")||e.insert("\n"),e}function b(){return new q.default}function g(t,e){var n=P.default.query(t);if(null==n||"list-item"!==n.blotName||!c(e,"\n"))return e;for(var r=-1,o=t.parentNode;!o.classList.contains("ql-clipboard");)"list"===(P.default.query(o)||{}).blotName&&(r+=1),o=o.parentNode;return r<=0?e:e.compose((new q.default).retain(e.length()-1).retain(1,{indent:r}))}function m(t,e){return c(e,"\n")||(f(t)||e.length()>0&&t.nextSibling&&f(t.nextSibling))&&e.insert("\n"),e}function _(t,e){if(f(t)&&null!=t.nextElementSibling&&!c(e,"\n\n")){var n=t.offsetHeight+parseFloat(u(t).marginTop)+parseFloat(u(t).marginBottom);t.nextElementSibling.offsetTop>t.offsetTop+1.5*n&&e.insert("\n")}return e}function O(t,e){var n={},r=t.style||{};return r.fontStyle&&"italic"===u(t).fontStyle&&(n.italic=!0),r.fontWeight&&(u(t).fontWeight.startsWith("bold")||parseInt(u(t).fontWeight)>=700)&&(n.bold=!0),Object.keys(n).length>0&&(e=s(e,n)),parseFloat(r.textIndent||0)>0&&(e=(new q.default).insert("\t").concat(e)),e}function w(t,e){var n=t.data;if("O:P"===t.parentNode.tagName)return e.insert(n.trim());if(0===n.trim().length&&t.parentNode.classList.contains("ql-clipboard"))return e;if(!u(t.parentNode).whiteSpace.startsWith("pre")){var r=function(t,e){return e=e.replace(/[^\u00a0]/g,""),e.length<1&&t?" ":e};n=n.replace(/\r\n/g," ").replace(/\n/g," "),n=n.replace(/\s\s+/g,r.bind(r,!0)),(null==t.previousSibling&&f(t.parentNode)||null!=t.previousSibling&&f(t.previousSibling))&&(n=n.replace(/^\s+/,r.bind(r,!1))),(null==t.nextSibling&&f(t.parentNode)||null!=t.nextSibling&&f(t.nextSibling))&&(n=n.replace(/\s+$/,r.bind(r,!1)))}return e.insert(n)}Object.defineProperty(e,"__esModule",{value:!0}),e.matchText=e.matchSpacing=e.matchNewline=e.matchBlot=e.matchAttributor=e.default=void 0;var x="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},k=function(){function t(t,e){var n=[],r=!0,o=!1,i=void 0;try{for(var l,a=t[Symbol.iterator]();!(r=(l=a.next()).done)&&(n.push(l.value),!e||n.length!==e);r=!0);}catch(t){o=!0,i=t}finally{try{!r&&a.return&&a.return()}finally{if(o)throw i}}return n}return function(e,n){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return t(e,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),E=function(){function t(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,n,r){return n&&t(e.prototype,n),r&&t(e,r),e}}(),N=n(2),j=r(N),A=n(4),q=r(A),T=n(0),P=r(T),S=n(6),C=r(S),L=n(10),M=r(L),R=n(7),I=r(R),B=n(34),D=n(35),U=n(13),F=r(U),H=n(24),K=n(36),z=n(37),Z=n(38),V=(0,M.default)("quill:clipboard"),W="__ql-matcher",G=[[Node.TEXT_NODE,w],[Node.TEXT_NODE,m],["br",v],[Node.ELEMENT_NODE,m],[Node.ELEMENT_NODE,y],[Node.ELEMENT_NODE,_],[Node.ELEMENT_NODE,d],[Node.ELEMENT_NODE,O],["li",g],["b",p.bind(p,"bold")],["i",p.bind(p,"italic")],["style",b]],Y=[B.AlignAttribute,K.DirectionAttribute].reduce(function(t,e){return t[e.keyName]=e,t},{}),X=[B.AlignStyle,D.BackgroundStyle,H.ColorStyle,K.DirectionStyle,z.FontStyle,Z.SizeStyle].reduce(function(t,e){return t[e.keyName]=e,t},{}),$=function(t){function e(t,n){i(this,e);var r=l(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t,n));return r.quill.root.addEventListener("paste",r.onPaste.bind(r)),r.container=r.quill.addContainer("ql-clipboard"),r.container.setAttribute("contenteditable",!0),r.container.setAttribute("tabindex",-1),r.matchers=[],G.concat(r.options.matchers).forEach(function(t){var e=k(t,2),o=e[0],i=e[1];(n.matchVisual||i!==_)&&r.addMatcher(o,i)}),r}return a(e,t),E(e,[{key:"addMatcher",value:function(t,e){this.matchers.push([t,e])}},{key:"convert",value:function(t){if("string"==typeof t)return this.container.innerHTML=t.replace(/\>\r?\n +\</g,"><"),this.convert();var e=this.quill.getFormat(this.quill.selection.savedRange.index);if(e[F.default.blotName]){var n=this.container.innerText;return this.container.innerHTML="",(new q.default).insert(n,o({},F.default.blotName,e[F.default.blotName]))}var r=this.prepareMatching(),i=k(r,2),l=i[0],a=i[1],s=h(this.container,l,a);return c(s,"\n")&&null==s.ops[s.ops.length-1].attributes&&(s=s.compose((new q.default).retain(s.length()-1).delete(1))),V.log("convert",this.container.innerHTML,s),this.container.innerHTML="",s}},{key:"dangerouslyPasteHTML",value:function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:C.default.sources.API;if("string"==typeof t)this.quill.setContents(this.convert(t),e),this.quill.setSelection(0,C.default.sources.SILENT);else{var r=this.convert(e);this.quill.updateContents((new q.default).retain(t).concat(r),n),this.quill.setSelection(t+r.length(),C.default.sources.SILENT)}}},{key:"onPaste",value:function(t){var e=this;if(!t.defaultPrevented&&this.quill.isEnabled()){var n=this.quill.getSelection(),r=(new q.default).retain(n.index),o=this.quill.scrollingContainer.scrollTop;this.container.focus(),this.quill.selection.update(C.default.sources.SILENT),setTimeout(function(){r=r.concat(e.convert()).delete(n.length),e.quill.updateContents(r,C.default.sources.USER),e.quill.setSelection(r.length()-n.length,C.default.sources.SILENT),e.quill.scrollingContainer.scrollTop=o,e.quill.focus()},1)}}},{key:"prepareMatching",value:function(){var t=this,e=[],n=[];return this.matchers.forEach(function(r){var o=k(r,2),i=o[0],l=o[1];switch(i){case Node.TEXT_NODE:n.push(l);break;case Node.ELEMENT_NODE:e.push(l);break;default:[].forEach.call(t.container.querySelectorAll(i),function(t){t[W]=t[W]||[],t[W].push(l)})}}),[e,n]}}]),e}(I.default);$.DEFAULTS={matchers:[],matchVisual:!0},e.default=$,e.matchAttributor=d,e.matchBlot=y,e.matchNewline=m,e.matchSpacing=_,e.matchText=w},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function i(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function l(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}function a(t){var e=t.ops[t.ops.length-1];return null!=e&&(null!=e.insert?"string"==typeof e.insert&&e.insert.endsWith("\n"):null!=e.attributes&&Object.keys(e.attributes).some(function(t){return null!=f.default.query(t,f.default.Scope.BLOCK)}))}function s(t){var e=t.reduce(function(t,e){return t+=e.delete||0},0),n=t.length()-e;return a(t)&&(n-=1),n}Object.defineProperty(e,"__esModule",{value:!0}),e.getLastChangeIndex=e.default=void 0;var u=function(){function t(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,n,r){return n&&t(e.prototype,n),r&&t(e,r),e}}(),c=n(0),f=r(c),h=n(6),p=r(h),d=n(7),y=r(d),v=function(t){function e(t,n){o(this,e);var r=i(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t,n));return r.lastRecorded=0,r.ignoreChange=!1,r.clear(),r.quill.on(p.default.events.EDITOR_CHANGE,function(t,e,n,o){t!==p.default.events.TEXT_CHANGE||r.ignoreChange||(r.options.userOnly&&o!==p.default.sources.USER?r.transform(e):r.record(e,n))}),r.quill.keyboard.addBinding({key:"Z",shortKey:!0},r.undo.bind(r)),r.quill.keyboard.addBinding({key:"Z",shortKey:!0,shiftKey:!0},r.redo.bind(r)),/Win/i.test(navigator.platform)&&r.quill.keyboard.addBinding({key:"Y",shortKey:!0},r.redo.bind(r)),r}return l(e,t),u(e,[{key:"change",value:function(t,e){if(0!==this.stack[t].length){var n=this.stack[t].pop();this.stack[e].push(n),this.lastRecorded=0,this.ignoreChange=!0,this.quill.updateContents(n[t],p.default.sources.USER),this.ignoreChange=!1;var r=s(n[t]);this.quill.setSelection(r)}}},{key:"clear",value:function(){this.stack={undo:[],redo:[]}}},{key:"cutoff",value:function(){this.lastRecorded=0}},{key:"record",value:function(t,e){if(0!==t.ops.length){this.stack.redo=[];var n=this.quill.getContents().diff(e),r=Date.now();if(this.lastRecorded+this.options.delay>r&&this.stack.undo.length>0){var o=this.stack.undo.pop();n=n.compose(o.undo),t=o.redo.compose(t)}else this.lastRecorded=r;this.stack.undo.push({redo:t,undo:n}),this.stack.undo.length>this.options.maxStack&&this.stack.undo.shift()}}},{key:"redo",value:function(){this.change("redo","undo")}},{key:"transform",value:function(t){this.stack.undo.forEach(function(e){e.undo=t.transform(e.undo,!0),e.redo=t.transform(e.redo,!0)}),this.stack.redo.forEach(function(e){e.undo=t.transform(e.undo,!0),e.redo=t.transform(e.redo,!0)})}},{key:"undo",value:function(){this.change("undo","redo")}}]),e}(y.default);v.DEFAULTS={delay:1e3,maxStack:100,userOnly:!1},e.default=v,e.getLastChangeIndex=s},function(t,e,n){"use strict";function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function o(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function i(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0}),e.IndentClass=void 0;var l=function(){function t(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,n,r){return n&&t(e.prototype,n),r&&t(e,r),e}}(),a=function t(e,n,r){null===e&&(e=Function.prototype);var o=Object.getOwnPropertyDescriptor(e,n);if(void 0===o){var i=Object.getPrototypeOf(e);return null===i?void 0:t(i,n,r)}if("value"in o)return o.value;var l=o.get;if(void 0!==l)return l.call(r)},s=n(0),u=function(t){return t&&t.__esModule?t:{default:t}}(s),c=function(t){function e(){return r(this,e),o(this,(e.__proto__||Object.getPrototypeOf(e)).apply(this,arguments))}return i(e,t),l(e,[{key:"add",value:function(t,n){if("+1"===n||"-1"===n){var r=this.value(t)||0;n="+1"===n?r+1:r-1}return 0===n?(this.remove(t),!0):a(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"add",this).call(this,t,n)}},{key:"canAdd",value:function(t,n){return a(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"canAdd",this).call(this,t,n)||a(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"canAdd",this).call(this,t,parseInt(n))}},{key:"value",value:function(t){return parseInt(a(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"value",this).call(this,t))||void 0}}]),e}(u.default.Attributor.Class),f=new c("indent","ql-indent",{scope:u.default.Scope.BLOCK,whitelist:[1,2,3,4,5,6,7,8]});e.IndentClass=f},function(t,e,n){"use strict";function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function o(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function i(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0});var l=n(3),a=function(t){return t&&t.__esModule?t:{default:t}}(l),s=function(t){function e(){return r(this,e),o(this,(e.__proto__||Object.getPrototypeOf(e)).apply(this,arguments))}return i(e,t),e}(a.default);s.blotName="blockquote",s.tagName="blockquote",e.default=s},function(t,e,n){"use strict";function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function o(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function i(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0});var l=function(){function t(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,n,r){return n&&t(e.prototype,n),r&&t(e,r),e}}(),a=n(3),s=function(t){return t&&t.__esModule?t:{default:t}}(a),u=function(t){function e(){return r(this,e),o(this,(e.__proto__||Object.getPrototypeOf(e)).apply(this,arguments))}return i(e,t),l(e,null,[{key:"formats",value:function(t){return this.tagName.indexOf(t.tagName)+1}}]),e}(s.default);u.blotName="header",u.tagName=["H1","H2","H3","H4","H5","H6"],e.default=u},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function o(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function i(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function l(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function a(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.ListItem=void 0;var s=function(){function t(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,n,r){return n&&t(e.prototype,n),r&&t(e,r),e}}(),u=function t(e,n,r){null===e&&(e=Function.prototype);var o=Object.getOwnPropertyDescriptor(e,n);if(void 0===o){var i=Object.getPrototypeOf(e);return null===i?void 0:t(i,n,r)}if("value"in o)return o.value;var l=o.get;if(void 0!==l)return l.call(r)},c=n(0),f=r(c),h=n(3),p=r(h),d=n(23),y=r(d),v=function(t){function e(){return i(this,e),l(this,(e.__proto__||Object.getPrototypeOf(e)).apply(this,arguments))}return a(e,t),s(e,[{key:"format",value:function(t,n){t!==b.blotName||n?u(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"format",this).call(this,t,n):this.replaceWith(f.default.create(this.statics.scope))}},{key:"remove",value:function(){null==this.prev&&null==this.next?this.parent.remove():u(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"remove",this).call(this)}},{key:"replaceWith",value:function(t,n){return this.parent.isolate(this.offset(this.parent),this.length()),t===this.parent.statics.blotName?(this.parent.replaceWith(t,n),this):(this.parent.unwrap(),u(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"replaceWith",this).call(this,t,n))}}],[{key:"formats",value:function(t){return t.tagName===this.tagName?void 0:u(e.__proto__||Object.getPrototypeOf(e),"formats",this).call(this,t)}}]),e}(p.default);v.blotName="list-item",v.tagName="LI";var b=function(t){function e(t){i(this,e);var n=l(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t)),r=function(e){if(e.target.parentNode===t){var r=n.statics.formats(t),o=f.default.find(e.target);"checked"===r?o.format("list","unchecked"):"unchecked"===r&&o.format("list","checked")}};return t.addEventListener("touchstart",r),t.addEventListener("mousedown",r),n}return a(e,t),s(e,null,[{key:"create",value:function(t){var n="ordered"===t?"OL":"UL",r=u(e.__proto__||Object.getPrototypeOf(e),"create",this).call(this,n);return"checked"!==t&&"unchecked"!==t||r.setAttribute("data-checked","checked"===t),r}},{key:"formats",value:function(t){return"OL"===t.tagName?"ordered":"UL"===t.tagName?t.hasAttribute("data-checked")?"true"===t.getAttribute("data-checked")?"checked":"unchecked":"bullet":void 0}}]),s(e,[{key:"format",value:function(t,e){this.children.length>0&&this.children.tail.format(t,e)}},{key:"formats",value:function(){return o({},this.statics.blotName,this.statics.formats(this.domNode))}},{key:"insertBefore",value:function(t,n){if(t instanceof v)u(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"insertBefore",this).call(this,t,n);else{var r=null==n?this.length():n.offset(this),o=this.split(r);o.parent.insertBefore(t,o)}}},{key:"optimize",value:function(t){u(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"optimize",this).call(this,t);var n=this.next;null!=n&&n.prev===this&&n.statics.blotName===this.statics.blotName&&n.domNode.tagName===this.domNode.tagName&&n.domNode.getAttribute("data-checked")===this.domNode.getAttribute("data-checked")&&(n.moveChildren(this),n.remove())}},{key:"replace",value:function(t){if(t.statics.blotName!==this.statics.blotName){var n=f.default.create(this.statics.defaultChild);t.moveChildren(n),this.appendChild(n)}u(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"replace",this).call(this,t)}}]),e}(y.default);b.blotName="list",b.scope=f.default.Scope.BLOCK_BLOT,b.tagName=["OL","UL"],b.defaultChild="list-item",b.allowedChildren=[v],e.ListItem=v,e.default=b},function(t,e,n){"use strict";function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function o(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function i(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0});var l=n(39),a=function(t){return t&&t.__esModule?t:{default:t}}(l),s=function(t){function e(){return r(this,e),o(this,(e.__proto__||Object.getPrototypeOf(e)).apply(this,arguments))}return i(e,t),e}(a.default);s.blotName="italic",s.tagName=["EM","I"],e.default=s},function(t,e,n){"use strict";function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function o(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function i(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0});var l=function(){function t(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,n,r){return n&&t(e.prototype,n),r&&t(e,r),e}}(),a=function t(e,n,r){null===e&&(e=Function.prototype);var o=Object.getOwnPropertyDescriptor(e,n);if(void 0===o){var i=Object.getPrototypeOf(e);return null===i?void 0:t(i,n,r)}if("value"in o)return o.value;var l=o.get;if(void 0!==l)return l.call(r)},s=n(5),u=function(t){return t&&t.__esModule?t:{default:t}}(s),c=function(t){function e(){return r(this,e),o(this,(e.__proto__||Object.getPrototypeOf(e)).apply(this,arguments))}return i(e,t),l(e,null,[{key:"create",value:function(t){return"super"===t?document.createElement("sup"):"sub"===t?document.createElement("sub"):a(e.__proto__||Object.getPrototypeOf(e),"create",this).call(this,t)}},{key:"formats",value:function(t){return"SUB"===t.tagName?"sub":"SUP"===t.tagName?"super":void 0}}]),e}(u.default);c.blotName="script",c.tagName=["SUB","SUP"],e.default=c},function(t,e,n){"use strict";function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function o(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function i(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0});var l=n(5),a=function(t){return t&&t.__esModule?t:{default:t}}(l),s=function(t){function e(){return r(this,e),o(this,(e.__proto__||Object.getPrototypeOf(e)).apply(this,arguments))}return i(e,t),e}(a.default);s.blotName="strike",s.tagName="S",e.default=s},function(t,e,n){"use strict";function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function o(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function i(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0});var l=n(5),a=function(t){return t&&t.__esModule?t:{default:t}}(l),s=function(t){function e(){return r(this,e),o(this,(e.__proto__||Object.getPrototypeOf(e)).apply(this,arguments))}return i(e,t),e}(a.default);s.blotName="underline",s.tagName="U",e.default=s},function(t,e,n){"use strict";function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function o(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function i(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0});var l=function(){function t(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,n,r){return n&&t(e.prototype,n),r&&t(e,r),e}}(),a=function t(e,n,r){null===e&&(e=Function.prototype);var o=Object.getOwnPropertyDescriptor(e,n);if(void 0===o){var i=Object.getPrototypeOf(e);return null===i?void 0:t(i,n,r)}if("value"in o)return o.value;var l=o.get;if(void 0!==l)return l.call(r)},s=n(0),u=function(t){return t&&t.__esModule?t:{default:t}}(s),c=n(15),f=["alt","height","width"],h=function(t){function e(){return r(this,e),o(this,(e.__proto__||Object.getPrototypeOf(e)).apply(this,arguments))}return i(e,t),l(e,[{key:"format",value:function(t,n){f.indexOf(t)>-1?n?this.domNode.setAttribute(t,n):this.domNode.removeAttribute(t):a(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"format",this).call(this,t,n)}}],[{key:"create",value:function(t){var n=a(e.__proto__||Object.getPrototypeOf(e),"create",this).call(this,t);return"string"==typeof t&&n.setAttribute("src",this.sanitize(t)),n}},{key:"formats",value:function(t){return f.reduce(function(e,n){return t.hasAttribute(n)&&(e[n]=t.getAttribute(n)),e},{})}},{key:"match",value:function(t){return/\.(jpe?g|gif|png)$/.test(t)||/^data:image\/.+;base64/.test(t)}},{key:"sanitize",value:function(t){return(0,c.sanitize)(t,["http","https","data"])?t:"//:0"}},{key:"value",value:function(t){return t.getAttribute("src")}}]),e}(u.default.Embed);h.blotName="image",h.tagName="IMG",e.default=h},function(t,e,n){"use strict";function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function o(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function i(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0});var l=function(){function t(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,n,r){return n&&t(e.prototype,n),r&&t(e,r),e}}(),a=function t(e,n,r){null===e&&(e=Function.prototype);var o=Object.getOwnPropertyDescriptor(e,n);if(void 0===o){var i=Object.getPrototypeOf(e);return null===i?void 0:t(i,n,r)}if("value"in o)return o.value;var l=o.get;if(void 0!==l)return l.call(r)},s=n(3),u=n(15),c=function(t){return t&&t.__esModule?t:{default:t}}(u),f=["height","width"],h=function(t){function e(){return r(this,e),o(this,(e.__proto__||Object.getPrototypeOf(e)).apply(this,arguments))}return i(e,t),l(e,[{key:"format",value:function(t,n){f.indexOf(t)>-1?n?this.domNode.setAttribute(t,n):this.domNode.removeAttribute(t):a(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"format",this).call(this,t,n)}}],[{key:"create",value:function(t){var n=a(e.__proto__||Object.getPrototypeOf(e),"create",this).call(this,t);return n.setAttribute("frameborder","0"),n.setAttribute("allowfullscreen",!0),n.setAttribute("src",this.sanitize(t)),n}},{key:"formats",value:function(t){return f.reduce(function(e,n){return t.hasAttribute(n)&&(e[n]=t.getAttribute(n)),e},{})}},{key:"sanitize",value:function(t){return c.default.sanitize(t)}},{key:"value",value:function(t){return t.getAttribute("src")}}]),e}(s.BlockEmbed);h.blotName="video",h.className="ql-video",h.tagName="IFRAME",e.default=h},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function i(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function l(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.FormulaBlot=void 0;var a=function(){function t(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,n,r){return n&&t(e.prototype,n),r&&t(e,r),e}}(),s=function t(e,n,r){null===e&&(e=Function.prototype);var o=Object.getOwnPropertyDescriptor(e,n);if(void 0===o){var i=Object.getPrototypeOf(e);return null===i?void 0:t(i,n,r)}if("value"in o)return o.value;var l=o.get;if(void 0!==l)return l.call(r)},u=n(33),c=r(u),f=n(6),h=r(f),p=n(7),d=r(p),y=function(t){function e(){return o(this,e),i(this,(e.__proto__||Object.getPrototypeOf(e)).apply(this,arguments))}return l(e,t),a(e,null,[{key:"create",value:function(t){var n=s(e.__proto__||Object.getPrototypeOf(e),"create",this).call(this,t);return"string"==typeof t&&(window.katex.render(t,n,{throwOnError:!1,errorColor:"#f00"}),n.setAttribute("data-value",t)),n}},{key:"value",value:function(t){return t.getAttribute("data-value")}}]),e}(c.default);y.blotName="formula",y.className="ql-formula",y.tagName="SPAN";var v=function(t){function e(){o(this,e);var t=i(this,(e.__proto__||Object.getPrototypeOf(e)).call(this));if(null==window.katex)throw new Error("Formula module requires KaTeX.");return t}return l(e,t),a(e,null,[{key:"register",value:function(){h.default.register(y,!0)}}]),e}(d.default);e.FormulaBlot=y,e.default=v},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function i(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function l(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.CodeToken=e.CodeBlock=void 0;var a=function(){function t(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,n,r){return n&&t(e.prototype,n),r&&t(e,r),e}}(),s=function t(e,n,r){null===e&&(e=Function.prototype);var o=Object.getOwnPropertyDescriptor(e,n);if(void 0===o){var i=Object.getPrototypeOf(e);return null===i?void 0:t(i,n,r)}if("value"in o)return o.value;var l=o.get;if(void 0!==l)return l.call(r)},u=n(0),c=r(u),f=n(6),h=r(f),p=n(7),d=r(p),y=n(13),v=r(y),b=function(t){function e(){return o(this,e),i(this,(e.__proto__||Object.getPrototypeOf(e)).apply(this,arguments))}return l(e,t),a(e,[{key:"replaceWith",value:function(t){this.domNode.textContent=this.domNode.textContent,this.attach(),s(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"replaceWith",this).call(this,t)}},{key:"highlight",value:function(t){var e=this.domNode.textContent;this.cachedText!==e&&((e.trim().length>0||null==this.cachedText)&&(this.domNode.innerHTML=t(e),this.domNode.normalize(),this.attach()),this.cachedText=e)}}]),e}(v.default);b.className="ql-syntax";var g=new c.default.Attributor.Class("token","hljs",{scope:c.default.Scope.INLINE}),m=function(t){function e(t,n){o(this,e);var r=i(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t,n));if("function"!=typeof r.options.highlight)throw new Error("Syntax module requires highlight.js. Please include the library on the page before Quill.");var l=null;return r.quill.on(h.default.events.SCROLL_OPTIMIZE,function(){clearTimeout(l),l=setTimeout(function(){r.highlight(),l=null},r.options.interval)}),r.highlight(),r}return l(e,t),a(e,null,[{key:"register",value:function(){h.default.register(g,!0),h.default.register(b,!0)}}]),a(e,[{key:"highlight",value:function(){var t=this;if(!this.quill.selection.composing){this.quill.update(h.default.sources.USER);var e=this.quill.getSelection();this.quill.scroll.descendants(b).forEach(function(e){e.highlight(t.options.highlight)}),this.quill.update(h.default.sources.SILENT),null!=e&&this.quill.setSelection(e,h.default.sources.SILENT)}}}]),e}(d.default);m.DEFAULTS={highlight:function(){return null==window.hljs?null:function(t){return window.hljs.highlightAuto(t).value}}(),interval:1e3},e.CodeBlock=b,e.CodeToken=g,e.default=m},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function o(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function i(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function l(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function a(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}function s(t,e,n){var r=document.createElement("button");r.setAttribute("type","button"),r.classList.add("ql-"+e),null!=n&&(r.value=n),t.appendChild(r)}function u(t,e){Array.isArray(e[0])||(e=[e]),e.forEach(function(e){var n=document.createElement("span");n.classList.add("ql-formats"),e.forEach(function(t){if("string"==typeof t)s(n,t);else{var e=Object.keys(t)[0],r=t[e];Array.isArray(r)?c(n,e,r):s(n,e,r)}}),t.appendChild(n)})}function c(t,e,n){var r=document.createElement("select");r.classList.add("ql-"+e),n.forEach(function(t){var e=document.createElement("option");!1!==t?e.setAttribute("value",t):e.setAttribute("selected","selected"),r.appendChild(e)}),t.appendChild(r)}Object.defineProperty(e,"__esModule",{value:!0}),e.addControls=e.default=void 0;var f=function(){function t(t,e){var n=[],r=!0,o=!1,i=void 0;try{for(var l,a=t[Symbol.iterator]();!(r=(l=a.next()).done)&&(n.push(l.value),!e||n.length!==e);r=!0);}catch(t){o=!0,i=t}finally{try{!r&&a.return&&a.return()}finally{if(o)throw i}}return n}return function(e,n){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return t(e,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),h=function(){function t(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,n,r){return n&&t(e.prototype,n),r&&t(e,r),e}}(),p=n(4),d=r(p),y=n(0),v=r(y),b=n(6),g=r(b),m=n(10),_=r(m),O=n(7),w=r(O),x=(0,_.default)("quill:toolbar"),k=function(t){function e(t,n){i(this,e);var r=l(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t,n));if(Array.isArray(r.options.container)){var o=document.createElement("div");u(o,r.options.container),t.container.parentNode.insertBefore(o,t.container),r.container=o}else"string"==typeof r.options.container?r.container=document.querySelector(r.options.container):r.container=r.options.container;if(!(r.container instanceof HTMLElement)){var a;return a=x.error("Container required for toolbar",r.options),l(r,a)}return r.container.classList.add("ql-toolbar"),r.controls=[],r.handlers={},Object.keys(r.options.handlers).forEach(function(t){r.addHandler(t,r.options.handlers[t])}),[].forEach.call(r.container.querySelectorAll("button, select"),function(t){r.attach(t)}),r.quill.on(g.default.events.EDITOR_CHANGE,function(t,e){t===g.default.events.SELECTION_CHANGE&&r.update(e)}),r.quill.on(g.default.events.SCROLL_OPTIMIZE,function(){var t=r.quill.selection.getRange(),e=f(t,1),n=e[0];r.update(n)}),r}return a(e,t),h(e,[{key:"addHandler",value:function(t,e){this.handlers[t]=e}},{key:"attach",value:function(t){var e=this,n=[].find.call(t.classList,function(t){return 0===t.indexOf("ql-")});if(n){if(n=n.slice("ql-".length),"BUTTON"===t.tagName&&t.setAttribute("type","button"),null==this.handlers[n]){if(null!=this.quill.scroll.whitelist&&null==this.quill.scroll.whitelist[n])return void x.warn("ignoring attaching to disabled format",n,t);if(null==v.default.query(n))return void x.warn("ignoring attaching to nonexistent format",n,t)}var r="SELECT"===t.tagName?"change":"click";t.addEventListener(r,function(r){var i=void 0;if("SELECT"===t.tagName){if(t.selectedIndex<0)return;var l=t.options[t.selectedIndex];i=!l.hasAttribute("selected")&&(l.value||!1)}else i=!t.classList.contains("ql-active")&&(t.value||!t.hasAttribute("value")),r.preventDefault();e.quill.focus();var a=e.quill.selection.getRange(),s=f(a,1),u=s[0];if(null!=e.handlers[n])e.handlers[n].call(e,i);else if(v.default.query(n).prototype instanceof v.default.Embed){if(!(i=prompt("Enter "+n)))return;e.quill.updateContents((new d.default).retain(u.index).delete(u.length).insert(o({},n,i)),g.default.sources.USER)}else e.quill.format(n,i,g.default.sources.USER);e.update(u)}),this.controls.push([n,t])}}},{key:"update",value:function(t){var e=null==t?{}:this.quill.getFormat(t);this.controls.forEach(function(n){var r=f(n,2),o=r[0],i=r[1];if("SELECT"===i.tagName){var l=void 0;if(null==t)l=null;else if(null==e[o])l=i.querySelector("option[selected]");else if(!Array.isArray(e[o])){var a=e[o];"string"==typeof a&&(a=a.replace(/\"/g,'\\"')),l=i.querySelector('option[value="'+a+'"]')}null==l?(i.value="",i.selectedIndex=-1):l.selected=!0}else if(null==t)i.classList.remove("ql-active");else if(i.hasAttribute("value")){var s=e[o]===i.getAttribute("value")||null!=e[o]&&e[o].toString()===i.getAttribute("value")||null==e[o]&&!i.getAttribute("value");i.classList.toggle("ql-active",s)}else i.classList.toggle("ql-active",null!=e[o])})}}]),e}(w.default);k.DEFAULTS={},k.DEFAULTS={container:null,handlers:{clean:function(){var t=this,e=this.quill.getSelection();if(null!=e)if(0==e.length){var n=this.quill.getFormat();Object.keys(n).forEach(function(e){null!=v.default.query(e,v.default.Scope.INLINE)&&t.quill.format(e,!1)})}else this.quill.removeFormat(e,g.default.sources.USER)},direction:function(t){var e=this.quill.getFormat().align;"rtl"===t&&null==e?this.quill.format("align","right",g.default.sources.USER):t||"right"!==e||this.quill.format("align",!1,g.default.sources.USER),this.quill.format("direction",t,g.default.sources.USER)},indent:function(t){var e=this.quill.getSelection(),n=this.quill.getFormat(e),r=parseInt(n.indent||0);if("+1"===t||"-1"===t){var o="+1"===t?1:-1;"rtl"===n.direction&&(o*=-1),this.quill.format("indent",r+o,g.default.sources.USER)}},link:function(t){!0===t&&(t=prompt("Enter link URL:")),this.quill.format("link",t,g.default.sources.USER)},list:function(t){var e=this.quill.getSelection(),n=this.quill.getFormat(e);"check"===t?"checked"===n.list||"unchecked"===n.list?this.quill.format("list",!1,g.default.sources.USER):this.quill.format("list","unchecked",g.default.sources.USER):this.quill.format("list",t,g.default.sources.USER)}}},e.default=k,e.addControls=u},function(t,e){t.exports='<svg viewbox="0 0 18 18"> <line class=ql-stroke x1=3 x2=15 y1=9 y2=9></line> <line class=ql-stroke x1=3 x2=13 y1=14 y2=14></line> <line class=ql-stroke x1=3 x2=9 y1=4 y2=4></line> </svg>'},function(t,e){t.exports='<svg viewbox="0 0 18 18"> <line class=ql-stroke x1=15 x2=3 y1=9 y2=9></line> <line class=ql-stroke x1=14 x2=4 y1=14 y2=14></line> <line class=ql-stroke x1=12 x2=6 y1=4 y2=4></line> </svg>'},function(t,e){t.exports='<svg viewbox="0 0 18 18"> <line class=ql-stroke x1=15 x2=3 y1=9 y2=9></line> <line class=ql-stroke x1=15 x2=5 y1=14 y2=14></line> <line class=ql-stroke x1=15 x2=9 y1=4 y2=4></line> </svg>'},function(t,e){t.exports='<svg viewbox="0 0 18 18"> <line class=ql-stroke x1=15 x2=3 y1=9 y2=9></line> <line class=ql-stroke x1=15 x2=3 y1=14 y2=14></line> <line class=ql-stroke x1=15 x2=3 y1=4 y2=4></line> </svg>'},function(t,e){t.exports='<svg viewbox="0 0 18 18"> <g class="ql-fill ql-color-label"> <polygon points="6 6.868 6 6 5 6 5 7 5.942 7 6 6.868"></polygon> <rect height=1 width=1 x=4 y=4></rect> <polygon points="6.817 5 6 5 6 6 6.38 6 6.817 5"></polygon> <rect height=1 width=1 x=2 y=6></rect> <rect height=1 width=1 x=3 y=5></rect> <rect height=1 width=1 x=4 y=7></rect> <polygon points="4 11.439 4 11 3 11 3 12 3.755 12 4 11.439"></polygon> <rect height=1 width=1 x=2 y=12></rect> <rect height=1 width=1 x=2 y=9></rect> <rect height=1 width=1 x=2 y=15></rect> <polygon points="4.63 10 4 10 4 11 4.192 11 4.63 10"></polygon> <rect height=1 width=1 x=3 y=8></rect> <path d=M10.832,4.2L11,4.582V4H10.708A1.948,1.948,0,0,1,10.832,4.2Z></path> <path d=M7,4.582L7.168,4.2A1.929,1.929,0,0,1,7.292,4H7V4.582Z></path> <path d=M8,13H7.683l-0.351.8a1.933,1.933,0,0,1-.124.2H8V13Z></path> <rect height=1 width=1 x=12 y=2></rect> <rect height=1 width=1 x=11 y=3></rect> <path d=M9,3H8V3.282A1.985,1.985,0,0,1,9,3Z></path> <rect height=1 width=1 x=2 y=3></rect> <rect height=1 width=1 x=6 y=2></rect> <rect height=1 width=1 x=3 y=2></rect> <rect height=1 width=1 x=5 y=3></rect> <rect height=1 width=1 x=9 y=2></rect> <rect height=1 width=1 x=15 y=14></rect> <polygon points="13.447 10.174 13.469 10.225 13.472 10.232 13.808 11 14 11 14 10 13.37 10 13.447 10.174"></polygon> <rect height=1 width=1 x=13 y=7></rect> <rect height=1 width=1 x=15 y=5></rect> <rect height=1 width=1 x=14 y=6></rect> <rect height=1 width=1 x=15 y=8></rect> <rect height=1 width=1 x=14 y=9></rect> <path d=M3.775,14H3v1H4V14.314A1.97,1.97,0,0,1,3.775,14Z></path> <rect height=1 width=1 x=14 y=3></rect> <polygon points="12 6.868 12 6 11.62 6 12 6.868"></polygon> <rect height=1 width=1 x=15 y=2></rect> <rect height=1 width=1 x=12 y=5></rect> <rect height=1 width=1 x=13 y=4></rect> <polygon points="12.933 9 13 9 13 8 12.495 8 12.933 9"></polygon> <rect height=1 width=1 x=9 y=14></rect> <rect height=1 width=1 x=8 y=15></rect> <path d=M6,14.926V15H7V14.316A1.993,1.993,0,0,1,6,14.926Z></path> <rect height=1 width=1 x=5 y=15></rect> <path d=M10.668,13.8L10.317,13H10v1h0.792A1.947,1.947,0,0,1,10.668,13.8Z></path> <rect height=1 width=1 x=11 y=15></rect> <path d=M14.332,12.2a1.99,1.99,0,0,1,.166.8H15V12H14.245Z></path> <rect height=1 width=1 x=14 y=15></rect> <rect height=1 width=1 x=15 y=11></rect> </g> <polyline class=ql-stroke points="5.5 13 9 5 12.5 13"></polyline> <line class=ql-stroke x1=11.63 x2=6.38 y1=11 y2=11></line> </svg>'},function(t,e){t.exports='<svg viewbox="0 0 18 18"> <rect class="ql-fill ql-stroke" height=3 width=3 x=4 y=5></rect> <rect class="ql-fill ql-stroke" height=3 width=3 x=11 y=5></rect> <path class="ql-even ql-fill ql-stroke" d=M7,8c0,4.031-3,5-3,5></path> <path class="ql-even ql-fill ql-stroke" d=M14,8c0,4.031-3,5-3,5></path> </svg>'},function(t,e){t.exports='<svg viewbox="0 0 18 18"> <path class=ql-stroke d=M5,4H9.5A2.5,2.5,0,0,1,12,6.5v0A2.5,2.5,0,0,1,9.5,9H5A0,0,0,0,1,5,9V4A0,0,0,0,1,5,4Z></path> <path class=ql-stroke d=M5,9h5.5A2.5,2.5,0,0,1,13,11.5v0A2.5,2.5,0,0,1,10.5,14H5a0,0,0,0,1,0,0V9A0,0,0,0,1,5,9Z></path> </svg>'},function(t,e){t.exports='<svg class="" viewbox="0 0 18 18"> <line class=ql-stroke x1=5 x2=13 y1=3 y2=3></line> <line class=ql-stroke x1=6 x2=9.35 y1=12 y2=3></line> <line class=ql-stroke x1=11 x2=15 y1=11 y2=15></line> <line class=ql-stroke x1=15 x2=11 y1=11 y2=15></line> <rect class=ql-fill height=1 rx=0.5 ry=0.5 width=7 x=2 y=14></rect> </svg>'},function(t,e){t.exports='<svg viewbox="0 0 18 18"> <line class="ql-color-label ql-stroke ql-transparent" x1=3 x2=15 y1=15 y2=15></line> <polyline class=ql-stroke points="5.5 11 9 3 12.5 11"></polyline> <line class=ql-stroke x1=11.63 x2=6.38 y1=9 y2=9></line> </svg>'},function(t,e){t.exports='<svg viewbox="0 0 18 18"> <polygon class="ql-stroke ql-fill" points="3 11 5 9 3 7 3 11"></polygon> <line class="ql-stroke ql-fill" x1=15 x2=11 y1=4 y2=4></line> <path class=ql-fill d=M11,3a3,3,0,0,0,0,6h1V3H11Z></path> <rect class=ql-fill height=11 width=1 x=11 y=4></rect> <rect class=ql-fill height=11 width=1 x=13 y=4></rect> </svg>'},function(t,e){t.exports='<svg viewbox="0 0 18 18"> <polygon class="ql-stroke ql-fill" points="15 12 13 10 15 8 15 12"></polygon> <line class="ql-stroke ql-fill" x1=9 x2=5 y1=4 y2=4></line> <path class=ql-fill d=M5,3A3,3,0,0,0,5,9H6V3H5Z></path> <rect class=ql-fill height=11 width=1 x=5 y=4></rect> <rect class=ql-fill height=11 width=1 x=7 y=4></rect> </svg>'},function(t,e){t.exports='<svg viewbox="0 0 18 18"> <path class=ql-fill d=M14,16H4a1,1,0,0,1,0-2H14A1,1,0,0,1,14,16Z /> <path class=ql-fill d=M14,4H4A1,1,0,0,1,4,2H14A1,1,0,0,1,14,4Z /> <rect class=ql-fill x=3 y=6 width=12 height=6 rx=1 ry=1 /> </svg>'},function(t,e){t.exports='<svg viewbox="0 0 18 18"> <path class=ql-fill d=M13,16H5a1,1,0,0,1,0-2h8A1,1,0,0,1,13,16Z /> <path class=ql-fill d=M13,4H5A1,1,0,0,1,5,2h8A1,1,0,0,1,13,4Z /> <rect class=ql-fill x=2 y=6 width=14 height=6 rx=1 ry=1 /> </svg>'},function(t,e){t.exports='<svg viewbox="0 0 18 18"> <path class=ql-fill d=M15,8H13a1,1,0,0,1,0-2h2A1,1,0,0,1,15,8Z /> <path class=ql-fill d=M15,12H13a1,1,0,0,1,0-2h2A1,1,0,0,1,15,12Z /> <path class=ql-fill d=M15,16H5a1,1,0,0,1,0-2H15A1,1,0,0,1,15,16Z /> <path class=ql-fill d=M15,4H5A1,1,0,0,1,5,2H15A1,1,0,0,1,15,4Z /> <rect class=ql-fill x=2 y=6 width=8 height=6 rx=1 ry=1 /> </svg>'},function(t,e){t.exports='<svg viewbox="0 0 18 18"> <path class=ql-fill d=M5,8H3A1,1,0,0,1,3,6H5A1,1,0,0,1,5,8Z /> <path class=ql-fill d=M5,12H3a1,1,0,0,1,0-2H5A1,1,0,0,1,5,12Z /> <path class=ql-fill d=M13,16H3a1,1,0,0,1,0-2H13A1,1,0,0,1,13,16Z /> <path class=ql-fill d=M13,4H3A1,1,0,0,1,3,2H13A1,1,0,0,1,13,4Z /> <rect class=ql-fill x=8 y=6 width=8 height=6 rx=1 ry=1 transform="translate(24 18) rotate(-180)"/> </svg>'},function(t,e){t.exports='<svg viewbox="0 0 18 18"> <path class=ql-fill d=M11.759,2.482a2.561,2.561,0,0,0-3.53.607A7.656,7.656,0,0,0,6.8,6.2C6.109,9.188,5.275,14.677,4.15,14.927a1.545,1.545,0,0,0-1.3-.933A0.922,0.922,0,0,0,2,15.036S1.954,16,4.119,16s3.091-2.691,3.7-5.553c0.177-.826.36-1.726,0.554-2.6L8.775,6.2c0.381-1.421.807-2.521,1.306-2.676a1.014,1.014,0,0,0,1.02.56A0.966,0.966,0,0,0,11.759,2.482Z></path> <rect class=ql-fill height=1.6 rx=0.8 ry=0.8 width=5 x=5.15 y=6.2></rect> <path class=ql-fill d=M13.663,12.027a1.662,1.662,0,0,1,.266-0.276q0.193,0.069.456,0.138a2.1,2.1,0,0,0,.535.069,1.075,1.075,0,0,0,.767-0.3,1.044,1.044,0,0,0,.314-0.8,0.84,0.84,0,0,0-.238-0.619,0.8,0.8,0,0,0-.594-0.239,1.154,1.154,0,0,0-.781.3,4.607,4.607,0,0,0-.781,1q-0.091.15-.218,0.346l-0.246.38c-0.068-.288-0.137-0.582-0.212-0.885-0.459-1.847-2.494-.984-2.941-0.8-0.482.2-.353,0.647-0.094,0.529a0.869,0.869,0,0,1,1.281.585c0.217,0.751.377,1.436,0.527,2.038a5.688,5.688,0,0,1-.362.467,2.69,2.69,0,0,1-.264.271q-0.221-.08-0.471-0.147a2.029,2.029,0,0,0-.522-0.066,1.079,1.079,0,0,0-.768.3A1.058,1.058,0,0,0,9,15.131a0.82,0.82,0,0,0,.832.852,1.134,1.134,0,0,0,.787-0.3,5.11,5.11,0,0,0,.776-0.993q0.141-.219.215-0.34c0.046-.076.122-0.194,0.223-0.346a2.786,2.786,0,0,0,.918,1.726,2.582,2.582,0,0,0,2.376-.185c0.317-.181.212-0.565,0-0.494A0.807,0.807,0,0,1,14.176,15a5.159,5.159,0,0,1-.913-2.446l0,0Q13.487,12.24,13.663,12.027Z></path> </svg>'},function(t,e){t.exports='<svg viewBox="0 0 18 18"> <path class=ql-fill d=M10,4V14a1,1,0,0,1-2,0V10H3v4a1,1,0,0,1-2,0V4A1,1,0,0,1,3,4V8H8V4a1,1,0,0,1,2,0Zm6.06787,9.209H14.98975V7.59863a.54085.54085,0,0,0-.605-.60547h-.62744a1.01119,1.01119,0,0,0-.748.29688L11.645,8.56641a.5435.5435,0,0,0-.022.8584l.28613.30762a.53861.53861,0,0,0,.84717.0332l.09912-.08789a1.2137,1.2137,0,0,0,.2417-.35254h.02246s-.01123.30859-.01123.60547V13.209H12.041a.54085.54085,0,0,0-.605.60547v.43945a.54085.54085,0,0,0,.605.60547h4.02686a.54085.54085,0,0,0,.605-.60547v-.43945A.54085.54085,0,0,0,16.06787,13.209Z /> </svg>'},function(t,e){t.exports='<svg viewBox="0 0 18 18"> <path class=ql-fill d=M16.73975,13.81445v.43945a.54085.54085,0,0,1-.605.60547H11.855a.58392.58392,0,0,1-.64893-.60547V14.0127c0-2.90527,3.39941-3.42187,3.39941-4.55469a.77675.77675,0,0,0-.84717-.78125,1.17684,1.17684,0,0,0-.83594.38477c-.2749.26367-.561.374-.85791.13184l-.4292-.34082c-.30811-.24219-.38525-.51758-.1543-.81445a2.97155,2.97155,0,0,1,2.45361-1.17676,2.45393,2.45393,0,0,1,2.68408,2.40918c0,2.45312-3.1792,2.92676-3.27832,3.93848h2.79443A.54085.54085,0,0,1,16.73975,13.81445ZM9,3A.99974.99974,0,0,0,8,4V8H3V4A1,1,0,0,0,1,4V14a1,1,0,0,0,2,0V10H8v4a1,1,0,0,0,2,0V4A.99974.99974,0,0,0,9,3Z /> </svg>'},function(t,e){t.exports='<svg viewbox="0 0 18 18"> <line class=ql-stroke x1=7 x2=13 y1=4 y2=4></line> <line class=ql-stroke x1=5 x2=11 y1=14 y2=14></line> <line class=ql-stroke x1=8 x2=10 y1=14 y2=4></line> </svg>'},function(t,e){t.exports='<svg viewbox="0 0 18 18"> <rect class=ql-stroke height=10 width=12 x=3 y=4></rect> <circle class=ql-fill cx=6 cy=7 r=1></circle> <polyline class="ql-even ql-fill" points="5 12 5 11 7 9 8 10 11 7 13 9 13 12 5 12"></polyline> </svg>'},function(t,e){t.exports='<svg viewbox="0 0 18 18"> <line class=ql-stroke x1=3 x2=15 y1=14 y2=14></line> <line class=ql-stroke x1=3 x2=15 y1=4 y2=4></line> <line class=ql-stroke x1=9 x2=15 y1=9 y2=9></line> <polyline class="ql-fill ql-stroke" points="3 7 3 11 5 9 3 7"></polyline> </svg>'},function(t,e){t.exports='<svg viewbox="0 0 18 18"> <line class=ql-stroke x1=3 x2=15 y1=14 y2=14></line> <line class=ql-stroke x1=3 x2=15 y1=4 y2=4></line> <line class=ql-stroke x1=9 x2=15 y1=9 y2=9></line> <polyline class=ql-stroke points="5 7 5 11 3 9 5 7"></polyline> </svg>'},function(t,e){t.exports='<svg viewbox="0 0 18 18"> <line class=ql-stroke x1=7 x2=11 y1=7 y2=11></line> <path class="ql-even ql-stroke" d=M8.9,4.577a3.476,3.476,0,0,1,.36,4.679A3.476,3.476,0,0,1,4.577,8.9C3.185,7.5,2.035,6.4,4.217,4.217S7.5,3.185,8.9,4.577Z></path> <path class="ql-even ql-stroke" d=M13.423,9.1a3.476,3.476,0,0,0-4.679-.36,3.476,3.476,0,0,0,.36,4.679c1.392,1.392,2.5,2.542,4.679.36S14.815,10.5,13.423,9.1Z></path> </svg>'},function(t,e){t.exports='<svg viewbox="0 0 18 18"> <line class=ql-stroke x1=7 x2=15 y1=4 y2=4></line> <line class=ql-stroke x1=7 x2=15 y1=9 y2=9></line> <line class=ql-stroke x1=7 x2=15 y1=14 y2=14></line> <line class="ql-stroke ql-thin" x1=2.5 x2=4.5 y1=5.5 y2=5.5></line> <path class=ql-fill d=M3.5,6A0.5,0.5,0,0,1,3,5.5V3.085l-0.276.138A0.5,0.5,0,0,1,2.053,3c-0.124-.247-0.023-0.324.224-0.447l1-.5A0.5,0.5,0,0,1,4,2.5v3A0.5,0.5,0,0,1,3.5,6Z></path> <path class="ql-stroke ql-thin" d=M4.5,10.5h-2c0-.234,1.85-1.076,1.85-2.234A0.959,0.959,0,0,0,2.5,8.156></path> <path class="ql-stroke ql-thin" d=M2.5,14.846a0.959,0.959,0,0,0,1.85-.109A0.7,0.7,0,0,0,3.75,14a0.688,0.688,0,0,0,.6-0.736,0.959,0.959,0,0,0-1.85-.109></path> </svg>'},function(t,e){t.exports='<svg viewbox="0 0 18 18"> <line class=ql-stroke x1=6 x2=15 y1=4 y2=4></line> <line class=ql-stroke x1=6 x2=15 y1=9 y2=9></line> <line class=ql-stroke x1=6 x2=15 y1=14 y2=14></line> <line class=ql-stroke x1=3 x2=3 y1=4 y2=4></line> <line class=ql-stroke x1=3 x2=3 y1=9 y2=9></line> <line class=ql-stroke x1=3 x2=3 y1=14 y2=14></line> </svg>'},function(t,e){t.exports='<svg class="" viewbox="0 0 18 18"> <line class=ql-stroke x1=9 x2=15 y1=4 y2=4></line> <polyline class=ql-stroke points="3 4 4 5 6 3"></polyline> <line class=ql-stroke x1=9 x2=15 y1=14 y2=14></line> <polyline class=ql-stroke points="3 14 4 15 6 13"></polyline> <line class=ql-stroke x1=9 x2=15 y1=9 y2=9></line> <polyline class=ql-stroke points="3 9 4 10 6 8"></polyline> </svg>'},function(t,e){t.exports='<svg viewbox="0 0 18 18"> <path class=ql-fill d=M15.5,15H13.861a3.858,3.858,0,0,0,1.914-2.975,1.8,1.8,0,0,0-1.6-1.751A1.921,1.921,0,0,0,12.021,11.7a0.50013,0.50013,0,1,0,.957.291h0a0.914,0.914,0,0,1,1.053-.725,0.81,0.81,0,0,1,.744.762c0,1.076-1.16971,1.86982-1.93971,2.43082A1.45639,1.45639,0,0,0,12,15.5a0.5,0.5,0,0,0,.5.5h3A0.5,0.5,0,0,0,15.5,15Z /> <path class=ql-fill d=M9.65,5.241a1,1,0,0,0-1.409.108L6,7.964,3.759,5.349A1,1,0,0,0,2.192,6.59178Q2.21541,6.6213,2.241,6.649L4.684,9.5,2.241,12.35A1,1,0,0,0,3.71,13.70722q0.02557-.02768.049-0.05722L6,11.036,8.241,13.65a1,1,0,1,0,1.567-1.24277Q9.78459,12.3777,9.759,12.35L7.316,9.5,9.759,6.651A1,1,0,0,0,9.65,5.241Z /> </svg>'},function(t,e){t.exports='<svg viewbox="0 0 18 18"> <path class=ql-fill d=M15.5,7H13.861a4.015,4.015,0,0,0,1.914-2.975,1.8,1.8,0,0,0-1.6-1.751A1.922,1.922,0,0,0,12.021,3.7a0.5,0.5,0,1,0,.957.291,0.917,0.917,0,0,1,1.053-.725,0.81,0.81,0,0,1,.744.762c0,1.077-1.164,1.925-1.934,2.486A1.423,1.423,0,0,0,12,7.5a0.5,0.5,0,0,0,.5.5h3A0.5,0.5,0,0,0,15.5,7Z /> <path class=ql-fill d=M9.651,5.241a1,1,0,0,0-1.41.108L6,7.964,3.759,5.349a1,1,0,1,0-1.519,1.3L4.683,9.5,2.241,12.35a1,1,0,1,0,1.519,1.3L6,11.036,8.241,13.65a1,1,0,0,0,1.519-1.3L7.317,9.5,9.759,6.651A1,1,0,0,0,9.651,5.241Z /> </svg>'},function(t,e){t.exports='<svg viewbox="0 0 18 18"> <line class="ql-stroke ql-thin" x1=15.5 x2=2.5 y1=8.5 y2=9.5></line> <path class=ql-fill d=M9.007,8C6.542,7.791,6,7.519,6,6.5,6,5.792,7.283,5,9,5c1.571,0,2.765.679,2.969,1.309a1,1,0,0,0,1.9-.617C13.356,4.106,11.354,3,9,3,6.2,3,4,4.538,4,6.5a3.2,3.2,0,0,0,.5,1.843Z></path> <path class=ql-fill d=M8.984,10C11.457,10.208,12,10.479,12,11.5c0,0.708-1.283,1.5-3,1.5-1.571,0-2.765-.679-2.969-1.309a1,1,0,1,0-1.9.617C4.644,13.894,6.646,15,9,15c2.8,0,5-1.538,5-3.5a3.2,3.2,0,0,0-.5-1.843Z></path> </svg>'},function(t,e){t.exports='<svg viewbox="0 0 18 18"> <path class=ql-stroke d=M5,3V9a4.012,4.012,0,0,0,4,4H9a4.012,4.012,0,0,0,4-4V3></path> <rect class=ql-fill height=1 rx=0.5 ry=0.5 width=12 x=3 y=15></rect> </svg>'},function(t,e){t.exports='<svg viewbox="0 0 18 18"> <rect class=ql-stroke height=12 width=12 x=3 y=3></rect> <rect class=ql-fill height=12 width=1 x=5 y=3></rect> <rect class=ql-fill height=12 width=1 x=12 y=3></rect> <rect class=ql-fill height=2 width=8 x=5 y=8></rect> <rect class=ql-fill height=1 width=3 x=3 y=5></rect> <rect class=ql-fill height=1 width=3 x=3 y=7></rect> <rect class=ql-fill height=1 width=3 x=3 y=10></rect> <rect class=ql-fill height=1 width=3 x=3 y=12></rect> <rect class=ql-fill height=1 width=3 x=12 y=5></rect> <rect class=ql-fill height=1 width=3 x=12 y=7></rect> <rect class=ql-fill height=1 width=3 x=12 y=10></rect> <rect class=ql-fill height=1 width=3 x=12 y=12></rect> </svg>'},function(t,e){t.exports='<svg viewbox="0 0 18 18"> <polygon class=ql-stroke points="7 11 9 13 11 11 7 11"></polygon> <polygon class=ql-stroke points="7 7 9 5 11 7 7 7"></polygon> </svg>'},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function i(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function l(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.BubbleTooltip=void 0;var a=function t(e,n,r){null===e&&(e=Function.prototype);var o=Object.getOwnPropertyDescriptor(e,n);if(void 0===o){var i=Object.getPrototypeOf(e);return null===i?void 0:t(i,n,r)}if("value"in o)return o.value;var l=o.get;if(void 0!==l)return l.call(r)},s=function(){function t(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,n,r){return n&&t(e.prototype,n),r&&t(e,r),e}}(),u=n(2),c=r(u),f=n(9),h=r(f),p=n(44),d=r(p),y=n(22),v=n(26),b=r(v),g=[["bold","italic","link"],[{header:1},{header:2},"blockquote"]],m=function(t){function e(t,n){o(this,e),null!=n.modules.toolbar&&null==n.modules.toolbar.container&&(n.modules.toolbar.container=g);var r=i(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t,n));return r.quill.container.classList.add("ql-bubble"),r}return l(e,t),s(e,[{key:"extendToolbar",value:function(t){this.tooltip=new _(this.quill,this.options.bounds),this.tooltip.root.appendChild(t.container),this.buildButtons([].slice.call(t.container.querySelectorAll("button")),b.default),this.buildPickers([].slice.call(t.container.querySelectorAll("select")),b.default)}}]),e}(d.default);m.DEFAULTS=(0,c.default)(!0,{},d.default.DEFAULTS,{modules:{toolbar:{handlers:{link:function(t){t?this.quill.theme.tooltip.edit():this.quill.format("link",!1)}}}}});var _=function(t){function e(t,n){o(this,e);var r=i(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t,n));return r.quill.on(h.default.events.EDITOR_CHANGE,function(t,e,n,o){if(t===h.default.events.SELECTION_CHANGE)if(null!=e&&e.length>0&&o===h.default.sources.USER){r.show(),r.root.style.left="0px",r.root.style.width="",r.root.style.width=r.root.offsetWidth+"px";var i=r.quill.getLines(e.index,e.length);if(1===i.length)r.position(r.quill.getBounds(e));else{var l=i[i.length-1],a=r.quill.getIndex(l),s=Math.min(l.length()-1,e.index+e.length-a),u=r.quill.getBounds(new y.Range(a,s));r.position(u)}}else document.activeElement!==r.textbox&&r.quill.hasFocus()&&r.hide()}),r}return l(e,t),s(e,[{key:"listen",value:function(){var t=this;a(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"listen",this).call(this),this.root.querySelector(".ql-close").addEventListener("click",function(){t.root.classList.remove("ql-editing")}),this.quill.on(h.default.events.SCROLL_OPTIMIZE,function(){setTimeout(function(){if(!t.root.classList.contains("ql-hidden")){var e=t.quill.getSelection();null!=e&&t.position(t.quill.getBounds(e))}},1)})}},{key:"cancel",value:function(){this.show()}},{key:"position",value:function(t){var n=a(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"position",this).call(this,t),r=this.root.querySelector(".ql-tooltip-arrow");if(r.style.marginLeft="",0===n)return n;r.style.marginLeft=-1*n-r.offsetWidth/2+"px"}}]),e}(p.BaseTooltip);_.TEMPLATE=['<span class="ql-tooltip-arrow"></span>','<div class="ql-tooltip-editor">','<input type="text" data-formula="e=mc^2" data-link="https://quilljs.com" data-video="Embed URL">','<a class="ql-close"></a>',"</div>"].join(""),e.BubbleTooltip=_,e.default=m},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function i(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function l(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0});var a=function(){function t(t,e){var n=[],r=!0,o=!1,i=void 0;try{for(var l,a=t[Symbol.iterator]();!(r=(l=a.next()).done)&&(n.push(l.value),!e||n.length!==e);r=!0);}catch(t){o=!0,i=t}finally{try{!r&&a.return&&a.return()}finally{if(o)throw i}}return n}return function(e,n){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return t(e,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),s=function t(e,n,r){null===e&&(e=Function.prototype);var o=Object.getOwnPropertyDescriptor(e,n);if(void 0===o){var i=Object.getPrototypeOf(e);return null===i?void 0:t(i,n,r)}if("value"in o)return o.value;var l=o.get;if(void 0!==l)return l.call(r)},u=function(){function t(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,n,r){return n&&t(e.prototype,n),r&&t(e,r),e}}(),c=n(2),f=r(c),h=n(9),p=r(h),d=n(44),y=r(d),v=n(15),b=r(v),g=n(22),m=n(26),_=r(m),O=[[{header:["1","2","3",!1]}],["bold","italic","underline","link"],[{list:"ordered"},{list:"bullet"}],["clean"]],w=function(t){function e(t,n){o(this,e),null!=n.modules.toolbar&&null==n.modules.toolbar.container&&(n.modules.toolbar.container=O);var r=i(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t,n));return r.quill.container.classList.add("ql-snow"),r}return l(e,t),u(e,[{key:"extendToolbar",value:function(t){t.container.classList.add("ql-snow"),this.buildButtons([].slice.call(t.container.querySelectorAll("button")),_.default),this.buildPickers([].slice.call(t.container.querySelectorAll("select")),_.default),this.tooltip=new x(this.quill,this.options.bounds),t.container.querySelector(".ql-link")&&this.quill.keyboard.addBinding({key:"K",shortKey:!0},function(e,n){t.handlers.link.call(t,!n.format.link)})}}]),e}(y.default);w.DEFAULTS=(0,f.default)(!0,{},y.default.DEFAULTS,{modules:{toolbar:{handlers:{link:function(t){if(t){var e=this.quill.getSelection();if(null==e||0==e.length)return;var n=this.quill.getText(e);/^\S+@\S+\.\S+$/.test(n)&&0!==n.indexOf("mailto:")&&(n="mailto:"+n);this.quill.theme.tooltip.edit("link",n)}else this.quill.format("link",!1)}}}}});var x=function(t){function e(t,n){o(this,e);var r=i(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t,n));return r.preview=r.root.querySelector("a.ql-preview"),r}return l(e,t),u(e,[{key:"listen",value:function(){var t=this;s(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"listen",this).call(this),this.root.querySelector("a.ql-action").addEventListener("click",function(e){t.root.classList.contains("ql-editing")?t.save():t.edit("link",t.preview.textContent),e.preventDefault()}),this.root.querySelector("a.ql-remove").addEventListener("click",function(e){if(null!=t.linkRange){var n=t.linkRange;t.restoreFocus(),t.quill.formatText(n,"link",!1,p.default.sources.USER),delete t.linkRange}e.preventDefault(),t.hide()}),this.quill.on(p.default.events.SELECTION_CHANGE,function(e,n,r){if(null!=e){if(0===e.length&&r===p.default.sources.USER){var o=t.quill.scroll.descendant(b.default,e.index),i=a(o,2),l=i[0],s=i[1];if(null!=l){t.linkRange=new g.Range(e.index-s,l.length());var u=b.default.formats(l.domNode);return t.preview.textContent=u,t.preview.setAttribute("href",u),t.show(),void t.position(t.quill.getBounds(t.linkRange))}}else delete t.linkRange;t.hide()}})}},{key:"show",value:function(){s(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"show",this).call(this),this.root.removeAttribute("data-mode")}}]),e}(d.BaseTooltip);x.TEMPLATE=['<a class="ql-preview" target="_blank" href="about:blank"></a>','<input type="text" data-formula="e=mc^2" data-link="https://quilljs.com" data-video="Embed URL">','<a class="ql-action"></a>','<a class="ql-remove"></a>'].join(""),e.default=w}]).default});
+//# sourceMappingURL=quill.min.js.map
\ No newline at end of file
diff --git a/htdocs/cgi-bin/wsrc/quill/quill.min.js.map b/htdocs/cgi-bin/wsrc/quill/quill.min.js.map
new file mode 100644 (file)
index 0000000..f272990
--- /dev/null
@@ -0,0 +1 @@
+{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///quill.min.js","webpack:///webpack/bootstrap bc1e3bc04ac5f71cbeee","webpack:///./node_modules/parchment/src/parchment.ts","webpack:///./node_modules/parchment/src/registry.ts","webpack:///./node_modules/extend/index.js","webpack:///./blots/block.js","webpack:///./node_modules/quill-delta/lib/delta.js","webpack:///./blots/inline.js","webpack:///./core/quill.js","webpack:///./core/module.js","webpack:///./blots/text.js","webpack:///./core/emitter.js","webpack:///./core/logger.js","webpack:///./node_modules/parchment/src/attributor/attributor.ts","webpack:///./node_modules/deep-equal/index.js","webpack:///./formats/code.js","webpack:///./blots/break.js","webpack:///./formats/link.js","webpack:///./ui/picker.js","webpack:///./node_modules/parchment/src/blot/abstract/container.ts","webpack:///./node_modules/parchment/src/blot/abstract/format.ts","webpack:///./node_modules/parchment/src/blot/abstract/leaf.ts","webpack:///./node_modules/quill-delta/lib/op.js","webpack:///./node_modules/clone/clone.js","webpack:///./core/selection.js","webpack:///./blots/container.js","webpack:///./formats/color.js","webpack:///./modules/keyboard.js","webpack:///./ui/icons.js","webpack:///./node_modules/parchment/src/blot/abstract/shadow.ts","webpack:///./node_modules/parchment/src/attributor/store.ts","webpack:///./node_modules/parchment/src/attributor/class.ts","webpack:///./node_modules/parchment/src/attributor/style.ts","webpack:///./blots/cursor.js","webpack:///./core/theme.js","webpack:///./blots/embed.js","webpack:///./formats/align.js","webpack:///./formats/background.js","webpack:///./formats/direction.js","webpack:///./formats/font.js","webpack:///./formats/size.js","webpack:///./formats/bold.js","webpack:///./assets/icons/code.svg","webpack:///./ui/color-picker.js","webpack:///./ui/icon-picker.js","webpack:///./ui/tooltip.js","webpack:///./themes/base.js","webpack:///./quill.js","webpack:///./core.js","webpack:///./node_modules/parchment/src/collection/linked-list.ts","webpack:///./node_modules/parchment/src/blot/scroll.ts","webpack:///./node_modules/parchment/src/blot/inline.ts","webpack:///./node_modules/parchment/src/blot/block.ts","webpack:///./node_modules/parchment/src/blot/embed.ts","webpack:///./node_modules/parchment/src/blot/text.ts","webpack:///./core/polyfill.js","webpack:///./node_modules/fast-diff/diff.js","webpack:///./node_modules/deep-equal/lib/keys.js","webpack:///./node_modules/deep-equal/lib/is_arguments.js","webpack:///./core/editor.js","webpack:///./node_modules/eventemitter3/index.js","webpack:///./blots/scroll.js","webpack:///./modules/clipboard.js","webpack:///./modules/history.js","webpack:///./formats/indent.js","webpack:///./formats/blockquote.js","webpack:///./formats/header.js","webpack:///./formats/list.js","webpack:///./formats/italic.js","webpack:///./formats/script.js","webpack:///./formats/strike.js","webpack:///./formats/underline.js","webpack:///./formats/image.js","webpack:///./formats/video.js","webpack:///./modules/formula.js","webpack:///./modules/syntax.js","webpack:///./modules/toolbar.js","webpack:///./assets/icons/align-left.svg","webpack:///./assets/icons/align-center.svg","webpack:///./assets/icons/align-right.svg","webpack:///./assets/icons/align-justify.svg","webpack:///./assets/icons/background.svg","webpack:///./assets/icons/blockquote.svg","webpack:///./assets/icons/bold.svg","webpack:///./assets/icons/clean.svg","webpack:///./assets/icons/color.svg","webpack:///./assets/icons/direction-ltr.svg","webpack:///./assets/icons/direction-rtl.svg","webpack:///./assets/icons/float-center.svg","webpack:///./assets/icons/float-full.svg","webpack:///./assets/icons/float-left.svg","webpack:///./assets/icons/float-right.svg","webpack:///./assets/icons/formula.svg","webpack:///./assets/icons/header.svg","webpack:///./assets/icons/header-2.svg","webpack:///./assets/icons/italic.svg","webpack:///./assets/icons/image.svg","webpack:///./assets/icons/indent.svg","webpack:///./assets/icons/outdent.svg","webpack:///./assets/icons/link.svg","webpack:///./assets/icons/list-ordered.svg","webpack:///./assets/icons/list-bullet.svg","webpack:///./assets/icons/list-check.svg","webpack:///./assets/icons/subscript.svg","webpack:///./assets/icons/superscript.svg","webpack:///./assets/icons/strike.svg","webpack:///./assets/icons/underline.svg","webpack:///./assets/icons/video.svg","webpack:///./assets/icons/dropdown.svg","webpack:///./themes/bubble.js","webpack:///./themes/snow.js"],"names":["root","factory","exports","module","define","amd","self","this","modules","__webpack_require__","moduleId","installedModules","i","l","call","m","c","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","object","property","prototype","hasOwnProperty","p","s","value","container_1","format_1","leaf_1","scroll_1","inline_1","block_1","embed_1","text_1","attributor_1","class_1","style_1","store_1","Registry","Parchment","Scope","create","find","query","register","Container","default","Format","Leaf","Embed","Scroll","Block","Inline","Text","Attributor","Attribute","Class","Style","Store","input","match","ParchmentError","BlotClass","Node","TEXT_NODE","node","bubble","DATA_KEY","blot","parentNode","scope","ANY","types","attributes","LEVEL","BLOCK","INLINE","HTMLElement","names","getAttribute","split","classes","tags","tagName","TYPE","Definitions","_i","arguments","length","map","Definition","blotName","attrName","keyName","className","Array","isArray","toUpperCase","tagNames","forEach","tag","__extends","extendStatics","setPrototypeOf","__proto__","b","__","constructor","_super","message","_this","Error","hasOwn","toStr","toString","arr","isPlainObject","obj","hasOwnConstructor","hasIsPrototypeOf","key","extend","options","src","copy","copyIsArray","clone","target","deep","_interopRequireDefault","_classCallCheck","instance","Constructor","TypeError","_possibleConstructorReturn","ReferenceError","_inherits","subClass","superClass","writable","bubbleFormats","formats","undefined","_extend2","parent","statics","BlockEmbed","_createClass","defineProperties","props","descriptor","protoProps","staticProps","_get","receiver","Function","desc","getOwnPropertyDescriptor","getPrototypeOf","_extend","_quillDelta","_quillDelta2","_parchment","_parchment2","_break","_break2","_inline","_inline2","_text","_text2","_Parchment$Embed","apply","domNode","insert","values","attribute","BLOCK_ATTRIBUTE","index","format","def","endsWith","block","insertBefore","next","insertAt","slice","BLOCK_BLOT","_Parchment$Block","_this2","cache","delta","descendants","reduce","leaf","Math","min","lines","text","shift","children","tail","line","ref","head","remove","context","child","force","defaultChild","allowedChildren","diff","equal","op","NULL_CHARACTER","String","fromCharCode","Delta","ops","newOp","keys","push","delete","retain","lastOp","unshift","splice","chop","pop","filter","predicate","partition","passed","failed","initial","changeLength","elem","start","end","Infinity","iter","iterator","hasNext","nextOp","compose","other","thisIter","otherIter","peekType","peekLength","thisOp","otherOp","concat","strings","prep","join","diffResult","component","opLength","INSERT","DELETE","EQUAL","eachLine","newline","peek","indexOf","transform","priority","transformPosition","offset","nextType","_Parchment$Inline","compare","BLOT","isolate","wrap","moveChildren","selfIndex","order","otherIndex","_defineProperty","expandConfig","container","userConfig","clipboard","keyboard","history","theme","Quill","DEFAULTS","import","_theme2","themeConfig","config","moduleNames","moduleConfig","moduleClass","debug","error","toolbar","document","querySelector","modify","modifier","source","strict","isEnabled","_emitter4","sources","USER","range","getSelection","oldDelta","editor","change","shiftRange","setSelection","SILENT","_emitter","args","events","TEXT_CHANGE","emitter","emit","EDITOR_CHANGE","_emitter2","overload","_typeof","API","_map","pos","_map2","_slicedToArray","_map3","max","_map4","_selection","Range","Symbol","sliceIterator","_arr","_n","_d","_e","_s","done","err","_editor","_editor2","_emitter3","_module","_module2","_selection2","_logger","_logger2","_theme","html","innerHTML","trim","classList","add","__quill","addContainer","setAttribute","scrollingContainer","scroll","whitelist","selection","addModule","init","on","type","toggle","isBlank","SCROLL_UPDATE","mutations","lastRange","update","contents","convert","setContents","clear","placeholder","readOnly","disable","limit","level","imports","path","overwrite","warn","startsWith","refNode","createElement","setRange","_this3","_overload","_overload2","deleteText","enable","enabled","scrollTop","focus","scrollIntoView","_this4","formatLine","formatText","_this5","_overload3","_overload4","_this6","_overload5","_overload6","bounds","getBounds","containerBounds","getBoundingClientRect","bottom","top","height","left","right","width","getLength","_overload7","_overload8","getContents","getFormat","Number","MAX_VALUE","getRange","_overload9","_overload10","getText","hasFocus","embed","_this7","insertEmbed","_this8","_overload11","_overload12","insertText","contains","off","once","dangerouslyPasteHTML","_this9","_overload13","_overload14","removeFormat","_this10","deleted","applied","applyDelta","_overload15","_overload16","_this11","version","parchment","core/module","core/theme","Module","quill","TextBlot","_Parchment$Text","_eventemitter","_eventemitter2","eventName","addEventListener","_len","_key","querySelectorAll","_node$__quill$emitter","handleDOM","Emitter","_EventEmitter","listeners","log","event","_len2","_key2","_ref","handler","SCROLL_BEFORE_UPDATE","SCROLL_OPTIMIZE","SELECTION_CHANGE","method","levels","_console","console","namespace","ns","logger","bind","newLevel","attributeBit","ATTRIBUTE","item","canAdd","replace","removeAttribute","isUndefinedOrNull","isBuffer","x","objEquiv","a","opts","isArguments","pSlice","deepEqual","ka","objectKeys","kb","e","sort","actual","expected","Date","getTime","Code","_block","_block2","_Inline","CodeBlock","_Block","textContent","frag","_descendant","descendant","_descendant2","deleteAt","nextNewline","newlineIndex","prevNewline","isolateLength","formatAt","_descendant3","_descendant4","searchIndex","lastIndexOf","appendChild","prev","optimize","removeChild","unwrap","TAB","Break","sanitize","url","protocols","anchor","href","protocol","Link","PROTOCOL_WHITELIST","SANITIZED_URL","toggleAriaAttribute","element","_keyboard","_keyboard2","_dropdown","_dropdown2","optionsCounter","Picker","select","buildPicker","style","display","label","togglePicker","keyCode","ENTER","ESCAPE","escape","preventDefault","option","tabIndex","hasAttribute","selectItem","id","buildItem","selected","buildLabel","buildOptions","close","setTimeout","trigger","selectedIndex","Event","dispatchEvent","createEvent","initEvent","isActive","makeBlot","childNodes","replaceChild","attach","linked_list_1","shadow_1","ContainerBlot","build","reverse","forEachAt","criteria","_a","lengthLeft","detach","childBlot","refBlot","some","insertInto","memo","targetParent","inclusive","position","after","addedNodes","removedNodes","mutation","body","compareDocumentPosition","DOCUMENT_POSITION_CONTAINED_BY","DOCUMENT_POSITION_FOLLOWING","nextSibling","FormatBlot","toLowerCase","replaceWith","replacement","wrapper","move","LeafBlot","INLINE_BLOT","Iterator","lib","keepNull","retOp","substr","_instanceof","circular","depth","includeNonEnumerable","_clone","proto","nativeMap","nativeSet","nativePromise","resolve","reject","then","__isArray","__isRegExp","RegExp","__getRegExpFlags","lastIndex","__isDate","useBuffer","Buffer","allParents","allChildren","keyChild","valueChild","set","entryChild","attrs","getOwnPropertySymbols","symbols","symbol","allPropertyNames","getOwnPropertyNames","propertyName","__objToStr","re","flags","global","ignoreCase","multiline","Map","_","Set","Promise","clonePrototype","_toConsumableArray","arr2","from","_clone2","_deepEqual","_deepEqual2","Selection","composing","mouseDown","cursor","savedRange","handleComposition","handleDragging","listenDOM","native","getNativeRange","textNode","setNativeRange","ignored","_context$range","startNode","startOffset","endNode","endOffset","restore","nativeRange","collapsed","data","scrollLength","_scroll$leaf","_scroll$leaf2","_leaf$position","_leaf$position2","createRange","setStart","_scroll$leaf3","_scroll$leaf4","_leaf$position3","_leaf$position4","setEnd","side","rect","rangeCount","getRangeAt","normalizeNative","info","normalized","normalizedToRange","activeElement","positions","indexes","_position","startContainer","endContainer","lastChild","_scroll$leaf5","_scroll$leaf6","_leaf$position5","_leaf$position6","_scroll$line","_scroll$line2","first","last","_scroll$line3","scrollBounds","removeAllRanges","addRange","blur","rangeToNative","oldRange","_getRange","_getRange2","_Parchment$Container","ColorStyle","ColorClass","ColorAttributor","_Parchment$Attributor","parseInt","makeEmbedArrowHandler","shiftKey","_ref3","where","Keyboard","LEFT","altKey","RIGHT","_quill$getLeaf3","getLeaf","_quill2","handleBackspace","_quill$getLine11","getLine","_quill$getLine12","_quill$getLine13","_quill$getLine14","curFormats","prevFormats","_op2","test","prefix","handleDelete","suffix","nextLength","_quill$getLine15","_quill$getLine16","_quill$getLine17","_quill$getLine18","nextFormats","handleDeleteRange","getLines","firstFormats","lastFormats","handleEnter","lineFormats","makeCodeBlockHandler","indent","code-block","_quill$scroll$descend","_quill$scroll$descend2","scrollIndex","getIndex","makeFormatHandler","shortKey","normalize","binding","charCodeAt","SHORTKEY","_op","_quill","navigator","platform","_Module","bindings","addBinding","metaKey","ctrlKey","userAgent","BACKSPACE","listen","evt","which","defaultPrevented","_quill$getLine","_quill$getLine2","_quill$getLeaf","_quill$getLeaf2","leafStart","offsetStart","_ref2","leafEnd","offsetEnd","prefixText","suffixText","curContext","empty","every","UP","DOWN","bold","italic","underline","outdent","outdent backspace","list","indent code-block","outdent code-block","remove tab","tab","cutoff","updateContents","list empty enter","checklist enter","_quill$getLine3","_quill$getLine4","header enter","_quill$getLine5","_quill$getLine6","header","list autofill","_quill$getLine7","_quill$getLine8","code exit","_quill$getLine9","_quill$getLine10","embed left","embed left shift","embed right","embed right shift","align","","center","justify","background","blockquote","clean","code","color","direction","rtl","float","full","formula","1","2","image","+1","-1","link","ordered","bullet","check","script","sub","super","strike","video","ShadowBlot","cloneNode","parentBlot","refDomNode","AttributorStore","styles","attr","ClassAttributor","result","camelize","parts","rest","part","StyleAttributor","Cursor","createTextNode","CONTENTS","_length","restoreText","Theme","themes","GUARD_TEXT","contentNode","childNode","leftGuard","rightGuard","prevLength","AlignStyle","AlignClass","AlignAttribute","BackgroundStyle","BackgroundClass","_color","DirectionStyle","DirectionClass","DirectionAttribute","FontClass","FontStyle","FontStyleAttributor","SizeStyle","SizeClass","Bold","_picker","_picker2","ColorPicker","_Picker","backgroundColor","colorLabel","stroke","fill","IconPicker","icons","defaultItem","Tooltip","boundsContainer","TEMPLATE","marginTop","hide","reference","offsetWidth","rootBounds","verticalShift","extractVideoUrl","fillSelect","defaultValue","BaseTooltip","_colorPicker","_colorPicker2","_iconPicker","_iconPicker2","_tooltip","_tooltip2","ALIGNS","COLORS","FONTS","HEADERS","SIZES","BaseTheme","_Theme","listener","removeEventListener","tooltip","textbox","pickers","picker","extendToolbar","buttons","button","selects","handlers","edit","fileInput","files","reader","FileReader","onload","readAsDataURL","click","_Tooltip","save","cancel","mode","preview","linkRange","restoreFocus","_core","_core2","_align","_direction","_indent","_blockquote","_blockquote2","_header","_header2","_list","_list2","_background","_font","_size","_bold","_bold2","_italic","_italic2","_link","_link2","_script","_script2","_strike","_strike2","_underline","_underline2","_image","_image2","_video","_video2","_code","_code2","_formula","_formula2","_syntax","_syntax2","_toolbar","_toolbar2","_icons","_icons2","_bubble","_bubble2","_snow","_snow2","attributors/attribute/direction","attributors/class/align","attributors/class/background","attributors/class/color","attributors/class/direction","attributors/class/font","attributors/class/size","attributors/style/align","attributors/style/background","attributors/style/color","attributors/style/direction","attributors/style/font","attributors/style/size","formats/align","formats/direction","formats/indent","IndentClass","formats/background","formats/color","formats/font","formats/size","formats/blockquote","formats/code-block","formats/header","formats/list","formats/bold","formats/code","formats/italic","formats/link","formats/script","formats/strike","formats/underline","formats/image","formats/video","formats/list/item","ListItem","modules/formula","modules/syntax","modules/toolbar","themes/bubble","themes/snow","ui/icons","ui/picker","ui/icon-picker","ui/color-picker","ui/tooltip","_container","_container2","_cursor","_cursor2","_embed","_embed2","_scroll","_scroll2","_clipboard","_clipboard2","_history","_history2","blots/block","blots/block/embed","blots/break","blots/container","blots/cursor","blots/embed","blots/inline","blots/scroll","blots/text","modules/clipboard","modules/history","modules/keyboard","LinkedList","append","nodes","cur","curNode","ret","callback","curIndex","curLength","OBSERVER_CONFIG","characterData","characterDataOldValue","childList","subtree","ScrollBlot","observer","MutationObserver","observe","disconnect","records","takeRecords","mark","markParent","remaining","previousSibling","grandChild","isEqual","obj1","obj2","prop","InlineBlot","BlockBlot","EmbedBlot","splitText","_toggle","DOMTokenList","token","searchString","subjectString","isFinite","floor","thisArg","execCommand","diff_main","text1","text2","cursor_pos","DIFF_EQUAL","commonlength","diff_commonPrefix","commonprefix","substring","diff_commonSuffix","commonsuffix","diffs","diff_compute_","diff_cleanupMerge","fix_cursor","fix_emoji","DIFF_INSERT","DIFF_DELETE","longtext","shorttext","hm","diff_halfMatch_","text1_a","text1_b","text2_a","text2_b","mid_common","diffs_a","diffs_b","diff_bisect_","text1_length","text2_length","max_d","ceil","v_offset","v_length","v1","v2","front","k1start","k1end","k2start","k2end","k1","x1","k1_offset","y1","charAt","k2_offset","x2","diff_bisectSplit_","k2","y2","y","text1a","text2a","text1b","text2b","diffsb","pointermin","pointermax","pointermid","pointerstart","pointerend","diff_halfMatchI_","best_longtext_a","best_longtext_b","best_shorttext_a","best_shorttext_b","seed","j","best_common","prefixLength","suffixLength","hm1","hm2","pointer","count_delete","count_insert","text_delete","text_insert","changes","cursor_normalize_diff","current_pos","next_pos","split_pos","d_left","d_right","norm","ndiffs","cursor_pointer","d_next","merge_tuples","compact","starts_with_pair_end","str","fixed_diffs","left_d","right_d","shim","supported","unsupported","propertyIsEnumerable","supportsArgumentsClass","combineFormats","combined","merged","normalizeDelta","ASCII","Editor","getDelta","consumeNextNewline","batchStart","_line$descendant","_line$descendant2","batchEnd","lengthRemaining","lineLength","codeIndex","codeLength","leaves","_path","formatsArr","blots","_scroll$line4","cursorIndex","textBlot","oldValue","oldText","newText","Events","EE","fn","EventEmitter","_events","_eventsCount","has","eventNames","exists","available","ee","a1","a2","a3","a4","a5","len","removeListener","removeAllListeners","addListener","setMaxListeners","prefixed","isLine","_Parchment$Scroll","batch","_line","_line2","_line3","_line4","applyFormat","_extend3","computeStyle","nodeType","ELEMENT_NODE","window","getComputedStyle","deltaEndsWith","endText","traverse","elementMatchers","textMatchers","matcher","childrenDelta","DOM_KEY","matchAlias","matchAttributor","ATTRIBUTE_ATTRIBUTORS","STYLE_ATTRIBUTORS","matchBlot","matchBreak","matchIgnore","matchIndent","matchNewline","matchSpacing","nextElementSibling","nodeHeight","offsetHeight","parseFloat","marginBottom","offsetTop","matchStyles","fontStyle","fontWeight","textIndent","matchText","whiteSpace","replacer","collapse","CLIPBOARD_CONFIG","Clipboard","onPaste","matchers","selector","matchVisual","addMatcher","innerText","_prepareMatching","prepareMatching","_prepareMatching2","paste","pair","_pair","endsWithNewlineChange","getLastChangeIndex","deleteLength","changeIndex","History","lastRecorded","ignoreChange","userOnly","record","undo","redo","dest","stack","changeDelta","undoDelta","timestamp","now","delay","maxStack","IdentAttributor","Blockquote","Header","List","_Container","listEventHandler","Italic","_Bold","Script","Strike","Underline","ATTRIBUTES","Image","Video","_BlockEmbed","FormulaBlot","_Embed","katex","render","throwOnError","errorColor","Formula","CodeToken","SyntaxCodeBlock","_CodeBlock","highlight","cachedText","Syntax","timer","clearTimeout","interval","hljs","highlightAuto","addButton","addControls","groups","controls","group","control","addSelect","Toolbar","_ret","addHandler","_this$quill$selection","_this$quill$selection2","_quill$selection$getR","_quill$selection$getR2","prompt","BubbleTooltip","_base","_base2","TOOLBAR_CONFIG","BubbleTheme","_BaseTheme","buildButtons","buildPickers","_BaseTooltip","show","lastLine","arrow","marginLeft","SnowTheme","SnowTooltip"],"mappings":";;;;;;CAAA,SAAAA,EAAAC,GACA,gBAAAC,UAAA,gBAAAC,QACAA,OAAAD,QAAAD,IACA,kBAAAG,gBAAAC,IACAD,UAAAH,GACA,gBAAAC,SACAA,QAAA,MAAAD,IAEAD,EAAA,MAAAC,KACC,mBAAAK,WAAAC,KAAA,WACD,MCMgB,UAAUC,GCZ1B,QAAAC,GAAAC,GAGA,GAAAC,EAAAD,GACA,MAAAC,GAAAD,GAAAR,OAGA,IAAAC,GAAAQ,EAAAD,IACAE,EAAAF,EACAG,GAAA,EACAX,WAUA,OANAM,GAAAE,GAAAI,KAAAX,EAAAD,QAAAC,IAAAD,QAAAO,GAGAN,EAAAU,GAAA,EAGAV,EAAAD,QAvBA,GAAAS,KA4DA,OAhCAF,GAAAM,EAAAP,EAGAC,EAAAO,EAAAL,EAGAF,EAAAQ,EAAA,SAAAf,EAAAgB,EAAAC,GACAV,EAAAW,EAAAlB,EAAAgB,IACAG,OAAAC,eAAApB,EAAAgB,GACAK,cAAA,EACAC,YAAA,EACAC,IAAAN,KAMAV,EAAAiB,EAAA,SAAAvB,GACA,GAAAgB,GAAAhB,KAAAwB,WACA,WAA2B,MAAAxB,GAAA,SAC3B,WAAiC,MAAAA,GAEjC,OADAM,GAAAQ,EAAAE,EAAA,IAAAA,GACAA,GAIAV,EAAAW,EAAA,SAAAQ,EAAAC,GAAsD,MAAAR,QAAAS,UAAAC,eAAAjB,KAAAc,EAAAC,IAGtDpB,EAAAuB,EAAA,GAGAvB,IAAAwB,EAAA,MDsBM,SAAU9B,EAAQD,EAASO,GAEjC,YEpFAY,QAAAC,eAAApB,EAAA,cAA8CgC,OAAA,GAC9C,IAAAC,GAAA1B,EAAA,IACA2B,EAAA3B,EAAA,IACA4B,EAAA5B,EAAA,IACA6B,EAAA7B,EAAA,IACA8B,EAAA9B,EAAA,IACA+B,EAAA/B,EAAA,IACAgC,EAAAhC,EAAA,IACAiC,EAAAjC,EAAA,IACAkC,EAAAlC,EAAA,IACAmC,EAAAnC,EAAA,IACAoC,EAAApC,EAAA,IACAqC,EAAArC,EAAA,IACAsC,EAAAtC,EAAA,GACAuC,GACAC,MAAAF,EAAAE,MACAC,OAAAH,EAAAG,OACAC,KAAAJ,EAAAI,KACAC,MAAAL,EAAAK,MACAC,SAAAN,EAAAM,SACAC,UAAAnB,EAAAoB,QACAC,OAAApB,EAAAmB,QACAE,KAAApB,EAAAkB,QACAG,MAAAjB,EAAAc,QACAI,OAAArB,EAAAiB,QACAK,MAAApB,EAAAe,QACAM,OAAAtB,EAAAgB,QACAO,KAAApB,EAAAa,QACAQ,YACAC,UAAArB,EAAAY,QACAU,MAAArB,EAAAW,QACAW,MAAArB,EAAAU,QACAY,MAAArB,EAAAS,SAGArD,GAAAqD,QAAAP,GF2FM,SAAU7C,EAAQD,EAASO,GAEjC,YGrFA,SAAAyC,GAAAkB,EAAAlC,GACA,GAAAmC,GAAAjB,EAAAgB,EACA,UAAAC,EACA,SAAAC,GAAA,oBAAAF,EAAA,QAEA,IAAAG,GAAAF,CAIA,WAAAE,GADAH,YAAAI,OAAAJ,EAAA,WAAAI,KAAAC,UAAAL,EAAAG,EAAArB,OAAAhB,GACAA,GAGA,QAAAiB,GAAAuB,EAAAC,GAEA,WADA,KAAAA,IAA4BA,GAAA,GAC5B,MAAAD,EACA,KAEA,MAAAA,EAAAxE,EAAA0E,UACAF,EAAAxE,EAAA0E,UAAAC,KACAF,EACAxB,EAAAuB,EAAAI,WAAAH,GACA,KAGA,QAAAvB,KAAA2B,OACA,KAAAA,IAA2BA,EAAA9B,EAAA+B,IAC3B,IAAAX,EACA,oBAAAjB,GACAiB,EAAAY,EAAA7B,IAAA8B,EAAA9B,OAGA,IAAAA,YAAAU,OAAAV,EAAA,WAAAoB,KAAAC,UACAJ,EAAAY,EAAA,SAEA,oBAAA7B,GACAA,EAAAH,EAAAkC,MAAAlC,EAAAmC,MACAf,EAAAY,EAAA,MAEA7B,EAAAH,EAAAkC,MAAAlC,EAAAoC,SACAhB,EAAAY,EAAA,YAGA,IAAA7B,YAAAkC,aAAA,CACA,GAAAC,IAAAnC,EAAAoC,aAAA,cAAAC,MAAA,MACA,QAAA7E,KAAA2E,GAEA,GADAlB,EAAAqB,EAAAH,EAAA3E,IAEA,KAEAyD,MAAAsB,EAAAvC,EAAAwC,SAEA,aAAAvB,EACA,KAEAU,EAAA9B,EAAAkC,MAAAd,EAAAU,SAAA9B,EAAA4C,KAAAxB,EAAAU,MACAV,EACA,KAGA,QAAAhB,KAEA,OADAyC,MACAC,EAAA,EAAoBA,EAAAC,UAAAC,OAAuBF,IAC3CD,EAAAC,GAAAC,UAAAD,EAEA,IAAAD,EAAAG,OAAA,EACA,MAAAH,GAAAI,IAAA,SAAAjF,GACA,MAAAoC,GAAApC,IAGA,IAAAkF,GAAAL,EAAA,EACA,oBAAAK,GAAAC,UAAA,gBAAAD,GAAAE,SACA,SAAA/B,GAAA,qBAEA,iBAAA6B,EAAAC,SACA,SAAA9B,GAAA,iCAGA,IADAW,EAAAkB,EAAAC,UAAAD,EAAAE,UAAAF,EACA,gBAAAA,GAAAG,QACApB,EAAAiB,EAAAG,SAAAH,MAMA,IAHA,MAAAA,EAAAI,YACAb,EAAAS,EAAAI,WAAAJ,GAEA,MAAAA,EAAAP,QAAA,CACAY,MAAAC,QAAAN,EAAAP,SACAO,EAAAP,QAAAO,EAAAP,QAAAM,IAAA,SAAAN,GACA,MAAAA,GAAAc,gBAIAP,EAAAP,QAAAO,EAAAP,QAAAc,aAEA,IAAAC,GAAAH,MAAAC,QAAAN,EAAAP,SAAAO,EAAAP,SAAAO,EAAAP,QACAe,GAAAC,QAAA,SAAAC,GACA,MAAAlB,EAAAkB,IAAA,MAAAV,EAAAI,YACAZ,EAAAkB,GAAAV,KAKA,MAAAA,GAhJA,GAAAW,GAAAvG,WAAAuG,WAAA,WACA,GAAAC,GAAA1F,OAAA2F,iBACUC,uBAAgBT,QAAA,SAAAvF,EAAAiG,GAAsCjG,EAAAgG,UAAAC,IAChE,SAAAjG,EAAAiG,GAAyB,OAAAlF,KAAAkF,KAAAnF,eAAAC,KAAAf,EAAAe,GAAAkF,EAAAlF,IACzB,iBAAAf,EAAAiG,GAEA,QAAAC,KAAuB5G,KAAA6G,YAAAnG,EADvB8F,EAAA9F,EAAAiG,GAEAjG,EAAAa,UAAA,OAAAoF,EAAA7F,OAAA6B,OAAAgE,IAAAC,EAAArF,UAAAoF,EAAApF,UAAA,GAAAqF,OAGA9F,QAAAC,eAAApB,EAAA,cAA8CgC,OAAA,GAC9C,IAAAoC,GAAA,SAAA+C,GAEA,QAAA/C,GAAAgD,GACA,GAAAC,GAAAhH,IAKA,OAJA+G,GAAA,eAAAA,EACAC,EAAAF,EAAAvG,KAAAP,KAAA+G,IAAA/G,KACAgH,EAAAD,UACAC,EAAArG,KAAAqG,EAAAH,YAAAlG,KACAqG,EAEA,MATAT,GAAAxC,EAAA+C,GASA/C,GACCkD,MACDtH,GAAAoE,gBACA,IAAAY,MACAQ,KACAC,KACAV,IACA/E,GAAA0E,SAAA,QACA,IAAA3B,IACA,SAAAA,GACAA,IAAA,eACAA,IAAA,kBACAA,IAAA,0BACAA,IAAA,gBACAA,IAAA,mBACAA,IAAA,kBACAA,IAAA,4BACAA,IAAA,6BACAA,IAAA,qCACAA,IAAA,uCACAA,IAAA,eACCA,EAAA/C,EAAA+C,QAAA/C,EAAA+C,WAYD/C,EAAAgD,SAYAhD,EAAAiD,OAmCAjD,EAAAkD,QA6CAlD,EAAAmD,YHuIM,SAAUlD,EAAQD,GI1RxB,YAEA,IAAAuH,GAAApG,OAAAS,UAAAC,eACA2F,EAAArG,OAAAS,UAAA6F,SAEAlB,EAAA,SAAAmB,GACA,wBAAApB,OAAAC,QACAD,MAAAC,QAAAmB,GAGA,mBAAAF,EAAA5G,KAAA8G,IAGAC,EAAA,SAAAC,GACA,IAAAA,GAAA,oBAAAJ,EAAA5G,KAAAgH,GACA,QAGA,IAAAC,GAAAN,EAAA3G,KAAAgH,EAAA,eACAE,EAAAF,EAAAV,aAAAU,EAAAV,YAAAtF,WAAA2F,EAAA3G,KAAAgH,EAAAV,YAAAtF,UAAA,gBAEA,IAAAgG,EAAAV,cAAAW,IAAAC,EACA,QAKA,IAAAC,EACA,KAAAA,IAAAH,IAEA,gBAAAG,GAAAR,EAAA3G,KAAAgH,EAAAG,GAGA9H,GAAAD,QAAA,QAAAgI,KACA,GAAAC,GAAAjH,EAAAkH,EAAAC,EAAAC,EAAAC,EACAC,EAAAxC,UAAA,GACApF,EAAA,EACAqF,EAAAD,UAAAC,OACAwC,GAAA,CAaA,KAVA,iBAAAD,KACAC,EAAAD,EACAA,EAAAxC,UAAA,OAEApF,EAAA,IAEA,MAAA4H,GAAA,gBAAAA,IAAA,kBAAAA,MACAA,MAGO5H,EAAAqF,IAAYrF,EAGnB,UAFAuH,EAAAnC,UAAApF,IAIA,IAAAM,IAAAiH,GACAC,EAAAI,EAAAtH,GACAmH,EAAAF,EAAAjH,GAGAsH,IAAAH,IAEAI,GAAAJ,IAAAR,EAAAQ,KAAAC,EAAA7B,EAAA4B,MACAC,GACAA,GAAA,EACAC,EAAAH,GAAA3B,EAAA2B,SAEAG,EAAAH,GAAAP,EAAAO,QAIAI,EAAAtH,GAAAgH,EAAAO,EAAAF,EAAAF,QAGM,KAAAA,IACNG,EAAAtH,GAAAmH,GAQA,OAAAG,KJkSM,SAAUrI,EAAQD,EAASO,GAEjC,YAoCA,SAASiI,GAAuBZ,GAAO,MAAOA,IAAOA,EAAInG,WAAamG,GAAQvE,QAASuE,GAEvF,QAASa,GAAgBC,EAAUC,GAAe,KAAMD,YAAoBC,IAAgB,KAAM,IAAIC,WAAU,qCAEhH,QAASC,GAA2BzI,EAAMQ,GAAQ,IAAKR,EAAQ,KAAM,IAAI0I,gBAAe,4DAAgE,QAAOlI,GAAyB,gBAATA,IAAqC,kBAATA,GAA8BR,EAAPQ,EAElO,QAASmI,GAAUC,EAAUC,GAAc,GAA0B,kBAAfA,IAA4C,OAAfA,EAAuB,KAAM,IAAIL,WAAU,iEAAoEK,GAAeD,GAASpH,UAAYT,OAAO6B,OAAOiG,GAAcA,EAAWrH,WAAasF,aAAelF,MAAOgH,EAAU1H,YAAY,EAAO4H,UAAU,EAAM7H,cAAc,KAAe4H,IAAY9H,OAAO2F,eAAiB3F,OAAO2F,eAAekC,EAAUC,GAAcD,EAASjC,UAAYkC,GKjQje,QAASE,GAAcxE,GAAoB,GAAdyE,GAActD,UAAAC,OAAA,OAAAsD,KAAAvD,UAAA,GAAAA,UAAA,KACzC,OAAY,OAARnB,EAAqByE,GACG,kBAAjBzE,GAAKyE,UACdA,GAAU,EAAAE,EAAAjG,SAAO+F,EAASzE,EAAKyE,YAEd,MAAfzE,EAAK4E,QAA0C,UAAxB5E,EAAK4E,OAAOrD,UAAwBvB,EAAK4E,OAAOC,QAAQ3E,QAAUF,EAAK6E,QAAQ3E,MACjGuE,EAEFD,EAAcxE,EAAK4E,OAAQH,ILkNpCjI,OAAOC,eAAepB,EAAS,cAC7BgC,OAAO,IAEThC,EAAQqD,QAAUrD,EAAQyJ,WAAazJ,EAAQmJ,kBAAgBE,EAE/D,IAAIK,GAAe,WAAc,QAASC,GAAiBrB,EAAQsB,GAAS,IAAK,GAAIlJ,GAAI,EAAGA,EAAIkJ,EAAM7D,OAAQrF,IAAK,CAAE,GAAImJ,GAAaD,EAAMlJ,EAAImJ,GAAWvI,WAAauI,EAAWvI,aAAc,EAAOuI,EAAWxI,cAAe,EAAU,SAAWwI,KAAYA,EAAWX,UAAW,GAAM/H,OAAOC,eAAekH,EAAQuB,EAAW9B,IAAK8B,IAAiB,MAAO,UAAUlB,EAAamB,EAAYC,GAAiJ,MAA9HD,IAAYH,EAAiBhB,EAAY/G,UAAWkI,GAAiBC,GAAaJ,EAAiBhB,EAAaoB,GAAqBpB,MAE5hBqB,EAAO,QAASzI,GAAIG,EAAQC,EAAUsI,GAA2B,OAAXvI,IAAiBA,EAASwI,SAAStI,UAAW,IAAIuI,GAAOhJ,OAAOiJ,yBAAyB1I,EAAQC,EAAW,QAAa0H,KAATc,EAAoB,CAAE,GAAIZ,GAASpI,OAAOkJ,eAAe3I,EAAS,OAAe,QAAX6H,MAAmB,GAAkChI,EAAIgI,EAAQ5H,EAAUsI,GAAoB,GAAI,SAAWE,GAAQ,MAAOA,GAAKnI,KAAgB,IAAIf,GAASkJ,EAAK5I,GAAK,QAAe8H,KAAXpI,EAA4C,MAAOA,GAAOL,KAAKqJ,IKlY5dK,EAAA/J,EAAA,GLsYI+I,EAAWd,EAAuB8B,GKrYtCC,EAAAhK,EAAA,GLyYIiK,EAAehC,EAAuB+B,GKxY1CE,EAAAlK,EAAA,GL4YImK,EAAclC,EAAuBiC,GK3YzCE,EAAApK,EAAA,IL+YIqK,EAAUpC,EAAuBmC,GK9YrCE,EAAAtK,EAAA,GLkZIuK,EAAWtC,EAAuBqC,GKjZtCE,EAAAxK,EAAA,GLqZIyK,EAASxC,EAAuBuC,GK/Y9BtB,EL2ZW,SAAUwB,GAGzB,QAASxB,KAGP,MAFAhB,GAAgBpI,KAAMoJ,GAEfZ,EAA2BxI,MAAOoJ,EAAW1C,WAAa5F,OAAOkJ,eAAeZ,IAAayB,MAAM7K,KAAMyF,YAwClH,MA7CAiD,GAAUU,EAAYwB,GAQtBvB,EAAaD,IACX1B,IAAK,SACL/F,MAAO,WKpaPgI,EAAAP,EAAA7H,UAAAmF,WAAA5F,OAAAkJ,eAAAZ,EAAA7H,WAAA,SAAAvB,MAAAO,KAAAP,MACAA,KAAK2E,WAAa,GAAI0F,GAAArH,QAAUQ,WAAWI,MAAM5D,KAAK8K,YLwatDpD,IAAK,QACL/F,MAAO,WKraP,OAAO,GAAAwI,GAAAnH,SAAY+H,OAAO/K,KAAK2B,SAAS,EAAAsH,EAAAjG,SAAOhD,KAAK+I,UAAW/I,KAAK2E,WAAWqG,cLya/EtD,IAAK,SACL/F,MAAO,SKvaFhB,EAAMgB,GACX,GAAIsJ,GAAYZ,EAAArH,QAAUH,MAAMlC,EAAM0J,EAAArH,QAAUN,MAAMwI,gBACrC,OAAbD,GACFjL,KAAK2E,WAAWsG,UAAUA,EAAWtJ,ML2avC+F,IAAK,WACL/F,MAAO,SKxaAwJ,EAAOzF,EAAQ/E,EAAMgB,GAC5B3B,KAAKoL,OAAOzK,EAAMgB,ML2alB+F,IAAK,WACL/F,MAAO,SKzaAwJ,EAAOxJ,EAAO0J,GACrB,GAAqB,gBAAV1J,IAAsBA,EAAM2J,SAAS,MAAO,CACrD,GAAIC,GAAQlB,EAAArH,QAAUL,OAAOU,EAAMwC,SACnC7F,MAAKkJ,OAAOsC,aAAaD,EAAiB,IAAVJ,EAAcnL,KAAOA,KAAKyL,MAC1DF,EAAMG,SAAS,EAAG/J,EAAMgK,MAAM,GAAI,QAElChC,GAAAP,EAAA7H,UAAAmF,WAAA5F,OAAAkJ,eAAAZ,EAAA7H,WAAA,WAAAvB,MAAAO,KAAAP,KAAemL,EAAOxJ,EAAO0J,OL8a1BjC,GKzcgBiB,EAAArH,QAAUG,MA+BnCiG,GAAW5E,MAAQ6F,EAAArH,QAAUN,MAAMkJ,ULibnC,IK7aMvI,GL6aM,SAAUwI,GK5apB,QAAAxI,GAAYyH,GAAS1C,EAAApI,KAAAqD,EAAA,IAAAyI,GAAAtD,EAAAxI,MAAAqD,EAAAqD,WAAA5F,OAAAkJ,eAAA3G,IAAA9C,KAAAP,KACb8K,GADa,OAEnBgB,GAAKC,SAFcD,EL8iBrB,MAjIApD,GAAUrF,EAAOwI,GAWjBxC,EAAahG,IACXqE,IAAK,QACL/F,MAAO,WK3aP,MATwB,OAApB3B,KAAK+L,MAAMC,QACbhM,KAAK+L,MAAMC,MAAQhM,KAAKiM,YAAY5B,EAAArH,QAAUE,MAAMgJ,OAAO,SAACF,EAAOG,GACjE,MAAsB,KAAlBA,EAAKzG,SACAsG,EAEAA,EAAMjB,OAAOoB,EAAKxK,QAASmH,EAAcqD,KAEjD,GAAAhC,GAAAnH,SAAa+H,OAAO,KAAMjC,EAAc9I,QAEtCA,KAAK+L,MAAMC,SLwblBtE,IAAK,WACL/F,MAAO,SKtbAwJ,EAAOzF,GACdiE,EAAAtG,EAAA9B,UAAAmF,WAAA5F,OAAAkJ,eAAA3G,EAAA9B,WAAA,WAAAvB,MAAAO,KAAAP,KAAemL,EAAOzF,GACtB1F,KAAK+L,YLybLrE,IAAK,WACL/F,MAAO,SKvbAwJ,EAAOzF,EAAQ/E,EAAMgB,GACxB+D,GAAU,IACV2E,EAAArH,QAAUH,MAAMlC,EAAM0J,EAAArH,QAAUN,MAAMmC,OACpCsG,EAAQzF,IAAW1F,KAAK0F,UAC1B1F,KAAKoL,OAAOzK,EAAMgB,GAGpBgI,EAAAtG,EAAA9B,UAAAmF,WAAA5F,OAAAkJ,eAAA3G,EAAA9B,WAAA,WAAAvB,MAAAO,KAAAP,KAAemL,EAAOiB,KAAKC,IAAI3G,EAAQ1F,KAAK0F,SAAWyF,EAAQ,GAAIxK,EAAMgB,GAE3E3B,KAAK+L,aL0bLrE,IAAK,WACL/F,MAAO,SKxbAwJ,EAAOxJ,EAAO0J,GACrB,GAAW,MAAPA,EAAa,MAAA1B,GAAAtG,EAAA9B,UAAAmF,WAAA5F,OAAAkJ,eAAA3G,EAAA9B,WAAA,WAAAvB,MAAAO,KAAAP,KAAsBmL,EAAOxJ,EAAO0J,EACrD,IAAqB,IAAjB1J,EAAM+D,OAAV,CACA,GAAI4G,GAAQ3K,EAAMuD,MAAM,MACpBqH,EAAOD,EAAME,OACbD,GAAK7G,OAAS,IACZyF,EAAQnL,KAAK0F,SAAW,GAA2B,MAAtB1F,KAAKyM,SAASC,KAC7C/C,EAAAtG,EAAA9B,UAAAmF,WAAA5F,OAAAkJ,eAAA3G,EAAA9B,WAAA,WAAAvB,MAAAO,KAAAP,KAAeoM,KAAKC,IAAIlB,EAAOnL,KAAK0F,SAAW,GAAI6G,GAEnDvM,KAAKyM,SAASC,KAAKhB,SAAS1L,KAAKyM,SAASC,KAAKhH,SAAU6G,GAE3DvM,KAAK+L,SAEP,IAAIR,GAAQvL,IACZsM,GAAMJ,OAAO,SAASf,EAAOwB,GAG3B,MAFApB,GAAQA,EAAMrG,MAAMiG,GAAO,GAC3BI,EAAMG,SAAS,EAAGiB,GACXA,EAAKjH,QACXyF,EAAQoB,EAAK7G,YL2bhBgC,IAAK,eACL/F,MAAO,SKzbI2C,EAAMsI,GACjB,GAAIC,GAAO7M,KAAKyM,SAASI,IACzBlD,GAAAtG,EAAA9B,UAAAmF,WAAA5F,OAAAkJ,eAAA3G,EAAA9B,WAAA,eAAAvB,MAAAO,KAAAP,KAAmBsE,EAAMsI,GACrBC,wBACFA,EAAKC,SAEP9M,KAAK+L,YL4bLrE,IAAK,SACL/F,MAAO,WKtbP,MAHyB,OAArB3B,KAAK+L,MAAMrG,SACb1F,KAAK+L,MAAMrG,OAASiE,EAAAtG,EAAA9B,UAAAmF,WAAA5F,OAAAkJ,eAAA3G,EAAA9B,WAAA,SAAAvB,MAAAO,KAAAP,MA1GH,GA4GZA,KAAK+L,MAAMrG,UL6blBgC,IAAK,eACL/F,MAAO,SK3bIsG,EAAQ2E,GACnBjD,EAAAtG,EAAA9B,UAAAmF,WAAA5F,OAAAkJ,eAAA3G,EAAA9B,WAAA,eAAAvB,MAAAO,KAAAP,KAAmBiI,EAAQ2E,GAC3B5M,KAAK+L,YL8bLrE,IAAK,WACL/F,MAAO,SK5bAoL,GACPpD,EAAAtG,EAAA9B,UAAAmF,WAAA5F,OAAAkJ,eAAA3G,EAAA9B,WAAA,WAAAvB,MAAAO,KAAAP,KAAe+M,GACf/M,KAAK+L,YL+bLrE,IAAK,OACL/F,MAAO,SK7bJwJ,GACH,MAAAxB,GAAAtG,EAAA9B,UAAAmF,WAAA5F,OAAAkJ,eAAA3G,EAAA9B,WAAA,OAAAvB,MAAAO,KAAAP,KAAkBmL,GAAO,MLgczBzD,IAAK,cACL/F,MAAO,SK9bGqL,GACVrD,EAAAtG,EAAA9B,UAAAmF,WAAA5F,OAAAkJ,eAAA3G,EAAA9B,WAAA,cAAAvB,MAAAO,KAAAP,KAAkBgN,GAClBhN,KAAK+L,YLicLrE,IAAK,QACL/F,MAAO,SK/bHwJ,GAAsB,GAAf8B,GAAexH,UAAAC,OAAA,OAAAsD,KAAAvD,UAAA,IAAAA,UAAA,EAC1B,IAAIwH,IAAoB,IAAV9B,GAAeA,GAASnL,KAAK0F,SAnIxB,GAmIoD,CACrE,GAAIsC,GAAQhI,KAAKgI,OACjB,OAAc,KAAVmD,GACFnL,KAAKkJ,OAAOsC,aAAaxD,EAAOhI,MACzBA,OAEPA,KAAKkJ,OAAOsC,aAAaxD,EAAOhI,KAAKyL,MAC9BzD,GAGT,GAAIyD,uFAAmBN,EAAO8B,EAE9B,OADAjN,MAAK+L,SACEN,MLscJpI,GK/iBWgH,EAAArH,QAAUK,MA6G9BA,GAAMwC,SAAW,QACjBxC,EAAMgC,QAAU,IAChBhC,EAAM6J,aAAe,QACrB7J,EAAM8J,iBAAkB1C,EAAAzH,QAASqH,EAAArH,QAAUG,MAAnBwH,EAAA3H,SLodxBrD,EKrcSmJ,gBLscTnJ,EKtcwByJ,aLucxBzJ,EKvc6CqD,QAATK,GL2c9B,SAAUzD,EAAQD,EAASO,GMxnBjC,GAAAkN,GAAAlN,EAAA,IACAmN,EAAAnN,EAAA,IACAyH,EAAAzH,EAAA,GACAoN,EAAApN,EAAA,IAGAqN,EAAAC,OAAAC,aAAA,GAGAC,EAAA,SAAAC,GAEA1H,MAAAC,QAAAyH,GACA3N,KAAA2N,MACG,MAAAA,GAAA1H,MAAAC,QAAAyH,OACH3N,KAAA2N,UAEA3N,KAAA2N,OAKAD,GAAAnM,UAAAwJ,OAAA,SAAAwB,EAAA5H,GACA,GAAAiJ,KACA,YAAArB,EAAA7G,OAAA1F,MACA4N,EAAA7C,OAAAwB,EACA,MAAA5H,GAAA,gBAAAA,IAAA7D,OAAA+M,KAAAlJ,GAAAe,OAAA,IACAkI,EAAAjJ,cAEA3E,KAAA8N,KAAAF,KAGAF,EAAAnM,UAAA,gBAAAmE,GACA,MAAAA,IAAA,EAAA1F,KACAA,KAAA8N,MAAoBC,OAAArI,KAGpBgI,EAAAnM,UAAAyM,OAAA,SAAAtI,EAAAf,GACA,GAAAe,GAAA,QAAA1F,KACA,IAAA4N,IAAeI,OAAAtI,EAIf,OAHA,OAAAf,GAAA,gBAAAA,IAAA7D,OAAA+M,KAAAlJ,GAAAe,OAAA,IACAkI,EAAAjJ,cAEA3E,KAAA8N,KAAAF,IAGAF,EAAAnM,UAAAuM,KAAA,SAAAF,GACA,GAAAzC,GAAAnL,KAAA2N,IAAAjI,OACAuI,EAAAjO,KAAA2N,IAAAxC,EAAA,EAEA,IADAyC,EAAAjG,GAAA,KAAyBiG,GACzB,gBAAAK,GAAA,CACA,mBAAAL,GAAA,wBAAAK,GAAA,OAEA,MADAjO,MAAA2N,IAAAxC,EAAA,IAA6B4C,OAAAE,EAAA,OAAAL,EAAA,QAC7B5N,IAIA,oBAAAiO,GAAA,cAAAL,EAAA7C,SACAI,GAAA,EAEA,iBADA8C,EAAAjO,KAAA2N,IAAAxC,EAAA,KAGA,MADAnL,MAAA2N,IAAAO,QAAAN,GACA5N,IAGA,IAAAqN,EAAAO,EAAAjJ,WAAAsJ,EAAAtJ,YAAA,CACA,mBAAAiJ,GAAA7C,QAAA,gBAAAkD,GAAAlD,OAGA,MAFA/K,MAAA2N,IAAAxC,EAAA,IAA+BJ,OAAAkD,EAAAlD,OAAA6C,EAAA7C,QAC/B,gBAAA6C,GAAAjJ,aAAA3E,KAAA2N,IAAAxC,EAAA,GAAAxG,WAAAiJ,EAAAjJ,YACA3E,IACO,oBAAA4N,GAAAI,QAAA,gBAAAC,GAAAD,OAGP,MAFAhO,MAAA2N,IAAAxC,EAAA,IAA+B6C,OAAAC,EAAAD,OAAAJ,EAAAI,QAC/B,gBAAAJ,GAAAjJ,aAAA3E,KAAA2N,IAAAxC,EAAA,GAAAxG,WAAAiJ,EAAAjJ,YACA3E,MASA,MALAmL,KAAAnL,KAAA2N,IAAAjI,OACA1F,KAAA2N,IAAAG,KAAAF,GAEA5N,KAAA2N,IAAAQ,OAAAhD,EAAA,EAAAyC,GAEA5N,MAGA0N,EAAAnM,UAAA6M,KAAA,WACA,GAAAH,GAAAjO,KAAA2N,IAAA3N,KAAA2N,IAAAjI,OAAA,EAIA,OAHAuI,MAAAD,SAAAC,EAAAtJ,YACA3E,KAAA2N,IAAAU,MAEArO,MAGA0N,EAAAnM,UAAA+M,OAAA,SAAAC,GACA,MAAAvO,MAAA2N,IAAAW,OAAAC,IAGAb,EAAAnM,UAAA8E,QAAA,SAAAkI,GACAvO,KAAA2N,IAAAtH,QAAAkI,IAGAb,EAAAnM,UAAAoE,IAAA,SAAA4I,GACA,MAAAvO,MAAA2N,IAAAhI,IAAA4I,IAGAb,EAAAnM,UAAAiN,UAAA,SAAAD,GACA,GAAAE,MAAAC,IAKA,OAJA1O,MAAAqG,QAAA,SAAAiH,IACAiB,EAAAjB,GAAAmB,EAAAC,GACAZ,KAAAR,MAEAmB,EAAAC,IAGAhB,EAAAnM,UAAA2K,OAAA,SAAAqC,EAAAI,GACA,MAAA3O,MAAA2N,IAAAzB,OAAAqC,EAAAI,IAGAjB,EAAAnM,UAAAqN,aAAA,WACA,MAAA5O,MAAAkM,OAAA,SAAAxG,EAAAmJ,GACA,MAAAA,GAAA9D,OACArF,EAAA4H,EAAA5H,OAAAmJ,GACKA,EAAAd,OACLrI,EAAAmJ,EAAAd,OAEArI,GACG,IAGHgI,EAAAnM,UAAAmE,OAAA,WACA,MAAA1F,MAAAkM,OAAA,SAAAxG,EAAAmJ,GACA,MAAAnJ,GAAA4H,EAAA5H,OAAAmJ,IACG,IAGHnB,EAAAnM,UAAAoK,MAAA,SAAAmD,EAAAC,GACAD,KAAA,EACA,gBAAAC,OAAAC,IAIA,KAHA,GAAArB,MACAsB,EAAA3B,EAAA4B,SAAAlP,KAAA2N,KACAxC,EAAA,EACAA,EAAA4D,GAAAE,EAAAE,WAAA,CACA,GAAAC,EACAjE,GAAA2D,EACAM,EAAAH,EAAAxD,KAAAqD,EAAA3D,IAEAiE,EAAAH,EAAAxD,KAAAsD,EAAA5D,GACAwC,EAAAG,KAAAsB,IAEAjE,GAAAmC,EAAA5H,OAAA0J,GAEA,UAAA1B,GAAAC,IAIAD,EAAAnM,UAAA8N,QAAA,SAAAC,GAIA,IAHA,GAAAC,GAAAjC,EAAA4B,SAAAlP,KAAA2N,KACA6B,EAAAlC,EAAA4B,SAAAI,EAAA3B,KACA3B,EAAA,GAAA0B,GACA6B,EAAAJ,WAAAK,EAAAL,WACA,cAAAK,EAAAC,WACAzD,EAAA8B,KAAA0B,EAAA/D,YACK,eAAA8D,EAAAE,WACLzD,EAAA8B,KAAAyB,EAAA9D,YACK,CACL,GAAA/F,GAAA0G,KAAAC,IAAAkD,EAAAG,aAAAF,EAAAE,cACAC,EAAAJ,EAAA9D,KAAA/F,GACAkK,EAAAJ,EAAA/D,KAAA/F,EACA,oBAAAkK,GAAA5B,OAAA,CACA,GAAAJ,KACA,iBAAA+B,GAAA3B,OACAJ,EAAAI,OAAAtI,EAEAkI,EAAA7C,OAAA4E,EAAA5E,MAGA,IAAApG,GAAA2I,EAAA3I,WAAA0K,QAAAM,EAAAhL,WAAAiL,EAAAjL,WAAA,gBAAAgL,GAAA3B,OACArJ,KAAAiJ,EAAAjJ,cACAqH,EAAA8B,KAAAF,OAGO,gBAAAgC,GAAA,wBAAAD,GAAA3B,QACPhC,EAAA8B,KAAA8B,GAIA,MAAA5D,GAAAoC,QAGAV,EAAAnM,UAAAsO,OAAA,SAAAP,GACA,GAAAtD,GAAA,GAAA0B,GAAA1N,KAAA2N,IAAAhC,QAKA,OAJA2D,GAAA3B,IAAAjI,OAAA,IACAsG,EAAA8B,KAAAwB,EAAA3B,IAAA,IACA3B,EAAA2B,IAAA3B,EAAA2B,IAAAkC,OAAAP,EAAA3B,IAAAhC,MAAA,KAEAK,GAGA0B,EAAAnM,UAAA6L,KAAA,SAAAkC,EAAAnE,GACA,GAAAnL,KAAA2N,MAAA2B,EAAA3B,IACA,UAAAD,EAEA,IAAAoC,IAAA9P,KAAAsP,GAAA3J,IAAA,SAAAqG,GACA,MAAAA,GAAArG,IAAA,SAAA2H,GACA,SAAAA,EAAAvC,OACA,sBAAAuC,GAAAvC,OAAAuC,EAAAvC,OAAAwC,CAEA,IAAAwC,GAAA/D,IAAAsD,EAAA,WACA,UAAArI,OAAA,iBAAA8I,EAAA,mBACKC,KAAA,MAELhE,EAAA,GAAA0B,GACAuC,EAAA7C,EAAA0C,EAAA,GAAAA,EAAA,GAAA3E,GACAoE,EAAAjC,EAAA4B,SAAAlP,KAAA2N,KACA6B,EAAAlC,EAAA4B,SAAAI,EAAA3B,IA6BA,OA5BAsC,GAAA5J,QAAA,SAAA6J,GAEA,IADA,GAAAxK,GAAAwK,EAAA,GAAAxK,OACAA,EAAA,IACA,GAAAyK,GAAA,CACA,QAAAD,EAAA,IACA,IAAA9C,GAAAgD,OACAD,EAAA/D,KAAAC,IAAAmD,EAAAE,aAAAhK,GACAsG,EAAA8B,KAAA0B,EAAA/D,KAAA0E,GACA,MACA,KAAA/C,GAAAiD,OACAF,EAAA/D,KAAAC,IAAA3G,EAAA6J,EAAAG,cACAH,EAAA9D,KAAA0E,GACAnE,EAAA,OAAAmE,EACA,MACA,KAAA/C,GAAAkD,MACAH,EAAA/D,KAAAC,IAAAkD,EAAAG,aAAAF,EAAAE,aAAAhK,EACA,IAAAiK,GAAAJ,EAAA9D,KAAA0E,GACAP,EAAAJ,EAAA/D,KAAA0E,EACA9C,GAAAsC,EAAA5E,OAAA6E,EAAA7E,QACAiB,EAAAgC,OAAAmC,EAAA7C,EAAA3I,WAAAyI,KAAAuC,EAAAhL,WAAAiL,EAAAjL,aAEAqH,EAAA8B,KAAA8B,GAAA,OAAAO,GAIAzK,GAAAyK,KAGAnE,EAAAoC,QAGAV,EAAAnM,UAAAgP,SAAA,SAAAhC,EAAAiC,GACAA,KAAA,IAIA,KAHA,GAAAvB,GAAA3B,EAAA4B,SAAAlP,KAAA2N,KACAhB,EAAA,GAAAe,GACArN,EAAA,EACA4O,EAAAE,WAAA,CACA,cAAAF,EAAAQ,WAAA,MACA,IAAAE,GAAAV,EAAAwB,OACA3B,EAAAxB,EAAA5H,OAAAiK,GAAAV,EAAAS,aACAvE,EAAA,gBAAAwE,GAAA5E,OACA4E,EAAA5E,OAAA2F,QAAAF,EAAA1B,MAAA,CACA,IAAA3D,EAAA,EACAwB,EAAAmB,KAAAmB,EAAAxD,YACK,IAAAN,EAAA,EACLwB,EAAAmB,KAAAmB,EAAAxD,KAAAN,QACK,CACL,IAAuD,IAAvDoD,EAAA5B,EAAAsC,EAAAxD,KAAA,GAAA9G,eAAuDtE,GACvD,MAEAA,IAAA,EACAsM,EAAA,GAAAe,IAGAf,EAAAjH,SAAA,GACA6I,EAAA5B,KAAsBtM,IAItBqN,EAAAnM,UAAAoP,UAAA,SAAArB,EAAAsB,GAEA,GADAA,MACA,gBAAAtB,GACA,MAAAtP,MAAA6Q,kBAAAvB,EAAAsB,EAKA,KAHA,GAAArB,GAAAjC,EAAA4B,SAAAlP,KAAA2N,KACA6B,EAAAlC,EAAA4B,SAAAI,EAAA3B,KACA3B,EAAA,GAAA0B,GACA6B,EAAAJ,WAAAK,EAAAL,WACA,cAAAI,EAAAE,aAAAmB,GAAA,WAAApB,EAAAC,WAEK,cAAAD,EAAAC,WACLzD,EAAA8B,KAAA0B,EAAA/D,YACK,CACL,GAAA/F,GAAA0G,KAAAC,IAAAkD,EAAAG,aAAAF,EAAAE,cACAC,EAAAJ,EAAA9D,KAAA/F,GACAkK,EAAAJ,EAAA/D,KAAA/F,EACA,IAAAiK,EAAA,OAEA,QACOC,GAAA,OACP5D,EAAA8B,KAAA8B,GAGA5D,EAAAgC,OAAAtI,EAAA4H,EAAA3I,WAAAgM,UAAAhB,EAAAhL,WAAAiL,EAAAjL,WAAAiM,QAdA5E,GAAAgC,OAAAV,EAAA5H,OAAA6J,EAAA9D,QAkBA,OAAAO,GAAAoC,QAGAV,EAAAnM,UAAAsP,kBAAA,SAAA1F,EAAAyF,GACAA,KAGA,KAFA,GAAArB,GAAAjC,EAAA4B,SAAAlP,KAAA2N,KACAmD,EAAA,EACAvB,EAAAJ,WAAA2B,GAAA3F,GAAA,CACA,GAAAzF,GAAA6J,EAAAG,aACAqB,EAAAxB,EAAAE,UACAF,GAAA9D,OACA,WAAAsF,GAGK,WAAAA,IAAAD,EAAA3F,IAAAyF,KACLzF,GAAAzF,GAEAoL,GAAApL,GALAyF,GAAAiB,KAAAC,IAAA3G,EAAAyF,EAAA2F,GAOA,MAAA3F,IAIAvL,EAAAD,QAAA+N,GN+nBM,SAAU9N,EAAQD,EAASO,GAEjC,YAmBA,SAASiI,GAAuBZ,GAAO,MAAOA,IAAOA,EAAInG,WAAamG,GAAQvE,QAASuE,GAEvF,QAASa,GAAgBC,EAAUC,GAAe,KAAMD,YAAoBC,IAAgB,KAAM,IAAIC,WAAU,qCAEhH,QAASC,GAA2BzI,EAAMQ,GAAQ,IAAKR,EAAQ,KAAM,IAAI0I,gBAAe,4DAAgE,QAAOlI,GAAyB,gBAATA,IAAqC,kBAATA,GAA8BR,EAAPQ,EAElO,QAASmI,GAAUC,EAAUC,GAAc,GAA0B,kBAAfA,IAA4C,OAAfA,EAAuB,KAAM,IAAIL,WAAU,iEAAoEK,GAAeD,GAASpH,UAAYT,OAAO6B,OAAOiG,GAAcA,EAAWrH,WAAasF,aAAelF,MAAOgH,EAAU1H,YAAY,EAAO4H,UAAU,EAAM7H,cAAc,KAAe4H,IAAY9H,OAAO2F,eAAiB3F,OAAO2F,eAAekC,EAAUC,GAAcD,EAASjC,UAAYkC,GAtBje9H,OAAOC,eAAepB,EAAS,cAC7BgC,OAAO,GAGT,IAAI0H,GAAe,WAAc,QAASC,GAAiBrB,EAAQsB,GAAS,IAAK,GAAIlJ,GAAI,EAAGA,EAAIkJ,EAAM7D,OAAQrF,IAAK,CAAE,GAAImJ,GAAaD,EAAMlJ,EAAImJ,GAAWvI,WAAauI,EAAWvI,aAAc,EAAOuI,EAAWxI,cAAe,EAAU,SAAWwI,KAAYA,EAAWX,UAAW,GAAM/H,OAAOC,eAAekH,EAAQuB,EAAW9B,IAAK8B,IAAiB,MAAO,UAAUlB,EAAamB,EAAYC,GAAiJ,MAA9HD,IAAYH,EAAiBhB,EAAY/G,UAAWkI,GAAiBC,GAAaJ,EAAiBhB,EAAaoB,GAAqBpB,MAE5hBqB,EAAO,QAASzI,GAAIG,EAAQC,EAAUsI,GAA2B,OAAXvI,IAAiBA,EAASwI,SAAStI,UAAW,IAAIuI,GAAOhJ,OAAOiJ,yBAAyB1I,EAAQC,EAAW,QAAa0H,KAATc,EAAoB,CAAE,GAAIZ,GAASpI,OAAOkJ,eAAe3I,EAAS,OAAe,QAAX6H,MAAmB,GAAkChI,EAAIgI,EAAQ5H,EAAUsI,GAAoB,GAAI,SAAWE,GAAQ,MAAOA,GAAKnI,KAAgB,IAAIf,GAASkJ,EAAK5I,GAAK,QAAe8H,KAAXpI,EAA4C,MAAOA,GAAOL,KAAKqJ,IO98B5dc,EAAAxK,EAAA,GPk9BIyK,EAASxC,EAAuBuC,GOj9BpCN,EAAAlK,EAAA,GPq9BImK,EAAclC,EAAuBiC,GOl9BnC9G,EP49BO,SAAU0N,GAGrB,QAAS1N,KAGP,MAFA8E,GAAgBpI,KAAMsD,GAEfkF,EAA2BxI,MAAOsD,EAAOoD,WAAa5F,OAAOkJ,eAAe1G,IAASuH,MAAM7K,KAAMyF,YA0C1G,MA/CAiD,GAAUpF,EAAQ0N,GAQlB3H,EAAa/F,IACXoE,IAAK,WACL/F,MAAO,SOx9BAwJ,EAAOzF,EAAQ/E,EAAMgB,GAC5B,GAAI2B,EAAO2N,QAAQjR,KAAKmJ,QAAQtD,SAAUlF,GAAQ,GAAK0J,EAAArH,QAAUH,MAAMlC,EAAM0J,EAAArH,QAAUN,MAAMwO,MAAO,CAClG,GAAI5M,GAAOtE,KAAKmR,QAAQhG,EAAOzF,EAC3B/D,IACF2C,EAAK8M,KAAKzQ,EAAMgB,OAGlBgI,GAAArG,EAAA/B,UAAAmF,WAAA5F,OAAAkJ,eAAA1G,EAAA/B,WAAA,WAAAvB,MAAAO,KAAAP,KAAemL,EAAOzF,EAAQ/E,EAAMgB,MP49BtC+F,IAAK,WACL/F,MAAO,SOz9BAoL,GAEP,GADApD,EAAArG,EAAA/B,UAAAmF,WAAA5F,OAAAkJ,eAAA1G,EAAA/B,WAAA,WAAAvB,MAAAO,KAAAP,KAAe+M,GACX/M,KAAKkJ,iBAAkB5F,IACvBA,EAAO2N,QAAQjR,KAAKmJ,QAAQtD,SAAU7F,KAAKkJ,OAAOC,QAAQtD,UAAY,EAAG,CAC3E,GAAIqD,GAASlJ,KAAKkJ,OAAOiI,QAAQnR,KAAK8Q,SAAU9Q,KAAK0F,SACrD1F,MAAKqR,aAAanI,GAClBA,EAAOkI,KAAKpR,YP49Bd0H,IAAK,UACL/F,MAAO,SO5/BM5B,EAAMuP,GACnB,GAAIgC,GAAYhO,EAAOiO,MAAMb,QAAQ3Q,GACjCyR,EAAalO,EAAOiO,MAAMb,QAAQpB,EACtC,OAAIgC,IAAa,GAAKE,GAAc,EAC3BF,EAAYE,EACVzR,IAASuP,EACX,EACEvP,EAAOuP,GACR,EAED,MPigCJhM,GO5gCY+G,EAAArH,QAAUM,OAoC/BA,GAAO6J,iBAAmB7J,EAAQ+G,EAAArH,QAAUG,MAAnBwH,EAAA3H,SAEzBM,EAAOiO,OACL,SAAU,SACV,YAAa,SAAU,SAAU,OAAQ,SACzC,OAAQ,QP4+BV5R,EAAQqD,QOx+BOM,GP4+BT,SAAU1D,EAAQD,EAASO,GAEjC,YAoDA,SAASiI,GAAuBZ,GAAO,MAAOA,IAAOA,EAAInG,WAAamG,GAAQvE,QAASuE,GAEvF,QAASkK,GAAgBlK,EAAKG,EAAK/F,GAAiK,MAApJ+F,KAAOH,GAAOzG,OAAOC,eAAewG,EAAKG,GAAO/F,MAAOA,EAAOV,YAAY,EAAMD,cAAc,EAAM6H,UAAU,IAAkBtB,EAAIG,GAAO/F,EAAgB4F,EAE3M,QAASa,GAAgBC,EAAUC,GAAe,KAAMD,YAAoBC,IAAgB,KAAM,IAAIC,WAAU,qCQruBhH,QAASmJ,GAAaC,EAAWC,GAS/B,GARAA,GAAa,EAAA3I,EAAAjG,UAAO,GAClB2O,UAAWA,EACX1R,SACE4R,WAAW,EACXC,UAAU,EACVC,SAAS,IAEVH,GACEA,EAAWI,OAASJ,EAAWI,QAAUC,EAAMC,SAASF,OAI3D,GADAJ,EAAWI,MAAQC,EAAME,OAAN,UAAuBP,EAAWI,OAC7B,MAApBJ,EAAWI,MACb,KAAM,IAAI/K,OAAJ,iBAA2B2K,EAAWI,MAAtC,8BAJRJ,GAAWI,MAAXI,EAAApP,OAOF,IAAIqP,IAAc,EAAApJ,EAAAjG,UAAO,KAAU4O,EAAWI,MAAME,WACnDG,EAAaT,GAAYvL,QAAQ,SAASiM,GACzCA,EAAOrS,QAAUqS,EAAOrS,YACxBa,OAAO+M,KAAKyE,EAAOrS,SAASoG,QAAQ,SAASzG,IACZ,IAA3B0S,EAAOrS,QAAQL,KACjB0S,EAAOrS,QAAQL,UAIrB,IAAI2S,GAAczR,OAAO+M,KAAKwE,EAAYpS,SAAS4P,OAAO/O,OAAO+M,KAAK+D,EAAW3R,UAC7EuS,EAAeD,EAAYrG,OAAO,SAASoG,EAAQ3R,GACrD,GAAI8R,GAAcR,EAAME,OAAN,WAAwBxR,EAM1C,OALmB,OAAf8R,EACFC,EAAMC,MAAN,eAA2BhS,EAA3B,4CAEA2R,EAAO3R,GAAQ8R,EAAYP,aAEtBI,MAqBT,OAlB0B,OAAtBV,EAAW3R,SAAmB2R,EAAW3R,QAAQ2S,SACjDhB,EAAW3R,QAAQ2S,QAAQ/L,cAAgB/F,SAC7C8Q,EAAW3R,QAAQ2S,SACjBjB,UAAWC,EAAW3R,QAAQ2S,UAGlChB,GAAa,EAAA3I,EAAAjG,UAAO,KAAUiP,EAAMC,UAAYjS,QAASuS,GAAgBH,EAAaT,IACrF,SAAU,YAAa,sBAAsBvL,QAAQ,SAASqB,GAC9B,gBAApBkK,GAAWlK,KACpBkK,EAAWlK,GAAOmL,SAASC,cAAclB,EAAWlK,OAGxDkK,EAAW3R,QAAUa,OAAO+M,KAAK+D,EAAW3R,SAASiM,OAAO,SAASoG,EAAQ3R,GAI3E,MAHIiR,GAAW3R,QAAQU,KACrB2R,EAAO3R,GAAQiR,EAAW3R,QAAQU,IAE7B2R,OAEFV,EAKT,QAASmB,GAAOC,EAAUC,EAAQ9H,EAAOqB,GACvC,GAAIxM,KAAK4H,QAAQsL,SAAWlT,KAAKmT,aAAeF,IAAWG,EAAApQ,QAAQqQ,QAAQC,KACzE,MAAO,IAAAnJ,GAAAnH,OAET,IAAIuQ,GAAiB,MAATpI,EAAgB,KAAOnL,KAAKwT,eACpCC,EAAWzT,KAAK0T,OAAO1H,MACvB2H,EAASX,GAUb,IATa,MAATO,KACY,IAAVpI,IAAgBA,EAAQoI,EAAMpI,OACrB,MAATqB,EACF+G,EAAQK,EAAWL,EAAOI,EAAQV,GACf,IAAVzG,IACT+G,EAAQK,EAAWL,EAAOpI,EAAOqB,EAAOyG,IAE1CjT,KAAK6T,aAAaN,EAAOH,EAAApQ,QAAQqQ,QAAQS,SAEvCH,EAAOjO,SAAW,EAAG,IAAAqO,GACnBC,GAAQZ,EAAApQ,QAAQiR,OAAOC,YAAaP,EAAQF,EAAUR,EAE1D,KADAc,EAAA/T,KAAKmU,SAAQC,KAAbvJ,MAAAkJ,GAAkBX,EAAApQ,QAAQiR,OAAOI,eAAjCxE,OAAmDmE,IAC/Cf,IAAWG,EAAApQ,QAAQqQ,QAAQS,OAAQ,IAAAQ,IACrCA,EAAAtU,KAAKmU,SAAQC,KAAbvJ,MAAAyJ,EAAqBN,IAGzB,MAAOL,GAGT,QAASY,GAASpJ,EAAOzF,EAAQ/E,EAAMgB,EAAOsR,GAC5C,GAAIlK,KAwBJ,OAvB2B,gBAAhBoC,GAAMA,OAA8C,gBAAjBA,GAAMzF,OAE5B,gBAAXA,IACTuN,EAAStR,EAAOA,EAAQhB,EAAMA,EAAO+E,EAAQA,EAASyF,EAAMzF,OAAQyF,EAAQA,EAAMA,QAElFzF,EAASyF,EAAMzF,OAAQyF,EAAQA,EAAMA,OAEZ,gBAAXzF,KAChBuN,EAAStR,EAAOA,EAAQhB,EAAMA,EAAO+E,EAAQA,EAAS,GAGpC,gBAAhB,KAAO/E,EAAP,YAAA6T,EAAO7T,KACToI,EAAUpI,EACVsS,EAAStR,GACgB,gBAAThB,KACH,MAATgB,EACFoH,EAAQpI,GAAQgB,EAEhBsR,EAAStS,GAIbsS,EAASA,GAAUG,EAAApQ,QAAQqQ,QAAQoB,KAC3BtJ,EAAOzF,EAAQqD,EAASkK,GAGlC,QAASW,GAAWL,EAAOpI,EAAOzF,EAAQuN,GACxC,GAAa,MAATM,EAAe,MAAO,KAC1B,IAAIzE,UAAOC,QACX,IAAI5D,uBAAwB,IAAAuJ,IACVnB,EAAMpI,MAAOoI,EAAMpI,MAAQoI,EAAM7N,QAAQC,IAAI,SAASgP,GACpE,MAAOxJ,GAAM0F,kBAAkB8D,EAAK1B,IAAWG,EAAApQ,QAAQqQ,QAAQC,QAFvCsB,EAAAC,EAAAH,EAAA,EACzB5F,GADyB8F,EAAA,GAClB7F,EADkB6F,EAAA,OAIrB,IAAAE,IACWvB,EAAMpI,MAAOoI,EAAMpI,MAAQoI,EAAM7N,QAAQC,IAAI,SAASgP,GACpE,MAAIA,GAAMxJ,GAAUwJ,IAAQxJ,GAAS8H,IAAWG,EAAApQ,QAAQqQ,QAAQC,KAAcqB,EAC1EjP,GAAU,EACLiP,EAAMjP,EAEN0G,KAAK2I,IAAI5J,EAAOwJ,EAAMjP,KAN5BsP,EAAAH,EAAAC,EAAA,EACJhG,GADIkG,EAAA,GACGjG,EADHiG,EAAA,GAUP,MAAO,IAAAC,GAAAC,MAAUpG,EAAOC,EAAMD,GR6iBhChO,OAAOC,eAAepB,EAAS,cAC7BgC,OAAO,IAEThC,EAAQqD,QAAUrD,EAAQ4U,SAAW5U,EAAQ+R,iBAAe1I,EAE5D,IAAIwL,GAA4B,kBAAXW,SAAoD,gBAApBA,QAAOjG,SAAwB,SAAU3H,GAAO,aAAcA,IAAS,SAAUA,GAAO,MAAOA,IAAyB,kBAAX4N,SAAyB5N,EAAIV,cAAgBsO,QAAU5N,IAAQ4N,OAAO5T,UAAY,eAAkBgG,IAElQsN,EAAiB,WAAc,QAASO,GAAc/N,EAAKhH,GAAK,GAAIgV,MAAeC,GAAK,EAAUC,GAAK,EAAWC,MAAKxM,EAAW,KAAM,IAAK,GAAiCyM,GAA7BjQ,EAAK6B,EAAI8N,OAAOjG,cAAmBoG,GAAMG,EAAKjQ,EAAGiG,QAAQiK,QAAoBL,EAAKvH,KAAK2H,EAAG9T,QAAYtB,GAAKgV,EAAK3P,SAAWrF,GAA3DiV,GAAK,IAAoE,MAAOK,GAAOJ,GAAK,EAAMC,EAAKG,EAAO,QAAU,KAAWL,GAAM9P,EAAW,QAAGA,EAAW,SAAO,QAAU,GAAI+P,EAAI,KAAMC,IAAQ,MAAOH,GAAQ,MAAO,UAAUhO,EAAKhH,GAAK,GAAI4F,MAAMC,QAAQmB,GAAQ,MAAOA,EAAY,IAAI8N,OAAOjG,WAAYpO,QAAOuG,GAAQ,MAAO+N,GAAc/N,EAAKhH,EAAa,MAAM,IAAIkI,WAAU,4DAEllBc,EAAe,WAAc,QAASC,GAAiBrB,EAAQsB,GAAS,IAAK,GAAIlJ,GAAI,EAAGA,EAAIkJ,EAAM7D,OAAQrF,IAAK,CAAE,GAAImJ,GAAaD,EAAMlJ,EAAImJ,GAAWvI,WAAauI,EAAWvI,aAAc,EAAOuI,EAAWxI,cAAe,EAAU,SAAWwI,KAAYA,EAAWX,UAAW,GAAM/H,OAAOC,eAAekH,EAAQuB,EAAW9B,IAAK8B,IAAiB,MAAO,UAAUlB,EAAamB,EAAYC,GAAiJ,MAA9HD,IAAYH,EAAiBhB,EAAY/G,UAAWkI,GAAiBC,GAAaJ,EAAiBhB,EAAaoB,GAAqBpB,KQ3iChiBpI,GAAA,GACA,IAAAgK,GAAAhK,EAAA,GRgjCIiK,EAAehC,EAAuB+B,GQ/iC1C0L,EAAA1V,EAAA,IRmjCI2V,EAAW1N,EAAuByN,GQljCtCE,EAAA5V,EAAA,GRsjCIkT,EAAYjL,EAAuB2N,GQrjCvCC,EAAA7V,EAAA,GRyjCI8V,EAAW7N,EAAuB4N,GQxjCtC3L,EAAAlK,EAAA,GR4jCImK,EAAclC,EAAuBiC,GQ3jCzC6K,EAAA/U,EAAA,IR+jCI+V,EAAc9N,EAAuB8M,GQ9jCzChL,EAAA/J,EAAA,GRkkCI+I,EAAWd,EAAuB8B,GQjkCtCiM,EAAAhW,EAAA,IRqkCIiW,EAAWhO,EAAuB+N,GQpkCtCE,EAAAlW,EAAA,IRwkCIkS,EAAUjK,EAAuBiO,GQtkCjC1D,GAAQ,EAAAyD,EAAAnT,SAAO,SAGbiP,ER6kCM,WQjiCV,QAAAA,GAAYN,GAAyB,GAAA7F,GAAA9L,KAAd4H,EAAcnC,UAAAC,OAAA,OAAAsD,KAAAvD,UAAA,GAAAA,UAAA,KAGnC,IAHmC2C,EAAApI,KAAAiS,GACnCjS,KAAK4H,QAAU8J,EAAaC,EAAW/J,GACvC5H,KAAK2R,UAAY3R,KAAK4H,QAAQ+J,UACR,MAAlB3R,KAAK2R,UACP,MAAOe,GAAMC,MAAM,0BAA2BhB,EAE5C3R,MAAK4H,QAAQ8K,OACfT,EAAMS,MAAM1S,KAAK4H,QAAQ8K,MAE3B,IAAI2D,GAAOrW,KAAK2R,UAAU2E,UAAUC,MACpCvW,MAAK2R,UAAU6E,UAAUC,IAAI,gBAC7BzW,KAAK2R,UAAU2E,UAAY,GAC3BtW,KAAK2R,UAAU+E,QAAU1W,KACzBA,KAAKP,KAAOO,KAAK2W,aAAa,aAC9B3W,KAAKP,KAAK+W,UAAUC,IAAI,YACxBzW,KAAKP,KAAKmX,aAAa,cAAc,GACrC5W,KAAK6W,mBAAqB7W,KAAK4H,QAAQiP,oBAAsB7W,KAAKP,KAClEO,KAAKmU,QAAU,GAAAf,GAAApQ,QACfhD,KAAK8W,OAASzM,EAAArH,QAAUL,OAAO3C,KAAKP,MAClC0U,QAASnU,KAAKmU,QACd4C,UAAW/W,KAAK4H,QAAQmB,UAE1B/I,KAAK0T,OAAS,GAAAmC,GAAA7S,QAAWhD,KAAK8W,QAC9B9W,KAAKgX,UAAY,GAAAf,GAAAjT,QAAchD,KAAK8W,OAAQ9W,KAAKmU,SACjDnU,KAAKgS,MAAQ,GAAIhS,MAAK4H,QAAQoK,MAAMhS,KAAMA,KAAK4H,SAC/C5H,KAAK8R,SAAW9R,KAAKgS,MAAMiF,UAAU,YACrCjX,KAAK6R,UAAY7R,KAAKgS,MAAMiF,UAAU,aACtCjX,KAAK+R,QAAU/R,KAAKgS,MAAMiF,UAAU,WACpCjX,KAAKgS,MAAMkF,OACXlX,KAAKmU,QAAQgD,GAAG/D,EAAApQ,QAAQiR,OAAOI,cAAe,SAAC+C,GACzCA,IAAShE,EAAApQ,QAAQiR,OAAOC,aAC1BpI,EAAKrM,KAAK+W,UAAUa,OAAO,WAAYvL,EAAK4H,OAAO4D,aAGvDtX,KAAKmU,QAAQgD,GAAG/D,EAAApQ,QAAQiR,OAAOsD,cAAe,SAACtE,EAAQuE,GACrD,GAAIjE,GAAQzH,EAAKkL,UAAUS,UACvBtM,EAAQoI,GAA0B,IAAjBA,EAAM7N,OAAe6N,EAAMpI,UAAQnC,EACxD+J,GAAOxS,KAAPuL,EAAkB,WAChB,MAAOA,GAAK4H,OAAOgE,OAAO,KAAMF,EAAWrM,IAC1C8H,IAEL,IAAI0E,GAAW3X,KAAK6R,UAAU+F,QAAf,yDAA8EvB,EAA9E,oBACfrW,MAAK6X,YAAYF,GACjB3X,KAAK+R,QAAQ+F,QACT9X,KAAK4H,QAAQmQ,aACf/X,KAAKP,KAAKmX,aAAa,mBAAoB5W,KAAK4H,QAAQmQ,aAEtD/X,KAAK4H,QAAQoQ,UACfhY,KAAKiY,UR+9CT,MA7eA5O,GAAa4I,EAAO,OAClBvK,IAAK,QACL/F,MAAO,SQ/kCIuW,IACG,IAAVA,IACFA,EAAQ,OAEV/B,EAAAnT,QAAOmV,MAAMD,MRklCbxQ,IAAK,OACL/F,MAAO,SQhlCGwC,GACV,MAAOA,GAAKuS,SAAWrM,EAAArH,QAAUJ,KAAKuB,MRmlCtCuD,IAAK,SACL/F,MAAO,SQjlCKhB,GAIZ,MAH0B,OAAtBX,KAAKoY,QAAQzX,IACf+R,EAAMC,MAAN,iBAA6BhS,EAA7B,qCAEKX,KAAKoY,QAAQzX,MRolCpB+G,IAAK,WACL/F,MAAO,SQllCO0W,EAAMpQ,GAA2B,GAAAjB,GAAAhH,KAAnBsY,EAAmB7S,UAAAC,OAAA,OAAAsD,KAAAvD,UAAA,IAAAA,UAAA,EAC/C,IAAoB,gBAAT4S,GAAmB,CAC5B,GAAI1X,GAAO0X,EAAKvS,UAAYuS,EAAKxS,QACb,iBAATlF,GAETX,KAAK8C,SAAS,WAAanC,EAAM0X,EAAMpQ,GAEvCnH,OAAO+M,KAAKwK,GAAMhS,QAAQ,SAACqB,GACzBV,EAAKlE,SAAS4E,EAAK2Q,EAAK3Q,GAAMO,SAIR,OAAtBjI,KAAKoY,QAAQC,IAAkBC,GACjC5F,EAAM6F,KAAN,eAA0BF,EAA1B,QAAuCpQ,GAEzCjI,KAAKoY,QAAQC,GAAQpQ,GAChBoQ,EAAKG,WAAW,WAAaH,EAAKG,WAAW,cAC1B,aAApBvQ,EAAOpC,SACTwE,EAAArH,QAAUF,SAASmF,GACVoQ,EAAKG,WAAW,YAAyC,kBAApBvQ,GAAOnF,UACrDmF,EAAOnF,eRqpCbuG,EAAa4I,IACXvK,IAAK,eACL/F,MAAO,SQ9lCIgQ,GAA2B,GAAhB8G,GAAgBhT,UAAAC,OAAA,OAAAsD,KAAAvD,UAAA,GAAAA,UAAA,GAAN,IAChC,IAAyB,gBAAdkM,GAAwB,CACjC,GAAI3L,GAAY2L,CAChBA,GAAYkB,SAAS6F,cAAc,OACnC/G,EAAU6E,UAAUC,IAAIzQ,GAG1B,MADAhG,MAAK2R,UAAUnG,aAAamG,EAAW8G,GAChC9G,KRmmCPjK,IAAK,OACL/F,MAAO,WQhmCP3B,KAAKgX,UAAU2B,SAAS,SRomCxBjR,IAAK,aACL/F,MAAO,SQlmCEwJ,EAAOzF,EAAQuN,GAAQ,GAAA2F,GAAA5Y,KAAA6Y,EACJtE,EAASpJ,EAAOzF,EAAQuN,GADpB6F,EAAAjE,EAAAgE,EAAA,EAEhC,OADC1N,GAD+B2N,EAAA,GACxBpT,EADwBoT,EAAA,GACd7F,EADc6F,EAAA,GAEzB/F,EAAOxS,KAAKP,KAAM,WACvB,MAAO4Y,GAAKlF,OAAOqF,WAAW5N,EAAOzF,IACpCuN,EAAQ9H,GAAQ,EAAEzF,MR8mCrBgC,IAAK,UACL/F,MAAO,WQ3mCP3B,KAAKgZ,QAAO,MR+mCZtR,IAAK,SACL/F,MAAO,WQ7mCc,GAAhBsX,KAAgBxT,UAAAC,OAAA,OAAAsD,KAAAvD,UAAA,KAAAA,UAAA,EACrBzF,MAAK8W,OAAOkC,OAAOC,GACnBjZ,KAAK2R,UAAU6E,UAAUa,OAAO,eAAgB4B,MRknChDvR,IAAK,QACL/F,MAAO,WQ/mCP,GAAIuX,GAAYlZ,KAAK6W,mBAAmBqC,SACxClZ,MAAKgX,UAAUmC,QACfnZ,KAAK6W,mBAAmBqC,UAAYA,EACpClZ,KAAKoZ,oBRmnCL1R,IAAK,SACL/F,MAAO,SQjnCFhB,EAAMgB,GAAqC,GAAA0X,GAAArZ,KAA9BiT,EAA8BxN,UAAAC,OAAA,OAAAsD,KAAAvD,UAAA,GAAAA,UAAA,GAArB2N,EAAApQ,QAAQqQ,QAAQoB,GAC3C,OAAO1B,GAAOxS,KAAKP,KAAM,WACvB,GAAIuT,GAAQ8F,EAAK7F,cAAa,GAC1BG,EAAS,GAAAxJ,GAAAnH,OACb,IAAa,MAATuQ,EACF,MAAOI,EACF,IAAItJ,EAAArH,QAAUH,MAAMlC,EAAM0J,EAAArH,QAAUN,MAAMmC,OAC/C8O,EAAS0F,EAAK3F,OAAO4F,WAAW/F,EAAMpI,MAAOoI,EAAM7N,OAA1C+L,KAAqD9Q,EAAOgB,QAChE,IAAqB,IAAjB4R,EAAM7N,OAEf,MADA2T,GAAKrC,UAAU5L,OAAOzK,EAAMgB,GACrBgS,CAEPA,GAAS0F,EAAK3F,OAAO6F,WAAWhG,EAAMpI,MAAOoI,EAAM7N,OAA1C+L,KAAqD9Q,EAAOgB,IAGvE,MADA0X,GAAKxF,aAAaN,EAAOH,EAAApQ,QAAQqQ,QAAQS,QAClCH,GACNV,MRwnCHvL,IAAK,aACL/F,MAAO,SQtnCEwJ,EAAOzF,EAAQ/E,EAAMgB,EAAOsR,GAAQ,GAAAuG,GAAAxZ,KACzC+I,SADyC0Q,EAEVlF,EAASpJ,EAAOzF,EAAQ/E,EAAMgB,EAAOsR,GAF3ByG,EAAA7E,EAAA4E,EAAA,EAG7C,OADCtO,GAF4CuO,EAAA,GAErChU,EAFqCgU,EAAA,GAE7B3Q,EAF6B2Q,EAAA,GAEpBzG,EAFoByG,EAAA,GAGtC3G,EAAOxS,KAAKP,KAAM,WACvB,MAAOwZ,GAAK9F,OAAO4F,WAAWnO,EAAOzF,EAAQqD,IAC5CkK,EAAQ9H,EAAO,MRooClBzD,IAAK,aACL/F,MAAO,SQloCEwJ,EAAOzF,EAAQ/E,EAAMgB,EAAOsR,GAAQ,GAAA0G,GAAA3Z,KACzC+I,SADyC6Q,EAEVrF,EAASpJ,EAAOzF,EAAQ/E,EAAMgB,EAAOsR,GAF3B4G,EAAAhF,EAAA+E,EAAA,EAG7C,OADCzO,GAF4C0O,EAAA,GAErCnU,EAFqCmU,EAAA,GAE7B9Q,EAF6B8Q,EAAA,GAEpB5G,EAFoB4G,EAAA,GAGtC9G,EAAOxS,KAAKP,KAAM,WACvB,MAAO2Z,GAAKjG,OAAO6F,WAAWpO,EAAOzF,EAAQqD,IAC5CkK,EAAQ9H,EAAO,MRgpClBzD,IAAK,YACL/F,MAAO,SQ9oCCwJ,GAAmB,GAAZzF,GAAYD,UAAAC,OAAA,OAAAsD,KAAAvD,UAAA,GAAAA,UAAA,GAAH,EACpBqU,QAEFA,GADmB,gBAAV3O,GACAnL,KAAKgX,UAAU+C,UAAU5O,EAAOzF,GAEhC1F,KAAKgX,UAAU+C,UAAU5O,EAAMA,MAAOA,EAAMzF,OAEvD,IAAIsU,GAAkBha,KAAK2R,UAAUsI,uBACrC,QACEC,OAAQJ,EAAOI,OAASF,EAAgBG,IACxCC,OAAQN,EAAOM,OACfC,KAAMP,EAAOO,KAAOL,EAAgBK,KACpCC,MAAOR,EAAOQ,MAAQN,EAAgBK,KACtCF,IAAKL,EAAOK,IAAMH,EAAgBG,IAClCI,MAAOT,EAAOS,URopChB7S,IAAK,cACL/F,MAAO,WQjpCiD,GAA9CwJ,GAA8C1F,UAAAC,OAAA,OAAAsD,KAAAvD,UAAA,GAAAA,UAAA,GAAtC,EAAGC,EAAmCD,UAAAC,OAAA,OAAAsD,KAAAvD,UAAA,GAAAA,UAAA,GAA1BzF,KAAKwa,YAAcrP,EAAOsP,EACtClG,EAASpJ,EAAOzF,GADsBgV,EAAA7F,EAAA4F,EAAA,EAExD,OADCtP,GADuDuP,EAAA,GAChDhV,EADgDgV,EAAA,GAEjD1a,KAAK0T,OAAOiH,YAAYxP,EAAOzF,MR6pCtCgC,IAAK,YACL/F,MAAO,WQ3pC8C,GAA7CwJ,GAA6C1F,UAAAC,OAAA,OAAAsD,KAAAvD,UAAA,GAAAA,UAAA,GAArCzF,KAAKwT,cAAa,GAAO9N,EAAYD,UAAAC,OAAA,OAAAsD,KAAAvD,UAAA,GAAAA,UAAA,GAAH,CAClD,OAAqB,gBAAV0F,GACFnL,KAAK0T,OAAOkH,UAAUzP,EAAOzF,GAE7B1F,KAAK0T,OAAOkH,UAAUzP,EAAMA,MAAOA,EAAMzF,WRkqClDgC,IAAK,WACL/F,MAAO,SQ/pCA2C,GACP,MAAOA,GAAKwM,OAAO9Q,KAAK8W,WRkqCxBpP,IAAK,YACL/F,MAAO,WQ/pCP,MAAO3B,MAAK8W,OAAOpR,YRmqCnBgC,IAAK,UACL/F,MAAO,SQjqCDwJ,GACN,MAAOnL,MAAK8W,OAAO3K,KAAKhB,MRoqCxBzD,IAAK,UACL/F,MAAO,SQlqCDwJ,GACN,MAAOnL,MAAK8W,OAAOnK,KAAKxB,MRqqCxBzD,IAAK,WACL/F,MAAO,WQnqCsC,GAAtCwJ,GAAsC1F,UAAAC,OAAA,OAAAsD,KAAAvD,UAAA,GAAAA,UAAA,GAA9B,EAAGC,EAA2BD,UAAAC,OAAA,OAAAsD,KAAAvD,UAAA,GAAAA,UAAA,GAAlBoV,OAAOC,SAClC,OAAqB,gBAAV3P,GACFnL,KAAK8W,OAAOxK,MAAMnB,EAAMA,MAAOA,EAAMzF,QAErC1F,KAAK8W,OAAOxK,MAAMnB,EAAOzF,MR0qClCgC,IAAK,YACL/F,MAAO,SQvqCChB,GACR,MAAOX,MAAKgS,MAAM/R,QAAQU,MR0qC1B+G,IAAK,eACL/F,MAAO,WQrqCP,MAH0B8D,WAAAC,OAAA,OAAAsD,KAAAvD,UAAA,IAAAA,UAAA,IACfzF,KAAKmZ,QAChBnZ,KAAK0X,SACE1X,KAAKgX,UAAU+D,WAAW,MR6qCjCrT,IAAK,UACL/F,MAAO,WQ3qC6C,GAA9CwJ,GAA8C1F,UAAAC,OAAA,OAAAsD,KAAAvD,UAAA,GAAAA,UAAA,GAAtC,EAAGC,EAAmCD,UAAAC,OAAA,OAAAsD,KAAAvD,UAAA,GAAAA,UAAA,GAA1BzF,KAAKwa,YAAcrP,EAAO6P,EAClCzG,EAASpJ,EAAOzF,GADkBuV,EAAApG,EAAAmG,EAAA,EAEpD,OADC7P,GADmD8P,EAAA,GAC5CvV,EAD4CuV,EAAA,GAE7Cjb,KAAK0T,OAAOwH,QAAQ/P,EAAOzF,MRurClCgC,IAAK,WACL/F,MAAO,WQprCP,MAAO3B,MAAKgX,UAAUmE,cRwrCtBzT,IAAK,cACL/F,MAAO,SQtrCGwJ,EAAOiQ,EAAOzZ,GAAmC,GAAA0Z,GAAArb,KAA5BiT,EAA4BxN,UAAAC,OAAA,OAAAsD,KAAAvD,UAAA,GAAAA,UAAA,GAAnBwM,EAAMoB,QAAQoB,GACtD,OAAO1B,GAAOxS,KAAKP,KAAM,WACvB,MAAOqb,GAAK3H,OAAO4H,YAAYnQ,EAAOiQ,EAAOzZ,IAC5CsR,EAAQ9H,MR6rCXzD,IAAK,aACL/F,MAAO,SQ3rCEwJ,EAAOoB,EAAM5L,EAAMgB,EAAOsR,GAAQ,GAAAsI,GAAAvb,KACvC+I,SADuCyS,EAEdjH,EAASpJ,EAAO,EAAGxK,EAAMgB,EAAOsR,GAFlBwI,EAAA5G,EAAA2G,EAAA,EAG3C,OADCrQ,GAF0CsQ,EAAA,GAEjC1S,EAFiC0S,EAAA,GAExBxI,EAFwBwI,EAAA,GAGpC1I,EAAOxS,KAAKP,KAAM,WACvB,MAAOub,GAAK7H,OAAOgI,WAAWvQ,EAAOoB,EAAMxD,IAC1CkK,EAAQ9H,EAAOoB,EAAK7G,WRwsCvBgC,IAAK,YACL/F,MAAO,WQrsCP,OAAQ3B,KAAK2R,UAAU6E,UAAUmF,SAAS,kBRysC1CjU,IAAK,MACL/F,MAAO,WQtsCP,MAAO3B,MAAKmU,QAAQyH,IAAI/Q,MAAM7K,KAAKmU,QAAS1O,cR0sC5CiC,IAAK,KACL/F,MAAO,WQvsCP,MAAO3B,MAAKmU,QAAQgD,GAAGtM,MAAM7K,KAAKmU,QAAS1O,cR2sC3CiC,IAAK,OACL/F,MAAO,WQxsCP,MAAO3B,MAAKmU,QAAQ0H,KAAKhR,MAAM7K,KAAKmU,QAAS1O,cR4sC7CiC,IAAK,YACL/F,MAAO,SQ1sCCwJ,EAAOkL,EAAMpD,GACrBjT,KAAK6R,UAAUiK,qBAAqB3Q,EAAOkL,EAAMpD,MR6sCjDvL,IAAK,eACL/F,MAAO,SQ3sCIwJ,EAAOzF,EAAQuN,GAAQ,GAAA8I,GAAA/b,KAAAgc,EACNzH,EAASpJ,EAAOzF,EAAQuN,GADlBgJ,EAAApH,EAAAmH,EAAA,EAElC,OADC7Q,GADiC8Q,EAAA,GAC1BvW,EAD0BuW,EAAA,GAChBhJ,EADgBgJ,EAAA,GAE3BlJ,EAAOxS,KAAKP,KAAM,WACvB,MAAO+b,GAAKrI,OAAOwI,aAAa/Q,EAAOzF,IACtCuN,EAAQ9H,MRutCXzD,IAAK,iBACL/F,MAAO,WQptCP3B,KAAKgX,UAAUoC,eAAepZ,KAAK6W,uBRwtCnCnP,IAAK,cACL/F,MAAO,SQttCGqK,GAAqC,GAAAmQ,GAAAnc,KAA9BiT,EAA8BxN,UAAAC,OAAA,OAAAsD,KAAAvD,UAAA,GAAAA,UAAA,GAArB2N,EAAApQ,QAAQqQ,QAAQoB,GAC1C,OAAO1B,GAAOxS,KAAKP,KAAM,WACvBgM,EAAQ,GAAA7B,GAAAnH,QAAUgJ,EAClB,IAAItG,GAASyW,EAAK3B,YACd4B,EAAUD,EAAKzI,OAAOqF,WAAW,EAAGrT,GACpC2W,EAAUF,EAAKzI,OAAO4I,WAAWtQ,GACjCiC,EAASoO,EAAQ1O,IAAI0O,EAAQ1O,IAAIjI,OAAS,EAM9C,OALc,OAAVuI,GAA4C,gBAAnBA,GAAOlD,QAAkE,OAA1CkD,EAAOlD,OAAOkD,EAAOlD,OAAOrF,OAAO,KAC7FyW,EAAKzI,OAAOqF,WAAWoD,EAAK3B,YAAc,EAAG,GAC7C6B,EAAQtO,OAAO,IAEPqO,EAAQ/M,QAAQgN,IAEzBpJ,MR6tCHvL,IAAK,eACL/F,MAAO,SQ3tCIwJ,EAAOzF,EAAQuN,GAC1B,GAAa,MAAT9H,EACFnL,KAAKgX,UAAU2B,SAAS,KAAMjT,GAAUuM,EAAMoB,QAAQoB,SACjD,IAAA8H,GACuBhI,EAASpJ,EAAOzF,EAAQuN,GAD/CuJ,EAAA3H,EAAA0H,EAAA,EACJpR,GADIqR,EAAA,GACG9W,EADH8W,EAAA,GACavJ,EADbuJ,EAAA,GAELxc,KAAKgX,UAAU2B,SAAS,GAAA1D,GAAAC,MAAU/J,EAAOzF,GAASuN,GAC9CA,IAAWG,EAAApQ,QAAQqQ,QAAQS,QAC7B9T,KAAKgX,UAAUoC,eAAepZ,KAAK6W,wBRuuCvCnP,IAAK,UACL/F,MAAO,SQnuCD4K,GAAoC,GAA9B0G,GAA8BxN,UAAAC,OAAA,OAAAsD,KAAAvD,UAAA,GAAAA,UAAA,GAArB2N,EAAApQ,QAAQqQ,QAAQoB,IACjCzI,GAAQ,GAAA7B,GAAAnH,SAAY+H,OAAOwB,EAC/B,OAAOvM,MAAK6X,YAAY7L,EAAOiH,MRwuC/BvL,IAAK,SACL/F,MAAO,WQtuC6B,GAA/BsR,GAA+BxN,UAAAC,OAAA,OAAAsD,KAAAvD,UAAA,GAAAA,UAAA,GAAtB2N,EAAApQ,QAAQqQ,QAAQC,KAC1BK,EAAS3T,KAAK8W,OAAOY,OAAOzE,EAEhC,OADAjT,MAAKgX,UAAUU,OAAOzE,GACfU,KR2uCPjM,IAAK,iBACL/F,MAAO,SQzuCMqK,GAAqC,GAAAyQ,GAAAzc,KAA9BiT,EAA8BxN,UAAAC,OAAA,OAAAsD,KAAAvD,UAAA,GAAAA,UAAA,GAArB2N,EAAApQ,QAAQqQ,QAAQoB,GAC7C,OAAO1B,GAAOxS,KAAKP,KAAM,WAEvB,MADAgM,GAAQ,GAAA7B,GAAAnH,QAAUgJ,GACXyQ,EAAK/I,OAAO4I,WAAWtQ,EAAOiH,IACpCA,GAAQ,ORivCNhB,IQ9uCTA,GAAMC,UACJ4H,OAAQ,KACR/Q,QAAS,KACT9I,WACA8X,YAAa,GACbC,UAAU,EACVnB,mBAAoB,KACpB3D,QAAQ,EACRlB,MAAO,WAETC,EAAMgC,OAASb,EAAApQ,QAAQiR,OACvBhC,EAAMoB,QAAUD,EAAApQ,QAAQqQ,QAExBpB,EAAMyK,QAA0D,QAEhEzK,EAAMmG,SACJpM,MAAA7B,EAAAnH,QACA2Z,UAAAtS,EAAArH,QACA4Z,cAAA5G,EAAAhT,QACA6Z,aAAAzK,EAAApP,SRw4CFrD,EQ7vCS+R,eR8vCT/R,EQ9vCuB4U,WR+vCvB5U,EQ/vC0CqD,QAATiP,GRmwC3B,SAAUrS,EAAQD,EAASO,GAEjC,YAOA,SAASkI,GAAgBC,EAAUC,GAAe,KAAMD,YAAoBC,IAAgB,KAAM,IAAIC,WAAU,qCAJhHzH,OAAOC,eAAepB,EAAS,cAC7BgC,OAAO,GAKT,ISvwDMmb,GACJ,QAAAA,GAAYC,GAAqB,GAAdnV,GAAcnC,UAAAC,OAAA,OAAAsD,KAAAvD,UAAA,GAAAA,UAAA,KAAA2C,GAAApI,KAAA8c,GAC/B9c,KAAK+c,MAAQA,EACb/c,KAAK4H,QAAUA,EAGnBkV,GAAO5K,YT4wDPvS,EAAQqD,QSzwDO8Z,GT6wDT,SAAUld,EAAQD,EAASO,GAEjC,YAaA,SAASkI,GAAgBC,EAAUC,GAAe,KAAMD,YAAoBC,IAAgB,KAAM,IAAIC,WAAU,qCAEhH,QAASC,GAA2BzI,EAAMQ,GAAQ,IAAKR,EAAQ,KAAM,IAAI0I,gBAAe,4DAAgE,QAAOlI,GAAyB,gBAATA,IAAqC,kBAATA,GAA8BR,EAAPQ,EAElO,QAASmI,GAAUC,EAAUC,GAAc,GAA0B,kBAAfA,IAA4C,OAAfA,EAAuB,KAAM,IAAIL,WAAU,iEAAoEK,GAAeD,GAASpH,UAAYT,OAAO6B,OAAOiG,GAAcA,EAAWrH,WAAasF,aAAelF,MAAOgH,EAAU1H,YAAY,EAAO4H,UAAU,EAAM7H,cAAc,KAAe4H,IAAY9H,OAAO2F,eAAiB3F,OAAO2F,eAAekC,EAAUC,GAAcD,EAASjC,UAAYkC,GAdje9H,OAAOC,eAAepB,EAAS,cAC7BgC,OAAO,GU5xDT,IAAAyI,GAAAlK,EAAA,GViyDImK,EAEJ,SAAgC9C,GAAO,MAAOA,IAAOA,EAAInG,WAAamG,GAAQvE,QAASuE,IAF9C6C,GU/xDnC4S,EVyyDS,SAAUC,GAGvB,QAASD,KAGP,MAFA5U,GAAgBpI,KAAMgd,GAEfxU,EAA2BxI,MAAOgd,EAAStW,WAAa5F,OAAOkJ,eAAegT,IAAWnS,MAAM7K,KAAMyF,YAG9G,MARAiD,GAAUsU,EAAUC,GAQbD,GUlzDc3S,EAAArH,QAAUO,KVqzDjC5D,GAAQqD,QUnzDOga,GVuzDT,SAAUpd,EAAQD,EAASO,GAEjC,YAmBA,SAASiI,GAAuBZ,GAAO,MAAOA,IAAOA,EAAInG,WAAamG,GAAQvE,QAASuE,GAEvF,QAASa,GAAgBC,EAAUC,GAAe,KAAMD,YAAoBC,IAAgB,KAAM,IAAIC,WAAU,qCAEhH,QAASC,GAA2BzI,EAAMQ,GAAQ,IAAKR,EAAQ,KAAM,IAAI0I,gBAAe,4DAAgE,QAAOlI,GAAyB,gBAATA,IAAqC,kBAATA,GAA8BR,EAAPQ,EAElO,QAASmI,GAAUC,EAAUC,GAAc,GAA0B,kBAAfA,IAA4C,OAAfA,EAAuB,KAAM,IAAIL,WAAU,iEAAoEK,GAAeD,GAASpH,UAAYT,OAAO6B,OAAOiG,GAAcA,EAAWrH,WAAasF,aAAelF,MAAOgH,EAAU1H,YAAY,EAAO4H,UAAU,EAAM7H,cAAc,KAAe4H,IAAY9H,OAAO2F,eAAiB3F,OAAO2F,eAAekC,EAAUC,GAAcD,EAASjC,UAAYkC,GAtBje9H,OAAOC,eAAepB,EAAS,cAC7BgC,OAAO,GAGT,IAAI0H,GAAe,WAAc,QAASC,GAAiBrB,EAAQsB,GAAS,IAAK,GAAIlJ,GAAI,EAAGA,EAAIkJ,EAAM7D,OAAQrF,IAAK,CAAE,GAAImJ,GAAaD,EAAMlJ,EAAImJ,GAAWvI,WAAauI,EAAWvI,aAAc,EAAOuI,EAAWxI,cAAe,EAAU,SAAWwI,KAAYA,EAAWX,UAAW,GAAM/H,OAAOC,eAAekH,EAAQuB,EAAW9B,IAAK8B,IAAiB,MAAO,UAAUlB,EAAamB,EAAYC,GAAiJ,MAA9HD,IAAYH,EAAiBhB,EAAY/G,UAAWkI,GAAiBC,GAAaJ,EAAiBhB,EAAaoB,GAAqBpB,MAE5hBqB,EAAO,QAASzI,GAAIG,EAAQC,EAAUsI,GAA2B,OAAXvI,IAAiBA,EAASwI,SAAStI,UAAW,IAAIuI,GAAOhJ,OAAOiJ,yBAAyB1I,EAAQC,EAAW,QAAa0H,KAATc,EAAoB,CAAE,GAAIZ,GAASpI,OAAOkJ,eAAe3I,EAAS,OAAe,QAAX6H,MAAmB,GAAkChI,EAAIgI,EAAQ5H,EAAUsI,GAAoB,GAAI,SAAWE,GAAQ,MAAOA,GAAKnI,KAAgB,IAAIf,GAASkJ,EAAK5I,GAAK,QAAe8H,KAAXpI,EAA4C,MAAOA,GAAOL,KAAKqJ,IWt0D5dsT,EAAAhd,EAAA,IX00DIid,EAAiBhV,EAAuB+U,GWz0D5ChH,EAAAhW,EAAA,IX60DIiW,EAAWhO,EAAuB+N,GW30DlCxD,GAAQ,EAAAyD,EAAAnT,SAAO,iBAEH,kBAAmB,YAAa,UAAW,SAEpDqD,QAAQ,SAAS+W,GACtBvK,SAASwK,iBAAiBD,EAAW,WAAa,OAAAE,GAAA7X,UAAAC,OAATsO,EAAS/N,MAAAqX,GAAAC,EAAA,EAAAA,EAAAD,EAAAC,IAATvJ,EAASuJ,GAAA9X,UAAA8X,MAC7C5R,MAAMpL,KAAKsS,SAAS2K,iBAAiB,kBAAkBnX,QAAQ,SAAClC,GAEjE,GAAIA,EAAKuS,SAAWvS,EAAKuS,QAAQvC,QAAS,IAAAsJ,IACxCA,EAAAtZ,EAAKuS,QAAQvC,SAAQuJ,UAArB7S,MAAA4S,EAAkCzJ,SXi2D1C,IW11DM2J,GX01DQ,SAAUC,GWz1DtB,QAAAD,KAAcvV,EAAApI,KAAA2d,EAAA,IAAA3W,GAAAwB,EAAAxI,MAAA2d,EAAAjX,WAAA5F,OAAAkJ,eAAA2T,IAAApd,KAAAP,MAAA,OAEZgH,GAAK6W,aACL7W,EAAKmQ,GAAG,QAASzE,EAAMC,OAHX3L,EXs4Dd,MA5CA0B,GAAUiV,EAASC,GAYnBvU,EAAasU,IACXjW,IAAK,OACL/F,MAAO,WWj2DP+Q,EAAMoL,IAAIjT,MAAM6H,EAAOjN,WACvBkE,EAAAgU,EAAApc,UAAAmF,WAAA5F,OAAAkJ,eAAA2T,EAAApc,WAAA,OAAAvB,MAAW6K,MAAM7K,KAAMyF,cXq2DvBiC,IAAK,YACL/F,MAAO,SWn2DCoc,GAAgB,OAAAC,GAAAvY,UAAAC,OAANsO,EAAM/N,MAAA+X,EAAA,EAAAA,EAAA,KAAAC,EAAA,EAAAA,EAAAD,EAAAC,IAANjK,EAAMiK,EAAA,GAAAxY,UAAAwY,IACvBje,KAAK6d,UAAUE,EAAM3G,WAAa/Q,QAAQ,SAAA6X,GAA4B,GAAjB/Z,GAAiB+Z,EAAjB/Z,KAAMga,EAAWD,EAAXC,SACtDJ,EAAM9V,SAAW9D,GAAQA,EAAKwX,SAASoC,EAAM9V,UAC/CkW,gBAAQJ,GAARlO,OAAkBmE,SX+2DtBtM,IAAK,YACL/F,MAAO,SW32DCyb,EAAWjZ,EAAMga,GACpBne,KAAK6d,UAAUT,KAClBpd,KAAK6d,UAAUT,OAEjBpd,KAAK6d,UAAUT,GAAWtP,MAAO3J,OAAMga,gBX+2DlCR,GACPR,EAAena,QW52DjB2a,GAAQ1J,QACNI,cAAuB,gBACvB+J,qBAAuB,uBACvBC,gBAAuB,kBACvB9G,cAAuB,gBACvB+G,iBAAuB,mBACvBpK,YAAuB,eAEzByJ,EAAQtK,SACNoB,IAAS,MACTX,OAAS,SACTR,KAAS,QXi3DX3T,EAAQqD,QW72DO2a,GXi3DT,SAAU/d,EAAQD,EAASO,GAEjC,YY96DA,SAASwS,GAAM6L,GACb,GAAIC,EAAO9N,QAAQ6N,IAAWC,EAAO9N,QAAQyH,GAAQ,QAAAsG,GAAAnB,EAAA7X,UAAAC,OAD7BsO,EAC6B/N,MAAAqX,EAAA,EAAAA,EAAA,KAAAC,EAAA,EAAAA,EAAAD,EAAAC,IAD7BvJ,EAC6BuJ,EAAA,GAAA9X,UAAA8X,IACnDkB,EAAAC,SAAQH,GAAR1T,MAAA4T,EAAmBzK,IAIvB,QAAS2K,GAAUC,GACjB,MAAOJ,GAAOtS,OAAO,SAAS2S,EAAQN,GAEpC,MADAM,GAAON,GAAU7L,EAAMoM,KAAKJ,QAASH,EAAQK,GACtCC,OZw6DX/d,OAAOC,eAAepB,EAAS,cAC7BgC,OAAO,GYr7DT,IAAI6c,IAAU,QAAS,OAAQ,MAAO,QAClCrG,EAAQ,MAeZzF,GAAMyF,MAAQwG,EAAUxG,MAAQ,SAAS4G,GACvC5G,EAAQ4G,GZg8DVpf,EAAQqD,QY57DO2b,GZg8DT,SAAU/e,EAAQD,EAASO,GAEjC,Yat9DAY,QAAAC,eAAApB,EAAA,cAA8CgC,OAAA,GAC9C,IAAAa,GAAAtC,EAAA,GACAsD,EAAA,WACA,QAAAA,GAAAsC,EAAAC,EAAA6B,OACA,KAAAA,IAAiCA,MACjC5H,KAAA8F,WACA9F,KAAA+F,SACA,IAAAiZ,GAAAxc,EAAAE,MAAA4C,KAAA9C,EAAAE,MAAAuc,SACA,OAAArX,EAAApD,MAEAxE,KAAAwE,MAAAoD,EAAApD,MAAAhC,EAAAE,MAAAkC,MAAAoa,EAGAhf,KAAAwE,MAAAhC,EAAAE,MAAAuc,UAEA,MAAArX,EAAAmP,YACA/W,KAAA+W,UAAAnP,EAAAmP,WAoCA,MAlCAvT,GAAAqK,KAAA,SAAA1J,GACA,SAAAwB,IAAApF,KAAA4D,EAAAQ,WAAA,SAAAua,GACA,MAAAA,GAAAve,QAGA6C,EAAAjC,UAAAkV,IAAA,SAAAtS,EAAAxC,GACA,QAAA3B,KAAAmf,OAAAhb,EAAAxC,KAEAwC,EAAAyS,aAAA5W,KAAA+F,QAAApE,IACA,IAEA6B,EAAAjC,UAAA4d,OAAA,SAAAhb,EAAAxC,GAEA,aADAa,EAAAK,MAAAsB,EAAA3B,EAAAE,MAAAwO,MAAAlR,KAAAwE,MAAAhC,EAAAE,MAAA4C,SAGA,MAAAtF,KAAA+W,YAEA,gBAAApV,GACA3B,KAAA+W,UAAArG,QAAA/O,EAAAyd,QAAA,gBAGApf,KAAA+W,UAAArG,QAAA/O,IAAA,KAGA6B,EAAAjC,UAAAuL,OAAA,SAAA3I,GACAA,EAAAkb,gBAAArf,KAAA+F,UAEAvC,EAAAjC,UAAAI,MAAA,SAAAwC,GACA,GAAAxC,GAAAwC,EAAAc,aAAAjF,KAAA+F,QACA,OAAA/F,MAAAmf,OAAAhb,EAAAxC,MACAA,EAEA,IAEA6B,IAEA7D,GAAAqD,QAAAQ,Gb69DM,SAAU5D,EAAQD,EAASO,Gcv/DjC,QAAAof,GAAA3d,GACA,cAAAA,OAAAqH,KAAArH,EAGA,QAAA4d,GAAAC,GACA,SAAAA,GAAA,gBAAAA,IAAA,gBAAAA,GAAA9Z,UACA,kBAAA8Z,GAAA1X,MAAA,kBAAA0X,GAAA7T,SAGA6T,EAAA9Z,OAAA,mBAAA8Z,GAAA,KAIA,QAAAC,GAAAC,EAAA/Y,EAAAgZ,GACA,GAAAtf,GAAAqH,CACA,IAAA4X,EAAAI,IAAAJ,EAAA3Y,GACA,QAEA,IAAA+Y,EAAAne,YAAAoF,EAAApF,UAAA,QAGA,IAAAqe,EAAAF,GACA,QAAAE,EAAAjZ,KAGA+Y,EAAAG,EAAAtf,KAAAmf,GACA/Y,EAAAkZ,EAAAtf,KAAAoG,GACAmZ,EAAAJ,EAAA/Y,EAAAgZ,GAEA,IAAAJ,EAAAG,GAAA,CACA,IAAAH,EAAA5Y,GACA,QAEA,IAAA+Y,EAAAha,SAAAiB,EAAAjB,OAAA,QACA,KAAArF,EAAA,EAAeA,EAAAqf,EAAAha,OAAcrF,IAC7B,GAAAqf,EAAArf,KAAAsG,EAAAtG,GAAA,QAEA,UAEA,IACA,GAAA0f,GAAAC,EAAAN,GACAO,EAAAD,EAAArZ,GACG,MAAAuZ,GACH,SAIA,GAAAH,EAAAra,QAAAua,EAAAva,OACA,QAKA,KAHAqa,EAAAI,OACAF,EAAAE,OAEA9f,EAAA0f,EAAAra,OAAA,EAAyBrF,GAAA,EAAQA,IACjC,GAAA0f,EAAA1f,IAAA4f,EAAA5f,GACA,QAIA,KAAAA,EAAA0f,EAAAra,OAAA,EAAyBrF,GAAA,EAAQA,IAEjC,GADAqH,EAAAqY,EAAA1f,IACAyf,EAAAJ,EAAAhY,GAAAf,EAAAe,GAAAiY,GAAA,QAEA,cAAAD,UAAA/Y,GA5FA,GAAAkZ,GAAA5Z,MAAA1E,UAAAoK,MACAqU,EAAA9f,EAAA,IACA0f,EAAA1f,EAAA,IAEA4f,EAAAlgB,EAAAD,QAAA,SAAAygB,EAAAC,EAAAV,GAGA,MAFAA,WAEAS,IAAAC,IAGGD,YAAAE,OAAAD,YAAAC,MACHF,EAAAG,YAAAF,EAAAE,WAIGH,IAAAC,GAAA,gBAAAD,IAAA,gBAAAC,GACHV,EAAAzM,OAAAkN,IAAAC,EAAAD,GAAAC,EASAZ,EAAAW,EAAAC,EAAAV,Md+lEM,SAAU/f,EAAQD,EAASO,GAEjC,YAkCA,SAASiI,GAAuBZ,GAAO,MAAOA,IAAOA,EAAInG,WAAamG,GAAQvE,QAASuE,GAEvF,QAASa,GAAgBC,EAAUC,GAAe,KAAMD,YAAoBC,IAAgB,KAAM,IAAIC,WAAU,qCAEhH,QAASC,GAA2BzI,EAAMQ,GAAQ,IAAKR,EAAQ,KAAM,IAAI0I,gBAAe,4DAAgE,QAAOlI,GAAyB,gBAATA,IAAqC,kBAATA,GAA8BR,EAAPQ,EAElO,QAASmI,GAAUC,EAAUC,GAAc,GAA0B,kBAAfA,IAA4C,OAAfA,EAAuB,KAAM,IAAIL,WAAU,iEAAoEK,GAAeD,GAASpH,UAAYT,OAAO6B,OAAOiG,GAAcA,EAAWrH,WAAasF,aAAelF,MAAOgH,EAAU1H,YAAY,EAAO4H,UAAU,EAAM7H,cAAc,KAAe4H,IAAY9H,OAAO2F,eAAiB3F,OAAO2F,eAAekC,EAAUC,GAAcD,EAASjC,UAAYkC,GArCje9H,OAAOC,eAAepB,EAAS,cAC7BgC,OAAO,IAEThC,EAAQqD,QAAUrD,EAAQ6gB,SAAOxX,EAEjC,IAAI6L,GAAiB,WAAc,QAASO,GAAc/N,EAAKhH,GAAK,GAAIgV,MAAeC,GAAK,EAAUC,GAAK,EAAWC,MAAKxM,EAAW,KAAM,IAAK,GAAiCyM,GAA7BjQ,EAAK6B,EAAI8N,OAAOjG,cAAmBoG,GAAMG,EAAKjQ,EAAGiG,QAAQiK,QAAoBL,EAAKvH,KAAK2H,EAAG9T,QAAYtB,GAAKgV,EAAK3P,SAAWrF,GAA3DiV,GAAK,IAAoE,MAAOK,GAAOJ,GAAK,EAAMC,EAAKG,EAAO,QAAU,KAAWL,GAAM9P,EAAW,QAAGA,EAAW,SAAO,QAAU,GAAI+P,EAAI,KAAMC,IAAQ,MAAOH,GAAQ,MAAO,UAAUhO,EAAKhH,GAAK,GAAI4F,MAAMC,QAAQmB,GAAQ,MAAOA,EAAY,IAAI8N,OAAOjG,WAAYpO,QAAOuG,GAAQ,MAAO+N,GAAc/N,EAAKhH,EAAa,MAAM,IAAIkI,WAAU,4DAEllBc,EAAe,WAAc,QAASC,GAAiBrB,EAAQsB,GAAS,IAAK,GAAIlJ,GAAI,EAAGA,EAAIkJ,EAAM7D,OAAQrF,IAAK,CAAE,GAAImJ,GAAaD,EAAMlJ,EAAImJ,GAAWvI,WAAauI,EAAWvI,aAAc,EAAOuI,EAAWxI,cAAe,EAAU,SAAWwI,KAAYA,EAAWX,UAAW,GAAM/H,OAAOC,eAAekH,EAAQuB,EAAW9B,IAAK8B,IAAiB,MAAO,UAAUlB,EAAamB,EAAYC,GAAiJ,MAA9HD,IAAYH,EAAiBhB,EAAY/G,UAAWkI,GAAiBC,GAAaJ,EAAiBhB,EAAaoB,GAAqBpB,MAE5hBqB,EAAO,QAASzI,GAAIG,EAAQC,EAAUsI,GAA2B,OAAXvI,IAAiBA,EAASwI,SAAStI,UAAW,IAAIuI,GAAOhJ,OAAOiJ,yBAAyB1I,EAAQC,EAAW,QAAa0H,KAATc,EAAoB,CAAE,GAAIZ,GAASpI,OAAOkJ,eAAe3I,EAAS,OAAe,QAAX6H,MAAmB,GAAkChI,EAAIgI,EAAQ5H,EAAUsI,GAAoB,GAAI,SAAWE,GAAQ,MAAOA,GAAKnI,KAAgB,IAAIf,GAASkJ,EAAK5I,GAAK,QAAe8H,KAAXpI,EAA4C,MAAOA,GAAOL,KAAKqJ,IetoE5dM,EAAAhK,EAAA,Gf0oEIiK,EAAehC,EAAuB+B,GezoE1CE,EAAAlK,EAAA,Gf6oEImK,EAAclC,EAAuBiC,Ge5oEzCqW,EAAAvgB,EAAA,GfgpEIwgB,EAAUvY,EAAuBsY,Ge/oErCjW,EAAAtK,EAAA,GfmpEIuK,EAAWtC,EAAuBqC,GelpEtCE,EAAAxK,EAAA,GfspEIyK,EAASxC,EAAuBuC,GenpE9B8V,Ef6pEK,SAAUG,GAGnB,QAASH,KAGP,MAFApY,GAAgBpI,KAAMwgB,GAEfhY,EAA2BxI,MAAOwgB,EAAK9Z,WAAa5F,OAAOkJ,eAAewW,IAAO3V,MAAM7K,KAAMyF,YAGtG,MARAiD,GAAU8X,EAAMG,GAQTH,GACP/V,EAASzH,QetqEXwd,GAAK3a,SAAW,OAChB2a,EAAKnb,QAAU,Mf0qEf,IevqEMub,GfuqEU,SAAUC,GAGxB,QAASD,KAGP,MAFAxY,GAAgBpI,KAAM4gB,GAEfpY,EAA2BxI,MAAO4gB,EAAUla,WAAa5F,OAAOkJ,eAAe4W,IAAY/V,MAAM7K,KAAMyF,YA6HhH,MAlIAiD,GAAUkY,EAAWC,GAQrBxX,EAAauX,IACXlZ,IAAK,QACL/F,MAAO,WevqED,GAAAiX,GAAA5Y,KACFuM,EAAOvM,KAAK8K,QAAQgW,WAIxB,OAHIvU,GAAKjB,SAAS,QAChBiB,EAAOA,EAAKZ,MAAM,GAAI,IAEjBY,EAAKrH,MAAM,MAAMgH,OAAO,SAACF,EAAO+U,GACrC,MAAO/U,GAAMjB,OAAOgW,GAAMhW,OAAO,KAAM6N,EAAK7P,YAC3C,GAAAoB,GAAAnH,Yf6qEH0E,IAAK,SACL/F,MAAO,Se3qEFhB,EAAMgB,GACX,GAAIhB,IAASX,KAAKmJ,QAAQtD,WAAYlE,EAAtC,CADkB,GAAAqf,GAEHhhB,KAAKihB,WAALtW,EAAA3H,QAA0BhD,KAAK0F,SAAW,GAFvCwb,EAAArM,EAAAmM,EAAA,GAEbzU,EAFa2U,EAAA,EAGN,OAAR3U,GACFA,EAAK4U,SAAS5U,EAAK7G,SAAW,EAAG,GAEnCiE,EAAAiX,EAAArf,UAAAmF,WAAA5F,OAAAkJ,eAAA4W,EAAArf,WAAA,SAAAvB,MAAAO,KAAAP,KAAaW,EAAMgB,OfkrEnB+F,IAAK,WACL/F,MAAO,SehrEAwJ,EAAOzF,EAAQ/E,EAAMgB,GAC5B,GAAe,IAAX+D,GACgD,MAAhD2E,EAAArH,QAAUH,MAAMlC,EAAM0J,EAAArH,QAAUN,MAAMmC,SACrClE,IAASX,KAAKmJ,QAAQtD,UAAYlE,IAAU3B,KAAKmJ,QAAQJ,QAAQ/I,KAAK8K,UAD3E,CAIA,GAAIsW,GAAcphB,KAAKqhB,aAAalW,EACpC,MAAIiW,EAAc,GAAKA,GAAejW,EAAQzF,GAA9C,CACA,GAAI4b,GAActhB,KAAKqhB,aAAalW,GAAO,GAAQ,EAC/CoW,EAAgBH,EAAcE,EAAc,EAC5Chd,EAAOtE,KAAKmR,QAAQmQ,EAAaC,GACjC9V,EAAOnH,EAAKmH,IAChBnH,GAAK8G,OAAOzK,EAAMgB,GACd8J,YAAgBmV,IAClBnV,EAAK+V,SAAS,EAAGrW,EAAQmW,EAAc5b,EAAS6b,EAAe5gB,EAAMgB,QfmrEvE+F,IAAK,WACL/F,MAAO,SehrEAwJ,EAAOxJ,EAAO0J,GACrB,GAAW,MAAPA,EAAJ,CAD0B,GAAAoW,GAELzhB,KAAKihB,WAALtW,EAAA3H,QAA0BmI,GAFrBuW,EAAA7M,EAAA4M,EAAA,GAErBlV,EAFqBmV,EAAA,GAEf5Q,EAFe4Q,EAAA,EAG1BnV,GAAKb,SAASoF,EAAQnP,OfwrEtB+F,IAAK,SACL/F,MAAO,WerrEP,GAAI+D,GAAS1F,KAAK8K,QAAQgW,YAAYpb,MACtC,OAAK1F,MAAK8K,QAAQgW,YAAYxV,SAAS,MAGhC5F,EAFEA,EAAS,Kf2rElBgC,IAAK,eACL/F,MAAO,SevrEIggB,GACX,GADyClc,UAAAC,OAAA,OAAAsD,KAAAvD,UAAA,IAAAA,UAAA,GAKvC,MAAOzF,MAAK8K,QAAQgW,YAAYnV,MAAM,EAAGgW,GAAaC,YAAY,KAHlE,IAAI9Q,GAAS9Q,KAAK8K,QAAQgW,YAAYnV,MAAMgW,GAAajR,QAAQ,KACjE,OAAOI,IAAU,EAAI6Q,EAAc7Q,GAAU,Kf+rE/CpJ,IAAK,WACL/F,MAAO,Se1rEAoL,GACF/M,KAAK8K,QAAQgW,YAAYxV,SAAS,OACrCtL,KAAK6hB,YAAYxX,EAAArH,QAAUL,OAAO,OAAQ,OAE5CgH,EAAAiX,EAAArf,UAAAmF,WAAA5F,OAAAkJ,eAAA4W,EAAArf,WAAA,WAAAvB,MAAAO,KAAAP,KAAe+M,EACf,IAAItB,GAAOzL,KAAKyL,IACJ,OAARA,GAAgBA,EAAKqW,OAAS9hB,MAC9ByL,EAAKtC,QAAQtD,WAAa7F,KAAKmJ,QAAQtD,UACvC7F,KAAKmJ,QAAQJ,QAAQ/I,KAAK8K,WAAaW,EAAKtC,QAAQJ,QAAQ0C,EAAKX,WACnEW,EAAKsW,SAAShV,GACdtB,EAAK4F,aAAarR,MAClByL,EAAKqB,af4rEPpF,IAAK,UACL/F,MAAO,SezrEDsG,GACN0B,EAAAiX,EAAArf,UAAAmF,WAAA5F,OAAAkJ,eAAA4W,EAAArf,WAAA,UAAAvB,MAAAO,KAAAP,KAAciI,MACX0D,MAAMpL,KAAKP,KAAK8K,QAAQ0S,iBAAiB,MAAMnX,QAAQ,SAASlC,GACjE,GAAIG,GAAO+F,EAAArH,QAAUJ,KAAKuB,EACd,OAARG,EACFH,EAAKI,WAAWyd,YAAY7d,GACnBG,YAAgB+F,GAAArH,QAAUG,MACnCmB,EAAKwI,SAELxI,EAAK2d,gBf8rETva,IAAK,SACL/F,MAAO,Se7xEKA,GACZ,GAAImJ,oEAAuBnJ,EAE3B,OADAmJ,GAAQ8L,aAAa,cAAc,GAC5B9L,KfgyEPpD,IAAK,UACL/F,MAAO,We7xEP,OAAO,MfkyEFif,GACPF,EAAQ1d,QevsEV4d,GAAU/a,SAAW,aACrB+a,EAAUvb,QAAU,MACpBub,EAAUsB,IAAM,Kf2sEhBviB,EexsES6gB,OfysET7gB,EezsE4BqD,QAAb4d,Gf6sET,SAAUhhB,EAAQD,EAASO,GAEjC,YAiBA,SAASkI,GAAgBC,EAAUC,GAAe,KAAMD,YAAoBC,IAAgB,KAAM,IAAIC,WAAU,qCAEhH,QAASC,GAA2BzI,EAAMQ,GAAQ,IAAKR,EAAQ,KAAM,IAAI0I,gBAAe,4DAAgE,QAAOlI,GAAyB,gBAATA,IAAqC,kBAATA,GAA8BR,EAAPQ,EAElO,QAASmI,GAAUC,EAAUC,GAAc,GAA0B,kBAAfA,IAA4C,OAAfA,EAAuB,KAAM,IAAIL,WAAU,iEAAoEK,GAAeD,GAASpH,UAAYT,OAAO6B,OAAOiG,GAAcA,EAAWrH,WAAasF,aAAelF,MAAOgH,EAAU1H,YAAY,EAAO4H,UAAU,EAAM7H,cAAc,KAAe4H,IAAY9H,OAAO2F,eAAiB3F,OAAO2F,eAAekC,EAAUC,GAAcD,EAASjC,UAAYkC,GAlBje9H,OAAOC,eAAepB,EAAS,cAC7BgC,OAAO,GAGT,IAAI0H,GAAe,WAAc,QAASC,GAAiBrB,EAAQsB,GAAS,IAAK,GAAIlJ,GAAI,EAAGA,EAAIkJ,EAAM7D,OAAQrF,IAAK,CAAE,GAAImJ,GAAaD,EAAMlJ,EAAImJ,GAAWvI,WAAauI,EAAWvI,aAAc,EAAOuI,EAAWxI,cAAe,EAAU,SAAWwI,KAAYA,EAAWX,UAAW,GAAM/H,OAAOC,eAAekH,EAAQuB,EAAW9B,IAAK8B,IAAiB,MAAO,UAAUlB,EAAamB,EAAYC,GAAiJ,MAA9HD,IAAYH,EAAiBhB,EAAY/G,UAAWkI,GAAiBC,GAAaJ,EAAiBhB,EAAaoB,GAAqBpB,MAE5hBqB,EAAO,QAASzI,GAAIG,EAAQC,EAAUsI,GAA2B,OAAXvI,IAAiBA,EAASwI,SAAStI,UAAW,IAAIuI,GAAOhJ,OAAOiJ,yBAAyB1I,EAAQC,EAAW,QAAa0H,KAATc,EAAoB,CAAE,GAAIZ,GAASpI,OAAOkJ,eAAe3I,EAAS,OAAe,QAAX6H,MAAmB,GAAkChI,EAAIgI,EAAQ5H,EAAUsI,GAAoB,GAAI,SAAWE,GAAQ,MAAOA,GAAKnI,KAAgB,IAAIf,GAASkJ,EAAK5I,GAAK,QAAe8H,KAAXpI,EAA4C,MAAOA,GAAOL,KAAKqJ,IgB70E5dQ,EAAAlK,EAAA,GhBi1EImK,EAEJ,SAAgC9C,GAAO,MAAOA,IAAOA,EAAInG,WAAamG,GAAQvE,QAASuE,IAF9C6C,GgB90EnC+X,EhBw1EM,SAAUvX,GAGpB,QAASuX,KAGP,MAFA/Z,GAAgBpI,KAAMmiB,GAEf3Z,EAA2BxI,MAAOmiB,EAAMzb,WAAa5F,OAAOkJ,eAAemY,IAAQtX,MAAM7K,KAAMyF,YA6BxG,MAlCAiD,GAAUyZ,EAAOvX,GAQjBvB,EAAa8Y,IACXza,IAAK,aACL/F,MAAO,SgB91EEuH,EAAQ0D,GACc,IAA3B1D,EAAOuD,SAAS/G,OAClBiE,EAAAwY,EAAA5gB,UAAAmF,WAAA5F,OAAAkJ,eAAAmY,EAAA5gB,WAAA,aAAAvB,MAAAO,KAAAP,KAAiBkJ,EAAQ0D,GAEzB5M,KAAK8M,YhBk2EPpF,IAAK,SACL/F,MAAO,WgB91EP,MAAO,MhBk2EP+F,IAAK,QACL/F,MAAO,WgB/1EP,MAAO,QhBm2EP+F,IAAK,QACL/F,MAAO,gBAKFwgB,GgB33EW9X,EAAArH,QAAUG,MAqB9Bgf,GAAMtc,SAAW,QACjBsc,EAAM9c,QAAU,KhB22EhB1F,EAAQqD,QgBx2EOmf,GhB42ET,SAAUviB,EAAQD,EAASO,GAEjC,YAkBA,SAASkI,GAAgBC,EAAUC,GAAe,KAAMD,YAAoBC,IAAgB,KAAM,IAAIC,WAAU,qCAEhH,QAASC,GAA2BzI,EAAMQ,GAAQ,IAAKR,EAAQ,KAAM,IAAI0I,gBAAe,4DAAgE,QAAOlI,GAAyB,gBAATA,IAAqC,kBAATA,GAA8BR,EAAPQ,EAElO,QAASmI,GAAUC,EAAUC,GAAc,GAA0B,kBAAfA,IAA4C,OAAfA,EAAuB,KAAM,IAAIL,WAAU,iEAAoEK,GAAeD,GAASpH,UAAYT,OAAO6B,OAAOiG,GAAcA,EAAWrH,WAAasF,aAAelF,MAAOgH,EAAU1H,YAAY,EAAO4H,UAAU,EAAM7H,cAAc,KAAe4H,IAAY9H,OAAO2F,eAAiB3F,OAAO2F,eAAekC,EAAUC,GAAcD,EAASjC,UAAYkC,GiBh4Eje,QAASwZ,GAASC,EAAKC,GACrB,GAAIC,GAAS1P,SAAS6F,cAAc,IACpC6J,GAAOC,KAAOH,CACd,IAAII,GAAWF,EAAOC,KAAK7W,MAAM,EAAG4W,EAAOC,KAAK9R,QAAQ,KACxD,OAAO4R,GAAU5R,QAAQ+R,IAAa,EjBy2ExC3hB,OAAOC,eAAepB,EAAS,cAC7BgC,OAAO,IAEThC,EAAQyiB,SAAWziB,EAAQqD,YAAUgG,EAErC,IAAIK,GAAe,WAAc,QAASC,GAAiBrB,EAAQsB,GAAS,IAAK,GAAIlJ,GAAI,EAAGA,EAAIkJ,EAAM7D,OAAQrF,IAAK,CAAE,GAAImJ,GAAaD,EAAMlJ,EAAImJ,GAAWvI,WAAauI,EAAWvI,aAAc,EAAOuI,EAAWxI,cAAe,EAAU,SAAWwI,KAAYA,EAAWX,UAAW,GAAM/H,OAAOC,eAAekH,EAAQuB,EAAW9B,IAAK8B,IAAiB,MAAO,UAAUlB,EAAamB,EAAYC,GAAiJ,MAA9HD,IAAYH,EAAiBhB,EAAY/G,UAAWkI,GAAiBC,GAAaJ,EAAiBhB,EAAaoB,GAAqBpB,MAE5hBqB,EAAO,QAASzI,GAAIG,EAAQC,EAAUsI,GAA2B,OAAXvI,IAAiBA,EAASwI,SAAStI,UAAW,IAAIuI,GAAOhJ,OAAOiJ,yBAAyB1I,EAAQC,EAAW,QAAa0H,KAATc,EAAoB,CAAE,GAAIZ,GAASpI,OAAOkJ,eAAe3I,EAAS,OAAe,QAAX6H,MAAmB,GAAkChI,EAAIgI,EAAQ5H,EAAUsI,GAAoB,GAAI,SAAWE,GAAQ,MAAOA,GAAKnI,KAAgB,IAAIf,GAASkJ,EAAK5I,GAAK,QAAe8H,KAAXpI,EAA4C,MAAOA,GAAOL,KAAKqJ,IiBp5E5dY,EAAAtK,EAAA,GjBw5EIuK,EAEJ,SAAgClD,GAAO,MAAOA,IAAOA,EAAInG,WAAamG,GAAQvE,QAASuE,IAFjDiD,GiBr5EhCkY,EjB+5EK,SAAU/B,GAGnB,QAAS+B,KAGP,MAFAta,GAAgBpI,KAAM0iB,GAEfla,EAA2BxI,MAAO0iB,EAAKhc,WAAa5F,OAAOkJ,eAAe0Y,IAAO7X,MAAM7K,KAAMyF,YA+BtG,MApCAiD,GAAUga,EAAM/B,GAQhBtX,EAAaqZ,IACXhb,IAAK,SACL/F,MAAO,SiBz5EFhB,EAAMgB,GACX,GAAIhB,IAASX,KAAKmJ,QAAQtD,WAAalE,EAAO,MAAAgI,GAAA+Y,EAAAnhB,UAAAmF,WAAA5F,OAAAkJ,eAAA0Y,EAAAnhB,WAAA,SAAAvB,MAAAO,KAAAP,KAAoBW,EAAMgB,EACxEA,GAAQ3B,KAAK6G,YAAYub,SAASzgB,GAClC3B,KAAK8K,QAAQ8L,aAAa,OAAQjV,QjB45ElC+F,IAAK,SACL/F,MAAO,SiBh7EKA,GACZ,GAAIwC,oEAAoBxC,EAIxB,OAHAA,GAAQ3B,KAAKoiB,SAASzgB,GACtBwC,EAAKyS,aAAa,OAAQjV,GAC1BwC,EAAKyS,aAAa,SAAU,UACrBzS,KjBm7EPuD,IAAK,UACL/F,MAAO,SiBj7EMmJ,GACb,MAAOA,GAAQ7F,aAAa,WjBo7E5ByC,IAAK,WACL/F,MAAO,SiBl7EO0gB,GACd,MAAOD,GAASC,EAAKriB,KAAK2iB,oBAAsBN,EAAMriB,KAAK4iB,kBjBs7EtDF,GACPjY,EAASzH,QiB96EX0f,GAAK7c,SAAW,OAChB6c,EAAKrd,QAAU,IACfqd,EAAKE,cAAgB,cACrBF,EAAKC,oBAAsB,OAAQ,QAAS,SAAU,OjBy7EtDhjB,EiB96EiBqD,QAAR0f,EjB+6ET/iB,EiB/6E0ByiB,YjBm7EpB,SAAUxiB,EAAQD,EAASO,GAEjC,YAmBA,SAASiI,GAAuBZ,GAAO,MAAOA,IAAOA,EAAInG,WAAamG,GAAQvE,QAASuE,GAEvF,QAASa,GAAgBC,EAAUC,GAAe,KAAMD,YAAoBC,IAAgB,KAAM,IAAIC,WAAU,qCkB7+EhH,QAASsa,GAAoBC,EAAS7X,GACpC6X,EAAQlM,aAAa3L,IAAiD,SAApC6X,EAAQ7d,aAAagG,KlB09EzDnK,OAAOC,eAAepB,EAAS,cAC7BgC,OAAO,GAGT,IAAI6S,GAA4B,kBAAXW,SAAoD,gBAApBA,QAAOjG,SAAwB,SAAU3H,GAAO,aAAcA,IAAS,SAAUA,GAAO,MAAOA,IAAyB,kBAAX4N,SAAyB5N,EAAIV,cAAgBsO,QAAU5N,IAAQ4N,OAAO5T,UAAY,eAAkBgG,IAElQ8B,EAAe,WAAc,QAASC,GAAiBrB,EAAQsB,GAAS,IAAK,GAAIlJ,GAAI,EAAGA,EAAIkJ,EAAM7D,OAAQrF,IAAK,CAAE,GAAImJ,GAAaD,EAAMlJ,EAAImJ,GAAWvI,WAAauI,EAAWvI,aAAc,EAAOuI,EAAWxI,cAAe,EAAU,SAAWwI,KAAYA,EAAWX,UAAW,GAAM/H,OAAOC,eAAekH,EAAQuB,EAAW9B,IAAK8B,IAAiB,MAAO,UAAUlB,EAAamB,EAAYC,GAAiJ,MAA9HD,IAAYH,EAAiBhB,EAAY/G,UAAWkI,GAAiBC,GAAaJ,EAAiBhB,EAAaoB,GAAqBpB,MkBt+EhiBya,EAAA7iB,EAAA,IlB0+EI8iB,EAAa7a,EAAuB4a,GkBz+ExCE,EAAA/iB,EAAA,KlB6+EIgjB,EAAa/a,EAAuB8a,GkB3+EpCE,EAAiB,EAMfC,ElBi/EO,WkBh/EX,QAAAA,GAAYC,GAAQ,GAAArc,GAAAhH,IAAAoI,GAAApI,KAAAojB,GAClBpjB,KAAKqjB,OAASA,EACdrjB,KAAK2R,UAAYkB,SAAS6F,cAAc,QACxC1Y,KAAKsjB,cACLtjB,KAAKqjB,OAAOE,MAAMC,QAAU,OAC5BxjB,KAAKqjB,OAAO9e,WAAWiH,aAAaxL,KAAK2R,UAAW3R,KAAKqjB,QAEzDrjB,KAAKyjB,MAAMpG,iBAAiB,YAAa,WACvCrW,EAAK0c,iBAEP1jB,KAAKyjB,MAAMpG,iBAAiB,UAAW,SAACU,GACtC,OAAOA,EAAM4F,SAEX,IAAKX,GAAAhgB,QAAS6K,KAAK+V,MACjB5c,EAAK0c,cACL,MAGF,KAAKV,GAAAhgB,QAAS6K,KAAKgW,OACjB7c,EAAK8c,SACL/F,EAAMgG,oBAKZ/jB,KAAKqjB,OAAOhG,iBAAiB,SAAUrd,KAAK0X,OAAOoH,KAAK9e,OlBiqF1D,MAzKAqJ,GAAa+Z,IACX1b,IAAK,eACL/F,MAAO,WkBt/EP3B,KAAK2R,UAAU6E,UAAUa,OAAO,eAEhCwL,EAAoB7iB,KAAKyjB,MAAO,iBAChCZ,EAAoB7iB,KAAK4H,QAAS,kBlB0/ElCF,IAAK,YACL/F,MAAO,SkBx/ECqiB,GAAQ,GAAAlY,GAAA9L,KACZkf,EAAOrM,SAAS6F,cAAc,OA+BlC,OA9BAwG,GAAK+E,SAAW,IAChB/E,EAAKtI,aAAa,OAAQ,UAE1BsI,EAAK1I,UAAUC,IAAI,kBACfuN,EAAOE,aAAa,UACtBhF,EAAKtI,aAAa,aAAcoN,EAAO/e,aAAa,UAElD+e,EAAOlD,aACT5B,EAAKtI,aAAa,aAAcoN,EAAOlD,aAEzC5B,EAAK7B,iBAAiB,QAAS,WAC7BvR,EAAKqY,WAAWjF,GAAM,KAExBA,EAAK7B,iBAAiB,UAAW,SAACU,GAChC,OAAOA,EAAM4F,SAEX,IAAKX,GAAAhgB,QAAS6K,KAAK+V,MACjB9X,EAAKqY,WAAWjF,GAAM,GACtBnB,EAAMgG,gBACN,MAGF,KAAKf,GAAAhgB,QAAS6K,KAAKgW,OACjB/X,EAAKgY,SACL/F,EAAMgG,oBAML7E,KlB6/EPxX,IAAK,aACL/F,MAAO,WkB1/EP,GAAI8hB,GAAQ5Q,SAAS6F,cAAc,OAOnC,OANA+K,GAAMjN,UAAUC,IAAI,mBACpBgN,EAAMnN,UAAN4M,EAAAlgB,QACAygB,EAAMQ,SAAW,IACjBR,EAAM7M,aAAa,OAAQ,UAC3B6M,EAAM7M,aAAa,gBAAiB,SACpC5W,KAAK2R,UAAUkQ,YAAY4B,GACpBA,KlB8/EP/b,IAAK,eACL/F,MAAO,WkB5/EM,GAAAiX,GAAA5Y,KACT4H,EAAUiL,SAAS6F,cAAc,OACrC9Q,GAAQ4O,UAAUC,IAAI,qBAGtB7O,EAAQgP,aAAa,cAAe,QACpChP,EAAQqc,SAAW,KAGnBrc,EAAQwc,GAAR,qBAAkCjB,EAClCA,GAAkB,EAClBnjB,KAAKyjB,MAAM7M,aAAa,gBAAiBhP,EAAQwc,IAEjDpkB,KAAK4H,QAAUA,KAEZ+D,MAAMpL,KAAKP,KAAKqjB,OAAOzb,SAASvB,QAAQ,SAAC2d,GAC1C,GAAI9E,GAAOtG,EAAKyL,UAAUL,EAC1Bpc,GAAQia,YAAY3C,IACI,IAApB8E,EAAOM,UACT1L,EAAKuL,WAAWjF,KAGpBlf,KAAK2R,UAAUkQ,YAAYja,MlBigF3BF,IAAK,cACL/F,MAAO,WkB//EK,GAAA0X,GAAArZ,QACT2L,MAAMpL,KAAKP,KAAKqjB,OAAO1e,YAAY0B,QAAQ,SAAC6Y,GAC7C7F,EAAK1H,UAAUiF,aAAasI,EAAKve,KAAMue,EAAKvd,SAE9C3B,KAAK2R,UAAU6E,UAAUC,IAAI,aAC7BzW,KAAKyjB,MAAQzjB,KAAKukB,aAClBvkB,KAAKwkB,kBlBogFL9c,IAAK,SACL/F,MAAO,WkBlgFA,GAAA6X,GAAAxZ,IAEPA,MAAKykB,QAGLC,WAAW,iBAAMlL,GAAKiK,MAAMtK,SAAS,MlBygFrCzR,IAAK,QACL/F,MAAO,WkBtgFP3B,KAAK2R,UAAU6E,UAAU1J,OAAO,eAChC9M,KAAKyjB,MAAM7M,aAAa,gBAAiB,SACzC5W,KAAK4H,QAAQgP,aAAa,cAAe,WlB0gFzClP,IAAK,aACL/F,MAAO,SkBxgFEud,GAAuB,GAAjByF,GAAiBlf,UAAAC,OAAA,OAAAsD,KAAAvD,UAAA,IAAAA,UAAA,GAC5B6e,EAAWtkB,KAAK2R,UAAUmB,cAAc,eAC5C,IAAIoM,IAASoF,IACG,MAAZA,GACFA,EAAS9N,UAAU1J,OAAO,eAEhB,MAARoS,IACJA,EAAK1I,UAAUC,IAAI,eACnBzW,KAAKqjB,OAAOuB,iBAAmBlU,QAAQnQ,KAAK2e,EAAK3a,WAAWkI,SAAUyS,GAClEA,EAAKgF,aAAa,cACpBlkB,KAAKyjB,MAAM7M,aAAa,aAAcsI,EAAKja,aAAa,eAExDjF,KAAKyjB,MAAMpE,gBAAgB,cAEzBH,EAAKgF,aAAa,cACpBlkB,KAAKyjB,MAAM7M,aAAa,aAAcsI,EAAKja,aAAa,eAExDjF,KAAKyjB,MAAMpE,gBAAgB,cAEzBsF,IAAS,CACX,GAAqB,kBAAVE,OACT7kB,KAAKqjB,OAAOyB,cAAc,GAAID,OAAM,eAC/B,IAAqB,YAAjB,mBAAOA,OAAP,YAAArQ,EAAOqQ,QAAoB,CACpC,GAAI9G,GAAQlL,SAASkS,YAAY,QACjChH,GAAMiH,UAAU,UAAU,GAAM,GAChChlB,KAAKqjB,OAAOyB,cAAc/G,GAE5B/d,KAAKykB,YlB+gFP/c,IAAK,SACL/F,MAAO,WkB3gFP,GAAIqiB,SACJ,IAAIhkB,KAAKqjB,OAAOuB,eAAiB,EAAG,CAClC,GAAI1F,GAAOlf,KAAK2R,UAAUmB,cAAc,sBAAsBrG,SAASzM,KAAKqjB,OAAOuB,cACnFZ,GAAShkB,KAAKqjB,OAAOzb,QAAQ5H,KAAKqjB,OAAOuB,eACzC5kB,KAAKmkB,WAAWjF,OAEhBlf,MAAKmkB,WAAW,KAElB,IAAIc,GAAqB,MAAVjB,GAAkBA,IAAWhkB,KAAKqjB,OAAOvQ,cAAc,mBACtE9S,MAAKyjB,MAAMjN,UAAUa,OAAO,YAAa4N,OlBghFpC7B,IAGTzjB,GAAQqD,QkB9gFOogB,GlBkhFT,SAAUxjB,EAAQD,EAASO,GAEjC,YmB/9EA,SAAAglB,GAAA/gB,GACA,GAAAG,GAAA9B,EAAAI,KAAAuB,EACA,UAAAG,EACA,IACAA,EAAA9B,EAAAG,OAAAwB,GAEA,MAAA+b,GACA5b,EAAA9B,EAAAG,OAAAH,EAAAE,MAAAoC,WACA6G,MAAApL,KAAA4D,EAAAghB,YAAA9e,QAAA,SAAA2G,GAEA1I,EAAAwG,QAAA+W,YAAA7U,KAEA7I,EAAAI,YACAJ,EAAAI,WAAA6gB,aAAA9gB,EAAAwG,QAAA3G,GAEAG,EAAA+gB,SAGA,MAAA/gB,GA/PA,GAAAiC,GAAAvG,WAAAuG,WAAA,WACA,GAAAC,GAAA1F,OAAA2F,iBACUC,uBAAgBT,QAAA,SAAAvF,EAAAiG,GAAsCjG,EAAAgG,UAAAC,IAChE,SAAAjG,EAAAiG,GAAyB,OAAAlF,KAAAkF,KAAAnF,eAAAC,KAAAf,EAAAe,GAAAkF,EAAAlF,IACzB,iBAAAf,EAAAiG,GAEA,QAAAC,KAAuB5G,KAAA6G,YAAAnG,EADvB8F,EAAA9F,EAAAiG,GAEAjG,EAAAa,UAAA,OAAAoF,EAAA7F,OAAA6B,OAAAgE,IAAAC,EAAArF,UAAAoF,EAAApF,UAAA,GAAAqF,OAGA9F,QAAAC,eAAApB,EAAA,cAA8CgC,OAAA,GAC9C,IAAA2jB,GAAAplB,EAAA,IACAqlB,EAAArlB,EAAA,IACAsC,EAAAtC,EAAA,GACAslB,EAAA,SAAA1e,GAEA,QAAA0e,GAAA1a,GACA,GAAA9D,GAAAF,EAAAvG,KAAAP,KAAA8K,IAAA9K,IAEA,OADAgH,GAAAye,QACAze,EAwNA,MA5NAT,GAAAif,EAAA1e,GAMA0e,EAAAjkB,UAAAsgB,YAAA,SAAAvS,GACAtP,KAAAwL,aAAA8D,IAEAkW,EAAAjkB,UAAA8jB,OAAA,WACAve,EAAAvF,UAAA8jB,OAAA9kB,KAAAP,MACAA,KAAAyM,SAAApG,QAAA,SAAA2G,GACAA,EAAAqY,YAGAG,EAAAjkB,UAAAkkB,MAAA,WACA,GAAAze,GAAAhH,IACAA,MAAAyM,SAAA,GAAA6Y,GAAAtiB,WAEA2I,MACApL,KAAAP,KAAA8K,QAAAqa,YACAO,UACArf,QAAA,SAAAlC,GACA,IACA,GAAA6I,GAAAkY,EAAA/gB,EACA6C,GAAAwE,aAAAwB,EAAAhG,EAAAyF,SAAAI,UAAA7D,IAEA,MAAA2M,GACA,GAAAA,YAAAnT,GAAAuB,eACA,MAEA,MAAA4R,OAIA6P,EAAAjkB,UAAA4f,SAAA,SAAAhW,EAAAzF,GACA,OAAAyF,GAAAzF,IAAA1F,KAAA0F,SACA,MAAA1F,MAAA8M,QAEA9M,MAAAyM,SAAAkZ,UAAAxa,EAAAzF,EAAA,SAAAsH,EAAA8D,EAAApL,GACAsH,EAAAmU,SAAArQ,EAAApL,MAGA8f,EAAAjkB,UAAA0f,WAAA,SAAA2E,EAAAza,GACA,GAAA0a,GAAA7lB,KAAAyM,SAAA7J,KAAAuI,GAAA6B,EAAA6Y,EAAA,GAAA/U,EAAA+U,EAAA,EACA,cAAAD,EAAA/f,UAAA+f,EAAA5Y,IACA,MAAA4Y,EAAA/f,UAAAmH,YAAA4Y,IACA5Y,EAAA8D,GAEA9D,YAAAwY,GACAxY,EAAAiU,WAAA2E,EAAA9U,IAGA,UAGA0U,EAAAjkB,UAAA0K,YAAA,SAAA2Z,EAAAza,EAAAzF,OACA,KAAAyF,IAA+BA,EAAA,OAC/B,KAAAzF,IAAgCA,EAAAmV,OAAAC,UAChC,IAAA7O,MACA6Z,EAAApgB,CAWA,OAVA1F,MAAAyM,SAAAkZ,UAAAxa,EAAAzF,EAAA,SAAAsH,EAAA7B,EAAAzF,IACA,MAAAkgB,EAAA/f,UAAA+f,EAAA5Y,IACA,MAAA4Y,EAAA/f,UAAAmH,YAAA4Y,KACA3Z,EAAA6B,KAAAd,GAEAA,YAAAwY,KACAvZ,IAAA4D,OAAA7C,EAAAf,YAAA2Z,EAAAza,EAAA2a,KAEAA,GAAApgB,IAEAuG,GAEAuZ,EAAAjkB,UAAAwkB,OAAA,WACA/lB,KAAAyM,SAAApG,QAAA,SAAA2G,GACAA,EAAA+Y,WAEAjf,EAAAvF,UAAAwkB,OAAAxlB,KAAAP,OAEAwlB,EAAAjkB,UAAAigB,SAAA,SAAArW,EAAAzF,EAAA/E,EAAAgB,GACA3B,KAAAyM,SAAAkZ,UAAAxa,EAAAzF,EAAA,SAAAsH,EAAA8D,EAAApL,GACAsH,EAAAwU,SAAA1Q,EAAApL,EAAA/E,EAAAgB,MAGA6jB,EAAAjkB,UAAAmK,SAAA,SAAAP,EAAAxJ,EAAA0J,GACA,GAAAwa,GAAA7lB,KAAAyM,SAAA7J,KAAAuI,GAAA6B,EAAA6Y,EAAA,GAAA/U,EAAA+U,EAAA,EACA,IAAA7Y,EACAA,EAAAtB,SAAAoF,EAAAnP,EAAA0J,OAEA,CACA,GAAA/G,GAAA,MAAA+G,EAAA7I,EAAAG,OAAA,OAAAhB,GAAAa,EAAAG,OAAAhB,EAAA0J,EACArL,MAAA6hB,YAAAvd,KAGAkhB,EAAAjkB,UAAAiK,aAAA,SAAAwa,EAAAC,GACA,SAAAjmB,KAAAmJ,QAAAgE,kBACAnN,KAAAmJ,QAAAgE,gBAAA+Y,KAAA,SAAAlZ,GACA,MAAAgZ,aAAAhZ,KAEA,SAAAxK,GAAAuB,eAAA,iBAAAiiB,EAAA7c,QAAAtD,SAAA,SAAA7F,KAAAmJ,QAAAtD,SAEAmgB,GAAAG,WAAAnmB,KAAAimB,IAEAT,EAAAjkB,UAAAmE,OAAA,WACA,MAAA1F,MAAAyM,SAAAP,OAAA,SAAAka,EAAApZ,GACA,MAAAoZ,GAAApZ,EAAAtH,UACS,IAET8f,EAAAjkB,UAAA8P,aAAA,SAAAgV,EAAA5N,GACAzY,KAAAyM,SAAApG,QAAA,SAAA2G,GACAqZ,EAAA7a,aAAAwB,EAAAyL,MAGA+M,EAAAjkB,UAAAwgB,SAAA,SAAAhV,GAEA,GADAjG,EAAAvF,UAAAwgB,SAAAxhB,KAAAP,KAAA+M,GACA,IAAA/M,KAAAyM,SAAA/G,OACA,SAAA1F,KAAAmJ,QAAA+D,aAAA,CACA,GAAAF,GAAAxK,EAAAG,OAAA3C,KAAAmJ,QAAA+D,aACAlN,MAAA6hB,YAAA7U,GACAA,EAAA+U,SAAAhV,OAGA/M,MAAA8M,UAIA0Y,EAAAjkB,UAAA8W,KAAA,SAAAlN,EAAAmb,OACA,KAAAA,IAAmCA,GAAA,EACnC,IAAAT,GAAA7lB,KAAAyM,SAAA7J,KAAAuI,EAAAmb,GAAAtZ,EAAA6Y,EAAA,GAAA/U,EAAA+U,EAAA,GACAU,IAAAvmB,KAAAmL,GACA,OAAA6B,aAAAwY,GACAe,EAAA1W,OAAA7C,EAAAqL,KAAAvH,EAAAwV,KAEA,MAAAtZ,GACAuZ,EAAAzY,MAAAd,EAAA8D,IAEAyV,IAEAf,EAAAjkB,UAAAygB,YAAA,SAAAhV,GACAhN,KAAAyM,SAAAK,OAAAE,IAEAwY,EAAAjkB,UAAA6d,QAAA,SAAAnX,GACAA,YAAAud,IACAvd,EAAAoJ,aAAArR,MAEA8G,EAAAvF,UAAA6d,QAAA7e,KAAAP,KAAAiI,IAEAud,EAAAjkB,UAAA2D,MAAA,SAAAiG,EAAA8B,GAEA,OADA,KAAAA,IAA+BA,GAAA,IAC/BA,EAAA,CACA,OAAA9B,EACA,MAAAnL,KACA,IAAAmL,IAAAnL,KAAA0F,SACA,MAAA1F,MAAAyL,KAEA,GAAA+a,GAAAxmB,KAAAgI,OAMA,OALAhI,MAAAkJ,OAAAsC,aAAAgb,EAAAxmB,KAAAyL,MACAzL,KAAAyM,SAAAkZ,UAAAxa,EAAAnL,KAAA0F,SAAA,SAAAsH,EAAA8D,EAAApL,GACAsH,IAAA9H,MAAA4L,EAAA7D,GACAuZ,EAAA3E,YAAA7U,KAEAwZ,GAEAhB,EAAAjkB,UAAA0gB,OAAA,WACAjiB,KAAAqR,aAAArR,KAAAkJ,OAAAlJ,KAAAyL,MACAzL,KAAA8M,UAEA0Y,EAAAjkB,UAAAmW,OAAA,SAAAF,EAAAzK,GACA,GAAA/F,GAAAhH,KACAymB,KACAC,IACAlP,GAAAnR,QAAA,SAAAsgB,GACAA,EAAA1e,SAAAjB,EAAA8D,SAAA,cAAA6b,EAAAvP,OACAqP,EAAA3Y,KAAAjD,MAAA4b,EAAAE,EAAAF,YACAC,EAAA5Y,KAAAjD,MAAA6b,EAAAC,EAAAD,iBAGAA,EAAArgB,QAAA,SAAAlC,GAIA,WAAAA,EAAAI,YAEA,WAAAJ,EAAAkB,SACAwN,SAAA+T,KAAAC,wBAAA1iB,GAAAF,KAAA6iB,gCAHA,CAMA,GAAAxiB,GAAA9B,EAAAI,KAAAuB,EACA,OAAAG,IAEA,MAAAA,EAAAwG,QAAAvG,YAAAD,EAAAwG,QAAAvG,aAAAyC,EAAA8D,SACAxG,EAAAyhB,aAGAU,EACAnY,OAAA,SAAAnK,GACA,MAAAA,GAAAI,YAAAyC,EAAA8D,UAEAqV,KAAA,SAAAT,EAAA/Y,GACA,MAAA+Y,KAAA/Y,EACA,EACA+Y,EAAAmH,wBAAAlgB,GAAA1C,KAAA8iB,4BACA,GAEA,IAEA1gB,QAAA,SAAAlC,GACA,GAAA8hB,GAAA,IACA,OAAA9hB,EAAA6iB,cACAf,EAAAzjB,EAAAI,KAAAuB,EAAA6iB,aAEA,IAAA1iB,GAAA4gB,EAAA/gB,EACAG,GAAAmH,MAAAwa,GAAA,MAAA3hB,EAAAmH,OACA,MAAAnH,EAAA4E,QACA5E,EAAA4E,OAAA8Y,YAAAhb,GAEAA,EAAAwE,aAAAlH,EAAA2hB,OAAAjd,QAIAwc,GACCD,EAAAviB,QAqBDrD,GAAAqD,QAAAwiB,GnBmtFM,SAAU5lB,EAAQD,EAASO,GAEjC,YoBt9FA,IAAAqG,GAAAvG,WAAAuG,WAAA,WACA,GAAAC,GAAA1F,OAAA2F,iBACUC,uBAAgBT,QAAA,SAAAvF,EAAAiG,GAAsCjG,EAAAgG,UAAAC,IAChE,SAAAjG,EAAAiG,GAAyB,OAAAlF,KAAAkF,KAAAnF,eAAAC,KAAAf,EAAAe,GAAAkF,EAAAlF,IACzB,iBAAAf,EAAAiG,GAEA,QAAAC,KAAuB5G,KAAA6G,YAAAnG,EADvB8F,EAAA9F,EAAAiG,GAEAjG,EAAAa,UAAA,OAAAoF,EAAA7F,OAAA6B,OAAAgE,IAAAC,EAAArF,UAAAoF,EAAApF,UAAA,GAAAqF,OAGA9F,QAAAC,eAAApB,EAAA,cAA8CgC,OAAA,GAC9C,IAAAS,GAAAlC,EAAA,IACAqC,EAAArC,EAAA,IACA0B,EAAA1B,EAAA,IACAsC,EAAAtC,EAAA,GACA+mB,EAAA,SAAAngB,GAEA,QAAAmgB,GAAAnc,GACA,GAAA9D,GAAAF,EAAAvG,KAAAP,KAAA8K,IAAA9K,IAEA,OADAgH,GAAArC,WAAA,GAAApC,GAAAS,QAAAgE,EAAA8D,SACA9D,EAmDA,MAvDAT,GAAA0gB,EAAAngB,GAMAmgB,EAAAle,QAAA,SAAA+B,GACA,sBAAA9K,MAAAqF,UAGAY,MAAAC,QAAAlG,KAAAqF,SACAyF,EAAAzF,QAAA6hB,kBADA,KAKAD,EAAA1lB,UAAA6J,OAAA,SAAAzK,EAAAgB,GACA,GAAAyJ,GAAA5I,EAAAK,MAAAlC,EACAyK,aAAAhJ,GAAAY,QACAhD,KAAA2E,WAAAsG,UAAAG,EAAAzJ,GAEAA,IACA,MAAAyJ,GAAAzK,IAAAX,KAAAmJ,QAAAtD,UAAA7F,KAAA+I,UAAApI,KAAAgB,GACA3B,KAAAmnB,YAAAxmB,EAAAgB,KAIAslB,EAAA1lB,UAAAwH,QAAA,WACA,GAAAA,GAAA/I,KAAA2E,WAAAqG,SACAI,EAAApL,KAAAmJ,QAAAJ,QAAA/I,KAAA8K,QAIA,OAHA,OAAAM,IACArC,EAAA/I,KAAAmJ,QAAAtD,UAAAuF,GAEArC,GAEAke,EAAA1lB,UAAA4lB,YAAA,SAAAxmB,EAAAgB,GACA,GAAAylB,GAAAtgB,EAAAvF,UAAA4lB,YAAA5mB,KAAAP,KAAAW,EAAAgB,EAEA,OADA3B,MAAA2E,WAAAmD,KAAAsf,GACAA,GAEAH,EAAA1lB,UAAAmW,OAAA,SAAAF,EAAAzK,GACA,GAAA/F,GAAAhH,IACA8G,GAAAvF,UAAAmW,OAAAnX,KAAAP,KAAAwX,EAAAzK,GACAyK,EAAA0O,KAAA,SAAAS,GACA,MAAAA,GAAA1e,SAAAjB,EAAA8D,SAAA,eAAA6b,EAAAvP,QAEApX,KAAA2E,WAAA8gB,SAGAwB,EAAA1lB,UAAA6P,KAAA,SAAAzQ,EAAAgB,GACA,GAAA0lB,GAAAvgB,EAAAvF,UAAA6P,KAAA7Q,KAAAP,KAAAW,EAAAgB,EAIA,OAHA0lB,aAAAJ,IAAAI,EAAAle,QAAA3E,QAAAxE,KAAAmJ,QAAA3E,OACAxE,KAAA2E,WAAA2iB,KAAAD,GAEAA,GAEAJ,GACCrlB,EAAAoB,QACDrD,GAAAqD,QAAAikB,GpB69FM,SAAUrnB,EAAQD,EAASO,GAEjC,YqBxiGA,IAAAqG,GAAAvG,WAAAuG,WAAA,WACA,GAAAC,GAAA1F,OAAA2F,iBACUC,uBAAgBT,QAAA,SAAAvF,EAAAiG,GAAsCjG,EAAAgG,UAAAC,IAChE,SAAAjG,EAAAiG,GAAyB,OAAAlF,KAAAkF,KAAAnF,eAAAC,KAAAf,EAAAe,GAAAkF,EAAAlF,IACzB,iBAAAf,EAAAiG,GAEA,QAAAC,KAAuB5G,KAAA6G,YAAAnG,EADvB8F,EAAA9F,EAAAiG,GAEAjG,EAAAa,UAAA,OAAAoF,EAAA7F,OAAA6B,OAAAgE,IAAAC,EAAArF,UAAAoF,EAAApF,UAAA,GAAAqF,OAGA9F,QAAAC,eAAApB,EAAA,cAA8CgC,OAAA,GAC9C,IAAA4jB,GAAArlB,EAAA,IACAsC,EAAAtC,EAAA,GACAqnB,EAAA,SAAAzgB,GAEA,QAAAygB,KACA,cAAAzgB,KAAA+D,MAAA7K,KAAAyF,YAAAzF,KAuBA,MAzBAuG,GAAAghB,EAAAzgB,GAIAygB,EAAA5lB,MAAA,SAAAmJ,GACA,UAEAyc,EAAAhmB,UAAA4J,MAAA,SAAAhH,EAAA2M,GACA,MAAA9Q,MAAA8K,UAAA3G,GACAnE,KAAA8K,QAAA+b,wBAAA1iB,GAAAF,KAAA6iB,+BACA1a,KAAAC,IAAAyE,EAAA,IAEA,GAEAyW,EAAAhmB,UAAAglB,SAAA,SAAApb,EAAAmb,GACA,GAAAxV,MAAAJ,QAAAnQ,KAAAP,KAAAkJ,OAAA4B,QAAAqa,WAAAnlB,KAAA8K,QAGA,OAFAK,GAAA,IACA2F,GAAA,IACA9Q,KAAAkJ,OAAA4B,QAAAgG,IAEAyW,EAAAhmB,UAAAI,MAAA,WACA,MAAAkkB,MAAsBA,EAAA7lB,KAAAmJ,QAAAtD,UAAA7F,KAAAmJ,QAAAxH,MAAA3B,KAAA8K,WAAA,EAAA+a,CACtB,IAAAA,IAEA0B,EAAA/iB,MAAAhC,EAAAE,MAAA8kB,YACAD,GACChC,EAAAviB,QACDrD,GAAAqD,QAAAukB,GrB+iGM,SAAU3nB,EAAQD,EAASO,GsBvhGjC,QAAAunB,GAAA9Z,GACA3N,KAAA2N,MACA3N,KAAAmL,MAAA,EACAnL,KAAA8Q,OAAA,EArEA,GAAAzD,GAAAnN,EAAA,IACAyH,EAAAzH,EAAA,GAGAwnB,GACA/iB,YACA0K,QAAA,SAAAqQ,EAAA/Y,EAAAghB,GACA,gBAAAjI,WACA,gBAAA/Y,UACA,IAAAhC,GAAAgD,GAAA,KAAsChB,EACtCghB,KACAhjB,EAAA7D,OAAA+M,KAAAlJ,GAAAuH,OAAA,SAAApE,EAAAJ,GAIA,MAHA,OAAA/C,EAAA+C,KACAI,EAAAJ,GAAA/C,EAAA+C,IAEAI,OAGA,QAAAJ,KAAAgY,OACA1W,KAAA0W,EAAAhY,QAAAsB,KAAArC,EAAAe,KACA/C,EAAA+C,GAAAgY,EAAAhY,GAGA,OAAA5G,QAAA+M,KAAAlJ,GAAAe,OAAA,EAAAf,MAAAqE,IAGAoE,KAAA,SAAAsS,EAAA/Y,GACA,gBAAA+Y,WACA,gBAAA/Y,UACA,IAAAhC,GAAA7D,OAAA+M,KAAA6R,GAAA7P,OAAA/O,OAAA+M,KAAAlH,IAAAuF,OAAA,SAAAvH,EAAA+C,GAIA,MAHA2F,GAAAqS,EAAAhY,GAAAf,EAAAe,MACA/C,EAAA+C,OAAAsB,KAAArC,EAAAe,GAAA,KAAAf,EAAAe,IAEA/C,MAEA,OAAA7D,QAAA+M,KAAAlJ,GAAAe,OAAA,EAAAf,MAAAqE,IAGA2H,UAAA,SAAA+O,EAAA/Y,EAAAiK,GACA,mBAAA8O,GAAA,MAAA/Y,EACA,oBAAAA,GAAA,CACA,IAAAiK,EAAA,MAAAjK,EACA,IAAAhC,GAAA7D,OAAA+M,KAAAlH,GAAAuF,OAAA,SAAAvH,EAAA+C,GAEA,WADAsB,KAAA0W,EAAAhY,KAAA/C,EAAA+C,GAAAf,EAAAe,IACA/C,MAEA,OAAA7D,QAAA+M,KAAAlJ,GAAAe,OAAA,EAAAf,MAAAqE,MAIAkG,SAAA,SAAAvB,GACA,UAAA8Z,GAAA9Z,IAGAjI,OAAA,SAAA4H,GACA,sBAAAA,GAAA,OACAA,EAAA,OACK,gBAAAA,GAAAU,OACLV,EAAAU,OAEA,gBAAAV,GAAAvC,OAAAuC,EAAAvC,OAAArF,OAAA,GAYA+hB,GAAAlmB,UAAA4N,QAAA,WACA,MAAAnP,MAAA0P,aAAAV,KAGAyY,EAAAlmB,UAAAkK,KAAA,SAAA/F,GACAA,MAAAsJ,IACA,IAAAI,GAAApP,KAAA2N,IAAA3N,KAAAmL,MACA,IAAAiE,EAAA,CACA,GAAA0B,GAAA9Q,KAAA8Q,OACAX,EAAAuX,EAAAhiB,OAAA0J,EAQA,IAPA1J,GAAAyK,EAAAW,GACApL,EAAAyK,EAAAW,EACA9Q,KAAAmL,OAAA,EACAnL,KAAA8Q,OAAA,GAEA9Q,KAAA8Q,QAAApL,EAEA,gBAAA0J,GAAA,OACA,OAAcrB,OAAArI,EAEd,IAAAkiB,KAYA,OAXAxY,GAAAzK,aACAijB,EAAAjjB,WAAAyK,EAAAzK,YAEA,gBAAAyK,GAAApB,OACA4Z,EAAA5Z,OAAAtI,EACO,gBAAA0J,GAAArE,OACP6c,EAAA7c,OAAAqE,EAAArE,OAAA8c,OAAA/W,EAAApL,GAGAkiB,EAAA7c,OAAAqE,EAAArE,OAEA6c,EAGA,OAAY5Z,OAAAgB,MAIZyY,EAAAlmB,UAAAkP,KAAA,WACA,MAAAzQ,MAAA2N,IAAA3N,KAAAmL,QAGAsc,EAAAlmB,UAAAmO,WAAA,WACA,MAAA1P,MAAA2N,IAAA3N,KAAAmL,OAEAuc,EAAAhiB,OAAA1F,KAAA2N,IAAA3N,KAAAmL,QAAAnL,KAAA8Q,OAEA9B,KAIAyY,EAAAlmB,UAAAkO,SAAA,WACA,MAAAzP,MAAA2N,IAAA3N,KAAAmL,OACA,gBAAAnL,MAAA2N,IAAA3N,KAAAmL,OAAA,OACA,SACK,gBAAAnL,MAAA2N,IAAA3N,KAAAmL,OAAA6C,OACL,SAEA,SAGA,UAIApO,EAAAD,QAAA+nB,GtBgmGM,SAAU9nB,EAAQD,GuB1uGxB,GAAAqI,GAAA,WACA,YAEA,SAAA8f,GAAAvgB,EAAA6P,GACA,aAAAA,GAAA7P,YAAA6P,GA+CA,QAAApP,GAAAkB,EAAA6e,EAAAC,EAAAzmB,EAAA0mB,GAqBA,QAAAC,GAAAhf,EAAA8e,GAEA,UAAA9e,EACA,WAEA,QAAA8e,EACA,MAAA9e,EAEA,IAAA8D,GACAmb,CACA,oBAAAjf,GACA,MAAAA,EAGA,IAAA4e,EAAA5e,EAAAkf,GACApb,EAAA,GAAAob,OACK,IAAAN,EAAA5e,EAAAmf,GACLrb,EAAA,GAAAqb,OACK,IAAAP,EAAA5e,EAAAof,GACLtb,EAAA,GAAAsb,GAAA,SAAAC,EAAAC,GACAtf,EAAAuf,KAAA,SAAA9mB,GACA4mB,EAAAL,EAAAvmB,EAAAqmB,EAAA,KACS,SAAArS,GACT6S,EAAAN,EAAAvS,EAAAqS,EAAA,YAGK,IAAAhgB,EAAA0gB,UAAAxf,GACL8D,SACK,IAAAhF,EAAA2gB,WAAAzf,GACL8D,EAAA,GAAA4b,QAAA1f,EAAA+J,OAAA4V,EAAA3f,IACAA,EAAA4f,YAAA9b,EAAA8b,UAAA5f,EAAA4f,eACK,IAAA9gB,EAAA+gB,SAAA7f,GACL8D,EAAA,GAAAsT,MAAApX,EAAAqX,eACK,IAAAyI,GAAAC,OAAA1J,SAAArW,GAGL,MAFA8D,GAAA,GAAAic,QAAA/f,EAAAxD,QACAwD,EAAApB,KAAAkF,GACAA,CACK8a,GAAA5e,EAAAjC,OACL+F,EAAAlM,OAAA6B,OAAAuG,OAEA,KAAA3H,GACA4mB,EAAArnB,OAAAkJ,eAAAd,GACA8D,EAAAlM,OAAA6B,OAAAwlB,KAGAnb,EAAAlM,OAAA6B,OAAApB,GACA4mB,EAAA5mB,GAIA,GAAAwmB,EAAA,CACA,GAAA5c,GAAA+d,EAAAxY,QAAAxH,EAEA,QAAAiC,EACA,MAAAge,GAAAhe,EAEA+d,GAAApb,KAAA5E,GACAigB,EAAArb,KAAAd,GAGA8a,EAAA5e,EAAAkf,IACAlf,EAAA7C,QAAA,SAAA1E,EAAA+F,GACA,GAAA0hB,GAAAlB,EAAAxgB,EAAAsgB,EAAA,GACAqB,EAAAnB,EAAAvmB,EAAAqmB,EAAA,EACAhb,GAAAsc,IAAAF,EAAAC,KAGAvB,EAAA5e,EAAAmf,IACAnf,EAAA7C,QAAA,SAAA1E,GACA,GAAA4nB,GAAArB,EAAAvmB,EAAAqmB,EAAA,EACAhb,GAAAyJ,IAAA8S,IAIA,QAAAlpB,KAAA6I,GAAA,CACA,GAAAsgB,EACArB,KACAqB,EAAA1oB,OAAAiJ,yBAAAoe,EAAA9nB,IAGAmpB,GAAA,MAAAA,EAAAF,MAGAtc,EAAA3M,GAAA6nB,EAAAhf,EAAA7I,GAAA2nB,EAAA,IAGA,GAAAlnB,OAAA2oB,sBAEA,OADAC,GAAA5oB,OAAA2oB,sBAAAvgB,GACA7I,EAAA,EAAqBA,EAAAqpB,EAAAhkB,OAAoBrF,IAAA,CAGzC,GAAAspB,GAAAD,EAAArpB,GACAmJ,EAAA1I,OAAAiJ,yBAAAb,EAAAygB,KACAngB,KAAAvI,YAAAgnB,KAGAjb,EAAA2c,GAAAzB,EAAAhf,EAAAygB,GAAA3B,EAAA,GACAxe,EAAAvI,YACAH,OAAAC,eAAAiM,EAAA2c,GACA1oB,YAAA,KAMA,GAAAgnB,EAEA,OADA2B,GAAA9oB,OAAA+oB,oBAAA3gB,GACA7I,EAAA,EAAqBA,EAAAupB,EAAAlkB,OAA6BrF,IAAA,CAClD,GAAAypB,GAAAF,EAAAvpB,GACAmJ,EAAA1I,OAAAiJ,yBAAAb,EAAA4gB,EACAtgB,MAAAvI,aAGA+L,EAAA8c,GAAA5B,EAAAhf,EAAA4gB,GAAA9B,EAAA,GACAlnB,OAAAC,eAAAiM,EAAA8c,GACA7oB,YAAA,KAKA,MAAA+L,GA5IA,gBAAA+a,KACAC,EAAAD,EAAAC,MACAzmB,EAAAwmB,EAAAxmB,UACA0mB,EAAAF,EAAAE,qBACAF,aAIA,IAAAmB,MACAC,KAEAH,EAAA,mBAAAC,OAoIA,YAlIA,KAAAlB,IACAA,GAAA,OAEA,KAAAC,IACAA,EAAAhZ,KA8HAkZ,EAAAhf,EAAA8e,GAqBA,QAAA+B,GAAAlpB,GACA,MAAAC,QAAAS,UAAA6F,SAAA7G,KAAAM,GAIA,QAAAkoB,GAAAloB,GACA,sBAAAA,IAAA,kBAAAkpB,EAAAlpB,GAIA,QAAA6nB,GAAA7nB,GACA,sBAAAA,IAAA,mBAAAkpB,EAAAlpB,GAIA,QAAA8nB,GAAA9nB,GACA,sBAAAA,IAAA,oBAAAkpB,EAAAlpB,GAIA,QAAAgoB,GAAAmB,GACA,GAAAC,GAAA,EAIA,OAHAD,GAAAE,SAAAD,GAAA,KACAD,EAAAG,aAAAF,GAAA,KACAD,EAAAI,YAAAH,GAAA,KACAA,EA1OA,GAAA7B,EACA,KACAA,EAAAiC,IACC,MAAAC,GAGDlC,EAAA,aAGA,GAAAC,EACA,KACAA,EAAAkC,IACC,MAAAD,GACDjC,EAAA,aAGA,GAAAC,EACA,KACAA,EAAAkC,QACC,MAAAF,GACDhC,EAAA,aA0NA,MAxCAtgB,GAAAyiB,eAAA,SAAAvhB,GACA,UAAAA,EACA,WAEA,IAAAzI,GAAA,YAEA,OADAA,GAAAc,UAAA2H,EACA,GAAAzI,IAQAuH,EAAA+hB,aAKA/hB,EAAA+gB,WAKA/gB,EAAA0gB,YAKA1gB,EAAA2gB,aASA3gB,EAAA6gB,mBAEA7gB,IAGA,iBAAApI,MAAAD,UACAC,EAAAD,QAAAqI,IvBkvGM,SAAUpI,EAAQD,EAASO,GAEjC,YAgCA,SAASiI,GAAuBZ,GAAO,MAAOA,IAAOA,EAAInG,WAAamG,GAAQvE,QAASuE,GAEvF,QAASmjB,GAAmBrjB,GAAO,GAAIpB,MAAMC,QAAQmB,GAAM,CAAE,IAAK,GAAIhH,GAAI,EAAGsqB,EAAO1kB,MAAMoB,EAAI3B,QAASrF,EAAIgH,EAAI3B,OAAQrF,IAAOsqB,EAAKtqB,GAAKgH,EAAIhH,EAAM,OAAOsqB,GAAe,MAAO1kB,OAAM2kB,KAAKvjB,GAE1L,QAASe,GAAgBC,EAAUC,GAAe,KAAMD,YAAoBC,IAAgB,KAAM,IAAIC,WAAU,qCwB/rGhH,QAASoT,GAASzS,EAAQ+X,GACxB,IAEEA,EAAW1c,WACX,MAAO2b,GACP,OAAO,EAOT,MAHIe,aAAsB1d,QACxB0d,EAAaA,EAAW1c,YAEnB2E,EAAOyS,SAASsF,GxBkpGzBngB,OAAOC,eAAepB,EAAS,cAC7BgC,OAAO,IAEThC,EAAQqD,QAAUrD,EAAQuV,UAAQlM,EAElC,IAAI6L,GAAiB,WAAc,QAASO,GAAc/N,EAAKhH,GAAK,GAAIgV,MAAeC,GAAK,EAAUC,GAAK,EAAWC,MAAKxM,EAAW,KAAM,IAAK,GAAiCyM,GAA7BjQ,EAAK6B,EAAI8N,OAAOjG,cAAmBoG,GAAMG,EAAKjQ,EAAGiG,QAAQiK,QAAoBL,EAAKvH,KAAK2H,EAAG9T,QAAYtB,GAAKgV,EAAK3P,SAAWrF,GAA3DiV,GAAK,IAAoE,MAAOK,GAAOJ,GAAK,EAAMC,EAAKG,EAAO,QAAU,KAAWL,GAAM9P,EAAW,QAAGA,EAAW,SAAO,QAAU,GAAI+P,EAAI,KAAMC,IAAQ,MAAOH,GAAQ,MAAO,UAAUhO,EAAKhH,GAAK,GAAI4F,MAAMC,QAAQmB,GAAQ,MAAOA,EAAY,IAAI8N,OAAOjG,WAAYpO,QAAOuG,GAAQ,MAAO+N,GAAc/N,EAAKhH,EAAa,MAAM,IAAIkI,WAAU,4DAEllBc,EAAe,WAAc,QAASC,GAAiBrB,EAAQsB,GAAS,IAAK,GAAIlJ,GAAI,EAAGA,EAAIkJ,EAAM7D,OAAQrF,IAAK,CAAE,GAAImJ,GAAaD,EAAMlJ,EAAImJ,GAAWvI,WAAauI,EAAWvI,aAAc,EAAOuI,EAAWxI,cAAe,EAAU,SAAWwI,KAAYA,EAAWX,UAAW,GAAM/H,OAAOC,eAAekH,EAAQuB,EAAW9B,IAAK8B,IAAiB,MAAO,UAAUlB,EAAamB,EAAYC,GAAiJ,MAA9HD,IAAYH,EAAiBhB,EAAY/G,UAAWkI,GAAiBC,GAAaJ,EAAiBhB,EAAaoB,GAAqBpB,MwBv/GhiB8B,EAAAlK,EAAA,GxB2/GImK,EAAclC,EAAuBiC,GwB1/GzC8d,EAAAhoB,EAAA,IxB8/GI2qB,EAAU1iB,EAAuB+f,GwB7/GrC4C,EAAA5qB,EAAA,IxBigHI6qB,EAAc5iB,EAAuB2iB,GwBhgHzChV,EAAA5V,EAAA,GxBogHIkT,EAAYjL,EAAuB2N,GwBngHvCI,EAAAhW,EAAA,IxBugHIiW,EAAWhO,EAAuB+N,GwBrgHlCxD,GAAQ,EAAAyD,EAAAnT,SAAO,mBAGbkS,EACJ,QAAAA,GAAY/J,GAAmB,GAAZzF,GAAYD,UAAAC,OAAA,OAAAsD,KAAAvD,UAAA,GAAAA,UAAA,GAAH,CAAG2C,GAAApI,KAAAkV,GAC7BlV,KAAKmL,MAAQA,EACbnL,KAAK0F,OAASA,GAKZslB,ExB6gHU,WwB5gHd,QAAAA,GAAYlU,EAAQ3C,GAAS,GAAAnN,GAAAhH,IAAAoI,GAAApI,KAAAgrB,GAC3BhrB,KAAKmU,QAAUA,EACfnU,KAAK8W,OAASA,EACd9W,KAAKirB,WAAY,EACjBjrB,KAAKkrB,WAAY,EACjBlrB,KAAKP,KAAOO,KAAK8W,OAAOhM,QACxB9K,KAAKmrB,OAAS9gB,EAAArH,QAAUL,OAAO,SAAU3C,MAEzCA,KAAKyX,UAAYzX,KAAKorB,WAAa,GAAIlW,GAAM,EAAG,GAChDlV,KAAKqrB,oBACLrrB,KAAKsrB,iBACLtrB,KAAKmU,QAAQoX,UAAU,kBAAmB1Y,SAAU,WAC7C7L,EAAKkkB,WACRxG,WAAW1d,EAAK0Q,OAAOoH,KAAZ9X,EAAuBoM,EAAApQ,QAAQqQ,QAAQC,MAAO,KAG7DtT,KAAKmU,QAAQgD,GAAG/D,EAAApQ,QAAQiR,OAAOI,cAAe,SAAC+C,EAAMpL,GAC/CoL,IAAShE,EAAApQ,QAAQiR,OAAOC,aAAelI,EAAMtG,SAAW,GAC1DsB,EAAK0Q,OAAOtE,EAAApQ,QAAQqQ,QAAQS,UAGhC9T,KAAKmU,QAAQgD,GAAG/D,EAAApQ,QAAQiR,OAAOmK,qBAAsB,WACnD,GAAKpX,EAAKmU,WAAV,CACA,GAAIqQ,GAASxkB,EAAKykB,gBACJ,OAAVD,GACAA,EAAO1c,MAAM3K,OAAS6C,EAAKmkB,OAAOO,UAEtC1kB,EAAKmN,QAAQ0H,KAAKzI,EAAApQ,QAAQiR,OAAOsD,cAAe,WAC9C,IACEvQ,EAAK2kB,eAAeH,EAAO1c,MAAM3K,KAAMqnB,EAAO1c,MAAMgC,OAAQ0a,EAAOzc,IAAI5K,KAAMqnB,EAAOzc,IAAI+B,QACxF,MAAO8a,UAGb5rB,KAAKmU,QAAQgD,GAAG/D,EAAApQ,QAAQiR,OAAOoK,gBAAiB,SAAC7G,EAAWzK,GAC1D,GAAIA,EAAQwG,MAAO,IAAAsY,GACsC9e,EAAQwG,MAAvDuY,EADSD,EACTC,UAAWC,EADFF,EACEE,YAAaC,EADfH,EACeG,QAASC,EADxBJ,EACwBI,SACzCjlB,GAAK2kB,eAAeG,EAAWC,EAAaC,EAASC,MAGzDjsB,KAAK0X,OAAOtE,EAAApQ,QAAQqQ,QAAQS,QxBo4H9B,MA3WAzK,GAAa2hB,IACXtjB,IAAK,oBACL/F,MAAO,WwBxhHW,GAAAmK,GAAA9L,IAClBA,MAAKP,KAAK4d,iBAAiB,mBAAoB,WAC7CvR,EAAKmf,WAAY,IAEnBjrB,KAAKP,KAAK4d,iBAAiB,iBAAkB,WAE3C,GADAvR,EAAKmf,WAAY,EACbnf,EAAKqf,OAAOjiB,OAAQ,CACtB,GAAMqK,GAAQzH,EAAKqf,OAAOe,SAC1B,KAAK3Y,EAAO,MACZmR,YAAW,WACT5Y,EAAK6f,eAAepY,EAAMuY,UAAWvY,EAAMwY,YAAaxY,EAAMyY,QAASzY,EAAM0Y,YAC5E,SxB+hHPvkB,IAAK,iBACL/F,MAAO,WwB3hHQ,GAAAiX,GAAA5Y,IACfA,MAAKmU,QAAQoX,UAAU,YAAa1Y,SAAS+T,KAAM,WACjDhO,EAAKsS,WAAY,IAEnBlrB,KAAKmU,QAAQoX,UAAU,UAAW1Y,SAAS+T,KAAM,WAC/ChO,EAAKsS,WAAY,EACjBtS,EAAKlB,OAAOtE,EAAApQ,QAAQqQ,QAAQC,WxBiiH9B5L,IAAK,QACL/F,MAAO,WwB7hHH3B,KAAKmb,aACTnb,KAAKP,KAAK0Z,QACVnZ,KAAK2Y,SAAS3Y,KAAKorB,gBxBiiHnB1jB,IAAK,SACL/F,MAAO,SwB/hHFyJ,EAAQzJ,GACb,GAA6B,MAAzB3B,KAAK8W,OAAOC,WAAsB/W,KAAK8W,OAAOC,UAAU3L,GAA5D,CACApL,KAAK8W,OAAOY,QACZ,IAAIyU,GAAcnsB,KAAKyrB,gBACvB,IAAmB,MAAfU,GAAwBA,EAAYX,OAAOY,YAAa/hB,EAAArH,QAAUH,MAAMuI,EAAQf,EAAArH,QAAUN,MAAMmC,OAApG,CACA,GAAIsnB,EAAYrd,MAAM3K,OAASnE,KAAKmrB,OAAOO,SAAU,CACnD,GAAIpnB,GAAO+F,EAAArH,QAAUJ,KAAKupB,EAAYrd,MAAM3K,MAAM,EAClD,IAAY,MAARG,EAAc,MAElB,IAAIA,YAAgB+F,GAAArH,QAAUE,KAAM,CAClC,GAAIsjB,GAAQliB,EAAKY,MAAMinB,EAAYrd,MAAMgC,OACzCxM,GAAK4E,OAAOsC,aAAaxL,KAAKmrB,OAAQ3E,OAEtCliB,GAAKkH,aAAaxL,KAAKmrB,OAAQgB,EAAYrd,MAAM3K,KAEnDnE,MAAKmrB,OAAO9F,SAEdrlB,KAAKmrB,OAAO/f,OAAOA,EAAQzJ,GAC3B3B,KAAK8W,OAAOiL,WACZ/hB,KAAK2rB,eAAe3rB,KAAKmrB,OAAOO,SAAU1rB,KAAKmrB,OAAOO,SAASW,KAAK3mB,QACpE1F,KAAK0X,cxBkiHLhQ,IAAK,YACL/F,MAAO,SwBhiHCwJ,GAAmB,GAAZzF,GAAYD,UAAAC,OAAA,OAAAsD,KAAAvD,UAAA,GAAAA,UAAA,GAAH,EACpB6mB,EAAetsB,KAAK8W,OAAOpR,QAC/ByF,GAAQiB,KAAKC,IAAIlB,EAAOmhB,EAAe,GACvC5mB,EAAS0G,KAAKC,IAAIlB,EAAQzF,EAAQ4mB,EAAe,GAAKnhB,CAClD,IAAAhH,OAAA,GAAAooB,EAAuBvsB,KAAK8W,OAAO3K,KAAKhB,GAAxCqhB,EAAA3X,EAAA0X,EAAA,GAAOpgB,EAAPqgB,EAAA,GAAa1b,EAAb0b,EAAA,EACJ,IAAY,MAARrgB,EAAc,MAAO,KALE,IAAAsgB,GAMVtgB,EAAKoa,SAASzV,GAAQ,GANZ4b,EAAA7X,EAAA4X,EAAA,EAM1BtoB,GAN0BuoB,EAAA,GAMpB5b,EANoB4b,EAAA,EAO3B,IAAInZ,GAAQV,SAAS8Z,aACrB,IAAIjnB,EAAS,EAAG,CACd6N,EAAMqZ,SAASzoB,EAAM2M,EADP,IAAA+b,GAEG7sB,KAAK8W,OAAO3K,KAAKhB,EAAQzF,GAF5BonB,EAAAjY,EAAAgY,EAAA,EAGd,IADC1gB,EAFa2gB,EAAA,GAEPhc,EAFOgc,EAAA,GAGF,MAAR3gB,EAAc,MAAO,KAHX,IAAA4gB,GAIG5gB,EAAKoa,SAASzV,GAAQ,GAJzBkc,EAAAnY,EAAAkY,EAAA,EAMd,OAFC5oB,GAJa6oB,EAAA,GAIPlc,EAJOkc,EAAA,GAKdzZ,EAAM0Z,OAAO9oB,EAAM2M,GACZyC,EAAM0G,wBAEb,GAAIiT,GAAO,OACPC,QAeJ,OAdIhpB,aAAgBZ,OACduN,EAAS3M,EAAKkoB,KAAK3mB,QACrB6N,EAAMqZ,SAASzoB,EAAM2M,GACrByC,EAAM0Z,OAAO9oB,EAAM2M,EAAS,KAE5ByC,EAAMqZ,SAASzoB,EAAM2M,EAAS,GAC9ByC,EAAM0Z,OAAO9oB,EAAM2M,GACnBoc,EAAO,SAETC,EAAO5Z,EAAM0G,0BAEbkT,EAAOhhB,EAAKrB,QAAQmP,wBAChBnJ,EAAS,IAAGoc,EAAO,WAGvBhT,OAAQiT,EAAKhT,IAAMgT,EAAK/S,OACxBA,OAAQ+S,EAAK/S,OACbC,KAAM8S,EAAKD,GACX5S,MAAO6S,EAAKD,GACZ/S,IAAKgT,EAAKhT,IACVI,MAAO,MxBgkHX7S,IAAK,iBACL/F,MAAO,WwB3jHP,GAAIqV,GAAYnE,SAASW,cACzB,IAAiB,MAAbwD,GAAqBA,EAAUoW,YAAc,EAAG,MAAO,KAC3D,IAAIjB,GAAcnV,EAAUqW,WAAW,EACvC,IAAmB,MAAflB,EAAqB,MAAO,KAChC,IAAI5Y,GAAQvT,KAAKstB,gBAAgBnB,EAEjC,OADAzZ,GAAM6a,KAAK,iBAAkBha,GACtBA,KxB+jHP7L,IAAK,WACL/F,MAAO,WwB5jHP,GAAI6rB,GAAaxtB,KAAKyrB,gBACtB,OAAkB,OAAd+B,GAA4B,KAAM,OAC1BxtB,KAAKytB,kBAAkBD,GACpBA,MxBgkHf9lB,IAAK,WACL/F,MAAO,WwB7jHP,MAAOkR,UAAS6a,gBAAkB1tB,KAAKP,QxBikHvCiI,IAAK,oBACL/F,MAAO,SwB/jHS4R,GAAO,GAAA8F,GAAArZ,KACnB2tB,IAAcpa,EAAMzE,MAAM3K,KAAMoP,EAAMzE,MAAMgC,QAC3CyC,GAAMiY,OAAOY,WAChBuB,EAAU7f,MAAMyF,EAAMxE,IAAI5K,KAAMoP,EAAMxE,IAAI+B,QAE5C,IAAI8c,GAAUD,EAAUhoB,IAAI,SAAC4gB,GAAa,GAAAsH,GAAAhZ,EACnB0R,EADmB,GACnCpiB,EADmC0pB,EAAA,GAC7B/c,EAD6B+c,EAAA,GAEpCvpB,EAAO+F,EAAArH,QAAUJ,KAAKuB,GAAM,GAC5BgH,EAAQ7G,EAAKwM,OAAOuI,EAAKvC,OAC7B,OAAe,KAAXhG,EACK3F,EACE7G,YAAgB+F,GAAArH,QAAUD,UAC5BoI,EAAQ7G,EAAKoB,SAEbyF,EAAQ7G,EAAK6G,MAAMhH,EAAM2M,KAGhC/B,EAAM3C,KAAKC,IAAID,KAAK2I,IAALlK,MAAAuB,KAAAse,EAAYkD,IAAU5tB,KAAK8W,OAAOpR,SAAW,GAC5DoJ,EAAQ1C,KAAKC,IAALxB,MAAAuB,MAAS2C,GAATc,OAAA6a,EAAiBkD,IAC7B,OAAO,IAAI1Y,GAAMpG,EAAOC,EAAID,MxBukH5BpH,IAAK,kBACL/F,MAAO,SwBrkHOwqB,GACd,IAAKxQ,EAAS3b,KAAKP,KAAM0sB,EAAY2B,kBAC/B3B,EAAYC,YAAczQ,EAAS3b,KAAKP,KAAM0sB,EAAY4B,cAC9D,MAAO,KAET,IAAIxa,IACFzE,OAAS3K,KAAMgoB,EAAY2B,eAAgBhd,OAAQqb,EAAYJ,aAC/Dhd,KAAO5K,KAAMgoB,EAAY4B,aAAcjd,OAAQqb,EAAYF,WAC3DT,OAAQW,EAiBV,QAfC5Y,EAAMzE,MAAOyE,EAAMxE,KAAK1I,QAAQ,SAASkgB,GAExC,IADA,GAAIpiB,GAAOoiB,EAASpiB,KAAM2M,EAASyV,EAASzV,SACnC3M,YAAgBZ,QAASY,EAAKghB,WAAWzf,OAAS,GACzD,GAAIvB,EAAKghB,WAAWzf,OAASoL,EAC3B3M,EAAOA,EAAKghB,WAAWrU,GACvBA,EAAS,MACJ,IAAI3M,EAAKghB,WAAWzf,SAAWoL,EAIpC,KAHA3M,GAAOA,EAAK6pB,UACZld,EAAS3M,YAAgBZ,MAAOY,EAAKkoB,KAAK3mB,OAASvB,EAAKghB,WAAWzf,OAAS,EAKhF6gB,EAASpiB,KAAOA,EAAMoiB,EAASzV,OAASA,IAEnCyC,KxBwkHP7L,IAAK,gBACL/F,MAAO,SwBtkHK4R,GAAO,GAAAiG,GAAAxZ,KACf4tB,EAAUra,EAAM6Y,WAAa7Y,EAAMpI,QAAUoI,EAAMpI,MAAOoI,EAAMpI,MAAQoI,EAAM7N,QAC9EsO,KACAsY,EAAetsB,KAAK8W,OAAOpR,QAU/B,OATAkoB,GAAQvnB,QAAQ,SAAC8E,EAAO9K,GACtB8K,EAAQiB,KAAKC,IAAIigB,EAAe,EAAGnhB,EAC/B,IAAAhH,OAAA,GAAA8pB,EAAuBzU,EAAK1C,OAAO3K,KAAKhB,GAAxC+iB,EAAArZ,EAAAoZ,EAAA,GAAO9hB,EAAP+hB,EAAA,GAAapd,EAAbod,EAAA,GAFwBC,EAGXhiB,EAAKoa,SAASzV,EAAc,IAANzQ,GAHX+tB,EAAAvZ,EAAAsZ,EAAA,EAG3BhqB,GAH2BiqB,EAAA,GAGrBtd,EAHqBsd,EAAA,GAI5Bpa,EAAKlG,KAAK3J,EAAM2M,KAEdkD,EAAKtO,OAAS,IAChBsO,EAAOA,EAAKnE,OAAOmE,IAEdA,KxBqlHPtM,IAAK,iBACL/F,MAAO,SwBnlHMkV,GACb,GAAItD,GAAQvT,KAAKyX,SACjB,IAAa,MAATlE,EAAJ,CACA,GAAIuG,GAAS9Z,KAAK+Z,UAAUxG,EAAMpI,MAAOoI,EAAM7N,OAC/C,IAAc,MAAVoU,EAAJ,CACA,GAAI5B,GAAQlY,KAAK8W,OAAOpR,SAAS,EALA2oB,EAMjBruB,KAAK8W,OAAOnK,KAAKP,KAAKC,IAAIkH,EAAMpI,MAAO+M,IANtBoW,EAAAzZ,EAAAwZ,EAAA,GAM5BE,EAN4BD,EAAA,GAO7BE,EAAOD,CACX,IAAIhb,EAAM7N,OAAS,EAAG,IAAA+oB,GACTzuB,KAAK8W,OAAOnK,KAAKP,KAAKC,IAAIkH,EAAMpI,MAAQoI,EAAM7N,OAAQwS,GAAhEsW,GADmB3Z,EAAA4Z,EAAA,MAGtB,GAAa,MAATF,GAAyB,MAARC,EAArB,CACA,GAAIE,GAAe7X,EAAmBoD,uBAClCH,GAAOK,IAAMuU,EAAavU,IAC5BtD,EAAmBqC,WAAcwV,EAAavU,IAAML,EAAOK,IAClDL,EAAOI,OAASwU,EAAaxU,SACtCrD,EAAmBqC,WAAcY,EAAOI,OAASwU,EAAaxU,cxB+lHhExS,IAAK,iBACL/F,MAAO,SwB5lHMmqB,EAAWC,GAA0E,GAA7DC,GAA6DvmB,UAAAC,OAAA,OAAAsD,KAAAvD,UAAA,GAAAA,UAAA,GAAnDqmB,EAAWG,EAAwCxmB,UAAAC,OAAA,OAAAsD,KAAAvD,UAAA,GAAAA,UAAA,GAA5BsmB,EAAa9e,EAAexH,UAAAC,OAAA,OAAAsD,KAAAvD,UAAA,IAAAA,UAAA,EAElG,IADAiN,EAAM6a,KAAK,iBAAkBzB,EAAWC,EAAaC,EAASC,GAC7C,MAAbH,GAA8C,MAAxB9rB,KAAKP,KAAK8E,YAA8C,MAAxBunB,EAAUvnB,YAA4C,MAAtBynB,EAAQznB,WAAlG,CAGA,GAAIyS,GAAYnE,SAASW,cACzB,IAAiB,MAAbwD,EACJ,GAAiB,MAAb8U,EAAmB,CAChB9rB,KAAKmb,YAAYnb,KAAKP,KAAK0Z,OAChC,IAAIqS,IAAUxrB,KAAKyrB,sBAAwBD,MAC3C,IAAc,MAAVA,GAAkBve,GAClB6e,IAAcN,EAAOsC,gBACrB/B,IAAgBP,EAAOO,aACvBC,IAAYR,EAAOuC,cACnB9B,IAAcT,EAAOS,UAAW,CAET,MAArBH,EAAUzmB,UACZ0mB,KAAiBrb,QAAQnQ,KAAKurB,EAAUvnB,WAAW4gB,WAAY2G,GAC/DA,EAAYA,EAAUvnB,YAED,MAAnBynB,EAAQ3mB,UACV4mB,KAAevb,QAAQnQ,KAAKyrB,EAAQznB,WAAW4gB,WAAY6G,GAC3DA,EAAUA,EAAQznB,WAEpB,IAAIgP,GAAQV,SAAS8Z,aACrBpZ,GAAMqZ,SAASd,EAAWC,GAC1BxY,EAAM0Z,OAAOjB,EAASC,GACtBjV,EAAU2X,kBACV3X,EAAU4X,SAASrb,QAGrByD,GAAU2X,kBACV3uB,KAAKP,KAAKovB,OACVhc,SAAS+T,KAAKzN,YxBgmHhBzR,IAAK,WACL/F,MAAO,SwB7lHA4R,GAAoD,GAA7CtG,GAA6CxH,UAAAC,OAAA,OAAAsD,KAAAvD,UAAA,IAAAA,UAAA,GAA9BwN,EAA8BxN,UAAAC,OAAA,OAAAsD,KAAAvD,UAAA,GAAAA,UAAA,GAArB2N,EAAApQ,QAAQqQ,QAAQoB,GAMtD,IALqB,gBAAVxH,KACTgG,EAAShG,EACTA,GAAQ,GAEVyF,EAAM6a,KAAK,WAAYha,GACV,MAATA,EAAe,CACjB,GAAIS,GAAOhU,KAAK8uB,cAAcvb,EAC9BvT,MAAK2rB,eAAL9gB,MAAA7K,KAAA0qB,EAAuB1W,GAAvBnE,QAA6B5C,SAE7BjN,MAAK2rB,eAAe,KAEtB3rB,MAAK0X,OAAOzE,MxBmmHZvL,IAAK,SACL/F,MAAO,WwBjmH6B,GAA/BsR,GAA+BxN,UAAAC,OAAA,OAAAsD,KAAAvD,UAAA,GAAAA,UAAA,GAAtB2N,EAAApQ,QAAQqQ,QAAQC,KAC1Byb,EAAW/uB,KAAKyX,UADgBuX,EAELhvB,KAAK+a,WAFAkU,EAAApa,EAAAma,EAAA,GAE/BvX,EAF+BwX,EAAA,GAEpB9C,EAFoB8C,EAAA,EAOpC,IAJAjvB,KAAKyX,UAAYA,EACK,MAAlBzX,KAAKyX,YACPzX,KAAKorB,WAAaprB,KAAKyX,aAEpB,EAAAsT,EAAA/nB,SAAM+rB,EAAU/uB,KAAKyX,WAAY,IAAA1D,IAC/B/T,KAAKirB,WAA4B,MAAfkB,GAAuBA,EAAYX,OAAOY,WAAaD,EAAYrd,MAAM3K,OAASnE,KAAKmrB,OAAOO,UACnH1rB,KAAKmrB,OAAOe,SAEd,IAAIlY,IAAQZ,EAAApQ,QAAQiR,OAAOqK,kBAAkB,EAAAuM,EAAA7nB,SAAMhD,KAAKyX,YAAY,EAAAoT,EAAA7nB,SAAM+rB,GAAW9b,EAErF,KADAc,EAAA/T,KAAKmU,SAAQC,KAAbvJ,MAAAkJ,GAAkBX,EAAApQ,QAAQiR,OAAOI,eAAjCxE,OAAmDmE,IAC/Cf,IAAWG,EAAApQ,QAAQqQ,QAAQS,OAAQ,IAAAQ,IACrCA,EAAAtU,KAAKmU,SAAQC,KAAbvJ,MAAAyJ,EAAqBN,SxBknHpBgX,IAkBTrrB,GwB7mHSuV,QxB8mHTvV,EwB9mH6BqD,QAAbgoB,GxBknHV,SAAUprB,EAAQD,EAASO,GAEjC,YAeA,SAASiI,GAAuBZ,GAAO,MAAOA,IAAOA,EAAInG,WAAamG,GAAQvE,QAASuE,GAEvF,QAASa,GAAgBC,EAAUC,GAAe,KAAMD,YAAoBC,IAAgB,KAAM,IAAIC,WAAU,qCAEhH,QAASC,GAA2BzI,EAAMQ,GAAQ,IAAKR,EAAQ,KAAM,IAAI0I,gBAAe,4DAAgE,QAAOlI,GAAyB,gBAATA,IAAqC,kBAATA,GAA8BR,EAAPQ,EAElO,QAASmI,GAAUC,EAAUC,GAAc,GAA0B,kBAAfA,IAA4C,OAAfA,EAAuB,KAAM,IAAIL,WAAU,iEAAoEK,GAAeD,GAASpH,UAAYT,OAAO6B,OAAOiG,GAAcA,EAAWrH,WAAasF,aAAelF,MAAOgH,EAAU1H,YAAY,EAAO4H,UAAU,EAAM7H,cAAc,KAAe4H,IAAY9H,OAAO2F,eAAiB3F,OAAO2F,eAAekC,EAAUC,GAAcD,EAASjC,UAAYkC,GAlBje9H,OAAOC,eAAepB,EAAS,cAC7BgC,OAAO,GyB19HT,IAAAyI,GAAAlK,EAAA,GzB+9HImK,EAAclC,EAAuBiC,GyB99HzCqW,EAAAvgB,EAAA,GzBk+HIwgB,EAAUvY,EAAuBsY,GyB/9H/B1d,EzBy+HU,SAAUmsB,GAGxB,QAASnsB,KAGP,MAFAqF,GAAgBpI,KAAM+C,GAEfyF,EAA2BxI,MAAO+C,EAAU2D,WAAa5F,OAAOkJ,eAAejH,IAAY8H,MAAM7K,KAAMyF,YAGhH,MARAiD,GAAU3F,EAAWmsB,GAQdnsB,GyBl/HesH,EAAArH,QAAUD,UAClCA,GAAUoK,iBAAkBuT,EAAA1d,QAAAyd,EAAArX,WAAoBrG,GzBs/HhDpD,EAAQqD,QyBn/HOD,GzBu/HT,SAAUnD,EAAQD,EAASO,GAEjC,YAkBA,SAASkI,GAAgBC,EAAUC,GAAe,KAAMD,YAAoBC,IAAgB,KAAM,IAAIC,WAAU,qCAEhH,QAASC,GAA2BzI,EAAMQ,GAAQ,IAAKR,EAAQ,KAAM,IAAI0I,gBAAe,4DAAgE,QAAOlI,GAAyB,gBAATA,IAAqC,kBAATA,GAA8BR,EAAPQ,EAElO,QAASmI,GAAUC,EAAUC,GAAc,GAA0B,kBAAfA,IAA4C,OAAfA,EAAuB,KAAM,IAAIL,WAAU,iEAAoEK,GAAeD,GAASpH,UAAYT,OAAO6B,OAAOiG,GAAcA,EAAWrH,WAAasF,aAAelF,MAAOgH,EAAU1H,YAAY,EAAO4H,UAAU,EAAM7H,cAAc,KAAe4H,IAAY9H,OAAO2F,eAAiB3F,OAAO2F,eAAekC,EAAUC,GAAcD,EAASjC,UAAYkC,GAnBje9H,OAAOC,eAAepB,EAAS,cAC7BgC,OAAO,IAEThC,EAAQwvB,WAAaxvB,EAAQyvB,WAAazvB,EAAQ0vB,oBAAkBrmB,EAEpE,IAAIK,GAAe,WAAc,QAASC,GAAiBrB,EAAQsB,GAAS,IAAK,GAAIlJ,GAAI,EAAGA,EAAIkJ,EAAM7D,OAAQrF,IAAK,CAAE,GAAImJ,GAAaD,EAAMlJ,EAAImJ,GAAWvI,WAAauI,EAAWvI,aAAc,EAAOuI,EAAWxI,cAAe,EAAU,SAAWwI,KAAYA,EAAWX,UAAW,GAAM/H,OAAOC,eAAekH,EAAQuB,EAAW9B,IAAK8B,IAAiB,MAAO,UAAUlB,EAAamB,EAAYC,GAAiJ,MAA9HD,IAAYH,EAAiBhB,EAAY/G,UAAWkI,GAAiBC,GAAaJ,EAAiBhB,EAAaoB,GAAqBpB,MAE5hBqB,EAAO,QAASzI,GAAIG,EAAQC,EAAUsI,GAA2B,OAAXvI,IAAiBA,EAASwI,SAAStI,UAAW,IAAIuI,GAAOhJ,OAAOiJ,yBAAyB1I,EAAQC,EAAW,QAAa0H,KAATc,EAAoB,CAAE,GAAIZ,GAASpI,OAAOkJ,eAAe3I,EAAS,OAAe,QAAX6H,MAAmB,GAAkChI,EAAIgI,EAAQ5H,EAAUsI,GAAoB,GAAI,SAAWE,GAAQ,MAAOA,GAAKnI,KAAgB,IAAIf,GAASkJ,EAAK5I,GAAK,QAAe8H,KAAXpI,EAA4C,MAAOA,GAAOL,KAAKqJ,I0B3gI5dQ,EAAAlK,EAAA,G1B+gIImK,EAEJ,SAAgC9C,GAAO,MAAOA,IAAOA,EAAInG,WAAamG,GAAQvE,QAASuE,IAF9C6C,G0B7gInCilB,E1BuhIgB,SAAUC,GAG9B,QAASD,KAGP,MAFAjnB,GAAgBpI,KAAMqvB,GAEf7mB,EAA2BxI,MAAOqvB,EAAgB3oB,WAAa5F,OAAOkJ,eAAeqlB,IAAkBxkB,MAAM7K,KAAMyF,YAe5H,MApBAiD,GAAU2mB,EAAiBC,GAQ3BjmB,EAAagmB,IACX3nB,IAAK,QACL/F,MAAO,S0BjiIHmJ,GACJ,GAAInJ,uFAAoBmJ,EACxB,OAAKnJ,GAAM6W,WAAW,SACtB7W,EAAQA,EAAMyd,QAAQ,UAAW,IAAIA,QAAQ,UAAW,IACjD,IAAMzd,EAAMuD,MAAM,KAAKS,IAAI,SAASuK,GACzC,OAAQ,KAAOqf,SAASrf,GAAW9I,SAAS,KAAKuE,OAAO,KACvDqE,KAAK,KAJ8BrO,M1ByiIjC0tB,G0B5iIqBhlB,EAAArH,QAAUQ,WAAWG,OAW/CyrB,EAAa,GAAI/kB,GAAArH,QAAUQ,WAAWE,MAAM,QAAS,YACvDc,MAAO6F,EAAArH,QAAUN,MAAMoC,SAErBqqB,EAAa,GAAIE,GAAgB,QAAS,SAC5C7qB,MAAO6F,EAAArH,QAAUN,MAAMoC,Q1BuiIzBnF,G0BpiIS0vB,kB1BqiIT1vB,E0BriI0ByvB,a1BsiI1BzvB,E0BtiIsCwvB,c1B0iIhC,SAAUvvB,EAAQD,EAASO,GAEjC,YAkDA,SAASiI,GAAuBZ,GAAO,MAAOA,IAAOA,EAAInG,WAAamG,GAAQvE,QAASuE,GAEvF,QAASkK,GAAgBlK,EAAKG,EAAK/F,GAAiK,MAApJ+F,KAAOH,GAAOzG,OAAOC,eAAewG,EAAKG,GAAO/F,MAAOA,EAAOV,YAAY,EAAMD,cAAc,EAAM6H,UAAU,IAAkBtB,EAAIG,GAAO/F,EAAgB4F,EAE3M,QAASa,GAAgBC,EAAUC,GAAe,KAAMD,YAAoBC,IAAgB,KAAM,IAAIC,WAAU,qCAEhH,QAASC,GAA2BzI,EAAMQ,GAAQ,IAAKR,EAAQ,KAAM,IAAI0I,gBAAe,4DAAgE,QAAOlI,GAAyB,gBAATA,IAAqC,kBAATA,GAA8BR,EAAPQ,EAElO,QAASmI,GAAUC,EAAUC,GAAc,GAA0B,kBAAfA,IAA4C,OAAfA,EAAuB,KAAM,IAAIL,WAAU,iEAAoEK,GAAeD,GAASpH,UAAYT,OAAO6B,OAAOiG,GAAcA,EAAWrH,WAAasF,aAAelF,MAAOgH,EAAU1H,YAAY,EAAO4H,UAAU,EAAM7H,cAAc,KAAe4H,IAAY9H,OAAO2F,eAAiB3F,OAAO2F,eAAekC,EAAUC,GAAcD,EAASjC,UAAYkC,G2B10Hje,QAAS4mB,GAAsB9nB,EAAK+nB,GAAU,GAAAC,GACtCC,EAAQjoB,IAAQkoB,EAAS/hB,KAAKgiB,KAAO,SAAW,QACtD,OAAAH,IACEhoB,MACA+nB,WACAK,OAAQ,MAHVre,EAAAie,EAIGC,EAAQ,MAJXle,EAAAie,EAAA,UAKW,SAASnc,GAChB,GAAIpI,GAAQoI,EAAMpI,KACdzD,KAAQkoB,EAAS/hB,KAAKkiB,QACxB5kB,GAAUoI,EAAM7N,OAAS,EAHJ,IAAAsqB,GAKNhwB,KAAK+c,MAAMkT,QAAQ9kB,EACpC,SANuB0J,EAAAmb,EAAA,eAMD3lB,GAAArH,QAAUG,SAC5BuE,IAAQkoB,EAAS/hB,KAAKgiB,KACpBJ,EACFzvB,KAAK+c,MAAMlJ,aAAaN,EAAMpI,MAAQ,EAAGoI,EAAM7N,OAAS,EAAGwqB,EAAAltB,QAAMqQ,QAAQC,MAEzEtT,KAAK+c,MAAMlJ,aAAaN,EAAMpI,MAAQ,EAAG+kB,EAAAltB,QAAMqQ,QAAQC,MAGrDmc,EACFzvB,KAAK+c,MAAMlJ,aAAaN,EAAMpI,MAAOoI,EAAM7N,OAAS,EAAGwqB,EAAAltB,QAAMqQ,QAAQC,MAErEtT,KAAK+c,MAAMlJ,aAAaN,EAAMpI,MAAQoI,EAAM7N,OAAS,EAAGwqB,EAAAltB,QAAMqQ,QAAQC,OAGnE,KAzBXoc,EA+BF,QAASS,GAAgB5c,EAAOxG,GAC9B,KAAoB,IAAhBwG,EAAMpI,OAAenL,KAAK+c,MAAMvC,aAAe,GAAnD,CADuC,GAAA4V,GAExBpwB,KAAK+c,MAAMsT,QAAQ9c,EAAMpI,OAFDmlB,EAAAzb,EAAAub,EAAA,GAElCzjB,EAFkC2jB,EAAA,GAGnCvnB,IACJ,IAAuB,IAAnBgE,EAAQ+D,OAAc,IAAAyf,GACTvwB,KAAK+c,MAAMsT,QAAQ9c,EAAMpI,MAAQ,GADxBqlB,EAAA3b,EAAA0b,EAAA,GACnBzO,EADmB0O,EAAA,EAExB,IAAY,MAAR1O,GAAgBA,EAAKpc,SAAW,EAAG,CACrC,GAAI+qB,GAAa9jB,EAAK5D,UAClB2nB,EAAc1wB,KAAK+c,MAAMnC,UAAUrH,EAAMpI,MAAM,EAAG,EACtDpC,GAAU4nB,EAAA3tB,QAAQ2B,WAAWyI,KAAKqjB,EAAYC,QAIlD,GAAIhrB,GAAS,kCAAkCkrB,KAAK7jB,EAAQ8jB,QAAU,EAAI,CAC1E7wB,MAAK+c,MAAMhE,WAAWxF,EAAMpI,MAAMzF,EAAQA,EAAQwqB,EAAAltB,QAAMqQ,QAAQC,MAC5DxS,OAAO+M,KAAK9E,GAASrD,OAAS,GAChC1F,KAAK+c,MAAMzD,WAAW/F,EAAMpI,MAAMzF,EAAQA,EAAQqD,EAASmnB,EAAAltB,QAAMqQ,QAAQC,MAE3EtT,KAAK+c,MAAM5D,SAGb,QAAS2X,GAAavd,EAAOxG,GAE3B,GAAIrH,GAAS,kCAAkCkrB,KAAK7jB,EAAQgkB,QAAU,EAAI,CAC1E,MAAIxd,EAAMpI,OAASnL,KAAK+c,MAAMvC,YAAc9U,GAA5C,CACA,GAAIqD,MAAcioB,EAAa,EAJKC,EAKrBjxB,KAAK+c,MAAMsT,QAAQ9c,EAAMpI,OALJ+lB,EAAArc,EAAAoc,EAAA,GAK/BtkB,EAL+BukB,EAAA,EAMpC,IAAInkB,EAAQ+D,QAAUnE,EAAKjH,SAAW,EAAG,IAAAyrB,GACxBnxB,KAAK+c,MAAMsT,QAAQ9c,EAAMpI,MAAQ,GADTimB,EAAAvc,EAAAsc,EAAA,GAClC1lB,EADkC2lB,EAAA,EAEvC,IAAI3lB,EAAM,CACR,GAAIglB,GAAa9jB,EAAK5D,UAClBsoB,EAAcrxB,KAAK+c,MAAMnC,UAAUrH,EAAMpI,MAAO,EACpDpC,GAAU4nB,EAAA3tB,QAAQ2B,WAAWyI,KAAKqjB,EAAYY,OAC9CL,EAAavlB,EAAK/F,UAGtB1F,KAAK+c,MAAMhE,WAAWxF,EAAMpI,MAAOzF,EAAQwqB,EAAAltB,QAAMqQ,QAAQC,MACrDxS,OAAO+M,KAAK9E,GAASrD,OAAS,GAChC1F,KAAK+c,MAAMzD,WAAW/F,EAAMpI,MAAQ6lB,EAAa,EAAGtrB,EAAQqD,EAASmnB,EAAAltB,QAAMqQ,QAAQC,OAIvF,QAASge,GAAkB/d,GACzB,GAAIjH,GAAQtM,KAAK+c,MAAMwU,SAAShe,GAC5BxK,IACJ,IAAIuD,EAAM5G,OAAS,EAAG,CACpB,GAAI8rB,GAAellB,EAAM,GAAGvD,UACxB0oB,EAAcnlB,EAAMA,EAAM5G,OAAS,GAAGqD,SAC1CA,GAAU4nB,EAAA3tB,QAAQ2B,WAAWyI,KAAKqkB,EAAaD,OAEjDxxB,KAAK+c,MAAMhE,WAAWxF,EAAO2c,EAAAltB,QAAMqQ,QAAQC,MACvCxS,OAAO+M,KAAK9E,GAASrD,OAAS,GAChC1F,KAAK+c,MAAMzD,WAAW/F,EAAMpI,MAAO,EAAGpC,EAASmnB,EAAAltB,QAAMqQ,QAAQC,MAE/DtT,KAAK+c,MAAMlJ,aAAaN,EAAMpI,MAAO+kB,EAAAltB,QAAMqQ,QAAQS,QACnD9T,KAAK+c,MAAM5D,QAGb,QAASuY,GAAYne,EAAOxG,GAAS,GAAA6L,GAAA5Y,IAC/BuT,GAAM7N,OAAS,GACjB1F,KAAK+c,MAAMjG,OAAOqK,SAAS5N,EAAMpI,MAAOoI,EAAM7N,OAEhD,IAAIisB,GAAc7wB,OAAO+M,KAAKd,EAAQ3B,QAAQc,OAAO,SAASylB,EAAavmB,GAIzE,MAHIf,GAAArH,QAAUH,MAAMuI,EAAQf,EAAArH,QAAUN,MAAMmC,SAAWoB,MAAMC,QAAQ6G,EAAQ3B,OAAOA,MAClFumB,EAAYvmB,GAAU2B,EAAQ3B,OAAOA,IAEhCumB,MAET3xB,MAAK+c,MAAMrB,WAAWnI,EAAMpI,MAAO,KAAMwmB,EAAazB,EAAAltB,QAAMqQ,QAAQC,MAGpEtT,KAAK+c,MAAMlJ,aAAaN,EAAMpI,MAAQ,EAAG+kB,EAAAltB,QAAMqQ,QAAQS,QACvD9T,KAAK+c,MAAM5D,QACXrY,OAAO+M,KAAKd,EAAQ3B,QAAQ/E,QAAQ,SAAC1F,GACV,MAArBgxB,EAAYhxB,KACZsF,MAAMC,QAAQ6G,EAAQ3B,OAAOzK,KACpB,SAATA,GACJiY,EAAKmE,MAAM3R,OAAOzK,EAAMoM,EAAQ3B,OAAOzK,GAAOuvB,EAAAltB,QAAMqQ,QAAQC,SAIhE,QAASse,GAAqBC,GAC5B,OACEnqB,IAAKkoB,EAAS/hB,KAAKqU,IACnBuN,UAAWoC,EACXzmB,QAAS0mB,cAAc,GACvB3T,QAAS,SAAS5K,GAChB,GAAIqN,GAAYvW,EAAArH,QAAUH,MAAM,cAC5BsI,EAAQoI,EAAMpI,MAAOzF,EAAS6N,EAAM7N,OAFjBqsB,EAGD/xB,KAAK+c,MAAMjG,OAAOmK,WAAWL,EAAWzV,GAHvC6mB,EAAAnd,EAAAkd,EAAA,GAGlBxmB,EAHkBymB,EAAA,GAGXlhB,EAHWkhB,EAAA,EAIvB,IAAa,MAATzmB,EAAJ,CACA,GAAI0mB,GAAcjyB,KAAK+c,MAAMmV,SAAS3mB,GAClCuD,EAAQvD,EAAM8V,aAAavQ,GAAQ,GAAQ,EAC3C/B,EAAMxD,EAAM8V,aAAa4Q,EAAcnhB,EAASpL,GAChD4G,EAAQf,EAAMT,QAAQgW,YAAYnV,MAAMmD,EAAOC,GAAK7J,MAAM,KAC9D4L,GAAS,EACTxE,EAAMjG,QAAQ,SAACsG,EAAMtM,GACfwxB,GACFtmB,EAAMG,SAASoD,EAAQgC,EAAQ8P,EAAUsB,KACzCpR,GAAU8P,EAAUsB,IAAIxc,OACd,IAANrF,EACF8K,GAASyV,EAAUsB,IAAIxc,OAEvBA,GAAUkb,EAAUsB,IAAIxc,QAEjBiH,EAAK6L,WAAWoI,EAAUsB,OACnC3W,EAAM4V,SAASrS,EAAQgC,EAAQ8P,EAAUsB,IAAIxc,QAC7CoL,GAAU8P,EAAUsB,IAAIxc,OACd,IAANrF,EACF8K,GAASyV,EAAUsB,IAAIxc,OAEvBA,GAAUkb,EAAUsB,IAAIxc,QAG5BoL,GAAUnE,EAAKjH,OAAS,IAE1B1F,KAAK+c,MAAMrF,OAAOwY,EAAAltB,QAAMqQ,QAAQC,MAChCtT,KAAK+c,MAAMlJ,aAAa1I,EAAOzF,EAAQwqB,EAAAltB,QAAMqQ,QAAQS,WAK3D,QAASqe,GAAkB/mB,GACzB,OACE1D,IAAK0D,EAAO,GAAGjF,cACfisB,UAAU,EACVjU,QAAS,SAAS5K,EAAOxG,GACvB/M,KAAK+c,MAAM3R,OAAOA,GAAS2B,EAAQ3B,OAAOA,GAAS8kB,EAAAltB,QAAMqQ,QAAQC,QAKvE,QAAS+e,GAAUC,GACjB,GAAuB,gBAAZA,IAA2C,gBAAZA,GACxC,MAAOD,IAAY3qB,IAAK4qB,GAK1B,IAHuB,gBAAnB,KAAOA,EAAP,YAAA9d,EAAO8d,MACTA,GAAU,EAAAzH,EAAA7nB,SAAMsvB,GAAS,IAEA,gBAAhBA,GAAQ5qB,IACjB,GAAgD,MAA5CkoB,EAAS/hB,KAAKykB,EAAQ5qB,IAAIvB,eAC5BmsB,EAAQ5qB,IAAMkoB,EAAS/hB,KAAKykB,EAAQ5qB,IAAIvB,mBACnC,IAA2B,IAAvBmsB,EAAQ5qB,IAAIhC,OAGrB,MAAO,KAFP4sB,GAAQ5qB,IAAM4qB,EAAQ5qB,IAAIvB,cAAcosB,WAAW,GASvD,MAJID,GAAQF,WACVE,EAAQE,GAAYF,EAAQF,eACrBE,GAAQF,UAEVE,E3B0lHTxxB,OAAOC,eAAepB,EAAS,cAC7BgC,OAAO,IAEThC,EAAQ6yB,SAAW7yB,EAAQqD,YAAUgG,EAErC,IAAIwL,GAA4B,kBAAXW,SAAoD,gBAApBA,QAAOjG,SAAwB,SAAU3H,GAAO,aAAcA,IAAS,SAAUA,GAAO,MAAOA,IAAyB,kBAAX4N,SAAyB5N,EAAIV,cAAgBsO,QAAU5N,IAAQ4N,OAAO5T,UAAY,eAAkBgG,IAElQsN,EAAiB,WAAc,QAASO,GAAc/N,EAAKhH,GAAK,GAAIgV,MAAeC,GAAK,EAAUC,GAAK,EAAWC,MAAKxM,EAAW,KAAM,IAAK,GAAiCyM,GAA7BjQ,EAAK6B,EAAI8N,OAAOjG,cAAmBoG,GAAMG,EAAKjQ,EAAGiG,QAAQiK,QAAoBL,EAAKvH,KAAK2H,EAAG9T,QAAYtB,GAAKgV,EAAK3P,SAAWrF,GAA3DiV,GAAK,IAAoE,MAAOK,GAAOJ,GAAK,EAAMC,EAAKG,EAAO,QAAU,KAAWL,GAAM9P,EAAW,QAAGA,EAAW,SAAO,QAAU,GAAI+P,EAAI,KAAMC,IAAQ,MAAOH,GAAQ,MAAO,UAAUhO,EAAKhH,GAAK,GAAI4F,MAAMC,QAAQmB,GAAQ,MAAOA,EAAY,IAAI8N,OAAOjG,WAAYpO,QAAOuG,GAAQ,MAAO+N,GAAc/N,EAAKhH,EAAa,MAAM,IAAIkI,WAAU,4DAEllBc,EAAe,WAAc,QAASC,GAAiBrB,EAAQsB,GAAS,IAAK,GAAIlJ,GAAI,EAAGA,EAAIkJ,EAAM7D,OAAQrF,IAAK,CAAE,GAAImJ,GAAaD,EAAMlJ,EAAImJ,GAAWvI,WAAauI,EAAWvI,aAAc,EAAOuI,EAAWxI,cAAe,EAAU,SAAWwI,KAAYA,EAAWX,UAAW,GAAM/H,OAAOC,eAAekH,EAAQuB,EAAW9B,IAAK8B,IAAiB,MAAO,UAAUlB,EAAamB,EAAYC,GAAiJ,MAA9HD,IAAYH,EAAiBhB,EAAY/G,UAAWkI,GAAiBC,GAAaJ,EAAiBhB,EAAaoB,GAAqBpB,M2B5kIhiB4f,EAAAhoB,EAAA,I3BglII2qB,EAAU1iB,EAAuB+f,G2B/kIrC4C,EAAA5qB,EAAA,I3BmlII6qB,EAAc5iB,EAAuB2iB,G2BllIzC7gB,EAAA/J,EAAA,G3BslII+I,EAAWd,EAAuB8B,G2BrlItCC,EAAAhK,EAAA,G3BylIIiK,EAAehC,EAAuB+B,G2BxlI1CuoB,EAAAvyB,EAAA,I3B4lIIywB,EAAOxoB,EAAuBsqB,G2B3lIlCroB,EAAAlK,EAAA,G3B+lIImK,EAAclC,EAAuBiC,G2B9lIzCsoB,EAAAxyB,EAAA,G3BkmIIgwB,EAAU/nB,EAAuBuqB,G2BjmIrCxc,EAAAhW,EAAA,I3BqmIIiW,EAAWhO,EAAuB+N,G2BpmItCH,EAAA7V,EAAA,G3BwmII8V,EAAW7N,EAAuB4N,G2BtmIlCrD,GAAQ,EAAAyD,EAAAnT,SAAO,kBAEbwvB,EAAW,OAAO5B,KAAK+B,UAAUC,UAAY,UAAY,UAGzDhD,E3BinIS,SAAUiD,G2BtmIvB,QAAAjD,GAAY7S,EAAOnV,GAASQ,EAAApI,KAAA4vB,EAAA,IAAA5oB,GAAAwB,EAAAxI,MAAA4vB,EAAAlpB,WAAA5F,OAAAkJ,eAAA4lB,IAAArvB,KAAAP,KACpB+c,EAAOnV,GADa,OAE1BZ,GAAK8rB,YACLhyB,OAAO+M,KAAK7G,EAAKY,QAAQkrB,UAAUzsB,QAAQ,SAAC1F,IAC7B,kBAATA,GAC0B,MAA1Boc,EAAMjG,OAAOC,WACZgG,EAAMjG,OAAOC,UAAb,OAGD/P,EAAKY,QAAQkrB,SAASnyB,IACxBqG,EAAK+rB,WAAW/rB,EAAKY,QAAQkrB,SAASnyB,MAG1CqG,EAAK+rB,YAAarrB,IAAKkoB,EAAS/hB,KAAK+V,MAAO6L,SAAU,MAAQiC,GAC9D1qB,EAAK+rB,YAAarrB,IAAKkoB,EAAS/hB,KAAK+V,MAAOoP,QAAS,KAAMC,QAAS,KAAMnD,OAAQ,MAAQ,cACtF,WAAWc,KAAK+B,UAAUO,YAE5BlsB,EAAK+rB,YAAarrB,IAAKkoB,EAAS/hB,KAAKslB,YAAe/G,WAAW,GAAQ+D,GACvEnpB,EAAK+rB,YAAarrB,IAAKkoB,EAAS/hB,KAAKwC,SAAY+b,WAAW,GAAQ0E,KAEpE9pB,EAAK+rB,YAAarrB,IAAKkoB,EAAS/hB,KAAKslB,YAAe/G,WAAW,EAAMyE,OAAQ,QAAUV,GACvFnpB,EAAK+rB,YAAarrB,IAAKkoB,EAAS/hB,KAAKwC,SAAY+b,WAAW,EAAM2E,OAAQ,QAAUD,IAEtF9pB,EAAK+rB,YAAarrB,IAAKkoB,EAAS/hB,KAAKslB,YAAe/G,WAAW,GAASkF,GACxEtqB,EAAK+rB,YAAarrB,IAAKkoB,EAAS/hB,KAAKwC,SAAY+b,WAAW,GAASkF,GACrEtqB,EAAK+rB,YAAarrB,IAAKkoB,EAAS/hB,KAAKslB,UAAWrD,OAAQ,KAAMmD,QAAS,KAAMD,QAAS,KAAMvD,SAAU,OACpFrD,WAAW,EAAMtb,OAAQ,GAC3Bqf,GAChBnpB,EAAKosB,SA5BqBpsB,E3BivI5B,MA1IA0B,GAAUknB,EAAUiD,GAEpBxpB,EAAaumB,EAAU,OACrBloB,IAAK,QACL/F,MAAO,S2BrnII0xB,EAAKf,GAEhB,MADAA,GAAUD,EAAUC,KACf,SAAU,UAAW,UAAW,YAAYpM,KAAK,SAASxe,GAC7D,QAAU4qB,EAAQ5qB,KAAS2rB,EAAI3rB,IAAyB,OAAjB4qB,EAAQ5qB,MAI1C4qB,EAAQ5qB,OAAS2rB,EAAIC,OAASD,EAAI1P,a3BwpI3Cta,EAAaumB,IACXloB,IAAK,aACL/F,MAAO,S2BxnIE+F,GAAiC,GAA5BqF,GAA4BtH,UAAAC,OAAA,OAAAsD,KAAAvD,UAAA,GAAAA,UAAA,MAAd0Y,EAAc1Y,UAAAC,OAAA,OAAAsD,KAAAvD,UAAA,GAAAA,UAAA,MACtC6sB,EAAUD,EAAU3qB,EACxB,IAAe,MAAX4qB,GAAkC,MAAfA,EAAQ5qB,IAC7B,MAAOgL,GAAM6F,KAAK,4CAA6C+Z,EAE1C,mBAAZvlB,KACTA,GAAYoR,QAASpR,IAEA,kBAAZoR,KACTA,GAAYA,QAASA,IAEvBmU,GAAU,EAAArpB,EAAAjG,SAAOsvB,EAASvlB,EAASoR,GACnCne,KAAK8yB,SAASR,EAAQ5qB,KAAO1H,KAAK8yB,SAASR,EAAQ5qB,SACnD1H,KAAK8yB,SAASR,EAAQ5qB,KAAKoG,KAAKwkB,M3B8nIhC5qB,IAAK,SACL/F,MAAO,W2B5nIA,GAAAmK,GAAA9L,IACPA,MAAK+c,MAAMtd,KAAK4d,iBAAiB,UAAW,SAACgW,GAC3C,IAAIA,EAAIE,iBAAR,CACA,GAAID,GAAQD,EAAIC,OAASD,EAAI1P,QACzBmP,GAAYhnB,EAAKgnB,SAASQ,QAAchlB,OAAO,SAASgkB,GAC1D,MAAO1C,GAAS9rB,MAAMuvB,EAAKf,IAE7B,IAAwB,IAApBQ,EAASptB,OAAb,CACA,GAAI6N,GAAQzH,EAAKiR,MAAMvJ,cACvB,IAAa,MAATD,GAAkBzH,EAAKiR,MAAM5B,WAAjC,CARmD,GAAAqY,GAS9B1nB,EAAKiR,MAAMsT,QAAQ9c,EAAMpI,OATKsoB,EAAA5e,EAAA2e,EAAA,GAS9C7mB,EAT8C8mB,EAAA,GASxC3iB,EATwC2iB,EAAA,GAAAC,EAUpB5nB,EAAKiR,MAAMkT,QAAQ1c,EAAMpI,OAVLwoB,EAAA9e,EAAA6e,EAAA,GAU9CE,EAV8CD,EAAA,GAUnCE,EAVmCF,EAAA,GAAAzV,EAWP,IAAjB3K,EAAM7N,QAAgBkuB,EAAWC,GAAe/nB,EAAKiR,MAAMkT,QAAQ1c,EAAMpI,MAAQoI,EAAM7N,QAX/DouB,EAAAjf,EAAAqJ,EAAA,GAW9C6V,EAX8CD,EAAA,GAWrCE,EAXqCF,EAAA,GAY/CG,EAAaL,YAAqBvpB,GAAArH,QAAUO,KAAOqwB,EAAUjyB,QAAQgK,MAAM,EAAGkoB,GAAe,GAC7FK,EAAaH,YAAmB1pB,GAAArH,QAAUO,KAAOwwB,EAAQpyB,QAAQgK,MAAMqoB,GAAa,GACpFG,GACF/H,UAA4B,IAAjB7Y,EAAM7N,OACjB0uB,MAAwB,IAAjB7gB,EAAM7N,QAAgBiH,EAAKjH,UAAY,EAC9C0F,OAAQU,EAAKiR,MAAMnC,UAAUrH,GAC7BzC,OAAQA,EACR+f,OAAQoD,EACRlD,OAAQmD,EAEMpB,GAAS5M,KAAK,SAACoM,GAC7B,GAAyB,MAArBA,EAAQlG,WAAqBkG,EAAQlG,YAAc+H,EAAW/H,UAAW,OAAO,CACpF,IAAqB,MAAjBkG,EAAQ8B,OAAiB9B,EAAQ8B,QAAUD,EAAWC,MAAO,OAAO,CACxE,IAAsB,MAAlB9B,EAAQxhB,QAAkBwhB,EAAQxhB,SAAWqjB,EAAWrjB,OAAQ,OAAO,CAC3E,IAAI7K,MAAMC,QAAQosB,EAAQlnB,SAExB,GAAIknB,EAAQlnB,OAAOipB,MAAM,SAAS1zB,GAChC,MAAkC,OAA3BwzB,EAAW/oB,OAAOzK,KAEzB,OAAO,MAEJ,IAA8B,WAA1B6T,EAAO8d,EAAQlnB,UAEnBtK,OAAO+M,KAAKykB,EAAQlnB,QAAQipB,MAAM,SAAS1zB,GAC9C,OAA6B,IAAzB2xB,EAAQlnB,OAAOzK,GAAkD,MAA3BwzB,EAAW/oB,OAAOzK,IAC/B,IAAzB2xB,EAAQlnB,OAAOzK,GAAmD,MAA3BwzB,EAAW/oB,OAAOzK,IACtD,EAAAoqB,EAAA/nB,SAAMsvB,EAAQlnB,OAAOzK,GAAOwzB,EAAW/oB,OAAOzK,MAErD,OAAO,CAGX,SAAsB,MAAlB2xB,EAAQzB,SAAmByB,EAAQzB,OAAOD,KAAKuD,EAAWtD,aACxC,MAAlByB,EAAQvB,SAAmBuB,EAAQvB,OAAOH,KAAKuD,EAAWpD,WACL,IAAlDuB,EAAQnU,QAAQ5d,KAAhBuL,EAA2ByH,EAAO4gB,OAGzCd,EAAItP,0B3BipIH6L,GACP5Z,EAAShT,Q2B5oIX4sB,GAAS/hB,MACPslB,UAAW,EACXjR,IAAK,EACL0B,MAAO,GACPC,OAAQ,GACRgM,KAAM,GACNyE,GAAI,GACJvE,MAAO,GACPwE,KAAM,GACNlkB,OAAQ,IAGVuf,EAAS1d,UACP4gB,UACE0B,KAAcrC,EAAkB,QAChCsC,OAActC,EAAkB,UAChCuC,UAAcvC,EAAkB,aAChCN,QAEEnqB,IAAKkoB,EAAS/hB,KAAKqU,IACnB9W,QAAS,aAAc,SAAU,QACjC+S,QAAS,SAAS5K,EAAOxG,GACvB,GAAIA,EAAQqf,WAAgC,IAAnBrf,EAAQ+D,OAAc,OAAO,CACtD9Q,MAAK+c,MAAM3R,OAAO,SAAU,KAAM8kB,EAAAltB,QAAMqQ,QAAQC,QAGpDqhB,SACEjtB,IAAKkoB,EAAS/hB,KAAKqU,IACnBuN,UAAU,EACVrkB,QAAS,aAAc,SAAU,QAEjC+S,QAAS,SAAS5K,EAAOxG,GACvB,GAAIA,EAAQqf,WAAgC,IAAnBrf,EAAQ+D,OAAc,OAAO,CACtD9Q,MAAK+c,MAAM3R,OAAO,SAAU,KAAM8kB,EAAAltB,QAAMqQ,QAAQC,QAGpDshB,qBACEltB,IAAKkoB,EAAS/hB,KAAKslB,UACnB/G,WAAW,EACXqD,SAAU,KACVuD,QAAS,KACTC,QAAS,KACTnD,OAAQ,KACR1kB,QAAS,SAAU,QACnB0F,OAAQ,EACRqN,QAAS,SAAS5K,EAAOxG,GACM,MAAzBA,EAAQ3B,OAAOymB,OACjB7xB,KAAK+c,MAAM3R,OAAO,SAAU,KAAM8kB,EAAAltB,QAAMqQ,QAAQC,MAChB,MAAvBvG,EAAQ3B,OAAOypB,MACxB70B,KAAK+c,MAAM3R,OAAO,QAAQ,EAAO8kB,EAAAltB,QAAMqQ,QAAQC,QAIrDwhB,oBAAqBlD,GAAqB,GAC1CmD,qBAAsBnD,GAAqB,GAC3CoD,cACEttB,IAAKkoB,EAAS/hB,KAAKqU,IACnBuN,UAAU,EACVrD,WAAW,EACXyE,OAAQ,MACR1S,QAAS,SAAS5K,GAChBvT,KAAK+c,MAAMhE,WAAWxF,EAAMpI,MAAQ,EAAG,EAAG+kB,EAAAltB,QAAMqQ,QAAQC,QAG5D2hB,KACEvtB,IAAKkoB,EAAS/hB,KAAKqU,IACnB/D,QAAS,SAAS5K,GAChBvT,KAAK+c,MAAMhL,QAAQmjB,QACnB,IAAIlpB,IAAQ,GAAA7B,GAAAnH,SAAYgL,OAAOuF,EAAMpI,OACb4C,OAAOwF,EAAM7N,QACbqF,OAAO,KAC/B/K,MAAK+c,MAAMoY,eAAenpB,EAAOkkB,EAAAltB,QAAMqQ,QAAQC,MAC/CtT,KAAK+c,MAAMhL,QAAQmjB,SACnBl1B,KAAK+c,MAAMlJ,aAAaN,EAAMpI,MAAQ,EAAG+kB,EAAAltB,QAAMqQ,QAAQS,UAG3DshB,oBACE1tB,IAAKkoB,EAAS/hB,KAAK+V,MACnBwI,WAAW,EACXhhB,QAAS,QACTgpB,OAAO,EACPjW,QAAS,SAAS5K,EAAOxG,GACvB/M,KAAK+c,MAAM3R,OAAO,QAAQ,EAAO8kB,EAAAltB,QAAMqQ,QAAQC,MAC3CvG,EAAQ3B,OAAOymB,QACjB7xB,KAAK+c,MAAM3R,OAAO,UAAU,EAAO8kB,EAAAltB,QAAMqQ,QAAQC,QAIvD+hB,mBACE3tB,IAAKkoB,EAAS/hB,KAAK+V,MACnBwI,WAAW,EACXhhB,QAAUypB,KAAM,WAChB1W,QAAS,SAAS5K,GAAO,GAAA+hB,GACFt1B,KAAK+c,MAAMsT,QAAQ9c,EAAMpI,OADvBoqB,EAAA1gB,EAAAygB,EAAA,GAClB3oB,EADkB4oB,EAAA,GACZzkB,EADYykB,EAAA,GAEnBxsB,GAAU,EAAAE,EAAAjG,YAAW2J,EAAK5D,WAAa8rB,KAAM,YAC7C7oB,GAAQ,GAAA7B,GAAAnH,SAAYgL,OAAOuF,EAAMpI,OACbJ,OAAO,KAAMhC,GACbiF,OAAOrB,EAAKjH,SAAWoL,EAAS,GAChC9C,OAAO,GAAK6mB,KAAM,aAC1C70B,MAAK+c,MAAMoY,eAAenpB,EAAOkkB,EAAAltB,QAAMqQ,QAAQC,MAC/CtT,KAAK+c,MAAMlJ,aAAaN,EAAMpI,MAAQ,EAAG+kB,EAAAltB,QAAMqQ,QAAQS,QACvD9T,KAAK+c,MAAM3D,mBAGfoc,gBACE9tB,IAAKkoB,EAAS/hB,KAAK+V,MACnBwI,WAAW,EACXhhB,QAAS,UACT2lB,OAAQ,KACR5S,QAAS,SAAS5K,EAAOxG,GAAS,GAAA0oB,GACXz1B,KAAK+c,MAAMsT,QAAQ9c,EAAMpI,OADduqB,EAAA7gB,EAAA4gB,EAAA,GAC3B9oB,EAD2B+oB,EAAA,GACrB5kB,EADqB4kB,EAAA,GAE5B1pB,GAAQ,GAAA7B,GAAAnH,SAAYgL,OAAOuF,EAAMpI,OACbJ,OAAO,KAAMgC,EAAQ3B,QACrB4C,OAAOrB,EAAKjH,SAAWoL,EAAS,GAChC9C,OAAO,GAAK2nB,OAAQ,MAC5C31B,MAAK+c,MAAMoY,eAAenpB,EAAOkkB,EAAAltB,QAAMqQ,QAAQC,MAC/CtT,KAAK+c,MAAMlJ,aAAaN,EAAMpI,MAAQ,EAAG+kB,EAAAltB,QAAMqQ,QAAQS,QACvD9T,KAAK+c,MAAM3D,mBAGfwc,iBACEluB,IAAK,IACL0kB,WAAW,EACXhhB,QAAUypB,MAAM,GAChBhE,OAAQ,kCACR1S,QAAS,SAAS5K,EAAOxG,GACvB,GAAIrH,GAASqH,EAAQ8jB,OAAOnrB,OADImwB,EAEX71B,KAAK+c,MAAMsT,QAAQ9c,EAAMpI,OAFd2qB,EAAAjhB,EAAAghB,EAAA,GAE3BlpB,EAF2BmpB,EAAA,GAErBhlB,EAFqBglB,EAAA,EAGhC,IAAIhlB,EAASpL,EAAQ,OAAO,CAC5B,IAAI/D,SACJ,QAAQoL,EAAQ8jB,OAAOta,QACrB,IAAK,KAAM,IAAK,MACd5U,EAAQ,WACR,MACF,KAAK,MACHA,EAAQ,SACR,MACF,KAAK,IAAK,IAAK,IACbA,EAAQ,QACR,MACF,SACEA,EAAQ,UAEZ3B,KAAK+c,MAAMrB,WAAWnI,EAAMpI,MAAO,IAAK+kB,EAAAltB,QAAMqQ,QAAQC,MACtDtT,KAAK+c,MAAMhL,QAAQmjB,QACnB,IAAIlpB,IAAQ,GAAA7B,GAAAnH,SAAYgL,OAAOuF,EAAMpI,MAAQ2F,GACrB/C,OAAOrI,EAAS,GAChBsI,OAAOrB,EAAKjH,SAAW,EAAIoL,GAC3B9C,OAAO,GAAK6mB,KAAMlzB,GAC1C3B,MAAK+c,MAAMoY,eAAenpB,EAAOkkB,EAAAltB,QAAMqQ,QAAQC,MAC/CtT,KAAK+c,MAAMhL,QAAQmjB,SACnBl1B,KAAK+c,MAAMlJ,aAAaN,EAAMpI,MAAQzF,EAAQwqB,EAAAltB,QAAMqQ,QAAQS,UAGhEiiB,aACEruB,IAAKkoB,EAAS/hB,KAAK+V,MACnBwI,WAAW,EACXhhB,QAAS,cACTylB,OAAQ,QACRE,OAAQ,QACR5S,QAAS,SAAS5K,GAAO,GAAAyiB,GACAh2B,KAAK+c,MAAMsT,QAAQ9c,EAAMpI,OADzB8qB,EAAAphB,EAAAmhB,EAAA,GAChBrpB,EADgBspB,EAAA,GACVnlB,EADUmlB,EAAA,GAEjBjqB,GAAQ,GAAA7B,GAAAnH,SACXgL,OAAOuF,EAAMpI,MAAQwB,EAAKjH,SAAWoL,EAAS,GAC9C9C,OAAO,GAAK8jB,aAAc,OAC1B/jB,OAAO,EACV/N,MAAK+c,MAAMoY,eAAenpB,EAAOkkB,EAAAltB,QAAMqQ,QAAQC,QAGnD4iB,aAAc1G,EAAsBI,EAAS/hB,KAAKgiB,MAAM,GACxDsG,mBAAoB3G,EAAsBI,EAAS/hB,KAAKgiB,MAAM,GAC9DuG,cAAe5G,EAAsBI,EAAS/hB,KAAKkiB,OAAO,GAC1DsG,oBAAqB7G,EAAsBI,EAAS/hB,KAAKkiB,OAAO,K3B22IpEpwB,E2B1qIqBqD,QAAZ4sB,E3B2qITjwB,E2B3qI8B6yB,Y3B+qIxB,SAAU5yB,EAAQD,EAASO,GAEjC,Y4B9pJAN,GAAOD,SACL22B,OACEC,GAAYr2B,EAAQ,IACpBs2B,OAAYt2B,EAAQ,IACpBoa,MAAYpa,EAAQ,IACpBu2B,QAAYv2B,EAAQ,KAEtBw2B,WAAcx2B,EAAQ,IACtBy2B,WAAcz2B,EAAQ,IACtBs0B,KAAct0B,EAAQ,IACtB02B,MAAc12B,EAAQ,IACtB22B,KAAc32B,EAAQ,IACtB4xB,aAAc5xB,EAAQ,IACtB42B,MAAc52B,EAAQ,IACtB62B,WACER,GAAYr2B,EAAQ,IACpB82B,IAAY92B,EAAQ,KAEtB+2B,OACET,OAAYt2B,EAAQ,IACpBg3B,KAAYh3B,EAAQ,IACpBma,KAAYna,EAAQ,IACpBoa,MAAYpa,EAAQ,KAEtBi3B,QAAcj3B,EAAQ,IACtBy1B,QACEyB,EAAYl3B,EAAQ,IACpBm3B,EAAYn3B,EAAQ,KAEtBu0B,OAAcv0B,EAAQ,IACtBo3B,MAAcp3B,EAAQ,IACtB2xB,QACE0F,KAAYr3B,EAAQ,IACpBs3B,KAAYt3B,EAAQ,KAEtBu3B,KAAcv3B,EAAQ,IACtB20B,MACE6C,QAAYx3B,EAAQ,IACpBy3B,OAAYz3B,EAAQ,IACpB03B,MAAY13B,EAAQ,MAEtB23B,QACEC,IAAY53B,EAAQ,KACpB63B,MAAY73B,EAAQ,MAEtB83B,OAAc93B,EAAQ,KACtBw0B,UAAcx0B,EAAQ,KACtB+3B,MAAc/3B,EAAQ,O5BsqJlB,SAAUN,EAAQD,EAASO,GAEjC,Y6BttJAY,QAAAC,eAAApB,EAAA,cAA8CgC,OAAA,GAC9C,IAAAa,GAAAtC,EAAA,GACAg4B,EAAA,WACA,QAAAA,GAAAptB,GACA9K,KAAA8K,UAEA9K,KAAA8K,QAAAtI,EAAA6B,WAA2CC,KAAAtE,MAkJ3C,MAhJAc,QAAAC,eAAAm3B,EAAA32B,UAAA,WAEAL,IAAA,WACA,MAAAlB,MAAA6G,aAEA5F,YAAA,EACAD,cAAA,IAEAk3B,EAAAv1B,OAAA,SAAAhB,GACA,SAAA3B,KAAAqF,QACA,SAAA7C,GAAAuB,eAAA,kCAEA,IAAAI,EAwBA,OAvBA8B,OAAAC,QAAAlG,KAAAqF,UACA,gBAAA1D,KACAA,IAAAwE,cACAopB,SAAA5tB,GAAAyF,aAAAzF,IACAA,EAAA4tB,SAAA5tB,KAIAwC,EADA,gBAAAxC,GACAkR,SAAA6F,cAAA1Y,KAAAqF,QAAA1D,EAAA,IAEA3B,KAAAqF,QAAAqL,QAAA/O,IAAA,EACAkR,SAAA6F,cAAA/W,GAGAkR,SAAA6F,cAAA1Y,KAAAqF,QAAA,KAIAlB,EAAA0O,SAAA6F,cAAA1Y,KAAAqF,SAEArF,KAAAgG,WACA7B,EAAAqS,UAAAC,IAAAzW,KAAAgG,WAEA7B,GAEA+zB,EAAA32B,UAAA8jB,OAAA,WACA,MAAArlB,KAAAkJ,SACAlJ,KAAA8W,OAAA9W,KAAAkJ,OAAA4N,SAGAohB,EAAA32B,UAAAyG,MAAA,WACA,GAAA8C,GAAA9K,KAAA8K,QAAAqtB,WAAA,EACA,OAAA31B,GAAAG,OAAAmI,IAEAotB,EAAA32B,UAAAwkB,OAAA,WACA,MAAA/lB,KAAAkJ,QACAlJ,KAAAkJ,OAAA8Y,YAAAhiB,YAEAA,MAAA8K,QAAAtI,EAAA6B,WAEA6zB,EAAA32B,UAAA4f,SAAA,SAAAhW,EAAAzF,GACA1F,KAAAmR,QAAAhG,EAAAzF,GACAoH,UAEAorB,EAAA32B,UAAAigB,SAAA,SAAArW,EAAAzF,EAAA/E,EAAAgB,GACA,GAAA2C,GAAAtE,KAAAmR,QAAAhG,EAAAzF,EACA,UAAAlD,EAAAK,MAAAlC,EAAA6B,EAAAE,MAAAwO,OAAAvP,EACA2C,EAAA8M,KAAAzQ,EAAAgB,OAEA,UAAAa,EAAAK,MAAAlC,EAAA6B,EAAAE,MAAAuc,WAAA,CACA,GAAA/V,GAAA1G,EAAAG,OAAA3C,KAAAmJ,QAAA3E,MACAF,GAAA8M,KAAAlI,GACAA,EAAAkC,OAAAzK,EAAAgB,KAGAu2B,EAAA32B,UAAAmK,SAAA,SAAAP,EAAAxJ,EAAA0J,GACA,GAAA/G,GAAA,MAAA+G,EAAA7I,EAAAG,OAAA,OAAAhB,GAAAa,EAAAG,OAAAhB,EAAA0J,GACAuB,EAAA5M,KAAAkF,MAAAiG,EACAnL,MAAAkJ,OAAAsC,aAAAlH,EAAAsI,IAEAsrB,EAAA32B,UAAA4kB,WAAA,SAAAiS,EAAAnS,OACA,KAAAA,IAAiCA,EAAA,MACjC,MAAAjmB,KAAAkJ,QACAlJ,KAAAkJ,OAAAuD,SAAAK,OAAA9M,KAEA,IAAAq4B,GAAA,IACAD,GAAA3rB,SAAAjB,aAAAxL,KAAAimB,GACA,MAAAA,IACAoS,EAAApS,EAAAnb,SAEA9K,KAAA8K,QAAAvG,YAAA6zB,EAAAttB,SACA9K,KAAA8K,QAAAkc,aAAAqR,GACAD,EAAAttB,QAAAU,aAAAxL,KAAA8K,QAAAutB,GAEAr4B,KAAAkJ,OAAAkvB,EACAp4B,KAAAqlB,UAEA6S,EAAA32B,UAAA4P,QAAA,SAAAhG,EAAAzF,GACA,GAAAuC,GAAAjI,KAAAkF,MAAAiG,EAEA,OADAlD,GAAA/C,MAAAQ,GACAuC,GAEAiwB,EAAA32B,UAAAmE,OAAA,WACA,UAEAwyB,EAAA32B,UAAAuP,OAAA,SAAArR,GAEA,WADA,KAAAA,IAA8BA,EAAAO,KAAAkJ,QAC9B,MAAAlJ,KAAAkJ,QAAAlJ,MAAAP,EACA,EACAO,KAAAkJ,OAAAuD,SAAAqE,OAAA9Q,WAAAkJ,OAAA4H,OAAArR,IAEAy4B,EAAA32B,UAAAwgB,SAAA,SAAAhV,GAGA,MAAA/M,KAAA8K,QAAAtI,EAAA6B,iBAEArE,MAAA8K,QAAAtI,EAAA6B,UAAAmT,WAGA0gB,EAAA32B,UAAAuL,OAAA,WACA,MAAA9M,KAAA8K,QAAAvG,YACAvE,KAAA8K,QAAAvG,WAAAyd,YAAAhiB,KAAA8K,SAEA9K,KAAA+lB,UAEAmS,EAAA32B,UAAA6d,QAAA,SAAAnX,GACA,MAAAA,EAAAiB,SAEAjB,EAAAiB,OAAAsC,aAAAxL,KAAAiI,EAAAwD,MACAxD,EAAA6E,WAEAorB,EAAA32B,UAAA4lB,YAAA,SAAAxmB,EAAAgB,GACA,GAAAylB,GAAA,gBAAAzmB,GAAA6B,EAAAG,OAAAhC,EAAAgB,GAAAhB,CAEA,OADAymB,GAAAhI,QAAApf,MACAonB,GAEA8Q,EAAA32B,UAAA2D,MAAA,SAAAiG,EAAA8B,GACA,WAAA9B,EAAAnL,UAAAyL,MAEAysB,EAAA32B,UAAAmW,OAAA,SAAAF,EAAAzK,KAGAmrB,EAAA32B,UAAA6P,KAAA,SAAAzQ,EAAAgB,GACA,GAAA0lB,GAAA,gBAAA1mB,GAAA6B,EAAAG,OAAAhC,EAAAgB,GAAAhB,CAKA,OAJA,OAAAX,KAAAkJ,QACAlJ,KAAAkJ,OAAAsC,aAAA6b,EAAArnB,KAAAyL,MAEA4b,EAAAxF,YAAA7hB,MACAqnB,GAEA6Q,EAAAryB,SAAA,WACAqyB,IAEAv4B,GAAAqD,QAAAk1B,G7B6tJM,SAAUt4B,EAAQD,EAASO,GAEjC,Y8Bz3JAY,QAAAC,eAAApB,EAAA,cAA8CgC,OAAA,GAC9C,IAAAS,GAAAlC,EAAA,IACAmC,EAAAnC,EAAA,IACAoC,EAAApC,EAAA,IACAsC,EAAAtC,EAAA,GACAo4B,EAAA,WACA,QAAAA,GAAAxtB,GACA9K,KAAA2E,cACA3E,KAAA8K,UACA9K,KAAAylB,QAyDA,MAvDA6S,GAAA/2B,UAAA0J,UAAA,SAAAA,EAAAtJ,GAEAA,EACAsJ,EAAAwL,IAAAzW,KAAA8K,QAAAnJ,KACA,MAAAsJ,EAAAtJ,MAAA3B,KAAA8K,SACA9K,KAAA2E,WAAAsG,EAAAnF,UAAAmF,QAGAjL,MAAA2E,WAAAsG,EAAAnF,YAKAmF,EAAA6B,OAAA9M,KAAA8K,eACA9K,MAAA2E,WAAAsG,EAAAnF,YAGAwyB,EAAA/2B,UAAAkkB,MAAA,WACA,GAAAze,GAAAhH,IACAA,MAAA2E,aACA,IAAAA,GAAAvC,EAAAY,QAAA6K,KAAA7N,KAAA8K,SACA3F,EAAA9C,EAAAW,QAAA6K,KAAA7N,KAAA8K,SACAytB,EAAAj2B,EAAAU,QAAA6K,KAAA7N,KAAA8K,QACAnG,GACAkL,OAAA1K,GACA0K,OAAA0oB,GACAlyB,QAAA,SAAA1F,GACA,GAAA63B,GAAAh2B,EAAAK,MAAAlC,EAAA6B,EAAAE,MAAAuc,UACAuZ,aAAAp2B,GAAAY,UACAgE,EAAArC,WAAA6zB,EAAA1yB,UAAA0yB,MAIAF,EAAA/2B,UAAAuG,KAAA,SAAAG,GACA,GAAAjB,GAAAhH,IACAc,QAAA+M,KAAA7N,KAAA2E,YAAA0B,QAAA,SAAAqB,GACA,GAAA/F,GAAAqF,EAAArC,WAAA+C,GAAA/F,MAAAqF,EAAA8D,QACA7C,GAAAmD,OAAA1D,EAAA/F,MAGA22B,EAAA/2B,UAAA+lB,KAAA,SAAArf,GACA,GAAAjB,GAAAhH,IACAA,MAAA8H,KAAAG,GACAnH,OAAA+M,KAAA7N,KAAA2E,YAAA0B,QAAA,SAAAqB,GACAV,EAAArC,WAAA+C,GAAAoF,OAAA9F,EAAA8D,WAEA9K,KAAA2E,eAEA2zB,EAAA/2B,UAAAyJ,OAAA,WACA,GAAAhE,GAAAhH,IACA,OAAAc,QAAA+M,KAAA7N,KAAA2E,YAAAuH,OAAA,SAAAvH,EAAAhE,GAEA,MADAgE,GAAAhE,GAAAqG,EAAArC,WAAAhE,GAAAgB,MAAAqF,EAAA8D,SACAnG,QAGA2zB,IAEA34B,GAAAqD,QAAAs1B,G9Bg4JM,SAAU14B,EAAQD,EAASO,GAEjC,Y+B17JA,SAAA4D,GAAAK,EAAA0sB,GAEA,OADA1sB,EAAAc,aAAA,cACAC,MAAA,OAAAoJ,OAAA,SAAA3N,GACA,WAAAA,EAAA+P,QAAAmgB,EAAA,OAfA,GAAAtqB,GAAAvG,WAAAuG,WAAA,WACA,GAAAC,GAAA1F,OAAA2F,iBACUC,uBAAgBT,QAAA,SAAAvF,EAAAiG,GAAsCjG,EAAAgG,UAAAC,IAChE,SAAAjG,EAAAiG,GAAyB,OAAAlF,KAAAkF,KAAAnF,eAAAC,KAAAf,EAAAe,GAAAkF,EAAAlF,IACzB,iBAAAf,EAAAiG,GAEA,QAAAC,KAAuB5G,KAAA6G,YAAAnG,EADvB8F,EAAA9F,EAAAiG,GAEAjG,EAAAa,UAAA,OAAAoF,EAAA7F,OAAA6B,OAAAgE,IAAAC,EAAArF,UAAAoF,EAAApF,UAAA,GAAAqF,OAGA9F,QAAAC,eAAApB,EAAA,cAA8CgC,OAAA,GAC9C,IAAAS,GAAAlC,EAAA,IAOAu4B,EAAA,SAAA3xB,GAEA,QAAA2xB,KACA,cAAA3xB,KAAA+D,MAAA7K,KAAAyF,YAAAzF,KA+BA,MAjCAuG,GAAAkyB,EAAA3xB,GAIA2xB,EAAA5qB,KAAA,SAAA1J,GACA,OAAAA,EAAAc,aAAA,cAAAC,MAAA,OAAAS,IAAA,SAAAhF,GACA,MAAAA,GACAuE,MAAA,KACAyG,MAAA,MACAqE,KAAA,QAGAyoB,EAAAl3B,UAAAkV,IAAA,SAAAtS,EAAAxC,GACA,QAAA3B,KAAAmf,OAAAhb,EAAAxC,KAEA3B,KAAA8M,OAAA3I,GACAA,EAAAqS,UAAAC,IAAAzW,KAAA+F,QAAA,IAAApE,IACA,IAEA82B,EAAAl3B,UAAAuL,OAAA,SAAA3I,GACAL,EAAAK,EAAAnE,KAAA+F,SACAM,QAAA,SAAA1F,GACAwD,EAAAqS,UAAA1J,OAAAnM,KAEA,IAAAwD,EAAAqS,UAAA9Q,QACAvB,EAAAkb,gBAAA,UAGAoZ,EAAAl3B,UAAAI,MAAA,SAAAwC,GACA,GAAAu0B,GAAA50B,EAAAK,EAAAnE,KAAA+F,SAAA,OACApE,EAAA+2B,EAAA/sB,MAAA3L,KAAA+F,QAAAL,OAAA,EACA,OAAA1F,MAAAmf,OAAAhb,EAAAxC,KAAA,IAEA82B,GACCr2B,EAAAY,QACDrD,GAAAqD,QAAAy1B,G/B68JM,SAAU74B,EAAQD,EAASO,GAEjC,YgCz/JA,SAAAy4B,GAAAh4B,GACA,GAAAi4B,GAAAj4B,EAAAuE,MAAA,KACA2zB,EAAAD,EACAjtB,MAAA,GACAhG,IAAA,SAAAmzB,GACA,MAAAA,GAAA,GAAA3yB,cAAA2yB,EAAAntB,MAAA,KAEAqE,KAAA,GACA,OAAA4oB,GAAA,GAAAC,EApBA,GAAAtyB,GAAAvG,WAAAuG,WAAA,WACA,GAAAC,GAAA1F,OAAA2F,iBACUC,uBAAgBT,QAAA,SAAAvF,EAAAiG,GAAsCjG,EAAAgG,UAAAC,IAChE,SAAAjG,EAAAiG,GAAyB,OAAAlF,KAAAkF,KAAAnF,eAAAC,KAAAf,EAAAe,GAAAkF,EAAAlF,IACzB,iBAAAf,EAAAiG,GAEA,QAAAC,KAAuB5G,KAAA6G,YAAAnG,EADvB8F,EAAA9F,EAAAiG,GAEAjG,EAAAa,UAAA,OAAAoF,EAAA7F,OAAA6B,OAAAgE,IAAAC,EAAArF,UAAAoF,EAAApF,UAAA,GAAAqF,OAGA9F,QAAAC,eAAApB,EAAA,cAA8CgC,OAAA,GAC9C,IAAAS,GAAAlC,EAAA,IAWA64B,EAAA,SAAAjyB,GAEA,QAAAiyB,KACA,cAAAjyB,KAAA+D,MAAA7K,KAAAyF,YAAAzF,KA2BA,MA7BAuG,GAAAwyB,EAAAjyB,GAIAiyB,EAAAlrB,KAAA,SAAA1J,GACA,OAAAA,EAAAc,aAAA,cAAAC,MAAA,KAA0DS,IAAA,SAAAhE,GAE1D,MADAA,GAAAuD,MAAA,KACA,GAAAqR,UAGAwiB,EAAAx3B,UAAAkV,IAAA,SAAAtS,EAAAxC,GACA,QAAA3B,KAAAmf,OAAAhb,EAAAxC,KAGAwC,EAAAof,MAAAoV,EAAA34B,KAAA+F,UAAApE,GACA,IAEAo3B,EAAAx3B,UAAAuL,OAAA,SAAA3I,GAEAA,EAAAof,MAAAoV,EAAA34B,KAAA+F,UAAA,GACA5B,EAAAc,aAAA,UACAd,EAAAkb,gBAAA,UAGA0Z,EAAAx3B,UAAAI,MAAA,SAAAwC,GAEA,GAAAxC,GAAAwC,EAAAof,MAAAoV,EAAA34B,KAAA+F,SACA,OAAA/F,MAAAmf,OAAAhb,EAAAxC,KAAA,IAEAo3B,GACC32B,EAAAY,QACDrD,GAAAqD,QAAA+1B,GhC4gKM,SAAUn5B,EAAQD,EAASO,GAEjC,YAqBA,SAASiI,GAAuBZ,GAAO,MAAOA,IAAOA,EAAInG,WAAamG,GAAQvE,QAASuE,GAEvF,QAASa,GAAgBC,EAAUC,GAAe,KAAMD,YAAoBC,IAAgB,KAAM,IAAIC,WAAU,qCAEhH,QAASC,GAA2BzI,EAAMQ,GAAQ,IAAKR,EAAQ,KAAM,IAAI0I,gBAAe,4DAAgE,QAAOlI,GAAyB,gBAATA,IAAqC,kBAATA,GAA8BR,EAAPQ,EAElO,QAASmI,GAAUC,EAAUC,GAAc,GAA0B,kBAAfA,IAA4C,OAAfA,EAAuB,KAAM,IAAIL,WAAU,iEAAoEK,GAAeD,GAASpH,UAAYT,OAAO6B,OAAOiG,GAAcA,EAAWrH,WAAasF,aAAelF,MAAOgH,EAAU1H,YAAY,EAAO4H,UAAU,EAAM7H,cAAc,KAAe4H,IAAY9H,OAAO2F,eAAiB3F,OAAO2F,eAAekC,EAAUC,GAAcD,EAASjC,UAAYkC,GAxBje9H,OAAOC,eAAepB,EAAS,cAC7BgC,OAAO,GAGT,IAAIkT,GAAiB,WAAc,QAASO,GAAc/N,EAAKhH,GAAK,GAAIgV,MAAeC,GAAK,EAAUC,GAAK,EAAWC,MAAKxM,EAAW,KAAM,IAAK,GAAiCyM,GAA7BjQ,EAAK6B,EAAI8N,OAAOjG,cAAmBoG,GAAMG,EAAKjQ,EAAGiG,QAAQiK,QAAoBL,EAAKvH,KAAK2H,EAAG9T,QAAYtB,GAAKgV,EAAK3P,SAAWrF,GAA3DiV,GAAK,IAAoE,MAAOK,GAAOJ,GAAK,EAAMC,EAAKG,EAAO,QAAU,KAAWL,GAAM9P,EAAW,QAAGA,EAAW,SAAO,QAAU,GAAI+P,EAAI,KAAMC,IAAQ,MAAOH,GAAQ,MAAO,UAAUhO,EAAKhH,GAAK,GAAI4F,MAAMC,QAAQmB,GAAQ,MAAOA,EAAY,IAAI8N,OAAOjG,WAAYpO,QAAOuG,GAAQ,MAAO+N,GAAc/N,EAAKhH,EAAa,MAAM,IAAIkI,WAAU,4DAEllBoB,EAAO,QAASzI,GAAIG,EAAQC,EAAUsI,GAA2B,OAAXvI,IAAiBA,EAASwI,SAAStI,UAAW,IAAIuI,GAAOhJ,OAAOiJ,yBAAyB1I,EAAQC,EAAW,QAAa0H,KAATc,EAAoB,CAAE,GAAIZ,GAASpI,OAAOkJ,eAAe3I,EAAS,OAAe,QAAX6H,MAAmB,GAAkChI,EAAIgI,EAAQ5H,EAAUsI,GAAoB,GAAI,SAAWE,GAAQ,MAAOA,GAAKnI,KAAgB,IAAIf,GAASkJ,EAAK5I,GAAK,QAAe8H,KAAXpI,EAA4C,MAAOA,GAAOL,KAAKqJ,IAExdP,EAAe,WAAc,QAASC,GAAiBrB,EAAQsB,GAAS,IAAK,GAAIlJ,GAAI,EAAGA,EAAIkJ,EAAM7D,OAAQrF,IAAK,CAAE,GAAImJ,GAAaD,EAAMlJ,EAAImJ,GAAWvI,WAAauI,EAAWvI,aAAc,EAAOuI,EAAWxI,cAAe,EAAU,SAAWwI,KAAYA,EAAWX,UAAW,GAAM/H,OAAOC,eAAekH,EAAQuB,EAAW9B,IAAK8B,IAAiB,MAAO,UAAUlB,EAAamB,EAAYC,GAAiJ,MAA9HD,IAAYH,EAAiBhB,EAAY/G,UAAWkI,GAAiBC,GAAaJ,EAAiBhB,EAAaoB,GAAqBpB,MiChlKhiB8B,EAAAlK,EAAA,GjColKImK,EAAclC,EAAuBiC,GiCnlKzCM,EAAAxK,EAAA,GjCulKIyK,EAASxC,EAAuBuC,GiCplK9BsuB,EjC8lKO,SAAUpuB,GiCzlKrB,QAAAouB,GAAYluB,EAASkM,GAAW5O,EAAApI,KAAAg5B,EAAA,IAAAhyB,GAAAwB,EAAAxI,MAAAg5B,EAAAtyB,WAAA5F,OAAAkJ,eAAAgvB,IAAAz4B,KAAAP,KACxB8K,GADwB,OAE9B9D,GAAKgQ,UAAYA,EACjBhQ,EAAK0kB,SAAW7Y,SAASomB,eAAeD,EAAOE,UAC/ClyB,EAAK8D,QAAQ+W,YAAY7a,EAAK0kB,UAC9B1kB,EAAKmyB,QAAU,EALenyB,EjCouKhC,MA1IA0B,GAAUswB,EAAQpuB,GAElBvB,EAAa2vB,EAAQ,OACnBtxB,IAAK,QACL/F,MAAO,gBAiBT0H,EAAa2vB,IACXtxB,IAAK,SACL/F,MAAO,WiCvmKY,MAAf3B,KAAKkJ,QAAgBlJ,KAAKkJ,OAAO8Y,YAAYhiB,SjC4mKjD0H,IAAK,SACL/F,MAAO,SiC1mKFhB,EAAMgB,GACX,GAAqB,IAAjB3B,KAAKm5B,QACP,MAAAxvB,GAAAqvB,EAAAz3B,UAAAmF,WAAA5F,OAAAkJ,eAAAgvB,EAAAz3B,WAAA,SAAAvB,MAAAO,KAAAP,KAAoBW,EAAMgB,EAG5B,KADA,GAAIsG,GAASjI,KAAMmL,EAAQ,EACV,MAAVlD,GAAkBA,EAAOkB,QAAQ3E,QAAU6F,EAAArH,QAAUN,MAAMkJ,YAChET,GAASlD,EAAO6I,OAAO7I,EAAOiB,QAC9BjB,EAASA,EAAOiB,MAEJ,OAAVjB,IACFjI,KAAKm5B,QAAUH,EAAOE,SAASxzB,OAC/BuC,EAAO8Z,WACP9Z,EAAOuZ,SAASrW,EAAO6tB,EAAOE,SAASxzB,OAAQ/E,EAAMgB,GACrD3B,KAAKm5B,QAAU,MjC+mKjBzxB,IAAK,QACL/F,MAAO,SiC5mKHwC,EAAM2M,GACV,MAAI3M,KAASnE,KAAK0rB,SAAiB,EACnC/hB,EAAAqvB,EAAAz3B,UAAAmF,WAAA5F,OAAAkJ,eAAAgvB,EAAAz3B,WAAA,QAAAvB,MAAAO,KAAAP,KAAmBmE,EAAM2M,MjC+mKzBpJ,IAAK,SACL/F,MAAO,WiC5mKP,MAAO3B,MAAKm5B,WjCgnKZzxB,IAAK,WACL/F,MAAO,WiC7mKP,OAAQ3B,KAAK0rB,SAAU1rB,KAAK0rB,SAASW,KAAK3mB,WjCinK1CgC,IAAK,SACL/F,MAAO,WiC9mKPgI,EAAAqvB,EAAAz3B,UAAAmF,WAAA5F,OAAAkJ,eAAAgvB,EAAAz3B,WAAA,SAAAvB,MAAAO,KAAAP,MACAA,KAAKkJ,OAAS,QjCknKdxB,IAAK,UACL/F,MAAO,WiC/mKP,IAAI3B,KAAKgX,UAAUiU,WAA4B,MAAfjrB,KAAKkJ,OAArC,CACA,GAAIwiB,GAAW1rB,KAAK0rB,SAChBnY,EAAQvT,KAAKgX,UAAUyU,iBACvB2N,SAAatqB,SAAOC,QACxB,IAAa,MAATwE,GAAiBA,EAAMzE,MAAM3K,OAASunB,GAAYnY,EAAMxE,IAAI5K,OAASunB,EAAU,IAAAxN,IACpDwN,EAAUnY,EAAMzE,MAAMgC,OAAQyC,EAAMxE,IAAI+B,OAApEsoB,GADgFlb,EAAA,GACnEpP,EADmEoP,EAAA,GAC5DnP,EAD4DmP,EAAA,GAInF,KAAiC,MAA1Ble,KAAK8K,QAAQkjB,WAAqBhuB,KAAK8K,QAAQkjB,YAAchuB,KAAK0rB,UACvE1rB,KAAK8K,QAAQvG,WAAWiH,aAAaxL,KAAK8K,QAAQkjB,UAAWhuB,KAAK8K,QAEpE,IAAI9K,KAAK0rB,SAASW,OAAS2M,EAAOE,SAAU,CAC1C,GAAI3sB,GAAOvM,KAAK0rB,SAASW,KAAKnnB,MAAM8zB,EAAOE,UAAUlpB,KAAK,GACtDhQ,MAAKyL,eAALd,GAAA3H,SACFo2B,EAAcp5B,KAAKyL,KAAKX,QACxB9K,KAAKyL,KAAKC,SAAS,EAAGa,GACtBvM,KAAK0rB,SAASW,KAAO2M,EAAOE,WAE5Bl5B,KAAK0rB,SAASW,KAAO9f,EACrBvM,KAAKkJ,OAAOsC,aAAanB,EAAArH,QAAUL,OAAO3C,KAAK0rB,UAAW1rB,MAC1DA,KAAK0rB,SAAW7Y,SAASomB,eAAeD,EAAOE,UAC/Cl5B,KAAK8K,QAAQ+W,YAAY7hB,KAAK0rB,WAIlC,GADA1rB,KAAK8M,SACQ,MAATgC,EAAe,IAAA4F,IACD5F,EAAOC,GAAKpJ,IAAI,SAASmL,GACvC,MAAO1E,MAAK2I,IAAI,EAAG3I,KAAKC,IAAI+sB,EAAY/M,KAAK3mB,OAAQoL,EAAS,MAF/C8D,EAAAC,EAAAH,EAAA,EAIjB,OAHC5F,GADgB8F,EAAA,GACT7F,EADS6F,EAAA,IAKfkX,UAAWsN,EACXrN,YAAajd,EACbkd,QAASoN,EACTnN,UAAWld,QjCgoKfrH,IAAK,SACL/F,MAAO,SiC5nKF6V,EAAWzK,GAAS,GAAAjB,GAAA9L,IACzB,IAAIwX,EAAU0O,KAAK,SAACS,GAClB,MAAyB,kBAAlBA,EAASvP,MAA4BuP,EAAS1e,SAAW6D,EAAK4f,WACnE,CACF,GAAInY,GAAQvT,KAAKksB,SACb3Y,KAAOxG,EAAQwG,MAAQA,OjCkoK7B7L,IAAK,QACL/F,MAAO,WiC9nKP,MAAO,OjCmoKFq3B,GiCzuKY3uB,EAAArH,QAAUG,MAyG/B61B,GAAOnzB,SAAW,SAClBmzB,EAAOhzB,UAAY,YACnBgzB,EAAO3zB,QAAU,OACjB2zB,EAAOE,SAAW,SjCsoKlBv5B,EAAQqD,QiCnoKOg2B,GjCuoKT,SAAUp5B,EAAQD,EAASO,GAEjC,YASA,SAASkI,GAAgBC,EAAUC,GAAe,KAAMD,YAAoBC,IAAgB,KAAM,IAAIC,WAAU,qCANhHzH,OAAOC,eAAepB,EAAS,cAC7BgC,OAAO,GAGT,IAAI0H,GAAe,WAAc,QAASC,GAAiBrB,EAAQsB,GAAS,IAAK,GAAIlJ,GAAI,EAAGA,EAAIkJ,EAAM7D,OAAQrF,IAAK,CAAE,GAAImJ,GAAaD,EAAMlJ,EAAImJ,GAAWvI,WAAauI,EAAWvI,aAAc,EAAOuI,EAAWxI,cAAe,EAAU,SAAWwI,KAAYA,EAAWX,UAAW,GAAM/H,OAAOC,eAAekH,EAAQuB,EAAW9B,IAAK8B,IAAiB,MAAO,UAAUlB,EAAamB,EAAYC,GAAiJ,MAA9HD,IAAYH,EAAiBhB,EAAY/G,UAAWkI,GAAiBC,GAAaJ,EAAiBhB,EAAaoB,GAAqBpB,MkCnwK1hB+wB,ElCuwKM,WkCtwKV,QAAAA,GAAYtc,EAAOnV,GAASQ,EAAApI,KAAAq5B,GAC1Br5B,KAAK+c,MAAQA,EACb/c,KAAK4H,QAAUA,EACf5H,KAAKC,WlCgyKP,MApBAoJ,GAAagwB,IACX3xB,IAAK,OACL/F,MAAO,WkC3wKF,GAAAqF,GAAAhH,IACLc,QAAO+M,KAAK7N,KAAK4H,QAAQ3H,SAASoG,QAAQ,SAAC1F,GACf,MAAtBqG,EAAK/G,QAAQU,IACfqG,EAAKiQ,UAAUtW,QlCkxKnB+G,IAAK,YACL/F,MAAO,SkC9wKChB,GACR,GAAI8R,GAAczS,KAAK+c,MAAMlW,YAAYsL,OAAvB,WAAyCxR,EAE3D,OADAX,MAAKC,QAAQU,GAAQ,GAAI8R,GAAYzS,KAAK+c,MAAO/c,KAAK4H,QAAQ3H,QAAQU,QAC/DX,KAAKC,QAAQU,OlCkxKf04B,IkC/wKTA,GAAMnnB,UACJjS,YAEFo5B,EAAMC,QACJt2B,QAAWq2B,GlCqxKb15B,EAAQqD,QkCjxKOq2B,GlCqxKT,SAAUz5B,EAAQD,EAASO,GAEjC,YAmBA,SAASiI,GAAuBZ,GAAO,MAAOA,IAAOA,EAAInG,WAAamG,GAAQvE,QAASuE,GAEvF,QAASa,GAAgBC,EAAUC,GAAe,KAAMD,YAAoBC,IAAgB,KAAM,IAAIC,WAAU,qCAEhH,QAASC,GAA2BzI,EAAMQ,GAAQ,IAAKR,EAAQ,KAAM,IAAI0I,gBAAe,4DAAgE,QAAOlI,GAAyB,gBAATA,IAAqC,kBAATA,GAA8BR,EAAPQ,EAElO,QAASmI,GAAUC,EAAUC,GAAc,GAA0B,kBAAfA,IAA4C,OAAfA,EAAuB,KAAM,IAAIL,WAAU,iEAAoEK,GAAeD,GAASpH,UAAYT,OAAO6B,OAAOiG,GAAcA,EAAWrH,WAAasF,aAAelF,MAAOgH,EAAU1H,YAAY,EAAO4H,UAAU,EAAM7H,cAAc,KAAe4H,IAAY9H,OAAO2F,eAAiB3F,OAAO2F,eAAekC,EAAUC,GAAcD,EAASjC,UAAYkC,GAtBje9H,OAAOC,eAAepB,EAAS,cAC7BgC,OAAO,GAGT,IAAI0H,GAAe,WAAc,QAASC,GAAiBrB,EAAQsB,GAAS,IAAK,GAAIlJ,GAAI,EAAGA,EAAIkJ,EAAM7D,OAAQrF,IAAK,CAAE,GAAImJ,GAAaD,EAAMlJ,EAAImJ,GAAWvI,WAAauI,EAAWvI,aAAc,EAAOuI,EAAWxI,cAAe,EAAU,SAAWwI,KAAYA,EAAWX,UAAW,GAAM/H,OAAOC,eAAekH,EAAQuB,EAAW9B,IAAK8B,IAAiB,MAAO,UAAUlB,EAAamB,EAAYC,GAAiJ,MAA9HD,IAAYH,EAAiBhB,EAAY/G,UAAWkI,GAAiBC,GAAaJ,EAAiBhB,EAAaoB,GAAqBpB,MAE5hBqB,EAAO,QAASzI,GAAIG,EAAQC,EAAUsI,GAA2B,OAAXvI,IAAiBA,EAASwI,SAAStI,UAAW,IAAIuI,GAAOhJ,OAAOiJ,yBAAyB1I,EAAQC,EAAW,QAAa0H,KAATc,EAAoB,CAAE,GAAIZ,GAASpI,OAAOkJ,eAAe3I,EAAS,OAAe,QAAX6H,MAAmB,GAAkChI,EAAIgI,EAAQ5H,EAAUsI,GAAoB,GAAI,SAAWE,GAAQ,MAAOA,GAAKnI,KAAgB,IAAIf,GAASkJ,EAAK5I,GAAK,QAAe8H,KAAXpI,EAA4C,MAAOA,GAAOL,KAAKqJ,ImC7zK5dQ,EAAAlK,EAAA,GnCi0KImK,EAAclC,EAAuBiC,GmCh0KzCM,EAAAxK,EAAA,GnCo0KIyK,EAASxC,EAAuBuC,GmCl0K9B6uB,EAAa,SAGbp2B,EnC20KM,SAAUyH,GmC10KpB,QAAAzH,GAAYgB,GAAMiE,EAAApI,KAAAmD,EAAA,IAAA6D,GAAAwB,EAAAxI,MAAAmD,EAAAuD,WAAA5F,OAAAkJ,eAAA7G,IAAA5C,KAAAP,KACVmE,GADU,OAEhB6C,GAAKwyB,YAAc3mB,SAAS6F,cAAc,QAC1C1R,EAAKwyB,YAAY5iB,aAAa,mBAAmB,MAC9CjL,MAAMpL,KAAKyG,EAAK8D,QAAQqa,YAAY9e,QAAQ,SAACozB,GAC9CzyB,EAAKwyB,YAAY3X,YAAY4X,KAE/BzyB,EAAK0yB,UAAY7mB,SAASomB,eAAeM,GACzCvyB,EAAK2yB,WAAa9mB,SAASomB,eAAeM,GAC1CvyB,EAAK8D,QAAQ+W,YAAY7a,EAAK0yB,WAC9B1yB,EAAK8D,QAAQ+W,YAAY7a,EAAKwyB,aAC9BxyB,EAAK8D,QAAQ+W,YAAY7a,EAAK2yB,YAXd3yB,EnC65KlB,MAlFA0B,GAAUvF,EAAOyH,GAoBjBvB,EAAalG,IACXuE,IAAK,QACL/F,MAAO,SmCn1KHwC,EAAM2M,GACV,MAAI3M,KAASnE,KAAK05B,UAAkB,EAChCv1B,IAASnE,KAAK25B,WAAmB,EACrChwB,EAAAxG,EAAA5B,UAAAmF,WAAA5F,OAAAkJ,eAAA7G,EAAA5B,WAAA,QAAAvB,MAAAO,KAAAP,KAAmBmE,EAAM2M,MnCs1KzBpJ,IAAK,UACL/F,MAAO,SmCp1KDwC,GACN,GAAIoP,UAAOmY,SACPnf,EAAOpI,EAAKkoB,KAAKnnB,MAAMq0B,GAAYvpB,KAAK,GAC5C,IAAI7L,IAASnE,KAAK05B,UAChB,GAAI15B,KAAK8hB,eAALnX,GAAA3H,QAA+B,CACjC,GAAI42B,GAAa55B,KAAK8hB,KAAKpc,QAC3B1F,MAAK8hB,KAAKpW,SAASkuB,EAAYrtB,GAC/BgH,GACEuY,UAAW9rB,KAAK8hB,KAAKhX,QACrBihB,YAAa6N,EAAartB,EAAK7G,YAGjCgmB,GAAW7Y,SAASomB,eAAe1sB,GACnCvM,KAAKkJ,OAAOsC,aAAanB,EAAArH,QAAUL,OAAO+oB,GAAW1rB,MACrDuT,GACEuY,UAAWJ,EACXK,YAAaxf,EAAK7G,YAGbvB,KAASnE,KAAK25B,aACnB35B,KAAKyL,eAALd,GAAA3H,SACFhD,KAAKyL,KAAKC,SAAS,EAAGa,GACtBgH,GACEuY,UAAW9rB,KAAKyL,KAAKX,QACrBihB,YAAaxf,EAAK7G,UAGpBgmB,EAAW7Y,SAASomB,eAAe1sB,GACnCvM,KAAKkJ,OAAOsC,aAAanB,EAAArH,QAAUL,OAAO+oB,GAAW1rB,KAAKyL,MAC1D8H,GACEuY,UAAWJ,EACXK,YAAaxf,EAAK7G,SAKxB,OADAvB,GAAKkoB,KAAOkN,EACLhmB,KnCw1KP7L,IAAK,SACL/F,MAAO,SmCt1KF6V,EAAWzK,GAAS,GAAAjB,GAAA9L,IACzBwX,GAAUnR,QAAQ,SAACsgB,GACjB,GAAsB,kBAAlBA,EAASvP,OACRuP,EAAS1e,SAAW6D,EAAK4tB,WAAa/S,EAAS1e,SAAW6D,EAAK6tB,YAAa,CAC/E,GAAIpmB,GAAQzH,EAAKogB,QAAQvF,EAAS1e,OAC9BsL,KAAOxG,EAAQwG,MAAQA,UnC61K1BpQ,GmC95KWkH,EAAArH,QAAUG,MnCi6K9BxD,GAAQqD,QmCz1KOG,GnC61KT,SAAUvD,EAAQD,EAASO,GAEjC,YAGAY,QAAOC,eAAepB,EAAS,cAC7BgC,OAAO,IAEThC,EAAQk6B,WAAal6B,EAAQm6B,WAAan6B,EAAQo6B,mBAAiB/wB,EoCn7KnE,IAAAoB,GAAAlK,EAAA,GpCu7KImK,EAEJ,SAAgC9C,GAAO,MAAOA,IAAOA,EAAInG,WAAamG,GAAQvE,QAASuE,IAF9C6C,GoCr7KrCkI,GACF9N,MAAO6F,EAAArH,QAAUN,MAAMmC,MACvBkS,WAAY,QAAS,SAAU,YAG7BgjB,EAAiB,GAAI1vB,GAAArH,QAAUQ,WAAWC,UAAU,QAAS,QAAS6O,GACtEwnB,EAAa,GAAIzvB,GAAArH,QAAUQ,WAAWE,MAAM,QAAS,WAAY4O,GACjEunB,EAAa,GAAIxvB,GAAArH,QAAUQ,WAAWG,MAAM,QAAS,aAAc2O,EpC27KvE3S,GoCz7KSo6B,iBpC07KTp6B,EoC17KyBm6B,apC27KzBn6B,EoC37KqCk6B,cpC+7K/B,SAAUj6B,EAAQD,EAASO,GAEjC,YAGAY,QAAOC,eAAepB,EAAS,cAC7BgC,OAAO,IAEThC,EAAQq6B,gBAAkBr6B,EAAQs6B,oBAAkBjxB,EqCl9KpD,IAAAoB,GAAAlK,EAAA,GrCs9KImK,EAIJ,SAAgC9C,GAAO,MAAOA,IAAOA,EAAInG,WAAamG,GAAQvE,QAASuE,IAJ9C6C,GqCr9KzC8vB,EAAAh6B,EAAA,IAEI+5B,EAAkB,GAAI5vB,GAAArH,QAAUQ,WAAWE,MAAM,aAAc,SACjEc,MAAO6F,EAAArH,QAAUN,MAAMoC,SAErBk1B,EAAkB,GAAAE,GAAA7K,gBAAoB,aAAc,oBACtD7qB,MAAO6F,EAAArH,QAAUN,MAAMoC,QrC49KzBnF,GqCz9KSs6B,kBrC09KTt6B,EqC19K0Bq6B,mBrC89KpB,SAAUp6B,EAAQD,EAASO,GAEjC,YAGAY,QAAOC,eAAepB,EAAS,cAC7BgC,OAAO,IAEThC,EAAQw6B,eAAiBx6B,EAAQy6B,eAAiBz6B,EAAQ06B,uBAAqBrxB,EsCh/K/E,IAAAoB,GAAAlK,EAAA,GtCo/KImK,EAEJ,SAAgC9C,GAAO,MAAOA,IAAOA,EAAInG,WAAamG,GAAQvE,QAASuE,IAF9C6C,GsCl/KrCkI,GACF9N,MAAO6F,EAAArH,QAAUN,MAAMmC,MACvBkS,WAAY,QAGVsjB,EAAqB,GAAIhwB,GAAArH,QAAUQ,WAAWC,UAAU,YAAa,MAAO6O,GAC5E8nB,EAAiB,GAAI/vB,GAAArH,QAAUQ,WAAWE,MAAM,YAAa,eAAgB4O,GAC7E6nB,EAAiB,GAAI9vB,GAAArH,QAAUQ,WAAWG,MAAM,YAAa,YAAa2O,EtCw/K9E3S,GsCt/KS06B,qBtCu/KT16B,EsCv/K6By6B,iBtCw/K7Bz6B,EsCx/K6Cw6B,kBtC4/KvC,SAAUv6B,EAAQD,EAASO,GAEjC,YAkBA,SAASkI,GAAgBC,EAAUC,GAAe,KAAMD,YAAoBC,IAAgB,KAAM,IAAIC,WAAU,qCAEhH,QAASC,GAA2BzI,EAAMQ,GAAQ,IAAKR,EAAQ,KAAM,IAAI0I,gBAAe,4DAAgE,QAAOlI,GAAyB,gBAATA,IAAqC,kBAATA,GAA8BR,EAAPQ,EAElO,QAASmI,GAAUC,EAAUC,GAAc,GAA0B,kBAAfA,IAA4C,OAAfA,EAAuB,KAAM,IAAIL,WAAU,iEAAoEK,GAAeD,GAASpH,UAAYT,OAAO6B,OAAOiG,GAAcA,EAAWrH,WAAasF,aAAelF,MAAOgH,EAAU1H,YAAY,EAAO4H,UAAU,EAAM7H,cAAc,KAAe4H,IAAY9H,OAAO2F,eAAiB3F,OAAO2F,eAAekC,EAAUC,GAAcD,EAASjC,UAAYkC,GAnBje9H,OAAOC,eAAepB,EAAS,cAC7BgC,OAAO,IAEThC,EAAQ26B,UAAY36B,EAAQ46B,cAAYvxB,EAExC,IAAIK,GAAe,WAAc,QAASC,GAAiBrB,EAAQsB,GAAS,IAAK,GAAIlJ,GAAI,EAAGA,EAAIkJ,EAAM7D,OAAQrF,IAAK,CAAE,GAAImJ,GAAaD,EAAMlJ,EAAImJ,GAAWvI,WAAauI,EAAWvI,aAAc,EAAOuI,EAAWxI,cAAe,EAAU,SAAWwI,KAAYA,EAAWX,UAAW,GAAM/H,OAAOC,eAAekH,EAAQuB,EAAW9B,IAAK8B,IAAiB,MAAO,UAAUlB,EAAamB,EAAYC,GAAiJ,MAA9HD,IAAYH,EAAiBhB,EAAY/G,UAAWkI,GAAiBC,GAAaJ,EAAiBhB,EAAaoB,GAAqBpB,MAE5hBqB,EAAO,QAASzI,GAAIG,EAAQC,EAAUsI,GAA2B,OAAXvI,IAAiBA,EAASwI,SAAStI,UAAW,IAAIuI,GAAOhJ,OAAOiJ,yBAAyB1I,EAAQC,EAAW,QAAa0H,KAATc,EAAoB,CAAE,GAAIZ,GAASpI,OAAOkJ,eAAe3I,EAAS,OAAe,QAAX6H,MAAmB,GAAkChI,EAAIgI,EAAQ5H,EAAUsI,GAAoB,GAAI,SAAWE,GAAQ,MAAOA,GAAKnI,KAAgB,IAAIf,GAASkJ,EAAK5I,GAAK,QAAe8H,KAAXpI,EAA4C,MAAOA,GAAOL,KAAKqJ,IuCnhL5dQ,EAAAlK,EAAA,GvCuhLImK,EAEJ,SAAgC9C,GAAO,MAAOA,IAAOA,EAAInG,WAAamG,GAAQvE,QAASuE,IAF9C6C,GuCrhLrCkI,GACF9N,MAAO6F,EAAArH,QAAUN,MAAMoC,OACvBiS,WAAY,QAAS,cAGnBujB,EAAY,GAAIjwB,GAAArH,QAAUQ,WAAWE,MAAM,OAAQ,UAAW4O,GAE5DkoB,EvC+hLoB,SAAUlL,GAGlC,QAASkL,KAGP,MAFApyB,GAAgBpI,KAAMw6B,GAEfhyB,EAA2BxI,MAAOw6B,EAAoB9zB,WAAa5F,OAAOkJ,eAAewwB,IAAsB3vB,MAAM7K,KAAMyF,YAUpI,MAfAiD,GAAU8xB,EAAqBlL,GAQ/BjmB,EAAamxB,IACX9yB,IAAK,QACL/F,MAAO,SuCziLHwC,GACJ,MAAOwF,GAAA6wB,EAAAj5B,UAAAmF,WAAA5F,OAAAkJ,eAAAwwB,EAAAj5B,WAAA,QAAAvB,MAAAO,KAAAP,KAAYmE,GAAMib,QAAQ,QAAS,QvC6iLrCob,GuC/iLyBnwB,EAAArH,QAAUQ,WAAWG,OAMnD42B,EAAY,GAAIC,GAAoB,OAAQ,cAAeloB,EvC8iL/D3S,GuC5iLS46B,YvC6iLT56B,EuC7iLoB26B,avCijLd,SAAU16B,EAAQD,EAASO,GAEjC,YAGAY,QAAOC,eAAepB,EAAS,cAC7BgC,OAAO,IAEThC,EAAQ86B,UAAY96B,EAAQ+6B,cAAY1xB,EwC1kLxC,IAAAoB,GAAAlK,EAAA,GxC8kLImK,EAEJ,SAAgC9C,GAAO,MAAOA,IAAOA,EAAInG,WAAamG,GAAQvE,QAASuE,IAF9C6C,GwC5kLrCswB,EAAY,GAAIrwB,GAAArH,QAAUQ,WAAWE,MAAM,OAAQ,WACrDc,MAAO6F,EAAArH,QAAUN,MAAMoC,OACvBiS,WAAY,QAAS,QAAS,UAE5B0jB,EAAY,GAAIpwB,GAAArH,QAAUQ,WAAWG,MAAM,OAAQ,aACrDa,MAAO6F,EAAArH,QAAUN,MAAMoC,OACvBiS,WAAY,OAAQ,OAAQ,SxCmlL9BpX,GwChlLS+6B,YxCilLT/6B,EwCjlLoB86B,axCqlLd,SAAU76B,EAAQD,EAASO,GAEjC,YAiBA,SAASkI,GAAgBC,EAAUC,GAAe,KAAMD,YAAoBC,IAAgB,KAAM,IAAIC,WAAU,qCAEhH,QAASC,GAA2BzI,EAAMQ,GAAQ,IAAKR,EAAQ,KAAM,IAAI0I,gBAAe,4DAAgE,QAAOlI,GAAyB,gBAATA,IAAqC,kBAATA,GAA8BR,EAAPQ,EAElO,QAASmI,GAAUC,EAAUC,GAAc,GAA0B,kBAAfA,IAA4C,OAAfA,EAAuB,KAAM,IAAIL,WAAU,iEAAoEK,GAAeD,GAASpH,UAAYT,OAAO6B,OAAOiG,GAAcA,EAAWrH,WAAasF,aAAelF,MAAOgH,EAAU1H,YAAY,EAAO4H,UAAU,EAAM7H,cAAc,KAAe4H,IAAY9H,OAAO2F,eAAiB3F,OAAO2F,eAAekC,EAAUC,GAAcD,EAASjC,UAAYkC,GAlBje9H,OAAOC,eAAepB,EAAS,cAC7BgC,OAAO,GAGT,IAAI0H,GAAe,WAAc,QAASC,GAAiBrB,EAAQsB,GAAS,IAAK,GAAIlJ,GAAI,EAAGA,EAAIkJ,EAAM7D,OAAQrF,IAAK,CAAE,GAAImJ,GAAaD,EAAMlJ,EAAImJ,GAAWvI,WAAauI,EAAWvI,aAAc,EAAOuI,EAAWxI,cAAe,EAAU,SAAWwI,KAAYA,EAAWX,UAAW,GAAM/H,OAAOC,eAAekH,EAAQuB,EAAW9B,IAAK8B,IAAiB,MAAO,UAAUlB,EAAamB,EAAYC,GAAiJ,MAA9HD,IAAYH,EAAiBhB,EAAY/G,UAAWkI,GAAiBC,GAAaJ,EAAiBhB,EAAaoB,GAAqBpB,MAE5hBqB,EAAO,QAASzI,GAAIG,EAAQC,EAAUsI,GAA2B,OAAXvI,IAAiBA,EAASwI,SAAStI,UAAW,IAAIuI,GAAOhJ,OAAOiJ,yBAAyB1I,EAAQC,EAAW,QAAa0H,KAATc,EAAoB,CAAE,GAAIZ,GAASpI,OAAOkJ,eAAe3I,EAAS,OAAe,QAAX6H,MAAmB,GAAkChI,EAAIgI,EAAQ5H,EAAUsI,GAAoB,GAAI,SAAWE,GAAQ,MAAOA,GAAKnI,KAAgB,IAAIf,GAASkJ,EAAK5I,GAAK,QAAe8H,KAAXpI,EAA4C,MAAOA,GAAOL,KAAKqJ,IyC3mL5dY,EAAAtK,EAAA,GzC+mLIuK,EAEJ,SAAgClD,GAAO,MAAOA,IAAOA,EAAInG,WAAamG,GAAQvE,QAASuE,IAFjDiD,GyC7mLhCmwB,EzCunLK,SAAUha,GAGnB,QAASga,KAGP,MAFAvyB,GAAgBpI,KAAM26B,GAEfnyB,EAA2BxI,MAAO26B,EAAKj0B,WAAa5F,OAAOkJ,eAAe2wB,IAAO9vB,MAAM7K,KAAMyF,YAuBtG,MA5BAiD,GAAUiyB,EAAMha,GAQhBtX,EAAasxB,IACXjzB,IAAK,WACL/F,MAAO,SyCznLAoL,GACPpD,EAAAgxB,EAAAp5B,UAAAmF,WAAA5F,OAAAkJ,eAAA2wB,EAAAp5B,WAAA,WAAAvB,MAAAO,KAAAP,KAAe+M,GACX/M,KAAK8K,QAAQzF,UAAYrF,KAAKmJ,QAAQ9D,QAAQ,IAChDrF,KAAKmnB,YAAYnnB,KAAKmJ,QAAQtD,ezC6nLhC6B,IAAK,SACL/F,MAAO,WyCxoLP,MAAAgI,GAAAgxB,EAAAj0B,WAAA5F,OAAAkJ,eAAA2wB,GAAA,SAAA36B,MAAAO,KAAAP,SzC4oLA0H,IAAK,UACL/F,MAAO,WyCzoLP,OAAO,MzC8oLFg5B,GACPlwB,EAASzH,QyCroLX23B,GAAK90B,SAAW,OAChB80B,EAAKt1B,SAAW,SAAU,KzCyoL1B1F,EAAQqD,QyCvoLO23B,GzC2oLT,SAAU/6B,EAAQD,G0ChqLxBC,EAAAD,QAAA,uO1CsqLM,SAAUC,EAAQD,EAASO,GAEjC,YAiBA,SAASkI,GAAgBC,EAAUC,GAAe,KAAMD,YAAoBC,IAAgB,KAAM,IAAIC,WAAU,qCAEhH,QAASC,GAA2BzI,EAAMQ,GAAQ,IAAKR,EAAQ,KAAM,IAAI0I,gBAAe,4DAAgE,QAAOlI,GAAyB,gBAATA,IAAqC,kBAATA,GAA8BR,EAAPQ,EAElO,QAASmI,GAAUC,EAAUC,GAAc,GAA0B,kBAAfA,IAA4C,OAAfA,EAAuB,KAAM,IAAIL,WAAU,iEAAoEK,GAAeD,GAASpH,UAAYT,OAAO6B,OAAOiG,GAAcA,EAAWrH,WAAasF,aAAelF,MAAOgH,EAAU1H,YAAY,EAAO4H,UAAU,EAAM7H,cAAc,KAAe4H,IAAY9H,OAAO2F,eAAiB3F,OAAO2F,eAAekC,EAAUC,GAAcD,EAASjC,UAAYkC,GAlBje9H,OAAOC,eAAepB,EAAS,cAC7BgC,OAAO,GAGT,IAAI0H,GAAe,WAAc,QAASC,GAAiBrB,EAAQsB,GAAS,IAAK,GAAIlJ,GAAI,EAAGA,EAAIkJ,EAAM7D,OAAQrF,IAAK,CAAE,GAAImJ,GAAaD,EAAMlJ,EAAImJ,GAAWvI,WAAauI,EAAWvI,aAAc,EAAOuI,EAAWxI,cAAe,EAAU,SAAWwI,KAAYA,EAAWX,UAAW,GAAM/H,OAAOC,eAAekH,EAAQuB,EAAW9B,IAAK8B,IAAiB,MAAO,UAAUlB,EAAamB,EAAYC,GAAiJ,MAA9HD,IAAYH,EAAiBhB,EAAY/G,UAAWkI,GAAiBC,GAAaJ,EAAiBhB,EAAaoB,GAAqBpB,MAE5hBqB,EAAO,QAASzI,GAAIG,EAAQC,EAAUsI,GAA2B,OAAXvI,IAAiBA,EAASwI,SAAStI,UAAW,IAAIuI,GAAOhJ,OAAOiJ,yBAAyB1I,EAAQC,EAAW,QAAa0H,KAATc,EAAoB,CAAE,GAAIZ,GAASpI,OAAOkJ,eAAe3I,EAAS,OAAe,QAAX6H,MAAmB,GAAkChI,EAAIgI,EAAQ5H,EAAUsI,GAAoB,GAAI,SAAWE,GAAQ,MAAOA,GAAKnI,KAAgB,IAAIf,GAASkJ,EAAK5I,GAAK,QAAe8H,KAAXpI,EAA4C,MAAOA,GAAOL,KAAKqJ,I2CjrL5dgxB,EAAA16B,EAAA,I3CqrLI26B,EAEJ,SAAgCtzB,GAAO,MAAOA,IAAOA,EAAInG,WAAamG,GAAQvE,QAASuE,IAFjDqzB,G2ClrLhCE,E3C4rLY,SAAUC,G2C3rL1B,QAAAD,GAAYzX,EAAQI,GAAOrb,EAAApI,KAAA86B,EAAA,IAAA9zB,GAAAwB,EAAAxI,MAAA86B,EAAAp0B,WAAA5F,OAAAkJ,eAAA8wB,IAAAv6B,KAAAP,KACnBqjB,GADmB,OAEzBrc,GAAKyc,MAAMnN,UAAYmN,EACvBzc,EAAK2K,UAAU6E,UAAUC,IAAI,sBAC1B9K,MAAMpL,KAAKyG,EAAK2K,UAAU6L,iBAAiB,mBAAoB,EAAG,GAAGnX,QAAQ,SAAS6Y,GACvFA,EAAK1I,UAAUC,IAAI,gBALIzP,E3CkuL3B,MAtCA0B,GAAUoyB,EAAaC,GAevB1xB,EAAayxB,IACXpzB,IAAK,YACL/F,MAAO,S2CpsLCqiB,GACR,GAAI9E,2FAAuB8E,EAE3B,OADA9E,GAAKqE,MAAMyX,gBAAkBhX,EAAO/e,aAAa,UAAY,GACtDia,K3CusLPxX,IAAK,aACL/F,MAAO,S2CrsLEud,EAAMyF,GACfhb,EAAAmxB,EAAAv5B,UAAAmF,WAAA5F,OAAAkJ,eAAA8wB,EAAAv5B,WAAA,aAAAvB,MAAAO,KAAAP,KAAiBkf,EAAMyF,EACvB,IAAIsW,GAAaj7B,KAAKyjB,MAAM3Q,cAAc,mBACtCnR,EAAQud,EAAOA,EAAKja,aAAa,eAAiB,GAAK,EACvDg2B,KACyB,SAAvBA,EAAW51B,QACb41B,EAAW1X,MAAM2X,OAASv5B,EAE1Bs5B,EAAW1X,MAAM4X,KAAOx5B,O3C2sLvBm5B,GACPD,EAAS73B,QAEXrD,GAAQqD,Q2CvsLO83B,G3C2sLT,SAAUl7B,EAAQD,EAASO,GAEjC,YAiBA,SAASkI,GAAgBC,EAAUC,GAAe,KAAMD,YAAoBC,IAAgB,KAAM,IAAIC,WAAU,qCAEhH,QAASC,GAA2BzI,EAAMQ,GAAQ,IAAKR,EAAQ,KAAM,IAAI0I,gBAAe,4DAAgE,QAAOlI,GAAyB,gBAATA,IAAqC,kBAATA,GAA8BR,EAAPQ,EAElO,QAASmI,GAAUC,EAAUC,GAAc,GAA0B,kBAAfA,IAA4C,OAAfA,EAAuB,KAAM,IAAIL,WAAU,iEAAoEK,GAAeD,GAASpH,UAAYT,OAAO6B,OAAOiG,GAAcA,EAAWrH,WAAasF,aAAelF,MAAOgH,EAAU1H,YAAY,EAAO4H,UAAU,EAAM7H,cAAc,KAAe4H,IAAY9H,OAAO2F,eAAiB3F,OAAO2F,eAAekC,EAAUC,GAAcD,EAASjC,UAAYkC,GAlBje9H,OAAOC,eAAepB,EAAS,cAC7BgC,OAAO,GAGT,IAAI0H,GAAe,WAAc,QAASC,GAAiBrB,EAAQsB,GAAS,IAAK,GAAIlJ,GAAI,EAAGA,EAAIkJ,EAAM7D,OAAQrF,IAAK,CAAE,GAAImJ,GAAaD,EAAMlJ,EAAImJ,GAAWvI,WAAauI,EAAWvI,aAAc,EAAOuI,EAAWxI,cAAe,EAAU,SAAWwI,KAAYA,EAAWX,UAAW,GAAM/H,OAAOC,eAAekH,EAAQuB,EAAW9B,IAAK8B,IAAiB,MAAO,UAAUlB,EAAamB,EAAYC,GAAiJ,MAA9HD,IAAYH,EAAiBhB,EAAY/G,UAAWkI,GAAiBC,GAAaJ,EAAiBhB,EAAaoB,GAAqBpB,MAE5hBqB,EAAO,QAASzI,GAAIG,EAAQC,EAAUsI,GAA2B,OAAXvI,IAAiBA,EAASwI,SAAStI,UAAW,IAAIuI,GAAOhJ,OAAOiJ,yBAAyB1I,EAAQC,EAAW,QAAa0H,KAATc,EAAoB,CAAE,GAAIZ,GAASpI,OAAOkJ,eAAe3I,EAAS,OAAe,QAAX6H,MAAmB,GAAkChI,EAAIgI,EAAQ5H,EAAUsI,GAAoB,GAAI,SAAWE,GAAQ,MAAOA,GAAKnI,KAAgB,IAAIf,GAASkJ,EAAK5I,GAAK,QAAe8H,KAAXpI,EAA4C,MAAOA,GAAOL,KAAKqJ,I4CxvL5dgxB,EAAA16B,EAAA,I5C4vLI26B,EAEJ,SAAgCtzB,GAAO,MAAOA,IAAOA,EAAInG,WAAamG,GAAQvE,QAASuE,IAFjDqzB,G4CzvLhCQ,E5CmwLW,SAAUL,G4ClwLzB,QAAAK,GAAY/X,EAAQgY,GAAOjzB,EAAApI,KAAAo7B,EAAA,IAAAp0B,GAAAwB,EAAAxI,MAAAo7B,EAAA10B,WAAA5F,OAAAkJ,eAAAoxB,IAAA76B,KAAAP,KACnBqjB,GADmB,OAEzBrc,GAAK2K,UAAU6E,UAAUC,IAAI,qBAC1BpQ,QAAQ9F,KAAKyG,EAAK2K,UAAU6L,iBAAiB,mBAAoB,SAAC0B,GACnEA,EAAK5I,UAAY+kB,EAAMnc,EAAKja,aAAa,eAAiB,MAE5D+B,EAAKs0B,YAAct0B,EAAK2K,UAAUmB,cAAc,gBAChD9L,EAAKmd,WAAWnd,EAAKs0B,aAPIt0B,E5C4xL3B,MAzBA0B,GAAU0yB,EAAYL,GAgBtB1xB,EAAa+xB,IACX1zB,IAAK,aACL/F,MAAO,S4C3wLEud,EAAMyF,GACfhb,EAAAyxB,EAAA75B,UAAAmF,WAAA5F,OAAAkJ,eAAAoxB,EAAA75B,WAAA,aAAAvB,MAAAO,KAAAP,KAAiBkf,EAAMyF,GACvBzF,EAAOA,GAAQlf,KAAKs7B,YACpBt7B,KAAKyjB,MAAMnN,UAAY4I,EAAK5I,c5C+wLvB8kB,GACPP,EAAS73B,QAEXrD,GAAQqD,Q4C7wLOo4B,G5CixLT,SAAUx7B,EAAQD,EAASO,GAEjC,YASA,SAASkI,GAAgBC,EAAUC,GAAe,KAAMD,YAAoBC,IAAgB,KAAM,IAAIC,WAAU,qCANhHzH,OAAOC,eAAepB,EAAS,cAC7BgC,OAAO,GAGT,IAAI0H,GAAe,WAAc,QAASC,GAAiBrB,EAAQsB,GAAS,IAAK,GAAIlJ,GAAI,EAAGA,EAAIkJ,EAAM7D,OAAQrF,IAAK,CAAE,GAAImJ,GAAaD,EAAMlJ,EAAImJ,GAAWvI,WAAauI,EAAWvI,aAAc,EAAOuI,EAAWxI,cAAe,EAAU,SAAWwI,KAAYA,EAAWX,UAAW,GAAM/H,OAAOC,eAAekH,EAAQuB,EAAW9B,IAAK8B,IAAiB,MAAO,UAAUlB,EAAamB,EAAYC,GAAiJ,MAA9HD,IAAYH,EAAiBhB,EAAY/G,UAAWkI,GAAiBC,GAAaJ,EAAiBhB,EAAaoB,GAAqBpB,M6ChzL1hBizB,E7CozLQ,W6CnzLZ,QAAAA,GAAYxe,EAAOye,GAAiB,GAAAx0B,GAAAhH,IAAAoI,GAAApI,KAAAu7B,GAClCv7B,KAAK+c,MAAQA,EACb/c,KAAKw7B,gBAAkBA,GAAmB3oB,SAAS+T,KACnD5mB,KAAKP,KAAOsd,EAAMpG,aAAa,cAC/B3W,KAAKP,KAAK6W,UAAYtW,KAAK6G,YAAY40B,SACnCz7B,KAAK+c,MAAMtd,OAASO,KAAK+c,MAAMlG,oBACjC7W,KAAK+c,MAAMtd,KAAK4d,iBAAiB,SAAU,WACzCrW,EAAKvH,KAAK8jB,MAAMmY,WAAc,EAAE10B,EAAK+V,MAAMtd,KAAKyZ,UAAa,OAGjElZ,KAAK27B,O7Co2LP,MAzCAtyB,GAAakyB,IACX7zB,IAAK,OACL/F,MAAO,W6CzzLP3B,KAAKP,KAAK+W,UAAUC,IAAI,gB7C6zLxB/O,IAAK,WACL/F,MAAO,S6C3zLAi6B,GACP,GAAIvhB,GAAOuhB,EAAUvhB,KAAOuhB,EAAUrhB,MAAM,EAAIva,KAAKP,KAAKo8B,YAAY,EAElE1hB,EAAMyhB,EAAU1hB,OAASla,KAAK+c,MAAMtd,KAAKyZ,SAC7ClZ,MAAKP,KAAK8jB,MAAMlJ,KAAOA,EAAO,KAC9Bra,KAAKP,KAAK8jB,MAAMpJ,IAAMA,EAAM,KAC5Bna,KAAKP,KAAK+W,UAAU1J,OAAO,UAC3B,IAAIkN,GAAkBha,KAAKw7B,gBAAgBvhB,wBACvC6hB,EAAa97B,KAAKP,KAAKwa,wBACvBzN,EAAQ,CASZ,IARIsvB,EAAWxhB,MAAQN,EAAgBM,QACrC9N,EAAQwN,EAAgBM,MAAQwhB,EAAWxhB,MAC3Cta,KAAKP,KAAK8jB,MAAMlJ,KAAQA,EAAO7N,EAAS,MAEtCsvB,EAAWzhB,KAAOL,EAAgBK,OACpC7N,EAAQwN,EAAgBK,KAAOyhB,EAAWzhB,KAC1Cra,KAAKP,KAAK8jB,MAAMlJ,KAAQA,EAAO7N,EAAS,MAEtCsvB,EAAW5hB,OAASF,EAAgBE,OAAQ,CAC9C,GAAIE,GAAS0hB,EAAW5hB,OAAS4hB,EAAW3hB,IACxC4hB,EAAgBH,EAAU1hB,OAAS0hB,EAAUzhB,IAAMC,CACvDpa,MAAKP,KAAK8jB,MAAMpJ,IAAOA,EAAM4hB,EAAiB,KAC9C/7B,KAAKP,KAAK+W,UAAUC,IAAI,WAE1B,MAAOjK,M7C8zLP9E,IAAK,OACL/F,MAAO,W6C3zLP3B,KAAKP,KAAK+W,UAAU1J,OAAO,cAC3B9M,KAAKP,KAAK+W,UAAU1J,OAAO,iB7Cg0LtByuB,IAGT57B,GAAQqD,Q6C9zLOu4B,G7Ck0LT,SAAU37B,EAAQD,EAASO,GAEjC,YAgDA,SAASiI,GAAuBZ,GAAO,MAAOA,IAAOA,EAAInG,WAAamG,GAAQvE,QAASuE,GAEvF,QAASa,GAAgBC,EAAUC,GAAe,KAAMD,YAAoBC,IAAgB,KAAM,IAAIC,WAAU,qCAEhH,QAASC,GAA2BzI,EAAMQ,GAAQ,IAAKR,EAAQ,KAAM,IAAI0I,gBAAe,4DAAgE,QAAOlI,GAAyB,gBAATA,IAAqC,kBAATA,GAA8BR,EAAPQ,EAElO,QAASmI,GAAUC,EAAUC,GAAc,GAA0B,kBAAfA,IAA4C,OAAfA,EAAuB,KAAM,IAAIL,WAAU,iEAAoEK,GAAeD,GAASpH,UAAYT,OAAO6B,OAAOiG,GAAcA,EAAWrH,WAAasF,aAAelF,MAAOgH,EAAU1H,YAAY,EAAO4H,UAAU,EAAM7H,cAAc,KAAe4H,IAAY9H,OAAO2F,eAAiB3F,OAAO2F,eAAekC,EAAUC,GAAcD,EAASjC,UAAYkC,G8ChsLje,QAASozB,GAAgB3Z,GACvB,GAAIve,GAAQue,EAAIve,MAAM,+EACVue,EAAIve,MAAM,iEACtB,OAAIA,IACMA,EAAM,IAAM,SAAW,4BAA8BA,EAAM,GAAK,eAEtEA,EAAQue,EAAIve,MAAM,oDACZA,EAAM,IAAM,SAAW,6BAA+BA,EAAM,GAAK,IAEpEue,EAGT,QAAS4Z,GAAW5Y,EAAQrY,GAA8B,GAAtBkxB,GAAsBz2B,UAAAC,OAAA,OAAAsD,KAAAvD,UAAA,IAAAA,UAAA,EACxDuF,GAAO3E,QAAQ,SAAS1E,GACtB,GAAIqiB,GAASnR,SAAS6F,cAAc,SAChC/W,KAAUu6B,EACZlY,EAAOpN,aAAa,WAAY,YAEhCoN,EAAOpN,aAAa,QAASjV,GAE/B0hB,EAAOxB,YAAYmC,K9CynLvBljB,OAAOC,eAAepB,EAAS,cAC7BgC,OAAO,IAEThC,EAAQqD,QAAUrD,EAAQw8B,gBAAcnzB,EAExC,IAAIK,GAAe,WAAc,QAASC,GAAiBrB,EAAQsB,GAAS,IAAK,GAAIlJ,GAAI,EAAGA,EAAIkJ,EAAM7D,OAAQrF,IAAK,CAAE,GAAImJ,GAAaD,EAAMlJ,EAAImJ,GAAWvI,WAAauI,EAAWvI,aAAc,EAAOuI,EAAWxI,cAAe,EAAU,SAAWwI,KAAYA,EAAWX,UAAW,GAAM/H,OAAOC,eAAekH,EAAQuB,EAAW9B,IAAK8B,IAAiB,MAAO,UAAUlB,EAAamB,EAAYC,GAAiJ,MAA9HD,IAAYH,EAAiBhB,EAAY/G,UAAWkI,GAAiBC,GAAaJ,EAAiBhB,EAAaoB,GAAqBpB,MAE5hBqB,EAAO,QAASzI,GAAIG,EAAQC,EAAUsI,GAA2B,OAAXvI,IAAiBA,EAASwI,SAAStI,UAAW,IAAIuI,GAAOhJ,OAAOiJ,yBAAyB1I,EAAQC,EAAW,QAAa0H,KAATc,EAAoB,CAAE,GAAIZ,GAASpI,OAAOkJ,eAAe3I,EAAS,OAAe,QAAX6H,MAAmB,GAAkChI,EAAIgI,EAAQ5H,EAAUsI,GAAoB,GAAI,SAAWE,GAAQ,MAAOA,GAAKnI,KAAgB,IAAIf,GAASkJ,EAAK5I,GAAK,QAAe8H,KAAXpI,EAA4C,MAAOA,GAAOL,KAAKqJ,I8Cl4L5dK,EAAA/J,EAAA,G9Cs4LI+I,EAAWd,EAAuB8B,G8Cr4LtCC,EAAAhK,EAAA,G9Cy4LIiK,EAAehC,EAAuB+B,G8Cx4L1C6J,EAAA7T,EAAA,G9C44LIoU,EAAYnM,EAAuB4L,G8C34LvCgP,EAAA7iB,EAAA,I9C+4LI8iB,EAAa7a,EAAuB4a,G8C94LxC3M,EAAAlW,EAAA,I9Ck5LIkS,EAAUjK,EAAuBiO,G8Cj5LrCgmB,EAAAl8B,EAAA,I9Cq5LIm8B,EAAgBl0B,EAAuBi0B,G8Cp5L3CE,EAAAp8B,EAAA,I9Cw5LIq8B,EAAep0B,EAAuBm0B,G8Cv5L1C1B,EAAA16B,EAAA,I9C25LI26B,EAAW1yB,EAAuByyB,G8C15LtC4B,EAAAt8B,EAAA,I9C85LIu8B,EAAYt0B,EAAuBq0B,G8C35LjCE,IAAW,EAAO,SAAU,QAAS,WAErCC,GACJ,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAClE,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAClE,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAClE,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAClE,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,WAG9DC,IAAU,EAAO,QAAS,aAE1BC,GAAY,IAAK,IAAK,KAAK,GAE3BC,GAAU,SAAS,EAAO,QAAS,QAGnCC,E9C85LU,SAAUC,G8C75LxB,QAAAD,GAAYhgB,EAAOnV,GAASQ,EAAApI,KAAA+8B,EAAA,IAAA/1B,GAAAwB,EAAAxI,MAAA+8B,EAAAr2B,WAAA5F,OAAAkJ,eAAA+yB,IAAAx8B,KAAAP,KACpB+c,EAAOnV,IACTq1B,EAAW,QAAXA,GAAY/c,GACd,IAAKrN,SAAS+T,KAAKjL,SAASoB,EAAMtd,MAChC,MAAOoT,UAAS+T,KAAKsW,oBAAoB,QAASD,EAEhC,OAAhBj2B,EAAKm2B,SAAoBn2B,EAAKm2B,QAAQ19B,KAAKkc,SAASuE,EAAEjY,SACtD4K,SAAS6a,gBAAkB1mB,EAAKm2B,QAAQC,SAAYp2B,EAAK+V,MAAM5B,YACjEnU,EAAKm2B,QAAQxB,OAEK,MAAhB30B,EAAKq2B,SACPr2B,EAAKq2B,QAAQh3B,QAAQ,SAASi3B,GACvBA,EAAO3rB,UAAUgK,SAASuE,EAAEjY,SAC/Bq1B,EAAO7Y,UAbW,OAkB1B1H,GAAM5I,QAAQoX,UAAU,QAAS1Y,SAAS+T,KAAMqW,GAlBtBj2B,E9C8/L5B,MAhGA0B,GAAUq0B,EAAWC,GA0BrB3zB,EAAa0zB,IACXr1B,IAAK,YACL/F,MAAO,S8Cr6LChB,GACR,GAAIf,2FAAyBe,EAI7B,OAHa,YAATA,GACFX,KAAKu9B,cAAc39B,GAEdA,K9Cw6LP8H,IAAK,eACL/F,MAAO,S8Ct6LI67B,EAASnC,GACpBmC,EAAQn3B,QAAQ,SAACo3B,IACCA,EAAOx4B,aAAa,UAAY,IACtCC,MAAM,OAAOmB,QAAQ,SAAC1F,GAC9B,GAAKA,EAAK6X,WAAW,SACrB7X,EAAOA,EAAKgL,MAAM,MAAMjG,QACL,MAAf21B,EAAM16B,IACV,GAAa,cAATA,EACF88B,EAAOnnB,UAAY+kB,EAAM16B,GAAM,IAAM06B,EAAM16B,GAAN,QAChC,IAA2B,gBAAhB06B,GAAM16B,GACtB88B,EAAOnnB,UAAY+kB,EAAM16B,OACpB,CACL,GAAIgB,GAAQ87B,EAAO97B,OAAS,EACf,OAATA,GAAiB05B,EAAM16B,GAAMgB,KAC/B87B,EAAOnnB,UAAY+kB,EAAM16B,GAAMgB,Y9C66LvC+F,IAAK,eACL/F,MAAO,S8Cv6LI+7B,EAASrC,GAAO,GAAAvvB,GAAA9L,IAC3BA,MAAKq9B,QAAUK,EAAQ/3B,IAAI,SAAC0d,GAC1B,GAAIA,EAAO7M,UAAUmF,SAAS,YAI5B,MAHsC,OAAlC0H,EAAOvQ,cAAc,WACvBmpB,EAAW5Y,EAAQqZ,GAEd,GAAAH,GAAAv5B,QAAeqgB,EAAQgY,EAAM/E,MAC/B,IAAIjT,EAAO7M,UAAUmF,SAAS,kBAAoB0H,EAAO7M,UAAUmF,SAAS,YAAa,CAC9F,GAAIvQ,GAASiY,EAAO7M,UAAUmF,SAAS,iBAAmB,aAAe,OAIzE,OAHsC,OAAlC0H,EAAOvQ,cAAc,WACvBmpB,EAAW5Y,EAAQsZ,EAAmB,eAAXvxB,EAA0B,UAAY,WAE5D,GAAAixB,GAAAr5B,QAAgBqgB,EAAQgY,EAAMjwB,IAWrC,MATsC,OAAlCiY,EAAOvQ,cAAc,YACnBuQ,EAAO7M,UAAUmF,SAAS,WAC5BsgB,EAAW5Y,EAAQuZ,GACVvZ,EAAO7M,UAAUmF,SAAS,aACnCsgB,EAAW5Y,EAAQwZ,GACVxZ,EAAO7M,UAAUmF,SAAS,YACnCsgB,EAAW5Y,EAAQyZ,IAGhB,GAAAjC,GAAA73B,QAAWqgB,IAGtB,IAAI3L,GAAS,WACX5L,EAAKuxB,QAAQh3B,QAAQ,SAASi3B,GAC5BA,EAAO5lB,WAGX1X,MAAK+c,MAAM5F,GAAG7C,EAAAtR,QAAQiR,OAAOI,cAAeqD,O9C66LvCqlB,GACP3qB,EAAQpP,Q8C36LV+5B,GAAU7qB,UAAW,EAAAjJ,EAAAjG,UAAO,KAAUoP,EAAApP,QAAMkP,UAC1CjS,SACE2S,SACE+qB,UACExG,QAAS,WACPn3B,KAAK+c,MAAM/K,MAAMmrB,QAAQS,KAAK,YAEhCtG,MAAO,WAAW,GAAA1e,GAAA5Y,KACZ69B,EAAY79B,KAAK2R,UAAUmB,cAAc,4BAC5B,OAAb+qB,IACFA,EAAYhrB,SAAS6F,cAAc,SACnCmlB,EAAUjnB,aAAa,OAAQ,QAC/BinB,EAAUjnB,aAAa,SAAU,6DACjCinB,EAAUrnB,UAAUC,IAAI,YACxBonB,EAAUxgB,iBAAiB,SAAU,WACnC,GAAuB,MAAnBwgB,EAAUC,OAAuC,MAAtBD,EAAUC,MAAM,GAAY,CACzD,GAAIC,GAAS,GAAIC,WACjBD,GAAOE,OAAS,SAAC/d,GACf,GAAI3M,GAAQqF,EAAKmE,MAAMvJ,cAAa,EACpCoF,GAAKmE,MAAMoY,gBAAe,GAAAhrB,GAAAnH,SACvBgL,OAAOuF,EAAMpI,OACb4C,OAAOwF,EAAM7N,QACbqF,QAASusB,MAAOpX,EAAEjY,OAAOywB,SAC1BpkB,EAAAtR,QAAQqQ,QAAQC,MAClBsF,EAAKmE,MAAMlJ,aAAaN,EAAMpI,MAAQ,EAAGmJ,EAAAtR,QAAQqQ,QAAQS,QACzD+pB,EAAUl8B,MAAQ,IAEpBo8B,EAAOG,cAAcL,EAAUC,MAAM,OAGzC99B,KAAK2R,UAAUkQ,YAAYgc,IAE7BA,EAAUM,SAEZlG,MAAO,WACLj4B,KAAK+c,MAAM/K,MAAMmrB,QAAQS,KAAK,c9Ck7LxC,I8C16LMzB,G9C06LY,SAAUiC,G8Cz6L1B,QAAAjC,GAAYpf,EAAOye,GAAiBpzB,EAAApI,KAAAm8B,EAAA,IAAA9iB,GAAA7Q,EAAAxI,MAAAm8B,EAAAz1B,WAAA5F,OAAAkJ,eAAAmyB,IAAA57B,KAAAP,KAC5B+c,EAAOye,GADqB,OAElCniB,GAAK+jB,QAAU/jB,EAAK5Z,KAAKqT,cAAc,sBACvCuG,EAAK+Z,SAH6B/Z,E9C8gMpC,MApGA3Q,GAAUyzB,EAAaiC,GAYvB/0B,EAAa8yB,IACXz0B,IAAK,SACL/F,MAAO,W8Cl7LA,GAAA6X,GAAAxZ,IACPA,MAAKo9B,QAAQ/f,iBAAiB,UAAW,SAACU,GACpCiF,EAAAhgB,QAASc,MAAMia,EAAO,UACxBvE,EAAK6kB,OACLtgB,EAAMgG,kBACGf,EAAAhgB,QAASc,MAAMia,EAAO,YAC/BvE,EAAK8kB,SACLvgB,EAAMgG,uB9Cy7LVrc,IAAK,SACL/F,MAAO,W8Cp7LP3B,KAAK27B,U9Cw7LLj0B,IAAK,OACL/F,MAAO,W8Ct7L2B,GAA/B48B,GAA+B94B,UAAAC,OAAA,OAAAsD,KAAAvD,UAAA,GAAAA,UAAA,GAAxB,OAAQ+4B,EAAgB/4B,UAAAC,OAAA,OAAAsD,KAAAvD,UAAA,GAAAA,UAAA,GAAN,IAC5BzF,MAAKP,KAAK+W,UAAU1J,OAAO,aAC3B9M,KAAKP,KAAK+W,UAAUC,IAAI,cACT,MAAX+nB,EACFx+B,KAAKo9B,QAAQz7B,MAAQ68B,EACZD,IAASv+B,KAAKP,KAAKwF,aAAa,eACzCjF,KAAKo9B,QAAQz7B,MAAQ,IAEvB3B,KAAKumB,SAASvmB,KAAK+c,MAAMhD,UAAU/Z,KAAK+c,MAAM/F,UAAUoU,aACxDprB,KAAKo9B,QAAQ/Z,SACbrjB,KAAKo9B,QAAQxmB,aAAa,cAAe5W,KAAKo9B,QAAQn4B,aAAb,QAAkCs5B,IAAW,IACtFv+B,KAAKP,KAAKmX,aAAa,YAAa2nB,M9C47LpC72B,IAAK,eACL/F,MAAO,W8Cz7LP,GAAIuX,GAAYlZ,KAAK+c,MAAMlG,mBAAmBqC,SAC9ClZ,MAAK+c,MAAM5D,QACXnZ,KAAK+c,MAAMlG,mBAAmBqC,UAAYA,K9C67L1CxR,IAAK,OACL/F,MAAO,W8C17LP,GAAIA,GAAQ3B,KAAKo9B,QAAQz7B,KACzB,QAAO3B,KAAKP,KAAKwF,aAAa,cAC5B,IAAK,OACH,GAAIiU,GAAYlZ,KAAK+c,MAAMtd,KAAKyZ,SAC5BlZ,MAAKy+B,WACPz+B,KAAK+c,MAAMxD,WAAWvZ,KAAKy+B,UAAW,OAAQ98B,EAAO2S,EAAAtR,QAAQqQ,QAAQC,YAC9DtT,MAAKy+B,YAEZz+B,KAAK0+B,eACL1+B,KAAK+c,MAAM3R,OAAO,OAAQzJ,EAAO2S,EAAAtR,QAAQqQ,QAAQC,OAEnDtT,KAAK+c,MAAMtd,KAAKyZ,UAAYA,CAC5B,MAEF,KAAK,QACHvX,EAAQq6B,EAAgBr6B,EAE1B,KAAK,UACH,IAAKA,EAAO,KACZ,IAAI4R,GAAQvT,KAAK+c,MAAMvJ,cAAa,EACpC,IAAa,MAATD,EAAe,CACjB,GAAIpI,GAAQoI,EAAMpI,MAAQoI,EAAM7N,MAChC1F,MAAK+c,MAAMzB,YAAYnQ,EAAOnL,KAAKP,KAAKwF,aAAa,aAActD,EAAO2S,EAAAtR,QAAQqQ,QAAQC,MAC9C,YAAxCtT,KAAKP,KAAKwF,aAAa,cACzBjF,KAAK+c,MAAMrB,WAAWvQ,EAAQ,EAAG,IAAKmJ,EAAAtR,QAAQqQ,QAAQC,MAExDtT,KAAK+c,MAAMlJ,aAAa1I,EAAQ,EAAGmJ,EAAAtR,QAAQqQ,QAAQC,OAMzDtT,KAAKo9B,QAAQz7B,MAAQ,GACrB3B,KAAK27B,W9Ck8LAQ,GACPM,EAAUz5B,QA4BZrD,G8Cj8LSw8B,c9Ck8LTx8B,E8Cl8LmCqD,QAAb+5B,G9Cs8LhB,SAAUn9B,EAAQD,EAASO,GAEjC,YAiHA,SAASiI,GAAuBZ,GAAO,MAAOA,IAAOA,EAAInG,WAAamG,GAAQvE,QAASuE,GA9GvFzG,OAAOC,eAAepB,EAAS,cAC7BgC,OAAO,G+CntMT,IAAAg9B,GAAAz+B,EAAA,I/CwtMI0+B,EAASz2B,EAAuBw2B,G+CttMpCE,EAAA3+B,EAAA,IACA4+B,EAAA5+B,EAAA,IACA6+B,EAAA7+B,EAAA,IAEA8+B,EAAA9+B,EAAA,I/C4tMI++B,EAAe92B,EAAuB62B,G+C3tM1CE,EAAAh/B,EAAA,I/C+tMIi/B,EAAWh3B,EAAuB+2B,G+C9tMtCE,EAAAl/B,EAAA,I/CkuMIm/B,EAASl3B,EAAuBi3B,G+ChuMpCE,EAAAp/B,EAAA,IACAg6B,EAAAh6B,EAAA,IACAq/B,EAAAr/B,EAAA,IACAs/B,EAAAt/B,EAAA,IAEAu/B,EAAAv/B,EAAA,I/CuuMIw/B,EAASv3B,EAAuBs3B,G+CtuMpCE,EAAAz/B,EAAA,I/C0uMI0/B,EAAWz3B,EAAuBw3B,G+CzuMtCE,EAAA3/B,EAAA,I/C6uMI4/B,EAAS33B,EAAuB03B,G+C5uMpCE,EAAA7/B,EAAA,I/CgvMI8/B,EAAW73B,EAAuB43B,G+C/uMtCE,EAAA//B,EAAA,I/CmvMIggC,EAAW/3B,EAAuB83B,G+ClvMtCE,EAAAjgC,EAAA,I/CsvMIkgC,EAAcj4B,EAAuBg4B,G+CpvMzCE,EAAAngC,EAAA,I/CwvMIogC,EAAUn4B,EAAuBk4B,G+CvvMrCE,EAAArgC,EAAA,I/C2vMIsgC,EAAUr4B,EAAuBo4B,G+CzvMrCE,EAAAvgC,EAAA,I/C6vMIwgC,EAASv4B,EAAuBs4B,G+C3vMpCE,EAAAzgC,EAAA,I/C+vMI0gC,EAAYz4B,EAAuBw4B,G+C9vMvCE,EAAA3gC,EAAA,I/CkwMI4gC,EAAW34B,EAAuB04B,G+CjwMtCE,EAAA7gC,EAAA,I/CqwMI8gC,EAAY74B,EAAuB44B,G+CnwMvCE,EAAA/gC,EAAA,I/CuwMIghC,EAAU/4B,EAAuB84B,G+CtwMrCrG,EAAA16B,EAAA,I/C0wMI26B,EAAW1yB,EAAuByyB,G+CzwMtCwB,EAAAl8B,EAAA,I/C6wMIm8B,EAAgBl0B,EAAuBi0B,G+C5wM3CE,EAAAp8B,EAAA,I/CgxMIq8B,EAAep0B,EAAuBm0B,G+C/wM1CE,EAAAt8B,EAAA,I/CmxMIu8B,EAAYt0B,EAAuBq0B,G+CjxMvC2E,EAAAjhC,EAAA,K/CqxMIkhC,GAAWj5B,EAAuBg5B,G+CpxMtCE,GAAAnhC,EAAA,K/CwxMIohC,GAASn5B,EAAuBk5B,G+CrxMpCzC,GAAA57B,QAAMF,UACJy+B,kCAAAzC,EAAAzE,mBAEAmH,0BAAA3C,EAAA/E,WACA2H,+BAAAnC,EAAArF,gBACAyH,0BAAAxH,EAAA9K,WACAuS,8BAAA7C,EAAA1E,eACAwH,yBAAArC,EAAAjF,UACAuH,yBAAArC,EAAA9E,UAEAoH,0BAAAjD,EAAAhF,WACAkI,+BAAAzC,EAAAtF,gBACAgI,0BAAA9H,EAAA/K,WACA8S,8BAAAnD,EAAA3E,eACA+H,yBAAA3C,EAAAhF,UACA4H,yBAAA3C,EAAA/E,YACC,GAGHmE,EAAA57B,QAAMF,UACJs/B,gBAAAvD,EAAA/E,WACAuI,oBAAAvD,EAAA1E,eACAkI,iBAAAvD,EAAAwD,YAEAC,qBAAAlD,EAAAtF,gBACAyI,gBAAAvI,EAAA/K,WACAuT,eAAAnD,EAAAjF,UACAqI,eAAAnD,EAAA9E,UAEAkI,qBAAA3D,EAAAj8B,QACA6/B,qBAAAnC,EAAA19B,QACA8/B,iBAAA3D,EAAAn8B,QACA+/B,eAAA1D,EAAAr8B,QAEAggC,eAAAtD,EAAA18B,QACAigC,eAAAxC,EAAAjgB,KACA0iB,iBAAAtD,EAAA58B,QACAmgC,eAAArD,EAAA98B,QACAogC,iBAAApD,EAAAh9B,QACAqgC,iBAAAnD,EAAAl9B,QACAsgC,oBAAAlD,EAAAp9B,QAEAugC,gBAAAjD,EAAAt9B,QACAwgC,gBAAAhD,EAAAx9B,QAEAygC,oBAAArE,EAAAsE,SAEAC,kBAAA/C,EAAA59B,QACA4gC,iBAAA9C,EAAA99B,QACA6gC,kBAAA7C,EAAAh+B,QAEA8gC,gBAAA1C,GAAAp+B,QACA+gC,cAAAzC,GAAAt+B,QAEAghC,WAAA9C,EAAAl+B,QACAihC,YAAApJ,EAAA73B,QACAkhC,iBAAA3H,EAAAv5B,QACAmhC,kBAAA9H,EAAAr5B,QACAohC,aAAA3H,EAAAz5B,UACC,G/C0xMHrD,EAAQqD,QAAU47B,EAAO57B,SAInB,SAAUpD,EAAQD,EAASO,GAEjC,YA2DA,SAASiI,GAAuBZ,GAAO,MAAOA,IAAOA,EAAInG,WAAamG,GAAQvE,QAASuE,GAxDvFzG,OAAOC,eAAepB,EAAS,cAC7BgC,OAAO,GgDx4MT,IAAAyI,GAAAlK,EAAA,GhD64MImK,EAAclC,EAAuBiC,GgD54MzCsoB,EAAAxyB,EAAA,GhDg5MIgwB,EAAU/nB,EAAuBuqB,GgD94MrCjS,EAAAvgB,EAAA,GhDk5MIwgB,EAAUvY,EAAuBsY,GgDj5MrCnW,EAAApK,EAAA,IhDq5MIqK,EAAUpC,EAAuBmC,GgDp5MrC+5B,EAAAnkC,EAAA,IhDw5MIokC,EAAcn8B,EAAuBk8B,GgDv5MzCE,EAAArkC,EAAA,IhD25MIskC,EAAWr8B,EAAuBo8B,GgD15MtCE,EAAAvkC,EAAA,IhD85MIwkC,EAAUv8B,EAAuBs8B,GgD75MrCj6B,EAAAtK,EAAA,GhDi6MIuK,EAAWtC,EAAuBqC,GgDh6MtCm6B,EAAAzkC,EAAA,IhDo6MI0kC,EAAWz8B,EAAuBw8B,GgDn6MtCj6B,EAAAxK,EAAA,GhDu6MIyK,EAASxC,EAAuBuC,GgDr6MpCm6B,EAAA3kC,EAAA,IhDy6MI4kC,EAAc38B,EAAuB08B,GgDx6MzCE,EAAA7kC,EAAA,IhD46MI8kC,EAAY78B,EAAuB48B,GgD36MvChiB,EAAA7iB,EAAA,IhD+6MI8iB,EAAa7a,EAAuB4a,EgD76MxCmN,GAAAltB,QAAMF,UACJmiC,cAAAvkB,EAAA1d,QACAkiC,oBAAAzkB,EAAArX,WACA+7B,cAAA56B,EAAAvH,QACAoiC,kBAAAd,EAAAthC,QACAqiC,eAAAb,EAAAxhC,QACAsiC,cAAAZ,EAAA1hC,QACAuiC,eAAA96B,EAAAzH,QACAwiC,eAAAZ,EAAA5hC,QACAyiC,aAAA96B,EAAA3H,QAEA0iC,oBAAAZ,EAAA9hC,QACA2iC,kBAAAX,EAAAhiC,QACA4iC,mBAAA5iB,EAAAhgB,UAGFqH,EAAArH,QAAUF,SAAV4d,EAAA1d,QAAAuH,EAAAvH,QAAAwhC,EAAAxhC,QAAAyH,EAAAzH,QAAA4hC,EAAA5hC,QAAA2H,EAAA3H,ShDm7MArD,EAAQqD,QAAUktB,EAAQltB,SAIpB,SAAUpD,EAAQD,EAASO,GAEjC,YiDx9MAY,QAAAC,eAAApB,EAAA,cAA8CgC,OAAA,GAC9C,IAAAkkC,GAAA,WACA,QAAAA,KACA7lC,KAAA6M,KAAA7M,KAAA0M,KAAA,KACA1M,KAAA0F,OAAA,EA8HA,MA5HAmgC,GAAAtkC,UAAAukC,OAAA,WAEA,OADAC,MACAvgC,EAAA,EAAwBA,EAAAC,UAAAC,OAAuBF,IAC/CugC,EAAAvgC,GAAAC,UAAAD,EAEAxF,MAAAwL,aAAAu6B,EAAA,SACAA,EAAArgC,OAAA,GACA1F,KAAA8lC,OAAAj7B,MAAA7K,KAAA+lC,EAAAp6B,MAAA,KAGAk6B,EAAAtkC,UAAAoa,SAAA,SAAAxX,GAEA,IADA,GAAA6hC,GAAAv6B,EAAAzL,KAAAkP,WACA82B,EAAAv6B,KACA,GAAAu6B,IAAA7hC,EACA,QAEA,WAEA0hC,EAAAtkC,UAAAiK,aAAA,SAAArH,EAAAsU,GACAtU,IAEAA,EAAAsH,KAAAgN,EACA,MAAAA,GACAtU,EAAA2d,KAAArJ,EAAAqJ,KACA,MAAArJ,EAAAqJ,OACArJ,EAAAqJ,KAAArW,KAAAtH,GAEAsU,EAAAqJ,KAAA3d,EACAsU,IAAAzY,KAAA6M,OACA7M,KAAA6M,KAAA1I,IAGA,MAAAnE,KAAA0M,MACA1M,KAAA0M,KAAAjB,KAAAtH,EACAA,EAAA2d,KAAA9hB,KAAA0M,KACA1M,KAAA0M,KAAAvI,IAGAA,EAAA2d,KAAA,KACA9hB,KAAA6M,KAAA7M,KAAA0M,KAAAvI,GAEAnE,KAAA0F,QAAA,IAEAmgC,EAAAtkC,UAAAuP,OAAA,SAAA7I,GAEA,IADA,GAAAkD,GAAA,EAAA66B,EAAAhmC,KAAA6M,KACA,MAAAm5B,GAAA,CACA,GAAAA,IAAA/9B,EACA,MAAAkD,EACAA,IAAA66B,EAAAtgC,SACAsgC,IAAAv6B,KAEA,UAEAo6B,EAAAtkC,UAAAuL,OAAA,SAAA3I,GACAnE,KAAA2b,SAAAxX,KAEA,MAAAA,EAAA2d,OACA3d,EAAA2d,KAAArW,KAAAtH,EAAAsH,MACA,MAAAtH,EAAAsH,OACAtH,EAAAsH,KAAAqW,KAAA3d,EAAA2d,MACA3d,IAAAnE,KAAA6M,OACA7M,KAAA6M,KAAA1I,EAAAsH,MACAtH,IAAAnE,KAAA0M,OACA1M,KAAA0M,KAAAvI,EAAA2d,MACA9hB,KAAA0F,QAAA,IAEAmgC,EAAAtkC,UAAA2N,SAAA,SAAA+2B,GAGA,WAFA,KAAAA,IAAiCA,EAAAjmC,KAAA6M,MAEjC,WACA,GAAAq5B,GAAAD,CAGA,OAFA,OAAAA,IACAA,IAAAx6B,MACAy6B,IAGAL,EAAAtkC,UAAAqB,KAAA,SAAAuI,EAAAmb,OACA,KAAAA,IAAmCA,GAAA,EAEnC,KADA,GAAA0f,GAAAv6B,EAAAzL,KAAAkP,WACA82B,EAAAv6B,KAAA,CACA,GAAA/F,GAAAsgC,EAAAtgC,QACA,IAAAyF,EAAAzF,GACA4gB,GAAAnb,IAAAzF,IAAA,MAAAsgC,EAAAv6B,MAAA,IAAAu6B,EAAAv6B,KAAA/F,UACA,OAAAsgC,EAAA76B,EAEAA,IAAAzF,EAEA,gBAEAmgC,EAAAtkC,UAAA8E,QAAA,SAAA8/B,GAEA,IADA,GAAAH,GAAAv6B,EAAAzL,KAAAkP,WACA82B,EAAAv6B,KACA06B,EAAAH,IAGAH,EAAAtkC,UAAAokB,UAAA,SAAAxa,EAAAzF,EAAAygC,GACA,KAAAzgC,GAAA,GAIA,IAFA,GACAsgC,GADAngB,EAAA7lB,KAAA4C,KAAAuI,GAAA2gB,EAAAjG,EAAA,GAAA/U,EAAA+U,EAAA,GACAugB,EAAAj7B,EAAA2F,EAAArF,EAAAzL,KAAAkP,SAAA4c,IACAka,EAAAv6B,MAAA26B,EAAAj7B,EAAAzF,GAAA,CACA,GAAA2gC,GAAAL,EAAAtgC,QACAyF,GAAAi7B,EACAD,EAAAH,EAAA76B,EAAAi7B,EAAAh6B,KAAAC,IAAA3G,EAAA0gC,EAAAC,EAAAl7B,IAGAg7B,EAAAH,EAAA,EAAA55B,KAAAC,IAAAg6B,EAAAl7B,EAAAzF,EAAA0gC,IAEAA,GAAAC,IAGAR,EAAAtkC,UAAAoE,IAAA,SAAAwgC,GACA,MAAAnmC,MAAAkM,OAAA,SAAAka,EAAA4f,GAEA,MADA5f,GAAAtY,KAAAq4B,EAAAH,IACA5f,QAGAyf,EAAAtkC,UAAA2K,OAAA,SAAAi6B,EAAA/f,GAEA,IADA,GAAA4f,GAAAv6B,EAAAzL,KAAAkP,WACA82B,EAAAv6B,KACA2a,EAAA+f,EAAA/f,EAAA4f,EAEA,OAAA5f,IAEAyf,IAEAlmC,GAAAqD,QAAA6iC,GjD+9MM,SAAUjmC,EAAQD,EAASO,GAEjC,YkDrmNA,IAAAqG,GAAAvG,WAAAuG,WAAA,WACA,GAAAC,GAAA1F,OAAA2F,iBACUC,uBAAgBT,QAAA,SAAAvF,EAAAiG,GAAsCjG,EAAAgG,UAAAC,IAChE,SAAAjG,EAAAiG,GAAyB,OAAAlF,KAAAkF,KAAAnF,eAAAC,KAAAf,EAAAe,GAAAkF,EAAAlF,IACzB,iBAAAf,EAAAiG,GAEA,QAAAC,KAAuB5G,KAAA6G,YAAAnG,EADvB8F,EAAA9F,EAAAiG,GAEAjG,EAAAa,UAAA,OAAAoF,EAAA7F,OAAA6B,OAAAgE,IAAAC,EAAArF,UAAAoF,EAAApF,UAAA,GAAAqF,OAGA9F,QAAAC,eAAApB,EAAA,cAA8CgC,OAAA,GAC9C,IAAAC,GAAA1B,EAAA,IACAsC,EAAAtC,EAAA,GACAomC,GACA3hC,YAAA,EACA4hC,eAAA,EACAC,uBAAA,EACAC,WAAA,EACAC,SAAA,GAGAC,EAAA,SAAA7/B,GAEA,QAAA6/B,GAAAxiC,GACA,GAAA6C,GAAAF,EAAAvG,KAAAP,KAAAmE,IAAAnE,IAOA,OANAgH,GAAA8P,OAAA9P,EACAA,EAAA4/B,SAAA,GAAAC,kBAAA,SAAArvB,GACAxQ,EAAA0Q,OAAAF,KAEAxQ,EAAA4/B,SAAAE,QAAA9/B,EAAA8D,QAAAw7B,GACAt/B,EAAAqe,SACAre,EA8IA,MAvJAT,GAAAogC,EAAA7/B,GAWA6/B,EAAAplC,UAAAwkB,OAAA,WACAjf,EAAAvF,UAAAwkB,OAAAxlB,KAAAP,MACAA,KAAA4mC,SAAAG,cAEAJ,EAAAplC,UAAA4f,SAAA,SAAAhW,EAAAzF,GACA1F,KAAA0X,SACA,IAAAvM,GAAAzF,IAAA1F,KAAA0F,SACA1F,KAAAyM,SAAApG,QAAA,SAAA2G,GACAA,EAAAF,WAIAhG,EAAAvF,UAAA4f,SAAA5gB,KAAAP,KAAAmL,EAAAzF,IAGAihC,EAAAplC,UAAAigB,SAAA,SAAArW,EAAAzF,EAAA/E,EAAAgB,GACA3B,KAAA0X,SACA5Q,EAAAvF,UAAAigB,SAAAjhB,KAAAP,KAAAmL,EAAAzF,EAAA/E,EAAAgB,IAEAglC,EAAAplC,UAAAmK,SAAA,SAAAP,EAAAxJ,EAAA0J,GACArL,KAAA0X,SACA5Q,EAAAvF,UAAAmK,SAAAnL,KAAAP,KAAAmL,EAAAxJ,EAAA0J,IAEAs7B,EAAAplC,UAAAwgB,SAAA,SAAAvK,EAAAzK,GACA,GAAA/F,GAAAhH,SACA,KAAAwX,IAAmCA,UACnC,KAAAzK,IAAiCA,MACjCjG,EAAAvF,UAAAwgB,SAAAxhB,KAAAP,KAAA+M,EAKA,KAHA,GAAAi6B,MAAAr7B,MAAApL,KAAAP,KAAA4mC,SAAAK,eAGAD,EAAAthC,OAAA,GACA8R,EAAA1J,KAAAk5B,EAAA34B,MA+BA,QA7BA64B,GAAA,SAAA5iC,EAAA6iC,OACA,KAAAA,IAAwCA,GAAA,GACxC,MAAA7iC,OAAA0C,GAEA,MAAA1C,EAAAwG,QAAAvG,aAGA,MAAAD,EAAAwG,QAAAtI,EAAA6B,UAAAmT,YAEAlT,EAAAwG,QAAAtI,EAAA6B,UAAAmT,cAEA2vB,GACAD,EAAA5iC,EAAA4E,UAEA6Y,EAAA,SAAAzd,GAIA,MAAAA,EAAAwG,QAAAtI,EAAA6B,WAEA,MAAAC,EAAAwG,QAAAtI,EAAA6B,UAAAmT,YAGAlT,YAAA1C,GAAAoB,SACAsB,EAAAmI,SAAApG,QAAA0b,GAEAzd,EAAAyd,SAAAhV,KAEAq6B,EAAA5vB,EACAnX,EAAA,EAAuB+mC,EAAA1hC,OAAA,EAAsBrF,GAAA,GAC7C,GAAAA,GA9EA,IA+EA,SAAA4G,OAAA,kDA4BA,KA1BAmgC,EAAA/gC,QAAA,SAAAsgB,GACA,GAAAriB,GAAA9B,EAAAI,KAAA+jB,EAAA1e,QAAA,EACA,OAAA3D,IAEAA,EAAAwG,UAAA6b,EAAA1e,SACA,cAAA0e,EAAAvP,MACA8vB,EAAA1kC,EAAAI,KAAA+jB,EAAA0gB,iBAAA,OACAhhC,QAAA9F,KAAAomB,EAAAF,WAAA,SAAAtiB,GACA,GAAA6I,GAAAxK,EAAAI,KAAAuB,GAAA,EACA+iC,GAAAl6B,GAAA,GACAA,YAAApL,GAAAoB,SACAgK,EAAAP,SAAApG,QAAA,SAAAihC,GACAJ,EAAAI,GAAA,QAKA,eAAA3gB,EAAAvP,MACA8vB,EAAA5iC,EAAAwd,OAGAolB,EAAA5iC,MAEAtE,KAAAyM,SAAApG,QAAA0b,GACAqlB,KAAAz7B,MAAApL,KAAAP,KAAA4mC,SAAAK,eACAD,EAAAI,EAAAz7B,QACAq7B,EAAAthC,OAAA,GACA8R,EAAA1J,KAAAk5B,EAAA34B,SAGAs4B,EAAAplC,UAAAmW,OAAA,SAAAF,EAAAzK,GACA,GAAA/F,GAAAhH,SACA,KAAA+M,IAAiCA,MACjCyK,KAAAxX,KAAA4mC,SAAAK,cAEAzvB,EACA7R,IAAA,SAAAghB,GACA,GAAAriB,GAAA9B,EAAAI,KAAA+jB,EAAA1e,QAAA,EACA,cAAA3D,EACA,KAEA,MAAAA,EAAAwG,QAAAtI,EAAA6B,UAAAmT,WAEAlT,EAAAwG,QAAAtI,EAAA6B,UAAAmT,WAAAmP,GACAriB,IAIAA,EAAAwG,QAAAtI,EAAA6B,UAAAmT,UAAA1J,KAAA6Y,GACA,QAGAtgB,QAAA,SAAA/B,GACA,MAAAA,GACAA,IAAA0C,GAEA,MAAA1C,EAAAwG,QAAAtI,EAAA6B,WAGAC,EAAAoT,OAAApT,EAAAwG,QAAAtI,EAAA6B,UAAAmT,cAAAzK,KAGA,MAAA/M,KAAA8K,QAAAtI,EAAA6B,UAAAmT,WAEA1Q,EAAAvF,UAAAmW,OAAAnX,KAAAP,UAAA8K,QAAAtI,EAAA6B,UAAAmT,UAAAzK,GAEA/M,KAAA+hB,SAAAvK,EAAAzK,IAEA45B,EAAA9gC,SAAA,SACA8gC,EAAAz5B,aAAA,QACAy5B,EAAAniC,MAAAhC,EAAAE,MAAAkJ,WACA+6B,EAAAthC,QAAA,MACAshC,GACC/kC,EAAAoB,QACDrD,GAAAqD,QAAA2jC,GlD4mNM,SAAU/mC,EAAQD,EAASO,GAEjC,YmD/wNA,SAAAqnC,GAAAC,EAAAC,GACA,GAAA3mC,OAAA+M,KAAA25B,GAAA9hC,SAAA5E,OAAA+M,KAAA45B,GAAA/hC,OACA,QAEA,QAAAgiC,KAAAF,GAEA,GAAAA,EAAAE,KAAAD,EAAAC,GACA,QAEA,UAvBA,GAAAnhC,GAAAvG,WAAAuG,WAAA,WACA,GAAAC,GAAA1F,OAAA2F,iBACUC,uBAAgBT,QAAA,SAAAvF,EAAAiG,GAAsCjG,EAAAgG,UAAAC,IAChE,SAAAjG,EAAAiG,GAAyB,OAAAlF,KAAAkF,KAAAnF,eAAAC,KAAAf,EAAAe,GAAAkF,EAAAlF,IACzB,iBAAAf,EAAAiG,GAEA,QAAAC,KAAuB5G,KAAA6G,YAAAnG,EADvB8F,EAAA9F,EAAAiG,GAEAjG,EAAAa,UAAA,OAAAoF,EAAA7F,OAAA6B,OAAAgE,IAAAC,EAAArF,UAAAoF,EAAApF,UAAA,GAAAqF,OAGA9F,QAAAC,eAAApB,EAAA,cAA8CgC,OAAA,GAC9C,IAAAE,GAAA3B,EAAA,IACAsC,EAAAtC,EAAA,GAaAynC,EAAA,SAAA7gC,GAEA,QAAA6gC,KACA,cAAA7gC,KAAA+D,MAAA7K,KAAAyF,YAAAzF,KA8CA,MAhDAuG,GAAAohC,EAAA7gC,GAIA6gC,EAAA5+B,QAAA,SAAA+B,GACA,GAAAA,EAAAzF,UAAAsiC,EAAAtiC,QAEA,MAAAyB,GAAAiC,QAAAxI,KAAAP,KAAA8K,IAEA68B,EAAApmC,UAAA6J,OAAA,SAAAzK,EAAAgB,GACA,GAAAqF,GAAAhH,IACAW,KAAAX,KAAAmJ,QAAAtD,UAAAlE,EAUAmF,EAAAvF,UAAA6J,OAAA7K,KAAAP,KAAAW,EAAAgB,IATA3B,KAAAyM,SAAApG,QAAA,SAAA2G,GACAA,YAAAnL,GAAAmB,UACAgK,IAAAoE,KAAAu2B,EAAA9hC,UAAA,IAEAmB,EAAArC,WAAAmD,KAAAkF,KAEAhN,KAAAiiB,WAMA0lB,EAAApmC,UAAAigB,SAAA,SAAArW,EAAAzF,EAAA/E,EAAAgB,GACA,SAAA3B,KAAA+I,UAAApI,IAAA6B,EAAAK,MAAAlC,EAAA6B,EAAAE,MAAAuc,WAAA,CACAjf,KAAAmR,QAAAhG,EAAAzF,GACA0F,OAAAzK,EAAAgB,OAGAmF,GAAAvF,UAAAigB,SAAAjhB,KAAAP,KAAAmL,EAAAzF,EAAA/E,EAAAgB,IAGAgmC,EAAApmC,UAAAwgB,SAAA,SAAAhV,GACAjG,EAAAvF,UAAAwgB,SAAAxhB,KAAAP,KAAA+M,EACA,IAAAhE,GAAA/I,KAAA+I,SACA,QAAAjI,OAAA+M,KAAA9E,GAAArD,OACA,MAAA1F,MAAAiiB,QAEA,IAAAxW,GAAAzL,KAAAyL,IACAA,aAAAk8B,IAAAl8B,EAAAqW,OAAA9hB,MAAAunC,EAAAx+B,EAAA0C,EAAA1C,aACA0C,EAAA4F,aAAArR,MACAyL,EAAAqB,WAGA66B,EAAA9hC,SAAA,SACA8hC,EAAAnjC,MAAAhC,EAAAE,MAAA8kB,YACAmgB,EAAAtiC,QAAA,OACAsiC,GACC9lC,EAAAmB,QACDrD,GAAAqD,QAAA2kC,GnDoyNM,SAAU/nC,EAAQD,EAASO,GAEjC,YoDl3NA,IAAAqG,GAAAvG,WAAAuG,WAAA,WACA,GAAAC,GAAA1F,OAAA2F,iBACUC,uBAAgBT,QAAA,SAAAvF,EAAAiG,GAAsCjG,EAAAgG,UAAAC,IAChE,SAAAjG,EAAAiG,GAAyB,OAAAlF,KAAAkF,KAAAnF,eAAAC,KAAAf,EAAAe,GAAAkF,EAAAlF,IACzB,iBAAAf,EAAAiG,GAEA,QAAAC,KAAuB5G,KAAA6G,YAAAnG,EADvB8F,EAAA9F,EAAAiG,GAEAjG,EAAAa,UAAA,OAAAoF,EAAA7F,OAAA6B,OAAAgE,IAAAC,EAAArF,UAAAoF,EAAApF,UAAA,GAAAqF,OAGA9F,QAAAC,eAAApB,EAAA,cAA8CgC,OAAA,GAC9C,IAAAE,GAAA3B,EAAA,IACAsC,EAAAtC,EAAA,GACA0nC,EAAA,SAAA9gC,GAEA,QAAA8gC,KACA,cAAA9gC,KAAA+D,MAAA7K,KAAAyF,YAAAzF,KAiDA,MAnDAuG,GAAAqhC,EAAA9gC,GAIA8gC,EAAA7+B,QAAA,SAAA+B,GACA,GAAAzF,GAAA7C,EAAAK,MAAA+kC,EAAA/hC,UAAAR,OACA,IAAAyF,EAAAzF,YAEA,MAAAyB,GAAAiC,QAAAxI,KAAAP,KAAA8K,IAEA88B,EAAArmC,UAAA6J,OAAA,SAAAzK,EAAAgB,GACA,MAAAa,EAAAK,MAAAlC,EAAA6B,EAAAE,MAAAmC,SAGAlE,IAAAX,KAAAmJ,QAAAtD,UAAAlE,EAIAmF,EAAAvF,UAAA6J,OAAA7K,KAAAP,KAAAW,EAAAgB,GAHA3B,KAAAmnB,YAAAygB,EAAA/hC,YAMA+hC,EAAArmC,UAAAigB,SAAA,SAAArW,EAAAzF,EAAA/E,EAAAgB,GACA,MAAAa,EAAAK,MAAAlC,EAAA6B,EAAAE,MAAAmC,OACA7E,KAAAoL,OAAAzK,EAAAgB,GAGAmF,EAAAvF,UAAAigB,SAAAjhB,KAAAP,KAAAmL,EAAAzF,EAAA/E,EAAAgB,IAGAimC,EAAArmC,UAAAmK,SAAA,SAAAP,EAAAxJ,EAAA0J,GACA,SAAAA,GAAA,MAAA7I,EAAAK,MAAAlB,EAAAa,EAAAE,MAAAoC,QAEAgC,EAAAvF,UAAAmK,SAAAnL,KAAAP,KAAAmL,EAAAxJ,EAAA0J,OAEA,CACA,GAAAmb,GAAAxmB,KAAAkF,MAAAiG,GACA7G,EAAA9B,EAAAG,OAAAhB,EAAA0J,EACAmb,GAAAtd,OAAAsC,aAAAlH,EAAAkiB,KAGAohB,EAAArmC,UAAAmW,OAAA,SAAAF,EAAAzK,GACA4lB,UAAAO,UAAApvB,MAAA,WACA9D,KAAAylB,QAGA3e,EAAAvF,UAAAmW,OAAAnX,KAAAP,KAAAwX,EAAAzK,IAGA66B,EAAA/hC,SAAA,QACA+hC,EAAApjC,MAAAhC,EAAAE,MAAAkJ,WACAg8B,EAAAviC,QAAA,IACAuiC,GACC/lC,EAAAmB,QACDrD,GAAAqD,QAAA4kC,GpDy3NM,SAAUhoC,EAAQD,EAASO,GAEjC,YqD97NA,IAAAqG,GAAAvG,WAAAuG,WAAA,WACA,GAAAC,GAAA1F,OAAA2F,iBACUC,uBAAgBT,QAAA,SAAAvF,EAAAiG,GAAsCjG,EAAAgG,UAAAC,IAChE,SAAAjG,EAAAiG,GAAyB,OAAAlF,KAAAkF,KAAAnF,eAAAC,KAAAf,EAAAe,GAAAkF,EAAAlF,IACzB,iBAAAf,EAAAiG,GAEA,QAAAC,KAAuB5G,KAAA6G,YAAAnG,EADvB8F,EAAA9F,EAAAiG,GAEAjG,EAAAa,UAAA,OAAAoF,EAAA7F,OAAA6B,OAAAgE,IAAAC,EAAArF,UAAAoF,EAAApF,UAAA,GAAAqF,OAGA9F,QAAAC,eAAApB,EAAA,cAA8CgC,OAAA,GAC9C,IAAAG,GAAA5B,EAAA,IACA2nC,EAAA,SAAA/gC,GAEA,QAAA+gC,KACA,cAAA/gC,KAAA+D,MAAA7K,KAAAyF,YAAAzF,KAsBA,MAxBAuG,GAAAshC,EAAA/gC,GAIA+gC,EAAA9+B,QAAA,SAAA+B,KAGA+8B,EAAAtmC,UAAA6J,OAAA,SAAAzK,EAAAgB,GAIAmF,EAAAvF,UAAAigB,SAAAjhB,KAAAP,KAAA,EAAAA,KAAA0F,SAAA/E,EAAAgB,IAEAkmC,EAAAtmC,UAAAigB,SAAA,SAAArW,EAAAzF,EAAA/E,EAAAgB,GACA,IAAAwJ,GAAAzF,IAAA1F,KAAA0F,SACA1F,KAAAoL,OAAAzK,EAAAgB,GAGAmF,EAAAvF,UAAAigB,SAAAjhB,KAAAP,KAAAmL,EAAAzF,EAAA/E,EAAAgB,IAGAkmC,EAAAtmC,UAAAwH,QAAA,WACA,MAAA/I,MAAAmJ,QAAAJ,QAAA/I,KAAA8K,UAEA+8B,GACC/lC,EAAAkB,QACDrD,GAAAqD,QAAA6kC,GrDq8NM,SAAUjoC,EAAQD,EAASO,GAEjC,YsD9+NA,IAAAqG,GAAAvG,WAAAuG,WAAA,WACA,GAAAC,GAAA1F,OAAA2F,iBACUC,uBAAgBT,QAAA,SAAAvF,EAAAiG,GAAsCjG,EAAAgG,UAAAC,IAChE,SAAAjG,EAAAiG,GAAyB,OAAAlF,KAAAkF,KAAAnF,eAAAC,KAAAf,EAAAe,GAAAkF,EAAAlF,IACzB,iBAAAf,EAAAiG,GAEA,QAAAC,KAAuB5G,KAAA6G,YAAAnG,EADvB8F,EAAA9F,EAAAiG,GAEAjG,EAAAa,UAAA,OAAAoF,EAAA7F,OAAA6B,OAAAgE,IAAAC,EAAArF,UAAAoF,EAAApF,UAAA,GAAAqF,OAGA9F,QAAAC,eAAApB,EAAA,cAA8CgC,OAAA,GAC9C,IAAAG,GAAA5B,EAAA,IACAsC,EAAAtC,EAAA,GACA8c,EAAA,SAAAlW,GAEA,QAAAkW,GAAA7Y,GACA,GAAA6C,GAAAF,EAAAvG,KAAAP,KAAAmE,IAAAnE,IAEA,OADAgH,GAAAuF,KAAAvF,EAAAmC,QAAAxH,MAAAqF,EAAA8D,SACA9D,EA0EA,MA9EAT,GAAAyW,EAAAlW,GAMAkW,EAAAra,OAAA,SAAAhB,GACA,MAAAkR,UAAAomB,eAAAt3B,IAEAqb,EAAArb,MAAA,SAAAmJ,GACA,GAAAyB,GAAAzB,EAAAuhB,IAIA,OAFA9f,GAAA,YACAA,IAAA,aACAA,GAEAyQ,EAAAzb,UAAA4f,SAAA,SAAAhW,EAAAzF,GACA1F,KAAA8K,QAAAuhB,KAAArsB,KAAAuM,KAAAvM,KAAAuM,KAAAZ,MAAA,EAAAR,GAAAnL,KAAAuM,KAAAZ,MAAAR,EAAAzF,IAEAsX,EAAAzb,UAAA4J,MAAA,SAAAhH,EAAA2M,GACA,MAAA9Q,MAAA8K,UAAA3G,EACA2M,GAEA,GAEAkM,EAAAzb,UAAAmK,SAAA,SAAAP,EAAAxJ,EAAA0J,GACA,MAAAA,GACArL,KAAAuM,KAAAvM,KAAAuM,KAAAZ,MAAA,EAAAR,GAAAxJ,EAAA3B,KAAAuM,KAAAZ,MAAAR,GACAnL,KAAA8K,QAAAuhB,KAAArsB,KAAAuM,MAGAzF,EAAAvF,UAAAmK,SAAAnL,KAAAP,KAAAmL,EAAAxJ,EAAA0J,IAGA2R,EAAAzb,UAAAmE,OAAA,WACA,MAAA1F,MAAAuM,KAAA7G,QAEAsX,EAAAzb,UAAAwgB,SAAA,SAAAhV,GACAjG,EAAAvF,UAAAwgB,SAAAxhB,KAAAP,KAAA+M,GACA/M,KAAAuM,KAAAvM,KAAAmJ,QAAAxH,MAAA3B,KAAA8K,SACA,IAAA9K,KAAAuM,KAAA7G,OACA1F,KAAA8M,SAEA9M,KAAAyL,eAAAuR,IAAAhd,KAAAyL,KAAAqW,OAAA9hB,OACAA,KAAA0L,SAAA1L,KAAA0F,SAAA1F,KAAAyL,KAAA9J,SACA3B,KAAAyL,KAAAqB,WAGAkQ,EAAAzb,UAAAglB,SAAA,SAAApb,EAAAmb,GAEA,WADA,KAAAA,IAAmCA,GAAA,IACnCtmB,KAAA8K,QAAAK,IAEA6R,EAAAzb,UAAA2D,MAAA,SAAAiG,EAAA8B,GAEA,OADA,KAAAA,IAA+BA,GAAA,IAC/BA,EAAA,CACA,OAAA9B,EACA,MAAAnL,KACA,IAAAmL,IAAAnL,KAAA0F,SACA,MAAA1F,MAAAyL,KAEA,GAAA+a,GAAAhkB,EAAAG,OAAA3C,KAAA8K,QAAAg9B,UAAA38B,GAGA,OAFAnL,MAAAkJ,OAAAsC,aAAAgb,EAAAxmB,KAAAyL,MACAzL,KAAAuM,KAAAvM,KAAAmJ,QAAAxH,MAAA3B,KAAA8K,SACA0b,GAEAxJ,EAAAzb,UAAAmW,OAAA,SAAAF,EAAAzK,GACA,GAAA/F,GAAAhH,IACAwX,GAAA0O,KAAA,SAAAS,GACA,wBAAAA,EAAAvP,MAAAuP,EAAA1e,SAAAjB,EAAA8D,YAEA9K,KAAAuM,KAAAvM,KAAAmJ,QAAAxH,MAAA3B,KAAA8K,WAGAkS,EAAAzb,UAAAI,MAAA,WACA,MAAA3B,MAAAuM,MAEAyQ,EAAAnX,SAAA,OACAmX,EAAAxY,MAAAhC,EAAAE,MAAA8kB,YACAxK,GACClb,EAAAkB,QACDrD,GAAAqD,QAAAga,GtDq/NM,SAAUpd,EAAQD,EAASO,GAEjC,YuDtlOA,IAAI2O,GAAOgE,SAAS6F,cAAc,MAElC,IADA7J,EAAK2H,UAAUa,OAAO,cAAc,GAChCxI,EAAK2H,UAAUmF,SAAS,cAAe,CACzC,GAAIosB,GAAUC,aAAazmC,UAAU8V,MACrC2wB,cAAazmC,UAAU8V,OAAS,SAAS4wB,EAAOh7B,GAC9C,MAAIxH,WAAUC,OAAS,IAAM1F,KAAK2b,SAASssB,KAAYh7B,EAC9CA,EAEA86B,EAAQxnC,KAAKP,KAAMioC,IAK3Bz6B,OAAOjM,UAAUiX,aACpBhL,OAAOjM,UAAUiX,WAAa,SAAS0vB,EAAc3hB,GAEnD,MADAA,GAAWA,GAAY,EAChBvmB,KAAK6nB,OAAOtB,EAAU2hB,EAAaxiC,UAAYwiC,IAIrD16B,OAAOjM,UAAU+J,WACpBkC,OAAOjM,UAAU+J,SAAW,SAAS48B,EAAc3hB,GACjD,GAAI4hB,GAAgBnoC,KAAKoH,YACD,gBAAbmf,KAA0B6hB,SAAS7hB,IAAana,KAAKi8B,MAAM9hB,KAAcA,GAAYA,EAAW4hB,EAAcziC,UACvH6gB,EAAW4hB,EAAcziC,QAE3B6gB,GAAY2hB,EAAaxiC,MACzB,IAAIojB,GAAYqf,EAAcz3B,QAAQw3B,EAAc3hB,EACpD,QAAsB,IAAfuC,GAAoBA,IAAcvC,IAIxCtgB,MAAM1E,UAAUqB,MACnB9B,OAAOC,eAAekF,MAAM1E,UAAW,QACrCI,MAAO,SAAS4M,GACd,GAAa,OAATvO,KACF,KAAM,IAAIuI,WAAU,mDAEtB,IAAyB,kBAAdgG,GACT,KAAM,IAAIhG,WAAU,+BAOtB,KAAK,GAFD5G,GAHAkzB,EAAO/zB,OAAOd,MACd0F,EAASmvB,EAAKnvB,SAAW,EACzB4iC,EAAU7iC,UAAU,GAGfpF,EAAI,EAAGA,EAAIqF,EAAQrF,IAE1B,GADAsB,EAAQkzB,EAAKx0B,GACTkO,EAAUhO,KAAK+nC,EAAS3mC,EAAOtB,EAAGw0B,GACpC,MAAOlzB,MAQjBkR,SAASwK,iBAAiB,mBAAoB,WAE5CxK,SAAS01B,YAAY,wBAAwB,GAAO,GAEpD11B,SAAS01B,YAAY,iBAAiB,GAAO,MvD8lOzC,SAAU3oC,EAAQD,GwD/mOxB,QAAA6oC,GAAAC,EAAAC,EAAAC,GAEA,GAAAF,GAAAC,EACA,MAAAD,KACAG,EAAAH,QAMAE,EAAA,GAAAF,EAAA/iC,OAAAijC,KACAA,EAAA,KAIA,IAAAE,GAAAC,EAAAL,EAAAC,GACAK,EAAAN,EAAAO,UAAA,EAAAH,EACAJ,KAAAO,UAAAH,GACAH,IAAAM,UAAAH,GAGAA,EAAAI,EAAAR,EAAAC,EACA,IAAAQ,GAAAT,EAAAO,UAAAP,EAAA/iC,OAAAmjC,EACAJ,KAAAO,UAAA,EAAAP,EAAA/iC,OAAAmjC,GACAH,IAAAM,UAAA,EAAAN,EAAAhjC,OAAAmjC,EAGA,IAAAM,GAAAC,EAAAX,EAAAC,EAcA,OAXAK,IACAI,EAAAj7B,SAAA06B,EAAAG,IAEAG,GACAC,EAAAr7B,MAAA86B,EAAAM,IAEAG,EAAAF,GACA,MAAAR,IACAQ,EAAAG,EAAAH,EAAAR,IAEAQ,EAAAI,EAAAJ,GAYA,QAAAC,GAAAX,EAAAC,GACA,GAAAS,EAEA,KAAAV,EAEA,QAAAe,EAAAd,GAGA,KAAAA,EAEA,QAAAe,EAAAhB,GAGA,IAAAiB,GAAAjB,EAAA/iC,OAAAgjC,EAAAhjC,OAAA+iC,EAAAC,EACAiB,EAAAlB,EAAA/iC,OAAAgjC,EAAAhjC,OAAAgjC,EAAAD,EACApoC,EAAAqpC,EAAAh5B,QAAAi5B,EACA,QAAAtpC,EASA,MAPA8oC,KAAAK,EAAAE,EAAAV,UAAA,EAAA3oC,KACAuoC,EAAAe,IACAH,EAAAE,EAAAV,UAAA3oC,EAAAspC,EAAAjkC,UAEA+iC,EAAA/iC,OAAAgjC,EAAAhjC,SACAyjC,EAAA,MAAAA,EAAA,MAAAM,GAEAN,CAGA,OAAAQ,EAAAjkC,OAGA,QAAA+jC,EAAAhB,IAAAe,EAAAd,GAIA,IAAAkB,GAAAC,EAAApB,EAAAC,EACA,IAAAkB,EAAA,CAEA,GAAAE,GAAAF,EAAA,GACAG,EAAAH,EAAA,GACAI,EAAAJ,EAAA,GACAK,EAAAL,EAAA,GACAM,EAAAN,EAAA,GAEAO,EAAA3B,EAAAsB,EAAAE,GACAI,EAAA5B,EAAAuB,EAAAE,EAEA,OAAAE,GAAAt6B,SAAA+4B,EAAAsB,IAAAE,GAGA,MAAAC,GAAA5B,EAAAC,GAaA,QAAA2B,GAAA5B,EAAAC,GAWA,OATA4B,GAAA7B,EAAA/iC,OACA6kC,EAAA7B,EAAAhjC,OACA8kC,EAAAp+B,KAAAq+B,MAAAH,EAAAC,GAAA,GACAG,EAAAF,EACAG,EAAA,EAAAH,EACAI,EAAA,GAAA3kC,OAAA0kC,GACAE,EAAA,GAAA5kC,OAAA0kC,GAGAnrB,EAAA,EAAiBA,EAAAmrB,EAAcnrB,IAC/BorB,EAAAprB,IAAA,EACAqrB,EAAArrB,IAAA,CAEAorB,GAAAF,EAAA,KACAG,EAAAH,EAAA,IAWA,QAVA1+B,GAAAs+B,EAAAC,EAGAO,EAAA9+B,EAAA,KAGA++B,EAAA,EACAC,EAAA,EACAC,EAAA,EACAC,EAAA,EACAxqC,EAAA,EAAiBA,EAAA8pC,EAAW9pC,IAAA,CAE5B,OAAAyqC,IAAAzqC,EAAAqqC,EAA+BI,GAAAzqC,EAAAsqC,EAAiBG,GAAA,GAChD,GACAC,GADAC,EAAAX,EAAAS,CAGAC,GADAD,IAAAzqC,GAAAyqC,GAAAzqC,GAAAkqC,EAAAS,EAAA,GAAAT,EAAAS,EAAA,GACAT,EAAAS,EAAA,GAEAT,EAAAS,EAAA,IAGA,KADA,GAAAC,GAAAF,EAAAD,EACAC,EAAAd,GAAAgB,EAAAf,GACA9B,EAAA8C,OAAAH,IAAA1C,EAAA6C,OAAAD,IACAF,IACAE,GAGA,IADAV,EAAAS,GAAAD,EACAA,EAAAd,EAEAU,GAAA,MACO,IAAAM,EAAAf,EAEPQ,GAAA,MACO,IAAAD,EAAA,CACP,GAAAU,GAAAd,EAAA1+B,EAAAm/B,CACA,IAAAK,GAAA,GAAAA,EAAAb,IAAA,GAAAE,EAAAW,GAAA,CAEA,GAAAC,GAAAnB,EAAAO,EAAAW,EACA,IAAAJ,GAAAK,EAEA,MAAAC,GAAAjD,EAAAC,EAAA0C,EAAAE,KAOA,OAAAK,IAAAjrC,EAAAuqC,EAA+BU,GAAAjrC,EAAAwqC,EAAiBS,GAAA,GAChD,GACAF,GADAD,EAAAd,EAAAiB,CAGAF,GADAE,IAAAjrC,GAAAirC,GAAAjrC,GAAAmqC,EAAAW,EAAA,GAAAX,EAAAW,EAAA,GACAX,EAAAW,EAAA,GAEAX,EAAAW,EAAA,IAGA,KADA,GAAAI,GAAAH,EAAAE,EACAF,EAAAnB,GAAAsB,EAAArB,GACA9B,EAAA8C,OAAAjB,EAAAmB,EAAA,IACA/C,EAAA6C,OAAAhB,EAAAqB,EAAA,IACAH,IACAG,GAGA,IADAf,EAAAW,GAAAC,EACAA,EAAAnB,EAEAY,GAAA,MACO,IAAAU,EAAArB,EAEPU,GAAA,MACO,KAAAH,EAAA,CACP,GAAAO,GAAAX,EAAA1+B,EAAA2/B,CACA,IAAAN,GAAA,GAAAA,EAAAV,IAAA,GAAAC,EAAAS,GAAA,CACA,GAAAD,GAAAR,EAAAS,GACAC,EAAAZ,EAAAU,EAAAC,CAGA,IADAI,EAAAnB,EAAAmB,EACAL,GAAAK,EAEA,MAAAC,GAAAjD,EAAAC,EAAA0C,EAAAE,MAQA,QAAA7B,EAAAhB,IAAAe,EAAAd,IAaA,QAAAgD,GAAAjD,EAAAC,EAAAlpB,EAAAqsB,GACA,GAAAC,GAAArD,EAAAO,UAAA,EAAAxpB,GACAusB,EAAArD,EAAAM,UAAA,EAAA6C,GACAG,EAAAvD,EAAAO,UAAAxpB,GACAysB,EAAAvD,EAAAM,UAAA6C,GAGA1C,EAAAX,EAAAsD,EAAAC,GACAG,EAAA1D,EAAAwD,EAAAC,EAEA,OAAA9C,GAAAt5B,OAAAq8B,GAWA,QAAApD,GAAAL,EAAAC,GAEA,IAAAD,IAAAC,GAAAD,EAAA8C,OAAA,IAAA7C,EAAA6C,OAAA,GACA,QAQA,KAJA,GAAAY,GAAA,EACAC,EAAAhgC,KAAAC,IAAAo8B,EAAA/iC,OAAAgjC,EAAAhjC,QACA2mC,EAAAD,EACAE,EAAA,EACAH,EAAAE,GACA5D,EAAAO,UAAAsD,EAAAD,IACA3D,EAAAM,UAAAsD,EAAAD,IACAF,EAAAE,EACAC,EAAAH,GAEAC,EAAAC,EAEAA,EAAAjgC,KAAAi8B,OAAA+D,EAAAD,GAAA,EAAAA,EAEA,OAAAE,GAUA,QAAApD,GAAAR,EAAAC,GAEA,IAAAD,IAAAC,GACAD,EAAA8C,OAAA9C,EAAA/iC,OAAA,IAAAgjC,EAAA6C,OAAA7C,EAAAhjC,OAAA,GACA,QAQA,KAJA,GAAAymC,GAAA,EACAC,EAAAhgC,KAAAC,IAAAo8B,EAAA/iC,OAAAgjC,EAAAhjC,QACA2mC,EAAAD,EACAG,EAAA,EACAJ,EAAAE,GACA5D,EAAAO,UAAAP,EAAA/iC,OAAA2mC,EAAA5D,EAAA/iC,OAAA6mC,IACA7D,EAAAM,UAAAN,EAAAhjC,OAAA2mC,EAAA3D,EAAAhjC,OAAA6mC,IACAJ,EAAAE,EACAE,EAAAJ,GAEAC,EAAAC,EAEAA,EAAAjgC,KAAAi8B,OAAA+D,EAAAD,GAAA,EAAAA,EAEA,OAAAE,GAcA,QAAAxC,GAAApB,EAAAC,GAmBA,QAAA8D,GAAA9C,EAAAC,EAAAtpC,GAMA,IAJA,GAGAosC,GAAAC,EAAAC,EAAAC,EAHAC,EAAAnD,EAAAV,UAAA3oC,IAAA+L,KAAAi8B,MAAAqB,EAAAhkC,OAAA,IACAonC,GAAA,EACAC,EAAA,IAEA,IAAAD,EAAAnD,EAAAj5B,QAAAm8B,EAAAC,EAAA,MACA,GAAAE,GAAAlE,EAAAY,EAAAV,UAAA3oC,GACAspC,EAAAX,UAAA8D,IACAG,EAAAhE,EAAAS,EAAAV,UAAA,EAAA3oC,GACAspC,EAAAX,UAAA,EAAA8D,GACAC,GAAArnC,OAAAunC,EAAAD,IACAD,EAAApD,EAAAX,UAAA8D,EAAAG,EAAAH,GACAnD,EAAAX,UAAA8D,IAAAE,GACAP,EAAA/C,EAAAV,UAAA,EAAA3oC,EAAA4sC,GACAP,EAAAhD,EAAAV,UAAA3oC,EAAA2sC,GACAL,EAAAhD,EAAAX,UAAA,EAAA8D,EAAAG,GACAL,EAAAjD,EAAAX,UAAA8D,EAAAE,IAGA,SAAAD,EAAArnC,QAAAgkC,EAAAhkC,QACA+mC,EAAAC,EACAC,EAAAC,EAAAG,GAEA,KA1CA,GAAArD,GAAAjB,EAAA/iC,OAAAgjC,EAAAhjC,OAAA+iC,EAAAC,EACAiB,EAAAlB,EAAA/iC,OAAAgjC,EAAAhjC,OAAAgjC,EAAAD,CACA,IAAAiB,EAAAhkC,OAAA,KAAAikC,EAAAjkC,OAAAgkC,EAAAhkC,OACA,WA4CA,IAKAkkC,GALAsD,EAAAV,EAAA9C,EAAAC,EACAv9B,KAAAq+B,KAAAf,EAAAhkC,OAAA,IAEAynC,EAAAX,EAAA9C,EAAAC,EACAv9B,KAAAq+B,KAAAf,EAAAhkC,OAAA,GAEA,KAAAwnC,IAAAC,EACA,WAOAvD,GANGuD,EAEAD,GAIHA,EAAA,GAAAxnC,OAAAynC,EAAA,GAAAznC,OAAAwnC,EAHAC,EAFAD,CASA,IAAApD,GAAAC,EAAAC,EAAAC,CAaA,OAZAxB,GAAA/iC,OAAAgjC,EAAAhjC,QACAokC,EAAAF,EAAA,GACAG,EAAAH,EAAA,GACAI,EAAAJ,EAAA,GACAK,EAAAL,EAAA,KAEAI,EAAAJ,EAAA,GACAK,EAAAL,EAAA,GACAE,EAAAF,EAAA,GACAG,EAAAH,EAAA,KAGAE,EAAAC,EAAAC,EAAAC,EADAL,EAAA,IAUA,QAAAP,GAAAF,GACAA,EAAAr7B,MAAA86B,EAAA,IAOA,KANA,GAKAC,GALAuE,EAAA,EACAC,EAAA,EACAC,EAAA,EACAC,EAAA,GACAC,EAAA,GAEAJ,EAAAjE,EAAAzjC,QACA,OAAAyjC,EAAAiE,GAAA,IACA,IAAA5D,GACA8D,IACAE,GAAArE,EAAAiE,GAAA,GACAA,GACA,MACA,KAAA3D,GACA4D,IACAE,GAAApE,EAAAiE,GAAA,GACAA,GACA,MACA,KAAAxE,GAEAyE,EAAAC,EAAA,GACA,IAAAD,GAAA,IAAAC,IAEAzE,EAAAC,EAAA0E,EAAAD,GACA,IAAA1E,IACAuE,EAAAC,EAAAC,EAAA,GACAnE,EAAAiE,EAAAC,EAAAC,EAAA,OACA1E,EACAO,EAAAiE,EAAAC,EAAAC,EAAA,OACAE,EAAAxE,UAAA,EAAAH,IAEAM,EAAAh7B,OAAA,KAAAy6B,EACA4E,EAAAxE,UAAA,EAAAH,KACAuE,KAEAI,IAAAxE,UAAAH,GACA0E,IAAAvE,UAAAH,IAIA,KADAA,EAAAI,EAAAuE,EAAAD,MAEApE,EAAAiE,GAAA,GAAAI,EAAAxE,UAAAwE,EAAA9nC,OACAmjC,GAAAM,EAAAiE,GAAA,GACAI,IAAAxE,UAAA,EAAAwE,EAAA9nC,OACAmjC,GACA0E,IAAAvE,UAAA,EAAAuE,EAAA7nC,OACAmjC,KAIA,IAAAwE,EACAlE,EAAAh7B,OAAAi/B,EAAAE,EACAD,EAAAC,GAAA9D,EAAAgE,IACW,IAAAF,EACXnE,EAAAh7B,OAAAi/B,EAAAC,EACAA,EAAAC,GAAA7D,EAAA8D,IAEApE,EAAAh7B,OAAAi/B,EAAAC,EAAAC,EACAD,EAAAC,GAAA7D,EAAA8D,IACA/D,EAAAgE,IAEAJ,IAAAC,EAAAC,GACAD,EAAA,MAAAC,EAAA,QACS,IAAAF,GAAAjE,EAAAiE,EAAA,OAAAxE,GAETO,EAAAiE,EAAA,OAAAjE,EAAAiE,GAAA,GACAjE,EAAAh7B,OAAAi/B,EAAA,IAEAA,IAEAE,EAAA,EACAD,EAAA,EACAE,EAAA,GACAC,EAAA,GAIA,KAAArE,IAAAzjC,OAAA,OACAyjC,EAAA96B,KAMA,IAAAo/B,IAAA,CAGA,KAFAL,EAAA,EAEAA,EAAAjE,EAAAzjC,OAAA,GACAyjC,EAAAiE,EAAA,OAAAxE,GACAO,EAAAiE,EAAA,OAAAxE,IAEAO,EAAAiE,GAAA,GAAApE,UAAAG,EAAAiE,GAAA,GAAA1nC,OACAyjC,EAAAiE,EAAA,MAAA1nC,SAAAyjC,EAAAiE,EAAA,OAEAjE,EAAAiE,GAAA,GAAAjE,EAAAiE,EAAA,MACAjE,EAAAiE,GAAA,GAAApE,UAAA,EAAAG,EAAAiE,GAAA,GAAA1nC,OACAyjC,EAAAiE,EAAA,MAAA1nC,QACAyjC,EAAAiE,EAAA,MAAAjE,EAAAiE,EAAA,MAAAjE,EAAAiE,EAAA,MACAjE,EAAAh7B,OAAAi/B,EAAA,KACAK,GAAA,GACOtE,EAAAiE,GAAA,GAAApE,UAAA,EAAAG,EAAAiE,EAAA,MAAA1nC,SACPyjC,EAAAiE,EAAA,QAEAjE,EAAAiE,EAAA,OAAAjE,EAAAiE,EAAA,MACAjE,EAAAiE,GAAA,GACAjE,EAAAiE,GAAA,GAAApE,UAAAG,EAAAiE,EAAA,MAAA1nC,QACAyjC,EAAAiE,EAAA,MACAjE,EAAAh7B,OAAAi/B,EAAA,KACAK,GAAA,IAGAL,GAGAK,IACApE,EAAAF,GAwBA,QAAAuE,GAAAvE,EAAAR,GACA,OAAAA,EACA,OAAAC,EAAAO,EAEA,QAAAwE,GAAA,EAAAttC,EAAA,EAAkCA,EAAA8oC,EAAAzjC,OAAkBrF,IAAA,CACpD,GAAAK,GAAAyoC,EAAA9oC,EACA,IAAAK,EAAA,KAAA+oC,GAAA/oC,EAAA,KAAAkoC,EAAA,CACA,GAAAgF,GAAAD,EAAAjtC,EAAA,GAAAgF,MACA,IAAAijC,IAAAiF,EACA,OAAAvtC,EAAA,EAAA8oC,EACO,IAAAR,EAAAiF,EAAA,CAEPzE,IAAAx9B,OAEA,IAAAkiC,GAAAlF,EAAAgF,EACAG,GAAAptC,EAAA,GAAAA,EAAA,GAAAiL,MAAA,EAAAkiC,IACAE,GAAArtC,EAAA,GAAAA,EAAA,GAAAiL,MAAAkiC,GAEA,OADA1E,GAAAh7B,OAAA9N,EAAA,EAAAytC,EAAAC,IACA1tC,EAAA,EAAA8oC,GAEAwE,EAAAC,GAIA,SAAA3mC,OAAA,gCAqBA,QAAAqiC,GAAAH,EAAAR,GACA,GAAAqF,GAAAN,EAAAvE,EAAAR,GACAsF,EAAAD,EAAA,GACAE,EAAAF,EAAA,GACAttC,EAAAutC,EAAAC,GACAC,EAAAF,EAAAC,EAAA,EAEA,UAAAxtC,EAGA,MAAAyoC,EACG,IAAAzoC,EAAA,KAAAkoC,EAGH,MAAAO,EAEA,UAAAgF,GAAAztC,EAAA,GAAAytC,EAAA,KAAAA,EAAA,GAAAztC,EAAA,GAIA,MADAutC,GAAA9/B,OAAA+/B,EAAA,EAAAC,EAAAztC,GACA0tC,EAAAH,EAAAC,EAAA,EACK,UAAAC,GAAA,IAAAA,EAAA,GAAAz9B,QAAAhQ,EAAA,KAKLutC,EAAA9/B,OAAA+/B,EAAA,GAAAC,EAAA,GAAAztC,EAAA,OAAAA,EAAA,IACA,IAAAqwB,GAAAod,EAAA,GAAAxiC,MAAAjL,EAAA,GAAAgF,OAIA,OAHAqrB,GAAArrB,OAAA,GACAuoC,EAAA9/B,OAAA+/B,EAAA,KAAAC,EAAA,GAAApd,IAEAqd,EAAAH,EAAAC,EAAA,GAGA,MAAA/E,GAaA,QAAAI,GAAAJ,GAQA,OAPAkF,IAAA,EACAC,EAAA,SAAAC,GACA,MAAAA,GAAAhc,WAAA,WAAAgc,EAAAhc,WAAA,WAKAlyB,EAAA,EAAiBA,EAAA8oC,EAAAzjC,OAAkBrF,GAAA,EACnC8oC,EAAA9oC,EAAA,QAAAuoC,GAJA,SAAA2F,GACA,MAAAA,GAAAhc,WAAAgc,EAAA7oC,OAAA,WAAA6oC,EAAAhc,WAAAgc,EAAA7oC,OAAA,WAGAyjC,EAAA9oC,EAAA,QACA8oC,EAAA9oC,EAAA,QAAAopC,GAAA6E,EAAAnF,EAAA9oC,EAAA,QACA8oC,EAAA9oC,GAAA,KAAAmpC,GAAA8E,EAAAnF,EAAA9oC,GAAA,MACAguC,GAAA,EAEAlF,EAAA9oC,EAAA,MAAA8oC,EAAA9oC,EAAA,MAAAsL,OAAA,GAAAw9B,EAAA9oC,EAAA,MACA8oC,EAAA9oC,GAAA,GAAA8oC,EAAA9oC,EAAA,MAAAsL,OAAA,GAAAw9B,EAAA9oC,GAAA,GAEA8oC,EAAA9oC,EAAA,MAAA8oC,EAAA9oC,EAAA,MAAAsL,MAAA,MAGA,KAAA0iC,EACA,MAAAlF,EAGA,QADAqF,MACAnuC,EAAA,EAAiBA,EAAA8oC,EAAAzjC,OAAkBrF,GAAA,EACnC8oC,EAAA9oC,GAAA,GAAAqF,OAAA,GACA8oC,EAAA1gC,KAAAq7B,EAAA9oC,GAGA,OAAAmuC,GAYA,QAAAJ,GAAAjF,EAAAr6B,EAAApJ,GAEA,OAAArF,GAAAyO,EAAApJ,EAAA,EAAkCrF,GAAA,GAAAA,GAAAyO,EAAA,EAA0BzO,IAC5D,GAAAA,EAAA,EAAA8oC,EAAAzjC,OAAA,CACA,GAAA+oC,GAAAtF,EAAA9oC,GACAquC,EAAAvF,EAAA9oC,EAAA,EACAouC,GAAA,KAAAC,EAAA,IACAvF,EAAAh7B,OAAA9N,EAAA,GAAAouC,EAAA,GAAAA,EAAA,GAAAC,EAAA,KAIA,MAAAvF,GAjsBA,GAAAM,IAAA,EACAD,EAAA,EACAZ,EAAA,EA4hBAx7B,EAAAo7B,CACAp7B,GAAAgD,OAAAo5B,EACAp8B,EAAAiD,OAAAo5B,EACAr8B,EAAAkD,MAAAs4B,EAEAhpC,EAAAD,QAAAyN,GxDi0OM,SAAUxN,EAAQD,GyD/3PxB,QAAAgvC,GAAApnC,GACA,GAAAsG,KACA,QAAAnG,KAAAH,GAAAsG,EAAAC,KAAApG,EACA,OAAAmG,GAPAlO,EAAAC,EAAAD,QAAA,kBAAAmB,QAAA+M,KACA/M,OAAA+M,KAAA8gC,EAEAhvC,EAAAgvC,QzD+4PM,SAAU/uC,EAAQD,G0D34PxB,QAAAivC,GAAAvtC,GACA,4BAAAP,OAAAS,UAAA6F,SAAA7G,KAAAc,GAIA,QAAAwtC,GAAAxtC,GACA,MAAAA,IACA,gBAAAA,IACA,gBAAAA,GAAAqE,QACA5E,OAAAS,UAAAC,eAAAjB,KAAAc,EAAA,YACAP,OAAAS,UAAAutC,qBAAAvuC,KAAAc,EAAA,YACA,EAlBA,GAAA0tC,GAEC,sBAFD,WACA,MAAAjuC,QAAAS,UAAA6F,SAAA7G,KAAAkF,aAGA9F,GAAAC,EAAAD,QAAAovC,EAAAH,EAAAC,EAEAlvC,EAAAivC,YAKAjvC,EAAAkvC,e1Di6PM,SAAUjvC,EAAQD,EAASO,GAEjC,YAqDA,SAASiI,GAAuBZ,GAAO,MAAOA,IAAOA,EAAInG,WAAamG,GAAQvE,QAASuE,GAEvF,QAASkK,GAAgBlK,EAAKG,EAAK/F,GAAiK,MAApJ+F,KAAOH,GAAOzG,OAAOC,eAAewG,EAAKG,GAAO/F,MAAOA,EAAOV,YAAY,EAAMD,cAAc,EAAM6H,UAAU,IAAkBtB,EAAIG,GAAO/F,EAAgB4F,EAE3M,QAASa,GAAgBC,EAAUC,GAAe,KAAMD,YAAoBC,IAAgB,KAAM,IAAIC,WAAU,qC2DtwPhH,QAASymC,GAAejmC,EAASkmC,GAC/B,MAAOnuC,QAAO+M,KAAKohC,GAAU/iC,OAAO,SAASgjC,EAAQvuC,GACnD,MAAqB,OAAjBoI,EAAQpI,GAAsBuuC,GAC9BD,EAAStuC,KAAUoI,EAAQpI,GAC7BuuC,EAAOvuC,GAAQsuC,EAAStuC,GACfsF,MAAMC,QAAQ+oC,EAAStuC,IAC5BsuC,EAAStuC,GAAM+P,QAAQ3H,EAAQpI,IAAS,IAC1CuuC,EAAOvuC,GAAQsuC,EAAStuC,GAAMkP,QAAQ9G,EAAQpI,MAGhDuuC,EAAOvuC,IAASsuC,EAAStuC,GAAOoI,EAAQpI,IAEnCuuC,QAIX,QAASC,GAAenjC,GACtB,MAAOA,GAAME,OAAO,SAASF,EAAOsB,GAClC,GAAkB,IAAdA,EAAGvC,OAAc,CACnB,GAAIpG,IAAa,EAAAkmB,EAAA7nB,SAAMsK,EAAG3I,WAE1B,cADOA,GAAA,MACAqH,EAAMjB,QAASusB,MAAOhqB,EAAG3I,WAAW2yB,OAAS3yB,GAWtD,GATqB,MAAjB2I,EAAG3I,aAA8C,IAAvB2I,EAAG3I,WAAWkwB,OAA0C,IAAzBvnB,EAAG3I,WAAWgzB,SACzErqB,GAAK,EAAAud,EAAA7nB,SAAMsK,GACPA,EAAG3I,WAAWkwB,KAChBvnB,EAAG3I,WAAWkwB,KAAO,WAErBvnB,EAAG3I,WAAWkwB,KAAO,eACdvnB,GAAG3I,WAAWgzB,SAGA,gBAAdrqB,GAAGvC,OAAqB,CACjC,GAAIwB,GAAOe,EAAGvC,OAAOqU,QAAQ,QAAS,MAAMA,QAAQ,MAAO,KAC3D,OAAOpT,GAAMjB,OAAOwB,EAAMe,EAAG3I,YAE/B,MAAOqH,GAAM8B,KAAKR,IACjB,GAAAnD,GAAAnH,S3D2qPLlC,OAAOC,eAAepB,EAAS,cAC7BgC,OAAO,GAGT,IAAI6S,GAA4B,kBAAXW,SAAoD,gBAApBA,QAAOjG,SAAwB,SAAU3H,GAAO,aAAcA,IAAS,SAAUA,GAAO,MAAOA,IAAyB,kBAAX4N,SAAyB5N,EAAIV,cAAgBsO,QAAU5N,IAAQ4N,OAAO5T,UAAY,eAAkBgG,IAElQsN,EAAiB,WAAc,QAASO,GAAc/N,EAAKhH,GAAK,GAAIgV,MAAeC,GAAK,EAAUC,GAAK,EAAWC,MAAKxM,EAAW,KAAM,IAAK,GAAiCyM,GAA7BjQ,EAAK6B,EAAI8N,OAAOjG,cAAmBoG,GAAMG,EAAKjQ,EAAGiG,QAAQiK,QAAoBL,EAAKvH,KAAK2H,EAAG9T,QAAYtB,GAAKgV,EAAK3P,SAAWrF,GAA3DiV,GAAK,IAAoE,MAAOK,GAAOJ,GAAK,EAAMC,EAAKG,EAAO,QAAU,KAAWL,GAAM9P,EAAW,QAAGA,EAAW,SAAO,QAAU,GAAI+P,EAAI,KAAMC,IAAQ,MAAOH,GAAQ,MAAO,UAAUhO,EAAKhH,GAAK,GAAI4F,MAAMC,QAAQmB,GAAQ,MAAOA,EAAY,IAAI8N,OAAOjG,WAAYpO,QAAOuG,GAAQ,MAAO+N,GAAc/N,EAAKhH,EAAa,MAAM,IAAIkI,WAAU,4DAEllBc,EAAe,WAAc,QAASC,GAAiBrB,EAAQsB,GAAS,IAAK,GAAIlJ,GAAI,EAAGA,EAAIkJ,EAAM7D,OAAQrF,IAAK,CAAE,GAAImJ,GAAaD,EAAMlJ,EAAImJ,GAAWvI,WAAauI,EAAWvI,aAAc,EAAOuI,EAAWxI,cAAe,EAAU,SAAWwI,KAAYA,EAAWX,UAAW,GAAM/H,OAAOC,eAAekH,EAAQuB,EAAW9B,IAAK8B,IAAiB,MAAO,UAAUlB,EAAamB,EAAYC,GAAiJ,MAA9HD,IAAYH,EAAiBhB,EAAY/G,UAAWkI,GAAiBC,GAAaJ,EAAiBhB,EAAaoB,GAAqBpB,M2Dz7PhiB4B,EAAAhK,EAAA,G3D67PIiK,EAAehC,EAAuB+B,G2D57P1CuoB,EAAAvyB,EAAA,I3Dg8PIywB,EAAOxoB,EAAuBsqB,G2D/7PlCroB,EAAAlK,EAAA,G3Dm8PImK,EAAclC,EAAuBiC,G2Dl8PzCq2B,EAAAvgC,EAAA,I3Ds8PIwgC,EAASv4B,EAAuBs4B,G2Dr8PpC8D,EAAArkC,EAAA,I3Dy8PIskC,EAAWr8B,EAAuBo8B,G2Dx8PtC9jB,EAAAvgB,EAAA,G3D48PIwgB,EAAUvY,EAAuBsY,G2D38PrCnW,EAAApK,EAAA,I3D+8PIqK,EAAUpC,EAAuBmC,G2D98PrC4d,EAAAhoB,EAAA,I3Dk9PI2qB,EAAU1iB,EAAuB+f,G2Dj9PrC4C,EAAA5qB,EAAA,I3Dq9PI6qB,EAAc5iB,EAAuB2iB,G2Dp9PzC7gB,EAAA/J,EAAA,G3Dw9PI+I,EAAWd,EAAuB8B,G2Dr9PhCmlC,EAAQ,WAGRC,E3D49PO,W2D39PX,QAAAA,GAAYv4B,GAAQ1O,EAAApI,KAAAqvC,GAClBrvC,KAAK8W,OAASA,EACd9W,KAAKgM,MAAQhM,KAAKsvC,W3D2tQpB,MA1PAjmC,GAAagmC,IACX3nC,IAAK,aACL/F,MAAO,S2Dh+PEqK,GAAO,GAAAhF,GAAAhH,KACZuvC,GAAqB,CACzBvvC,MAAK8W,OAAOY,QACZ,IAAI4U,GAAetsB,KAAK8W,OAAOpR,QA4C/B,OA3CA1F,MAAK8W,OAAO04B,aACZxjC,EAAQmjC,EAAenjC,GACvBA,EAAME,OAAO,SAACf,EAAOmC,GACnB,GAAI5H,GAAS4H,EAAGU,QAAUV,EAAGS,QAAUT,EAAGvC,OAAOrF,QAAU,EACvDf,EAAa2I,EAAG3I,cACpB,IAAiB,MAAb2I,EAAGvC,OAAgB,CACrB,GAAyB,gBAAduC,GAAGvC,OAAqB,CACjC,GAAIwB,GAAOe,EAAGvC,MACVwB,GAAKjB,SAAS,OAASikC,IACzBA,GAAqB,EACrBhjC,EAAOA,EAAKZ,MAAM,GAAI,IAEpBR,GAASmhB,IAAiB/f,EAAKjB,SAAS,QAC1CikC,GAAqB,GAEvBvoC,EAAK8P,OAAOpL,SAASP,EAAOoB,EATK,IAAA8hB,GAUZrnB,EAAK8P,OAAOnK,KAAKxB,GAVLmjB,EAAAzZ,EAAAwZ,EAAA,GAU5B1hB,EAV4B2hB,EAAA,GAUtBxd,EAVsBwd,EAAA,GAW7BvlB,GAAU,EAAAE,EAAAjG,aAAW,EAAAyd,EAAA3X,eAAc6D,GACvC,IAAIA,uBAAuB,IAAA8iC,GACV9iC,EAAKsU,WAAW5W,EAAArH,QAAUE,KAAM4N,GADtB4+B,EAAA76B,EAAA46B,EAAA,GACpBtjC,EADoBujC,EAAA,EAEzB3mC,IAAU,EAAAE,EAAAjG,SAAO+F,GAAS,EAAA0X,EAAA3X,eAAcqD,IAE1CxH,EAAagsB,EAAA3tB,QAAQ2B,WAAWyI,KAAKrE,EAASpE,WACzC,IAAyB,WAArB6P,EAAOlH,EAAGvC,QAAqB,CACxC,GAAIrD,GAAM5G,OAAO+M,KAAKP,EAAGvC,QAAQ,EACjC,IAAW,MAAPrD,EAAa,MAAOyD,EACxBnE,GAAK8P,OAAOpL,SAASP,EAAOzD,EAAK4F,EAAGvC,OAAOrD,IAE7C4kB,GAAgB5mB,EAKlB,MAHA5E,QAAO+M,KAAKlJ,GAAY0B,QAAQ,SAAC1F,GAC/BqG,EAAK8P,OAAO0K,SAASrW,EAAOzF,EAAQ/E,EAAMgE,EAAWhE,MAEhDwK,EAAQzF,GACd,GACHsG,EAAME,OAAO,SAACf,EAAOmC,GACnB,MAAyB,gBAAdA,GAAGS,QACZ/G,EAAK8P,OAAOqK,SAAShW,EAAOmC,EAAGS,QACxB5C,GAEFA,GAASmC,EAAGU,QAAUV,EAAGvC,OAAOrF,QAAU,IAChD,GACH1F,KAAK8W,OAAO64B,WACL3vC,KAAK0X,OAAO1L,M3D6+PnBtE,IAAK,aACL/F,MAAO,S2D3+PEwJ,EAAOzF,GAEhB,MADA1F,MAAK8W,OAAOqK,SAAShW,EAAOzF,GACrB1F,KAAK0X,QAAO,GAAAvN,GAAAnH,SAAYgL,OAAO7C,GAAO4C,OAAOrI,O3D8+PpDgC,IAAK,aACL/F,MAAO,S2D5+PEwJ,EAAOzF,GAAsB,GAAAoG,GAAA9L,KAAd+I,EAActD,UAAAC,OAAA,OAAAsD,KAAAvD,UAAA,GAAAA,UAAA,KAmBtC,OAlBAzF,MAAK8W,OAAOY,SACZ5W,OAAO+M,KAAK9E,GAAS1C,QAAQ,SAAC+E,GAC5B,GAA6B,MAAzBU,EAAKgL,OAAOC,WAAsBjL,EAAKgL,OAAOC,UAAU3L,GAA5D,CACA,GAAIkB,GAAQR,EAAKgL,OAAOxK,MAAMnB,EAAOiB,KAAK2I,IAAIrP,EAAQ,IAClDkqC,EAAkBlqC,CACtB4G,GAAMjG,QAAQ,SAACsG,GACb,GAAIkjC,GAAaljC,EAAKjH,QACtB,IAAMiH,uBAEC,CACL,GAAImjC,GAAY3kC,EAAQwB,EAAKmE,OAAOhF,EAAKgL,QACrCi5B,EAAapjC,EAAK0U,aAAayuB,EAAYF,GAAmBE,EAAY,CAC9EnjC,GAAK6U,SAASsuB,EAAWC,EAAY3kC,EAAQrC,EAAQqC,QAJrDuB,GAAKvB,OAAOA,EAAQrC,EAAQqC,GAM9BwkC,IAAmBC,OAGvB7vC,KAAK8W,OAAOiL,WACL/hB,KAAK0X,QAAO,GAAAvN,GAAAnH,SAAYgL,OAAO7C,GAAO6C,OAAOtI,GAAQ,EAAAmlB,EAAA7nB,SAAM+F,Q3Dm/PlErB,IAAK,aACL/F,MAAO,S2Dj/PEwJ,EAAOzF,GAAsB,GAAAkT,GAAA5Y,KAAd+I,EAActD,UAAAC,OAAA,OAAAsD,KAAAvD,UAAA,GAAAA,UAAA,KAItC,OAHA3E,QAAO+M,KAAK9E,GAAS1C,QAAQ,SAAC+E,GAC5BwN,EAAK9B,OAAO0K,SAASrW,EAAOzF,EAAQ0F,EAAQrC,EAAQqC,MAE/CpL,KAAK0X,QAAO,GAAAvN,GAAAnH,SAAYgL,OAAO7C,GAAO6C,OAAOtI,GAAQ,EAAAmlB,EAAA7nB,SAAM+F,Q3Dw/PlErB,IAAK,cACL/F,MAAO,S2Dt/PGwJ,EAAOzF,GACjB,MAAO1F,MAAKgM,MAAML,MAAMR,EAAOA,EAAQzF,M3Dy/PvCgC,IAAK,WACL/F,MAAO,W2Dt/PP,MAAO3B,MAAK8W,OAAOxK,QAAQJ,OAAO,SAACF,EAAOW,GACxC,MAAOX,GAAM6D,OAAOlD,EAAKX,UACxB,GAAA7B,GAAAnH,Y3D0/PH0E,IAAK,YACL/F,MAAO,S2Dx/PCwJ,GAAmB,GAAZzF,GAAYD,UAAAC,OAAA,OAAAsD,KAAAvD,UAAA,GAAAA,UAAA,GAAH,EACpB6G,KAAY0jC,IACD,KAAXtqC,EACF1F,KAAK8W,OAAOuB,KAAKlN,GAAO9E,QAAQ,SAASgS,GAAM,GAAA43B,GAAAp7B,EAC9BwD,EAD8B,GACxC/T,EADwC2rC,EAAA,EAEzC3rC,wBACFgI,EAAMwB,KAAKxJ,GACFA,YAAgB+F,GAAArH,QAAUE,MACnC8sC,EAAOliC,KAAKxJ,MAIhBgI,EAAQtM,KAAK8W,OAAOxK,MAAMnB,EAAOzF,GACjCsqC,EAAShwC,KAAK8W,OAAO7K,YAAY5B,EAAArH,QAAUE,KAAMiI,EAAOzF,GAE1D,IAAIwqC,IAAc5jC,EAAO0jC,GAAQrqC,IAAI,SAASwqC,GAC5C,GAAqB,IAAjBA,EAAMzqC,OAAc,QAExB,KADA,GAAIqD,IAAU,EAAA0X,EAAA3X,eAAcqnC,EAAM3jC,SAC3B1L,OAAO+M,KAAK9E,GAASrD,OAAS,GAAG,CACtC,GAAIpB,GAAO6rC,EAAM3jC,OACjB,IAAY,MAARlI,EAAc,MAAOyE,EACzBA,GAAUimC,GAAe,EAAAvuB,EAAA3X,eAAcxE,GAAOyE,GAEhD,MAAOA,IAET,OAAOE,GAAAjG,QAAO6H,MAAP5B,EAAAjG,QAAqBktC,M3DggQ5BxoC,IAAK,UACL/F,MAAO,S2D9/PDwJ,EAAOzF,GACb,MAAO1F,MAAK2a,YAAYxP,EAAOzF,GAAQ4I,OAAO,SAAShB,GACrD,MAA4B,gBAAdA,GAAGvC,SAChBpF,IAAI,SAAS2H,GACd,MAAOA,GAAGvC,SACTiF,KAAK,O3DigQRtI,IAAK,cACL/F,MAAO,S2D//PGwJ,EAAOiQ,EAAOzZ,GAExB,MADA3B,MAAK8W,OAAOpL,SAASP,EAAOiQ,EAAOzZ,GAC5B3B,KAAK0X,QAAO,GAAAvN,GAAAnH,SAAYgL,OAAO7C,GAAOJ,OAA1B0G,KAAoC2J,EAAQzZ,Q3DkgQ/D+F,IAAK,aACL/F,MAAO,S2DhgQEwJ,EAAOoB,GAAoB,GAAA8M,GAAArZ,KAAd+I,EAActD,UAAAC,OAAA,OAAAsD,KAAAvD,UAAA,GAAAA,UAAA,KAMpC,OALA8G,GAAOA,EAAK6S,QAAQ,QAAS,MAAMA,QAAQ,MAAO,MAClDpf,KAAK8W,OAAOpL,SAASP,EAAOoB,GAC5BzL,OAAO+M,KAAK9E,GAAS1C,QAAQ,SAAC+E,GAC5BiO,EAAKvC,OAAO0K,SAASrW,EAAOoB,EAAK7G,OAAQ0F,EAAQrC,EAAQqC,MAEpDpL,KAAK0X,QAAO,GAAAvN,GAAAnH,SAAYgL,OAAO7C,GAAOJ,OAAOwB,GAAM,EAAAse,EAAA7nB,SAAM+F,Q3DugQhErB,IAAK,UACL/F,MAAO,W2DpgQP,GAAmC,GAA/B3B,KAAK8W,OAAOrK,SAAS/G,OAAa,OAAO,CAC7C,IAAI1F,KAAK8W,OAAOrK,SAAS/G,OAAS,EAAG,OAAO,CAC5C,IAAI6F,GAAQvL,KAAK8W,OAAOrK,SAASI,IACjC,OAAItB,GAAMpC,QAAQtD,WAAa6a,EAAA1d,QAAM6C,aACjC0F,EAAMkB,SAAS/G,OAAS,IACrB6F,EAAMkB,SAASI,eAAftC,GAAAvH,Y3DwgQP0E,IAAK,eACL/F,MAAO,S2DtgQIwJ,EAAOzF,GAClB,GAAI6G,GAAOvM,KAAKkb,QAAQ/P,EAAOzF,GADL+oB,EAELzuB,KAAK8W,OAAOnK,KAAKxB,EAAQzF,GAFpB0qC,EAAAv7B,EAAA4Z,EAAA,GAErB9hB,EAFqByjC,EAAA,GAEft/B,EAFes/B,EAAA,GAGtBnD,EAAe,EAAGlc,EAAS,GAAA5mB,GAAAnH,OACnB,OAAR2J,IAIAsgC,EAHItgC,uBAGWA,EAAK0U,aAAavQ,GAAUA,EAAS,EAFrCnE,EAAKjH,SAAWoL,EAIjCigB,EAASpkB,EAAKX,QAAQL,MAAMmF,EAAQA,EAASm8B,EAAe,GAAGliC,OAAO,MAExE,IAAI4M,GAAW3X,KAAK2a,YAAYxP,EAAOzF,EAASunC,GAC5C7/B,EAAOuK,EAASvK,MAAK,GAAAjD,GAAAnH,SAAY+H,OAAOwB,GAAMsD,OAAOkhB,IACrD/kB,GAAQ,GAAA7B,GAAAnH,SAAYgL,OAAO7C,GAAO0E,OAAOzC,EAC7C,OAAOpN,MAAKsc,WAAWtQ,M3D+gQvBtE,IAAK,SACL/F,MAAO,S2D7gQFgS,GAAiD,GAAzC6D,GAAyC/R,UAAAC,OAAA,OAAAsD,KAAAvD,UAAA,GAAAA,UAAA,MAAzB4qC,EAAyB5qC,UAAAC,OAAA,OAAAsD,KAAAvD,UAAA,GAAAA,UAAA,OAAXuD,GACvCyK,EAAWzT,KAAKgM,KACpB,IAAyB,IAArBwL,EAAU9R,QACY,kBAAtB8R,EAAU,GAAGJ,MACbI,EAAU,GAAGvP,OAAOokB,KAAKvoB,MAAMsrC,IAC/B/kC,EAAArH,QAAUJ,KAAK4U,EAAU,GAAGvP,QAAS,CAEvC,GAAIqoC,GAAWjmC,EAAArH,QAAUJ,KAAK4U,EAAU,GAAGvP,QACvCc,GAAU,EAAA0X,EAAA3X,eAAcwnC,GACxBnlC,EAAQmlC,EAASx/B,OAAO9Q,KAAK8W,QAC7By5B,EAAW/4B,EAAU,GAAG+4B,SAASnxB,QAAQolB,EAAAxhC,QAAWk2B,SAAU,IAC9DsX,GAAU,GAAArmC,GAAAnH,SAAY+H,OAAOwlC,GAC7BE,GAAU,GAAAtmC,GAAAnH,SAAY+H,OAAOulC,EAAS3uC,QAE1CgS,IADgB,GAAAxJ,GAAAnH,SAAYgL,OAAO7C,GAAO0E,OAAO2gC,EAAQpjC,KAAKqjC,EAASJ,IACpDnkC,OAAO,SAASF,EAAOsB,GACxC,MAAIA,GAAGvC,OACEiB,EAAMjB,OAAOuC,EAAGvC,OAAQhC,GAExBiD,EAAM8B,KAAKR,IAEnB,GAAAnD,GAAAnH,SACHhD,KAAKgM,MAAQyH,EAASpE,QAAQsE,OAE9B3T,MAAKgM,MAAQhM,KAAKsvC,WACb37B,IAAW,EAAAoX,EAAA/nB,SAAMyQ,EAASpE,QAAQsE,GAAS3T,KAAKgM,SACnD2H,EAASF,EAASrG,KAAKpN,KAAKgM,MAAOqkC,GAGvC,OAAO18B,O3DihQF07B,IA2CT1vC,GAAQqD,Q2D9gQOqsC,G3DkhQT,SAAUzvC,EAAQD,G4D5xQxB,YAYA,SAAA+wC,MA4BA,QAAAC,GAAAC,EAAA7jC,EAAA8O,GACA7b,KAAA4wC,KACA5wC,KAAA+M,UACA/M,KAAA6b,SAAA,EAUA,QAAAg1B,KACA7wC,KAAA8wC,QAAA,GAAAJ,GACA1wC,KAAA+wC,aAAA,EArDA,GAAAC,GAAAlwC,OAAAS,UAAAC,eACAqvB,EAAA,GAkBA/vB,QAAA6B,SACA+tC,EAAAnvC,UAAAT,OAAA6B,OAAA,OAMA,GAAA+tC,IAAAhqC,YAAAmqB,GAAA,IAqCAggB,EAAAtvC,UAAA0vC,WAAA,WACA,GACAh9B,GACAtT,EAFAqE,IAIA,QAAAhF,KAAA+wC,aAAA,MAAA/rC,EAEA,KAAArE,IAAAsT,GAAAjU,KAAA8wC,QACAE,EAAAzwC,KAAA0T,EAAAtT,IAAAqE,EAAA8I,KAAA+iB,EAAAlwB,EAAAgL,MAAA,GAAAhL,EAGA,OAAAG,QAAA2oB,sBACAzkB,EAAA6K,OAAA/O,OAAA2oB,sBAAAxV,IAGAjP,GAWA6rC,EAAAtvC,UAAAsc,UAAA,SAAAE,EAAAmzB,GACA,GAAA7d,GAAAxC,IAAA9S,IACAozB,EAAAnxC,KAAA8wC,QAAAzd,EAEA,IAAA6d,EAAA,QAAAC,CACA,KAAAA,EAAA,QACA,IAAAA,EAAAP,GAAA,OAAAO,EAAAP,GAEA,QAAAvwC,GAAA,EAAAC,EAAA6wC,EAAAzrC,OAAA0rC,EAAA,GAAAnrC,OAAA3F,GAA0DD,EAAAC,EAAOD,IACjE+wC,EAAA/wC,GAAA8wC,EAAA9wC,GAAAuwC,EAGA,OAAAQ,IAUAP,EAAAtvC,UAAA6S,KAAA,SAAA2J,EAAAszB,EAAAC,EAAAC,EAAAC,EAAAC,GACA,GAAApe,GAAAxC,IAAA9S,GAEA,KAAA/d,KAAA8wC,QAAAzd,GAAA,QAEA,IAEArf,GACA3T,EAHAwd,EAAA7d,KAAA8wC,QAAAzd,GACAqe,EAAAjsC,UAAAC,MAIA,IAAAmY,EAAA+yB,GAAA,CAGA,OAFA/yB,EAAAhC,MAAA7b,KAAA2xC,eAAA5zB,EAAAF,EAAA+yB,OAAA5nC,IAAA,GAEA0oC,GACA,aAAA7zB,GAAA+yB,GAAArwC,KAAAsd,EAAA9Q,UAAA,CACA,cAAA8Q,GAAA+yB,GAAArwC,KAAAsd,EAAA9Q,QAAAskC,IAAA,CACA,cAAAxzB,GAAA+yB,GAAArwC,KAAAsd,EAAA9Q,QAAAskC,EAAAC,IAAA,CACA,cAAAzzB,GAAA+yB,GAAArwC,KAAAsd,EAAA9Q,QAAAskC,EAAAC,EAAAC,IAAA,CACA,cAAA1zB,GAAA+yB,GAAArwC,KAAAsd,EAAA9Q,QAAAskC,EAAAC,EAAAC,EAAAC,IAAA,CACA,cAAA3zB,GAAA+yB,GAAArwC,KAAAsd,EAAA9Q,QAAAskC,EAAAC,EAAAC,EAAAC,EAAAC,IAAA,EAGA,IAAApxC,EAAA,EAAA2T,EAAA,GAAA/N,OAAAyrC,EAAA,GAAyCrxC,EAAAqxC,EAASrxC,IAClD2T,EAAA3T,EAAA,GAAAoF,UAAApF,EAGAwd,GAAA+yB,GAAA/lC,MAAAgT,EAAA9Q,QAAAiH,OACG,CACH,GACA84B,GADApnC,EAAAmY,EAAAnY,MAGA,KAAArF,EAAA,EAAeA,EAAAqF,EAAYrF,IAG3B,OAFAwd,EAAAxd,GAAAwb,MAAA7b,KAAA2xC,eAAA5zB,EAAAF,EAAAxd,GAAAuwC,OAAA5nC,IAAA,GAEA0oC,GACA,OAAA7zB,EAAAxd,GAAAuwC,GAAArwC,KAAAsd,EAAAxd,GAAA0M,QAA2D,MAC3D,QAAA8Q,EAAAxd,GAAAuwC,GAAArwC,KAAAsd,EAAAxd,GAAA0M,QAAAskC,EAA+D,MAC/D,QAAAxzB,EAAAxd,GAAAuwC,GAAArwC,KAAAsd,EAAAxd,GAAA0M,QAAAskC,EAAAC,EAAmE,MACnE,QAAAzzB,EAAAxd,GAAAuwC,GAAArwC,KAAAsd,EAAAxd,GAAA0M,QAAAskC,EAAAC,EAAAC,EAAuE,MACvE,SACA,IAAAv9B,EAAA,IAAA84B,EAAA,EAAA94B,EAAA,GAAA/N,OAAAyrC,EAAA,GAA0D5E,EAAA4E,EAAS5E,IACnE94B,EAAA84B,EAAA,GAAArnC,UAAAqnC,EAGAjvB,GAAAxd,GAAAuwC,GAAA/lC,MAAAgT,EAAAxd,GAAA0M,QAAAiH,IAKA,UAYA68B,EAAAtvC,UAAA4V,GAAA,SAAA4G,EAAA6yB,EAAA7jC,GACA,GAAAkwB,GAAA,GAAA0T,GAAAC,EAAA7jC,GAAA/M,MACAqzB,EAAAxC,IAAA9S,GAMA,OAJA/d,MAAA8wC,QAAAzd,GACArzB,KAAA8wC,QAAAzd,GAAAud,GACA5wC,KAAA8wC,QAAAzd,IAAArzB,KAAA8wC,QAAAzd,GAAA4J,GADAj9B,KAAA8wC,QAAAzd,GAAAvlB,KAAAmvB,IADAj9B,KAAA8wC,QAAAzd,GAAA4J,EAAAj9B,KAAA+wC,gBAIA/wC,MAYA6wC,EAAAtvC,UAAAsa,KAAA,SAAAkC,EAAA6yB,EAAA7jC,GACA,GAAAkwB,GAAA,GAAA0T,GAAAC,EAAA7jC,GAAA/M,MAAA,GACAqzB,EAAAxC,IAAA9S,GAMA,OAJA/d,MAAA8wC,QAAAzd,GACArzB,KAAA8wC,QAAAzd,GAAAud,GACA5wC,KAAA8wC,QAAAzd,IAAArzB,KAAA8wC,QAAAzd,GAAA4J,GADAj9B,KAAA8wC,QAAAzd,GAAAvlB,KAAAmvB,IADAj9B,KAAA8wC,QAAAzd,GAAA4J,EAAAj9B,KAAA+wC,gBAIA/wC,MAaA6wC,EAAAtvC,UAAAowC,eAAA,SAAA5zB,EAAA6yB,EAAA7jC,EAAA8O,GACA,GAAAwX,GAAAxC,IAAA9S,GAEA,KAAA/d,KAAA8wC,QAAAzd,GAAA,MAAArzB,KACA,KAAA4wC,EAGA,MAFA,MAAA5wC,KAAA+wC,aAAA/wC,KAAA8wC,QAAA,GAAAJ,SACA1wC,MAAA8wC,QAAAzd,GACArzB,IAGA,IAAA6d,GAAA7d,KAAA8wC,QAAAzd,EAEA,IAAAxV,EAAA+yB,GAEA/yB,EAAA+yB,QACA/0B,IAAAgC,EAAAhC,MACA9O,GAAA8Q,EAAA9Q,cAEA,KAAA/M,KAAA+wC,aAAA/wC,KAAA8wC,QAAA,GAAAJ,SACA1wC,MAAA8wC,QAAAzd,QAEG,CACH,OAAAhzB,GAAA,EAAA4T,KAAAvO,EAAAmY,EAAAnY,OAA2DrF,EAAAqF,EAAYrF,KAEvEwd,EAAAxd,GAAAuwC,QACA/0B,IAAAgC,EAAAxd,GAAAwb,MACA9O,GAAA8Q,EAAAxd,GAAA0M,cAEAkH,EAAAnG,KAAA+P,EAAAxd,GAOA4T,GAAAvO,OAAA1F,KAAA8wC,QAAAzd,GAAA,IAAApf,EAAAvO,OAAAuO,EAAA,GAAAA,EACA,KAAAjU,KAAA+wC,aAAA/wC,KAAA8wC,QAAA,GAAAJ,SACA1wC,MAAA8wC,QAAAzd,GAGA,MAAArzB,OAUA6wC,EAAAtvC,UAAAqwC,mBAAA,SAAA7zB,GACA,GAAAsV,EAaA,OAXAtV,IACAsV,EAAAxC,IAAA9S,IACA/d,KAAA8wC,QAAAzd,KACA,KAAArzB,KAAA+wC,aAAA/wC,KAAA8wC,QAAA,GAAAJ,SACA1wC,MAAA8wC,QAAAzd,MAGArzB,KAAA8wC,QAAA,GAAAJ,GACA1wC,KAAA+wC,aAAA,GAGA/wC,MAMA6wC,EAAAtvC,UAAAqa,IAAAi1B,EAAAtvC,UAAAowC,eACAd,EAAAtvC,UAAAswC,YAAAhB,EAAAtvC,UAAA4V,GAKA05B,EAAAtvC,UAAAuwC,gBAAA,WACA,MAAA9xC,OAMA6wC,EAAAkB,SAAAlhB,EAKAggB,qBAKA,KAAAjxC,IACAA,EAAAD,QAAAkxC,I5DoyQM,SAAUjxC,EAAQD,EAASO,GAEjC,YAqCA,SAASiI,GAAuBZ,GAAO,MAAOA,IAAOA,EAAInG,WAAamG,GAAQvE,QAASuE,GAEvF,QAASa,GAAgBC,EAAUC,GAAe,KAAMD,YAAoBC,IAAgB,KAAM,IAAIC,WAAU,qCAEhH,QAASC,GAA2BzI,EAAMQ,GAAQ,IAAKR,EAAQ,KAAM,IAAI0I,gBAAe,4DAAgE,QAAOlI,GAAyB,gBAATA,IAAqC,kBAATA,GAA8BR,EAAPQ,EAElO,QAASmI,GAAUC,EAAUC,GAAc,GAA0B,kBAAfA,IAA4C,OAAfA,EAAuB,KAAM,IAAIL,WAAU,iEAAoEK,GAAeD,GAASpH,UAAYT,OAAO6B,OAAOiG,GAAcA,EAAWrH,WAAasF,aAAelF,MAAOgH,EAAU1H,YAAY,EAAO4H,UAAU,EAAM7H,cAAc,KAAe4H,IAAY9H,OAAO2F,eAAiB3F,OAAO2F,eAAekC,EAAUC,GAAcD,EAASjC,UAAYkC,G6D9nRje,QAASopC,GAAO1tC,GACd,MAAQA,yBAAyBA,0B7DqlRnCxD,OAAOC,eAAepB,EAAS,cAC7BgC,OAAO,GAGT,IAAIkT,GAAiB,WAAc,QAASO,GAAc/N,EAAKhH,GAAK,GAAIgV,MAAeC,GAAK,EAAUC,GAAK,EAAWC,MAAKxM,EAAW,KAAM,IAAK,GAAiCyM,GAA7BjQ,EAAK6B,EAAI8N,OAAOjG,cAAmBoG,GAAMG,EAAKjQ,EAAGiG,QAAQiK,QAAoBL,EAAKvH,KAAK2H,EAAG9T,QAAYtB,GAAKgV,EAAK3P,SAAWrF,GAA3DiV,GAAK,IAAoE,MAAOK,GAAOJ,GAAK,EAAMC,EAAKG,EAAO,QAAU,KAAWL,GAAM9P,EAAW,QAAGA,EAAW,SAAO,QAAU,GAAI+P,EAAI,KAAMC,IAAQ,MAAOH,GAAQ,MAAO,UAAUhO,EAAKhH,GAAK,GAAI4F,MAAMC,QAAQmB,GAAQ,MAAOA,EAAY,IAAI8N,OAAOjG,WAAYpO,QAAOuG,GAAQ,MAAO+N,GAAc/N,EAAKhH,EAAa,MAAM,IAAIkI,WAAU,4DAEllBc,EAAe,WAAc,QAASC,GAAiBrB,EAAQsB,GAAS,IAAK,GAAIlJ,GAAI,EAAGA,EAAIkJ,EAAM7D,OAAQrF,IAAK,CAAE,GAAImJ,GAAaD,EAAMlJ,EAAImJ,GAAWvI,WAAauI,EAAWvI,aAAc,EAAOuI,EAAWxI,cAAe,EAAU,SAAWwI,KAAYA,EAAWX,UAAW,GAAM/H,OAAOC,eAAekH,EAAQuB,EAAW9B,IAAK8B,IAAiB,MAAO,UAAUlB,EAAamB,EAAYC,GAAiJ,MAA9HD,IAAYH,EAAiBhB,EAAY/G,UAAWkI,GAAiBC,GAAaJ,EAAiBhB,EAAaoB,GAAqBpB,MAE5hBqB,EAAO,QAASzI,GAAIG,EAAQC,EAAUsI,GAA2B,OAAXvI,IAAiBA,EAASwI,SAAStI,UAAW,IAAIuI,GAAOhJ,OAAOiJ,yBAAyB1I,EAAQC,EAAW,QAAa0H,KAATc,EAAoB,CAAE,GAAIZ,GAASpI,OAAOkJ,eAAe3I,EAAS,OAAe,QAAX6H,MAAmB,GAAkChI,EAAIgI,EAAQ5H,EAAUsI,GAAoB,GAAI,SAAWE,GAAQ,MAAOA,GAAKnI,KAAgB,IAAIf,GAASkJ,EAAK5I,GAAK,QAAe8H,KAAXpI,EAA4C,MAAOA,GAAOL,KAAKqJ,I6DtmR5dQ,EAAAlK,EAAA,G7D0mRImK,EAAclC,EAAuBiC,G6DzmRzC2J,EAAA7T,EAAA,G7D6mRIoU,EAAYnM,EAAuB4L,G6D5mRvC0M,EAAAvgB,EAAA,G7DgnRIwgB,EAAUvY,EAAuBsY,G6D/mRrCnW,EAAApK,EAAA,I7DmnRIqK,EAAUpC,EAAuBmC,G6DlnRrCm2B,EAAAvgC,EAAA,I7DsnRIwgC,EAASv4B,EAAuBs4B,G6DrnRpC4D,EAAAnkC,EAAA,I7DynRIokC,EAAcn8B,EAAuBk8B,G6DjnRnCjhC,E7D+nRO,SAAU6uC,G6D9nRrB,QAAA7uC,GAAY0H,EAASwH,GAAQlK,EAAApI,KAAAoD,EAAA,IAAA4D,GAAAwB,EAAAxI,MAAAoD,EAAAsD,WAAA5F,OAAAkJ,eAAA5G,IAAA7C,KAAAP,KACrB8K,GADqB,OAE3B9D,GAAKmN,QAAU7B,EAAO6B,QAClBlO,MAAMC,QAAQoM,EAAOyE,aACvB/P,EAAK+P,UAAYzE,EAAOyE,UAAU7K,OAAO,SAAS6K,EAAW3L,GAE3D,MADA2L,GAAU3L,IAAU,EACb2L,QAIX/P,EAAK8D,QAAQuS,iBAAiB,kBAAmB,cACjDrW,EAAK+a,WACL/a,EAAKgS,SAZsBhS,E7D2zR7B,MA5LA0B,GAAUtF,EAAQ6uC,GAqBlB5oC,EAAajG,IACXsE,IAAK,aACL/F,MAAO,W6DtoRP3B,KAAKkyC,OAAQ,K7D0oRbxqC,IAAK,WACL/F,MAAO,W6DvoRP3B,KAAKkyC,OAAQ,EACblyC,KAAK+hB,c7D2oRLra,IAAK,WACL/F,MAAO,S6DzoRAwJ,EAAOzF,GAAQ,GAAAysC,GACAnyC,KAAK2M,KAAKxB,GADVinC,EAAAv9B,EAAAs9B,EAAA,GACjB5jB,EADiB6jB,EAAA,GACVthC,EADUshC,EAAA,GAAAC,EAEPryC,KAAK2M,KAAKxB,EAAQzF,GAFX4sC,EAAAz9B,EAAAw9B,EAAA,GAEjB7jB,EAFiB8jB,EAAA,EAItB,IADA3oC,EAAAvG,EAAA7B,UAAAmF,WAAA5F,OAAAkJ,eAAA5G,EAAA7B,WAAA,WAAAvB,MAAAO,KAAAP,KAAemL,EAAOzF,GACV,MAAR8oB,GAAgBD,IAAUC,GAAQ1d,EAAS,EAAG,CAChD,GAAIyd,2BAA+BC,0BAEjC,WADAxuB,MAAK+hB,UAGP,IAAIwM,uBAA4B,CAC9B,GAAIlN,GAAekN,EAAMlN,aAAakN,EAAM7oB,UAAU,EACtD,IAAI2b,GAAgB,IAClBkN,EAAQA,EAAMrpB,MAAMmc,EAAe,MACrBmN,EAEZ,WADAxuB,MAAK+hB,eAIJ,IAAIyM,uBAA2B,CACpC,GAAInN,GAAemN,EAAKnN,aAAa,EACjCA,IAAgB,GAClBmN,EAAKtpB,MAAMmc,EAAe,GAG9B,GAAIzU,GAAM4hB,EAAK/hB,SAASI,eAAdtC,GAAAvH,QAAsC,KAAOwrB,EAAK/hB,SAASI,IACrE0hB,GAAMld,aAAamd,EAAM5hB,GACzB2hB,EAAMzhB,SAER9M,KAAK+hB,c7DmpRLra,IAAK,SACL/F,MAAO,W6DjpRc,GAAhBsX,KAAgBxT,UAAAC,OAAA,OAAAsD,KAAAvD,UAAA,KAAAA,UAAA,EACrBzF,MAAK8K,QAAQ8L,aAAa,kBAAmBqC,M7DspR7CvR,IAAK,WACL/F,MAAO,S6DppRAwJ,EAAOzF,EAAQ0F,EAAQzJ,IACR,MAAlB3B,KAAK+W,WAAsB/W,KAAK+W,UAAU3L,MAC9CzB,EAAAvG,EAAA7B,UAAAmF,WAAA5F,OAAAkJ,eAAA5G,EAAA7B,WAAA,WAAAvB,MAAAO,KAAAP,KAAemL,EAAOzF,EAAQ0F,EAAQzJ,GACtC3B,KAAK+hB,e7DupRLra,IAAK,WACL/F,MAAO,S6DrpRAwJ,EAAOxJ,EAAO0J,GACrB,GAAW,MAAPA,GAAiC,MAAlBrL,KAAK+W,WAAsB/W,KAAK+W,UAAUpV,GAA7D,CACA,GAAIwJ,GAASnL,KAAK0F,SAChB,GAAW,MAAP2F,GAAgE,MAAjDhB,EAAArH,QAAUH,MAAMlB,EAAO0I,EAAArH,QAAUN,MAAMmC,OAAgB,CACxE,GAAIP,GAAO+F,EAAArH,QAAUL,OAAO3C,KAAKmJ,QAAQ+D,aACzClN,MAAK6hB,YAAYvd,GACN,MAAP+G,GAAe1J,EAAM2J,SAAS,QAChC3J,EAAQA,EAAMgK,MAAM,GAAI,IAE1BrH,EAAKoH,SAAS,EAAG/J,EAAO0J,OACnB,CACL,GAAI+P,GAAQ/Q,EAAArH,QAAUL,OAAOhB,EAAO0J,EACpCrL,MAAK6hB,YAAYzG,OAGnBzR,GAAAvG,EAAA7B,UAAAmF,WAAA5F,OAAAkJ,eAAA5G,EAAA7B,WAAA,WAAAvB,MAAAO,KAAAP,KAAemL,EAAOxJ,EAAO0J,EAE/BrL,MAAK+hB,e7DwpRLra,IAAK,eACL/F,MAAO,S6DtpRI2C,EAAMsI,GACjB,GAAItI,EAAK6E,QAAQ3E,QAAU6F,EAAArH,QAAUN,MAAM8kB,YAAa,CACtD,GAAIH,GAAUhd,EAAArH,QAAUL,OAAO3C,KAAKmJ,QAAQ+D,aAC5Cma,GAAQxF,YAAYvd,GACpBA,EAAO+iB,EAET1d,EAAAvG,EAAA7B,UAAAmF,WAAA5F,OAAAkJ,eAAA5G,EAAA7B,WAAA,eAAAvB,MAAAO,KAAAP,KAAmBsE,EAAMsI,M7DypRzBlF,IAAK,OACL/F,MAAO,S6DvpRJwJ,GACH,MAAOnL,MAAKqY,KAAKlN,GAAOkD,QAAU,MAAO,M7D0pRzC3G,IAAK,OACL/F,MAAO,S6DxpRJwJ,GACH,MAAIA,KAAUnL,KAAK0F,SACV1F,KAAK2M,KAAKxB,EAAQ,GAEpBnL,KAAKihB,WAAW+wB,EAAQ7mC,M7D2pR/BzD,IAAK,QACL/F,MAAO,W6DzpRmC,GAAtCwJ,GAAsC1F,UAAAC,OAAA,OAAAsD,KAAAvD,UAAA,GAAAA,UAAA,GAA9B,EAAGC,EAA2BD,UAAAC,OAAA,OAAAsD,KAAAvD,UAAA,GAAAA,UAAA,GAAlBoV,OAAOC,SAa/B,OAZe,SAAXyW,GAAYjtB,EAAM6G,EAAOzF,GAC3B,GAAI4G,MAAYwZ,EAAapgB,CAS7B,OARApB,GAAKmI,SAASkZ,UAAUxa,EAAOzF,EAAQ,SAASsH,EAAO7B,EAAOzF,GACxDssC,EAAOhlC,GACTV,EAAMwB,KAAKd,GACFA,YAAiB3C,GAAArH,QAAUD,YACpCuJ,EAAQA,EAAMuD,OAAO0hB,EAASvkB,EAAO7B,EAAO2a,KAE9CA,GAAcpgB,IAET4G,GAEOtM,KAAMmL,EAAOzF,M7DgqR7BgC,IAAK,WACL/F,MAAO,W6D9pR8B,GAA9B6V,GAA8B/R,UAAAC,OAAA,OAAAsD,KAAAvD,UAAA,GAAAA,UAAA,MAAdsH,EAActH,UAAAC,OAAA,OAAAsD,KAAAvD,UAAA,GAAAA,UAAA,OAClB,IAAfzF,KAAKkyC,QACTvoC,EAAAvG,EAAA7B,UAAAmF,WAAA5F,OAAAkJ,eAAA5G,EAAA7B,WAAA,WAAAvB,MAAAO,KAAAP,KAAewX,EAAWzK,GACtByK,EAAU9R,OAAS,GACrB1F,KAAKmU,QAAQC,KAAKE,EAAAtR,QAAQiR,OAAOoK,gBAAiB7G,EAAWzK,O7DqqR/DrF,IAAK,OACL/F,MAAO,S6DlqRJwJ,GACH,MAAOxB,GAAAvG,EAAA7B,UAAAmF,WAAA5F,OAAAkJ,eAAA5G,EAAA7B,WAAA,OAAAvB,MAAAO,KAAAP,KAAWmL,GAAOQ,MAAM,M7DqqR/BjE,IAAK,SACL/F,MAAO,S6DnqRF6V,GACL,IAAmB,IAAfxX,KAAKkyC,MAAT,CACA,GAAIj/B,GAASqB,EAAAtR,QAAQqQ,QAAQC,IACJ,iBAAdkE,KACTvE,EAASuE,GAENvR,MAAMC,QAAQsR,KACjBA,EAAYxX,KAAK4mC,SAASK,eAExBzvB,EAAU9R,OAAS,GACrB1F,KAAKmU,QAAQC,KAAKE,EAAAtR,QAAQiR,OAAOmK,qBAAsBnL,EAAQuE,GAEjE7N,EAAAvG,EAAA7B,UAAAmF,WAAA5F,OAAAkJ,eAAA5G,EAAA7B,WAAA,SAAAvB,MAAAO,KAAAP,KAAawX,EAAU3H,YACnB2H,EAAU9R,OAAS,GACrB1F,KAAKmU,QAAQC,KAAKE,EAAAtR,QAAQiR,OAAOsD,cAAetE,EAAQuE,Q7DwqRrDpU,G6D5zRYiH,EAAArH,QAAUI,OAwJ/BA,GAAOyC,SAAW,SAClBzC,EAAO4C,UAAY,YACnB5C,EAAOiC,QAAU,MACjBjC,EAAO8J,aAAe,QACtB9J,EAAO+J,iBAAkBuT,EAAA1d,QAAAyd,EAAArX,WAAAk7B,EAAAthC,S7DyqRzBrD,EAAQqD,Q6DtqROI,G7D0qRT,SAAUxD,EAAQD,EAASO,GAEjC,YAsDA,SAASiI,GAAuBZ,GAAO,MAAOA,IAAOA,EAAInG,WAAamG,GAAQvE,QAASuE,GAEvF,QAASkK,GAAgBlK,EAAKG,EAAK/F,GAAiK,MAApJ+F,KAAOH,GAAOzG,OAAOC,eAAewG,EAAKG,GAAO/F,MAAOA,EAAOV,YAAY,EAAMD,cAAc,EAAM6H,UAAU,IAAkBtB,EAAIG,GAAO/F,EAAgB4F,EAE3M,QAASa,GAAgBC,EAAUC,GAAe,KAAMD,YAAoBC,IAAgB,KAAM,IAAIC,WAAU,qCAEhH,QAASC,GAA2BzI,EAAMQ,GAAQ,IAAKR,EAAQ,KAAM,IAAI0I,gBAAe,4DAAgE,QAAOlI,GAAyB,gBAATA,IAAqC,kBAATA,GAA8BR,EAAPQ,EAElO,QAASmI,GAAUC,EAAUC,GAAc,GAA0B,kBAAfA,IAA4C,OAAfA,EAAuB,KAAM,IAAIL,WAAU,iEAAoEK,GAAeD,GAASpH,UAAYT,OAAO6B,OAAOiG,GAAcA,EAAWrH,WAAasF,aAAelF,MAAOgH,EAAU1H,YAAY,EAAO4H,UAAU,EAAM7H,cAAc,KAAe4H,IAAY9H,OAAO2F,eAAiB3F,OAAO2F,eAAekC,EAAUC,GAAcD,EAASjC,UAAYkC,G8D7vRje,QAAS2pC,GAAYvmC,EAAOZ,EAAQzJ,GAClC,MAAsB,gBAAlB,KAAOyJ,EAAP,YAAAoJ,EAAOpJ,IACFtK,OAAO+M,KAAKzC,GAAQc,OAAO,SAASF,EAAOtE,GAChD,MAAO6qC,GAAYvmC,EAAOtE,EAAK0D,EAAO1D,KACrCsE,GAEIA,EAAME,OAAO,SAASF,EAAOsB,GAClC,MAAIA,GAAG3I,YAAc2I,EAAG3I,WAAWyG,GAC1BY,EAAM8B,KAAKR,GAEXtB,EAAMjB,OAAOuC,EAAGvC,QAAQ,EAAAynC,EAAAxvC,YAAAyO,KAAarG,EAASzJ,GAAQ2L,EAAG3I,cAEjE,GAAAwF,GAAAnH,SAIP,QAASyvC,GAAatuC,GACpB,GAAIA,EAAKuuC,WAAazuC,KAAK0uC,aAAc,QAEzC,OAAOxuC,GADS,yBACSA,EADT,uBACyByuC,OAAOC,iBAAiB1uC,IAGnE,QAAS2uC,GAAc9mC,EAAOO,GAE5B,IAAK,GADDwmC,GAAU,GACL1yC,EAAI2L,EAAM2B,IAAIjI,OAAS,EAAGrF,GAAK,GAAK0yC,EAAQrtC,OAAS6G,EAAK7G,SAAUrF,EAAG,CAC9E,GAAIiN,GAAMtB,EAAM2B,IAAItN,EACpB,IAAyB,gBAAdiN,GAAGvC,OAAqB,KACnCgoC,GAAUzlC,EAAGvC,OAASgoC,EAExB,MAAOA,GAAQpnC,OAAO,EAAEY,EAAK7G,UAAY6G,EAG3C,QAASylC,GAAO7tC,GACd,MAA+B,KAA3BA,EAAKghB,WAAWzf,SAEZ,QAAS,aAAagL,QADlB+hC,EAAatuC,GACmBqf,UAAY,EAG1D,QAASwvB,GAAS7uC,EAAM8uC,EAAiBC,GACvC,MAAI/uC,GAAKuuC,WAAavuC,EAAKD,UAClBgvC,EAAahnC,OAAO,SAASF,EAAOmnC,GACzC,MAAOA,GAAQhvC,EAAM6H,IACpB,GAAA7B,GAAAnH,SACMmB,EAAKuuC,WAAavuC,EAAKwuC,gBACtBzmC,OAAO3L,KAAK4D,EAAKghB,eAAkB,SAACnZ,EAAOytB,GACnD,GAAI2Z,GAAgBJ,EAASvZ,EAAWwZ,EAAiBC,EASzD,OARIzZ,GAAUiZ,WAAavuC,EAAKwuC,eAC9BS,EAAgBH,EAAgB/mC,OAAO,SAASknC,EAAeD,GAC7D,MAAOA,GAAQ1Z,EAAW2Z,IACzBA,GACHA,GAAiB3Z,EAAU4Z,QAAgBnnC,OAAO,SAASknC,EAAeD,GACxE,MAAOA,GAAQ1Z,EAAW2Z,IACzBA,IAEEpnC,EAAM6D,OAAOujC,IACnB,GAAAjpC,GAAAnH,SAEI,GAAAmH,GAAAnH,QAKX,QAASswC,GAAWloC,EAAQjH,EAAM6H,GAChC,MAAOumC,GAAYvmC,EAAOZ,GAAQ,GAGpC,QAASmoC,GAAgBpvC,EAAM6H,GAC7B,GAAIrH,GAAa0F,EAAArH,QAAUQ,WAAWC,UAAUoK,KAAK1J,GACjDgB,EAAUkF,EAAArH,QAAUQ,WAAWE,MAAMmK,KAAK1J,GAC1Co0B,EAASluB,EAAArH,QAAUQ,WAAWG,MAAMkK,KAAK1J,GACzC4E,IAoBJ,OAnBApE,GAAWkL,OAAO1K,GAAS0K,OAAO0oB,GAAQlyB,QAAQ,SAAC1F,GACjD,GAAI63B,GAAOnuB,EAAArH,QAAUH,MAAMlC,EAAM0J,EAAArH,QAAUN,MAAMuc,UACrC,OAARuZ,IACFzvB,EAAQyvB,EAAK1yB,UAAY0yB,EAAK72B,MAAMwC,GAChC4E,EAAQyvB,EAAK1yB,aAEnB0yB,EAAOgb,EAAsB7yC,GACjB,MAAR63B,GAAiBA,EAAK1yB,WAAanF,GAAQ63B,EAAKzyB,UAAYpF,IAC9DoI,EAAQyvB,EAAK1yB,UAAY0yB,EAAK72B,MAAMwC,QAAS6E,IAGnC,OADZwvB,EAAOib,EAAkB9yC,KACJ63B,EAAK1yB,WAAanF,GAAQ63B,EAAKzyB,UAAYpF,IAC9D63B,EAAOib,EAAkB9yC,GACzBoI,EAAQyvB,EAAK1yB,UAAY0yB,EAAK72B,MAAMwC,QAAS6E,OAG7ClI,OAAO+M,KAAK9E,GAASrD,OAAS,IAChCsG,EAAQumC,EAAYvmC,EAAOjD,IAEtBiD,EAGT,QAAS0nC,GAAUvvC,EAAM6H,GACvB,GAAIlI,GAAQuG,EAAArH,QAAUH,MAAMsB,EAC5B,IAAa,MAATL,EAAe,MAAOkI,EAC1B,IAAIlI,EAAMvC,oBAAqB8I,GAAArH,QAAUG,MAAO,CAC9C,GAAIiY,MACAzZ,EAAQmC,EAAMnC,MAAMwC,EACX,OAATxC,IACFyZ,EAAMtX,EAAM+B,UAAYlE,EACxBqK,GAAQ,GAAA7B,GAAAnH,SAAY+H,OAAOqQ,EAAOtX,EAAMiF,QAAQ5E,SAEhB,kBAAlBL,GAAMiF,UACtBiD,EAAQumC,EAAYvmC,EAAOlI,EAAM+B,SAAU/B,EAAMiF,QAAQ5E,IAE3D,OAAO6H,GAGT,QAAS2nC,GAAWxvC,EAAM6H,GAIxB,MAHK8mC,GAAc9mC,EAAO,OACxBA,EAAMjB,OAAO,MAERiB,EAGT,QAAS4nC,KACP,MAAO,IAAAzpC,GAAAnH,QAGT,QAAS6wC,GAAY1vC,EAAM6H,GACzB,GAAIlI,GAAQuG,EAAArH,QAAUH,MAAMsB,EAC5B,IAAa,MAATL,GAAoC,cAAnBA,EAAM+B,WAA6BitC,EAAc9mC,EAAO,MAC3E,MAAOA,EAGT,KADA,GAAI6lB,IAAU,EAAG3oB,EAAS/E,EAAKI,YACvB2E,EAAOsN,UAAUmF,SAAS,iBACiB,UAA5CtR,EAAArH,QAAUH,MAAMqG,QAAerD,WAClCgsB,GAAU,GAEZ3oB,EAASA,EAAO3E,UAElB,OAAIstB,IAAU,EAAU7lB,EACjBA,EAAMqD,SAAQ,GAAAlF,GAAAnH,SAAYgL,OAAOhC,EAAMtG,SAAW,GAAGsI,OAAO,GAAK6jB,OAAQA,KAGlF,QAASiiB,GAAa3vC,EAAM6H,GAM1B,MALK8mC,GAAc9mC,EAAO,QACpBgmC,EAAO7tC,IAAU6H,EAAMtG,SAAW,GAAKvB,EAAK6iB,aAAegrB,EAAO7tC,EAAK6iB,eACzEhb,EAAMjB,OAAO,MAGViB,EAGT,QAAS+nC,GAAa5vC,EAAM6H,GAC1B,GAAIgmC,EAAO7tC,IAAoC,MAA3BA,EAAK6vC,qBAA+BlB,EAAc9mC,EAAO,QAAS,CACpF,GAAIioC,GAAa9vC,EAAK+vC,aAAeC,WAAW1B,EAAatuC,GAAMu3B,WAAayY,WAAW1B,EAAatuC,GAAMiwC,aAC1GjwC,GAAK6vC,mBAAmBK,UAAYlwC,EAAKkwC,UAAuB,IAAXJ,GACvDjoC,EAAMjB,OAAO,MAGjB,MAAOiB,GAGT,QAASsoC,GAAYnwC,EAAM6H,GACzB,GAAIjD,MACAwa,EAAQpf,EAAKof,SAcjB,OAbIA,GAAMgxB,WAA8C,WAAjC9B,EAAatuC,GAAMowC,YACxCxrC,EAAQ0rB,QAAS,GAEflR,EAAMixB,aAAe/B,EAAatuC,GAAMqwC,WAAWh8B,WAAW,SACzC+W,SAASkjB,EAAatuC,GAAMqwC,aAAe,OAClEzrC,EAAQyrB,MAAO,GAEb1zB,OAAO+M,KAAK9E,GAASrD,OAAS,IAChCsG,EAAQumC,EAAYvmC,EAAOjD,IAEzBorC,WAAW5wB,EAAMkxB,YAAc,GAAK,IACtCzoC,GAAQ,GAAA7B,GAAAnH,SAAY+H,OAAO,MAAM8E,OAAO7D,IAEnCA,EAGT,QAAS0oC,GAAUvwC,EAAM6H,GACvB,GAAIO,GAAOpI,EAAKkoB,IAEhB,IAAgC,QAA5BloB,EAAKI,WAAWc,QAClB,MAAO2G,GAAMjB,OAAOwB,EAAKgK,OAE3B,IAA2B,IAAvBhK,EAAKgK,OAAO7Q,QAAgBvB,EAAKI,WAAWiS,UAAUmF,SAAS,gBACjE,MAAO3P,EAET,KAAKymC,EAAatuC,EAAKI,YAAYowC,WAAWn8B,WAAW,OAAQ,CAE/D,GAAIo8B,GAAW,SAASC,EAAU/wC,GAEhC,MADAA,GAAQA,EAAMsb,QAAQ,aAAc,IAC7Btb,EAAM4B,OAAS,GAAKmvC,EAAW,IAAM/wC,EAE9CyI,GAAOA,EAAK6S,QAAQ,QAAS,KAAKA,QAAQ,MAAO,KACjD7S,EAAOA,EAAK6S,QAAQ,SAAUw1B,EAAS91B,KAAK81B,GAAU,KACzB,MAAxBzwC,EAAKkjC,iBAA2B2K,EAAO7tC,EAAKI,aACpB,MAAxBJ,EAAKkjC,iBAA2B2K,EAAO7tC,EAAKkjC,oBAC/C96B,EAAOA,EAAK6S,QAAQ,OAAQw1B,EAAS91B,KAAK81B,GAAU,MAE7B,MAApBzwC,EAAK6iB,aAAuBgrB,EAAO7tC,EAAKI,aACpB,MAApBJ,EAAK6iB,aAAuBgrB,EAAO7tC,EAAK6iB,gBAC3Cza,EAAOA,EAAK6S,QAAQ,OAAQw1B,EAAS91B,KAAK81B,GAAU,KAGxD,MAAO5oC,GAAMjB,OAAOwB,G9D0/QtBzL,OAAOC,eAAepB,EAAS,cAC7BgC,OAAO,IAEThC,EAAQ+0C,UAAY/0C,EAAQo0C,aAAep0C,EAAQm0C,aAAen0C,EAAQ+zC,UAAY/zC,EAAQ4zC,gBAAkB5zC,EAAQqD,YAAUgG,EAElI,IAAIwL,GAA4B,kBAAXW,SAAoD,gBAApBA,QAAOjG,SAAwB,SAAU3H,GAAO,aAAcA,IAAS,SAAUA,GAAO,MAAOA,IAAyB,kBAAX4N,SAAyB5N,EAAIV,cAAgBsO,QAAU5N,IAAQ4N,OAAO5T,UAAY,eAAkBgG,IAElQsN,EAAiB,WAAc,QAASO,GAAc/N,EAAKhH,GAAK,GAAIgV,MAAeC,GAAK,EAAUC,GAAK,EAAWC,MAAKxM,EAAW,KAAM,IAAK,GAAiCyM,GAA7BjQ,EAAK6B,EAAI8N,OAAOjG,cAAmBoG,GAAMG,EAAKjQ,EAAGiG,QAAQiK,QAAoBL,EAAKvH,KAAK2H,EAAG9T,QAAYtB,GAAKgV,EAAK3P,SAAWrF,GAA3DiV,GAAK,IAAoE,MAAOK,GAAOJ,GAAK,EAAMC,EAAKG,EAAO,QAAU,KAAWL,GAAM9P,EAAW,QAAGA,EAAW,SAAO,QAAU,GAAI+P,EAAI,KAAMC,IAAQ,MAAOH,GAAQ,MAAO,UAAUhO,EAAKhH,GAAK,GAAI4F,MAAMC,QAAQmB,GAAQ,MAAOA,EAAY,IAAI8N,OAAOjG,WAAYpO,QAAOuG,GAAQ,MAAO+N,GAAc/N,EAAKhH,EAAa,MAAM,IAAIkI,WAAU,4DAEllBc,EAAe,WAAc,QAASC,GAAiBrB,EAAQsB,GAAS,IAAK,GAAIlJ,GAAI,EAAGA,EAAIkJ,EAAM7D,OAAQrF,IAAK,CAAE,GAAImJ,GAAaD,EAAMlJ,EAAImJ,GAAWvI,WAAauI,EAAWvI,aAAc,EAAOuI,EAAWxI,cAAe,EAAU,SAAWwI,KAAYA,EAAWX,UAAW,GAAM/H,OAAOC,eAAekH,EAAQuB,EAAW9B,IAAK8B,IAAiB,MAAO,UAAUlB,EAAamB,EAAYC,GAAiJ,MAA9HD,IAAYH,EAAiBhB,EAAY/G,UAAWkI,GAAiBC,GAAaJ,EAAiBhB,EAAaoB,GAAqBpB,M8Dp2RhiBW,EAAA/I,EAAA,G9Dw2RIsyC,EAAWrqC,EAAuBc,G8Dv2RtCiB,EAAAhK,EAAA,G9D22RIiK,EAAehC,EAAuB+B,G8D12R1CE,EAAAlK,EAAA,G9D82RImK,EAAclC,EAAuBiC,G8D72RzCsoB,EAAAxyB,EAAA,G9Di3RIgwB,EAAU/nB,EAAuBuqB,G8Dh3RrCxc,EAAAhW,EAAA,I9Do3RIiW,EAAWhO,EAAuB+N,G8Dn3RtCH,EAAA7V,EAAA,G9Du3RI8V,EAAW7N,EAAuB4N,G8Dr3RtC8oB,EAAA3+B,EAAA,IACAo/B,EAAAp/B,EAAA,IACAugC,EAAAvgC,EAAA,I9D23RIwgC,EAASv4B,EAAuBs4B,G8D13RpCvG,EAAAh6B,EAAA,IACA4+B,EAAA5+B,EAAA,IACAq/B,EAAAr/B,EAAA,IACAs/B,EAAAt/B,EAAA,IAEIwS,GAAQ,EAAAyD,EAAAnT,SAAO,mBAGbqwC,EAAU,eAEVyB,IACH7wC,KAAKC,UAAWwwC,IAChBzwC,KAAKC,UAAW4vC,IAChB,KAAMH,IACN1vC,KAAK0uC,aAAcmB,IACnB7vC,KAAK0uC,aAAce,IACnBzvC,KAAK0uC,aAAcoB,IACnB9vC,KAAK0uC,aAAcY,IACnBtvC,KAAK0uC,aAAc2B,IACnB,KAAMT,IACN,IAAKP,EAAWx0B,KAAKw0B,EAAY,UACjC,IAAKA,EAAWx0B,KAAKw0B,EAAY,YACjC,QAASM,IAGNJ,GAAwB3U,EAAA9E,eAAA+E,EAAAzE,oBAG5BnuB,OAAO,SAASka,EAAMoS,GAEtB,MADApS,GAAKoS,EAAKzyB,SAAWyyB,EACdpS,OAGHqtB,GAAoB5U,EAAAhF,WAAAyF,EAAAtF,gBAAAE,EAAA/K,WAAA2P,EAAA3E,eAAAoF,EAAAhF,UAAAiF,EAAA/E,WAOxBvuB,OAAO,SAASka,EAAMoS,GAEtB,MADApS,GAAKoS,EAAKzyB,SAAWyyB,EACdpS,OAIH2uB,E9Dg3RU,SAAUliB,G8D/2RxB,QAAAkiB,GAAYh4B,EAAOnV,GAASQ,EAAApI,KAAA+0C,EAAA,IAAA/tC,GAAAwB,EAAAxI,MAAA+0C,EAAAruC,WAAA5F,OAAAkJ,eAAA+qC,IAAAx0C,KAAAP,KACpB+c,EAAOnV,GADa,OAE1BZ,GAAK+V,MAAMtd,KAAK4d,iBAAiB,QAASrW,EAAKguC,QAAQl2B,KAAb9X,IAC1CA,EAAK2K,UAAY3K,EAAK+V,MAAMpG,aAAa,gBACzC3P,EAAK2K,UAAUiF,aAAa,mBAAmB,GAC/C5P,EAAK2K,UAAUiF,aAAa,YAAa,GACzC5P,EAAKiuC,YACLH,EAAiBjlC,OAAO7I,EAAKY,QAAQqtC,UAAU5uC,QAAQ,SAAA6X,GAAyB,GAAA4V,GAAAjf,EAAAqJ,EAAA,GAAvBg3B,EAAuBphB,EAAA,GAAbqf,EAAarf,EAAA,IACzElsB,EAAQutC,aAAehC,IAAYY,IACxC/sC,EAAKouC,WAAWF,EAAU/B,KATFnsC,E9D0+R5B,MA1HA0B,GAAUqsC,EAAWliB,GAuBrBxpB,EAAa0rC,IACXrtC,IAAK,aACL/F,MAAO,S8D53REuzC,EAAU/B,GACnBnzC,KAAKi1C,SAASnnC,MAAMonC,EAAU/B,O9D+3R9BzrC,IAAK,UACL/F,MAAO,S8D73RD0U,GACN,GAAoB,gBAATA,GAET,MADArW,MAAK2R,UAAU2E,UAAYD,EAAK+I,QAAQ,eAAgB,MACjDpf,KAAK4X,SAEd,IAAM7O,GAAU/I,KAAK+c,MAAMnC,UAAU5a,KAAK+c,MAAM/F,UAAUoU,WAAWjgB,MACrE,IAAIpC,EAAQ23B,EAAA19B,QAAU6C,UAAW,CAC/B,GAAM0G,GAAOvM,KAAK2R,UAAU0jC,SAE5B,OADAr1C,MAAK2R,UAAU2E,UAAY,IACpB,GAAAnM,GAAAnH,SAAY+H,OAAOwB,EAAnBkF,KAA4BivB,EAAA19B,QAAU6C,SAAWkD,EAAQ23B,EAAA19B,QAAU6C,YAThE,GAAAyvC,GAW0Bt1C,KAAKu1C,kBAX/BC,EAAA3gC,EAAAygC,EAAA,GAWPrC,EAXOuC,EAAA,GAWUtC,EAXVsC,EAAA,GAYRxpC,EAAQgnC,EAAShzC,KAAK2R,UAAWshC,EAAiBC,EAOtD,OALIJ,GAAc9mC,EAAO,OAAuD,MAA9CA,EAAM2B,IAAI3B,EAAM2B,IAAIjI,OAAS,GAAGf,aAChEqH,EAAQA,EAAMqD,SAAQ,GAAAlF,GAAAnH,SAAYgL,OAAOhC,EAAMtG,SAAW,GAAGqI,OAAO,KAEtE2E,EAAMoL,IAAI,UAAW9d,KAAK2R,UAAU2E,UAAWtK,GAC/ChM,KAAK2R,UAAU2E,UAAY,GACpBtK,K9Dq4RPtE,IAAK,uBACL/F,MAAO,S8Dn4RYwJ,EAAOkL,GAAkC,GAA5BpD,GAA4BxN,UAAAC,OAAA,OAAAsD,KAAAvD,UAAA,GAAAA,UAAA,GAAnByqB,EAAAltB,QAAMqQ,QAAQoB,GACvD,IAAqB,gBAAVtJ,GACTnL,KAAK+c,MAAMlF,YAAY7X,KAAK4X,QAAQzM,GAAQkL,GAC5CrW,KAAK+c,MAAMlJ,aAAa,EAAGqc,EAAAltB,QAAMqQ,QAAQS,YACpC,CACL,GAAI2hC,GAAQz1C,KAAK4X,QAAQvB,EACzBrW,MAAK+c,MAAMoY,gBAAe,GAAAhrB,GAAAnH,SAAYgL,OAAO7C,GAAO0E,OAAO4lC,GAAQxiC,GACnEjT,KAAK+c,MAAMlJ,aAAa1I,EAAQsqC,EAAM/vC,SAAUwqB,EAAAltB,QAAMqQ,QAAQS,Y9Dy4RhEpM,IAAK,UACL/F,MAAO,S8Dt4RDue,GAAG,GAAApU,GAAA9L,IACT,KAAIkgB,EAAEqT,kBAAqBvzB,KAAK+c,MAAM5J,YAAtC,CACA,GAAII,GAAQvT,KAAK+c,MAAMvJ,eACnBxH,GAAQ,GAAA7B,GAAAnH,SAAYgL,OAAOuF,EAAMpI,OACjC+N,EAAYlZ,KAAK+c,MAAMlG,mBAAmBqC,SAC9ClZ,MAAK2R,UAAUwH,QACfnZ,KAAK+c,MAAM/F,UAAUU,OAAOwY,EAAAltB,QAAMqQ,QAAQS,QAC1C4Q,WAAW,WACT1Y,EAAQA,EAAM6D,OAAO/D,EAAK8L,WAAW7J,OAAOwF,EAAM7N,QAClDoG,EAAKiR,MAAMoY,eAAenpB,EAAOkkB,EAAAltB,QAAMqQ,QAAQC,MAE/CxH,EAAKiR,MAAMlJ,aAAa7H,EAAMtG,SAAW6N,EAAM7N,OAAQwqB,EAAAltB,QAAMqQ,QAAQS,QACrEhI,EAAKiR,MAAMlG,mBAAmBqC,UAAYA,EAC1CpN,EAAKiR,MAAM5D,SACV,O9D24RHzR,IAAK,kBACL/F,MAAO,W8Dz4RS,GAAAiX,GAAA5Y,KACZizC,KAAsBC,IAmB1B,OAlBAlzC,MAAKi1C,SAAS5uC,QAAQ,SAACqvC,GAAS,GAAAC,GAAA9gC,EACJ6gC,EADI,GACzBR,EADyBS,EAAA,GACfxC,EADewC,EAAA,EAE9B,QAAQT,GACN,IAAKjxC,MAAKC,UACRgvC,EAAaplC,KAAKqlC,EAClB,MACF,KAAKlvC,MAAK0uC,aACRM,EAAgBnlC,KAAKqlC,EACrB,MACF,YACK9sC,QAAQ9F,KAAKqY,EAAKjH,UAAU6L,iBAAiB03B,GAAW,SAAC/wC,GAE1DA,EAAKkvC,GAAWlvC,EAAKkvC,OACrBlvC,EAAKkvC,GAASvlC,KAAKqlC,SAKnBF,EAAiBC,O9Dm5RpB6B,GACP/+B,EAAShT,Q8Dj5RX+xC,GAAU7iC,UACR+iC,YACAE,aAAa,G9DgmSfx1C,E8Dh5RsBqD,QAAb+xC,E9Di5RTp1C,E8Dj5R+B4zC,kB9Dk5R/B5zC,E8Dl5RgD+zC,Y9Dm5RhD/zC,E8Dn5R2Dm0C,e9Do5R3Dn0C,E8Dp5RyEo0C,e9Dq5RzEp0C,E8Dr5RuF+0C,a9Dy5RjF,SAAU90C,EAAQD,EAASO,GAEjC,YAsBA,SAASiI,GAAuBZ,GAAO,MAAOA,IAAOA,EAAInG,WAAamG,GAAQvE,QAASuE,GAEvF,QAASa,GAAgBC,EAAUC,GAAe,KAAMD,YAAoBC,IAAgB,KAAM,IAAIC,WAAU,qCAEhH,QAASC,GAA2BzI,EAAMQ,GAAQ,IAAKR,EAAQ,KAAM,IAAI0I,gBAAe,4DAAgE,QAAOlI,GAAyB,gBAATA,IAAqC,kBAATA,GAA8BR,EAAPQ,EAElO,QAASmI,GAAUC,EAAUC,GAAc,GAA0B,kBAAfA,IAA4C,OAAfA,EAAuB,KAAM,IAAIL,WAAU,iEAAoEK,GAAeD,GAASpH,UAAYT,OAAO6B,OAAOiG,GAAcA,EAAWrH,WAAasF,aAAelF,MAAOgH,EAAU1H,YAAY,EAAO4H,UAAU,EAAM7H,cAAc,KAAe4H,IAAY9H,OAAO2F,eAAiB3F,OAAO2F,eAAekC,EAAUC,GAAcD,EAASjC,UAAYkC,G+DhsSje,QAASgtC,GAAsB5pC,GAC7B,GAAIiC,GAASjC,EAAM2B,IAAI3B,EAAM2B,IAAIjI,OAAS,EAC1C,OAAc,OAAVuI,IACiB,MAAjBA,EAAOlD,OACuB,gBAAlBkD,GAAOlD,QAAuBkD,EAAOlD,OAAOO,SAAS,MAE5C,MAArB2C,EAAOtJ,YACF7D,OAAO+M,KAAKI,EAAOtJ,YAAYuhB,KAAK,SAASsS,GAClD,MAAuD,OAAhDnuB,EAAArH,QAAUH,MAAM21B,EAAMnuB,EAAArH,QAAUN,MAAMmC,UAMnD,QAASgxC,GAAmB7pC,GAC1B,GAAI8pC,GAAe9pC,EAAME,OAAO,SAASxG,EAAQ4H,GAE/C,MADA5H,IAAW4H,EAAGS,QAAU,GAEvB,GACCgoC,EAAc/pC,EAAMtG,SAAWowC,CAInC,OAHIF,GAAsB5pC,KACxB+pC,GAAe,GAEVA,E/DgpSTj1C,OAAOC,eAAepB,EAAS,cAC7BgC,OAAO,IAEThC,EAAQk2C,mBAAqBl2C,EAAQqD,YAAUgG,EAE/C,IAAIK,GAAe,WAAc,QAASC,GAAiBrB,EAAQsB,GAAS,IAAK,GAAIlJ,GAAI,EAAGA,EAAIkJ,EAAM7D,OAAQrF,IAAK,CAAE,GAAImJ,GAAaD,EAAMlJ,EAAImJ,GAAWvI,WAAauI,EAAWvI,aAAc,EAAOuI,EAAWxI,cAAe,EAAU,SAAWwI,KAAYA,EAAWX,UAAW,GAAM/H,OAAOC,eAAekH,EAAQuB,EAAW9B,IAAK8B,IAAiB,MAAO,UAAUlB,EAAamB,EAAYC,GAAiJ,MAA9HD,IAAYH,EAAiBhB,EAAY/G,UAAWkI,GAAiBC,GAAaJ,EAAiBhB,EAAaoB,GAAqBpB,M+DxwShiB8B,EAAAlK,EAAA,G/D4wSImK,EAAclC,EAAuBiC,G+D3wSzCsoB,EAAAxyB,EAAA,G/D+wSIgwB,EAAU/nB,EAAuBuqB,G+D9wSrC3c,EAAA7V,EAAA,G/DkxSI8V,EAAW7N,EAAuB4N,G+D/wShCigC,E/DyxSQ,SAAUnjB,G+DxxStB,QAAAmjB,GAAYj5B,EAAOnV,GAASQ,EAAApI,KAAAg2C,EAAA,IAAAhvC,GAAAwB,EAAAxI,MAAAg2C,EAAAtvC,WAAA5F,OAAAkJ,eAAAgsC,IAAAz1C,KAAAP,KACpB+c,EAAOnV,GADa,OAE1BZ,GAAKivC,aAAe,EACpBjvC,EAAKkvC,cAAe,EACpBlvC,EAAK8Q,QACL9Q,EAAK+V,MAAM5F,GAAG+Y,EAAAltB,QAAMiR,OAAOI,cAAe,SAAC+I,EAAWpR,EAAOyH,EAAUR,GACjEmK,IAAc8S,EAAAltB,QAAMiR,OAAOC,aAAelN,EAAKkvC,eAC9ClvC,EAAKY,QAAQuuC,UAAYljC,IAAWid,EAAAltB,QAAMqQ,QAAQC,KAGrDtM,EAAK2J,UAAU3E,GAFfhF,EAAKovC,OAAOpqC,EAAOyH,MAKvBzM,EAAK+V,MAAMjL,SAASihB,YAAarrB,IAAK,IAAK0qB,UAAU,GAAQprB,EAAKqvC,KAAKv3B,KAAV9X,IAC7DA,EAAK+V,MAAMjL,SAASihB,YAAarrB,IAAK,IAAK0qB,UAAU,EAAM3C,UAAU,GAAQzoB,EAAKsvC,KAAKx3B,KAAV9X,IACzE,OAAO4pB,KAAK+B,UAAUC,WACxB5rB,EAAK+V,MAAMjL,SAASihB,YAAarrB,IAAK,IAAK0qB,UAAU,GAAQprB,EAAKsvC,KAAKx3B,KAAV9X,IAhBrCA,E/Dw3S5B,MA/FA0B,GAAUstC,EAASnjB,GA0BnBxpB,EAAa2sC,IACXtuC,IAAK,SACL/F,MAAO,S+DjySFsR,EAAQsjC,GACb,GAAkC,IAA9Bv2C,KAAKw2C,MAAMvjC,GAAQvN,OAAvB,CACA,GAAIsG,GAAQhM,KAAKw2C,MAAMvjC,GAAQ5E,KAC/BrO,MAAKw2C,MAAMD,GAAMzoC,KAAK9B,GACtBhM,KAAKi2C,aAAe,EACpBj2C,KAAKk2C,cAAe,EACpBl2C,KAAK+c,MAAMoY,eAAenpB,EAAMiH,GAASid,EAAAltB,QAAMqQ,QAAQC,MACvDtT,KAAKk2C,cAAe,CACpB,IAAI/qC,GAAQ0qC,EAAmB7pC,EAAMiH,GACrCjT,MAAK+c,MAAMlJ,aAAa1I,O/DoySxBzD,IAAK,QACL/F,MAAO,W+DjySP3B,KAAKw2C,OAAUH,QAAUC,Y/DqySzB5uC,IAAK,SACL/F,MAAO,W+DlySP3B,KAAKi2C,aAAe,K/DsySpBvuC,IAAK,SACL/F,MAAO,S+DpySF80C,EAAahjC,GAClB,GAA+B,IAA3BgjC,EAAY9oC,IAAIjI,OAApB,CACA1F,KAAKw2C,MAAMF,OACX,IAAII,GAAY12C,KAAK+c,MAAMpC,cAAcvN,KAAKqG,GAC1CkjC,EAAYr2B,KAAKs2B,KACrB,IAAI52C,KAAKi2C,aAAej2C,KAAK4H,QAAQivC,MAAQF,GAAa32C,KAAKw2C,MAAMH,KAAK3wC,OAAS,EAAG,CACpF,GAAIsG,GAAQhM,KAAKw2C,MAAMH,KAAKhoC,KAC5BqoC,GAAYA,EAAUrnC,QAAQrD,EAAMqqC,MACpCI,EAAczqC,EAAMsqC,KAAKjnC,QAAQonC,OAEjCz2C,MAAKi2C,aAAeU,CAEtB32C,MAAKw2C,MAAMH,KAAKvoC,MACdwoC,KAAMG,EACNJ,KAAMK,IAEJ12C,KAAKw2C,MAAMH,KAAK3wC,OAAS1F,KAAK4H,QAAQkvC,UACxC92C,KAAKw2C,MAAMH,KAAK7pC,Y/DwySlB9E,IAAK,OACL/F,MAAO,W+DpySP3B,KAAK2T,OAAO,OAAQ,W/DwySpBjM,IAAK,YACL/F,MAAO,S+DtySCqK,GACRhM,KAAKw2C,MAAMH,KAAKhwC,QAAQ,SAASsN,GAC/BA,EAAO0iC,KAAOrqC,EAAM2E,UAAUgD,EAAO0iC,MAAM,GAC3C1iC,EAAO2iC,KAAOtqC,EAAM2E,UAAUgD,EAAO2iC,MAAM,KAE7Ct2C,KAAKw2C,MAAMF,KAAKjwC,QAAQ,SAASsN,GAC/BA,EAAO0iC,KAAOrqC,EAAM2E,UAAUgD,EAAO0iC,MAAM,GAC3C1iC,EAAO2iC,KAAOtqC,EAAM2E,UAAUgD,EAAO2iC,MAAM,Q/D0yS7C5uC,IAAK,OACL/F,MAAO,W+DtySP3B,KAAK2T,OAAO,OAAQ,Y/D2ySfqiC,GACPhgC,EAAShT,Q+DzySXgzC,GAAQ9jC,UACN2kC,MAAO,IACPC,SAAU,IACVX,UAAU,G/Dw0SZx2C,E+D1ySoBqD,QAAXgzC,E/D2ySTr2C,E+D3yS6Bk2C,sB/D+ySvB,SAAUj2C,EAAQD,EAASO,GAEjC,YAkBA,SAASkI,GAAgBC,EAAUC,GAAe,KAAMD,YAAoBC,IAAgB,KAAM,IAAIC,WAAU,qCAEhH,QAASC,GAA2BzI,EAAMQ,GAAQ,IAAKR,EAAQ,KAAM,IAAI0I,gBAAe,4DAAgE,QAAOlI,GAAyB,gBAATA,IAAqC,kBAATA,GAA8BR,EAAPQ,EAElO,QAASmI,GAAUC,EAAUC,GAAc,GAA0B,kBAAfA,IAA4C,OAAfA,EAAuB,KAAM,IAAIL,WAAU,iEAAoEK,GAAeD,GAASpH,UAAYT,OAAO6B,OAAOiG,GAAcA,EAAWrH,WAAasF,aAAelF,MAAOgH,EAAU1H,YAAY,EAAO4H,UAAU,EAAM7H,cAAc,KAAe4H,IAAY9H,OAAO2F,eAAiB3F,OAAO2F,eAAekC,EAAUC,GAAcD,EAASjC,UAAYkC,GAnBje9H,OAAOC,eAAepB,EAAS,cAC7BgC,OAAO,IAEThC,EAAQ4iC,gBAAcv5B,EAEtB,IAAIK,GAAe,WAAc,QAASC,GAAiBrB,EAAQsB,GAAS,IAAK,GAAIlJ,GAAI,EAAGA,EAAIkJ,EAAM7D,OAAQrF,IAAK,CAAE,GAAImJ,GAAaD,EAAMlJ,EAAImJ,GAAWvI,WAAauI,EAAWvI,aAAc,EAAOuI,EAAWxI,cAAe,EAAU,SAAWwI,KAAYA,EAAWX,UAAW,GAAM/H,OAAOC,eAAekH,EAAQuB,EAAW9B,IAAK8B,IAAiB,MAAO,UAAUlB,EAAamB,EAAYC,GAAiJ,MAA9HD,IAAYH,EAAiBhB,EAAY/G,UAAWkI,GAAiBC,GAAaJ,EAAiBhB,EAAaoB,GAAqBpB,MAE5hBqB,EAAO,QAASzI,GAAIG,EAAQC,EAAUsI,GAA2B,OAAXvI,IAAiBA,EAASwI,SAAStI,UAAW,IAAIuI,GAAOhJ,OAAOiJ,yBAAyB1I,EAAQC,EAAW,QAAa0H,KAATc,EAAoB,CAAE,GAAIZ,GAASpI,OAAOkJ,eAAe3I,EAAS,OAAe,QAAX6H,MAAmB,GAAkChI,EAAIgI,EAAQ5H,EAAUsI,GAAoB,GAAI,SAAWE,GAAQ,MAAOA,GAAKnI,KAAgB,IAAIf,GAASkJ,EAAK5I,GAAK,QAAe8H,KAAXpI,EAA4C,MAAOA,GAAOL,KAAKqJ,IgEl7S5dQ,EAAAlK,EAAA,GhEs7SImK,EAEJ,SAAgC9C,GAAO,MAAOA,IAAOA,EAAInG,WAAamG,GAAQvE,QAASuE,IAF9C6C,GgEp7SnC2sC,EhE87SgB,SAAUznB,GAG9B,QAASynB,KAGP,MAFA3uC,GAAgBpI,KAAM+2C,GAEfvuC,EAA2BxI,MAAO+2C,EAAgBrwC,WAAa5F,OAAOkJ,eAAe+sC,IAAkBlsC,MAAM7K,KAAMyF,YA6B5H,MAlCAiD,GAAUquC,EAAiBznB,GAQ3BjmB,EAAa0tC,IACXrvC,IAAK,MACL/F,MAAO,SgEx8SLwC,EAAMxC,GACR,GAAc,OAAVA,GAA4B,OAAVA,EAAgB,CACpC,GAAIkwB,GAAS7xB,KAAK2B,MAAMwC,IAAS,CACjCxC,GAAmB,OAAVA,EAAkBkwB,EAAS,EAAMA,EAAS,EAErD,MAAc,KAAVlwB,GACF3B,KAAK8M,OAAO3I,IACL,GAEPwF,EAAAotC,EAAAx1C,UAAAmF,WAAA5F,OAAAkJ,eAAA+sC,EAAAx1C,WAAA,MAAAvB,MAAAO,KAAAP,KAAiBmE,EAAMxC,MhE48SzB+F,IAAK,SACL/F,MAAO,SgEz8SFwC,EAAMxC,GACX,MAAOgI,GAAAotC,EAAAx1C,UAAAmF,WAAA5F,OAAAkJ,eAAA+sC,EAAAx1C,WAAA,SAAAvB,MAAAO,KAAAP,KAAamE,EAAMxC,IAAnBgI,EAAAotC,EAAAx1C,UAAAmF,WAAA5F,OAAAkJ,eAAA+sC,EAAAx1C,WAAA,SAAAvB,MAAAO,KAAAP,KAA0CmE,EAAMorB,SAAS5tB,OhE48ShE+F,IAAK,QACL/F,MAAO,SgE18SHwC,GACJ,MAAOorB,8FAAqBprB,SAAU6E,OhE88SjC+tC,GgEj+SqB1sC,EAAArH,QAAUQ,WAAWE,OAuB/C6+B,EAAc,GAAIwU,GAAgB,SAAU,aAC9CvyC,MAAO6F,EAAArH,QAAUN,MAAMmC,MACvBkS,WAAY,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IhEg9SnCpX,GgE78SS4iC,ehEi9SH,SAAU3iC,EAAQD,EAASO,GAEjC,YAaA,SAASkI,GAAgBC,EAAUC,GAAe,KAAMD,YAAoBC,IAAgB,KAAM,IAAIC,WAAU,qCAEhH,QAASC,GAA2BzI,EAAMQ,GAAQ,IAAKR,EAAQ,KAAM,IAAI0I,gBAAe,4DAAgE,QAAOlI,GAAyB,gBAATA,IAAqC,kBAATA,GAA8BR,EAAPQ,EAElO,QAASmI,GAAUC,EAAUC,GAAc,GAA0B,kBAAfA,IAA4C,OAAfA,EAAuB,KAAM,IAAIL,WAAU,iEAAoEK,GAAeD,GAASpH,UAAYT,OAAO6B,OAAOiG,GAAcA,EAAWrH,WAAasF,aAAelF,MAAOgH,EAAU1H,YAAY,EAAO4H,UAAU,EAAM7H,cAAc,KAAe4H,IAAY9H,OAAO2F,eAAiB3F,OAAO2F,eAAekC,EAAUC,GAAcD,EAASjC,UAAYkC,GAdje9H,OAAOC,eAAepB,EAAS,cAC7BgC,OAAO,GiEr/ST,IAAA8e,GAAAvgB,EAAA,GjE0/SIwgB,EAEJ,SAAgCnZ,GAAO,MAAOA,IAAOA,EAAInG,WAAamG,GAAQvE,QAASuE,IAFlDkZ,GiEv/S/Bu2B,EjEigTW,SAAUn2B,GAGzB,QAASm2B,KAGP,MAFA5uC,GAAgBpI,KAAMg3C,GAEfxuC,EAA2BxI,MAAOg3C,EAAWtwC,WAAa5F,OAAOkJ,eAAegtC,IAAansC,MAAM7K,KAAMyF,YAGlH,MARAiD,GAAUsuC,EAAYn2B,GAQfm2B,GACPt2B,EAAQ1d,QiE1gTVg0C,GAAWnxC,SAAW,aACtBmxC,EAAW3xC,QAAU,ajE8gTrB1F,EAAQqD,QiE3gTOg0C,GjE+gTT,SAAUp3C,EAAQD,EAASO,GAEjC,YAeA,SAASkI,GAAgBC,EAAUC,GAAe,KAAMD,YAAoBC,IAAgB,KAAM,IAAIC,WAAU,qCAEhH,QAASC,GAA2BzI,EAAMQ,GAAQ,IAAKR,EAAQ,KAAM,IAAI0I,gBAAe,4DAAgE,QAAOlI,GAAyB,gBAATA,IAAqC,kBAATA,GAA8BR,EAAPQ,EAElO,QAASmI,GAAUC,EAAUC,GAAc,GAA0B,kBAAfA,IAA4C,OAAfA,EAAuB,KAAM,IAAIL,WAAU,iEAAoEK,GAAeD,GAASpH,UAAYT,OAAO6B,OAAOiG,GAAcA,EAAWrH,WAAasF,aAAelF,MAAOgH,EAAU1H,YAAY,EAAO4H,UAAU,EAAM7H,cAAc,KAAe4H,IAAY9H,OAAO2F,eAAiB3F,OAAO2F,eAAekC,EAAUC,GAAcD,EAASjC,UAAYkC,GAhBje9H,OAAOC,eAAepB,EAAS,cAC7BgC,OAAO,GAGT,IAAI0H,GAAe,WAAc,QAASC,GAAiBrB,EAAQsB,GAAS,IAAK,GAAIlJ,GAAI,EAAGA,EAAIkJ,EAAM7D,OAAQrF,IAAK,CAAE,GAAImJ,GAAaD,EAAMlJ,EAAImJ,GAAWvI,WAAauI,EAAWvI,aAAc,EAAOuI,EAAWxI,cAAe,EAAU,SAAWwI,KAAYA,EAAWX,UAAW,GAAM/H,OAAOC,eAAekH,EAAQuB,EAAW9B,IAAK8B,IAAiB,MAAO,UAAUlB,EAAamB,EAAYC,GAAiJ,MAA9HD,IAAYH,EAAiBhB,EAAY/G,UAAWkI,GAAiBC,GAAaJ,EAAiBhB,EAAaoB,GAAqBpB,MkEhiThiBmY,EAAAvgB,EAAA,GlEoiTIwgB,EAEJ,SAAgCnZ,GAAO,MAAOA,IAAOA,EAAInG,WAAamG,GAAQvE,QAASuE,IAFlDkZ,GkEjiT/Bw2B,ElE2iTO,SAAUp2B,GAGrB,QAASo2B,KAGP,MAFA7uC,GAAgBpI,KAAMi3C,GAEfzuC,EAA2BxI,MAAOi3C,EAAOvwC,WAAa5F,OAAOkJ,eAAeitC,IAASpsC,MAAM7K,KAAMyF,YAU1G,MAfAiD,GAAUuuC,EAAQp2B,GAQlBxX,EAAa4tC,EAAQ,OACnBvvC,IAAK,UACL/F,MAAO,SkErjTMmJ,GACb,MAAO9K,MAAKqF,QAAQqL,QAAQ5F,EAAQzF,SAAW,MlEyjT1C4xC,GACPv2B,EAAQ1d,QkEvjTVi0C,GAAOpxC,SAAW,SAClBoxC,EAAO5xC,SAAW,KAAM,KAAM,KAAM,KAAM,KAAM,MlE2jThD1F,EAAQqD,QkExjTOi0C,GlE4jTT,SAAUr3C,EAAQD,EAASO,GAEjC,YAwBA,SAASiI,GAAuBZ,GAAO,MAAOA,IAAOA,EAAInG,WAAamG,GAAQvE,QAASuE,GAEvF,QAASkK,GAAgBlK,EAAKG,EAAK/F,GAAiK,MAApJ+F,KAAOH,GAAOzG,OAAOC,eAAewG,EAAKG,GAAO/F,MAAOA,EAAOV,YAAY,EAAMD,cAAc,EAAM6H,UAAU,IAAkBtB,EAAIG,GAAO/F,EAAgB4F,EAE3M,QAASa,GAAgBC,EAAUC,GAAe,KAAMD,YAAoBC,IAAgB,KAAM,IAAIC,WAAU,qCAEhH,QAASC,GAA2BzI,EAAMQ,GAAQ,IAAKR,EAAQ,KAAM,IAAI0I,gBAAe,4DAAgE,QAAOlI,GAAyB,gBAATA,IAAqC,kBAATA,GAA8BR,EAAPQ,EAElO,QAASmI,GAAUC,EAAUC,GAAc,GAA0B,kBAAfA,IAA4C,OAAfA,EAAuB,KAAM,IAAIL,WAAU,iEAAoEK,GAAeD,GAASpH,UAAYT,OAAO6B,OAAOiG,GAAcA,EAAWrH,WAAasF,aAAelF,MAAOgH,EAAU1H,YAAY,EAAO4H,UAAU,EAAM7H,cAAc,KAAe4H,IAAY9H,OAAO2F,eAAiB3F,OAAO2F,eAAekC,EAAUC,GAAcD,EAASjC,UAAYkC,GA7Bje9H,OAAOC,eAAepB,EAAS,cAC7BgC,OAAO,IAEThC,EAAQqD,QAAUrD,EAAQ+jC,aAAW16B,EAErC,IAAIK,GAAe,WAAc,QAASC,GAAiBrB,EAAQsB,GAAS,IAAK,GAAIlJ,GAAI,EAAGA,EAAIkJ,EAAM7D,OAAQrF,IAAK,CAAE,GAAImJ,GAAaD,EAAMlJ,EAAImJ,GAAWvI,WAAauI,EAAWvI,aAAc,EAAOuI,EAAWxI,cAAe,EAAU,SAAWwI,KAAYA,EAAWX,UAAW,GAAM/H,OAAOC,eAAekH,EAAQuB,EAAW9B,IAAK8B,IAAiB,MAAO,UAAUlB,EAAamB,EAAYC,GAAiJ,MAA9HD,IAAYH,EAAiBhB,EAAY/G,UAAWkI,GAAiBC,GAAaJ,EAAiBhB,EAAaoB,GAAqBpB,MAE5hBqB,EAAO,QAASzI,GAAIG,EAAQC,EAAUsI,GAA2B,OAAXvI,IAAiBA,EAASwI,SAAStI,UAAW,IAAIuI,GAAOhJ,OAAOiJ,yBAAyB1I,EAAQC,EAAW,QAAa0H,KAATc,EAAoB,CAAE,GAAIZ,GAASpI,OAAOkJ,eAAe3I,EAAS,OAAe,QAAX6H,MAAmB,GAAkChI,EAAIgI,EAAQ5H,EAAUsI,GAAoB,GAAI,SAAWE,GAAQ,MAAOA,GAAKnI,KAAgB,IAAIf,GAASkJ,EAAK5I,GAAK,QAAe8H,KAAXpI,EAA4C,MAAOA,GAAOL,KAAKqJ,ImEplT5dQ,EAAAlK,EAAA,GnEwlTImK,EAAclC,EAAuBiC,GmEvlTzCqW,EAAAvgB,EAAA,GnE2lTIwgB,EAAUvY,EAAuBsY,GmE1lTrC4jB,EAAAnkC,EAAA,InE8lTIokC,EAAcn8B,EAAuBk8B,GmE3lTnCX,EnEumTS,SAAU7iB,GAGvB,QAAS6iB,KAGP,MAFAt7B,GAAgBpI,KAAM0jC,GAEfl7B,EAA2BxI,MAAO0jC,EAASh9B,WAAa5F,OAAOkJ,eAAe05B,IAAW74B,MAAM7K,KAAMyF,YAwC9G,MA7CAiD,GAAUg7B,EAAU7iB,GAQpBxX,EAAaq6B,IACXh8B,IAAK,SACL/F,MAAO,SmE7mTFhB,EAAMgB,GACPhB,IAASu2C,EAAKrxC,UAAalE,EAG7BgI,EAAA+5B,EAAAniC,UAAAmF,WAAA5F,OAAAkJ,eAAA05B,EAAAniC,WAAA,SAAAvB,MAAAO,KAAAP,KAAaW,EAAMgB,GAFnB3B,KAAKmnB,YAAY9c,EAAArH,QAAUL,OAAO3C,KAAKmJ,QAAQ3E,WnEmnTjDkD,IAAK,SACL/F,MAAO,WmE7mTU,MAAb3B,KAAK8hB,MAA6B,MAAb9hB,KAAKyL,KAC5BzL,KAAKkJ,OAAO4D,SAEZnD,EAAA+5B,EAAAniC,UAAAmF,WAAA5F,OAAAkJ,eAAA05B,EAAAniC,WAAA,SAAAvB,MAAAO,KAAAP,SnEknTF0H,IAAK,cACL/F,MAAO,SmE/mTGhB,EAAMgB,GAEhB,MADA3B,MAAKkJ,OAAOiI,QAAQnR,KAAK8Q,OAAO9Q,KAAKkJ,QAASlJ,KAAK0F,UAC/C/E,IAASX,KAAKkJ,OAAOC,QAAQtD,UAC/B7F,KAAKkJ,OAAOie,YAAYxmB,EAAMgB,GACvB3B,OAEPA,KAAKkJ,OAAO+Y,SACZtY,EAAA+5B,EAAAniC,UAAAmF,WAAA5F,OAAAkJ,eAAA05B,EAAAniC,WAAA,cAAAvB,MAAAO,KAAAP,KAAyBW,EAAMgB,SnEmnTjC+F,IAAK,UACL/F,MAAO,SmE/oTMmJ,GACb,MAAOA,GAAQzF,UAAYrF,KAAKqF,YAAU2D,GAAnCW,EAAA+5B,EAAAh9B,WAAA5F,OAAAkJ,eAAA05B,GAAA,UAAA1jC,MAAAO,KAAAP,KAA6D8K,OnEmpT/D44B,GACPhjB,EAAQ1d,QmEtnTV0gC,GAAS79B,SAAW,YACpB69B,EAASr+B,QAAU,InE0nTnB,ImEvnTM6xC,GnEunTK,SAAUC,GmEjmTnB,QAAAD,GAAYpsC,GAAS1C,EAAApI,KAAAk3C,EAAA,IAAAprC,GAAAtD,EAAAxI,MAAAk3C,EAAAxwC,WAAA5F,OAAAkJ,eAAAktC,IAAA32C,KAAAP,KACb8K,IACAssC,EAAmB,SAACl3B,GACxB,GAAIA,EAAEjY,OAAO1D,aAAeuG,EAA5B,CACA,GAAIM,GAASU,EAAK3C,QAAQJ,QAAQ+B,GAC9BxG,EAAO+F,EAAArH,QAAUJ,KAAKsd,EAAEjY,OACb,aAAXmD,EACF9G,EAAK8G,OAAO,OAAQ,aACD,cAAXA,GACR9G,EAAK8G,OAAO,OAAQ,YATL,OAanBN,GAAQuS,iBAAiB,aAAc+5B,GACvCtsC,EAAQuS,iBAAiB,YAAa+5B,GAdnBtrC,EnEgsTrB,MA9FApD,GAAUwuC,EAAMC,GAEhB9tC,EAAa6tC,EAAM,OACjBxvC,IAAK,SACL/F,MAAO,SmE3nTKA,GACZ,GAAI0D,GAAoB,YAAV1D,EAAsB,KAAO,KACvCwC,mEAAoBkB,EAIxB,OAHc,YAAV1D,GAAiC,cAAVA,GACzBwC,EAAKyS,aAAa,eAA0B,YAAVjV,GAE7BwC,KnE8nTPuD,IAAK,UACL/F,MAAO,SmE5nTMmJ,GACb,MAAwB,OAApBA,EAAQzF,QAAyB,UACb,OAApByF,EAAQzF,QACNyF,EAAQoZ,aAAa,gBACyB,SAAzCpZ,EAAQ7F,aAAa,gBAA6B,UAAY,YAE9D,aAJX,OnE4pTFoE,EAAa6tC,IACXxvC,IAAK,SACL/F,MAAO,SmEnoTFhB,EAAMgB,GACP3B,KAAKyM,SAAS/G,OAAS,GACzB1F,KAAKyM,SAASC,KAAKtB,OAAOzK,EAAMgB,MnEuoTlC+F,IAAK,UACL/F,MAAO,WmEloTP,MAAA8P,MAAUzR,KAAKmJ,QAAQtD,SAAW7F,KAAKmJ,QAAQJ,QAAQ/I,KAAK8K,anEuoT5DpD,IAAK,eACL/F,MAAO,SmEroTI2C,EAAMsI,GACjB,GAAItI,YAAgBo/B,GAClB/5B,EAAAutC,EAAA31C,UAAAmF,WAAA5F,OAAAkJ,eAAAktC,EAAA31C,WAAA,eAAAvB,MAAAO,KAAAP,KAAmBsE,EAAMsI,OACpB,CACL,GAAIzB,GAAe,MAAPyB,EAAc5M,KAAK0F,SAAWkH,EAAIkE,OAAO9Q,MACjDwmB,EAAQxmB,KAAKkF,MAAMiG,EACvBqb,GAAMtd,OAAOsC,aAAalH,EAAMkiB,OnEyoTlC9e,IAAK,WACL/F,MAAO,SmEtoTAoL,GACPpD,EAAAutC,EAAA31C,UAAAmF,WAAA5F,OAAAkJ,eAAAktC,EAAA31C,WAAA,WAAAvB,MAAAO,KAAAP,KAAe+M,EACf,IAAItB,GAAOzL,KAAKyL,IACJ,OAARA,GAAgBA,EAAKqW,OAAS9hB,MAC9ByL,EAAKtC,QAAQtD,WAAa7F,KAAKmJ,QAAQtD,UACvC4F,EAAKX,QAAQzF,UAAYrF,KAAK8K,QAAQzF,SACtCoG,EAAKX,QAAQ7F,aAAa,kBAAoBjF,KAAK8K,QAAQ7F,aAAa,kBAC1EwG,EAAK4F,aAAarR,MAClByL,EAAKqB,anEuoTPpF,IAAK,UACL/F,MAAO,SmEpoTDsG,GACN,GAAIA,EAAOkB,QAAQtD,WAAa7F,KAAKmJ,QAAQtD,SAAU,CACrD,GAAIqZ,GAAO7U,EAAArH,QAAUL,OAAO3C,KAAKmJ,QAAQ+D,aACzCjF,GAAOoJ,aAAa6N,GACpBlf,KAAK6hB,YAAY3C,GAEnBvV,EAAAutC,EAAA31C,UAAAmF,WAAA5F,OAAAkJ,eAAAktC,EAAA31C,WAAA,UAAAvB,MAAAO,KAAAP,KAAciI,OnEwoTTivC,GACP5S,EAAYthC,QmEtoTdk0C,GAAKrxC,SAAW,OAChBqxC,EAAK1yC,MAAQ6F,EAAArH,QAAUN,MAAMkJ,WAC7BsrC,EAAK7xC,SAAW,KAAM,MACtB6xC,EAAKhqC,aAAe,YACpBgqC,EAAK/pC,iBAAmBu2B,GnE0oTxB/jC,EmEvoTS+jC,WnEwoTT/jC,EmExoT2BqD,QAARk0C,GnE4oTb,SAAUt3C,EAAQD,EAASO,GAEjC,YAaA,SAASkI,GAAgBC,EAAUC,GAAe,KAAMD,YAAoBC,IAAgB,KAAM,IAAIC,WAAU,qCAEhH,QAASC,GAA2BzI,EAAMQ,GAAQ,IAAKR,EAAQ,KAAM,IAAI0I,gBAAe,4DAAgE,QAAOlI,GAAyB,gBAATA,IAAqC,kBAATA,GAA8BR,EAAPQ,EAElO,QAASmI,GAAUC,EAAUC,GAAc,GAA0B,kBAAfA,IAA4C,OAAfA,EAAuB,KAAM,IAAIL,WAAU,iEAAoEK,GAAeD,GAASpH,UAAYT,OAAO6B,OAAOiG,GAAcA,EAAWrH,WAAasF,aAAelF,MAAOgH,EAAU1H,YAAY,EAAO4H,UAAU,EAAM7H,cAAc,KAAe4H,IAAY9H,OAAO2F,eAAiB3F,OAAO2F,eAAekC,EAAUC,GAAcD,EAASjC,UAAYkC,GAdje9H,OAAOC,eAAepB,EAAS,cAC7BgC,OAAO,GoEnxTT,IAAA89B,GAAAv/B,EAAA,IpEwxTIw/B,EAEJ,SAAgCn4B,GAAO,MAAOA,IAAOA,EAAInG,WAAamG,GAAQvE,QAASuE,IAFnDk4B,GoEtxT9B4X,EpEgyTO,SAAUC,GAGrB,QAASD,KAGP,MAFAjvC,GAAgBpI,KAAMq3C,GAEf7uC,EAA2BxI,MAAOq3C,EAAO3wC,WAAa5F,OAAOkJ,eAAeqtC,IAASxsC,MAAM7K,KAAMyF,YAG1G,MARAiD,GAAU2uC,EAAQC,GAQXD,GACP3X,EAAO18B,QoEzyTTq0C,GAAOxxC,SAAW,SAClBwxC,EAAOhyC,SAAW,KAAM,KpE6yTxB1F,EAAQqD,QoE3yTOq0C,GpE+yTT,SAAUz3C,EAAQD,EAASO,GAEjC,YAiBA,SAASkI,GAAgBC,EAAUC,GAAe,KAAMD,YAAoBC,IAAgB,KAAM,IAAIC,WAAU,qCAEhH,QAASC,GAA2BzI,EAAMQ,GAAQ,IAAKR,EAAQ,KAAM,IAAI0I,gBAAe,4DAAgE,QAAOlI,GAAyB,gBAATA,IAAqC,kBAATA,GAA8BR,EAAPQ,EAElO,QAASmI,GAAUC,EAAUC,GAAc,GAA0B,kBAAfA,IAA4C,OAAfA,EAAuB,KAAM,IAAIL,WAAU,iEAAoEK,GAAeD,GAASpH,UAAYT,OAAO6B,OAAOiG,GAAcA,EAAWrH,WAAasF,aAAelF,MAAOgH,EAAU1H,YAAY,EAAO4H,UAAU,EAAM7H,cAAc,KAAe4H,IAAY9H,OAAO2F,eAAiB3F,OAAO2F,eAAekC,EAAUC,GAAcD,EAASjC,UAAYkC,GAlBje9H,OAAOC,eAAepB,EAAS,cAC7BgC,OAAO,GAGT,IAAI0H,GAAe,WAAc,QAASC,GAAiBrB,EAAQsB,GAAS,IAAK,GAAIlJ,GAAI,EAAGA,EAAIkJ,EAAM7D,OAAQrF,IAAK,CAAE,GAAImJ,GAAaD,EAAMlJ,EAAImJ,GAAWvI,WAAauI,EAAWvI,aAAc,EAAOuI,EAAWxI,cAAe,EAAU,SAAWwI,KAAYA,EAAWX,UAAW,GAAM/H,OAAOC,eAAekH,EAAQuB,EAAW9B,IAAK8B,IAAiB,MAAO,UAAUlB,EAAamB,EAAYC,GAAiJ,MAA9HD,IAAYH,EAAiBhB,EAAY/G,UAAWkI,GAAiBC,GAAaJ,EAAiBhB,EAAaoB,GAAqBpB,MAE5hBqB,EAAO,QAASzI,GAAIG,EAAQC,EAAUsI,GAA2B,OAAXvI,IAAiBA,EAASwI,SAAStI,UAAW,IAAIuI,GAAOhJ,OAAOiJ,yBAAyB1I,EAAQC,EAAW,QAAa0H,KAATc,EAAoB,CAAE,GAAIZ,GAASpI,OAAOkJ,eAAe3I,EAAS,OAAe,QAAX6H,MAAmB,GAAkChI,EAAIgI,EAAQ5H,EAAUsI,GAAoB,GAAI,SAAWE,GAAQ,MAAOA,GAAKnI,KAAgB,IAAIf,GAASkJ,EAAK5I,GAAK,QAAe8H,KAAXpI,EAA4C,MAAOA,GAAOL,KAAKqJ,IqEh0T5dY,EAAAtK,EAAA,GrEo0TIuK,EAEJ,SAAgClD,GAAO,MAAOA,IAAOA,EAAInG,WAAamG,GAAQvE,QAASuE,IAFjDiD,GqEl0ThC+sC,ErE40TO,SAAU52B,GAGrB,QAAS42B,KAGP,MAFAnvC,GAAgBpI,KAAMu3C,GAEf/uC,EAA2BxI,MAAOu3C,EAAO7wC,WAAa5F,OAAOkJ,eAAeutC,IAAS1sC,MAAM7K,KAAMyF,YAuB1G,MA5BAiD,GAAU6uC,EAAQ52B,GAQlBtX,EAAakuC,EAAQ,OACnB7vC,IAAK,SACL/F,MAAO,SqEt1TKA,GACZ,MAAc,UAAVA,EACKkR,SAAS6F,cAAc,OACX,QAAV/W,EACFkR,SAAS6F,cAAc,OAE9B/O,EAAA4tC,EAAA7wC,WAAA5F,OAAAkJ,eAAAutC,GAAA,SAAAv3C,MAAAO,KAAAP,KAAoB2B,MrE01TtB+F,IAAK,UACL/F,MAAO,SqEv1TMmJ,GACb,MAAwB,QAApBA,EAAQzF,QAA0B,MACd,QAApByF,EAAQzF,QAA0B,YAAtC,OrE41TKkyC,GACP9sC,EAASzH,QqEz1TXu0C,GAAO1xC,SAAW,SAClB0xC,EAAOlyC,SAAW,MAAO,OrE61TzB1F,EAAQqD,QqE31TOu0C,GrE+1TT,SAAU33C,EAAQD,EAASO,GAEjC,YAaA,SAASkI,GAAgBC,EAAUC,GAAe,KAAMD,YAAoBC,IAAgB,KAAM,IAAIC,WAAU,qCAEhH,QAASC,GAA2BzI,EAAMQ,GAAQ,IAAKR,EAAQ,KAAM,IAAI0I,gBAAe,4DAAgE,QAAOlI,GAAyB,gBAATA,IAAqC,kBAATA,GAA8BR,EAAPQ,EAElO,QAASmI,GAAUC,EAAUC,GAAc,GAA0B,kBAAfA,IAA4C,OAAfA,EAAuB,KAAM,IAAIL,WAAU,iEAAoEK,GAAeD,GAASpH,UAAYT,OAAO6B,OAAOiG,GAAcA,EAAWrH,WAAasF,aAAelF,MAAOgH,EAAU1H,YAAY,EAAO4H,UAAU,EAAM7H,cAAc,KAAe4H,IAAY9H,OAAO2F,eAAiB3F,OAAO2F,eAAekC,EAAUC,GAAcD,EAASjC,UAAYkC,GAdje9H,OAAOC,eAAepB,EAAS,cAC7BgC,OAAO,GsE33TT,IAAA6I,GAAAtK,EAAA,GtEg4TIuK,EAEJ,SAAgClD,GAAO,MAAOA,IAAOA,EAAInG,WAAamG,GAAQvE,QAASuE,IAFjDiD,GsE93ThCgtC,EtEw4TO,SAAU72B,GAGrB,QAAS62B,KAGP,MAFApvC,GAAgBpI,KAAMw3C,GAEfhvC,EAA2BxI,MAAOw3C,EAAO9wC,WAAa5F,OAAOkJ,eAAewtC,IAAS3sC,MAAM7K,KAAMyF,YAG1G,MARAiD,GAAU8uC,EAAQ72B,GAQX62B,GACP/sC,EAASzH,QsEj5TXw0C,GAAO3xC,SAAW,SAClB2xC,EAAOnyC,QAAU,ItEq5TjB1F,EAAQqD,QsEn5TOw0C,GtEu5TT,SAAU53C,EAAQD,EAASO,GAEjC,YAaA,SAASkI,GAAgBC,EAAUC,GAAe,KAAMD,YAAoBC,IAAgB,KAAM,IAAIC,WAAU,qCAEhH,QAASC,GAA2BzI,EAAMQ,GAAQ,IAAKR,EAAQ,KAAM,IAAI0I,gBAAe,4DAAgE,QAAOlI,GAAyB,gBAATA,IAAqC,kBAATA,GAA8BR,EAAPQ,EAElO,QAASmI,GAAUC,EAAUC,GAAc,GAA0B,kBAAfA,IAA4C,OAAfA,EAAuB,KAAM,IAAIL,WAAU,iEAAoEK,GAAeD,GAASpH,UAAYT,OAAO6B,OAAOiG,GAAcA,EAAWrH,WAAasF,aAAelF,MAAOgH,EAAU1H,YAAY,EAAO4H,UAAU,EAAM7H,cAAc,KAAe4H,IAAY9H,OAAO2F,eAAiB3F,OAAO2F,eAAekC,EAAUC,GAAcD,EAASjC,UAAYkC,GAdje9H,OAAOC,eAAepB,EAAS,cAC7BgC,OAAO,GuEn6TT,IAAA6I,GAAAtK,EAAA,GvEw6TIuK,EAEJ,SAAgClD,GAAO,MAAOA,IAAOA,EAAInG,WAAamG,GAAQvE,QAASuE,IAFjDiD,GuEt6ThCitC,EvEg7TU,SAAU92B,GAGxB,QAAS82B,KAGP,MAFArvC,GAAgBpI,KAAMy3C,GAEfjvC,EAA2BxI,MAAOy3C,EAAU/wC,WAAa5F,OAAOkJ,eAAeytC,IAAY5sC,MAAM7K,KAAMyF,YAGhH,MARAiD,GAAU+uC,EAAW92B,GAQd82B,GACPhtC,EAASzH,QuEz7TXy0C,GAAU5xC,SAAW,YACrB4xC,EAAUpyC,QAAU,IvE67TpB1F,EAAQqD,QuE37TOy0C,GvE+7TT,SAAU73C,EAAQD,EAASO,GAEjC,YAmBA,SAASkI,GAAgBC,EAAUC,GAAe,KAAMD,YAAoBC,IAAgB,KAAM,IAAIC,WAAU,qCAEhH,QAASC,GAA2BzI,EAAMQ,GAAQ,IAAKR,EAAQ,KAAM,IAAI0I,gBAAe,4DAAgE,QAAOlI,GAAyB,gBAATA,IAAqC,kBAATA,GAA8BR,EAAPQ,EAElO,QAASmI,GAAUC,EAAUC,GAAc,GAA0B,kBAAfA,IAA4C,OAAfA,EAAuB,KAAM,IAAIL,WAAU,iEAAoEK,GAAeD,GAASpH,UAAYT,OAAO6B,OAAOiG,GAAcA,EAAWrH,WAAasF,aAAelF,MAAOgH,EAAU1H,YAAY,EAAO4H,UAAU,EAAM7H,cAAc,KAAe4H,IAAY9H,OAAO2F,eAAiB3F,OAAO2F,eAAekC,EAAUC,GAAcD,EAASjC,UAAYkC,GApBje9H,OAAOC,eAAepB,EAAS,cAC7BgC,OAAO,GAGT,IAAI0H,GAAe,WAAc,QAASC,GAAiBrB,EAAQsB,GAAS,IAAK,GAAIlJ,GAAI,EAAGA,EAAIkJ,EAAM7D,OAAQrF,IAAK,CAAE,GAAImJ,GAAaD,EAAMlJ,EAAImJ,GAAWvI,WAAauI,EAAWvI,aAAc,EAAOuI,EAAWxI,cAAe,EAAU,SAAWwI,KAAYA,EAAWX,UAAW,GAAM/H,OAAOC,eAAekH,EAAQuB,EAAW9B,IAAK8B,IAAiB,MAAO,UAAUlB,EAAamB,EAAYC,GAAiJ,MAA9HD,IAAYH,EAAiBhB,EAAY/G,UAAWkI,GAAiBC,GAAaJ,EAAiBhB,EAAaoB,GAAqBpB,MAE5hBqB,EAAO,QAASzI,GAAIG,EAAQC,EAAUsI,GAA2B,OAAXvI,IAAiBA,EAASwI,SAAStI,UAAW,IAAIuI,GAAOhJ,OAAOiJ,yBAAyB1I,EAAQC,EAAW,QAAa0H,KAATc,EAAoB,CAAE,GAAIZ,GAASpI,OAAOkJ,eAAe3I,EAAS,OAAe,QAAX6H,MAAmB,GAAkChI,EAAIgI,EAAQ5H,EAAUsI,GAAoB,GAAI,SAAWE,GAAQ,MAAOA,GAAKnI,KAAgB,IAAIf,GAASkJ,EAAK5I,GAAK,QAAe8H,KAAXpI,EAA4C,MAAOA,GAAOL,KAAKqJ,IwEh9T5dQ,EAAAlK,EAAA,GxEo9TImK,EAIJ,SAAgC9C,GAAO,MAAOA,IAAOA,EAAInG,WAAamG,GAAQvE,QAASuE,IAJ9C6C,GwEn9TzCy1B,EAAA3/B,EAAA,IAEMw3C,GACJ,MACA,SACA,SAIIC,ExEw9TM,SAAU/sC,GAGpB,QAAS+sC,KAGP,MAFAvvC,GAAgBpI,KAAM23C,GAEfnvC,EAA2BxI,MAAO23C,EAAMjxC,WAAa5F,OAAOkJ,eAAe2tC,IAAQ9sC,MAAM7K,KAAMyF,YAqDxG,MA1DAiD,GAAUivC,EAAO/sC,GAQjBvB,EAAasuC,IACXjwC,IAAK,SACL/F,MAAO,SwEr8TFhB,EAAMgB,GACP+1C,EAAWhnC,QAAQ/P,IAAS,EAC1BgB,EACF3B,KAAK8K,QAAQ8L,aAAajW,EAAMgB,GAEhC3B,KAAK8K,QAAQuU,gBAAgB1e,GAG/BgJ,EAAAguC,EAAAp2C,UAAAmF,WAAA5F,OAAAkJ,eAAA2tC,EAAAp2C,WAAA,SAAAvB,MAAAO,KAAAP,KAAaW,EAAMgB,QxEy8TrB+F,IAAK,SACL/F,MAAO,SwE/+TKA,GACZ,GAAIwC,oEAAoBxC,EAIxB,OAHqB,gBAAVA,IACTwC,EAAKyS,aAAa,MAAO5W,KAAKoiB,SAASzgB,IAElCwC,KxEk/TPuD,IAAK,UACL/F,MAAO,SwEh/TMmJ,GACb,MAAO4sC,GAAWxrC,OAAO,SAASnD,EAASkC,GAIzC,MAHIH,GAAQoZ,aAAajZ,KACvBlC,EAAQkC,GAAaH,EAAQ7F,aAAagG,IAErClC,UxEo/TTrB,IAAK,QACL/F,MAAO,SwEj/TI0gB,GACX,MAAO,qBAAqBuO,KAAKvO,IAAQ,yBAAyBuO,KAAKvO,MxEq/TvE3a,IAAK,WACL/F,MAAO,SwEn/TO0gB,GACd,OAAO,EAAAwd,EAAAzd,UAASC,GAAM,OAAQ,QAAS,SAAWA,EAAM,UxEs/TxD3a,IAAK,QACL/F,MAAO,SwEp/TImJ,GACX,MAAOA,GAAQ7F,aAAa,WxEw/TvB0yC,GwEnhUWttC,EAAArH,QAAUG,MA0C9Bw0C,GAAM9xC,SAAW,QACjB8xC,EAAMtyC,QAAU,MxE8+ThB1F,EAAQqD,QwE3+TO20C,GxE++TT,SAAU/3C,EAAQD,EAASO,GAEjC,YAmBA,SAASkI,GAAgBC,EAAUC,GAAe,KAAMD,YAAoBC,IAAgB,KAAM,IAAIC,WAAU,qCAEhH,QAASC,GAA2BzI,EAAMQ,GAAQ,IAAKR,EAAQ,KAAM,IAAI0I,gBAAe,4DAAgE,QAAOlI,GAAyB,gBAATA,IAAqC,kBAATA,GAA8BR,EAAPQ,EAElO,QAASmI,GAAUC,EAAUC,GAAc,GAA0B,kBAAfA,IAA4C,OAAfA,EAAuB,KAAM,IAAIL,WAAU,iEAAoEK,GAAeD,GAASpH,UAAYT,OAAO6B,OAAOiG,GAAcA,EAAWrH,WAAasF,aAAelF,MAAOgH,EAAU1H,YAAY,EAAO4H,UAAU,EAAM7H,cAAc,KAAe4H,IAAY9H,OAAO2F,eAAiB3F,OAAO2F,eAAekC,EAAUC,GAAcD,EAASjC,UAAYkC,GApBje9H,OAAOC,eAAepB,EAAS,cAC7BgC,OAAO,GAGT,IAAI0H,GAAe,WAAc,QAASC,GAAiBrB,EAAQsB,GAAS,IAAK,GAAIlJ,GAAI,EAAGA,EAAIkJ,EAAM7D,OAAQrF,IAAK,CAAE,GAAImJ,GAAaD,EAAMlJ,EAAImJ,GAAWvI,WAAauI,EAAWvI,aAAc,EAAOuI,EAAWxI,cAAe,EAAU,SAAWwI,KAAYA,EAAWX,UAAW,GAAM/H,OAAOC,eAAekH,EAAQuB,EAAW9B,IAAK8B,IAAiB,MAAO,UAAUlB,EAAamB,EAAYC,GAAiJ,MAA9HD,IAAYH,EAAiBhB,EAAY/G,UAAWkI,GAAiBC,GAAaJ,EAAiBhB,EAAaoB,GAAqBpB,MAE5hBqB,EAAO,QAASzI,GAAIG,EAAQC,EAAUsI,GAA2B,OAAXvI,IAAiBA,EAASwI,SAAStI,UAAW,IAAIuI,GAAOhJ,OAAOiJ,yBAAyB1I,EAAQC,EAAW,QAAa0H,KAATc,EAAoB,CAAE,GAAIZ,GAASpI,OAAOkJ,eAAe3I,EAAS,OAAe,QAAX6H,MAAmB,GAAkChI,EAAIgI,EAAQ5H,EAAUsI,GAAoB,GAAI,SAAWE,GAAQ,MAAOA,GAAKnI,KAAgB,IAAIf,GAASkJ,EAAK5I,GAAK,QAAe8H,KAAXpI,EAA4C,MAAOA,GAAOL,KAAKqJ,IyEljU5d6W,EAAAvgB,EAAA,GACA2/B,EAAA3/B,EAAA,IzEujUI4/B,EAEJ,SAAgCv4B,GAAO,MAAOA,IAAOA,EAAInG,WAAamG,GAAQvE,QAASuE,IAFnDs4B,GyErjU9B6X,GACJ,SACA,SAIIE,EzE2jUM,SAAUC,GAGpB,QAASD,KAGP,MAFAxvC,GAAgBpI,KAAM43C,GAEfpvC,EAA2BxI,MAAO43C,EAAMlxC,WAAa5F,OAAOkJ,eAAe4tC,IAAQ/sC,MAAM7K,KAAMyF,YA+CxG,MApDAiD,GAAUkvC,EAAOC,GAQjBxuC,EAAauuC,IACXlwC,IAAK,SACL/F,MAAO,SyE5iUFhB,EAAMgB,GACP+1C,EAAWhnC,QAAQ/P,IAAS,EAC1BgB,EACF3B,KAAK8K,QAAQ8L,aAAajW,EAAMgB,GAEhC3B,KAAK8K,QAAQuU,gBAAgB1e,GAG/BgJ,EAAAiuC,EAAAr2C,UAAAmF,WAAA5F,OAAAkJ,eAAA4tC,EAAAr2C,WAAA,SAAAvB,MAAAO,KAAAP,KAAaW,EAAMgB,QzEgjUrB+F,IAAK,SACL/F,MAAO,SyEllUKA,GACZ,GAAIwC,oEAAoBxC,EAIxB,OAHAwC,GAAKyS,aAAa,cAAe,KACjCzS,EAAKyS,aAAa,mBAAmB,GACrCzS,EAAKyS,aAAa,MAAO5W,KAAKoiB,SAASzgB,IAChCwC,KzEqlUPuD,IAAK,UACL/F,MAAO,SyEnlUMmJ,GACb,MAAO4sC,GAAWxrC,OAAO,SAASnD,EAASkC,GAIzC,MAHIH,GAAQoZ,aAAajZ,KACvBlC,EAAQkC,GAAaH,EAAQ7F,aAAagG,IAErClC,UzEulUTrB,IAAK,WACL/F,MAAO,SyEplUO0gB,GACd,MAAOyd,GAAA98B,QAAKof,SAASC,MzEulUrB3a,IAAK,QACL/F,MAAO,SyErlUImJ,GACX,MAAOA,GAAQ7F,aAAa,WzEylUvB2yC,GACPn3B,EAAOrX,WyE3kUTwuC,GAAM/xC,SAAW,QACjB+xC,EAAM5xC,UAAY,WAClB4xC,EAAMvyC,QAAU,SzE+kUhB1F,EAAQqD,QyE5kUO40C,GzEglUT,SAAUh4C,EAAQD,EAASO,GAEjC,YAwBA,SAASiI,GAAuBZ,GAAO,MAAOA,IAAOA,EAAInG,WAAamG,GAAQvE,QAASuE,GAEvF,QAASa,GAAgBC,EAAUC,GAAe,KAAMD,YAAoBC,IAAgB,KAAM,IAAIC,WAAU,qCAEhH,QAASC,GAA2BzI,EAAMQ,GAAQ,IAAKR,EAAQ,KAAM,IAAI0I,gBAAe,4DAAgE,QAAOlI,GAAyB,gBAATA,IAAqC,kBAATA,GAA8BR,EAAPQ,EAElO,QAASmI,GAAUC,EAAUC,GAAc,GAA0B,kBAAfA,IAA4C,OAAfA,EAAuB,KAAM,IAAIL,WAAU,iEAAoEK,GAAeD,GAASpH,UAAYT,OAAO6B,OAAOiG,GAAcA,EAAWrH,WAAasF,aAAelF,MAAOgH,EAAU1H,YAAY,EAAO4H,UAAU,EAAM7H,cAAc,KAAe4H,IAAY9H,OAAO2F,eAAiB3F,OAAO2F,eAAekC,EAAUC,GAAcD,EAASjC,UAAYkC,GA3Bje9H,OAAOC,eAAepB,EAAS,cAC7BgC,OAAO,IAEThC,EAAQqD,QAAUrD,EAAQm4C,gBAAc9uC,EAExC,IAAIK,GAAe,WAAc,QAASC,GAAiBrB,EAAQsB,GAAS,IAAK,GAAIlJ,GAAI,EAAGA,EAAIkJ,EAAM7D,OAAQrF,IAAK,CAAE,GAAImJ,GAAaD,EAAMlJ,EAAImJ,GAAWvI,WAAauI,EAAWvI,aAAc,EAAOuI,EAAWxI,cAAe,EAAU,SAAWwI,KAAYA,EAAWX,UAAW,GAAM/H,OAAOC,eAAekH,EAAQuB,EAAW9B,IAAK8B,IAAiB,MAAO,UAAUlB,EAAamB,EAAYC,GAAiJ,MAA9HD,IAAYH,EAAiBhB,EAAY/G,UAAWkI,GAAiBC,GAAaJ,EAAiBhB,EAAaoB,GAAqBpB,MAE5hBqB,EAAO,QAASzI,GAAIG,EAAQC,EAAUsI,GAA2B,OAAXvI,IAAiBA,EAASwI,SAAStI,UAAW,IAAIuI,GAAOhJ,OAAOiJ,yBAAyB1I,EAAQC,EAAW,QAAa0H,KAATc,EAAoB,CAAE,GAAIZ,GAASpI,OAAOkJ,eAAe3I,EAAS,OAAe,QAAX6H,MAAmB,GAAkChI,EAAIgI,EAAQ5H,EAAUsI,GAAoB,GAAI,SAAWE,GAAQ,MAAOA,GAAKnI,KAAgB,IAAIf,GAASkJ,EAAK5I,GAAK,QAAe8H,KAAXpI,EAA4C,MAAOA,GAAOL,KAAKqJ,I0EhpU5d66B,EAAAvkC,EAAA,I1EopUIwkC,EAAUv8B,EAAuBs8B,G0EnpUrC/R,EAAAxyB,EAAA,G1EupUIgwB,EAAU/nB,EAAuBuqB,G0EtpUrC3c,EAAA7V,EAAA,G1E0pUI8V,EAAW7N,EAAuB4N,G0EvpUhC+hC,E1EiqUY,SAAUC,GAG1B,QAASD,KAGP,MAFA1vC,GAAgBpI,KAAM83C,GAEftvC,EAA2BxI,MAAO83C,EAAYpxC,WAAa5F,OAAOkJ,eAAe8tC,IAAcjtC,MAAM7K,KAAMyF,YAuBpH,MA5BAiD,GAAUovC,EAAaC,GAQvB1uC,EAAayuC,EAAa,OACxBpwC,IAAK,SACL/F,MAAO,S0E3qUKA,GACZ,GAAIwC,oEAAoBxC,EAQxB,OAPqB,gBAAVA,KACTixC,OAAOoF,MAAMC,OAAOt2C,EAAOwC,GACzB+zC,cAAc,EACdC,WAAY,SAEdh0C,EAAKyS,aAAa,aAAcjV,IAE3BwC,K1E8qUPuD,IAAK,QACL/F,MAAO,S0E5qUImJ,GACX,MAAOA,GAAQ7F,aAAa,kB1EgrUvB6yC,GACPpT,EAAQ1hC,Q0E9qUV80C,GAAYjyC,SAAW,UACvBiyC,EAAY9xC,UAAY,aACxB8xC,EAAYzyC,QAAU,M1EkrUtB,I0E/qUM+yC,G1E+qUQ,SAAUvlB,G0E1qUtB,QAAAulB,KAAchwC,EAAApI,KAAAo4C,EAAA,IAAAtsC,GAAAtD,EAAAxI,MAAAo4C,EAAA1xC,WAAA5F,OAAAkJ,eAAAouC,IAAA73C,KAAAP,MAEZ,IAAoB,MAAhB4yC,OAAOoF,MACT,KAAM,IAAI/wC,OAAM,iCAHN,OAAA6E,G1E+rUd,MApBApD,GAAU0vC,EAASvlB,GAEnBxpB,EAAa+uC,EAAS,OACpB1wC,IAAK,WACL/F,MAAO,W0ElrUPuuB,EAAAltB,QAAMF,SAASg1C,GAAa,O1EksUvBM,GACPpiC,EAAShT,QAEXrD,G0EzrUSm4C,c1E0rUTn4C,E0E1rUiCqD,QAAXo1C,G1E8rUhB,SAAUx4C,EAAQD,EAASO,GAEjC,YA4BA,SAASiI,GAAuBZ,GAAO,MAAOA,IAAOA,EAAInG,WAAamG,GAAQvE,QAASuE,GAEvF,QAASa,GAAgBC,EAAUC,GAAe,KAAMD,YAAoBC,IAAgB,KAAM,IAAIC,WAAU,qCAEhH,QAASC,GAA2BzI,EAAMQ,GAAQ,IAAKR,EAAQ,KAAM,IAAI0I,gBAAe,4DAAgE,QAAOlI,GAAyB,gBAATA,IAAqC,kBAATA,GAA8BR,EAAPQ,EAElO,QAASmI,GAAUC,EAAUC,GAAc,GAA0B,kBAAfA,IAA4C,OAAfA,EAAuB,KAAM,IAAIL,WAAU,iEAAoEK,GAAeD,GAASpH,UAAYT,OAAO6B,OAAOiG,GAAcA,EAAWrH,WAAasF,aAAelF,MAAOgH,EAAU1H,YAAY,EAAO4H,UAAU,EAAM7H,cAAc,KAAe4H,IAAY9H,OAAO2F,eAAiB3F,OAAO2F,eAAekC,EAAUC,GAAcD,EAASjC,UAAYkC,GA/Bje9H,OAAOC,eAAepB,EAAS,cAC7BgC,OAAO,IAEThC,EAAQqD,QAAUrD,EAAQ04C,UAAY14C,EAAQihB,cAAY5X,EAE1D,IAAIK,GAAe,WAAc,QAASC,GAAiBrB,EAAQsB,GAAS,IAAK,GAAIlJ,GAAI,EAAGA,EAAIkJ,EAAM7D,OAAQrF,IAAK,CAAE,GAAImJ,GAAaD,EAAMlJ,EAAImJ,GAAWvI,WAAauI,EAAWvI,aAAc,EAAOuI,EAAWxI,cAAe,EAAU,SAAWwI,KAAYA,EAAWX,UAAW,GAAM/H,OAAOC,eAAekH,EAAQuB,EAAW9B,IAAK8B,IAAiB,MAAO,UAAUlB,EAAamB,EAAYC,GAAiJ,MAA9HD,IAAYH,EAAiBhB,EAAY/G,UAAWkI,GAAiBC,GAAaJ,EAAiBhB,EAAaoB,GAAqBpB,MAE5hBqB,EAAO,QAASzI,GAAIG,EAAQC,EAAUsI,GAA2B,OAAXvI,IAAiBA,EAASwI,SAAStI,UAAW,IAAIuI,GAAOhJ,OAAOiJ,yBAAyB1I,EAAQC,EAAW,QAAa0H,KAATc,EAAoB,CAAE,GAAIZ,GAASpI,OAAOkJ,eAAe3I,EAAS,OAAe,QAAX6H,MAAmB,GAAkChI,EAAIgI,EAAQ5H,EAAUsI,GAAoB,GAAI,SAAWE,GAAQ,MAAOA,GAAKnI,KAAgB,IAAIf,GAASkJ,EAAK5I,GAAK,QAAe8H,KAAXpI,EAA4C,MAAOA,GAAOL,KAAKqJ,I2EnvU5dQ,EAAAlK,EAAA,G3EuvUImK,EAAclC,EAAuBiC,G2EtvUzCsoB,EAAAxyB,EAAA,G3E0vUIgwB,EAAU/nB,EAAuBuqB,G2EzvUrC3c,EAAA7V,EAAA,G3E6vUI8V,EAAW7N,EAAuB4N,G2E5vUtC0qB,EAAAvgC,EAAA,I3EgwUIwgC,EAASv4B,EAAuBs4B,G2E7vU9B6X,E3EuwUgB,SAAUC,GAG9B,QAASD,KAGP,MAFAlwC,GAAgBpI,KAAMs4C,GAEf9vC,EAA2BxI,MAAOs4C,EAAgB5xC,WAAa5F,OAAOkJ,eAAesuC,IAAkBztC,MAAM7K,KAAMyF,YAyB5H,MA9BAiD,GAAU4vC,EAAiBC,GAQ3BlvC,EAAaivC,IACX5wC,IAAK,cACL/F,MAAO,S2EjxUG4J,GACVvL,KAAK8K,QAAQgW,YAAc9gB,KAAK8K,QAAQgW,YACxC9gB,KAAKqlB,SACL1b,EAAA2uC,EAAA/2C,UAAAmF,WAAA5F,OAAAkJ,eAAAsuC,EAAA/2C,WAAA,cAAAvB,MAAAO,KAAAP,KAAkBuL,M3EoxUlB7D,IAAK,YACL/F,MAAO,S2ElxUC62C,GACR,GAAIjsC,GAAOvM,KAAK8K,QAAQgW,WACpB9gB,MAAKy4C,aAAelsC,KAClBA,EAAKgK,OAAO7Q,OAAS,GAAwB,MAAnB1F,KAAKy4C,cACjCz4C,KAAK8K,QAAQwL,UAAYkiC,EAAUjsC,GACnCvM,KAAK8K,QAAQunB,YACbryB,KAAKqlB,UAEPrlB,KAAKy4C,WAAalsC,O3EuxUf+rC,GACP5X,EAAO19B,Q2EpxUTs1C,GAAgBtyC,UAAY,WAG5B,IAAIqyC,GAAY,GAAIhuC,GAAArH,QAAUQ,WAAWE,MAAM,QAAS,QACtDc,MAAO6F,EAAArH,QAAUN,MAAMoC,SAInB4zC,E3EoxUO,SAAU7lB,G2E9wUrB,QAAA6lB,GAAY37B,EAAOnV,GAASQ,EAAApI,KAAA04C,EAAA,IAAA5sC,GAAAtD,EAAAxI,MAAA04C,EAAAhyC,WAAA5F,OAAAkJ,eAAA0uC,IAAAn4C,KAAAP,KACpB+c,EAAOnV,GACb,IAAsC,kBAA3BkE,GAAKlE,QAAQ4wC,UACtB,KAAM,IAAIvxC,OAAM,4FAElB,IAAI0xC,GAAQ,IALc,OAM1B7sC,GAAKiR,MAAM5F,GAAG+Y,EAAAltB,QAAMiR,OAAOoK,gBAAiB,WAC1Cu6B,aAAaD,GACbA,EAAQj0B,WAAW,WACjB5Y,EAAK0sC,YACLG,EAAQ,MACP7sC,EAAKlE,QAAQixC,YAElB/sC,EAAK0sC,YAbqB1sC,E3E+zU5B,MAhDApD,GAAUgwC,EAAQ7lB,GAElBxpB,EAAaqvC,EAAQ,OACnBhxC,IAAK,WACL/F,MAAO,W2EvxUPuuB,EAAAltB,QAAMF,SAASu1C,GAAW,GAC1BnoB,EAAAltB,QAAMF,SAASw1C,GAAiB,O3EgzUlCjvC,EAAaqvC,IACXhxC,IAAK,YACL/F,MAAO,W2E/xUG,GAAAiX,GAAA5Y,IACV,KAAIA,KAAK+c,MAAM/F,UAAUiU,UAAzB,CACAjrB,KAAK+c,MAAMrF,OAAOwY,EAAAltB,QAAMqQ,QAAQC,KAChC,IAAIC,GAAQvT,KAAK+c,MAAMvJ,cACvBxT,MAAK+c,MAAMjG,OAAO7K,YAAYqsC,GAAiBjyC,QAAQ,SAACwwB,GACtDA,EAAK2hB,UAAU5/B,EAAKhR,QAAQ4wC,aAE9Bx4C,KAAK+c,MAAMrF,OAAOwY,EAAAltB,QAAMqQ,QAAQS,QACnB,MAATP,GACFvT,KAAK+c,MAAMlJ,aAAaN,EAAO2c,EAAAltB,QAAMqQ,QAAQS,a3EsyU1C4kC,GACP1iC,EAAShT,Q2EnyUX01C,GAAOxmC,UACLsmC,UAAY,WACV,MAAmB,OAAf5F,OAAOkG,KAAqB,KACzB,SAASvsC,GAEd,MADaqmC,QAAOkG,KAAKC,cAAcxsC,GACzB5K,UAGlBk3C,SAAU,K3EwyUZl5C,E2EpyU4BihB,UAAnB03B,E3EqyUT34C,E2EryUuC04C,Y3EsyUvC14C,E2EtyU4DqD,QAAV01C,G3E0yU5C,SAAU94C,EAAQD,EAASO,GAEjC,YAgCA,SAASiI,GAAuBZ,GAAO,MAAOA,IAAOA,EAAInG,WAAamG,GAAQvE,QAASuE,GAEvF,QAASkK,GAAgBlK,EAAKG,EAAK/F,GAAiK,MAApJ+F,KAAOH,GAAOzG,OAAOC,eAAewG,EAAKG,GAAO/F,MAAOA,EAAOV,YAAY,EAAMD,cAAc,EAAM6H,UAAU,IAAkBtB,EAAIG,GAAO/F,EAAgB4F,EAE3M,QAASa,GAAgBC,EAAUC,GAAe,KAAMD,YAAoBC,IAAgB,KAAM,IAAIC,WAAU,qCAEhH,QAASC,GAA2BzI,EAAMQ,GAAQ,IAAKR,EAAQ,KAAM,IAAI0I,gBAAe,4DAAgE,QAAOlI,GAAyB,gBAATA,IAAqC,kBAATA,GAA8BR,EAAPQ,EAElO,QAASmI,GAAUC,EAAUC,GAAc,GAA0B,kBAAfA,IAA4C,OAAfA,EAAuB,KAAM,IAAIL,WAAU,iEAAoEK,GAAeD,GAASpH,UAAYT,OAAO6B,OAAOiG,GAAcA,EAAWrH,WAAasF,aAAelF,MAAOgH,EAAU1H,YAAY,EAAO4H,UAAU,EAAM7H,cAAc,KAAe4H,IAAY9H,OAAO2F,eAAiB3F,OAAO2F,eAAekC,EAAUC,GAAcD,EAASjC,UAAYkC,G4E7wUje,QAASowC,GAAUrnC,EAAWvG,EAAQzJ,GACpC,GAAIkC,GAAQgP,SAAS6F,cAAc,SACnC7U,GAAM+S,aAAa,OAAQ,UAC3B/S,EAAM2S,UAAUC,IAAI,MAAQrL,GACf,MAATzJ,IACFkC,EAAMlC,MAAQA,GAEhBgQ,EAAUkQ,YAAYhe,GAGxB,QAASo1C,GAAYtnC,EAAWunC,GACzBjzC,MAAMC,QAAQgzC,EAAO,MACxBA,GAAUA,IAEZA,EAAO7yC,QAAQ,SAAS8yC,GACtB,GAAIC,GAAQvmC,SAAS6F,cAAc,OACnC0gC,GAAM5iC,UAAUC,IAAI,cACpB0iC,EAAS9yC,QAAQ,SAASgzC,GACxB,GAAuB,gBAAZA,GACTL,EAAUI,EAAOC,OACZ,CACL,GAAIjuC,GAAStK,OAAO+M,KAAKwrC,GAAS,GAC9B13C,EAAQ03C,EAAQjuC,EAChBnF,OAAMC,QAAQvE,GAChB23C,EAAUF,EAAOhuC,EAAQzJ,GAEzBq3C,EAAUI,EAAOhuC,EAAQzJ,MAI/BgQ,EAAUkQ,YAAYu3B,KAI1B,QAASE,GAAU3nC,EAAWvG,EAAQJ,GACpC,GAAInH,GAAQgP,SAAS6F,cAAc,SACnC7U,GAAM2S,UAAUC,IAAI,MAAQrL,GAC5BJ,EAAO3E,QAAQ,SAAS1E,GACtB,GAAIqiB,GAASnR,SAAS6F,cAAc,WACtB,IAAV/W,EACFqiB,EAAOpN,aAAa,QAASjV,GAE7BqiB,EAAOpN,aAAa,WAAY,YAElC/S,EAAMge,YAAYmC,KAEpBrS,EAAUkQ,YAAYhe,G5E0rUxB/C,OAAOC,eAAepB,EAAS,cAC7BgC,OAAO,IAEThC,EAAQs5C,YAAct5C,EAAQqD,YAAUgG,EAExC,IAAI6L,GAAiB,WAAc,QAASO,GAAc/N,EAAKhH,GAAK,GAAIgV,MAAeC,GAAK,EAAUC,GAAK,EAAWC,MAAKxM,EAAW,KAAM,IAAK,GAAiCyM,GAA7BjQ,EAAK6B,EAAI8N,OAAOjG,cAAmBoG,GAAMG,EAAKjQ,EAAGiG,QAAQiK,QAAoBL,EAAKvH,KAAK2H,EAAG9T,QAAYtB,GAAKgV,EAAK3P,SAAWrF,GAA3DiV,GAAK,IAAoE,MAAOK,GAAOJ,GAAK,EAAMC,EAAKG,EAAO,QAAU,KAAWL,GAAM9P,EAAW,QAAGA,EAAW,SAAO,QAAU,GAAI+P,EAAI,KAAMC,IAAQ,MAAOH,GAAQ,MAAO,UAAUhO,EAAKhH,GAAK,GAAI4F,MAAMC,QAAQmB,GAAQ,MAAOA,EAAY,IAAI8N,OAAOjG,WAAYpO,QAAOuG,GAAQ,MAAO+N,GAAc/N,EAAKhH,EAAa,MAAM,IAAIkI,WAAU,4DAEllBc,EAAe,WAAc,QAASC,GAAiBrB,EAAQsB,GAAS,IAAK,GAAIlJ,GAAI,EAAGA,EAAIkJ,EAAM7D,OAAQrF,IAAK,CAAE,GAAImJ,GAAaD,EAAMlJ,EAAImJ,GAAWvI,WAAauI,EAAWvI,aAAc,EAAOuI,EAAWxI,cAAe,EAAU,SAAWwI,KAAYA,EAAWX,UAAW,GAAM/H,OAAOC,eAAekH,EAAQuB,EAAW9B,IAAK8B,IAAiB,MAAO,UAAUlB,EAAamB,EAAYC,GAAiJ,MAA9HD,IAAYH,EAAiBhB,EAAY/G,UAAWkI,GAAiBC,GAAaJ,EAAiBhB,EAAaoB,GAAqBpB,M4Et4UhiB4B,EAAAhK,EAAA,G5E04UIiK,EAAehC,EAAuB+B,G4Ez4U1CE,EAAAlK,EAAA,G5E64UImK,EAAclC,EAAuBiC,G4E54UzCsoB,EAAAxyB,EAAA,G5Eg5UIgwB,EAAU/nB,EAAuBuqB,G4E/4UrCxc,EAAAhW,EAAA,I5Em5UIiW,EAAWhO,EAAuB+N,G4El5UtCH,EAAA7V,EAAA,G5Es5UI8V,EAAW7N,EAAuB4N,G4Ep5UlCrD,GAAQ,EAAAyD,EAAAnT,SAAO,iBAGbu2C,E5E+5UQ,SAAU1mB,G4E95UtB,QAAA0mB,GAAYx8B,EAAOnV,GAASQ,EAAApI,KAAAu5C,EAAA,IAAAvyC,GAAAwB,EAAAxI,MAAAu5C,EAAA7yC,WAAA5F,OAAAkJ,eAAAuvC,IAAAh5C,KAAAP,KACpB+c,EAAOnV,GACb,IAAI3B,MAAMC,QAAQc,EAAKY,QAAQ+J,WAAY,CACzC,GAAIA,GAAYkB,SAAS6F,cAAc,MACvCugC,GAAYtnC,EAAW3K,EAAKY,QAAQ+J,WACpCoL,EAAMpL,UAAUpN,WAAWiH,aAAamG,EAAWoL,EAAMpL,WACzD3K,EAAK2K,UAAYA,MAC0B,gBAA3B3K,GAAKY,QAAQ+J,UAC7B3K,EAAK2K,UAAYkB,SAASC,cAAc9L,EAAKY,QAAQ+J,WAErD3K,EAAK2K,UAAY3K,EAAKY,QAAQ+J,SAEhC,MAAM3K,EAAK2K,oBAAqB5M,cAAc,IAAAy0C,EAC5C,OAAAA,GAAO9mC,EAAMC,MAAM,iCAAkC3L,EAAKY,SAA1DY,EAAAxB,EAAAwyC,GAbwB,MAe1BxyC,GAAK2K,UAAU6E,UAAUC,IAAI,cAC7BzP,EAAKmyC,YACLnyC,EAAK22B,YACL78B,OAAO+M,KAAK7G,EAAKY,QAAQ+1B,UAAUt3B,QAAQ,SAAC+E,GAC1CpE,EAAKyyC,WAAWruC,EAAQpE,EAAKY,QAAQ+1B,SAASvyB,SAE7C/E,QAAQ9F,KAAKyG,EAAK2K,UAAU6L,iBAAiB,kBAAmB,SAAC3Z,GAClEmD,EAAKqe,OAAOxhB,KAEdmD,EAAK+V,MAAM5F,GAAG+Y,EAAAltB,QAAMiR,OAAOI,cAAe,SAAC+C,EAAM7D,GAC3C6D,IAAS8Y,EAAAltB,QAAMiR,OAAOqK,kBACxBtX,EAAK0Q,OAAOnE,KAGhBvM,EAAK+V,MAAM5F,GAAG+Y,EAAAltB,QAAMiR,OAAOoK,gBAAiB,WAAM,GAAAq7B,GAChC1yC,EAAK+V,MAAM/F,UAAU+D,WADW4+B,EAAA9kC,EAAA6kC,EAAA,GAC3CnmC,EAD2ComC,EAAA,EAEhD3yC,GAAK0Q,OAAOnE,KA/BYvM,E5E6jV5B,MA9JA0B,GAAU6wC,EAAS1mB,GA+CnBxpB,EAAakwC,IACX7xC,IAAK,aACL/F,MAAO,S4E76UEyJ,EAAQ+S,GACjBne,KAAK29B,SAASvyB,GAAU+S,K5Eg7UxBzW,IAAK,SACL/F,MAAO,S4E96UFkC,GAAO,GAAAiI,GAAA9L,KACRoL,KAAYxI,KAAKrC,KAAKsD,EAAM2S,UAAW,SAACxQ,GAC1C,MAAoC,KAA7BA,EAAU0K,QAAQ,QAE3B,IAAKtF,EAAL,CAKA,GAJAA,EAASA,EAAOO,MAAM,MAAMjG,QACN,WAAlB7B,EAAMwB,SACRxB,EAAM+S,aAAa,OAAQ,UAEA,MAAzB5W,KAAK29B,SAASvyB,GAAiB,CACjC,GAAmC,MAA/BpL,KAAK+c,MAAMjG,OAAOC,WAA4D,MAAvC/W,KAAK+c,MAAMjG,OAAOC,UAAU3L,GAErE,WADAsH,GAAM6F,KAAK,wCAAyCnN,EAAQvH,EAG9D,IAA+B,MAA3BwG,EAAArH,QAAUH,MAAMuI,GAElB,WADAsH,GAAM6F,KAAK,2CAA4CnN,EAAQvH,GAInE,GAAIuZ,GAA8B,WAAlBvZ,EAAMwB,QAAuB,SAAW,OACxDxB,GAAMwZ,iBAAiBD,EAAW,SAAC8C,GACjC,GAAIve,SACJ,IAAsB,WAAlBkC,EAAMwB,QAAsB,CAC9B,GAAIxB,EAAM+gB,cAAgB,EAAG,MAC7B,IAAIN,GAAWzgB,EAAM+D,QAAQ/D,EAAM+gB,cAEjCjjB,IADE2iB,EAASJ,aAAa,cAGhBI,EAAS3iB,QAAS,OAI1BA,IADEkC,EAAM2S,UAAUmF,SAAS,eAGnB9X,EAAMlC,QAAUkC,EAAMqgB,aAAa,UAE7ChE,EAAE6D,gBAEJjY,GAAKiR,MAAM5D,OAlB4B,IAAAygC,GAmBvB9tC,EAAKiR,MAAM/F,UAAU+D,WAnBE8+B,EAAAhlC,EAAA+kC,EAAA,GAmBlCrmC,EAnBkCsmC,EAAA,EAoBvC,IAA6B,MAAzB/tC,EAAK6xB,SAASvyB,GAChBU,EAAK6xB,SAASvyB,GAAQ7K,KAAtBuL,EAAiCnK,OAC5B,IAAI0I,EAAArH,QAAUH,MAAMuI,GAAQ7J,oBAAqB8I,GAAArH,QAAUG,MAAO,CAEvE,KADAxB,EAAQm4C,gBAAgB1uC,IACZ,MACZU,GAAKiR,MAAMoY,gBAAe,GAAAhrB,GAAAnH,SACvBgL,OAAOuF,EAAMpI,OACb4C,OAAOwF,EAAM7N,QACbqF,OAHuB0G,KAGbrG,EAASzJ,IACpBuuB,EAAAltB,QAAMqQ,QAAQC,UAEhBxH,GAAKiR,MAAM3R,OAAOA,EAAQzJ,EAAOuuB,EAAAltB,QAAMqQ,QAAQC,KAEjDxH,GAAK4L,OAAOnE,KAGdvT,KAAKm5C,SAASrrC,MAAM1C,EAAQvH,Q5Em7U5B6D,IAAK,SACL/F,MAAO,S4Ej7UF4R,GACL,GAAIxK,GAAmB,MAATwK,KAAqBvT,KAAK+c,MAAMnC,UAAUrH,EACxDvT,MAAKm5C,SAAS9yC,QAAQ,SAASqvC,GAAM,GAAAC,GAAA9gC,EACb6gC,EADa,GAC9BtqC,EAD8BuqC,EAAA,GACtB9xC,EADsB8xC,EAAA,EAEnC,IAAsB,WAAlB9xC,EAAMwB,QAAsB,CAC9B,GAAI2e,SACJ,IAAa,MAATzQ,EACFyQ,EAAS,SACJ,IAAuB,MAAnBjb,EAAQqC,GACjB4Y,EAASngB,EAAMiP,cAAc,wBACxB,KAAK7M,MAAMC,QAAQ6C,EAAQqC,IAAU,CAC1C,GAAIzJ,GAAQoH,EAAQqC,EACC,iBAAVzJ,KACTA,EAAQA,EAAMyd,QAAQ,MAAO,QAE/B4E,EAASngB,EAAMiP,cAAN,iBAAqCnR,EAArC,MAEG,MAAVqiB,GACFngB,EAAMlC,MAAQ,GACdkC,EAAM+gB,eAAiB,GAEvBZ,EAAOM,UAAW,MAGpB,IAAa,MAAT/Q,EACF1P,EAAM2S,UAAU1J,OAAO,iBAClB,IAAIjJ,EAAMqgB,aAAa,SAAU,CAGtC,GAAIe,GAAWlc,EAAQqC,KAAYvH,EAAMoB,aAAa,UACnB,MAAnB8D,EAAQqC,IAAmBrC,EAAQqC,GAAQhE,aAAevD,EAAMoB,aAAa,UAC1D,MAAnB8D,EAAQqC,KAAoBvH,EAAMoB,aAAa,QAC/DpB,GAAM2S,UAAUa,OAAO,YAAa4N,OAEpCphB,GAAM2S,UAAUa,OAAO,YAAgC,MAAnBtO,EAAQqC,U5Ey7U7CmuC,GACPvjC,EAAShT,Q4Ep7UXu2C,GAAQrnC,YAoDRqnC,EAAQrnC,UACNP,UAAW,KACXgsB,UACE/G,MAAO,WAAW,GAAAhe,GAAA5Y,KACZuT,EAAQvT,KAAK+c,MAAMvJ,cACvB,IAAa,MAATD,EACJ,GAAoB,GAAhBA,EAAM7N,OAAa,CACrB,GAAIqD,GAAU/I,KAAK+c,MAAMnC,WACzB9Z,QAAO+M,KAAK9E,GAAS1C,QAAQ,SAAC1F,GAEyB,MAAjD0J,EAAArH,QAAUH,MAAMlC,EAAM0J,EAAArH,QAAUN,MAAMoC,SACxC8T,EAAKmE,MAAM3R,OAAOzK,GAAM,SAI5BX,MAAK+c,MAAMb,aAAa3I,EAAO2c,EAAAltB,QAAMqQ,QAAQC,OAGjDyjB,UAAW,SAASp1B,GAClB,GAAI20B,GAAQt2B,KAAK+c,MAAMnC,YAAX,KACE,SAAVjZ,GAA4B,MAAT20B,EACrBt2B,KAAK+c,MAAM3R,OAAO,QAAS,QAAS8kB,EAAAltB,QAAMqQ,QAAQC,MACxC3R,GAAmB,UAAV20B,GACnBt2B,KAAK+c,MAAM3R,OAAO,SAAS,EAAO8kB,EAAAltB,QAAMqQ,QAAQC,MAElDtT,KAAK+c,MAAM3R,OAAO,YAAazJ,EAAOuuB,EAAAltB,QAAMqQ,QAAQC,OAEtDue,OAAQ,SAASlwB,GACf,GAAI4R,GAAQvT,KAAK+c,MAAMvJ,eACnBzK,EAAU/I,KAAK+c,MAAMnC,UAAUrH,GAC/Bse,EAAStC,SAASxmB,EAAQ8oB,QAAU,EACxC,IAAc,OAAVlwB,GAA4B,OAAVA,EAAgB,CACpC,GAAIqR,GAAsB,OAAVrR,EAAkB,GAAK,CACb,SAAtBoH,EAAQguB,YAAqB/jB,IAAa,GAC9ChT,KAAK+c,MAAM3R,OAAO,SAAUymB,EAAS7e,EAAUkd,EAAAltB,QAAMqQ,QAAQC,QAGjEmkB,KAAM,SAAS91B,IACC,IAAVA,IACFA,EAAQm4C,OAAO,oBAEjB95C,KAAK+c,MAAM3R,OAAO,OAAQzJ,EAAOuuB,EAAAltB,QAAMqQ,QAAQC,OAEjDuhB,KAAM,SAASlzB,GACb,GAAI4R,GAAQvT,KAAK+c,MAAMvJ,eACnBzK,EAAU/I,KAAK+c,MAAMnC,UAAUrH,EACrB,WAAV5R,EACsB,YAApBoH,EAAA,MAAqD,cAApBA,EAAA,KACnC/I,KAAK+c,MAAM3R,OAAO,QAAQ,EAAO8kB,EAAAltB,QAAMqQ,QAAQC,MAE/CtT,KAAK+c,MAAM3R,OAAO,OAAQ,YAAa8kB,EAAAltB,QAAMqQ,QAAQC,MAGvDtT,KAAK+c,MAAM3R,OAAO,OAAQzJ,EAAOuuB,EAAAltB,QAAMqQ,QAAQC,S5E67UvD3T,E4Et7UoBqD,QAAXu2C,E5Eu7UT55C,E4Ev7U6Bs5C,e5E27UvB,SAAUr5C,EAAQD,G6E/rVxBC,EAAAD,QAAA,8L7EqsVM,SAAUC,EAAQD,G8ErsVxBC,EAAAD,QAAA,+L9E2sVM,SAAUC,EAAQD,G+E3sVxBC,EAAAD,QAAA,+L/EitVM,SAAUC,EAAQD,GgFjtVxBC,EAAAD,QAAA,+LhFutVM,SAAUC,EAAQD,GiFvtVxBC,EAAAD,QAAA,g7EjF6tVM,SAAUC,EAAQD,GkF7tVxBC,EAAAD,QAAA,sTlFmuVM,SAAUC,EAAQD,GmFnuVxBC,EAAAD,QAAA,iRnFyuVM,SAAUC,EAAQD,GoFzuVxBC,EAAAD,QAAA,sUpF+uVM,SAAUC,EAAQD,GqF/uVxBC,EAAAD,QAAA,oPrFqvVM,SAAUC,EAAQD,GsFrvVxBC,EAAAD,QAAA,mVtF2vVM,SAAUC,EAAQD,GuF3vVxBC,EAAAD,QAAA,kVvFiwVM,SAAUC,EAAQD,GwFjwVxBC,EAAAD,QAAA,qOxFuwVM,SAAUC,EAAQD,GyFvwVxBC,EAAAD,QAAA,mOzF6wVM,SAAUC,EAAQD,G0F7wVxBC,EAAAD,QAAA,0W1FmxVM,SAAUC,EAAQD,G2FnxVxBC,EAAAD,QAAA,6Y3FyxVM,SAAUC,EAAQD,G4FzxVxBC,EAAAD,QAAA,03C5F+xVM,SAAUC,EAAQD,G6F/xVxBC,EAAAD,QAAA,gkB7FqyVM,SAAUC,EAAQD,G8FryVxBC,EAAAD,QAAA,goB9F2yVM,SAAUC,EAAQD,G+F3yVxBC,EAAAD,QAAA,gM/FizVM,SAAUC,EAAQD,GgGjzVxBC,EAAAD,QAAA,0OhGuzVM,SAAUC,EAAQD,GiGvzVxBC,EAAAD,QAAA,yQjG6zVM,SAAUC,EAAQD,GkG7zVxBC,EAAAD,QAAA,+PlGm0VM,SAAUC,EAAQD,GmGn0VxBC,EAAAD,QAAA,+ZnGy0VM,SAAUC,EAAQD,GoGz0VxBC,EAAAD,QAAA,osBpG+0VM,SAAUC,EAAQD,GqG/0VxBC,EAAAD,QAAA,uVrGq1VM,SAAUC,EAAQD,GsGr1VxBC,EAAAD,QAAA,6XtG21VM,SAAUC,EAAQD,GuG31VxBC,EAAAD,QAAA,wqBvGi2VM,SAAUC,EAAQD,GwGj2VxBC,EAAAD,QAAA,ijBxGu2VM,SAAUC,EAAQD,GyGv2VxBC,EAAAD,QAAA,6gBzG62VM,SAAUC,EAAQD,G0G72VxBC,EAAAD,QAAA,gM1Gm3VM,SAAUC,EAAQD,G2Gn3VxBC,EAAAD,QAAA,+qB3Gy3VM,SAAUC,EAAQD,G4Gz3VxBC,EAAAD,QAAA,oK5G+3VM,SAAUC,EAAQD,EAASO,GAEjC,YA8BA,SAASiI,GAAuBZ,GAAO,MAAOA,IAAOA,EAAInG,WAAamG,GAAQvE,QAASuE,GAEvF,QAASa,GAAgBC,EAAUC,GAAe,KAAMD,YAAoBC,IAAgB,KAAM,IAAIC,WAAU,qCAEhH,QAASC,GAA2BzI,EAAMQ,GAAQ,IAAKR,EAAQ,KAAM,IAAI0I,gBAAe,4DAAgE,QAAOlI,GAAyB,gBAATA,IAAqC,kBAATA,GAA8BR,EAAPQ,EAElO,QAASmI,GAAUC,EAAUC,GAAc,GAA0B,kBAAfA,IAA4C,OAAfA,EAAuB,KAAM,IAAIL,WAAU,iEAAoEK,GAAeD,GAASpH,UAAYT,OAAO6B,OAAOiG,GAAcA,EAAWrH,WAAasF,aAAelF,MAAOgH,EAAU1H,YAAY,EAAO4H,UAAU,EAAM7H,cAAc,KAAe4H,IAAY9H,OAAO2F,eAAiB3F,OAAO2F,eAAekC,EAAUC,GAAcD,EAASjC,UAAYkC,GAjCje9H,OAAOC,eAAepB,EAAS,cAC7BgC,OAAO,IAEThC,EAAQqD,QAAUrD,EAAQo6C,kBAAgB/wC,EAE1C,IAAIW,GAAO,QAASzI,GAAIG,EAAQC,EAAUsI,GAA2B,OAAXvI,IAAiBA,EAASwI,SAAStI,UAAW,IAAIuI,GAAOhJ,OAAOiJ,yBAAyB1I,EAAQC,EAAW,QAAa0H,KAATc,EAAoB,CAAE,GAAIZ,GAASpI,OAAOkJ,eAAe3I,EAAS,OAAe,QAAX6H,MAAmB,GAAkChI,EAAIgI,EAAQ5H,EAAUsI,GAAoB,GAAI,SAAWE,GAAQ,MAAOA,GAAKnI,KAAgB,IAAIf,GAASkJ,EAAK5I,GAAK,QAAe8H,KAAXpI,EAA4C,MAAOA,GAAOL,KAAKqJ,IAExdP,EAAe,WAAc,QAASC,GAAiBrB,EAAQsB,GAAS,IAAK,GAAIlJ,GAAI,EAAGA,EAAIkJ,EAAM7D,OAAQrF,IAAK,CAAE,GAAImJ,GAAaD,EAAMlJ,EAAImJ,GAAWvI,WAAauI,EAAWvI,aAAc,EAAOuI,EAAWxI,cAAe,EAAU,SAAWwI,KAAYA,EAAWX,UAAW,GAAM/H,OAAOC,eAAekH,EAAQuB,EAAW9B,IAAK8B,IAAiB,MAAO,UAAUlB,EAAamB,EAAYC,GAAiJ,MAA9HD,IAAYH,EAAiBhB,EAAY/G,UAAWkI,GAAiBC,GAAaJ,EAAiBhB,EAAaoB,GAAqBpB,M6G34VhiB2B,EAAA/J,EAAA,G7G+4VI+I,EAAWd,EAAuB8B,G6G94VtC8J,EAAA7T,EAAA,G7Gk5VIoU,EAAYnM,EAAuB4L,G6Gj5VvCimC,EAAA95C,EAAA,I7Gq5VI+5C,EAAS9xC,EAAuB6xC,G6Gp5VpC/kC,EAAA/U,EAAA,IACA+gC,EAAA/gC,EAAA,I7Gy5VIghC,EAAU/4B,EAAuB84B,G6Gt5V/BiZ,IACH,OAAQ,SAAU,UAChBvkB,OAAQ,IAAOA,OAAQ,GAAK,eAG3BwkB,E7G65VY,SAAUC,G6G55V1B,QAAAD,GAAYp9B,EAAOnV,GAASQ,EAAApI,KAAAm6C,GACK,MAA3BvyC,EAAQ3H,QAAQ2S,SAAwD,MAArChL,EAAQ3H,QAAQ2S,QAAQjB,YAC7D/J,EAAQ3H,QAAQ2S,QAAQjB,UAAYuoC,EAFZ,IAAAlzC,GAAAwB,EAAAxI,MAAAm6C,EAAAzzC,WAAA5F,OAAAkJ,eAAAmwC,IAAA55C,KAAAP,KAIpB+c,EAAOnV,GAJa,OAK1BZ,GAAK+V,MAAMpL,UAAU6E,UAAUC,IAAI,aALTzP,E7Gs7V5B,MAzBA0B,GAAUyxC,EAAaC,GAevB/wC,EAAa8wC,IACXzyC,IAAK,gBACL/F,MAAO,S6Gt6VKiR,GACZ5S,KAAKm9B,QAAU,GAAI4c,GAAc/5C,KAAK+c,MAAO/c,KAAK4H,QAAQkS,QAC1D9Z,KAAKm9B,QAAQ19B,KAAKoiB,YAAYjP,EAAQjB,WACtC3R,KAAKq6C,gBAAgB1uC,MAAMpL,KAAKqS,EAAQjB,UAAU6L,iBAAiB,WAAnE0jB,EAAAl+B,SACAhD,KAAKs6C,gBAAgB3uC,MAAMpL,KAAKqS,EAAQjB,UAAU6L,iBAAiB,WAAnE0jB,EAAAl+B,a7G06VKm3C,GACPF,EAAOj3C,Q6Gx6VTm3C,GAAYjoC,UAAW,EAAAjJ,EAAAjG,UAAO,KAAUi3C,EAAAj3C,QAAUkP,UAChDjS,SACE2S,SACE+qB,UACElG,KAAM,SAAS91B,GACRA,EAGH3B,KAAK+c,MAAM/K,MAAMmrB,QAAQS,OAFzB59B,KAAK+c,MAAM3R,OAAO,QAAQ,Q7Go7VtC,I6Gz6VM2uC,G7Gy6Vc,SAAUQ,G6Gx6V5B,QAAAR,GAAYh9B,EAAOjD,GAAQ1R,EAAApI,KAAA+5C,EAAA,IAAAjuC,GAAAtD,EAAAxI,MAAA+5C,EAAArzC,WAAA5F,OAAAkJ,eAAA+vC,IAAAx5C,KAAAP,KACnB+c,EAAOjD,GADY,OAEzBhO,GAAKiR,MAAM5F,GAAG7C,EAAAtR,QAAQiR,OAAOI,cAAe,SAAC+C,EAAM7D,EAAOwb,EAAU9b,GAClE,GAAImE,IAAS9C,EAAAtR,QAAQiR,OAAOqK,iBAC5B,GAAa,MAAT/K,GAAiBA,EAAM7N,OAAS,GAAKuN,IAAWqB,EAAAtR,QAAQqQ,QAAQC,KAAM,CACxExH,EAAK0uC,OAEL1uC,EAAKrM,KAAK8jB,MAAMlJ,KAAO,MACvBvO,EAAKrM,KAAK8jB,MAAMhJ,MAAQ,GACxBzO,EAAKrM,KAAK8jB,MAAMhJ,MAAQzO,EAAKrM,KAAKo8B,YAAc,IAChD,IAAIvvB,GAAQR,EAAKiR,MAAMwU,SAAShe,EAAMpI,MAAOoI,EAAM7N,OACnD,IAAqB,IAAjB4G,EAAM5G,OACRoG,EAAKya,SAASza,EAAKiR,MAAMhD,UAAUxG,QAC9B,CACL,GAAIknC,GAAWnuC,EAAMA,EAAM5G,OAAS,GAChCyF,EAAQW,EAAKiR,MAAMmV,SAASuoB,GAC5B/0C,EAAS0G,KAAKC,IAAIouC,EAAS/0C,SAAW,EAAG6N,EAAMpI,MAAQoI,EAAM7N,OAASyF,GACtE2O,EAAShO,EAAKiR,MAAMhD,UAAU,GAAA9E,GAAAC,MAAU/J,EAAOzF,GACnDoG,GAAKya,SAASzM,QAEPjH,UAAS6a,gBAAkB5hB,EAAKsxB,SAAWtxB,EAAKiR,MAAM5B,YAC/DrP,EAAK6vB,SArBgB7vB,E7G6+V3B,MApEApD,GAAUqxC,EAAeQ,GAgCzBlxC,EAAa0wC,IACXryC,IAAK,SACL/F,MAAO,W6Gj7VA,GAAAiX,GAAA5Y,IACP2J,GAAAowC,EAAAx4C,UAAAmF,WAAA5F,OAAAkJ,eAAA+vC,EAAAx4C,WAAA,SAAAvB,MAAAO,KAAAP,MACAA,KAAKP,KAAKqT,cAAc,aAAauK,iBAAiB,QAAS,WAC7DzE,EAAKnZ,KAAK+W,UAAU1J,OAAO,gBAE7B9M,KAAK+c,MAAM5F,GAAG7C,EAAAtR,QAAQiR,OAAOoK,gBAAiB,WAE5CqG,WAAW,WACT,IAAI9L,EAAKnZ,KAAK+W,UAAUmF,SAAS,aAAjC,CACA,GAAIpI,GAAQqF,EAAKmE,MAAMvJ,cACV,OAATD,GACFqF,EAAK2N,SAAS3N,EAAKmE,MAAMhD,UAAUxG,MAEpC,Q7Gu7VL7L,IAAK,SACL/F,MAAO,W6Gn7VP3B,KAAKw6C,U7Gu7VL9yC,IAAK,WACL/F,MAAO,S6Gr7VAi6B,GACP,GAAIpvB,0FAAuBovB,GACvB8e,EAAQ16C,KAAKP,KAAKqT,cAAc,oBAEpC,IADA4nC,EAAMn3B,MAAMo3B,WAAa,GACX,IAAVnuC,EAAa,MAAOA,EACxBkuC,GAAMn3B,MAAMo3B,YAAe,EAAEnuC,EAAQkuC,EAAM7e,YAAY,EAAK,S7Gy7VvDke,GACPC,EAAM7d,Y6Gv7VR4d,GAActe,UACZ,yCACA,kCACE,mGACA,2BACF,UACAzrB,KAAK,I7Gq7VPrQ,E6Gl7VSo6C,gB7Gm7VTp6C,E6Gn7VuCqD,QAAfm3C,G7Gu7VlB,SAAUv6C,EAAQD,EAASO,GAEjC,YAmCA,SAASiI,GAAuBZ,GAAO,MAAOA,IAAOA,EAAInG,WAAamG,GAAQvE,QAASuE,GAEvF,QAASa,GAAgBC,EAAUC,GAAe,KAAMD,YAAoBC,IAAgB,KAAM,IAAIC,WAAU,qCAEhH,QAASC,GAA2BzI,EAAMQ,GAAQ,IAAKR,EAAQ,KAAM,IAAI0I,gBAAe,4DAAgE,QAAOlI,GAAyB,gBAATA,IAAqC,kBAATA,GAA8BR,EAAPQ,EAElO,QAASmI,GAAUC,EAAUC,GAAc,GAA0B,kBAAfA,IAA4C,OAAfA,EAAuB,KAAM,IAAIL,WAAU,iEAAoEK,GAAeD,GAASpH,UAAYT,OAAO6B,OAAOiG,GAAcA,EAAWrH,WAAasF,aAAelF,MAAOgH,EAAU1H,YAAY,EAAO4H,UAAU,EAAM7H,cAAc,KAAe4H,IAAY9H,OAAO2F,eAAiB3F,OAAO2F,eAAekC,EAAUC,GAAcD,EAASjC,UAAYkC,GAtCje9H,OAAOC,eAAepB,EAAS,cAC7BgC,OAAO,GAGT,IAAIkT,GAAiB,WAAc,QAASO,GAAc/N,EAAKhH,GAAK,GAAIgV,MAAeC,GAAK,EAAUC,GAAK,EAAWC,MAAKxM,EAAW,KAAM,IAAK,GAAiCyM,GAA7BjQ,EAAK6B,EAAI8N,OAAOjG,cAAmBoG,GAAMG,EAAKjQ,EAAGiG,QAAQiK,QAAoBL,EAAKvH,KAAK2H,EAAG9T,QAAYtB,GAAKgV,EAAK3P,SAAWrF,GAA3DiV,GAAK,IAAoE,MAAOK,GAAOJ,GAAK,EAAMC,EAAKG,EAAO,QAAU,KAAWL,GAAM9P,EAAW,QAAGA,EAAW,SAAO,QAAU,GAAI+P,EAAI,KAAMC,IAAQ,MAAOH,GAAQ,MAAO,UAAUhO,EAAKhH,GAAK,GAAI4F,MAAMC,QAAQmB,GAAQ,MAAOA,EAAY,IAAI8N,OAAOjG,WAAYpO,QAAOuG,GAAQ,MAAO+N,GAAc/N,EAAKhH,EAAa,MAAM,IAAIkI,WAAU,4DAEllBoB,EAAO,QAASzI,GAAIG,EAAQC,EAAUsI,GAA2B,OAAXvI,IAAiBA,EAASwI,SAAStI,UAAW,IAAIuI,GAAOhJ,OAAOiJ,yBAAyB1I,EAAQC,EAAW,QAAa0H,KAATc,EAAoB,CAAE,GAAIZ,GAASpI,OAAOkJ,eAAe3I,EAAS,OAAe,QAAX6H,MAAmB,GAAkChI,EAAIgI,EAAQ5H,EAAUsI,GAAoB,GAAI,SAAWE,GAAQ,MAAOA,GAAKnI,KAAgB,IAAIf,GAASkJ,EAAK5I,GAAK,QAAe8H,KAAXpI,EAA4C,MAAOA,GAAOL,KAAKqJ,IAExdP,EAAe,WAAc,QAASC,GAAiBrB,EAAQsB,GAAS,IAAK,GAAIlJ,GAAI,EAAGA,EAAIkJ,EAAM7D,OAAQrF,IAAK,CAAE,GAAImJ,GAAaD,EAAMlJ,EAAImJ,GAAWvI,WAAauI,EAAWvI,aAAc,EAAOuI,EAAWxI,cAAe,EAAU,SAAWwI,KAAYA,EAAWX,UAAW,GAAM/H,OAAOC,eAAekH,EAAQuB,EAAW9B,IAAK8B,IAAiB,MAAO,UAAUlB,EAAamB,EAAYC,GAAiJ,MAA9HD,IAAYH,EAAiBhB,EAAY/G,UAAWkI,GAAiBC,GAAaJ,EAAiBhB,EAAaoB,GAAqBpB,M8GljWhiB2B,EAAA/J,EAAA,G9GsjWI+I,EAAWd,EAAuB8B,G8GrjWtC8J,EAAA7T,EAAA,G9GyjWIoU,EAAYnM,EAAuB4L,G8GxjWvCimC,EAAA95C,EAAA,I9G4jWI+5C,EAAS9xC,EAAuB6xC,G8G3jWpCna,EAAA3/B,EAAA,I9G+jWI4/B,EAAS33B,EAAuB03B,G8G9jWpC5qB,EAAA/U,EAAA,IACA+gC,EAAA/gC,EAAA,I9GmkWIghC,EAAU/4B,EAAuB84B,G8GhkW/BiZ,KACDvkB,QAAS,IAAK,IAAK,KAAK,MAC1B,OAAQ,SAAU,YAAa,UAC7Bd,KAAM,YAAeA,KAAM,YAC7B,UAGG+lB,E9GqkWU,SAAUR,G8GpkWxB,QAAAQ,GAAY79B,EAAOnV,GAASQ,EAAApI,KAAA46C,GACK,MAA3BhzC,EAAQ3H,QAAQ2S,SAAwD,MAArChL,EAAQ3H,QAAQ2S,QAAQjB,YAC7D/J,EAAQ3H,QAAQ2S,QAAQjB,UAAYuoC,EAFZ,IAAAlzC,GAAAwB,EAAAxI,MAAA46C,EAAAl0C,WAAA5F,OAAAkJ,eAAA4wC,IAAAr6C,KAAAP,KAIpB+c,EAAOnV,GAJa,OAK1BZ,GAAK+V,MAAMpL,UAAU6E,UAAUC,IAAI,WALTzP,E9GmmW5B,MA9BA0B,GAAUkyC,EAAWR,GAerB/wC,EAAauxC,IACXlzC,IAAK,gBACL/F,MAAO,S8G9kWKiR,GACZA,EAAQjB,UAAU6E,UAAUC,IAAI,WAChCzW,KAAKq6C,gBAAgB1uC,MAAMpL,KAAKqS,EAAQjB,UAAU6L,iBAAiB,WAAnE0jB,EAAAl+B,SACAhD,KAAKs6C,gBAAgB3uC,MAAMpL,KAAKqS,EAAQjB,UAAU6L,iBAAiB,WAAnE0jB,EAAAl+B,SACAhD,KAAKm9B,QAAU,GAAI0d,GAAY76C,KAAK+c,MAAO/c,KAAK4H,QAAQkS,QACpDlH,EAAQjB,UAAUmB,cAAc,aAClC9S,KAAK+c,MAAMjL,SAASihB,YAAarrB,IAAK,IAAK0qB,UAAU,GAAQ,SAAS7e,EAAOxG,GAC3E6F,EAAQ+qB,SAAR,KAAyBp9B,KAAKqS,GAAU7F,EAAQ3B,OAAOqsB,Y9GolWtDmjB,GACPX,EAAOj3C,Q8GhlWT43C,GAAU1oC,UAAW,EAAAjJ,EAAAjG,UAAO,KAAUi3C,EAAAj3C,QAAUkP,UAC9CjS,SACE2S,SACE+qB,UACElG,KAAM,SAAS91B,GACb,GAAIA,EAAO,CACT,GAAI4R,GAAQvT,KAAK+c,MAAMvJ,cACvB,IAAa,MAATD,GAAiC,GAAhBA,EAAM7N,OAAa,MACxC,IAAI84B,GAAUx+B,KAAK+c,MAAM7B,QAAQ3H,EAC7B,kBAAiBqd,KAAK4N,IAA2C,IAA/BA,EAAQ9tB,QAAQ,aACpD8tB,EAAU,UAAYA,EAEVx+B,MAAK+c,MAAM/K,MAAMmrB,QACvBS,KAAK,OAAQY,OAErBx+B,MAAK+c,MAAM3R,OAAO,QAAQ,Q9G0lWtC,I8GjlWMyvC,G9GilWY,SAAUN,G8GhlW1B,QAAAM,GAAY99B,EAAOjD,GAAQ1R,EAAApI,KAAA66C,EAAA,IAAA/uC,GAAAtD,EAAAxI,MAAA66C,EAAAn0C,WAAA5F,OAAAkJ,eAAA6wC,IAAAt6C,KAAAP,KACnB+c,EAAOjD,GADY,OAEzBhO,GAAK0yB,QAAU1yB,EAAKrM,KAAKqT,cAAc,gBAFdhH,E9GmpW3B,MAlEApD,GAAUmyC,EAAaN,GAWvBlxC,EAAawxC,IACXnzC,IAAK,SACL/F,MAAO,W8GzlWA,GAAAiX,GAAA5Y,IACP2J,GAAAkxC,EAAAt5C,UAAAmF,WAAA5F,OAAAkJ,eAAA6wC,EAAAt5C,WAAA,SAAAvB,MAAAO,KAAAP,MACAA,KAAKP,KAAKqT,cAAc,eAAeuK,iBAAiB,QAAS,SAACU,GAC5DnF,EAAKnZ,KAAK+W,UAAUmF,SAAS,cAC/B/C,EAAKylB,OAELzlB,EAAKglB,KAAK,OAAQhlB,EAAK4lB,QAAQ1d,aAEjC/C,EAAMgG,mBAER/jB,KAAKP,KAAKqT,cAAc,eAAeuK,iBAAiB,QAAS,SAACU,GAChE,GAAsB,MAAlBnF,EAAK6lB,UAAmB,CAC1B,GAAIlrB,GAAQqF,EAAK6lB,SACjB7lB,GAAK8lB,eACL9lB,EAAKmE,MAAMxD,WAAWhG,EAAO,QAAQ,EAAOe,EAAAtR,QAAQqQ,QAAQC,YACrDsF,GAAK6lB,UAEd1gB,EAAMgG,iBACNnL,EAAK+iB,SAEP37B,KAAK+c,MAAM5F,GAAG7C,EAAAtR,QAAQiR,OAAOqK,iBAAkB,SAAC/K,EAAOwb,EAAU9b,GAC/D,GAAa,MAATM,EAAJ,CACA,GAAqB,IAAjBA,EAAM7N,QAAgBuN,IAAWqB,EAAAtR,QAAQqQ,QAAQC,KAAM,IAAAye,GACpCnZ,EAAKmE,MAAMjG,OAAOmK,WAAlB6e,EAAA98B,QAAuCuQ,EAAMpI,OADT6mB,EAAAnd,EAAAkd,EAAA,GACpD0F,EADoDzF,EAAA,GAC9ClhB,EAD8CkhB,EAAA,EAEzD,IAAY,MAARyF,EAAc,CAChB7e,EAAK6lB,UAAY,GAAAxpB,GAAAC,MAAU3B,EAAMpI,MAAQ2F,EAAQ2mB,EAAK/xB,SACtD,IAAI84B,GAAUsB,EAAA98B,QAAS+F,QAAQ0uB,EAAK3sB,QAKpC,OAJA8N,GAAK4lB,QAAQ1d,YAAc0d,EAC3B5lB,EAAK4lB,QAAQ5nB,aAAa,OAAQ4nB,GAClC5lB,EAAK4hC,WACL5hC,GAAK2N,SAAS3N,EAAKmE,MAAMhD,UAAUnB,EAAK6lB,wBAInC7lB,GAAK6lB,SAEd7lB,GAAK+iB,a9GmmWPj0B,IAAK,OACL/F,MAAO,W8G/lWPgI,EAAAkxC,EAAAt5C,UAAAmF,WAAA5F,OAAAkJ,eAAA6wC,EAAAt5C,WAAA,OAAAvB,MAAAO,KAAAP,MACAA,KAAKP,KAAK4f,gBAAgB,iB9GomWrBw7B,GACPb,EAAM7d,Y8GlmWR0e,GAAYpf,UACV,gEACA,mGACA,4BACA,6BACAzrB,KAAK,I9GimWPrQ,EAAQqD,Q8G9lWO43C,K9GimWM","file":"quill.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Quill\"] = factory();\n\telse\n\t\troot[\"Quill\"] = factory();\n})(typeof self !== 'undefined' ? self : this, function() {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition","/*!\n * Quill Editor v1.3.6\n * https://quilljs.com/\n * Copyright (c) 2014, Jason Chen\n * Copyright (c) 2013, salesforce.com\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Quill\"] = factory();\n\telse\n\t\troot[\"Quill\"] = factory();\n})(typeof self !== 'undefined' ? self : this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 45);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar container_1 = __webpack_require__(17);\nvar format_1 = __webpack_require__(18);\nvar leaf_1 = __webpack_require__(19);\nvar scroll_1 = __webpack_require__(48);\nvar inline_1 = __webpack_require__(49);\nvar block_1 = __webpack_require__(50);\nvar embed_1 = __webpack_require__(51);\nvar text_1 = __webpack_require__(52);\nvar attributor_1 = __webpack_require__(11);\nvar class_1 = __webpack_require__(29);\nvar style_1 = __webpack_require__(30);\nvar store_1 = __webpack_require__(28);\nvar Registry = __webpack_require__(1);\nvar Parchment = {\n    Scope: Registry.Scope,\n    create: Registry.create,\n    find: Registry.find,\n    query: Registry.query,\n    register: Registry.register,\n    Container: container_1.default,\n    Format: format_1.default,\n    Leaf: leaf_1.default,\n    Embed: embed_1.default,\n    Scroll: scroll_1.default,\n    Block: block_1.default,\n    Inline: inline_1.default,\n    Text: text_1.default,\n    Attributor: {\n        Attribute: attributor_1.default,\n        Class: class_1.default,\n        Style: style_1.default,\n        Store: store_1.default,\n    },\n};\nexports.default = Parchment;\n\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar ParchmentError = /** @class */ (function (_super) {\n    __extends(ParchmentError, _super);\n    function ParchmentError(message) {\n        var _this = this;\n        message = '[Parchment] ' + message;\n        _this = _super.call(this, message) || this;\n        _this.message = message;\n        _this.name = _this.constructor.name;\n        return _this;\n    }\n    return ParchmentError;\n}(Error));\nexports.ParchmentError = ParchmentError;\nvar attributes = {};\nvar classes = {};\nvar tags = {};\nvar types = {};\nexports.DATA_KEY = '__blot';\nvar Scope;\n(function (Scope) {\n    Scope[Scope[\"TYPE\"] = 3] = \"TYPE\";\n    Scope[Scope[\"LEVEL\"] = 12] = \"LEVEL\";\n    Scope[Scope[\"ATTRIBUTE\"] = 13] = \"ATTRIBUTE\";\n    Scope[Scope[\"BLOT\"] = 14] = \"BLOT\";\n    Scope[Scope[\"INLINE\"] = 7] = \"INLINE\";\n    Scope[Scope[\"BLOCK\"] = 11] = \"BLOCK\";\n    Scope[Scope[\"BLOCK_BLOT\"] = 10] = \"BLOCK_BLOT\";\n    Scope[Scope[\"INLINE_BLOT\"] = 6] = \"INLINE_BLOT\";\n    Scope[Scope[\"BLOCK_ATTRIBUTE\"] = 9] = \"BLOCK_ATTRIBUTE\";\n    Scope[Scope[\"INLINE_ATTRIBUTE\"] = 5] = \"INLINE_ATTRIBUTE\";\n    Scope[Scope[\"ANY\"] = 15] = \"ANY\";\n})(Scope = exports.Scope || (exports.Scope = {}));\nfunction create(input, value) {\n    var match = query(input);\n    if (match == null) {\n        throw new ParchmentError(\"Unable to create \" + input + \" blot\");\n    }\n    var BlotClass = match;\n    var node = \n    // @ts-ignore\n    input instanceof Node || input['nodeType'] === Node.TEXT_NODE ? input : BlotClass.create(value);\n    return new BlotClass(node, value);\n}\nexports.create = create;\nfunction find(node, bubble) {\n    if (bubble === void 0) { bubble = false; }\n    if (node == null)\n        return null;\n    // @ts-ignore\n    if (node[exports.DATA_KEY] != null)\n        return node[exports.DATA_KEY].blot;\n    if (bubble)\n        return find(node.parentNode, bubble);\n    return null;\n}\nexports.find = find;\nfunction query(query, scope) {\n    if (scope === void 0) { scope = Scope.ANY; }\n    var match;\n    if (typeof query === 'string') {\n        match = types[query] || attributes[query];\n        // @ts-ignore\n    }\n    else if (query instanceof Text || query['nodeType'] === Node.TEXT_NODE) {\n        match = types['text'];\n    }\n    else if (typeof query === 'number') {\n        if (query & Scope.LEVEL & Scope.BLOCK) {\n            match = types['block'];\n        }\n        else if (query & Scope.LEVEL & Scope.INLINE) {\n            match = types['inline'];\n        }\n    }\n    else if (query instanceof HTMLElement) {\n        var names = (query.getAttribute('class') || '').split(/\\s+/);\n        for (var i in names) {\n            match = classes[names[i]];\n            if (match)\n                break;\n        }\n        match = match || tags[query.tagName];\n    }\n    if (match == null)\n        return null;\n    // @ts-ignore\n    if (scope & Scope.LEVEL & match.scope && scope & Scope.TYPE & match.scope)\n        return match;\n    return null;\n}\nexports.query = query;\nfunction register() {\n    var Definitions = [];\n    for (var _i = 0; _i < arguments.length; _i++) {\n        Definitions[_i] = arguments[_i];\n    }\n    if (Definitions.length > 1) {\n        return Definitions.map(function (d) {\n            return register(d);\n        });\n    }\n    var Definition = Definitions[0];\n    if (typeof Definition.blotName !== 'string' && typeof Definition.attrName !== 'string') {\n        throw new ParchmentError('Invalid definition');\n    }\n    else if (Definition.blotName === 'abstract') {\n        throw new ParchmentError('Cannot register abstract class');\n    }\n    types[Definition.blotName || Definition.attrName] = Definition;\n    if (typeof Definition.keyName === 'string') {\n        attributes[Definition.keyName] = Definition;\n    }\n    else {\n        if (Definition.className != null) {\n            classes[Definition.className] = Definition;\n        }\n        if (Definition.tagName != null) {\n            if (Array.isArray(Definition.tagName)) {\n                Definition.tagName = Definition.tagName.map(function (tagName) {\n                    return tagName.toUpperCase();\n                });\n            }\n            else {\n                Definition.tagName = Definition.tagName.toUpperCase();\n            }\n            var tagNames = Array.isArray(Definition.tagName) ? Definition.tagName : [Definition.tagName];\n            tagNames.forEach(function (tag) {\n                if (tags[tag] == null || Definition.className == null) {\n                    tags[tag] = Definition;\n                }\n            });\n        }\n    }\n    return Definition;\n}\nexports.register = register;\n\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports) {\n\n'use strict';\n\nvar hasOwn = Object.prototype.hasOwnProperty;\nvar toStr = Object.prototype.toString;\n\nvar isArray = function isArray(arr) {\n\tif (typeof Array.isArray === 'function') {\n\t\treturn Array.isArray(arr);\n\t}\n\n\treturn toStr.call(arr) === '[object Array]';\n};\n\nvar isPlainObject = function isPlainObject(obj) {\n\tif (!obj || toStr.call(obj) !== '[object Object]') {\n\t\treturn false;\n\t}\n\n\tvar hasOwnConstructor = hasOwn.call(obj, 'constructor');\n\tvar hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf');\n\t// Not own constructor property must be Object\n\tif (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {\n\t\treturn false;\n\t}\n\n\t// Own properties are enumerated firstly, so to speed up,\n\t// if last one is own, then all properties are own.\n\tvar key;\n\tfor (key in obj) { /**/ }\n\n\treturn typeof key === 'undefined' || hasOwn.call(obj, key);\n};\n\nmodule.exports = function extend() {\n\tvar options, name, src, copy, copyIsArray, clone;\n\tvar target = arguments[0];\n\tvar i = 1;\n\tvar length = arguments.length;\n\tvar deep = false;\n\n\t// Handle a deep copy situation\n\tif (typeof target === 'boolean') {\n\t\tdeep = target;\n\t\ttarget = arguments[1] || {};\n\t\t// skip the boolean and the target\n\t\ti = 2;\n\t}\n\tif (target == null || (typeof target !== 'object' && typeof target !== 'function')) {\n\t\ttarget = {};\n\t}\n\n\tfor (; i < length; ++i) {\n\t\toptions = arguments[i];\n\t\t// Only deal with non-null/undefined values\n\t\tif (options != null) {\n\t\t\t// Extend the base object\n\t\t\tfor (name in options) {\n\t\t\t\tsrc = target[name];\n\t\t\t\tcopy = options[name];\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif (target !== copy) {\n\t\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\t\tif (deep && copy && (isPlainObject(copy) || (copyIsArray = isArray(copy)))) {\n\t\t\t\t\t\tif (copyIsArray) {\n\t\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\t\tclone = src && isArray(src) ? src : [];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tclone = src && isPlainObject(src) ? src : {};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\t\ttarget[name] = extend(deep, clone, copy);\n\n\t\t\t\t\t// Don't bring in undefined values\n\t\t\t\t\t} else if (typeof copy !== 'undefined') {\n\t\t\t\t\t\ttarget[name] = copy;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = exports.BlockEmbed = exports.bubbleFormats = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _extend = __webpack_require__(2);\n\nvar _extend2 = _interopRequireDefault(_extend);\n\nvar _quillDelta = __webpack_require__(4);\n\nvar _quillDelta2 = _interopRequireDefault(_quillDelta);\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nvar _break = __webpack_require__(14);\n\nvar _break2 = _interopRequireDefault(_break);\n\nvar _inline = __webpack_require__(5);\n\nvar _inline2 = _interopRequireDefault(_inline);\n\nvar _text = __webpack_require__(8);\n\nvar _text2 = _interopRequireDefault(_text);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar NEWLINE_LENGTH = 1;\n\nvar BlockEmbed = function (_Parchment$Embed) {\n  _inherits(BlockEmbed, _Parchment$Embed);\n\n  function BlockEmbed() {\n    _classCallCheck(this, BlockEmbed);\n\n    return _possibleConstructorReturn(this, (BlockEmbed.__proto__ || Object.getPrototypeOf(BlockEmbed)).apply(this, arguments));\n  }\n\n  _createClass(BlockEmbed, [{\n    key: 'attach',\n    value: function attach() {\n      _get(BlockEmbed.prototype.__proto__ || Object.getPrototypeOf(BlockEmbed.prototype), 'attach', this).call(this);\n      this.attributes = new _parchment2.default.Attributor.Store(this.domNode);\n    }\n  }, {\n    key: 'delta',\n    value: function delta() {\n      return new _quillDelta2.default().insert(this.value(), (0, _extend2.default)(this.formats(), this.attributes.values()));\n    }\n  }, {\n    key: 'format',\n    value: function format(name, value) {\n      var attribute = _parchment2.default.query(name, _parchment2.default.Scope.BLOCK_ATTRIBUTE);\n      if (attribute != null) {\n        this.attributes.attribute(attribute, value);\n      }\n    }\n  }, {\n    key: 'formatAt',\n    value: function formatAt(index, length, name, value) {\n      this.format(name, value);\n    }\n  }, {\n    key: 'insertAt',\n    value: function insertAt(index, value, def) {\n      if (typeof value === 'string' && value.endsWith('\\n')) {\n        var block = _parchment2.default.create(Block.blotName);\n        this.parent.insertBefore(block, index === 0 ? this : this.next);\n        block.insertAt(0, value.slice(0, -1));\n      } else {\n        _get(BlockEmbed.prototype.__proto__ || Object.getPrototypeOf(BlockEmbed.prototype), 'insertAt', this).call(this, index, value, def);\n      }\n    }\n  }]);\n\n  return BlockEmbed;\n}(_parchment2.default.Embed);\n\nBlockEmbed.scope = _parchment2.default.Scope.BLOCK_BLOT;\n// It is important for cursor behavior BlockEmbeds use tags that are block level elements\n\n\nvar Block = function (_Parchment$Block) {\n  _inherits(Block, _Parchment$Block);\n\n  function Block(domNode) {\n    _classCallCheck(this, Block);\n\n    var _this2 = _possibleConstructorReturn(this, (Block.__proto__ || Object.getPrototypeOf(Block)).call(this, domNode));\n\n    _this2.cache = {};\n    return _this2;\n  }\n\n  _createClass(Block, [{\n    key: 'delta',\n    value: function delta() {\n      if (this.cache.delta == null) {\n        this.cache.delta = this.descendants(_parchment2.default.Leaf).reduce(function (delta, leaf) {\n          if (leaf.length() === 0) {\n            return delta;\n          } else {\n            return delta.insert(leaf.value(), bubbleFormats(leaf));\n          }\n        }, new _quillDelta2.default()).insert('\\n', bubbleFormats(this));\n      }\n      return this.cache.delta;\n    }\n  }, {\n    key: 'deleteAt',\n    value: function deleteAt(index, length) {\n      _get(Block.prototype.__proto__ || Object.getPrototypeOf(Block.prototype), 'deleteAt', this).call(this, index, length);\n      this.cache = {};\n    }\n  }, {\n    key: 'formatAt',\n    value: function formatAt(index, length, name, value) {\n      if (length <= 0) return;\n      if (_parchment2.default.query(name, _parchment2.default.Scope.BLOCK)) {\n        if (index + length === this.length()) {\n          this.format(name, value);\n        }\n      } else {\n        _get(Block.prototype.__proto__ || Object.getPrototypeOf(Block.prototype), 'formatAt', this).call(this, index, Math.min(length, this.length() - index - 1), name, value);\n      }\n      this.cache = {};\n    }\n  }, {\n    key: 'insertAt',\n    value: function insertAt(index, value, def) {\n      if (def != null) return _get(Block.prototype.__proto__ || Object.getPrototypeOf(Block.prototype), 'insertAt', this).call(this, index, value, def);\n      if (value.length === 0) return;\n      var lines = value.split('\\n');\n      var text = lines.shift();\n      if (text.length > 0) {\n        if (index < this.length() - 1 || this.children.tail == null) {\n          _get(Block.prototype.__proto__ || Object.getPrototypeOf(Block.prototype), 'insertAt', this).call(this, Math.min(index, this.length() - 1), text);\n        } else {\n          this.children.tail.insertAt(this.children.tail.length(), text);\n        }\n        this.cache = {};\n      }\n      var block = this;\n      lines.reduce(function (index, line) {\n        block = block.split(index, true);\n        block.insertAt(0, line);\n        return line.length;\n      }, index + text.length);\n    }\n  }, {\n    key: 'insertBefore',\n    value: function insertBefore(blot, ref) {\n      var head = this.children.head;\n      _get(Block.prototype.__proto__ || Object.getPrototypeOf(Block.prototype), 'insertBefore', this).call(this, blot, ref);\n      if (head instanceof _break2.default) {\n        head.remove();\n      }\n      this.cache = {};\n    }\n  }, {\n    key: 'length',\n    value: function length() {\n      if (this.cache.length == null) {\n        this.cache.length = _get(Block.prototype.__proto__ || Object.getPrototypeOf(Block.prototype), 'length', this).call(this) + NEWLINE_LENGTH;\n      }\n      return this.cache.length;\n    }\n  }, {\n    key: 'moveChildren',\n    value: function moveChildren(target, ref) {\n      _get(Block.prototype.__proto__ || Object.getPrototypeOf(Block.prototype), 'moveChildren', this).call(this, target, ref);\n      this.cache = {};\n    }\n  }, {\n    key: 'optimize',\n    value: function optimize(context) {\n      _get(Block.prototype.__proto__ || Object.getPrototypeOf(Block.prototype), 'optimize', this).call(this, context);\n      this.cache = {};\n    }\n  }, {\n    key: 'path',\n    value: function path(index) {\n      return _get(Block.prototype.__proto__ || Object.getPrototypeOf(Block.prototype), 'path', this).call(this, index, true);\n    }\n  }, {\n    key: 'removeChild',\n    value: function removeChild(child) {\n      _get(Block.prototype.__proto__ || Object.getPrototypeOf(Block.prototype), 'removeChild', this).call(this, child);\n      this.cache = {};\n    }\n  }, {\n    key: 'split',\n    value: function split(index) {\n      var force = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n      if (force && (index === 0 || index >= this.length() - NEWLINE_LENGTH)) {\n        var clone = this.clone();\n        if (index === 0) {\n          this.parent.insertBefore(clone, this);\n          return this;\n        } else {\n          this.parent.insertBefore(clone, this.next);\n          return clone;\n        }\n      } else {\n        var next = _get(Block.prototype.__proto__ || Object.getPrototypeOf(Block.prototype), 'split', this).call(this, index, force);\n        this.cache = {};\n        return next;\n      }\n    }\n  }]);\n\n  return Block;\n}(_parchment2.default.Block);\n\nBlock.blotName = 'block';\nBlock.tagName = 'P';\nBlock.defaultChild = 'break';\nBlock.allowedChildren = [_inline2.default, _parchment2.default.Embed, _text2.default];\n\nfunction bubbleFormats(blot) {\n  var formats = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n  if (blot == null) return formats;\n  if (typeof blot.formats === 'function') {\n    formats = (0, _extend2.default)(formats, blot.formats());\n  }\n  if (blot.parent == null || blot.parent.blotName == 'scroll' || blot.parent.statics.scope !== blot.statics.scope) {\n    return formats;\n  }\n  return bubbleFormats(blot.parent, formats);\n}\n\nexports.bubbleFormats = bubbleFormats;\nexports.BlockEmbed = BlockEmbed;\nexports.default = Block;\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar diff = __webpack_require__(54);\nvar equal = __webpack_require__(12);\nvar extend = __webpack_require__(2);\nvar op = __webpack_require__(20);\n\n\nvar NULL_CHARACTER = String.fromCharCode(0);  // Placeholder char for embed in diff()\n\n\nvar Delta = function (ops) {\n  // Assume we are given a well formed ops\n  if (Array.isArray(ops)) {\n    this.ops = ops;\n  } else if (ops != null && Array.isArray(ops.ops)) {\n    this.ops = ops.ops;\n  } else {\n    this.ops = [];\n  }\n};\n\n\nDelta.prototype.insert = function (text, attributes) {\n  var newOp = {};\n  if (text.length === 0) return this;\n  newOp.insert = text;\n  if (attributes != null && typeof attributes === 'object' && Object.keys(attributes).length > 0) {\n    newOp.attributes = attributes;\n  }\n  return this.push(newOp);\n};\n\nDelta.prototype['delete'] = function (length) {\n  if (length <= 0) return this;\n  return this.push({ 'delete': length });\n};\n\nDelta.prototype.retain = function (length, attributes) {\n  if (length <= 0) return this;\n  var newOp = { retain: length };\n  if (attributes != null && typeof attributes === 'object' && Object.keys(attributes).length > 0) {\n    newOp.attributes = attributes;\n  }\n  return this.push(newOp);\n};\n\nDelta.prototype.push = function (newOp) {\n  var index = this.ops.length;\n  var lastOp = this.ops[index - 1];\n  newOp = extend(true, {}, newOp);\n  if (typeof lastOp === 'object') {\n    if (typeof newOp['delete'] === 'number' && typeof lastOp['delete'] === 'number') {\n      this.ops[index - 1] = { 'delete': lastOp['delete'] + newOp['delete'] };\n      return this;\n    }\n    // Since it does not matter if we insert before or after deleting at the same index,\n    // always prefer to insert first\n    if (typeof lastOp['delete'] === 'number' && newOp.insert != null) {\n      index -= 1;\n      lastOp = this.ops[index - 1];\n      if (typeof lastOp !== 'object') {\n        this.ops.unshift(newOp);\n        return this;\n      }\n    }\n    if (equal(newOp.attributes, lastOp.attributes)) {\n      if (typeof newOp.insert === 'string' && typeof lastOp.insert === 'string') {\n        this.ops[index - 1] = { insert: lastOp.insert + newOp.insert };\n        if (typeof newOp.attributes === 'object') this.ops[index - 1].attributes = newOp.attributes\n        return this;\n      } else if (typeof newOp.retain === 'number' && typeof lastOp.retain === 'number') {\n        this.ops[index - 1] = { retain: lastOp.retain + newOp.retain };\n        if (typeof newOp.attributes === 'object') this.ops[index - 1].attributes = newOp.attributes\n        return this;\n      }\n    }\n  }\n  if (index === this.ops.length) {\n    this.ops.push(newOp);\n  } else {\n    this.ops.splice(index, 0, newOp);\n  }\n  return this;\n};\n\nDelta.prototype.chop = function () {\n  var lastOp = this.ops[this.ops.length - 1];\n  if (lastOp && lastOp.retain && !lastOp.attributes) {\n    this.ops.pop();\n  }\n  return this;\n};\n\nDelta.prototype.filter = function (predicate) {\n  return this.ops.filter(predicate);\n};\n\nDelta.prototype.forEach = function (predicate) {\n  this.ops.forEach(predicate);\n};\n\nDelta.prototype.map = function (predicate) {\n  return this.ops.map(predicate);\n};\n\nDelta.prototype.partition = function (predicate) {\n  var passed = [], failed = [];\n  this.forEach(function(op) {\n    var target = predicate(op) ? passed : failed;\n    target.push(op);\n  });\n  return [passed, failed];\n};\n\nDelta.prototype.reduce = function (predicate, initial) {\n  return this.ops.reduce(predicate, initial);\n};\n\nDelta.prototype.changeLength = function () {\n  return this.reduce(function (length, elem) {\n    if (elem.insert) {\n      return length + op.length(elem);\n    } else if (elem.delete) {\n      return length - elem.delete;\n    }\n    return length;\n  }, 0);\n};\n\nDelta.prototype.length = function () {\n  return this.reduce(function (length, elem) {\n    return length + op.length(elem);\n  }, 0);\n};\n\nDelta.prototype.slice = function (start, end) {\n  start = start || 0;\n  if (typeof end !== 'number') end = Infinity;\n  var ops = [];\n  var iter = op.iterator(this.ops);\n  var index = 0;\n  while (index < end && iter.hasNext()) {\n    var nextOp;\n    if (index < start) {\n      nextOp = iter.next(start - index);\n    } else {\n      nextOp = iter.next(end - index);\n      ops.push(nextOp);\n    }\n    index += op.length(nextOp);\n  }\n  return new Delta(ops);\n};\n\n\nDelta.prototype.compose = function (other) {\n  var thisIter = op.iterator(this.ops);\n  var otherIter = op.iterator(other.ops);\n  var delta = new Delta();\n  while (thisIter.hasNext() || otherIter.hasNext()) {\n    if (otherIter.peekType() === 'insert') {\n      delta.push(otherIter.next());\n    } else if (thisIter.peekType() === 'delete') {\n      delta.push(thisIter.next());\n    } else {\n      var length = Math.min(thisIter.peekLength(), otherIter.peekLength());\n      var thisOp = thisIter.next(length);\n      var otherOp = otherIter.next(length);\n      if (typeof otherOp.retain === 'number') {\n        var newOp = {};\n        if (typeof thisOp.retain === 'number') {\n          newOp.retain = length;\n        } else {\n          newOp.insert = thisOp.insert;\n        }\n        // Preserve null when composing with a retain, otherwise remove it for inserts\n        var attributes = op.attributes.compose(thisOp.attributes, otherOp.attributes, typeof thisOp.retain === 'number');\n        if (attributes) newOp.attributes = attributes;\n        delta.push(newOp);\n      // Other op should be delete, we could be an insert or retain\n      // Insert + delete cancels out\n      } else if (typeof otherOp['delete'] === 'number' && typeof thisOp.retain === 'number') {\n        delta.push(otherOp);\n      }\n    }\n  }\n  return delta.chop();\n};\n\nDelta.prototype.concat = function (other) {\n  var delta = new Delta(this.ops.slice());\n  if (other.ops.length > 0) {\n    delta.push(other.ops[0]);\n    delta.ops = delta.ops.concat(other.ops.slice(1));\n  }\n  return delta;\n};\n\nDelta.prototype.diff = function (other, index) {\n  if (this.ops === other.ops) {\n    return new Delta();\n  }\n  var strings = [this, other].map(function (delta) {\n    return delta.map(function (op) {\n      if (op.insert != null) {\n        return typeof op.insert === 'string' ? op.insert : NULL_CHARACTER;\n      }\n      var prep = (delta === other) ? 'on' : 'with';\n      throw new Error('diff() called ' + prep + ' non-document');\n    }).join('');\n  });\n  var delta = new Delta();\n  var diffResult = diff(strings[0], strings[1], index);\n  var thisIter = op.iterator(this.ops);\n  var otherIter = op.iterator(other.ops);\n  diffResult.forEach(function (component) {\n    var length = component[1].length;\n    while (length > 0) {\n      var opLength = 0;\n      switch (component[0]) {\n        case diff.INSERT:\n          opLength = Math.min(otherIter.peekLength(), length);\n          delta.push(otherIter.next(opLength));\n          break;\n        case diff.DELETE:\n          opLength = Math.min(length, thisIter.peekLength());\n          thisIter.next(opLength);\n          delta['delete'](opLength);\n          break;\n        case diff.EQUAL:\n          opLength = Math.min(thisIter.peekLength(), otherIter.peekLength(), length);\n          var thisOp = thisIter.next(opLength);\n          var otherOp = otherIter.next(opLength);\n          if (equal(thisOp.insert, otherOp.insert)) {\n            delta.retain(opLength, op.attributes.diff(thisOp.attributes, otherOp.attributes));\n          } else {\n            delta.push(otherOp)['delete'](opLength);\n          }\n          break;\n      }\n      length -= opLength;\n    }\n  });\n  return delta.chop();\n};\n\nDelta.prototype.eachLine = function (predicate, newline) {\n  newline = newline || '\\n';\n  var iter = op.iterator(this.ops);\n  var line = new Delta();\n  var i = 0;\n  while (iter.hasNext()) {\n    if (iter.peekType() !== 'insert') return;\n    var thisOp = iter.peek();\n    var start = op.length(thisOp) - iter.peekLength();\n    var index = typeof thisOp.insert === 'string' ?\n      thisOp.insert.indexOf(newline, start) - start : -1;\n    if (index < 0) {\n      line.push(iter.next());\n    } else if (index > 0) {\n      line.push(iter.next(index));\n    } else {\n      if (predicate(line, iter.next(1).attributes || {}, i) === false) {\n        return;\n      }\n      i += 1;\n      line = new Delta();\n    }\n  }\n  if (line.length() > 0) {\n    predicate(line, {}, i);\n  }\n};\n\nDelta.prototype.transform = function (other, priority) {\n  priority = !!priority;\n  if (typeof other === 'number') {\n    return this.transformPosition(other, priority);\n  }\n  var thisIter = op.iterator(this.ops);\n  var otherIter = op.iterator(other.ops);\n  var delta = new Delta();\n  while (thisIter.hasNext() || otherIter.hasNext()) {\n    if (thisIter.peekType() === 'insert' && (priority || otherIter.peekType() !== 'insert')) {\n      delta.retain(op.length(thisIter.next()));\n    } else if (otherIter.peekType() === 'insert') {\n      delta.push(otherIter.next());\n    } else {\n      var length = Math.min(thisIter.peekLength(), otherIter.peekLength());\n      var thisOp = thisIter.next(length);\n      var otherOp = otherIter.next(length);\n      if (thisOp['delete']) {\n        // Our delete either makes their delete redundant or removes their retain\n        continue;\n      } else if (otherOp['delete']) {\n        delta.push(otherOp);\n      } else {\n        // We retain either their retain or insert\n        delta.retain(length, op.attributes.transform(thisOp.attributes, otherOp.attributes, priority));\n      }\n    }\n  }\n  return delta.chop();\n};\n\nDelta.prototype.transformPosition = function (index, priority) {\n  priority = !!priority;\n  var thisIter = op.iterator(this.ops);\n  var offset = 0;\n  while (thisIter.hasNext() && offset <= index) {\n    var length = thisIter.peekLength();\n    var nextType = thisIter.peekType();\n    thisIter.next();\n    if (nextType === 'delete') {\n      index -= Math.min(length, index - offset);\n      continue;\n    } else if (nextType === 'insert' && (offset < index || !priority)) {\n      index += length;\n    }\n    offset += length;\n  }\n  return index;\n};\n\n\nmodule.exports = Delta;\n\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _text = __webpack_require__(8);\n\nvar _text2 = _interopRequireDefault(_text);\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Inline = function (_Parchment$Inline) {\n  _inherits(Inline, _Parchment$Inline);\n\n  function Inline() {\n    _classCallCheck(this, Inline);\n\n    return _possibleConstructorReturn(this, (Inline.__proto__ || Object.getPrototypeOf(Inline)).apply(this, arguments));\n  }\n\n  _createClass(Inline, [{\n    key: 'formatAt',\n    value: function formatAt(index, length, name, value) {\n      if (Inline.compare(this.statics.blotName, name) < 0 && _parchment2.default.query(name, _parchment2.default.Scope.BLOT)) {\n        var blot = this.isolate(index, length);\n        if (value) {\n          blot.wrap(name, value);\n        }\n      } else {\n        _get(Inline.prototype.__proto__ || Object.getPrototypeOf(Inline.prototype), 'formatAt', this).call(this, index, length, name, value);\n      }\n    }\n  }, {\n    key: 'optimize',\n    value: function optimize(context) {\n      _get(Inline.prototype.__proto__ || Object.getPrototypeOf(Inline.prototype), 'optimize', this).call(this, context);\n      if (this.parent instanceof Inline && Inline.compare(this.statics.blotName, this.parent.statics.blotName) > 0) {\n        var parent = this.parent.isolate(this.offset(), this.length());\n        this.moveChildren(parent);\n        parent.wrap(this);\n      }\n    }\n  }], [{\n    key: 'compare',\n    value: function compare(self, other) {\n      var selfIndex = Inline.order.indexOf(self);\n      var otherIndex = Inline.order.indexOf(other);\n      if (selfIndex >= 0 || otherIndex >= 0) {\n        return selfIndex - otherIndex;\n      } else if (self === other) {\n        return 0;\n      } else if (self < other) {\n        return -1;\n      } else {\n        return 1;\n      }\n    }\n  }]);\n\n  return Inline;\n}(_parchment2.default.Inline);\n\nInline.allowedChildren = [Inline, _parchment2.default.Embed, _text2.default];\n// Lower index means deeper in the DOM tree, since not found (-1) is for embeds\nInline.order = ['cursor', 'inline', // Must be lower\n'underline', 'strike', 'italic', 'bold', 'script', 'link', 'code' // Must be higher\n];\n\nexports.default = Inline;\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = exports.overload = exports.expandConfig = undefined;\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\n__webpack_require__(53);\n\nvar _quillDelta = __webpack_require__(4);\n\nvar _quillDelta2 = _interopRequireDefault(_quillDelta);\n\nvar _editor = __webpack_require__(57);\n\nvar _editor2 = _interopRequireDefault(_editor);\n\nvar _emitter3 = __webpack_require__(9);\n\nvar _emitter4 = _interopRequireDefault(_emitter3);\n\nvar _module = __webpack_require__(7);\n\nvar _module2 = _interopRequireDefault(_module);\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nvar _selection = __webpack_require__(22);\n\nvar _selection2 = _interopRequireDefault(_selection);\n\nvar _extend = __webpack_require__(2);\n\nvar _extend2 = _interopRequireDefault(_extend);\n\nvar _logger = __webpack_require__(10);\n\nvar _logger2 = _interopRequireDefault(_logger);\n\nvar _theme = __webpack_require__(32);\n\nvar _theme2 = _interopRequireDefault(_theme);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar debug = (0, _logger2.default)('quill');\n\nvar Quill = function () {\n  _createClass(Quill, null, [{\n    key: 'debug',\n    value: function debug(limit) {\n      if (limit === true) {\n        limit = 'log';\n      }\n      _logger2.default.level(limit);\n    }\n  }, {\n    key: 'find',\n    value: function find(node) {\n      return node.__quill || _parchment2.default.find(node);\n    }\n  }, {\n    key: 'import',\n    value: function _import(name) {\n      if (this.imports[name] == null) {\n        debug.error('Cannot import ' + name + '. Are you sure it was registered?');\n      }\n      return this.imports[name];\n    }\n  }, {\n    key: 'register',\n    value: function register(path, target) {\n      var _this = this;\n\n      var overwrite = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n      if (typeof path !== 'string') {\n        var name = path.attrName || path.blotName;\n        if (typeof name === 'string') {\n          // register(Blot | Attributor, overwrite)\n          this.register('formats/' + name, path, target);\n        } else {\n          Object.keys(path).forEach(function (key) {\n            _this.register(key, path[key], target);\n          });\n        }\n      } else {\n        if (this.imports[path] != null && !overwrite) {\n          debug.warn('Overwriting ' + path + ' with', target);\n        }\n        this.imports[path] = target;\n        if ((path.startsWith('blots/') || path.startsWith('formats/')) && target.blotName !== 'abstract') {\n          _parchment2.default.register(target);\n        } else if (path.startsWith('modules') && typeof target.register === 'function') {\n          target.register();\n        }\n      }\n    }\n  }]);\n\n  function Quill(container) {\n    var _this2 = this;\n\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n    _classCallCheck(this, Quill);\n\n    this.options = expandConfig(container, options);\n    this.container = this.options.container;\n    if (this.container == null) {\n      return debug.error('Invalid Quill container', container);\n    }\n    if (this.options.debug) {\n      Quill.debug(this.options.debug);\n    }\n    var html = this.container.innerHTML.trim();\n    this.container.classList.add('ql-container');\n    this.container.innerHTML = '';\n    this.container.__quill = this;\n    this.root = this.addContainer('ql-editor');\n    this.root.classList.add('ql-blank');\n    this.root.setAttribute('data-gramm', false);\n    this.scrollingContainer = this.options.scrollingContainer || this.root;\n    this.emitter = new _emitter4.default();\n    this.scroll = _parchment2.default.create(this.root, {\n      emitter: this.emitter,\n      whitelist: this.options.formats\n    });\n    this.editor = new _editor2.default(this.scroll);\n    this.selection = new _selection2.default(this.scroll, this.emitter);\n    this.theme = new this.options.theme(this, this.options);\n    this.keyboard = this.theme.addModule('keyboard');\n    this.clipboard = this.theme.addModule('clipboard');\n    this.history = this.theme.addModule('history');\n    this.theme.init();\n    this.emitter.on(_emitter4.default.events.EDITOR_CHANGE, function (type) {\n      if (type === _emitter4.default.events.TEXT_CHANGE) {\n        _this2.root.classList.toggle('ql-blank', _this2.editor.isBlank());\n      }\n    });\n    this.emitter.on(_emitter4.default.events.SCROLL_UPDATE, function (source, mutations) {\n      var range = _this2.selection.lastRange;\n      var index = range && range.length === 0 ? range.index : undefined;\n      modify.call(_this2, function () {\n        return _this2.editor.update(null, mutations, index);\n      }, source);\n    });\n    var contents = this.clipboard.convert('<div class=\\'ql-editor\\' style=\"white-space: normal;\">' + html + '<p><br></p></div>');\n    this.setContents(contents);\n    this.history.clear();\n    if (this.options.placeholder) {\n      this.root.setAttribute('data-placeholder', this.options.placeholder);\n    }\n    if (this.options.readOnly) {\n      this.disable();\n    }\n  }\n\n  _createClass(Quill, [{\n    key: 'addContainer',\n    value: function addContainer(container) {\n      var refNode = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\n      if (typeof container === 'string') {\n        var className = container;\n        container = document.createElement('div');\n        container.classList.add(className);\n      }\n      this.container.insertBefore(container, refNode);\n      return container;\n    }\n  }, {\n    key: 'blur',\n    value: function blur() {\n      this.selection.setRange(null);\n    }\n  }, {\n    key: 'deleteText',\n    value: function deleteText(index, length, source) {\n      var _this3 = this;\n\n      var _overload = overload(index, length, source);\n\n      var _overload2 = _slicedToArray(_overload, 4);\n\n      index = _overload2[0];\n      length = _overload2[1];\n      source = _overload2[3];\n\n      return modify.call(this, function () {\n        return _this3.editor.deleteText(index, length);\n      }, source, index, -1 * length);\n    }\n  }, {\n    key: 'disable',\n    value: function disable() {\n      this.enable(false);\n    }\n  }, {\n    key: 'enable',\n    value: function enable() {\n      var enabled = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n\n      this.scroll.enable(enabled);\n      this.container.classList.toggle('ql-disabled', !enabled);\n    }\n  }, {\n    key: 'focus',\n    value: function focus() {\n      var scrollTop = this.scrollingContainer.scrollTop;\n      this.selection.focus();\n      this.scrollingContainer.scrollTop = scrollTop;\n      this.scrollIntoView();\n    }\n  }, {\n    key: 'format',\n    value: function format(name, value) {\n      var _this4 = this;\n\n      var source = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : _emitter4.default.sources.API;\n\n      return modify.call(this, function () {\n        var range = _this4.getSelection(true);\n        var change = new _quillDelta2.default();\n        if (range == null) {\n          return change;\n        } else if (_parchment2.default.query(name, _parchment2.default.Scope.BLOCK)) {\n          change = _this4.editor.formatLine(range.index, range.length, _defineProperty({}, name, value));\n        } else if (range.length === 0) {\n          _this4.selection.format(name, value);\n          return change;\n        } else {\n          change = _this4.editor.formatText(range.index, range.length, _defineProperty({}, name, value));\n        }\n        _this4.setSelection(range, _emitter4.default.sources.SILENT);\n        return change;\n      }, source);\n    }\n  }, {\n    key: 'formatLine',\n    value: function formatLine(index, length, name, value, source) {\n      var _this5 = this;\n\n      var formats = void 0;\n\n      var _overload3 = overload(index, length, name, value, source);\n\n      var _overload4 = _slicedToArray(_overload3, 4);\n\n      index = _overload4[0];\n      length = _overload4[1];\n      formats = _overload4[2];\n      source = _overload4[3];\n\n      return modify.call(this, function () {\n        return _this5.editor.formatLine(index, length, formats);\n      }, source, index, 0);\n    }\n  }, {\n    key: 'formatText',\n    value: function formatText(index, length, name, value, source) {\n      var _this6 = this;\n\n      var formats = void 0;\n\n      var _overload5 = overload(index, length, name, value, source);\n\n      var _overload6 = _slicedToArray(_overload5, 4);\n\n      index = _overload6[0];\n      length = _overload6[1];\n      formats = _overload6[2];\n      source = _overload6[3];\n\n      return modify.call(this, function () {\n        return _this6.editor.formatText(index, length, formats);\n      }, source, index, 0);\n    }\n  }, {\n    key: 'getBounds',\n    value: function getBounds(index) {\n      var length = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\n      var bounds = void 0;\n      if (typeof index === 'number') {\n        bounds = this.selection.getBounds(index, length);\n      } else {\n        bounds = this.selection.getBounds(index.index, index.length);\n      }\n      var containerBounds = this.container.getBoundingClientRect();\n      return {\n        bottom: bounds.bottom - containerBounds.top,\n        height: bounds.height,\n        left: bounds.left - containerBounds.left,\n        right: bounds.right - containerBounds.left,\n        top: bounds.top - containerBounds.top,\n        width: bounds.width\n      };\n    }\n  }, {\n    key: 'getContents',\n    value: function getContents() {\n      var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n      var length = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.getLength() - index;\n\n      var _overload7 = overload(index, length);\n\n      var _overload8 = _slicedToArray(_overload7, 2);\n\n      index = _overload8[0];\n      length = _overload8[1];\n\n      return this.editor.getContents(index, length);\n    }\n  }, {\n    key: 'getFormat',\n    value: function getFormat() {\n      var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.getSelection(true);\n      var length = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\n      if (typeof index === 'number') {\n        return this.editor.getFormat(index, length);\n      } else {\n        return this.editor.getFormat(index.index, index.length);\n      }\n    }\n  }, {\n    key: 'getIndex',\n    value: function getIndex(blot) {\n      return blot.offset(this.scroll);\n    }\n  }, {\n    key: 'getLength',\n    value: function getLength() {\n      return this.scroll.length();\n    }\n  }, {\n    key: 'getLeaf',\n    value: function getLeaf(index) {\n      return this.scroll.leaf(index);\n    }\n  }, {\n    key: 'getLine',\n    value: function getLine(index) {\n      return this.scroll.line(index);\n    }\n  }, {\n    key: 'getLines',\n    value: function getLines() {\n      var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n      var length = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : Number.MAX_VALUE;\n\n      if (typeof index !== 'number') {\n        return this.scroll.lines(index.index, index.length);\n      } else {\n        return this.scroll.lines(index, length);\n      }\n    }\n  }, {\n    key: 'getModule',\n    value: function getModule(name) {\n      return this.theme.modules[name];\n    }\n  }, {\n    key: 'getSelection',\n    value: function getSelection() {\n      var focus = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n      if (focus) this.focus();\n      this.update(); // Make sure we access getRange with editor in consistent state\n      return this.selection.getRange()[0];\n    }\n  }, {\n    key: 'getText',\n    value: function getText() {\n      var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n      var length = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.getLength() - index;\n\n      var _overload9 = overload(index, length);\n\n      var _overload10 = _slicedToArray(_overload9, 2);\n\n      index = _overload10[0];\n      length = _overload10[1];\n\n      return this.editor.getText(index, length);\n    }\n  }, {\n    key: 'hasFocus',\n    value: function hasFocus() {\n      return this.selection.hasFocus();\n    }\n  }, {\n    key: 'insertEmbed',\n    value: function insertEmbed(index, embed, value) {\n      var _this7 = this;\n\n      var source = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : Quill.sources.API;\n\n      return modify.call(this, function () {\n        return _this7.editor.insertEmbed(index, embed, value);\n      }, source, index);\n    }\n  }, {\n    key: 'insertText',\n    value: function insertText(index, text, name, value, source) {\n      var _this8 = this;\n\n      var formats = void 0;\n\n      var _overload11 = overload(index, 0, name, value, source);\n\n      var _overload12 = _slicedToArray(_overload11, 4);\n\n      index = _overload12[0];\n      formats = _overload12[2];\n      source = _overload12[3];\n\n      return modify.call(this, function () {\n        return _this8.editor.insertText(index, text, formats);\n      }, source, index, text.length);\n    }\n  }, {\n    key: 'isEnabled',\n    value: function isEnabled() {\n      return !this.container.classList.contains('ql-disabled');\n    }\n  }, {\n    key: 'off',\n    value: function off() {\n      return this.emitter.off.apply(this.emitter, arguments);\n    }\n  }, {\n    key: 'on',\n    value: function on() {\n      return this.emitter.on.apply(this.emitter, arguments);\n    }\n  }, {\n    key: 'once',\n    value: function once() {\n      return this.emitter.once.apply(this.emitter, arguments);\n    }\n  }, {\n    key: 'pasteHTML',\n    value: function pasteHTML(index, html, source) {\n      this.clipboard.dangerouslyPasteHTML(index, html, source);\n    }\n  }, {\n    key: 'removeFormat',\n    value: function removeFormat(index, length, source) {\n      var _this9 = this;\n\n      var _overload13 = overload(index, length, source);\n\n      var _overload14 = _slicedToArray(_overload13, 4);\n\n      index = _overload14[0];\n      length = _overload14[1];\n      source = _overload14[3];\n\n      return modify.call(this, function () {\n        return _this9.editor.removeFormat(index, length);\n      }, source, index);\n    }\n  }, {\n    key: 'scrollIntoView',\n    value: function scrollIntoView() {\n      this.selection.scrollIntoView(this.scrollingContainer);\n    }\n  }, {\n    key: 'setContents',\n    value: function setContents(delta) {\n      var _this10 = this;\n\n      var source = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _emitter4.default.sources.API;\n\n      return modify.call(this, function () {\n        delta = new _quillDelta2.default(delta);\n        var length = _this10.getLength();\n        var deleted = _this10.editor.deleteText(0, length);\n        var applied = _this10.editor.applyDelta(delta);\n        var lastOp = applied.ops[applied.ops.length - 1];\n        if (lastOp != null && typeof lastOp.insert === 'string' && lastOp.insert[lastOp.insert.length - 1] === '\\n') {\n          _this10.editor.deleteText(_this10.getLength() - 1, 1);\n          applied.delete(1);\n        }\n        var ret = deleted.compose(applied);\n        return ret;\n      }, source);\n    }\n  }, {\n    key: 'setSelection',\n    value: function setSelection(index, length, source) {\n      if (index == null) {\n        this.selection.setRange(null, length || Quill.sources.API);\n      } else {\n        var _overload15 = overload(index, length, source);\n\n        var _overload16 = _slicedToArray(_overload15, 4);\n\n        index = _overload16[0];\n        length = _overload16[1];\n        source = _overload16[3];\n\n        this.selection.setRange(new _selection.Range(index, length), source);\n        if (source !== _emitter4.default.sources.SILENT) {\n          this.selection.scrollIntoView(this.scrollingContainer);\n        }\n      }\n    }\n  }, {\n    key: 'setText',\n    value: function setText(text) {\n      var source = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _emitter4.default.sources.API;\n\n      var delta = new _quillDelta2.default().insert(text);\n      return this.setContents(delta, source);\n    }\n  }, {\n    key: 'update',\n    value: function update() {\n      var source = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _emitter4.default.sources.USER;\n\n      var change = this.scroll.update(source); // Will update selection before selection.update() does if text changes\n      this.selection.update(source);\n      return change;\n    }\n  }, {\n    key: 'updateContents',\n    value: function updateContents(delta) {\n      var _this11 = this;\n\n      var source = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _emitter4.default.sources.API;\n\n      return modify.call(this, function () {\n        delta = new _quillDelta2.default(delta);\n        return _this11.editor.applyDelta(delta, source);\n      }, source, true);\n    }\n  }]);\n\n  return Quill;\n}();\n\nQuill.DEFAULTS = {\n  bounds: null,\n  formats: null,\n  modules: {},\n  placeholder: '',\n  readOnly: false,\n  scrollingContainer: null,\n  strict: true,\n  theme: 'default'\n};\nQuill.events = _emitter4.default.events;\nQuill.sources = _emitter4.default.sources;\n// eslint-disable-next-line no-undef\nQuill.version =  false ? 'dev' : \"1.3.6\";\n\nQuill.imports = {\n  'delta': _quillDelta2.default,\n  'parchment': _parchment2.default,\n  'core/module': _module2.default,\n  'core/theme': _theme2.default\n};\n\nfunction expandConfig(container, userConfig) {\n  userConfig = (0, _extend2.default)(true, {\n    container: container,\n    modules: {\n      clipboard: true,\n      keyboard: true,\n      history: true\n    }\n  }, userConfig);\n  if (!userConfig.theme || userConfig.theme === Quill.DEFAULTS.theme) {\n    userConfig.theme = _theme2.default;\n  } else {\n    userConfig.theme = Quill.import('themes/' + userConfig.theme);\n    if (userConfig.theme == null) {\n      throw new Error('Invalid theme ' + userConfig.theme + '. Did you register it?');\n    }\n  }\n  var themeConfig = (0, _extend2.default)(true, {}, userConfig.theme.DEFAULTS);\n  [themeConfig, userConfig].forEach(function (config) {\n    config.modules = config.modules || {};\n    Object.keys(config.modules).forEach(function (module) {\n      if (config.modules[module] === true) {\n        config.modules[module] = {};\n      }\n    });\n  });\n  var moduleNames = Object.keys(themeConfig.modules).concat(Object.keys(userConfig.modules));\n  var moduleConfig = moduleNames.reduce(function (config, name) {\n    var moduleClass = Quill.import('modules/' + name);\n    if (moduleClass == null) {\n      debug.error('Cannot load ' + name + ' module. Are you sure you registered it?');\n    } else {\n      config[name] = moduleClass.DEFAULTS || {};\n    }\n    return config;\n  }, {});\n  // Special case toolbar shorthand\n  if (userConfig.modules != null && userConfig.modules.toolbar && userConfig.modules.toolbar.constructor !== Object) {\n    userConfig.modules.toolbar = {\n      container: userConfig.modules.toolbar\n    };\n  }\n  userConfig = (0, _extend2.default)(true, {}, Quill.DEFAULTS, { modules: moduleConfig }, themeConfig, userConfig);\n  ['bounds', 'container', 'scrollingContainer'].forEach(function (key) {\n    if (typeof userConfig[key] === 'string') {\n      userConfig[key] = document.querySelector(userConfig[key]);\n    }\n  });\n  userConfig.modules = Object.keys(userConfig.modules).reduce(function (config, name) {\n    if (userConfig.modules[name]) {\n      config[name] = userConfig.modules[name];\n    }\n    return config;\n  }, {});\n  return userConfig;\n}\n\n// Handle selection preservation and TEXT_CHANGE emission\n// common to modification APIs\nfunction modify(modifier, source, index, shift) {\n  if (this.options.strict && !this.isEnabled() && source === _emitter4.default.sources.USER) {\n    return new _quillDelta2.default();\n  }\n  var range = index == null ? null : this.getSelection();\n  var oldDelta = this.editor.delta;\n  var change = modifier();\n  if (range != null) {\n    if (index === true) index = range.index;\n    if (shift == null) {\n      range = shiftRange(range, change, source);\n    } else if (shift !== 0) {\n      range = shiftRange(range, index, shift, source);\n    }\n    this.setSelection(range, _emitter4.default.sources.SILENT);\n  }\n  if (change.length() > 0) {\n    var _emitter;\n\n    var args = [_emitter4.default.events.TEXT_CHANGE, change, oldDelta, source];\n    (_emitter = this.emitter).emit.apply(_emitter, [_emitter4.default.events.EDITOR_CHANGE].concat(args));\n    if (source !== _emitter4.default.sources.SILENT) {\n      var _emitter2;\n\n      (_emitter2 = this.emitter).emit.apply(_emitter2, args);\n    }\n  }\n  return change;\n}\n\nfunction overload(index, length, name, value, source) {\n  var formats = {};\n  if (typeof index.index === 'number' && typeof index.length === 'number') {\n    // Allow for throwaway end (used by insertText/insertEmbed)\n    if (typeof length !== 'number') {\n      source = value, value = name, name = length, length = index.length, index = index.index;\n    } else {\n      length = index.length, index = index.index;\n    }\n  } else if (typeof length !== 'number') {\n    source = value, value = name, name = length, length = 0;\n  }\n  // Handle format being object, two format name/value strings or excluded\n  if ((typeof name === 'undefined' ? 'undefined' : _typeof(name)) === 'object') {\n    formats = name;\n    source = value;\n  } else if (typeof name === 'string') {\n    if (value != null) {\n      formats[name] = value;\n    } else {\n      source = name;\n    }\n  }\n  // Handle optional source\n  source = source || _emitter4.default.sources.API;\n  return [index, length, formats, source];\n}\n\nfunction shiftRange(range, index, length, source) {\n  if (range == null) return null;\n  var start = void 0,\n      end = void 0;\n  if (index instanceof _quillDelta2.default) {\n    var _map = [range.index, range.index + range.length].map(function (pos) {\n      return index.transformPosition(pos, source !== _emitter4.default.sources.USER);\n    });\n\n    var _map2 = _slicedToArray(_map, 2);\n\n    start = _map2[0];\n    end = _map2[1];\n  } else {\n    var _map3 = [range.index, range.index + range.length].map(function (pos) {\n      if (pos < index || pos === index && source === _emitter4.default.sources.USER) return pos;\n      if (length >= 0) {\n        return pos + length;\n      } else {\n        return Math.max(index, pos + length);\n      }\n    });\n\n    var _map4 = _slicedToArray(_map3, 2);\n\n    start = _map4[0];\n    end = _map4[1];\n  }\n  return new _selection.Range(start, end - start);\n}\n\nexports.expandConfig = expandConfig;\nexports.overload = overload;\nexports.default = Quill;\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Module = function Module(quill) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n  _classCallCheck(this, Module);\n\n  this.quill = quill;\n  this.options = options;\n};\n\nModule.DEFAULTS = {};\n\nexports.default = Module;\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar TextBlot = function (_Parchment$Text) {\n  _inherits(TextBlot, _Parchment$Text);\n\n  function TextBlot() {\n    _classCallCheck(this, TextBlot);\n\n    return _possibleConstructorReturn(this, (TextBlot.__proto__ || Object.getPrototypeOf(TextBlot)).apply(this, arguments));\n  }\n\n  return TextBlot;\n}(_parchment2.default.Text);\n\nexports.default = TextBlot;\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _eventemitter = __webpack_require__(58);\n\nvar _eventemitter2 = _interopRequireDefault(_eventemitter);\n\nvar _logger = __webpack_require__(10);\n\nvar _logger2 = _interopRequireDefault(_logger);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar debug = (0, _logger2.default)('quill:events');\n\nvar EVENTS = ['selectionchange', 'mousedown', 'mouseup', 'click'];\n\nEVENTS.forEach(function (eventName) {\n  document.addEventListener(eventName, function () {\n    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    [].slice.call(document.querySelectorAll('.ql-container')).forEach(function (node) {\n      // TODO use WeakMap\n      if (node.__quill && node.__quill.emitter) {\n        var _node$__quill$emitter;\n\n        (_node$__quill$emitter = node.__quill.emitter).handleDOM.apply(_node$__quill$emitter, args);\n      }\n    });\n  });\n});\n\nvar Emitter = function (_EventEmitter) {\n  _inherits(Emitter, _EventEmitter);\n\n  function Emitter() {\n    _classCallCheck(this, Emitter);\n\n    var _this = _possibleConstructorReturn(this, (Emitter.__proto__ || Object.getPrototypeOf(Emitter)).call(this));\n\n    _this.listeners = {};\n    _this.on('error', debug.error);\n    return _this;\n  }\n\n  _createClass(Emitter, [{\n    key: 'emit',\n    value: function emit() {\n      debug.log.apply(debug, arguments);\n      _get(Emitter.prototype.__proto__ || Object.getPrototypeOf(Emitter.prototype), 'emit', this).apply(this, arguments);\n    }\n  }, {\n    key: 'handleDOM',\n    value: function handleDOM(event) {\n      for (var _len2 = arguments.length, args = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n        args[_key2 - 1] = arguments[_key2];\n      }\n\n      (this.listeners[event.type] || []).forEach(function (_ref) {\n        var node = _ref.node,\n            handler = _ref.handler;\n\n        if (event.target === node || node.contains(event.target)) {\n          handler.apply(undefined, [event].concat(args));\n        }\n      });\n    }\n  }, {\n    key: 'listenDOM',\n    value: function listenDOM(eventName, node, handler) {\n      if (!this.listeners[eventName]) {\n        this.listeners[eventName] = [];\n      }\n      this.listeners[eventName].push({ node: node, handler: handler });\n    }\n  }]);\n\n  return Emitter;\n}(_eventemitter2.default);\n\nEmitter.events = {\n  EDITOR_CHANGE: 'editor-change',\n  SCROLL_BEFORE_UPDATE: 'scroll-before-update',\n  SCROLL_OPTIMIZE: 'scroll-optimize',\n  SCROLL_UPDATE: 'scroll-update',\n  SELECTION_CHANGE: 'selection-change',\n  TEXT_CHANGE: 'text-change'\n};\nEmitter.sources = {\n  API: 'api',\n  SILENT: 'silent',\n  USER: 'user'\n};\n\nexports.default = Emitter;\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nvar levels = ['error', 'warn', 'log', 'info'];\nvar level = 'warn';\n\nfunction debug(method) {\n  if (levels.indexOf(method) <= levels.indexOf(level)) {\n    var _console;\n\n    for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n      args[_key - 1] = arguments[_key];\n    }\n\n    (_console = console)[method].apply(_console, args); // eslint-disable-line no-console\n  }\n}\n\nfunction namespace(ns) {\n  return levels.reduce(function (logger, method) {\n    logger[method] = debug.bind(console, method, ns);\n    return logger;\n  }, {});\n}\n\ndebug.level = namespace.level = function (newLevel) {\n  level = newLevel;\n};\n\nexports.default = namespace;\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Registry = __webpack_require__(1);\nvar Attributor = /** @class */ (function () {\n    function Attributor(attrName, keyName, options) {\n        if (options === void 0) { options = {}; }\n        this.attrName = attrName;\n        this.keyName = keyName;\n        var attributeBit = Registry.Scope.TYPE & Registry.Scope.ATTRIBUTE;\n        if (options.scope != null) {\n            // Ignore type bits, force attribute bit\n            this.scope = (options.scope & Registry.Scope.LEVEL) | attributeBit;\n        }\n        else {\n            this.scope = Registry.Scope.ATTRIBUTE;\n        }\n        if (options.whitelist != null)\n            this.whitelist = options.whitelist;\n    }\n    Attributor.keys = function (node) {\n        return [].map.call(node.attributes, function (item) {\n            return item.name;\n        });\n    };\n    Attributor.prototype.add = function (node, value) {\n        if (!this.canAdd(node, value))\n            return false;\n        node.setAttribute(this.keyName, value);\n        return true;\n    };\n    Attributor.prototype.canAdd = function (node, value) {\n        var match = Registry.query(node, Registry.Scope.BLOT & (this.scope | Registry.Scope.TYPE));\n        if (match == null)\n            return false;\n        if (this.whitelist == null)\n            return true;\n        if (typeof value === 'string') {\n            return this.whitelist.indexOf(value.replace(/[\"']/g, '')) > -1;\n        }\n        else {\n            return this.whitelist.indexOf(value) > -1;\n        }\n    };\n    Attributor.prototype.remove = function (node) {\n        node.removeAttribute(this.keyName);\n    };\n    Attributor.prototype.value = function (node) {\n        var value = node.getAttribute(this.keyName);\n        if (this.canAdd(node, value) && value) {\n            return value;\n        }\n        return '';\n    };\n    return Attributor;\n}());\nexports.default = Attributor;\n\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar pSlice = Array.prototype.slice;\nvar objectKeys = __webpack_require__(55);\nvar isArguments = __webpack_require__(56);\n\nvar deepEqual = module.exports = function (actual, expected, opts) {\n  if (!opts) opts = {};\n  // 7.1. All identical values are equivalent, as determined by ===.\n  if (actual === expected) {\n    return true;\n\n  } else if (actual instanceof Date && expected instanceof Date) {\n    return actual.getTime() === expected.getTime();\n\n  // 7.3. Other pairs that do not both pass typeof value == 'object',\n  // equivalence is determined by ==.\n  } else if (!actual || !expected || typeof actual != 'object' && typeof expected != 'object') {\n    return opts.strict ? actual === expected : actual == expected;\n\n  // 7.4. For all other Object pairs, including Array objects, equivalence is\n  // determined by having the same number of owned properties (as verified\n  // with Object.prototype.hasOwnProperty.call), the same set of keys\n  // (although not necessarily the same order), equivalent values for every\n  // corresponding key, and an identical 'prototype' property. Note: this\n  // accounts for both named and indexed properties on Arrays.\n  } else {\n    return objEquiv(actual, expected, opts);\n  }\n}\n\nfunction isUndefinedOrNull(value) {\n  return value === null || value === undefined;\n}\n\nfunction isBuffer (x) {\n  if (!x || typeof x !== 'object' || typeof x.length !== 'number') return false;\n  if (typeof x.copy !== 'function' || typeof x.slice !== 'function') {\n    return false;\n  }\n  if (x.length > 0 && typeof x[0] !== 'number') return false;\n  return true;\n}\n\nfunction objEquiv(a, b, opts) {\n  var i, key;\n  if (isUndefinedOrNull(a) || isUndefinedOrNull(b))\n    return false;\n  // an identical 'prototype' property.\n  if (a.prototype !== b.prototype) return false;\n  //~~~I've managed to break Object.keys through screwy arguments passing.\n  //   Converting to array solves the problem.\n  if (isArguments(a)) {\n    if (!isArguments(b)) {\n      return false;\n    }\n    a = pSlice.call(a);\n    b = pSlice.call(b);\n    return deepEqual(a, b, opts);\n  }\n  if (isBuffer(a)) {\n    if (!isBuffer(b)) {\n      return false;\n    }\n    if (a.length !== b.length) return false;\n    for (i = 0; i < a.length; i++) {\n      if (a[i] !== b[i]) return false;\n    }\n    return true;\n  }\n  try {\n    var ka = objectKeys(a),\n        kb = objectKeys(b);\n  } catch (e) {//happens when one is a string literal and the other isn't\n    return false;\n  }\n  // having the same number of owned properties (keys incorporates\n  // hasOwnProperty)\n  if (ka.length != kb.length)\n    return false;\n  //the same set of keys (although not necessarily the same order),\n  ka.sort();\n  kb.sort();\n  //~~~cheap key test\n  for (i = ka.length - 1; i >= 0; i--) {\n    if (ka[i] != kb[i])\n      return false;\n  }\n  //equivalent values for every corresponding key, and\n  //~~~possibly expensive deep test\n  for (i = ka.length - 1; i >= 0; i--) {\n    key = ka[i];\n    if (!deepEqual(a[key], b[key], opts)) return false;\n  }\n  return typeof a === typeof b;\n}\n\n\n/***/ }),\n/* 13 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = exports.Code = undefined;\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _quillDelta = __webpack_require__(4);\n\nvar _quillDelta2 = _interopRequireDefault(_quillDelta);\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nvar _block = __webpack_require__(3);\n\nvar _block2 = _interopRequireDefault(_block);\n\nvar _inline = __webpack_require__(5);\n\nvar _inline2 = _interopRequireDefault(_inline);\n\nvar _text = __webpack_require__(8);\n\nvar _text2 = _interopRequireDefault(_text);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Code = function (_Inline) {\n  _inherits(Code, _Inline);\n\n  function Code() {\n    _classCallCheck(this, Code);\n\n    return _possibleConstructorReturn(this, (Code.__proto__ || Object.getPrototypeOf(Code)).apply(this, arguments));\n  }\n\n  return Code;\n}(_inline2.default);\n\nCode.blotName = 'code';\nCode.tagName = 'CODE';\n\nvar CodeBlock = function (_Block) {\n  _inherits(CodeBlock, _Block);\n\n  function CodeBlock() {\n    _classCallCheck(this, CodeBlock);\n\n    return _possibleConstructorReturn(this, (CodeBlock.__proto__ || Object.getPrototypeOf(CodeBlock)).apply(this, arguments));\n  }\n\n  _createClass(CodeBlock, [{\n    key: 'delta',\n    value: function delta() {\n      var _this3 = this;\n\n      var text = this.domNode.textContent;\n      if (text.endsWith('\\n')) {\n        // Should always be true\n        text = text.slice(0, -1);\n      }\n      return text.split('\\n').reduce(function (delta, frag) {\n        return delta.insert(frag).insert('\\n', _this3.formats());\n      }, new _quillDelta2.default());\n    }\n  }, {\n    key: 'format',\n    value: function format(name, value) {\n      if (name === this.statics.blotName && value) return;\n\n      var _descendant = this.descendant(_text2.default, this.length() - 1),\n          _descendant2 = _slicedToArray(_descendant, 1),\n          text = _descendant2[0];\n\n      if (text != null) {\n        text.deleteAt(text.length() - 1, 1);\n      }\n      _get(CodeBlock.prototype.__proto__ || Object.getPrototypeOf(CodeBlock.prototype), 'format', this).call(this, name, value);\n    }\n  }, {\n    key: 'formatAt',\n    value: function formatAt(index, length, name, value) {\n      if (length === 0) return;\n      if (_parchment2.default.query(name, _parchment2.default.Scope.BLOCK) == null || name === this.statics.blotName && value === this.statics.formats(this.domNode)) {\n        return;\n      }\n      var nextNewline = this.newlineIndex(index);\n      if (nextNewline < 0 || nextNewline >= index + length) return;\n      var prevNewline = this.newlineIndex(index, true) + 1;\n      var isolateLength = nextNewline - prevNewline + 1;\n      var blot = this.isolate(prevNewline, isolateLength);\n      var next = blot.next;\n      blot.format(name, value);\n      if (next instanceof CodeBlock) {\n        next.formatAt(0, index - prevNewline + length - isolateLength, name, value);\n      }\n    }\n  }, {\n    key: 'insertAt',\n    value: function insertAt(index, value, def) {\n      if (def != null) return;\n\n      var _descendant3 = this.descendant(_text2.default, index),\n          _descendant4 = _slicedToArray(_descendant3, 2),\n          text = _descendant4[0],\n          offset = _descendant4[1];\n\n      text.insertAt(offset, value);\n    }\n  }, {\n    key: 'length',\n    value: function length() {\n      var length = this.domNode.textContent.length;\n      if (!this.domNode.textContent.endsWith('\\n')) {\n        return length + 1;\n      }\n      return length;\n    }\n  }, {\n    key: 'newlineIndex',\n    value: function newlineIndex(searchIndex) {\n      var reverse = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n      if (!reverse) {\n        var offset = this.domNode.textContent.slice(searchIndex).indexOf('\\n');\n        return offset > -1 ? searchIndex + offset : -1;\n      } else {\n        return this.domNode.textContent.slice(0, searchIndex).lastIndexOf('\\n');\n      }\n    }\n  }, {\n    key: 'optimize',\n    value: function optimize(context) {\n      if (!this.domNode.textContent.endsWith('\\n')) {\n        this.appendChild(_parchment2.default.create('text', '\\n'));\n      }\n      _get(CodeBlock.prototype.__proto__ || Object.getPrototypeOf(CodeBlock.prototype), 'optimize', this).call(this, context);\n      var next = this.next;\n      if (next != null && next.prev === this && next.statics.blotName === this.statics.blotName && this.statics.formats(this.domNode) === next.statics.formats(next.domNode)) {\n        next.optimize(context);\n        next.moveChildren(this);\n        next.remove();\n      }\n    }\n  }, {\n    key: 'replace',\n    value: function replace(target) {\n      _get(CodeBlock.prototype.__proto__ || Object.getPrototypeOf(CodeBlock.prototype), 'replace', this).call(this, target);\n      [].slice.call(this.domNode.querySelectorAll('*')).forEach(function (node) {\n        var blot = _parchment2.default.find(node);\n        if (blot == null) {\n          node.parentNode.removeChild(node);\n        } else if (blot instanceof _parchment2.default.Embed) {\n          blot.remove();\n        } else {\n          blot.unwrap();\n        }\n      });\n    }\n  }], [{\n    key: 'create',\n    value: function create(value) {\n      var domNode = _get(CodeBlock.__proto__ || Object.getPrototypeOf(CodeBlock), 'create', this).call(this, value);\n      domNode.setAttribute('spellcheck', false);\n      return domNode;\n    }\n  }, {\n    key: 'formats',\n    value: function formats() {\n      return true;\n    }\n  }]);\n\n  return CodeBlock;\n}(_block2.default);\n\nCodeBlock.blotName = 'code-block';\nCodeBlock.tagName = 'PRE';\nCodeBlock.TAB = '  ';\n\nexports.Code = Code;\nexports.default = CodeBlock;\n\n/***/ }),\n/* 14 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Break = function (_Parchment$Embed) {\n  _inherits(Break, _Parchment$Embed);\n\n  function Break() {\n    _classCallCheck(this, Break);\n\n    return _possibleConstructorReturn(this, (Break.__proto__ || Object.getPrototypeOf(Break)).apply(this, arguments));\n  }\n\n  _createClass(Break, [{\n    key: 'insertInto',\n    value: function insertInto(parent, ref) {\n      if (parent.children.length === 0) {\n        _get(Break.prototype.__proto__ || Object.getPrototypeOf(Break.prototype), 'insertInto', this).call(this, parent, ref);\n      } else {\n        this.remove();\n      }\n    }\n  }, {\n    key: 'length',\n    value: function length() {\n      return 0;\n    }\n  }, {\n    key: 'value',\n    value: function value() {\n      return '';\n    }\n  }], [{\n    key: 'value',\n    value: function value() {\n      return undefined;\n    }\n  }]);\n\n  return Break;\n}(_parchment2.default.Embed);\n\nBreak.blotName = 'break';\nBreak.tagName = 'BR';\n\nexports.default = Break;\n\n/***/ }),\n/* 15 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.sanitize = exports.default = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _inline = __webpack_require__(5);\n\nvar _inline2 = _interopRequireDefault(_inline);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Link = function (_Inline) {\n  _inherits(Link, _Inline);\n\n  function Link() {\n    _classCallCheck(this, Link);\n\n    return _possibleConstructorReturn(this, (Link.__proto__ || Object.getPrototypeOf(Link)).apply(this, arguments));\n  }\n\n  _createClass(Link, [{\n    key: 'format',\n    value: function format(name, value) {\n      if (name !== this.statics.blotName || !value) return _get(Link.prototype.__proto__ || Object.getPrototypeOf(Link.prototype), 'format', this).call(this, name, value);\n      value = this.constructor.sanitize(value);\n      this.domNode.setAttribute('href', value);\n    }\n  }], [{\n    key: 'create',\n    value: function create(value) {\n      var node = _get(Link.__proto__ || Object.getPrototypeOf(Link), 'create', this).call(this, value);\n      value = this.sanitize(value);\n      node.setAttribute('href', value);\n      node.setAttribute('target', '_blank');\n      return node;\n    }\n  }, {\n    key: 'formats',\n    value: function formats(domNode) {\n      return domNode.getAttribute('href');\n    }\n  }, {\n    key: 'sanitize',\n    value: function sanitize(url) {\n      return _sanitize(url, this.PROTOCOL_WHITELIST) ? url : this.SANITIZED_URL;\n    }\n  }]);\n\n  return Link;\n}(_inline2.default);\n\nLink.blotName = 'link';\nLink.tagName = 'A';\nLink.SANITIZED_URL = 'about:blank';\nLink.PROTOCOL_WHITELIST = ['http', 'https', 'mailto', 'tel'];\n\nfunction _sanitize(url, protocols) {\n  var anchor = document.createElement('a');\n  anchor.href = url;\n  var protocol = anchor.href.slice(0, anchor.href.indexOf(':'));\n  return protocols.indexOf(protocol) > -1;\n}\n\nexports.default = Link;\nexports.sanitize = _sanitize;\n\n/***/ }),\n/* 16 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _keyboard = __webpack_require__(25);\n\nvar _keyboard2 = _interopRequireDefault(_keyboard);\n\nvar _dropdown = __webpack_require__(106);\n\nvar _dropdown2 = _interopRequireDefault(_dropdown);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar optionsCounter = 0;\n\nfunction toggleAriaAttribute(element, attribute) {\n  element.setAttribute(attribute, !(element.getAttribute(attribute) === 'true'));\n}\n\nvar Picker = function () {\n  function Picker(select) {\n    var _this = this;\n\n    _classCallCheck(this, Picker);\n\n    this.select = select;\n    this.container = document.createElement('span');\n    this.buildPicker();\n    this.select.style.display = 'none';\n    this.select.parentNode.insertBefore(this.container, this.select);\n\n    this.label.addEventListener('mousedown', function () {\n      _this.togglePicker();\n    });\n    this.label.addEventListener('keydown', function (event) {\n      switch (event.keyCode) {\n        // Allows the \"Enter\" key to open the picker\n        case _keyboard2.default.keys.ENTER:\n          _this.togglePicker();\n          break;\n\n        // Allows the \"Escape\" key to close the picker\n        case _keyboard2.default.keys.ESCAPE:\n          _this.escape();\n          event.preventDefault();\n          break;\n        default:\n      }\n    });\n    this.select.addEventListener('change', this.update.bind(this));\n  }\n\n  _createClass(Picker, [{\n    key: 'togglePicker',\n    value: function togglePicker() {\n      this.container.classList.toggle('ql-expanded');\n      // Toggle aria-expanded and aria-hidden to make the picker accessible\n      toggleAriaAttribute(this.label, 'aria-expanded');\n      toggleAriaAttribute(this.options, 'aria-hidden');\n    }\n  }, {\n    key: 'buildItem',\n    value: function buildItem(option) {\n      var _this2 = this;\n\n      var item = document.createElement('span');\n      item.tabIndex = '0';\n      item.setAttribute('role', 'button');\n\n      item.classList.add('ql-picker-item');\n      if (option.hasAttribute('value')) {\n        item.setAttribute('data-value', option.getAttribute('value'));\n      }\n      if (option.textContent) {\n        item.setAttribute('data-label', option.textContent);\n      }\n      item.addEventListener('click', function () {\n        _this2.selectItem(item, true);\n      });\n      item.addEventListener('keydown', function (event) {\n        switch (event.keyCode) {\n          // Allows the \"Enter\" key to select an item\n          case _keyboard2.default.keys.ENTER:\n            _this2.selectItem(item, true);\n            event.preventDefault();\n            break;\n\n          // Allows the \"Escape\" key to close the picker\n          case _keyboard2.default.keys.ESCAPE:\n            _this2.escape();\n            event.preventDefault();\n            break;\n          default:\n        }\n      });\n\n      return item;\n    }\n  }, {\n    key: 'buildLabel',\n    value: function buildLabel() {\n      var label = document.createElement('span');\n      label.classList.add('ql-picker-label');\n      label.innerHTML = _dropdown2.default;\n      label.tabIndex = '0';\n      label.setAttribute('role', 'button');\n      label.setAttribute('aria-expanded', 'false');\n      this.container.appendChild(label);\n      return label;\n    }\n  }, {\n    key: 'buildOptions',\n    value: function buildOptions() {\n      var _this3 = this;\n\n      var options = document.createElement('span');\n      options.classList.add('ql-picker-options');\n\n      // Don't want screen readers to read this until options are visible\n      options.setAttribute('aria-hidden', 'true');\n      options.tabIndex = '-1';\n\n      // Need a unique id for aria-controls\n      options.id = 'ql-picker-options-' + optionsCounter;\n      optionsCounter += 1;\n      this.label.setAttribute('aria-controls', options.id);\n\n      this.options = options;\n\n      [].slice.call(this.select.options).forEach(function (option) {\n        var item = _this3.buildItem(option);\n        options.appendChild(item);\n        if (option.selected === true) {\n          _this3.selectItem(item);\n        }\n      });\n      this.container.appendChild(options);\n    }\n  }, {\n    key: 'buildPicker',\n    value: function buildPicker() {\n      var _this4 = this;\n\n      [].slice.call(this.select.attributes).forEach(function (item) {\n        _this4.container.setAttribute(item.name, item.value);\n      });\n      this.container.classList.add('ql-picker');\n      this.label = this.buildLabel();\n      this.buildOptions();\n    }\n  }, {\n    key: 'escape',\n    value: function escape() {\n      var _this5 = this;\n\n      // Close menu and return focus to trigger label\n      this.close();\n      // Need setTimeout for accessibility to ensure that the browser executes\n      // focus on the next process thread and after any DOM content changes\n      setTimeout(function () {\n        return _this5.label.focus();\n      }, 1);\n    }\n  }, {\n    key: 'close',\n    value: function close() {\n      this.container.classList.remove('ql-expanded');\n      this.label.setAttribute('aria-expanded', 'false');\n      this.options.setAttribute('aria-hidden', 'true');\n    }\n  }, {\n    key: 'selectItem',\n    value: function selectItem(item) {\n      var trigger = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n      var selected = this.container.querySelector('.ql-selected');\n      if (item === selected) return;\n      if (selected != null) {\n        selected.classList.remove('ql-selected');\n      }\n      if (item == null) return;\n      item.classList.add('ql-selected');\n      this.select.selectedIndex = [].indexOf.call(item.parentNode.children, item);\n      if (item.hasAttribute('data-value')) {\n        this.label.setAttribute('data-value', item.getAttribute('data-value'));\n      } else {\n        this.label.removeAttribute('data-value');\n      }\n      if (item.hasAttribute('data-label')) {\n        this.label.setAttribute('data-label', item.getAttribute('data-label'));\n      } else {\n        this.label.removeAttribute('data-label');\n      }\n      if (trigger) {\n        if (typeof Event === 'function') {\n          this.select.dispatchEvent(new Event('change'));\n        } else if ((typeof Event === 'undefined' ? 'undefined' : _typeof(Event)) === 'object') {\n          // IE11\n          var event = document.createEvent('Event');\n          event.initEvent('change', true, true);\n          this.select.dispatchEvent(event);\n        }\n        this.close();\n      }\n    }\n  }, {\n    key: 'update',\n    value: function update() {\n      var option = void 0;\n      if (this.select.selectedIndex > -1) {\n        var item = this.container.querySelector('.ql-picker-options').children[this.select.selectedIndex];\n        option = this.select.options[this.select.selectedIndex];\n        this.selectItem(item);\n      } else {\n        this.selectItem(null);\n      }\n      var isActive = option != null && option !== this.select.querySelector('option[selected]');\n      this.label.classList.toggle('ql-active', isActive);\n    }\n  }]);\n\n  return Picker;\n}();\n\nexports.default = Picker;\n\n/***/ }),\n/* 17 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar linked_list_1 = __webpack_require__(47);\nvar shadow_1 = __webpack_require__(27);\nvar Registry = __webpack_require__(1);\nvar ContainerBlot = /** @class */ (function (_super) {\n    __extends(ContainerBlot, _super);\n    function ContainerBlot(domNode) {\n        var _this = _super.call(this, domNode) || this;\n        _this.build();\n        return _this;\n    }\n    ContainerBlot.prototype.appendChild = function (other) {\n        this.insertBefore(other);\n    };\n    ContainerBlot.prototype.attach = function () {\n        _super.prototype.attach.call(this);\n        this.children.forEach(function (child) {\n            child.attach();\n        });\n    };\n    ContainerBlot.prototype.build = function () {\n        var _this = this;\n        this.children = new linked_list_1.default();\n        // Need to be reversed for if DOM nodes already in order\n        [].slice\n            .call(this.domNode.childNodes)\n            .reverse()\n            .forEach(function (node) {\n            try {\n                var child = makeBlot(node);\n                _this.insertBefore(child, _this.children.head || undefined);\n            }\n            catch (err) {\n                if (err instanceof Registry.ParchmentError)\n                    return;\n                else\n                    throw err;\n            }\n        });\n    };\n    ContainerBlot.prototype.deleteAt = function (index, length) {\n        if (index === 0 && length === this.length()) {\n            return this.remove();\n        }\n        this.children.forEachAt(index, length, function (child, offset, length) {\n            child.deleteAt(offset, length);\n        });\n    };\n    ContainerBlot.prototype.descendant = function (criteria, index) {\n        var _a = this.children.find(index), child = _a[0], offset = _a[1];\n        if ((criteria.blotName == null && criteria(child)) ||\n            (criteria.blotName != null && child instanceof criteria)) {\n            return [child, offset];\n        }\n        else if (child instanceof ContainerBlot) {\n            return child.descendant(criteria, offset);\n        }\n        else {\n            return [null, -1];\n        }\n    };\n    ContainerBlot.prototype.descendants = function (criteria, index, length) {\n        if (index === void 0) { index = 0; }\n        if (length === void 0) { length = Number.MAX_VALUE; }\n        var descendants = [];\n        var lengthLeft = length;\n        this.children.forEachAt(index, length, function (child, index, length) {\n            if ((criteria.blotName == null && criteria(child)) ||\n                (criteria.blotName != null && child instanceof criteria)) {\n                descendants.push(child);\n            }\n            if (child instanceof ContainerBlot) {\n                descendants = descendants.concat(child.descendants(criteria, index, lengthLeft));\n            }\n            lengthLeft -= length;\n        });\n        return descendants;\n    };\n    ContainerBlot.prototype.detach = function () {\n        this.children.forEach(function (child) {\n            child.detach();\n        });\n        _super.prototype.detach.call(this);\n    };\n    ContainerBlot.prototype.formatAt = function (index, length, name, value) {\n        this.children.forEachAt(index, length, function (child, offset, length) {\n            child.formatAt(offset, length, name, value);\n        });\n    };\n    ContainerBlot.prototype.insertAt = function (index, value, def) {\n        var _a = this.children.find(index), child = _a[0], offset = _a[1];\n        if (child) {\n            child.insertAt(offset, value, def);\n        }\n        else {\n            var blot = def == null ? Registry.create('text', value) : Registry.create(value, def);\n            this.appendChild(blot);\n        }\n    };\n    ContainerBlot.prototype.insertBefore = function (childBlot, refBlot) {\n        if (this.statics.allowedChildren != null &&\n            !this.statics.allowedChildren.some(function (child) {\n                return childBlot instanceof child;\n            })) {\n            throw new Registry.ParchmentError(\"Cannot insert \" + childBlot.statics.blotName + \" into \" + this.statics.blotName);\n        }\n        childBlot.insertInto(this, refBlot);\n    };\n    ContainerBlot.prototype.length = function () {\n        return this.children.reduce(function (memo, child) {\n            return memo + child.length();\n        }, 0);\n    };\n    ContainerBlot.prototype.moveChildren = function (targetParent, refNode) {\n        this.children.forEach(function (child) {\n            targetParent.insertBefore(child, refNode);\n        });\n    };\n    ContainerBlot.prototype.optimize = function (context) {\n        _super.prototype.optimize.call(this, context);\n        if (this.children.length === 0) {\n            if (this.statics.defaultChild != null) {\n                var child = Registry.create(this.statics.defaultChild);\n                this.appendChild(child);\n                child.optimize(context);\n            }\n            else {\n                this.remove();\n            }\n        }\n    };\n    ContainerBlot.prototype.path = function (index, inclusive) {\n        if (inclusive === void 0) { inclusive = false; }\n        var _a = this.children.find(index, inclusive), child = _a[0], offset = _a[1];\n        var position = [[this, index]];\n        if (child instanceof ContainerBlot) {\n            return position.concat(child.path(offset, inclusive));\n        }\n        else if (child != null) {\n            position.push([child, offset]);\n        }\n        return position;\n    };\n    ContainerBlot.prototype.removeChild = function (child) {\n        this.children.remove(child);\n    };\n    ContainerBlot.prototype.replace = function (target) {\n        if (target instanceof ContainerBlot) {\n            target.moveChildren(this);\n        }\n        _super.prototype.replace.call(this, target);\n    };\n    ContainerBlot.prototype.split = function (index, force) {\n        if (force === void 0) { force = false; }\n        if (!force) {\n            if (index === 0)\n                return this;\n            if (index === this.length())\n                return this.next;\n        }\n        var after = this.clone();\n        this.parent.insertBefore(after, this.next);\n        this.children.forEachAt(index, this.length(), function (child, offset, length) {\n            child = child.split(offset, force);\n            after.appendChild(child);\n        });\n        return after;\n    };\n    ContainerBlot.prototype.unwrap = function () {\n        this.moveChildren(this.parent, this.next);\n        this.remove();\n    };\n    ContainerBlot.prototype.update = function (mutations, context) {\n        var _this = this;\n        var addedNodes = [];\n        var removedNodes = [];\n        mutations.forEach(function (mutation) {\n            if (mutation.target === _this.domNode && mutation.type === 'childList') {\n                addedNodes.push.apply(addedNodes, mutation.addedNodes);\n                removedNodes.push.apply(removedNodes, mutation.removedNodes);\n            }\n        });\n        removedNodes.forEach(function (node) {\n            // Check node has actually been removed\n            // One exception is Chrome does not immediately remove IFRAMEs\n            // from DOM but MutationRecord is correct in its reported removal\n            if (node.parentNode != null &&\n                // @ts-ignore\n                node.tagName !== 'IFRAME' &&\n                document.body.compareDocumentPosition(node) & Node.DOCUMENT_POSITION_CONTAINED_BY) {\n                return;\n            }\n            var blot = Registry.find(node);\n            if (blot == null)\n                return;\n            if (blot.domNode.parentNode == null || blot.domNode.parentNode === _this.domNode) {\n                blot.detach();\n            }\n        });\n        addedNodes\n            .filter(function (node) {\n            return node.parentNode == _this.domNode;\n        })\n            .sort(function (a, b) {\n            if (a === b)\n                return 0;\n            if (a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_FOLLOWING) {\n                return 1;\n            }\n            return -1;\n        })\n            .forEach(function (node) {\n            var refBlot = null;\n            if (node.nextSibling != null) {\n                refBlot = Registry.find(node.nextSibling);\n            }\n            var blot = makeBlot(node);\n            if (blot.next != refBlot || blot.next == null) {\n                if (blot.parent != null) {\n                    blot.parent.removeChild(_this);\n                }\n                _this.insertBefore(blot, refBlot || undefined);\n            }\n        });\n    };\n    return ContainerBlot;\n}(shadow_1.default));\nfunction makeBlot(node) {\n    var blot = Registry.find(node);\n    if (blot == null) {\n        try {\n            blot = Registry.create(node);\n        }\n        catch (e) {\n            blot = Registry.create(Registry.Scope.INLINE);\n            [].slice.call(node.childNodes).forEach(function (child) {\n                // @ts-ignore\n                blot.domNode.appendChild(child);\n            });\n            if (node.parentNode) {\n                node.parentNode.replaceChild(blot.domNode, node);\n            }\n            blot.attach();\n        }\n    }\n    return blot;\n}\nexports.default = ContainerBlot;\n\n\n/***/ }),\n/* 18 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar attributor_1 = __webpack_require__(11);\nvar store_1 = __webpack_require__(28);\nvar container_1 = __webpack_require__(17);\nvar Registry = __webpack_require__(1);\nvar FormatBlot = /** @class */ (function (_super) {\n    __extends(FormatBlot, _super);\n    function FormatBlot(domNode) {\n        var _this = _super.call(this, domNode) || this;\n        _this.attributes = new store_1.default(_this.domNode);\n        return _this;\n    }\n    FormatBlot.formats = function (domNode) {\n        if (typeof this.tagName === 'string') {\n            return true;\n        }\n        else if (Array.isArray(this.tagName)) {\n            return domNode.tagName.toLowerCase();\n        }\n        return undefined;\n    };\n    FormatBlot.prototype.format = function (name, value) {\n        var format = Registry.query(name);\n        if (format instanceof attributor_1.default) {\n            this.attributes.attribute(format, value);\n        }\n        else if (value) {\n            if (format != null && (name !== this.statics.blotName || this.formats()[name] !== value)) {\n                this.replaceWith(name, value);\n            }\n        }\n    };\n    FormatBlot.prototype.formats = function () {\n        var formats = this.attributes.values();\n        var format = this.statics.formats(this.domNode);\n        if (format != null) {\n            formats[this.statics.blotName] = format;\n        }\n        return formats;\n    };\n    FormatBlot.prototype.replaceWith = function (name, value) {\n        var replacement = _super.prototype.replaceWith.call(this, name, value);\n        this.attributes.copy(replacement);\n        return replacement;\n    };\n    FormatBlot.prototype.update = function (mutations, context) {\n        var _this = this;\n        _super.prototype.update.call(this, mutations, context);\n        if (mutations.some(function (mutation) {\n            return mutation.target === _this.domNode && mutation.type === 'attributes';\n        })) {\n            this.attributes.build();\n        }\n    };\n    FormatBlot.prototype.wrap = function (name, value) {\n        var wrapper = _super.prototype.wrap.call(this, name, value);\n        if (wrapper instanceof FormatBlot && wrapper.statics.scope === this.statics.scope) {\n            this.attributes.move(wrapper);\n        }\n        return wrapper;\n    };\n    return FormatBlot;\n}(container_1.default));\nexports.default = FormatBlot;\n\n\n/***/ }),\n/* 19 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar shadow_1 = __webpack_require__(27);\nvar Registry = __webpack_require__(1);\nvar LeafBlot = /** @class */ (function (_super) {\n    __extends(LeafBlot, _super);\n    function LeafBlot() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    LeafBlot.value = function (domNode) {\n        return true;\n    };\n    LeafBlot.prototype.index = function (node, offset) {\n        if (this.domNode === node ||\n            this.domNode.compareDocumentPosition(node) & Node.DOCUMENT_POSITION_CONTAINED_BY) {\n            return Math.min(offset, 1);\n        }\n        return -1;\n    };\n    LeafBlot.prototype.position = function (index, inclusive) {\n        var offset = [].indexOf.call(this.parent.domNode.childNodes, this.domNode);\n        if (index > 0)\n            offset += 1;\n        return [this.parent.domNode, offset];\n    };\n    LeafBlot.prototype.value = function () {\n        return _a = {}, _a[this.statics.blotName] = this.statics.value(this.domNode) || true, _a;\n        var _a;\n    };\n    LeafBlot.scope = Registry.Scope.INLINE_BLOT;\n    return LeafBlot;\n}(shadow_1.default));\nexports.default = LeafBlot;\n\n\n/***/ }),\n/* 20 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar equal = __webpack_require__(12);\nvar extend = __webpack_require__(2);\n\n\nvar lib = {\n  attributes: {\n    compose: function (a, b, keepNull) {\n      if (typeof a !== 'object') a = {};\n      if (typeof b !== 'object') b = {};\n      var attributes = extend(true, {}, b);\n      if (!keepNull) {\n        attributes = Object.keys(attributes).reduce(function (copy, key) {\n          if (attributes[key] != null) {\n            copy[key] = attributes[key];\n          }\n          return copy;\n        }, {});\n      }\n      for (var key in a) {\n        if (a[key] !== undefined && b[key] === undefined) {\n          attributes[key] = a[key];\n        }\n      }\n      return Object.keys(attributes).length > 0 ? attributes : undefined;\n    },\n\n    diff: function(a, b) {\n      if (typeof a !== 'object') a = {};\n      if (typeof b !== 'object') b = {};\n      var attributes = Object.keys(a).concat(Object.keys(b)).reduce(function (attributes, key) {\n        if (!equal(a[key], b[key])) {\n          attributes[key] = b[key] === undefined ? null : b[key];\n        }\n        return attributes;\n      }, {});\n      return Object.keys(attributes).length > 0 ? attributes : undefined;\n    },\n\n    transform: function (a, b, priority) {\n      if (typeof a !== 'object') return b;\n      if (typeof b !== 'object') return undefined;\n      if (!priority) return b;  // b simply overwrites us without priority\n      var attributes = Object.keys(b).reduce(function (attributes, key) {\n        if (a[key] === undefined) attributes[key] = b[key];  // null is a valid value\n        return attributes;\n      }, {});\n      return Object.keys(attributes).length > 0 ? attributes : undefined;\n    }\n  },\n\n  iterator: function (ops) {\n    return new Iterator(ops);\n  },\n\n  length: function (op) {\n    if (typeof op['delete'] === 'number') {\n      return op['delete'];\n    } else if (typeof op.retain === 'number') {\n      return op.retain;\n    } else {\n      return typeof op.insert === 'string' ? op.insert.length : 1;\n    }\n  }\n};\n\n\nfunction Iterator(ops) {\n  this.ops = ops;\n  this.index = 0;\n  this.offset = 0;\n};\n\nIterator.prototype.hasNext = function () {\n  return this.peekLength() < Infinity;\n};\n\nIterator.prototype.next = function (length) {\n  if (!length) length = Infinity;\n  var nextOp = this.ops[this.index];\n  if (nextOp) {\n    var offset = this.offset;\n    var opLength = lib.length(nextOp)\n    if (length >= opLength - offset) {\n      length = opLength - offset;\n      this.index += 1;\n      this.offset = 0;\n    } else {\n      this.offset += length;\n    }\n    if (typeof nextOp['delete'] === 'number') {\n      return { 'delete': length };\n    } else {\n      var retOp = {};\n      if (nextOp.attributes) {\n        retOp.attributes = nextOp.attributes;\n      }\n      if (typeof nextOp.retain === 'number') {\n        retOp.retain = length;\n      } else if (typeof nextOp.insert === 'string') {\n        retOp.insert = nextOp.insert.substr(offset, length);\n      } else {\n        // offset should === 0, length should === 1\n        retOp.insert = nextOp.insert;\n      }\n      return retOp;\n    }\n  } else {\n    return { retain: Infinity };\n  }\n};\n\nIterator.prototype.peek = function () {\n  return this.ops[this.index];\n};\n\nIterator.prototype.peekLength = function () {\n  if (this.ops[this.index]) {\n    // Should never return 0 if our index is being managed correctly\n    return lib.length(this.ops[this.index]) - this.offset;\n  } else {\n    return Infinity;\n  }\n};\n\nIterator.prototype.peekType = function () {\n  if (this.ops[this.index]) {\n    if (typeof this.ops[this.index]['delete'] === 'number') {\n      return 'delete';\n    } else if (typeof this.ops[this.index].retain === 'number') {\n      return 'retain';\n    } else {\n      return 'insert';\n    }\n  }\n  return 'retain';\n};\n\n\nmodule.exports = lib;\n\n\n/***/ }),\n/* 21 */\n/***/ (function(module, exports) {\n\nvar clone = (function() {\n'use strict';\n\nfunction _instanceof(obj, type) {\n  return type != null && obj instanceof type;\n}\n\nvar nativeMap;\ntry {\n  nativeMap = Map;\n} catch(_) {\n  // maybe a reference error because no `Map`. Give it a dummy value that no\n  // value will ever be an instanceof.\n  nativeMap = function() {};\n}\n\nvar nativeSet;\ntry {\n  nativeSet = Set;\n} catch(_) {\n  nativeSet = function() {};\n}\n\nvar nativePromise;\ntry {\n  nativePromise = Promise;\n} catch(_) {\n  nativePromise = function() {};\n}\n\n/**\n * Clones (copies) an Object using deep copying.\n *\n * This function supports circular references by default, but if you are certain\n * there are no circular references in your object, you can save some CPU time\n * by calling clone(obj, false).\n *\n * Caution: if `circular` is false and `parent` contains circular references,\n * your program may enter an infinite loop and crash.\n *\n * @param `parent` - the object to be cloned\n * @param `circular` - set to true if the object to be cloned may contain\n *    circular references. (optional - true by default)\n * @param `depth` - set to a number if the object is only to be cloned to\n *    a particular depth. (optional - defaults to Infinity)\n * @param `prototype` - sets the prototype to be used when cloning an object.\n *    (optional - defaults to parent prototype).\n * @param `includeNonEnumerable` - set to true if the non-enumerable properties\n *    should be cloned as well. Non-enumerable properties on the prototype\n *    chain will be ignored. (optional - false by default)\n*/\nfunction clone(parent, circular, depth, prototype, includeNonEnumerable) {\n  if (typeof circular === 'object') {\n    depth = circular.depth;\n    prototype = circular.prototype;\n    includeNonEnumerable = circular.includeNonEnumerable;\n    circular = circular.circular;\n  }\n  // maintain two arrays for circular references, where corresponding parents\n  // and children have the same index\n  var allParents = [];\n  var allChildren = [];\n\n  var useBuffer = typeof Buffer != 'undefined';\n\n  if (typeof circular == 'undefined')\n    circular = true;\n\n  if (typeof depth == 'undefined')\n    depth = Infinity;\n\n  // recurse this function so we don't reset allParents and allChildren\n  function _clone(parent, depth) {\n    // cloning null always returns null\n    if (parent === null)\n      return null;\n\n    if (depth === 0)\n      return parent;\n\n    var child;\n    var proto;\n    if (typeof parent != 'object') {\n      return parent;\n    }\n\n    if (_instanceof(parent, nativeMap)) {\n      child = new nativeMap();\n    } else if (_instanceof(parent, nativeSet)) {\n      child = new nativeSet();\n    } else if (_instanceof(parent, nativePromise)) {\n      child = new nativePromise(function (resolve, reject) {\n        parent.then(function(value) {\n          resolve(_clone(value, depth - 1));\n        }, function(err) {\n          reject(_clone(err, depth - 1));\n        });\n      });\n    } else if (clone.__isArray(parent)) {\n      child = [];\n    } else if (clone.__isRegExp(parent)) {\n      child = new RegExp(parent.source, __getRegExpFlags(parent));\n      if (parent.lastIndex) child.lastIndex = parent.lastIndex;\n    } else if (clone.__isDate(parent)) {\n      child = new Date(parent.getTime());\n    } else if (useBuffer && Buffer.isBuffer(parent)) {\n      child = new Buffer(parent.length);\n      parent.copy(child);\n      return child;\n    } else if (_instanceof(parent, Error)) {\n      child = Object.create(parent);\n    } else {\n      if (typeof prototype == 'undefined') {\n        proto = Object.getPrototypeOf(parent);\n        child = Object.create(proto);\n      }\n      else {\n        child = Object.create(prototype);\n        proto = prototype;\n      }\n    }\n\n    if (circular) {\n      var index = allParents.indexOf(parent);\n\n      if (index != -1) {\n        return allChildren[index];\n      }\n      allParents.push(parent);\n      allChildren.push(child);\n    }\n\n    if (_instanceof(parent, nativeMap)) {\n      parent.forEach(function(value, key) {\n        var keyChild = _clone(key, depth - 1);\n        var valueChild = _clone(value, depth - 1);\n        child.set(keyChild, valueChild);\n      });\n    }\n    if (_instanceof(parent, nativeSet)) {\n      parent.forEach(function(value) {\n        var entryChild = _clone(value, depth - 1);\n        child.add(entryChild);\n      });\n    }\n\n    for (var i in parent) {\n      var attrs;\n      if (proto) {\n        attrs = Object.getOwnPropertyDescriptor(proto, i);\n      }\n\n      if (attrs && attrs.set == null) {\n        continue;\n      }\n      child[i] = _clone(parent[i], depth - 1);\n    }\n\n    if (Object.getOwnPropertySymbols) {\n      var symbols = Object.getOwnPropertySymbols(parent);\n      for (var i = 0; i < symbols.length; i++) {\n        // Don't need to worry about cloning a symbol because it is a primitive,\n        // like a number or string.\n        var symbol = symbols[i];\n        var descriptor = Object.getOwnPropertyDescriptor(parent, symbol);\n        if (descriptor && !descriptor.enumerable && !includeNonEnumerable) {\n          continue;\n        }\n        child[symbol] = _clone(parent[symbol], depth - 1);\n        if (!descriptor.enumerable) {\n          Object.defineProperty(child, symbol, {\n            enumerable: false\n          });\n        }\n      }\n    }\n\n    if (includeNonEnumerable) {\n      var allPropertyNames = Object.getOwnPropertyNames(parent);\n      for (var i = 0; i < allPropertyNames.length; i++) {\n        var propertyName = allPropertyNames[i];\n        var descriptor = Object.getOwnPropertyDescriptor(parent, propertyName);\n        if (descriptor && descriptor.enumerable) {\n          continue;\n        }\n        child[propertyName] = _clone(parent[propertyName], depth - 1);\n        Object.defineProperty(child, propertyName, {\n          enumerable: false\n        });\n      }\n    }\n\n    return child;\n  }\n\n  return _clone(parent, depth);\n}\n\n/**\n * Simple flat clone using prototype, accepts only objects, usefull for property\n * override on FLAT configuration object (no nested props).\n *\n * USE WITH CAUTION! This may not behave as you wish if you do not know how this\n * works.\n */\nclone.clonePrototype = function clonePrototype(parent) {\n  if (parent === null)\n    return null;\n\n  var c = function () {};\n  c.prototype = parent;\n  return new c();\n};\n\n// private utility functions\n\nfunction __objToStr(o) {\n  return Object.prototype.toString.call(o);\n}\nclone.__objToStr = __objToStr;\n\nfunction __isDate(o) {\n  return typeof o === 'object' && __objToStr(o) === '[object Date]';\n}\nclone.__isDate = __isDate;\n\nfunction __isArray(o) {\n  return typeof o === 'object' && __objToStr(o) === '[object Array]';\n}\nclone.__isArray = __isArray;\n\nfunction __isRegExp(o) {\n  return typeof o === 'object' && __objToStr(o) === '[object RegExp]';\n}\nclone.__isRegExp = __isRegExp;\n\nfunction __getRegExpFlags(re) {\n  var flags = '';\n  if (re.global) flags += 'g';\n  if (re.ignoreCase) flags += 'i';\n  if (re.multiline) flags += 'm';\n  return flags;\n}\nclone.__getRegExpFlags = __getRegExpFlags;\n\nreturn clone;\n})();\n\nif (typeof module === 'object' && module.exports) {\n  module.exports = clone;\n}\n\n\n/***/ }),\n/* 22 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = exports.Range = undefined;\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nvar _clone = __webpack_require__(21);\n\nvar _clone2 = _interopRequireDefault(_clone);\n\nvar _deepEqual = __webpack_require__(12);\n\nvar _deepEqual2 = _interopRequireDefault(_deepEqual);\n\nvar _emitter3 = __webpack_require__(9);\n\nvar _emitter4 = _interopRequireDefault(_emitter3);\n\nvar _logger = __webpack_require__(10);\n\nvar _logger2 = _interopRequireDefault(_logger);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar debug = (0, _logger2.default)('quill:selection');\n\nvar Range = function Range(index) {\n  var length = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\n  _classCallCheck(this, Range);\n\n  this.index = index;\n  this.length = length;\n};\n\nvar Selection = function () {\n  function Selection(scroll, emitter) {\n    var _this = this;\n\n    _classCallCheck(this, Selection);\n\n    this.emitter = emitter;\n    this.scroll = scroll;\n    this.composing = false;\n    this.mouseDown = false;\n    this.root = this.scroll.domNode;\n    this.cursor = _parchment2.default.create('cursor', this);\n    // savedRange is last non-null range\n    this.lastRange = this.savedRange = new Range(0, 0);\n    this.handleComposition();\n    this.handleDragging();\n    this.emitter.listenDOM('selectionchange', document, function () {\n      if (!_this.mouseDown) {\n        setTimeout(_this.update.bind(_this, _emitter4.default.sources.USER), 1);\n      }\n    });\n    this.emitter.on(_emitter4.default.events.EDITOR_CHANGE, function (type, delta) {\n      if (type === _emitter4.default.events.TEXT_CHANGE && delta.length() > 0) {\n        _this.update(_emitter4.default.sources.SILENT);\n      }\n    });\n    this.emitter.on(_emitter4.default.events.SCROLL_BEFORE_UPDATE, function () {\n      if (!_this.hasFocus()) return;\n      var native = _this.getNativeRange();\n      if (native == null) return;\n      if (native.start.node === _this.cursor.textNode) return; // cursor.restore() will handle\n      // TODO unclear if this has negative side effects\n      _this.emitter.once(_emitter4.default.events.SCROLL_UPDATE, function () {\n        try {\n          _this.setNativeRange(native.start.node, native.start.offset, native.end.node, native.end.offset);\n        } catch (ignored) {}\n      });\n    });\n    this.emitter.on(_emitter4.default.events.SCROLL_OPTIMIZE, function (mutations, context) {\n      if (context.range) {\n        var _context$range = context.range,\n            startNode = _context$range.startNode,\n            startOffset = _context$range.startOffset,\n            endNode = _context$range.endNode,\n            endOffset = _context$range.endOffset;\n\n        _this.setNativeRange(startNode, startOffset, endNode, endOffset);\n      }\n    });\n    this.update(_emitter4.default.sources.SILENT);\n  }\n\n  _createClass(Selection, [{\n    key: 'handleComposition',\n    value: function handleComposition() {\n      var _this2 = this;\n\n      this.root.addEventListener('compositionstart', function () {\n        _this2.composing = true;\n      });\n      this.root.addEventListener('compositionend', function () {\n        _this2.composing = false;\n        if (_this2.cursor.parent) {\n          var range = _this2.cursor.restore();\n          if (!range) return;\n          setTimeout(function () {\n            _this2.setNativeRange(range.startNode, range.startOffset, range.endNode, range.endOffset);\n          }, 1);\n        }\n      });\n    }\n  }, {\n    key: 'handleDragging',\n    value: function handleDragging() {\n      var _this3 = this;\n\n      this.emitter.listenDOM('mousedown', document.body, function () {\n        _this3.mouseDown = true;\n      });\n      this.emitter.listenDOM('mouseup', document.body, function () {\n        _this3.mouseDown = false;\n        _this3.update(_emitter4.default.sources.USER);\n      });\n    }\n  }, {\n    key: 'focus',\n    value: function focus() {\n      if (this.hasFocus()) return;\n      this.root.focus();\n      this.setRange(this.savedRange);\n    }\n  }, {\n    key: 'format',\n    value: function format(_format, value) {\n      if (this.scroll.whitelist != null && !this.scroll.whitelist[_format]) return;\n      this.scroll.update();\n      var nativeRange = this.getNativeRange();\n      if (nativeRange == null || !nativeRange.native.collapsed || _parchment2.default.query(_format, _parchment2.default.Scope.BLOCK)) return;\n      if (nativeRange.start.node !== this.cursor.textNode) {\n        var blot = _parchment2.default.find(nativeRange.start.node, false);\n        if (blot == null) return;\n        // TODO Give blot ability to not split\n        if (blot instanceof _parchment2.default.Leaf) {\n          var after = blot.split(nativeRange.start.offset);\n          blot.parent.insertBefore(this.cursor, after);\n        } else {\n          blot.insertBefore(this.cursor, nativeRange.start.node); // Should never happen\n        }\n        this.cursor.attach();\n      }\n      this.cursor.format(_format, value);\n      this.scroll.optimize();\n      this.setNativeRange(this.cursor.textNode, this.cursor.textNode.data.length);\n      this.update();\n    }\n  }, {\n    key: 'getBounds',\n    value: function getBounds(index) {\n      var length = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\n      var scrollLength = this.scroll.length();\n      index = Math.min(index, scrollLength - 1);\n      length = Math.min(index + length, scrollLength - 1) - index;\n      var node = void 0,\n          _scroll$leaf = this.scroll.leaf(index),\n          _scroll$leaf2 = _slicedToArray(_scroll$leaf, 2),\n          leaf = _scroll$leaf2[0],\n          offset = _scroll$leaf2[1];\n      if (leaf == null) return null;\n\n      var _leaf$position = leaf.position(offset, true);\n\n      var _leaf$position2 = _slicedToArray(_leaf$position, 2);\n\n      node = _leaf$position2[0];\n      offset = _leaf$position2[1];\n\n      var range = document.createRange();\n      if (length > 0) {\n        range.setStart(node, offset);\n\n        var _scroll$leaf3 = this.scroll.leaf(index + length);\n\n        var _scroll$leaf4 = _slicedToArray(_scroll$leaf3, 2);\n\n        leaf = _scroll$leaf4[0];\n        offset = _scroll$leaf4[1];\n\n        if (leaf == null) return null;\n\n        var _leaf$position3 = leaf.position(offset, true);\n\n        var _leaf$position4 = _slicedToArray(_leaf$position3, 2);\n\n        node = _leaf$position4[0];\n        offset = _leaf$position4[1];\n\n        range.setEnd(node, offset);\n        return range.getBoundingClientRect();\n      } else {\n        var side = 'left';\n        var rect = void 0;\n        if (node instanceof Text) {\n          if (offset < node.data.length) {\n            range.setStart(node, offset);\n            range.setEnd(node, offset + 1);\n          } else {\n            range.setStart(node, offset - 1);\n            range.setEnd(node, offset);\n            side = 'right';\n          }\n          rect = range.getBoundingClientRect();\n        } else {\n          rect = leaf.domNode.getBoundingClientRect();\n          if (offset > 0) side = 'right';\n        }\n        return {\n          bottom: rect.top + rect.height,\n          height: rect.height,\n          left: rect[side],\n          right: rect[side],\n          top: rect.top,\n          width: 0\n        };\n      }\n    }\n  }, {\n    key: 'getNativeRange',\n    value: function getNativeRange() {\n      var selection = document.getSelection();\n      if (selection == null || selection.rangeCount <= 0) return null;\n      var nativeRange = selection.getRangeAt(0);\n      if (nativeRange == null) return null;\n      var range = this.normalizeNative(nativeRange);\n      debug.info('getNativeRange', range);\n      return range;\n    }\n  }, {\n    key: 'getRange',\n    value: function getRange() {\n      var normalized = this.getNativeRange();\n      if (normalized == null) return [null, null];\n      var range = this.normalizedToRange(normalized);\n      return [range, normalized];\n    }\n  }, {\n    key: 'hasFocus',\n    value: function hasFocus() {\n      return document.activeElement === this.root;\n    }\n  }, {\n    key: 'normalizedToRange',\n    value: function normalizedToRange(range) {\n      var _this4 = this;\n\n      var positions = [[range.start.node, range.start.offset]];\n      if (!range.native.collapsed) {\n        positions.push([range.end.node, range.end.offset]);\n      }\n      var indexes = positions.map(function (position) {\n        var _position = _slicedToArray(position, 2),\n            node = _position[0],\n            offset = _position[1];\n\n        var blot = _parchment2.default.find(node, true);\n        var index = blot.offset(_this4.scroll);\n        if (offset === 0) {\n          return index;\n        } else if (blot instanceof _parchment2.default.Container) {\n          return index + blot.length();\n        } else {\n          return index + blot.index(node, offset);\n        }\n      });\n      var end = Math.min(Math.max.apply(Math, _toConsumableArray(indexes)), this.scroll.length() - 1);\n      var start = Math.min.apply(Math, [end].concat(_toConsumableArray(indexes)));\n      return new Range(start, end - start);\n    }\n  }, {\n    key: 'normalizeNative',\n    value: function normalizeNative(nativeRange) {\n      if (!contains(this.root, nativeRange.startContainer) || !nativeRange.collapsed && !contains(this.root, nativeRange.endContainer)) {\n        return null;\n      }\n      var range = {\n        start: { node: nativeRange.startContainer, offset: nativeRange.startOffset },\n        end: { node: nativeRange.endContainer, offset: nativeRange.endOffset },\n        native: nativeRange\n      };\n      [range.start, range.end].forEach(function (position) {\n        var node = position.node,\n            offset = position.offset;\n        while (!(node instanceof Text) && node.childNodes.length > 0) {\n          if (node.childNodes.length > offset) {\n            node = node.childNodes[offset];\n            offset = 0;\n          } else if (node.childNodes.length === offset) {\n            node = node.lastChild;\n            offset = node instanceof Text ? node.data.length : node.childNodes.length + 1;\n          } else {\n            break;\n          }\n        }\n        position.node = node, position.offset = offset;\n      });\n      return range;\n    }\n  }, {\n    key: 'rangeToNative',\n    value: function rangeToNative(range) {\n      var _this5 = this;\n\n      var indexes = range.collapsed ? [range.index] : [range.index, range.index + range.length];\n      var args = [];\n      var scrollLength = this.scroll.length();\n      indexes.forEach(function (index, i) {\n        index = Math.min(scrollLength - 1, index);\n        var node = void 0,\n            _scroll$leaf5 = _this5.scroll.leaf(index),\n            _scroll$leaf6 = _slicedToArray(_scroll$leaf5, 2),\n            leaf = _scroll$leaf6[0],\n            offset = _scroll$leaf6[1];\n        var _leaf$position5 = leaf.position(offset, i !== 0);\n\n        var _leaf$position6 = _slicedToArray(_leaf$position5, 2);\n\n        node = _leaf$position6[0];\n        offset = _leaf$position6[1];\n\n        args.push(node, offset);\n      });\n      if (args.length < 2) {\n        args = args.concat(args);\n      }\n      return args;\n    }\n  }, {\n    key: 'scrollIntoView',\n    value: function scrollIntoView(scrollingContainer) {\n      var range = this.lastRange;\n      if (range == null) return;\n      var bounds = this.getBounds(range.index, range.length);\n      if (bounds == null) return;\n      var limit = this.scroll.length() - 1;\n\n      var _scroll$line = this.scroll.line(Math.min(range.index, limit)),\n          _scroll$line2 = _slicedToArray(_scroll$line, 1),\n          first = _scroll$line2[0];\n\n      var last = first;\n      if (range.length > 0) {\n        var _scroll$line3 = this.scroll.line(Math.min(range.index + range.length, limit));\n\n        var _scroll$line4 = _slicedToArray(_scroll$line3, 1);\n\n        last = _scroll$line4[0];\n      }\n      if (first == null || last == null) return;\n      var scrollBounds = scrollingContainer.getBoundingClientRect();\n      if (bounds.top < scrollBounds.top) {\n        scrollingContainer.scrollTop -= scrollBounds.top - bounds.top;\n      } else if (bounds.bottom > scrollBounds.bottom) {\n        scrollingContainer.scrollTop += bounds.bottom - scrollBounds.bottom;\n      }\n    }\n  }, {\n    key: 'setNativeRange',\n    value: function setNativeRange(startNode, startOffset) {\n      var endNode = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : startNode;\n      var endOffset = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : startOffset;\n      var force = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n\n      debug.info('setNativeRange', startNode, startOffset, endNode, endOffset);\n      if (startNode != null && (this.root.parentNode == null || startNode.parentNode == null || endNode.parentNode == null)) {\n        return;\n      }\n      var selection = document.getSelection();\n      if (selection == null) return;\n      if (startNode != null) {\n        if (!this.hasFocus()) this.root.focus();\n        var native = (this.getNativeRange() || {}).native;\n        if (native == null || force || startNode !== native.startContainer || startOffset !== native.startOffset || endNode !== native.endContainer || endOffset !== native.endOffset) {\n\n          if (startNode.tagName == \"BR\") {\n            startOffset = [].indexOf.call(startNode.parentNode.childNodes, startNode);\n            startNode = startNode.parentNode;\n          }\n          if (endNode.tagName == \"BR\") {\n            endOffset = [].indexOf.call(endNode.parentNode.childNodes, endNode);\n            endNode = endNode.parentNode;\n          }\n          var range = document.createRange();\n          range.setStart(startNode, startOffset);\n          range.setEnd(endNode, endOffset);\n          selection.removeAllRanges();\n          selection.addRange(range);\n        }\n      } else {\n        selection.removeAllRanges();\n        this.root.blur();\n        document.body.focus(); // root.blur() not enough on IE11+Travis+SauceLabs (but not local VMs)\n      }\n    }\n  }, {\n    key: 'setRange',\n    value: function setRange(range) {\n      var force = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n      var source = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : _emitter4.default.sources.API;\n\n      if (typeof force === 'string') {\n        source = force;\n        force = false;\n      }\n      debug.info('setRange', range);\n      if (range != null) {\n        var args = this.rangeToNative(range);\n        this.setNativeRange.apply(this, _toConsumableArray(args).concat([force]));\n      } else {\n        this.setNativeRange(null);\n      }\n      this.update(source);\n    }\n  }, {\n    key: 'update',\n    value: function update() {\n      var source = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _emitter4.default.sources.USER;\n\n      var oldRange = this.lastRange;\n\n      var _getRange = this.getRange(),\n          _getRange2 = _slicedToArray(_getRange, 2),\n          lastRange = _getRange2[0],\n          nativeRange = _getRange2[1];\n\n      this.lastRange = lastRange;\n      if (this.lastRange != null) {\n        this.savedRange = this.lastRange;\n      }\n      if (!(0, _deepEqual2.default)(oldRange, this.lastRange)) {\n        var _emitter;\n\n        if (!this.composing && nativeRange != null && nativeRange.native.collapsed && nativeRange.start.node !== this.cursor.textNode) {\n          this.cursor.restore();\n        }\n        var args = [_emitter4.default.events.SELECTION_CHANGE, (0, _clone2.default)(this.lastRange), (0, _clone2.default)(oldRange), source];\n        (_emitter = this.emitter).emit.apply(_emitter, [_emitter4.default.events.EDITOR_CHANGE].concat(args));\n        if (source !== _emitter4.default.sources.SILENT) {\n          var _emitter2;\n\n          (_emitter2 = this.emitter).emit.apply(_emitter2, args);\n        }\n      }\n    }\n  }]);\n\n  return Selection;\n}();\n\nfunction contains(parent, descendant) {\n  try {\n    // Firefox inserts inaccessible nodes around video elements\n    descendant.parentNode;\n  } catch (e) {\n    return false;\n  }\n  // IE11 has bug with Text nodes\n  // https://connect.microsoft.com/IE/feedback/details/780874/node-contains-is-incorrect\n  if (descendant instanceof Text) {\n    descendant = descendant.parentNode;\n  }\n  return parent.contains(descendant);\n}\n\nexports.Range = Range;\nexports.default = Selection;\n\n/***/ }),\n/* 23 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nvar _block = __webpack_require__(3);\n\nvar _block2 = _interopRequireDefault(_block);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Container = function (_Parchment$Container) {\n  _inherits(Container, _Parchment$Container);\n\n  function Container() {\n    _classCallCheck(this, Container);\n\n    return _possibleConstructorReturn(this, (Container.__proto__ || Object.getPrototypeOf(Container)).apply(this, arguments));\n  }\n\n  return Container;\n}(_parchment2.default.Container);\n\nContainer.allowedChildren = [_block2.default, _block.BlockEmbed, Container];\n\nexports.default = Container;\n\n/***/ }),\n/* 24 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.ColorStyle = exports.ColorClass = exports.ColorAttributor = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ColorAttributor = function (_Parchment$Attributor) {\n  _inherits(ColorAttributor, _Parchment$Attributor);\n\n  function ColorAttributor() {\n    _classCallCheck(this, ColorAttributor);\n\n    return _possibleConstructorReturn(this, (ColorAttributor.__proto__ || Object.getPrototypeOf(ColorAttributor)).apply(this, arguments));\n  }\n\n  _createClass(ColorAttributor, [{\n    key: 'value',\n    value: function value(domNode) {\n      var value = _get(ColorAttributor.prototype.__proto__ || Object.getPrototypeOf(ColorAttributor.prototype), 'value', this).call(this, domNode);\n      if (!value.startsWith('rgb(')) return value;\n      value = value.replace(/^[^\\d]+/, '').replace(/[^\\d]+$/, '');\n      return '#' + value.split(',').map(function (component) {\n        return ('00' + parseInt(component).toString(16)).slice(-2);\n      }).join('');\n    }\n  }]);\n\n  return ColorAttributor;\n}(_parchment2.default.Attributor.Style);\n\nvar ColorClass = new _parchment2.default.Attributor.Class('color', 'ql-color', {\n  scope: _parchment2.default.Scope.INLINE\n});\nvar ColorStyle = new ColorAttributor('color', 'color', {\n  scope: _parchment2.default.Scope.INLINE\n});\n\nexports.ColorAttributor = ColorAttributor;\nexports.ColorClass = ColorClass;\nexports.ColorStyle = ColorStyle;\n\n/***/ }),\n/* 25 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.SHORTKEY = exports.default = undefined;\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _clone = __webpack_require__(21);\n\nvar _clone2 = _interopRequireDefault(_clone);\n\nvar _deepEqual = __webpack_require__(12);\n\nvar _deepEqual2 = _interopRequireDefault(_deepEqual);\n\nvar _extend = __webpack_require__(2);\n\nvar _extend2 = _interopRequireDefault(_extend);\n\nvar _quillDelta = __webpack_require__(4);\n\nvar _quillDelta2 = _interopRequireDefault(_quillDelta);\n\nvar _op = __webpack_require__(20);\n\nvar _op2 = _interopRequireDefault(_op);\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nvar _quill = __webpack_require__(6);\n\nvar _quill2 = _interopRequireDefault(_quill);\n\nvar _logger = __webpack_require__(10);\n\nvar _logger2 = _interopRequireDefault(_logger);\n\nvar _module = __webpack_require__(7);\n\nvar _module2 = _interopRequireDefault(_module);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar debug = (0, _logger2.default)('quill:keyboard');\n\nvar SHORTKEY = /Mac/i.test(navigator.platform) ? 'metaKey' : 'ctrlKey';\n\nvar Keyboard = function (_Module) {\n  _inherits(Keyboard, _Module);\n\n  _createClass(Keyboard, null, [{\n    key: 'match',\n    value: function match(evt, binding) {\n      binding = normalize(binding);\n      if (['altKey', 'ctrlKey', 'metaKey', 'shiftKey'].some(function (key) {\n        return !!binding[key] !== evt[key] && binding[key] !== null;\n      })) {\n        return false;\n      }\n      return binding.key === (evt.which || evt.keyCode);\n    }\n  }]);\n\n  function Keyboard(quill, options) {\n    _classCallCheck(this, Keyboard);\n\n    var _this = _possibleConstructorReturn(this, (Keyboard.__proto__ || Object.getPrototypeOf(Keyboard)).call(this, quill, options));\n\n    _this.bindings = {};\n    Object.keys(_this.options.bindings).forEach(function (name) {\n      if (name === 'list autofill' && quill.scroll.whitelist != null && !quill.scroll.whitelist['list']) {\n        return;\n      }\n      if (_this.options.bindings[name]) {\n        _this.addBinding(_this.options.bindings[name]);\n      }\n    });\n    _this.addBinding({ key: Keyboard.keys.ENTER, shiftKey: null }, handleEnter);\n    _this.addBinding({ key: Keyboard.keys.ENTER, metaKey: null, ctrlKey: null, altKey: null }, function () {});\n    if (/Firefox/i.test(navigator.userAgent)) {\n      // Need to handle delete and backspace for Firefox in the general case #1171\n      _this.addBinding({ key: Keyboard.keys.BACKSPACE }, { collapsed: true }, handleBackspace);\n      _this.addBinding({ key: Keyboard.keys.DELETE }, { collapsed: true }, handleDelete);\n    } else {\n      _this.addBinding({ key: Keyboard.keys.BACKSPACE }, { collapsed: true, prefix: /^.?$/ }, handleBackspace);\n      _this.addBinding({ key: Keyboard.keys.DELETE }, { collapsed: true, suffix: /^.?$/ }, handleDelete);\n    }\n    _this.addBinding({ key: Keyboard.keys.BACKSPACE }, { collapsed: false }, handleDeleteRange);\n    _this.addBinding({ key: Keyboard.keys.DELETE }, { collapsed: false }, handleDeleteRange);\n    _this.addBinding({ key: Keyboard.keys.BACKSPACE, altKey: null, ctrlKey: null, metaKey: null, shiftKey: null }, { collapsed: true, offset: 0 }, handleBackspace);\n    _this.listen();\n    return _this;\n  }\n\n  _createClass(Keyboard, [{\n    key: 'addBinding',\n    value: function addBinding(key) {\n      var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      var handler = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n      var binding = normalize(key);\n      if (binding == null || binding.key == null) {\n        return debug.warn('Attempted to add invalid keyboard binding', binding);\n      }\n      if (typeof context === 'function') {\n        context = { handler: context };\n      }\n      if (typeof handler === 'function') {\n        handler = { handler: handler };\n      }\n      binding = (0, _extend2.default)(binding, context, handler);\n      this.bindings[binding.key] = this.bindings[binding.key] || [];\n      this.bindings[binding.key].push(binding);\n    }\n  }, {\n    key: 'listen',\n    value: function listen() {\n      var _this2 = this;\n\n      this.quill.root.addEventListener('keydown', function (evt) {\n        if (evt.defaultPrevented) return;\n        var which = evt.which || evt.keyCode;\n        var bindings = (_this2.bindings[which] || []).filter(function (binding) {\n          return Keyboard.match(evt, binding);\n        });\n        if (bindings.length === 0) return;\n        var range = _this2.quill.getSelection();\n        if (range == null || !_this2.quill.hasFocus()) return;\n\n        var _quill$getLine = _this2.quill.getLine(range.index),\n            _quill$getLine2 = _slicedToArray(_quill$getLine, 2),\n            line = _quill$getLine2[0],\n            offset = _quill$getLine2[1];\n\n        var _quill$getLeaf = _this2.quill.getLeaf(range.index),\n            _quill$getLeaf2 = _slicedToArray(_quill$getLeaf, 2),\n            leafStart = _quill$getLeaf2[0],\n            offsetStart = _quill$getLeaf2[1];\n\n        var _ref = range.length === 0 ? [leafStart, offsetStart] : _this2.quill.getLeaf(range.index + range.length),\n            _ref2 = _slicedToArray(_ref, 2),\n            leafEnd = _ref2[0],\n            offsetEnd = _ref2[1];\n\n        var prefixText = leafStart instanceof _parchment2.default.Text ? leafStart.value().slice(0, offsetStart) : '';\n        var suffixText = leafEnd instanceof _parchment2.default.Text ? leafEnd.value().slice(offsetEnd) : '';\n        var curContext = {\n          collapsed: range.length === 0,\n          empty: range.length === 0 && line.length() <= 1,\n          format: _this2.quill.getFormat(range),\n          offset: offset,\n          prefix: prefixText,\n          suffix: suffixText\n        };\n        var prevented = bindings.some(function (binding) {\n          if (binding.collapsed != null && binding.collapsed !== curContext.collapsed) return false;\n          if (binding.empty != null && binding.empty !== curContext.empty) return false;\n          if (binding.offset != null && binding.offset !== curContext.offset) return false;\n          if (Array.isArray(binding.format)) {\n            // any format is present\n            if (binding.format.every(function (name) {\n              return curContext.format[name] == null;\n            })) {\n              return false;\n            }\n          } else if (_typeof(binding.format) === 'object') {\n            // all formats must match\n            if (!Object.keys(binding.format).every(function (name) {\n              if (binding.format[name] === true) return curContext.format[name] != null;\n              if (binding.format[name] === false) return curContext.format[name] == null;\n              return (0, _deepEqual2.default)(binding.format[name], curContext.format[name]);\n            })) {\n              return false;\n            }\n          }\n          if (binding.prefix != null && !binding.prefix.test(curContext.prefix)) return false;\n          if (binding.suffix != null && !binding.suffix.test(curContext.suffix)) return false;\n          return binding.handler.call(_this2, range, curContext) !== true;\n        });\n        if (prevented) {\n          evt.preventDefault();\n        }\n      });\n    }\n  }]);\n\n  return Keyboard;\n}(_module2.default);\n\nKeyboard.keys = {\n  BACKSPACE: 8,\n  TAB: 9,\n  ENTER: 13,\n  ESCAPE: 27,\n  LEFT: 37,\n  UP: 38,\n  RIGHT: 39,\n  DOWN: 40,\n  DELETE: 46\n};\n\nKeyboard.DEFAULTS = {\n  bindings: {\n    'bold': makeFormatHandler('bold'),\n    'italic': makeFormatHandler('italic'),\n    'underline': makeFormatHandler('underline'),\n    'indent': {\n      // highlight tab or tab at beginning of list, indent or blockquote\n      key: Keyboard.keys.TAB,\n      format: ['blockquote', 'indent', 'list'],\n      handler: function handler(range, context) {\n        if (context.collapsed && context.offset !== 0) return true;\n        this.quill.format('indent', '+1', _quill2.default.sources.USER);\n      }\n    },\n    'outdent': {\n      key: Keyboard.keys.TAB,\n      shiftKey: true,\n      format: ['blockquote', 'indent', 'list'],\n      // highlight tab or tab at beginning of list, indent or blockquote\n      handler: function handler(range, context) {\n        if (context.collapsed && context.offset !== 0) return true;\n        this.quill.format('indent', '-1', _quill2.default.sources.USER);\n      }\n    },\n    'outdent backspace': {\n      key: Keyboard.keys.BACKSPACE,\n      collapsed: true,\n      shiftKey: null,\n      metaKey: null,\n      ctrlKey: null,\n      altKey: null,\n      format: ['indent', 'list'],\n      offset: 0,\n      handler: function handler(range, context) {\n        if (context.format.indent != null) {\n          this.quill.format('indent', '-1', _quill2.default.sources.USER);\n        } else if (context.format.list != null) {\n          this.quill.format('list', false, _quill2.default.sources.USER);\n        }\n      }\n    },\n    'indent code-block': makeCodeBlockHandler(true),\n    'outdent code-block': makeCodeBlockHandler(false),\n    'remove tab': {\n      key: Keyboard.keys.TAB,\n      shiftKey: true,\n      collapsed: true,\n      prefix: /\\t$/,\n      handler: function handler(range) {\n        this.quill.deleteText(range.index - 1, 1, _quill2.default.sources.USER);\n      }\n    },\n    'tab': {\n      key: Keyboard.keys.TAB,\n      handler: function handler(range) {\n        this.quill.history.cutoff();\n        var delta = new _quillDelta2.default().retain(range.index).delete(range.length).insert('\\t');\n        this.quill.updateContents(delta, _quill2.default.sources.USER);\n        this.quill.history.cutoff();\n        this.quill.setSelection(range.index + 1, _quill2.default.sources.SILENT);\n      }\n    },\n    'list empty enter': {\n      key: Keyboard.keys.ENTER,\n      collapsed: true,\n      format: ['list'],\n      empty: true,\n      handler: function handler(range, context) {\n        this.quill.format('list', false, _quill2.default.sources.USER);\n        if (context.format.indent) {\n          this.quill.format('indent', false, _quill2.default.sources.USER);\n        }\n      }\n    },\n    'checklist enter': {\n      key: Keyboard.keys.ENTER,\n      collapsed: true,\n      format: { list: 'checked' },\n      handler: function handler(range) {\n        var _quill$getLine3 = this.quill.getLine(range.index),\n            _quill$getLine4 = _slicedToArray(_quill$getLine3, 2),\n            line = _quill$getLine4[0],\n            offset = _quill$getLine4[1];\n\n        var formats = (0, _extend2.default)({}, line.formats(), { list: 'checked' });\n        var delta = new _quillDelta2.default().retain(range.index).insert('\\n', formats).retain(line.length() - offset - 1).retain(1, { list: 'unchecked' });\n        this.quill.updateContents(delta, _quill2.default.sources.USER);\n        this.quill.setSelection(range.index + 1, _quill2.default.sources.SILENT);\n        this.quill.scrollIntoView();\n      }\n    },\n    'header enter': {\n      key: Keyboard.keys.ENTER,\n      collapsed: true,\n      format: ['header'],\n      suffix: /^$/,\n      handler: function handler(range, context) {\n        var _quill$getLine5 = this.quill.getLine(range.index),\n            _quill$getLine6 = _slicedToArray(_quill$getLine5, 2),\n            line = _quill$getLine6[0],\n            offset = _quill$getLine6[1];\n\n        var delta = new _quillDelta2.default().retain(range.index).insert('\\n', context.format).retain(line.length() - offset - 1).retain(1, { header: null });\n        this.quill.updateContents(delta, _quill2.default.sources.USER);\n        this.quill.setSelection(range.index + 1, _quill2.default.sources.SILENT);\n        this.quill.scrollIntoView();\n      }\n    },\n    'list autofill': {\n      key: ' ',\n      collapsed: true,\n      format: { list: false },\n      prefix: /^\\s*?(\\d+\\.|-|\\*|\\[ ?\\]|\\[x\\])$/,\n      handler: function handler(range, context) {\n        var length = context.prefix.length;\n\n        var _quill$getLine7 = this.quill.getLine(range.index),\n            _quill$getLine8 = _slicedToArray(_quill$getLine7, 2),\n            line = _quill$getLine8[0],\n            offset = _quill$getLine8[1];\n\n        if (offset > length) return true;\n        var value = void 0;\n        switch (context.prefix.trim()) {\n          case '[]':case '[ ]':\n            value = 'unchecked';\n            break;\n          case '[x]':\n            value = 'checked';\n            break;\n          case '-':case '*':\n            value = 'bullet';\n            break;\n          default:\n            value = 'ordered';\n        }\n        this.quill.insertText(range.index, ' ', _quill2.default.sources.USER);\n        this.quill.history.cutoff();\n        var delta = new _quillDelta2.default().retain(range.index - offset).delete(length + 1).retain(line.length() - 2 - offset).retain(1, { list: value });\n        this.quill.updateContents(delta, _quill2.default.sources.USER);\n        this.quill.history.cutoff();\n        this.quill.setSelection(range.index - length, _quill2.default.sources.SILENT);\n      }\n    },\n    'code exit': {\n      key: Keyboard.keys.ENTER,\n      collapsed: true,\n      format: ['code-block'],\n      prefix: /\\n\\n$/,\n      suffix: /^\\s+$/,\n      handler: function handler(range) {\n        var _quill$getLine9 = this.quill.getLine(range.index),\n            _quill$getLine10 = _slicedToArray(_quill$getLine9, 2),\n            line = _quill$getLine10[0],\n            offset = _quill$getLine10[1];\n\n        var delta = new _quillDelta2.default().retain(range.index + line.length() - offset - 2).retain(1, { 'code-block': null }).delete(1);\n        this.quill.updateContents(delta, _quill2.default.sources.USER);\n      }\n    },\n    'embed left': makeEmbedArrowHandler(Keyboard.keys.LEFT, false),\n    'embed left shift': makeEmbedArrowHandler(Keyboard.keys.LEFT, true),\n    'embed right': makeEmbedArrowHandler(Keyboard.keys.RIGHT, false),\n    'embed right shift': makeEmbedArrowHandler(Keyboard.keys.RIGHT, true)\n  }\n};\n\nfunction makeEmbedArrowHandler(key, shiftKey) {\n  var _ref3;\n\n  var where = key === Keyboard.keys.LEFT ? 'prefix' : 'suffix';\n  return _ref3 = {\n    key: key,\n    shiftKey: shiftKey,\n    altKey: null\n  }, _defineProperty(_ref3, where, /^$/), _defineProperty(_ref3, 'handler', function handler(range) {\n    var index = range.index;\n    if (key === Keyboard.keys.RIGHT) {\n      index += range.length + 1;\n    }\n\n    var _quill$getLeaf3 = this.quill.getLeaf(index),\n        _quill$getLeaf4 = _slicedToArray(_quill$getLeaf3, 1),\n        leaf = _quill$getLeaf4[0];\n\n    if (!(leaf instanceof _parchment2.default.Embed)) return true;\n    if (key === Keyboard.keys.LEFT) {\n      if (shiftKey) {\n        this.quill.setSelection(range.index - 1, range.length + 1, _quill2.default.sources.USER);\n      } else {\n        this.quill.setSelection(range.index - 1, _quill2.default.sources.USER);\n      }\n    } else {\n      if (shiftKey) {\n        this.quill.setSelection(range.index, range.length + 1, _quill2.default.sources.USER);\n      } else {\n        this.quill.setSelection(range.index + range.length + 1, _quill2.default.sources.USER);\n      }\n    }\n    return false;\n  }), _ref3;\n}\n\nfunction handleBackspace(range, context) {\n  if (range.index === 0 || this.quill.getLength() <= 1) return;\n\n  var _quill$getLine11 = this.quill.getLine(range.index),\n      _quill$getLine12 = _slicedToArray(_quill$getLine11, 1),\n      line = _quill$getLine12[0];\n\n  var formats = {};\n  if (context.offset === 0) {\n    var _quill$getLine13 = this.quill.getLine(range.index - 1),\n        _quill$getLine14 = _slicedToArray(_quill$getLine13, 1),\n        prev = _quill$getLine14[0];\n\n    if (prev != null && prev.length() > 1) {\n      var curFormats = line.formats();\n      var prevFormats = this.quill.getFormat(range.index - 1, 1);\n      formats = _op2.default.attributes.diff(curFormats, prevFormats) || {};\n    }\n  }\n  // Check for astral symbols\n  var length = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]$/.test(context.prefix) ? 2 : 1;\n  this.quill.deleteText(range.index - length, length, _quill2.default.sources.USER);\n  if (Object.keys(formats).length > 0) {\n    this.quill.formatLine(range.index - length, length, formats, _quill2.default.sources.USER);\n  }\n  this.quill.focus();\n}\n\nfunction handleDelete(range, context) {\n  // Check for astral symbols\n  var length = /^[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/.test(context.suffix) ? 2 : 1;\n  if (range.index >= this.quill.getLength() - length) return;\n  var formats = {},\n      nextLength = 0;\n\n  var _quill$getLine15 = this.quill.getLine(range.index),\n      _quill$getLine16 = _slicedToArray(_quill$getLine15, 1),\n      line = _quill$getLine16[0];\n\n  if (context.offset >= line.length() - 1) {\n    var _quill$getLine17 = this.quill.getLine(range.index + 1),\n        _quill$getLine18 = _slicedToArray(_quill$getLine17, 1),\n        next = _quill$getLine18[0];\n\n    if (next) {\n      var curFormats = line.formats();\n      var nextFormats = this.quill.getFormat(range.index, 1);\n      formats = _op2.default.attributes.diff(curFormats, nextFormats) || {};\n      nextLength = next.length();\n    }\n  }\n  this.quill.deleteText(range.index, length, _quill2.default.sources.USER);\n  if (Object.keys(formats).length > 0) {\n    this.quill.formatLine(range.index + nextLength - 1, length, formats, _quill2.default.sources.USER);\n  }\n}\n\nfunction handleDeleteRange(range) {\n  var lines = this.quill.getLines(range);\n  var formats = {};\n  if (lines.length > 1) {\n    var firstFormats = lines[0].formats();\n    var lastFormats = lines[lines.length - 1].formats();\n    formats = _op2.default.attributes.diff(lastFormats, firstFormats) || {};\n  }\n  this.quill.deleteText(range, _quill2.default.sources.USER);\n  if (Object.keys(formats).length > 0) {\n    this.quill.formatLine(range.index, 1, formats, _quill2.default.sources.USER);\n  }\n  this.quill.setSelection(range.index, _quill2.default.sources.SILENT);\n  this.quill.focus();\n}\n\nfunction handleEnter(range, context) {\n  var _this3 = this;\n\n  if (range.length > 0) {\n    this.quill.scroll.deleteAt(range.index, range.length); // So we do not trigger text-change\n  }\n  var lineFormats = Object.keys(context.format).reduce(function (lineFormats, format) {\n    if (_parchment2.default.query(format, _parchment2.default.Scope.BLOCK) && !Array.isArray(context.format[format])) {\n      lineFormats[format] = context.format[format];\n    }\n    return lineFormats;\n  }, {});\n  this.quill.insertText(range.index, '\\n', lineFormats, _quill2.default.sources.USER);\n  // Earlier scroll.deleteAt might have messed up our selection,\n  // so insertText's built in selection preservation is not reliable\n  this.quill.setSelection(range.index + 1, _quill2.default.sources.SILENT);\n  this.quill.focus();\n  Object.keys(context.format).forEach(function (name) {\n    if (lineFormats[name] != null) return;\n    if (Array.isArray(context.format[name])) return;\n    if (name === 'link') return;\n    _this3.quill.format(name, context.format[name], _quill2.default.sources.USER);\n  });\n}\n\nfunction makeCodeBlockHandler(indent) {\n  return {\n    key: Keyboard.keys.TAB,\n    shiftKey: !indent,\n    format: { 'code-block': true },\n    handler: function handler(range) {\n      var CodeBlock = _parchment2.default.query('code-block');\n      var index = range.index,\n          length = range.length;\n\n      var _quill$scroll$descend = this.quill.scroll.descendant(CodeBlock, index),\n          _quill$scroll$descend2 = _slicedToArray(_quill$scroll$descend, 2),\n          block = _quill$scroll$descend2[0],\n          offset = _quill$scroll$descend2[1];\n\n      if (block == null) return;\n      var scrollIndex = this.quill.getIndex(block);\n      var start = block.newlineIndex(offset, true) + 1;\n      var end = block.newlineIndex(scrollIndex + offset + length);\n      var lines = block.domNode.textContent.slice(start, end).split('\\n');\n      offset = 0;\n      lines.forEach(function (line, i) {\n        if (indent) {\n          block.insertAt(start + offset, CodeBlock.TAB);\n          offset += CodeBlock.TAB.length;\n          if (i === 0) {\n            index += CodeBlock.TAB.length;\n          } else {\n            length += CodeBlock.TAB.length;\n          }\n        } else if (line.startsWith(CodeBlock.TAB)) {\n          block.deleteAt(start + offset, CodeBlock.TAB.length);\n          offset -= CodeBlock.TAB.length;\n          if (i === 0) {\n            index -= CodeBlock.TAB.length;\n          } else {\n            length -= CodeBlock.TAB.length;\n          }\n        }\n        offset += line.length + 1;\n      });\n      this.quill.update(_quill2.default.sources.USER);\n      this.quill.setSelection(index, length, _quill2.default.sources.SILENT);\n    }\n  };\n}\n\nfunction makeFormatHandler(format) {\n  return {\n    key: format[0].toUpperCase(),\n    shortKey: true,\n    handler: function handler(range, context) {\n      this.quill.format(format, !context.format[format], _quill2.default.sources.USER);\n    }\n  };\n}\n\nfunction normalize(binding) {\n  if (typeof binding === 'string' || typeof binding === 'number') {\n    return normalize({ key: binding });\n  }\n  if ((typeof binding === 'undefined' ? 'undefined' : _typeof(binding)) === 'object') {\n    binding = (0, _clone2.default)(binding, false);\n  }\n  if (typeof binding.key === 'string') {\n    if (Keyboard.keys[binding.key.toUpperCase()] != null) {\n      binding.key = Keyboard.keys[binding.key.toUpperCase()];\n    } else if (binding.key.length === 1) {\n      binding.key = binding.key.toUpperCase().charCodeAt(0);\n    } else {\n      return null;\n    }\n  }\n  if (binding.shortKey) {\n    binding[SHORTKEY] = binding.shortKey;\n    delete binding.shortKey;\n  }\n  return binding;\n}\n\nexports.default = Keyboard;\nexports.SHORTKEY = SHORTKEY;\n\n/***/ }),\n/* 26 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nmodule.exports = {\n  'align': {\n    '': __webpack_require__(75),\n    'center': __webpack_require__(76),\n    'right': __webpack_require__(77),\n    'justify': __webpack_require__(78)\n  },\n  'background': __webpack_require__(79),\n  'blockquote': __webpack_require__(80),\n  'bold': __webpack_require__(81),\n  'clean': __webpack_require__(82),\n  'code': __webpack_require__(40),\n  'code-block': __webpack_require__(40),\n  'color': __webpack_require__(83),\n  'direction': {\n    '': __webpack_require__(84),\n    'rtl': __webpack_require__(85)\n  },\n  'float': {\n    'center': __webpack_require__(86),\n    'full': __webpack_require__(87),\n    'left': __webpack_require__(88),\n    'right': __webpack_require__(89)\n  },\n  'formula': __webpack_require__(90),\n  'header': {\n    '1': __webpack_require__(91),\n    '2': __webpack_require__(92)\n  },\n  'italic': __webpack_require__(93),\n  'image': __webpack_require__(94),\n  'indent': {\n    '+1': __webpack_require__(95),\n    '-1': __webpack_require__(96)\n  },\n  'link': __webpack_require__(97),\n  'list': {\n    'ordered': __webpack_require__(98),\n    'bullet': __webpack_require__(99),\n    'check': __webpack_require__(100)\n  },\n  'script': {\n    'sub': __webpack_require__(101),\n    'super': __webpack_require__(102)\n  },\n  'strike': __webpack_require__(103),\n  'underline': __webpack_require__(104),\n  'video': __webpack_require__(105)\n};\n\n/***/ }),\n/* 27 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Registry = __webpack_require__(1);\nvar ShadowBlot = /** @class */ (function () {\n    function ShadowBlot(domNode) {\n        this.domNode = domNode;\n        // @ts-ignore\n        this.domNode[Registry.DATA_KEY] = { blot: this };\n    }\n    Object.defineProperty(ShadowBlot.prototype, \"statics\", {\n        // Hack for accessing inherited static methods\n        get: function () {\n            return this.constructor;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    ShadowBlot.create = function (value) {\n        if (this.tagName == null) {\n            throw new Registry.ParchmentError('Blot definition missing tagName');\n        }\n        var node;\n        if (Array.isArray(this.tagName)) {\n            if (typeof value === 'string') {\n                value = value.toUpperCase();\n                if (parseInt(value).toString() === value) {\n                    value = parseInt(value);\n                }\n            }\n            if (typeof value === 'number') {\n                node = document.createElement(this.tagName[value - 1]);\n            }\n            else if (this.tagName.indexOf(value) > -1) {\n                node = document.createElement(value);\n            }\n            else {\n                node = document.createElement(this.tagName[0]);\n            }\n        }\n        else {\n            node = document.createElement(this.tagName);\n        }\n        if (this.className) {\n            node.classList.add(this.className);\n        }\n        return node;\n    };\n    ShadowBlot.prototype.attach = function () {\n        if (this.parent != null) {\n            this.scroll = this.parent.scroll;\n        }\n    };\n    ShadowBlot.prototype.clone = function () {\n        var domNode = this.domNode.cloneNode(false);\n        return Registry.create(domNode);\n    };\n    ShadowBlot.prototype.detach = function () {\n        if (this.parent != null)\n            this.parent.removeChild(this);\n        // @ts-ignore\n        delete this.domNode[Registry.DATA_KEY];\n    };\n    ShadowBlot.prototype.deleteAt = function (index, length) {\n        var blot = this.isolate(index, length);\n        blot.remove();\n    };\n    ShadowBlot.prototype.formatAt = function (index, length, name, value) {\n        var blot = this.isolate(index, length);\n        if (Registry.query(name, Registry.Scope.BLOT) != null && value) {\n            blot.wrap(name, value);\n        }\n        else if (Registry.query(name, Registry.Scope.ATTRIBUTE) != null) {\n            var parent = Registry.create(this.statics.scope);\n            blot.wrap(parent);\n            parent.format(name, value);\n        }\n    };\n    ShadowBlot.prototype.insertAt = function (index, value, def) {\n        var blot = def == null ? Registry.create('text', value) : Registry.create(value, def);\n        var ref = this.split(index);\n        this.parent.insertBefore(blot, ref);\n    };\n    ShadowBlot.prototype.insertInto = function (parentBlot, refBlot) {\n        if (refBlot === void 0) { refBlot = null; }\n        if (this.parent != null) {\n            this.parent.children.remove(this);\n        }\n        var refDomNode = null;\n        parentBlot.children.insertBefore(this, refBlot);\n        if (refBlot != null) {\n            refDomNode = refBlot.domNode;\n        }\n        if (this.domNode.parentNode != parentBlot.domNode ||\n            this.domNode.nextSibling != refDomNode) {\n            parentBlot.domNode.insertBefore(this.domNode, refDomNode);\n        }\n        this.parent = parentBlot;\n        this.attach();\n    };\n    ShadowBlot.prototype.isolate = function (index, length) {\n        var target = this.split(index);\n        target.split(length);\n        return target;\n    };\n    ShadowBlot.prototype.length = function () {\n        return 1;\n    };\n    ShadowBlot.prototype.offset = function (root) {\n        if (root === void 0) { root = this.parent; }\n        if (this.parent == null || this == root)\n            return 0;\n        return this.parent.children.offset(this) + this.parent.offset(root);\n    };\n    ShadowBlot.prototype.optimize = function (context) {\n        // TODO clean up once we use WeakMap\n        // @ts-ignore\n        if (this.domNode[Registry.DATA_KEY] != null) {\n            // @ts-ignore\n            delete this.domNode[Registry.DATA_KEY].mutations;\n        }\n    };\n    ShadowBlot.prototype.remove = function () {\n        if (this.domNode.parentNode != null) {\n            this.domNode.parentNode.removeChild(this.domNode);\n        }\n        this.detach();\n    };\n    ShadowBlot.prototype.replace = function (target) {\n        if (target.parent == null)\n            return;\n        target.parent.insertBefore(this, target.next);\n        target.remove();\n    };\n    ShadowBlot.prototype.replaceWith = function (name, value) {\n        var replacement = typeof name === 'string' ? Registry.create(name, value) : name;\n        replacement.replace(this);\n        return replacement;\n    };\n    ShadowBlot.prototype.split = function (index, force) {\n        return index === 0 ? this : this.next;\n    };\n    ShadowBlot.prototype.update = function (mutations, context) {\n        // Nothing to do by default\n    };\n    ShadowBlot.prototype.wrap = function (name, value) {\n        var wrapper = typeof name === 'string' ? Registry.create(name, value) : name;\n        if (this.parent != null) {\n            this.parent.insertBefore(wrapper, this.next);\n        }\n        wrapper.appendChild(this);\n        return wrapper;\n    };\n    ShadowBlot.blotName = 'abstract';\n    return ShadowBlot;\n}());\nexports.default = ShadowBlot;\n\n\n/***/ }),\n/* 28 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar attributor_1 = __webpack_require__(11);\nvar class_1 = __webpack_require__(29);\nvar style_1 = __webpack_require__(30);\nvar Registry = __webpack_require__(1);\nvar AttributorStore = /** @class */ (function () {\n    function AttributorStore(domNode) {\n        this.attributes = {};\n        this.domNode = domNode;\n        this.build();\n    }\n    AttributorStore.prototype.attribute = function (attribute, value) {\n        // verb\n        if (value) {\n            if (attribute.add(this.domNode, value)) {\n                if (attribute.value(this.domNode) != null) {\n                    this.attributes[attribute.attrName] = attribute;\n                }\n                else {\n                    delete this.attributes[attribute.attrName];\n                }\n            }\n        }\n        else {\n            attribute.remove(this.domNode);\n            delete this.attributes[attribute.attrName];\n        }\n    };\n    AttributorStore.prototype.build = function () {\n        var _this = this;\n        this.attributes = {};\n        var attributes = attributor_1.default.keys(this.domNode);\n        var classes = class_1.default.keys(this.domNode);\n        var styles = style_1.default.keys(this.domNode);\n        attributes\n            .concat(classes)\n            .concat(styles)\n            .forEach(function (name) {\n            var attr = Registry.query(name, Registry.Scope.ATTRIBUTE);\n            if (attr instanceof attributor_1.default) {\n                _this.attributes[attr.attrName] = attr;\n            }\n        });\n    };\n    AttributorStore.prototype.copy = function (target) {\n        var _this = this;\n        Object.keys(this.attributes).forEach(function (key) {\n            var value = _this.attributes[key].value(_this.domNode);\n            target.format(key, value);\n        });\n    };\n    AttributorStore.prototype.move = function (target) {\n        var _this = this;\n        this.copy(target);\n        Object.keys(this.attributes).forEach(function (key) {\n            _this.attributes[key].remove(_this.domNode);\n        });\n        this.attributes = {};\n    };\n    AttributorStore.prototype.values = function () {\n        var _this = this;\n        return Object.keys(this.attributes).reduce(function (attributes, name) {\n            attributes[name] = _this.attributes[name].value(_this.domNode);\n            return attributes;\n        }, {});\n    };\n    return AttributorStore;\n}());\nexports.default = AttributorStore;\n\n\n/***/ }),\n/* 29 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar attributor_1 = __webpack_require__(11);\nfunction match(node, prefix) {\n    var className = node.getAttribute('class') || '';\n    return className.split(/\\s+/).filter(function (name) {\n        return name.indexOf(prefix + \"-\") === 0;\n    });\n}\nvar ClassAttributor = /** @class */ (function (_super) {\n    __extends(ClassAttributor, _super);\n    function ClassAttributor() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    ClassAttributor.keys = function (node) {\n        return (node.getAttribute('class') || '').split(/\\s+/).map(function (name) {\n            return name\n                .split('-')\n                .slice(0, -1)\n                .join('-');\n        });\n    };\n    ClassAttributor.prototype.add = function (node, value) {\n        if (!this.canAdd(node, value))\n            return false;\n        this.remove(node);\n        node.classList.add(this.keyName + \"-\" + value);\n        return true;\n    };\n    ClassAttributor.prototype.remove = function (node) {\n        var matches = match(node, this.keyName);\n        matches.forEach(function (name) {\n            node.classList.remove(name);\n        });\n        if (node.classList.length === 0) {\n            node.removeAttribute('class');\n        }\n    };\n    ClassAttributor.prototype.value = function (node) {\n        var result = match(node, this.keyName)[0] || '';\n        var value = result.slice(this.keyName.length + 1); // +1 for hyphen\n        return this.canAdd(node, value) ? value : '';\n    };\n    return ClassAttributor;\n}(attributor_1.default));\nexports.default = ClassAttributor;\n\n\n/***/ }),\n/* 30 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar attributor_1 = __webpack_require__(11);\nfunction camelize(name) {\n    var parts = name.split('-');\n    var rest = parts\n        .slice(1)\n        .map(function (part) {\n        return part[0].toUpperCase() + part.slice(1);\n    })\n        .join('');\n    return parts[0] + rest;\n}\nvar StyleAttributor = /** @class */ (function (_super) {\n    __extends(StyleAttributor, _super);\n    function StyleAttributor() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    StyleAttributor.keys = function (node) {\n        return (node.getAttribute('style') || '').split(';').map(function (value) {\n            var arr = value.split(':');\n            return arr[0].trim();\n        });\n    };\n    StyleAttributor.prototype.add = function (node, value) {\n        if (!this.canAdd(node, value))\n            return false;\n        // @ts-ignore\n        node.style[camelize(this.keyName)] = value;\n        return true;\n    };\n    StyleAttributor.prototype.remove = function (node) {\n        // @ts-ignore\n        node.style[camelize(this.keyName)] = '';\n        if (!node.getAttribute('style')) {\n            node.removeAttribute('style');\n        }\n    };\n    StyleAttributor.prototype.value = function (node) {\n        // @ts-ignore\n        var value = node.style[camelize(this.keyName)];\n        return this.canAdd(node, value) ? value : '';\n    };\n    return StyleAttributor;\n}(attributor_1.default));\nexports.default = StyleAttributor;\n\n\n/***/ }),\n/* 31 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nvar _text = __webpack_require__(8);\n\nvar _text2 = _interopRequireDefault(_text);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Cursor = function (_Parchment$Embed) {\n  _inherits(Cursor, _Parchment$Embed);\n\n  _createClass(Cursor, null, [{\n    key: 'value',\n    value: function value() {\n      return undefined;\n    }\n  }]);\n\n  function Cursor(domNode, selection) {\n    _classCallCheck(this, Cursor);\n\n    var _this = _possibleConstructorReturn(this, (Cursor.__proto__ || Object.getPrototypeOf(Cursor)).call(this, domNode));\n\n    _this.selection = selection;\n    _this.textNode = document.createTextNode(Cursor.CONTENTS);\n    _this.domNode.appendChild(_this.textNode);\n    _this._length = 0;\n    return _this;\n  }\n\n  _createClass(Cursor, [{\n    key: 'detach',\n    value: function detach() {\n      // super.detach() will also clear domNode.__blot\n      if (this.parent != null) this.parent.removeChild(this);\n    }\n  }, {\n    key: 'format',\n    value: function format(name, value) {\n      if (this._length !== 0) {\n        return _get(Cursor.prototype.__proto__ || Object.getPrototypeOf(Cursor.prototype), 'format', this).call(this, name, value);\n      }\n      var target = this,\n          index = 0;\n      while (target != null && target.statics.scope !== _parchment2.default.Scope.BLOCK_BLOT) {\n        index += target.offset(target.parent);\n        target = target.parent;\n      }\n      if (target != null) {\n        this._length = Cursor.CONTENTS.length;\n        target.optimize();\n        target.formatAt(index, Cursor.CONTENTS.length, name, value);\n        this._length = 0;\n      }\n    }\n  }, {\n    key: 'index',\n    value: function index(node, offset) {\n      if (node === this.textNode) return 0;\n      return _get(Cursor.prototype.__proto__ || Object.getPrototypeOf(Cursor.prototype), 'index', this).call(this, node, offset);\n    }\n  }, {\n    key: 'length',\n    value: function length() {\n      return this._length;\n    }\n  }, {\n    key: 'position',\n    value: function position() {\n      return [this.textNode, this.textNode.data.length];\n    }\n  }, {\n    key: 'remove',\n    value: function remove() {\n      _get(Cursor.prototype.__proto__ || Object.getPrototypeOf(Cursor.prototype), 'remove', this).call(this);\n      this.parent = null;\n    }\n  }, {\n    key: 'restore',\n    value: function restore() {\n      if (this.selection.composing || this.parent == null) return;\n      var textNode = this.textNode;\n      var range = this.selection.getNativeRange();\n      var restoreText = void 0,\n          start = void 0,\n          end = void 0;\n      if (range != null && range.start.node === textNode && range.end.node === textNode) {\n        var _ref = [textNode, range.start.offset, range.end.offset];\n        restoreText = _ref[0];\n        start = _ref[1];\n        end = _ref[2];\n      }\n      // Link format will insert text outside of anchor tag\n      while (this.domNode.lastChild != null && this.domNode.lastChild !== this.textNode) {\n        this.domNode.parentNode.insertBefore(this.domNode.lastChild, this.domNode);\n      }\n      if (this.textNode.data !== Cursor.CONTENTS) {\n        var text = this.textNode.data.split(Cursor.CONTENTS).join('');\n        if (this.next instanceof _text2.default) {\n          restoreText = this.next.domNode;\n          this.next.insertAt(0, text);\n          this.textNode.data = Cursor.CONTENTS;\n        } else {\n          this.textNode.data = text;\n          this.parent.insertBefore(_parchment2.default.create(this.textNode), this);\n          this.textNode = document.createTextNode(Cursor.CONTENTS);\n          this.domNode.appendChild(this.textNode);\n        }\n      }\n      this.remove();\n      if (start != null) {\n        var _map = [start, end].map(function (offset) {\n          return Math.max(0, Math.min(restoreText.data.length, offset - 1));\n        });\n\n        var _map2 = _slicedToArray(_map, 2);\n\n        start = _map2[0];\n        end = _map2[1];\n\n        return {\n          startNode: restoreText,\n          startOffset: start,\n          endNode: restoreText,\n          endOffset: end\n        };\n      }\n    }\n  }, {\n    key: 'update',\n    value: function update(mutations, context) {\n      var _this2 = this;\n\n      if (mutations.some(function (mutation) {\n        return mutation.type === 'characterData' && mutation.target === _this2.textNode;\n      })) {\n        var range = this.restore();\n        if (range) context.range = range;\n      }\n    }\n  }, {\n    key: 'value',\n    value: function value() {\n      return '';\n    }\n  }]);\n\n  return Cursor;\n}(_parchment2.default.Embed);\n\nCursor.blotName = 'cursor';\nCursor.className = 'ql-cursor';\nCursor.tagName = 'span';\nCursor.CONTENTS = '\\uFEFF'; // Zero width no break space\n\n\nexports.default = Cursor;\n\n/***/ }),\n/* 32 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Theme = function () {\n  function Theme(quill, options) {\n    _classCallCheck(this, Theme);\n\n    this.quill = quill;\n    this.options = options;\n    this.modules = {};\n  }\n\n  _createClass(Theme, [{\n    key: 'init',\n    value: function init() {\n      var _this = this;\n\n      Object.keys(this.options.modules).forEach(function (name) {\n        if (_this.modules[name] == null) {\n          _this.addModule(name);\n        }\n      });\n    }\n  }, {\n    key: 'addModule',\n    value: function addModule(name) {\n      var moduleClass = this.quill.constructor.import('modules/' + name);\n      this.modules[name] = new moduleClass(this.quill, this.options.modules[name] || {});\n      return this.modules[name];\n    }\n  }]);\n\n  return Theme;\n}();\n\nTheme.DEFAULTS = {\n  modules: {}\n};\nTheme.themes = {\n  'default': Theme\n};\n\nexports.default = Theme;\n\n/***/ }),\n/* 33 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nvar _text = __webpack_require__(8);\n\nvar _text2 = _interopRequireDefault(_text);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar GUARD_TEXT = '\\uFEFF';\n\nvar Embed = function (_Parchment$Embed) {\n  _inherits(Embed, _Parchment$Embed);\n\n  function Embed(node) {\n    _classCallCheck(this, Embed);\n\n    var _this = _possibleConstructorReturn(this, (Embed.__proto__ || Object.getPrototypeOf(Embed)).call(this, node));\n\n    _this.contentNode = document.createElement('span');\n    _this.contentNode.setAttribute('contenteditable', false);\n    [].slice.call(_this.domNode.childNodes).forEach(function (childNode) {\n      _this.contentNode.appendChild(childNode);\n    });\n    _this.leftGuard = document.createTextNode(GUARD_TEXT);\n    _this.rightGuard = document.createTextNode(GUARD_TEXT);\n    _this.domNode.appendChild(_this.leftGuard);\n    _this.domNode.appendChild(_this.contentNode);\n    _this.domNode.appendChild(_this.rightGuard);\n    return _this;\n  }\n\n  _createClass(Embed, [{\n    key: 'index',\n    value: function index(node, offset) {\n      if (node === this.leftGuard) return 0;\n      if (node === this.rightGuard) return 1;\n      return _get(Embed.prototype.__proto__ || Object.getPrototypeOf(Embed.prototype), 'index', this).call(this, node, offset);\n    }\n  }, {\n    key: 'restore',\n    value: function restore(node) {\n      var range = void 0,\n          textNode = void 0;\n      var text = node.data.split(GUARD_TEXT).join('');\n      if (node === this.leftGuard) {\n        if (this.prev instanceof _text2.default) {\n          var prevLength = this.prev.length();\n          this.prev.insertAt(prevLength, text);\n          range = {\n            startNode: this.prev.domNode,\n            startOffset: prevLength + text.length\n          };\n        } else {\n          textNode = document.createTextNode(text);\n          this.parent.insertBefore(_parchment2.default.create(textNode), this);\n          range = {\n            startNode: textNode,\n            startOffset: text.length\n          };\n        }\n      } else if (node === this.rightGuard) {\n        if (this.next instanceof _text2.default) {\n          this.next.insertAt(0, text);\n          range = {\n            startNode: this.next.domNode,\n            startOffset: text.length\n          };\n        } else {\n          textNode = document.createTextNode(text);\n          this.parent.insertBefore(_parchment2.default.create(textNode), this.next);\n          range = {\n            startNode: textNode,\n            startOffset: text.length\n          };\n        }\n      }\n      node.data = GUARD_TEXT;\n      return range;\n    }\n  }, {\n    key: 'update',\n    value: function update(mutations, context) {\n      var _this2 = this;\n\n      mutations.forEach(function (mutation) {\n        if (mutation.type === 'characterData' && (mutation.target === _this2.leftGuard || mutation.target === _this2.rightGuard)) {\n          var range = _this2.restore(mutation.target);\n          if (range) context.range = range;\n        }\n      });\n    }\n  }]);\n\n  return Embed;\n}(_parchment2.default.Embed);\n\nexports.default = Embed;\n\n/***/ }),\n/* 34 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.AlignStyle = exports.AlignClass = exports.AlignAttribute = undefined;\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar config = {\n  scope: _parchment2.default.Scope.BLOCK,\n  whitelist: ['right', 'center', 'justify']\n};\n\nvar AlignAttribute = new _parchment2.default.Attributor.Attribute('align', 'align', config);\nvar AlignClass = new _parchment2.default.Attributor.Class('align', 'ql-align', config);\nvar AlignStyle = new _parchment2.default.Attributor.Style('align', 'text-align', config);\n\nexports.AlignAttribute = AlignAttribute;\nexports.AlignClass = AlignClass;\nexports.AlignStyle = AlignStyle;\n\n/***/ }),\n/* 35 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.BackgroundStyle = exports.BackgroundClass = undefined;\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nvar _color = __webpack_require__(24);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar BackgroundClass = new _parchment2.default.Attributor.Class('background', 'ql-bg', {\n  scope: _parchment2.default.Scope.INLINE\n});\nvar BackgroundStyle = new _color.ColorAttributor('background', 'background-color', {\n  scope: _parchment2.default.Scope.INLINE\n});\n\nexports.BackgroundClass = BackgroundClass;\nexports.BackgroundStyle = BackgroundStyle;\n\n/***/ }),\n/* 36 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.DirectionStyle = exports.DirectionClass = exports.DirectionAttribute = undefined;\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar config = {\n  scope: _parchment2.default.Scope.BLOCK,\n  whitelist: ['rtl']\n};\n\nvar DirectionAttribute = new _parchment2.default.Attributor.Attribute('direction', 'dir', config);\nvar DirectionClass = new _parchment2.default.Attributor.Class('direction', 'ql-direction', config);\nvar DirectionStyle = new _parchment2.default.Attributor.Style('direction', 'direction', config);\n\nexports.DirectionAttribute = DirectionAttribute;\nexports.DirectionClass = DirectionClass;\nexports.DirectionStyle = DirectionStyle;\n\n/***/ }),\n/* 37 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.FontClass = exports.FontStyle = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar config = {\n  scope: _parchment2.default.Scope.INLINE,\n  whitelist: ['serif', 'monospace']\n};\n\nvar FontClass = new _parchment2.default.Attributor.Class('font', 'ql-font', config);\n\nvar FontStyleAttributor = function (_Parchment$Attributor) {\n  _inherits(FontStyleAttributor, _Parchment$Attributor);\n\n  function FontStyleAttributor() {\n    _classCallCheck(this, FontStyleAttributor);\n\n    return _possibleConstructorReturn(this, (FontStyleAttributor.__proto__ || Object.getPrototypeOf(FontStyleAttributor)).apply(this, arguments));\n  }\n\n  _createClass(FontStyleAttributor, [{\n    key: 'value',\n    value: function value(node) {\n      return _get(FontStyleAttributor.prototype.__proto__ || Object.getPrototypeOf(FontStyleAttributor.prototype), 'value', this).call(this, node).replace(/[\"']/g, '');\n    }\n  }]);\n\n  return FontStyleAttributor;\n}(_parchment2.default.Attributor.Style);\n\nvar FontStyle = new FontStyleAttributor('font', 'font-family', config);\n\nexports.FontStyle = FontStyle;\nexports.FontClass = FontClass;\n\n/***/ }),\n/* 38 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.SizeStyle = exports.SizeClass = undefined;\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar SizeClass = new _parchment2.default.Attributor.Class('size', 'ql-size', {\n  scope: _parchment2.default.Scope.INLINE,\n  whitelist: ['small', 'large', 'huge']\n});\nvar SizeStyle = new _parchment2.default.Attributor.Style('size', 'font-size', {\n  scope: _parchment2.default.Scope.INLINE,\n  whitelist: ['10px', '18px', '32px']\n});\n\nexports.SizeClass = SizeClass;\nexports.SizeStyle = SizeStyle;\n\n/***/ }),\n/* 39 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _inline = __webpack_require__(5);\n\nvar _inline2 = _interopRequireDefault(_inline);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Bold = function (_Inline) {\n  _inherits(Bold, _Inline);\n\n  function Bold() {\n    _classCallCheck(this, Bold);\n\n    return _possibleConstructorReturn(this, (Bold.__proto__ || Object.getPrototypeOf(Bold)).apply(this, arguments));\n  }\n\n  _createClass(Bold, [{\n    key: 'optimize',\n    value: function optimize(context) {\n      _get(Bold.prototype.__proto__ || Object.getPrototypeOf(Bold.prototype), 'optimize', this).call(this, context);\n      if (this.domNode.tagName !== this.statics.tagName[0]) {\n        this.replaceWith(this.statics.blotName);\n      }\n    }\n  }], [{\n    key: 'create',\n    value: function create() {\n      return _get(Bold.__proto__ || Object.getPrototypeOf(Bold), 'create', this).call(this);\n    }\n  }, {\n    key: 'formats',\n    value: function formats() {\n      return true;\n    }\n  }]);\n\n  return Bold;\n}(_inline2.default);\n\nBold.blotName = 'bold';\nBold.tagName = ['STRONG', 'B'];\n\nexports.default = Bold;\n\n/***/ }),\n/* 40 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <polyline class=\\\"ql-even ql-stroke\\\" points=\\\"5 7 3 9 5 11\\\"></polyline> <polyline class=\\\"ql-even ql-stroke\\\" points=\\\"13 7 15 9 13 11\\\"></polyline> <line class=ql-stroke x1=10 x2=8 y1=5 y2=13></line> </svg>\";\n\n/***/ }),\n/* 41 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _picker = __webpack_require__(16);\n\nvar _picker2 = _interopRequireDefault(_picker);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ColorPicker = function (_Picker) {\n  _inherits(ColorPicker, _Picker);\n\n  function ColorPicker(select, label) {\n    _classCallCheck(this, ColorPicker);\n\n    var _this = _possibleConstructorReturn(this, (ColorPicker.__proto__ || Object.getPrototypeOf(ColorPicker)).call(this, select));\n\n    _this.label.innerHTML = label;\n    _this.container.classList.add('ql-color-picker');\n    [].slice.call(_this.container.querySelectorAll('.ql-picker-item'), 0, 7).forEach(function (item) {\n      item.classList.add('ql-primary');\n    });\n    return _this;\n  }\n\n  _createClass(ColorPicker, [{\n    key: 'buildItem',\n    value: function buildItem(option) {\n      var item = _get(ColorPicker.prototype.__proto__ || Object.getPrototypeOf(ColorPicker.prototype), 'buildItem', this).call(this, option);\n      item.style.backgroundColor = option.getAttribute('value') || '';\n      return item;\n    }\n  }, {\n    key: 'selectItem',\n    value: function selectItem(item, trigger) {\n      _get(ColorPicker.prototype.__proto__ || Object.getPrototypeOf(ColorPicker.prototype), 'selectItem', this).call(this, item, trigger);\n      var colorLabel = this.label.querySelector('.ql-color-label');\n      var value = item ? item.getAttribute('data-value') || '' : '';\n      if (colorLabel) {\n        if (colorLabel.tagName === 'line') {\n          colorLabel.style.stroke = value;\n        } else {\n          colorLabel.style.fill = value;\n        }\n      }\n    }\n  }]);\n\n  return ColorPicker;\n}(_picker2.default);\n\nexports.default = ColorPicker;\n\n/***/ }),\n/* 42 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _picker = __webpack_require__(16);\n\nvar _picker2 = _interopRequireDefault(_picker);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar IconPicker = function (_Picker) {\n  _inherits(IconPicker, _Picker);\n\n  function IconPicker(select, icons) {\n    _classCallCheck(this, IconPicker);\n\n    var _this = _possibleConstructorReturn(this, (IconPicker.__proto__ || Object.getPrototypeOf(IconPicker)).call(this, select));\n\n    _this.container.classList.add('ql-icon-picker');\n    [].forEach.call(_this.container.querySelectorAll('.ql-picker-item'), function (item) {\n      item.innerHTML = icons[item.getAttribute('data-value') || ''];\n    });\n    _this.defaultItem = _this.container.querySelector('.ql-selected');\n    _this.selectItem(_this.defaultItem);\n    return _this;\n  }\n\n  _createClass(IconPicker, [{\n    key: 'selectItem',\n    value: function selectItem(item, trigger) {\n      _get(IconPicker.prototype.__proto__ || Object.getPrototypeOf(IconPicker.prototype), 'selectItem', this).call(this, item, trigger);\n      item = item || this.defaultItem;\n      this.label.innerHTML = item.innerHTML;\n    }\n  }]);\n\n  return IconPicker;\n}(_picker2.default);\n\nexports.default = IconPicker;\n\n/***/ }),\n/* 43 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Tooltip = function () {\n  function Tooltip(quill, boundsContainer) {\n    var _this = this;\n\n    _classCallCheck(this, Tooltip);\n\n    this.quill = quill;\n    this.boundsContainer = boundsContainer || document.body;\n    this.root = quill.addContainer('ql-tooltip');\n    this.root.innerHTML = this.constructor.TEMPLATE;\n    if (this.quill.root === this.quill.scrollingContainer) {\n      this.quill.root.addEventListener('scroll', function () {\n        _this.root.style.marginTop = -1 * _this.quill.root.scrollTop + 'px';\n      });\n    }\n    this.hide();\n  }\n\n  _createClass(Tooltip, [{\n    key: 'hide',\n    value: function hide() {\n      this.root.classList.add('ql-hidden');\n    }\n  }, {\n    key: 'position',\n    value: function position(reference) {\n      var left = reference.left + reference.width / 2 - this.root.offsetWidth / 2;\n      // root.scrollTop should be 0 if scrollContainer !== root\n      var top = reference.bottom + this.quill.root.scrollTop;\n      this.root.style.left = left + 'px';\n      this.root.style.top = top + 'px';\n      this.root.classList.remove('ql-flip');\n      var containerBounds = this.boundsContainer.getBoundingClientRect();\n      var rootBounds = this.root.getBoundingClientRect();\n      var shift = 0;\n      if (rootBounds.right > containerBounds.right) {\n        shift = containerBounds.right - rootBounds.right;\n        this.root.style.left = left + shift + 'px';\n      }\n      if (rootBounds.left < containerBounds.left) {\n        shift = containerBounds.left - rootBounds.left;\n        this.root.style.left = left + shift + 'px';\n      }\n      if (rootBounds.bottom > containerBounds.bottom) {\n        var height = rootBounds.bottom - rootBounds.top;\n        var verticalShift = reference.bottom - reference.top + height;\n        this.root.style.top = top - verticalShift + 'px';\n        this.root.classList.add('ql-flip');\n      }\n      return shift;\n    }\n  }, {\n    key: 'show',\n    value: function show() {\n      this.root.classList.remove('ql-editing');\n      this.root.classList.remove('ql-hidden');\n    }\n  }]);\n\n  return Tooltip;\n}();\n\nexports.default = Tooltip;\n\n/***/ }),\n/* 44 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = exports.BaseTooltip = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _extend = __webpack_require__(2);\n\nvar _extend2 = _interopRequireDefault(_extend);\n\nvar _quillDelta = __webpack_require__(4);\n\nvar _quillDelta2 = _interopRequireDefault(_quillDelta);\n\nvar _emitter = __webpack_require__(9);\n\nvar _emitter2 = _interopRequireDefault(_emitter);\n\nvar _keyboard = __webpack_require__(25);\n\nvar _keyboard2 = _interopRequireDefault(_keyboard);\n\nvar _theme = __webpack_require__(32);\n\nvar _theme2 = _interopRequireDefault(_theme);\n\nvar _colorPicker = __webpack_require__(41);\n\nvar _colorPicker2 = _interopRequireDefault(_colorPicker);\n\nvar _iconPicker = __webpack_require__(42);\n\nvar _iconPicker2 = _interopRequireDefault(_iconPicker);\n\nvar _picker = __webpack_require__(16);\n\nvar _picker2 = _interopRequireDefault(_picker);\n\nvar _tooltip = __webpack_require__(43);\n\nvar _tooltip2 = _interopRequireDefault(_tooltip);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ALIGNS = [false, 'center', 'right', 'justify'];\n\nvar COLORS = [\"#000000\", \"#e60000\", \"#ff9900\", \"#ffff00\", \"#008a00\", \"#0066cc\", \"#9933ff\", \"#ffffff\", \"#facccc\", \"#ffebcc\", \"#ffffcc\", \"#cce8cc\", \"#cce0f5\", \"#ebd6ff\", \"#bbbbbb\", \"#f06666\", \"#ffc266\", \"#ffff66\", \"#66b966\", \"#66a3e0\", \"#c285ff\", \"#888888\", \"#a10000\", \"#b26b00\", \"#b2b200\", \"#006100\", \"#0047b2\", \"#6b24b2\", \"#444444\", \"#5c0000\", \"#663d00\", \"#666600\", \"#003700\", \"#002966\", \"#3d1466\"];\n\nvar FONTS = [false, 'serif', 'monospace'];\n\nvar HEADERS = ['1', '2', '3', false];\n\nvar SIZES = ['small', false, 'large', 'huge'];\n\nvar BaseTheme = function (_Theme) {\n  _inherits(BaseTheme, _Theme);\n\n  function BaseTheme(quill, options) {\n    _classCallCheck(this, BaseTheme);\n\n    var _this = _possibleConstructorReturn(this, (BaseTheme.__proto__ || Object.getPrototypeOf(BaseTheme)).call(this, quill, options));\n\n    var listener = function listener(e) {\n      if (!document.body.contains(quill.root)) {\n        return document.body.removeEventListener('click', listener);\n      }\n      if (_this.tooltip != null && !_this.tooltip.root.contains(e.target) && document.activeElement !== _this.tooltip.textbox && !_this.quill.hasFocus()) {\n        _this.tooltip.hide();\n      }\n      if (_this.pickers != null) {\n        _this.pickers.forEach(function (picker) {\n          if (!picker.container.contains(e.target)) {\n            picker.close();\n          }\n        });\n      }\n    };\n    quill.emitter.listenDOM('click', document.body, listener);\n    return _this;\n  }\n\n  _createClass(BaseTheme, [{\n    key: 'addModule',\n    value: function addModule(name) {\n      var module = _get(BaseTheme.prototype.__proto__ || Object.getPrototypeOf(BaseTheme.prototype), 'addModule', this).call(this, name);\n      if (name === 'toolbar') {\n        this.extendToolbar(module);\n      }\n      return module;\n    }\n  }, {\n    key: 'buildButtons',\n    value: function buildButtons(buttons, icons) {\n      buttons.forEach(function (button) {\n        var className = button.getAttribute('class') || '';\n        className.split(/\\s+/).forEach(function (name) {\n          if (!name.startsWith('ql-')) return;\n          name = name.slice('ql-'.length);\n          if (icons[name] == null) return;\n          if (name === 'direction') {\n            button.innerHTML = icons[name][''] + icons[name]['rtl'];\n          } else if (typeof icons[name] === 'string') {\n            button.innerHTML = icons[name];\n          } else {\n            var value = button.value || '';\n            if (value != null && icons[name][value]) {\n              button.innerHTML = icons[name][value];\n            }\n          }\n        });\n      });\n    }\n  }, {\n    key: 'buildPickers',\n    value: function buildPickers(selects, icons) {\n      var _this2 = this;\n\n      this.pickers = selects.map(function (select) {\n        if (select.classList.contains('ql-align')) {\n          if (select.querySelector('option') == null) {\n            fillSelect(select, ALIGNS);\n          }\n          return new _iconPicker2.default(select, icons.align);\n        } else if (select.classList.contains('ql-background') || select.classList.contains('ql-color')) {\n          var format = select.classList.contains('ql-background') ? 'background' : 'color';\n          if (select.querySelector('option') == null) {\n            fillSelect(select, COLORS, format === 'background' ? '#ffffff' : '#000000');\n          }\n          return new _colorPicker2.default(select, icons[format]);\n        } else {\n          if (select.querySelector('option') == null) {\n            if (select.classList.contains('ql-font')) {\n              fillSelect(select, FONTS);\n            } else if (select.classList.contains('ql-header')) {\n              fillSelect(select, HEADERS);\n            } else if (select.classList.contains('ql-size')) {\n              fillSelect(select, SIZES);\n            }\n          }\n          return new _picker2.default(select);\n        }\n      });\n      var update = function update() {\n        _this2.pickers.forEach(function (picker) {\n          picker.update();\n        });\n      };\n      this.quill.on(_emitter2.default.events.EDITOR_CHANGE, update);\n    }\n  }]);\n\n  return BaseTheme;\n}(_theme2.default);\n\nBaseTheme.DEFAULTS = (0, _extend2.default)(true, {}, _theme2.default.DEFAULTS, {\n  modules: {\n    toolbar: {\n      handlers: {\n        formula: function formula() {\n          this.quill.theme.tooltip.edit('formula');\n        },\n        image: function image() {\n          var _this3 = this;\n\n          var fileInput = this.container.querySelector('input.ql-image[type=file]');\n          if (fileInput == null) {\n            fileInput = document.createElement('input');\n            fileInput.setAttribute('type', 'file');\n            fileInput.setAttribute('accept', 'image/png, image/gif, image/jpeg, image/bmp, image/x-icon');\n            fileInput.classList.add('ql-image');\n            fileInput.addEventListener('change', function () {\n              if (fileInput.files != null && fileInput.files[0] != null) {\n                var reader = new FileReader();\n                reader.onload = function (e) {\n                  var range = _this3.quill.getSelection(true);\n                  _this3.quill.updateContents(new _quillDelta2.default().retain(range.index).delete(range.length).insert({ image: e.target.result }), _emitter2.default.sources.USER);\n                  _this3.quill.setSelection(range.index + 1, _emitter2.default.sources.SILENT);\n                  fileInput.value = \"\";\n                };\n                reader.readAsDataURL(fileInput.files[0]);\n              }\n            });\n            this.container.appendChild(fileInput);\n          }\n          fileInput.click();\n        },\n        video: function video() {\n          this.quill.theme.tooltip.edit('video');\n        }\n      }\n    }\n  }\n});\n\nvar BaseTooltip = function (_Tooltip) {\n  _inherits(BaseTooltip, _Tooltip);\n\n  function BaseTooltip(quill, boundsContainer) {\n    _classCallCheck(this, BaseTooltip);\n\n    var _this4 = _possibleConstructorReturn(this, (BaseTooltip.__proto__ || Object.getPrototypeOf(BaseTooltip)).call(this, quill, boundsContainer));\n\n    _this4.textbox = _this4.root.querySelector('input[type=\"text\"]');\n    _this4.listen();\n    return _this4;\n  }\n\n  _createClass(BaseTooltip, [{\n    key: 'listen',\n    value: function listen() {\n      var _this5 = this;\n\n      this.textbox.addEventListener('keydown', function (event) {\n        if (_keyboard2.default.match(event, 'enter')) {\n          _this5.save();\n          event.preventDefault();\n        } else if (_keyboard2.default.match(event, 'escape')) {\n          _this5.cancel();\n          event.preventDefault();\n        }\n      });\n    }\n  }, {\n    key: 'cancel',\n    value: function cancel() {\n      this.hide();\n    }\n  }, {\n    key: 'edit',\n    value: function edit() {\n      var mode = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'link';\n      var preview = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\n      this.root.classList.remove('ql-hidden');\n      this.root.classList.add('ql-editing');\n      if (preview != null) {\n        this.textbox.value = preview;\n      } else if (mode !== this.root.getAttribute('data-mode')) {\n        this.textbox.value = '';\n      }\n      this.position(this.quill.getBounds(this.quill.selection.savedRange));\n      this.textbox.select();\n      this.textbox.setAttribute('placeholder', this.textbox.getAttribute('data-' + mode) || '');\n      this.root.setAttribute('data-mode', mode);\n    }\n  }, {\n    key: 'restoreFocus',\n    value: function restoreFocus() {\n      var scrollTop = this.quill.scrollingContainer.scrollTop;\n      this.quill.focus();\n      this.quill.scrollingContainer.scrollTop = scrollTop;\n    }\n  }, {\n    key: 'save',\n    value: function save() {\n      var value = this.textbox.value;\n      switch (this.root.getAttribute('data-mode')) {\n        case 'link':\n          {\n            var scrollTop = this.quill.root.scrollTop;\n            if (this.linkRange) {\n              this.quill.formatText(this.linkRange, 'link', value, _emitter2.default.sources.USER);\n              delete this.linkRange;\n            } else {\n              this.restoreFocus();\n              this.quill.format('link', value, _emitter2.default.sources.USER);\n            }\n            this.quill.root.scrollTop = scrollTop;\n            break;\n          }\n        case 'video':\n          {\n            value = extractVideoUrl(value);\n          } // eslint-disable-next-line no-fallthrough\n        case 'formula':\n          {\n            if (!value) break;\n            var range = this.quill.getSelection(true);\n            if (range != null) {\n              var index = range.index + range.length;\n              this.quill.insertEmbed(index, this.root.getAttribute('data-mode'), value, _emitter2.default.sources.USER);\n              if (this.root.getAttribute('data-mode') === 'formula') {\n                this.quill.insertText(index + 1, ' ', _emitter2.default.sources.USER);\n              }\n              this.quill.setSelection(index + 2, _emitter2.default.sources.USER);\n            }\n            break;\n          }\n        default:\n      }\n      this.textbox.value = '';\n      this.hide();\n    }\n  }]);\n\n  return BaseTooltip;\n}(_tooltip2.default);\n\nfunction extractVideoUrl(url) {\n  var match = url.match(/^(?:(https?):\\/\\/)?(?:(?:www|m)\\.)?youtube\\.com\\/watch.*v=([a-zA-Z0-9_-]+)/) || url.match(/^(?:(https?):\\/\\/)?(?:(?:www|m)\\.)?youtu\\.be\\/([a-zA-Z0-9_-]+)/);\n  if (match) {\n    return (match[1] || 'https') + '://www.youtube.com/embed/' + match[2] + '?showinfo=0';\n  }\n  if (match = url.match(/^(?:(https?):\\/\\/)?(?:www\\.)?vimeo\\.com\\/(\\d+)/)) {\n    // eslint-disable-line no-cond-assign\n    return (match[1] || 'https') + '://player.vimeo.com/video/' + match[2] + '/';\n  }\n  return url;\n}\n\nfunction fillSelect(select, values) {\n  var defaultValue = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n  values.forEach(function (value) {\n    var option = document.createElement('option');\n    if (value === defaultValue) {\n      option.setAttribute('selected', 'selected');\n    } else {\n      option.setAttribute('value', value);\n    }\n    select.appendChild(option);\n  });\n}\n\nexports.BaseTooltip = BaseTooltip;\nexports.default = BaseTheme;\n\n/***/ }),\n/* 45 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _core = __webpack_require__(46);\n\nvar _core2 = _interopRequireDefault(_core);\n\nvar _align = __webpack_require__(34);\n\nvar _direction = __webpack_require__(36);\n\nvar _indent = __webpack_require__(62);\n\nvar _blockquote = __webpack_require__(63);\n\nvar _blockquote2 = _interopRequireDefault(_blockquote);\n\nvar _header = __webpack_require__(64);\n\nvar _header2 = _interopRequireDefault(_header);\n\nvar _list = __webpack_require__(65);\n\nvar _list2 = _interopRequireDefault(_list);\n\nvar _background = __webpack_require__(35);\n\nvar _color = __webpack_require__(24);\n\nvar _font = __webpack_require__(37);\n\nvar _size = __webpack_require__(38);\n\nvar _bold = __webpack_require__(39);\n\nvar _bold2 = _interopRequireDefault(_bold);\n\nvar _italic = __webpack_require__(66);\n\nvar _italic2 = _interopRequireDefault(_italic);\n\nvar _link = __webpack_require__(15);\n\nvar _link2 = _interopRequireDefault(_link);\n\nvar _script = __webpack_require__(67);\n\nvar _script2 = _interopRequireDefault(_script);\n\nvar _strike = __webpack_require__(68);\n\nvar _strike2 = _interopRequireDefault(_strike);\n\nvar _underline = __webpack_require__(69);\n\nvar _underline2 = _interopRequireDefault(_underline);\n\nvar _image = __webpack_require__(70);\n\nvar _image2 = _interopRequireDefault(_image);\n\nvar _video = __webpack_require__(71);\n\nvar _video2 = _interopRequireDefault(_video);\n\nvar _code = __webpack_require__(13);\n\nvar _code2 = _interopRequireDefault(_code);\n\nvar _formula = __webpack_require__(72);\n\nvar _formula2 = _interopRequireDefault(_formula);\n\nvar _syntax = __webpack_require__(73);\n\nvar _syntax2 = _interopRequireDefault(_syntax);\n\nvar _toolbar = __webpack_require__(74);\n\nvar _toolbar2 = _interopRequireDefault(_toolbar);\n\nvar _icons = __webpack_require__(26);\n\nvar _icons2 = _interopRequireDefault(_icons);\n\nvar _picker = __webpack_require__(16);\n\nvar _picker2 = _interopRequireDefault(_picker);\n\nvar _colorPicker = __webpack_require__(41);\n\nvar _colorPicker2 = _interopRequireDefault(_colorPicker);\n\nvar _iconPicker = __webpack_require__(42);\n\nvar _iconPicker2 = _interopRequireDefault(_iconPicker);\n\nvar _tooltip = __webpack_require__(43);\n\nvar _tooltip2 = _interopRequireDefault(_tooltip);\n\nvar _bubble = __webpack_require__(107);\n\nvar _bubble2 = _interopRequireDefault(_bubble);\n\nvar _snow = __webpack_require__(108);\n\nvar _snow2 = _interopRequireDefault(_snow);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n_core2.default.register({\n  'attributors/attribute/direction': _direction.DirectionAttribute,\n\n  'attributors/class/align': _align.AlignClass,\n  'attributors/class/background': _background.BackgroundClass,\n  'attributors/class/color': _color.ColorClass,\n  'attributors/class/direction': _direction.DirectionClass,\n  'attributors/class/font': _font.FontClass,\n  'attributors/class/size': _size.SizeClass,\n\n  'attributors/style/align': _align.AlignStyle,\n  'attributors/style/background': _background.BackgroundStyle,\n  'attributors/style/color': _color.ColorStyle,\n  'attributors/style/direction': _direction.DirectionStyle,\n  'attributors/style/font': _font.FontStyle,\n  'attributors/style/size': _size.SizeStyle\n}, true);\n\n_core2.default.register({\n  'formats/align': _align.AlignClass,\n  'formats/direction': _direction.DirectionClass,\n  'formats/indent': _indent.IndentClass,\n\n  'formats/background': _background.BackgroundStyle,\n  'formats/color': _color.ColorStyle,\n  'formats/font': _font.FontClass,\n  'formats/size': _size.SizeClass,\n\n  'formats/blockquote': _blockquote2.default,\n  'formats/code-block': _code2.default,\n  'formats/header': _header2.default,\n  'formats/list': _list2.default,\n\n  'formats/bold': _bold2.default,\n  'formats/code': _code.Code,\n  'formats/italic': _italic2.default,\n  'formats/link': _link2.default,\n  'formats/script': _script2.default,\n  'formats/strike': _strike2.default,\n  'formats/underline': _underline2.default,\n\n  'formats/image': _image2.default,\n  'formats/video': _video2.default,\n\n  'formats/list/item': _list.ListItem,\n\n  'modules/formula': _formula2.default,\n  'modules/syntax': _syntax2.default,\n  'modules/toolbar': _toolbar2.default,\n\n  'themes/bubble': _bubble2.default,\n  'themes/snow': _snow2.default,\n\n  'ui/icons': _icons2.default,\n  'ui/picker': _picker2.default,\n  'ui/icon-picker': _iconPicker2.default,\n  'ui/color-picker': _colorPicker2.default,\n  'ui/tooltip': _tooltip2.default\n}, true);\n\nexports.default = _core2.default;\n\n/***/ }),\n/* 46 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nvar _quill = __webpack_require__(6);\n\nvar _quill2 = _interopRequireDefault(_quill);\n\nvar _block = __webpack_require__(3);\n\nvar _block2 = _interopRequireDefault(_block);\n\nvar _break = __webpack_require__(14);\n\nvar _break2 = _interopRequireDefault(_break);\n\nvar _container = __webpack_require__(23);\n\nvar _container2 = _interopRequireDefault(_container);\n\nvar _cursor = __webpack_require__(31);\n\nvar _cursor2 = _interopRequireDefault(_cursor);\n\nvar _embed = __webpack_require__(33);\n\nvar _embed2 = _interopRequireDefault(_embed);\n\nvar _inline = __webpack_require__(5);\n\nvar _inline2 = _interopRequireDefault(_inline);\n\nvar _scroll = __webpack_require__(59);\n\nvar _scroll2 = _interopRequireDefault(_scroll);\n\nvar _text = __webpack_require__(8);\n\nvar _text2 = _interopRequireDefault(_text);\n\nvar _clipboard = __webpack_require__(60);\n\nvar _clipboard2 = _interopRequireDefault(_clipboard);\n\nvar _history = __webpack_require__(61);\n\nvar _history2 = _interopRequireDefault(_history);\n\nvar _keyboard = __webpack_require__(25);\n\nvar _keyboard2 = _interopRequireDefault(_keyboard);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n_quill2.default.register({\n  'blots/block': _block2.default,\n  'blots/block/embed': _block.BlockEmbed,\n  'blots/break': _break2.default,\n  'blots/container': _container2.default,\n  'blots/cursor': _cursor2.default,\n  'blots/embed': _embed2.default,\n  'blots/inline': _inline2.default,\n  'blots/scroll': _scroll2.default,\n  'blots/text': _text2.default,\n\n  'modules/clipboard': _clipboard2.default,\n  'modules/history': _history2.default,\n  'modules/keyboard': _keyboard2.default\n});\n\n_parchment2.default.register(_block2.default, _break2.default, _cursor2.default, _inline2.default, _scroll2.default, _text2.default);\n\nexports.default = _quill2.default;\n\n/***/ }),\n/* 47 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar LinkedList = /** @class */ (function () {\n    function LinkedList() {\n        this.head = this.tail = null;\n        this.length = 0;\n    }\n    LinkedList.prototype.append = function () {\n        var nodes = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            nodes[_i] = arguments[_i];\n        }\n        this.insertBefore(nodes[0], null);\n        if (nodes.length > 1) {\n            this.append.apply(this, nodes.slice(1));\n        }\n    };\n    LinkedList.prototype.contains = function (node) {\n        var cur, next = this.iterator();\n        while ((cur = next())) {\n            if (cur === node)\n                return true;\n        }\n        return false;\n    };\n    LinkedList.prototype.insertBefore = function (node, refNode) {\n        if (!node)\n            return;\n        node.next = refNode;\n        if (refNode != null) {\n            node.prev = refNode.prev;\n            if (refNode.prev != null) {\n                refNode.prev.next = node;\n            }\n            refNode.prev = node;\n            if (refNode === this.head) {\n                this.head = node;\n            }\n        }\n        else if (this.tail != null) {\n            this.tail.next = node;\n            node.prev = this.tail;\n            this.tail = node;\n        }\n        else {\n            node.prev = null;\n            this.head = this.tail = node;\n        }\n        this.length += 1;\n    };\n    LinkedList.prototype.offset = function (target) {\n        var index = 0, cur = this.head;\n        while (cur != null) {\n            if (cur === target)\n                return index;\n            index += cur.length();\n            cur = cur.next;\n        }\n        return -1;\n    };\n    LinkedList.prototype.remove = function (node) {\n        if (!this.contains(node))\n            return;\n        if (node.prev != null)\n            node.prev.next = node.next;\n        if (node.next != null)\n            node.next.prev = node.prev;\n        if (node === this.head)\n            this.head = node.next;\n        if (node === this.tail)\n            this.tail = node.prev;\n        this.length -= 1;\n    };\n    LinkedList.prototype.iterator = function (curNode) {\n        if (curNode === void 0) { curNode = this.head; }\n        // TODO use yield when we can\n        return function () {\n            var ret = curNode;\n            if (curNode != null)\n                curNode = curNode.next;\n            return ret;\n        };\n    };\n    LinkedList.prototype.find = function (index, inclusive) {\n        if (inclusive === void 0) { inclusive = false; }\n        var cur, next = this.iterator();\n        while ((cur = next())) {\n            var length = cur.length();\n            if (index < length ||\n                (inclusive && index === length && (cur.next == null || cur.next.length() !== 0))) {\n                return [cur, index];\n            }\n            index -= length;\n        }\n        return [null, 0];\n    };\n    LinkedList.prototype.forEach = function (callback) {\n        var cur, next = this.iterator();\n        while ((cur = next())) {\n            callback(cur);\n        }\n    };\n    LinkedList.prototype.forEachAt = function (index, length, callback) {\n        if (length <= 0)\n            return;\n        var _a = this.find(index), startNode = _a[0], offset = _a[1];\n        var cur, curIndex = index - offset, next = this.iterator(startNode);\n        while ((cur = next()) && curIndex < index + length) {\n            var curLength = cur.length();\n            if (index > curIndex) {\n                callback(cur, index - curIndex, Math.min(length, curIndex + curLength - index));\n            }\n            else {\n                callback(cur, 0, Math.min(curLength, index + length - curIndex));\n            }\n            curIndex += curLength;\n        }\n    };\n    LinkedList.prototype.map = function (callback) {\n        return this.reduce(function (memo, cur) {\n            memo.push(callback(cur));\n            return memo;\n        }, []);\n    };\n    LinkedList.prototype.reduce = function (callback, memo) {\n        var cur, next = this.iterator();\n        while ((cur = next())) {\n            memo = callback(memo, cur);\n        }\n        return memo;\n    };\n    return LinkedList;\n}());\nexports.default = LinkedList;\n\n\n/***/ }),\n/* 48 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar container_1 = __webpack_require__(17);\nvar Registry = __webpack_require__(1);\nvar OBSERVER_CONFIG = {\n    attributes: true,\n    characterData: true,\n    characterDataOldValue: true,\n    childList: true,\n    subtree: true,\n};\nvar MAX_OPTIMIZE_ITERATIONS = 100;\nvar ScrollBlot = /** @class */ (function (_super) {\n    __extends(ScrollBlot, _super);\n    function ScrollBlot(node) {\n        var _this = _super.call(this, node) || this;\n        _this.scroll = _this;\n        _this.observer = new MutationObserver(function (mutations) {\n            _this.update(mutations);\n        });\n        _this.observer.observe(_this.domNode, OBSERVER_CONFIG);\n        _this.attach();\n        return _this;\n    }\n    ScrollBlot.prototype.detach = function () {\n        _super.prototype.detach.call(this);\n        this.observer.disconnect();\n    };\n    ScrollBlot.prototype.deleteAt = function (index, length) {\n        this.update();\n        if (index === 0 && length === this.length()) {\n            this.children.forEach(function (child) {\n                child.remove();\n            });\n        }\n        else {\n            _super.prototype.deleteAt.call(this, index, length);\n        }\n    };\n    ScrollBlot.prototype.formatAt = function (index, length, name, value) {\n        this.update();\n        _super.prototype.formatAt.call(this, index, length, name, value);\n    };\n    ScrollBlot.prototype.insertAt = function (index, value, def) {\n        this.update();\n        _super.prototype.insertAt.call(this, index, value, def);\n    };\n    ScrollBlot.prototype.optimize = function (mutations, context) {\n        var _this = this;\n        if (mutations === void 0) { mutations = []; }\n        if (context === void 0) { context = {}; }\n        _super.prototype.optimize.call(this, context);\n        // We must modify mutations directly, cannot make copy and then modify\n        var records = [].slice.call(this.observer.takeRecords());\n        // Array.push currently seems to be implemented by a non-tail recursive function\n        // so we cannot just mutations.push.apply(mutations, this.observer.takeRecords());\n        while (records.length > 0)\n            mutations.push(records.pop());\n        // TODO use WeakMap\n        var mark = function (blot, markParent) {\n            if (markParent === void 0) { markParent = true; }\n            if (blot == null || blot === _this)\n                return;\n            if (blot.domNode.parentNode == null)\n                return;\n            // @ts-ignore\n            if (blot.domNode[Registry.DATA_KEY].mutations == null) {\n                // @ts-ignore\n                blot.domNode[Registry.DATA_KEY].mutations = [];\n            }\n            if (markParent)\n                mark(blot.parent);\n        };\n        var optimize = function (blot) {\n            // Post-order traversal\n            if (\n            // @ts-ignore\n            blot.domNode[Registry.DATA_KEY] == null ||\n                // @ts-ignore\n                blot.domNode[Registry.DATA_KEY].mutations == null) {\n                return;\n            }\n            if (blot instanceof container_1.default) {\n                blot.children.forEach(optimize);\n            }\n            blot.optimize(context);\n        };\n        var remaining = mutations;\n        for (var i = 0; remaining.length > 0; i += 1) {\n            if (i >= MAX_OPTIMIZE_ITERATIONS) {\n                throw new Error('[Parchment] Maximum optimize iterations reached');\n            }\n            remaining.forEach(function (mutation) {\n                var blot = Registry.find(mutation.target, true);\n                if (blot == null)\n                    return;\n                if (blot.domNode === mutation.target) {\n                    if (mutation.type === 'childList') {\n                        mark(Registry.find(mutation.previousSibling, false));\n                        [].forEach.call(mutation.addedNodes, function (node) {\n                            var child = Registry.find(node, false);\n                            mark(child, false);\n                            if (child instanceof container_1.default) {\n                                child.children.forEach(function (grandChild) {\n                                    mark(grandChild, false);\n                                });\n                            }\n                        });\n                    }\n                    else if (mutation.type === 'attributes') {\n                        mark(blot.prev);\n                    }\n                }\n                mark(blot);\n            });\n            this.children.forEach(optimize);\n            remaining = [].slice.call(this.observer.takeRecords());\n            records = remaining.slice();\n            while (records.length > 0)\n                mutations.push(records.pop());\n        }\n    };\n    ScrollBlot.prototype.update = function (mutations, context) {\n        var _this = this;\n        if (context === void 0) { context = {}; }\n        mutations = mutations || this.observer.takeRecords();\n        // TODO use WeakMap\n        mutations\n            .map(function (mutation) {\n            var blot = Registry.find(mutation.target, true);\n            if (blot == null)\n                return null;\n            // @ts-ignore\n            if (blot.domNode[Registry.DATA_KEY].mutations == null) {\n                // @ts-ignore\n                blot.domNode[Registry.DATA_KEY].mutations = [mutation];\n                return blot;\n            }\n            else {\n                // @ts-ignore\n                blot.domNode[Registry.DATA_KEY].mutations.push(mutation);\n                return null;\n            }\n        })\n            .forEach(function (blot) {\n            if (blot == null ||\n                blot === _this ||\n                //@ts-ignore\n                blot.domNode[Registry.DATA_KEY] == null)\n                return;\n            // @ts-ignore\n            blot.update(blot.domNode[Registry.DATA_KEY].mutations || [], context);\n        });\n        // @ts-ignore\n        if (this.domNode[Registry.DATA_KEY].mutations != null) {\n            // @ts-ignore\n            _super.prototype.update.call(this, this.domNode[Registry.DATA_KEY].mutations, context);\n        }\n        this.optimize(mutations, context);\n    };\n    ScrollBlot.blotName = 'scroll';\n    ScrollBlot.defaultChild = 'block';\n    ScrollBlot.scope = Registry.Scope.BLOCK_BLOT;\n    ScrollBlot.tagName = 'DIV';\n    return ScrollBlot;\n}(container_1.default));\nexports.default = ScrollBlot;\n\n\n/***/ }),\n/* 49 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar format_1 = __webpack_require__(18);\nvar Registry = __webpack_require__(1);\n// Shallow object comparison\nfunction isEqual(obj1, obj2) {\n    if (Object.keys(obj1).length !== Object.keys(obj2).length)\n        return false;\n    // @ts-ignore\n    for (var prop in obj1) {\n        // @ts-ignore\n        if (obj1[prop] !== obj2[prop])\n            return false;\n    }\n    return true;\n}\nvar InlineBlot = /** @class */ (function (_super) {\n    __extends(InlineBlot, _super);\n    function InlineBlot() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    InlineBlot.formats = function (domNode) {\n        if (domNode.tagName === InlineBlot.tagName)\n            return undefined;\n        return _super.formats.call(this, domNode);\n    };\n    InlineBlot.prototype.format = function (name, value) {\n        var _this = this;\n        if (name === this.statics.blotName && !value) {\n            this.children.forEach(function (child) {\n                if (!(child instanceof format_1.default)) {\n                    child = child.wrap(InlineBlot.blotName, true);\n                }\n                _this.attributes.copy(child);\n            });\n            this.unwrap();\n        }\n        else {\n            _super.prototype.format.call(this, name, value);\n        }\n    };\n    InlineBlot.prototype.formatAt = function (index, length, name, value) {\n        if (this.formats()[name] != null || Registry.query(name, Registry.Scope.ATTRIBUTE)) {\n            var blot = this.isolate(index, length);\n            blot.format(name, value);\n        }\n        else {\n            _super.prototype.formatAt.call(this, index, length, name, value);\n        }\n    };\n    InlineBlot.prototype.optimize = function (context) {\n        _super.prototype.optimize.call(this, context);\n        var formats = this.formats();\n        if (Object.keys(formats).length === 0) {\n            return this.unwrap(); // unformatted span\n        }\n        var next = this.next;\n        if (next instanceof InlineBlot && next.prev === this && isEqual(formats, next.formats())) {\n            next.moveChildren(this);\n            next.remove();\n        }\n    };\n    InlineBlot.blotName = 'inline';\n    InlineBlot.scope = Registry.Scope.INLINE_BLOT;\n    InlineBlot.tagName = 'SPAN';\n    return InlineBlot;\n}(format_1.default));\nexports.default = InlineBlot;\n\n\n/***/ }),\n/* 50 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar format_1 = __webpack_require__(18);\nvar Registry = __webpack_require__(1);\nvar BlockBlot = /** @class */ (function (_super) {\n    __extends(BlockBlot, _super);\n    function BlockBlot() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    BlockBlot.formats = function (domNode) {\n        var tagName = Registry.query(BlockBlot.blotName).tagName;\n        if (domNode.tagName === tagName)\n            return undefined;\n        return _super.formats.call(this, domNode);\n    };\n    BlockBlot.prototype.format = function (name, value) {\n        if (Registry.query(name, Registry.Scope.BLOCK) == null) {\n            return;\n        }\n        else if (name === this.statics.blotName && !value) {\n            this.replaceWith(BlockBlot.blotName);\n        }\n        else {\n            _super.prototype.format.call(this, name, value);\n        }\n    };\n    BlockBlot.prototype.formatAt = function (index, length, name, value) {\n        if (Registry.query(name, Registry.Scope.BLOCK) != null) {\n            this.format(name, value);\n        }\n        else {\n            _super.prototype.formatAt.call(this, index, length, name, value);\n        }\n    };\n    BlockBlot.prototype.insertAt = function (index, value, def) {\n        if (def == null || Registry.query(value, Registry.Scope.INLINE) != null) {\n            // Insert text or inline\n            _super.prototype.insertAt.call(this, index, value, def);\n        }\n        else {\n            var after = this.split(index);\n            var blot = Registry.create(value, def);\n            after.parent.insertBefore(blot, after);\n        }\n    };\n    BlockBlot.prototype.update = function (mutations, context) {\n        if (navigator.userAgent.match(/Trident/)) {\n            this.build();\n        }\n        else {\n            _super.prototype.update.call(this, mutations, context);\n        }\n    };\n    BlockBlot.blotName = 'block';\n    BlockBlot.scope = Registry.Scope.BLOCK_BLOT;\n    BlockBlot.tagName = 'P';\n    return BlockBlot;\n}(format_1.default));\nexports.default = BlockBlot;\n\n\n/***/ }),\n/* 51 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar leaf_1 = __webpack_require__(19);\nvar EmbedBlot = /** @class */ (function (_super) {\n    __extends(EmbedBlot, _super);\n    function EmbedBlot() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    EmbedBlot.formats = function (domNode) {\n        return undefined;\n    };\n    EmbedBlot.prototype.format = function (name, value) {\n        // super.formatAt wraps, which is what we want in general,\n        // but this allows subclasses to overwrite for formats\n        // that just apply to particular embeds\n        _super.prototype.formatAt.call(this, 0, this.length(), name, value);\n    };\n    EmbedBlot.prototype.formatAt = function (index, length, name, value) {\n        if (index === 0 && length === this.length()) {\n            this.format(name, value);\n        }\n        else {\n            _super.prototype.formatAt.call(this, index, length, name, value);\n        }\n    };\n    EmbedBlot.prototype.formats = function () {\n        return this.statics.formats(this.domNode);\n    };\n    return EmbedBlot;\n}(leaf_1.default));\nexports.default = EmbedBlot;\n\n\n/***/ }),\n/* 52 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar leaf_1 = __webpack_require__(19);\nvar Registry = __webpack_require__(1);\nvar TextBlot = /** @class */ (function (_super) {\n    __extends(TextBlot, _super);\n    function TextBlot(node) {\n        var _this = _super.call(this, node) || this;\n        _this.text = _this.statics.value(_this.domNode);\n        return _this;\n    }\n    TextBlot.create = function (value) {\n        return document.createTextNode(value);\n    };\n    TextBlot.value = function (domNode) {\n        var text = domNode.data;\n        // @ts-ignore\n        if (text['normalize'])\n            text = text['normalize']();\n        return text;\n    };\n    TextBlot.prototype.deleteAt = function (index, length) {\n        this.domNode.data = this.text = this.text.slice(0, index) + this.text.slice(index + length);\n    };\n    TextBlot.prototype.index = function (node, offset) {\n        if (this.domNode === node) {\n            return offset;\n        }\n        return -1;\n    };\n    TextBlot.prototype.insertAt = function (index, value, def) {\n        if (def == null) {\n            this.text = this.text.slice(0, index) + value + this.text.slice(index);\n            this.domNode.data = this.text;\n        }\n        else {\n            _super.prototype.insertAt.call(this, index, value, def);\n        }\n    };\n    TextBlot.prototype.length = function () {\n        return this.text.length;\n    };\n    TextBlot.prototype.optimize = function (context) {\n        _super.prototype.optimize.call(this, context);\n        this.text = this.statics.value(this.domNode);\n        if (this.text.length === 0) {\n            this.remove();\n        }\n        else if (this.next instanceof TextBlot && this.next.prev === this) {\n            this.insertAt(this.length(), this.next.value());\n            this.next.remove();\n        }\n    };\n    TextBlot.prototype.position = function (index, inclusive) {\n        if (inclusive === void 0) { inclusive = false; }\n        return [this.domNode, index];\n    };\n    TextBlot.prototype.split = function (index, force) {\n        if (force === void 0) { force = false; }\n        if (!force) {\n            if (index === 0)\n                return this;\n            if (index === this.length())\n                return this.next;\n        }\n        var after = Registry.create(this.domNode.splitText(index));\n        this.parent.insertBefore(after, this.next);\n        this.text = this.statics.value(this.domNode);\n        return after;\n    };\n    TextBlot.prototype.update = function (mutations, context) {\n        var _this = this;\n        if (mutations.some(function (mutation) {\n            return mutation.type === 'characterData' && mutation.target === _this.domNode;\n        })) {\n            this.text = this.statics.value(this.domNode);\n        }\n    };\n    TextBlot.prototype.value = function () {\n        return this.text;\n    };\n    TextBlot.blotName = 'text';\n    TextBlot.scope = Registry.Scope.INLINE_BLOT;\n    return TextBlot;\n}(leaf_1.default));\nexports.default = TextBlot;\n\n\n/***/ }),\n/* 53 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar elem = document.createElement('div');\nelem.classList.toggle('test-class', false);\nif (elem.classList.contains('test-class')) {\n  var _toggle = DOMTokenList.prototype.toggle;\n  DOMTokenList.prototype.toggle = function (token, force) {\n    if (arguments.length > 1 && !this.contains(token) === !force) {\n      return force;\n    } else {\n      return _toggle.call(this, token);\n    }\n  };\n}\n\nif (!String.prototype.startsWith) {\n  String.prototype.startsWith = function (searchString, position) {\n    position = position || 0;\n    return this.substr(position, searchString.length) === searchString;\n  };\n}\n\nif (!String.prototype.endsWith) {\n  String.prototype.endsWith = function (searchString, position) {\n    var subjectString = this.toString();\n    if (typeof position !== 'number' || !isFinite(position) || Math.floor(position) !== position || position > subjectString.length) {\n      position = subjectString.length;\n    }\n    position -= searchString.length;\n    var lastIndex = subjectString.indexOf(searchString, position);\n    return lastIndex !== -1 && lastIndex === position;\n  };\n}\n\nif (!Array.prototype.find) {\n  Object.defineProperty(Array.prototype, \"find\", {\n    value: function value(predicate) {\n      if (this === null) {\n        throw new TypeError('Array.prototype.find called on null or undefined');\n      }\n      if (typeof predicate !== 'function') {\n        throw new TypeError('predicate must be a function');\n      }\n      var list = Object(this);\n      var length = list.length >>> 0;\n      var thisArg = arguments[1];\n      var value;\n\n      for (var i = 0; i < length; i++) {\n        value = list[i];\n        if (predicate.call(thisArg, value, i, list)) {\n          return value;\n        }\n      }\n      return undefined;\n    }\n  });\n}\n\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n  // Disable resizing in Firefox\n  document.execCommand(\"enableObjectResizing\", false, false);\n  // Disable automatic linkifying in IE11\n  document.execCommand(\"autoUrlDetect\", false, false);\n});\n\n/***/ }),\n/* 54 */\n/***/ (function(module, exports) {\n\n/**\n * This library modifies the diff-patch-match library by Neil Fraser\n * by removing the patch and match functionality and certain advanced\n * options in the diff function. The original license is as follows:\n *\n * ===\n *\n * Diff Match and Patch\n *\n * Copyright 2006 Google Inc.\n * http://code.google.com/p/google-diff-match-patch/\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\n/**\n * The data structure representing a diff is an array of tuples:\n * [[DIFF_DELETE, 'Hello'], [DIFF_INSERT, 'Goodbye'], [DIFF_EQUAL, ' world.']]\n * which means: delete 'Hello', add 'Goodbye' and keep ' world.'\n */\nvar DIFF_DELETE = -1;\nvar DIFF_INSERT = 1;\nvar DIFF_EQUAL = 0;\n\n\n/**\n * Find the differences between two texts.  Simplifies the problem by stripping\n * any common prefix or suffix off the texts before diffing.\n * @param {string} text1 Old string to be diffed.\n * @param {string} text2 New string to be diffed.\n * @param {Int} cursor_pos Expected edit position in text1 (optional)\n * @return {Array} Array of diff tuples.\n */\nfunction diff_main(text1, text2, cursor_pos) {\n  // Check for equality (speedup).\n  if (text1 == text2) {\n    if (text1) {\n      return [[DIFF_EQUAL, text1]];\n    }\n    return [];\n  }\n\n  // Check cursor_pos within bounds\n  if (cursor_pos < 0 || text1.length < cursor_pos) {\n    cursor_pos = null;\n  }\n\n  // Trim off common prefix (speedup).\n  var commonlength = diff_commonPrefix(text1, text2);\n  var commonprefix = text1.substring(0, commonlength);\n  text1 = text1.substring(commonlength);\n  text2 = text2.substring(commonlength);\n\n  // Trim off common suffix (speedup).\n  commonlength = diff_commonSuffix(text1, text2);\n  var commonsuffix = text1.substring(text1.length - commonlength);\n  text1 = text1.substring(0, text1.length - commonlength);\n  text2 = text2.substring(0, text2.length - commonlength);\n\n  // Compute the diff on the middle block.\n  var diffs = diff_compute_(text1, text2);\n\n  // Restore the prefix and suffix.\n  if (commonprefix) {\n    diffs.unshift([DIFF_EQUAL, commonprefix]);\n  }\n  if (commonsuffix) {\n    diffs.push([DIFF_EQUAL, commonsuffix]);\n  }\n  diff_cleanupMerge(diffs);\n  if (cursor_pos != null) {\n    diffs = fix_cursor(diffs, cursor_pos);\n  }\n  diffs = fix_emoji(diffs);\n  return diffs;\n};\n\n\n/**\n * Find the differences between two texts.  Assumes that the texts do not\n * have any common prefix or suffix.\n * @param {string} text1 Old string to be diffed.\n * @param {string} text2 New string to be diffed.\n * @return {Array} Array of diff tuples.\n */\nfunction diff_compute_(text1, text2) {\n  var diffs;\n\n  if (!text1) {\n    // Just add some text (speedup).\n    return [[DIFF_INSERT, text2]];\n  }\n\n  if (!text2) {\n    // Just delete some text (speedup).\n    return [[DIFF_DELETE, text1]];\n  }\n\n  var longtext = text1.length > text2.length ? text1 : text2;\n  var shorttext = text1.length > text2.length ? text2 : text1;\n  var i = longtext.indexOf(shorttext);\n  if (i != -1) {\n    // Shorter text is inside the longer text (speedup).\n    diffs = [[DIFF_INSERT, longtext.substring(0, i)],\n             [DIFF_EQUAL, shorttext],\n             [DIFF_INSERT, longtext.substring(i + shorttext.length)]];\n    // Swap insertions for deletions if diff is reversed.\n    if (text1.length > text2.length) {\n      diffs[0][0] = diffs[2][0] = DIFF_DELETE;\n    }\n    return diffs;\n  }\n\n  if (shorttext.length == 1) {\n    // Single character string.\n    // After the previous speedup, the character can't be an equality.\n    return [[DIFF_DELETE, text1], [DIFF_INSERT, text2]];\n  }\n\n  // Check to see if the problem can be split in two.\n  var hm = diff_halfMatch_(text1, text2);\n  if (hm) {\n    // A half-match was found, sort out the return data.\n    var text1_a = hm[0];\n    var text1_b = hm[1];\n    var text2_a = hm[2];\n    var text2_b = hm[3];\n    var mid_common = hm[4];\n    // Send both pairs off for separate processing.\n    var diffs_a = diff_main(text1_a, text2_a);\n    var diffs_b = diff_main(text1_b, text2_b);\n    // Merge the results.\n    return diffs_a.concat([[DIFF_EQUAL, mid_common]], diffs_b);\n  }\n\n  return diff_bisect_(text1, text2);\n};\n\n\n/**\n * Find the 'middle snake' of a diff, split the problem in two\n * and return the recursively constructed diff.\n * See Myers 1986 paper: An O(ND) Difference Algorithm and Its Variations.\n * @param {string} text1 Old string to be diffed.\n * @param {string} text2 New string to be diffed.\n * @return {Array} Array of diff tuples.\n * @private\n */\nfunction diff_bisect_(text1, text2) {\n  // Cache the text lengths to prevent multiple calls.\n  var text1_length = text1.length;\n  var text2_length = text2.length;\n  var max_d = Math.ceil((text1_length + text2_length) / 2);\n  var v_offset = max_d;\n  var v_length = 2 * max_d;\n  var v1 = new Array(v_length);\n  var v2 = new Array(v_length);\n  // Setting all elements to -1 is faster in Chrome & Firefox than mixing\n  // integers and undefined.\n  for (var x = 0; x < v_length; x++) {\n    v1[x] = -1;\n    v2[x] = -1;\n  }\n  v1[v_offset + 1] = 0;\n  v2[v_offset + 1] = 0;\n  var delta = text1_length - text2_length;\n  // If the total number of characters is odd, then the front path will collide\n  // with the reverse path.\n  var front = (delta % 2 != 0);\n  // Offsets for start and end of k loop.\n  // Prevents mapping of space beyond the grid.\n  var k1start = 0;\n  var k1end = 0;\n  var k2start = 0;\n  var k2end = 0;\n  for (var d = 0; d < max_d; d++) {\n    // Walk the front path one step.\n    for (var k1 = -d + k1start; k1 <= d - k1end; k1 += 2) {\n      var k1_offset = v_offset + k1;\n      var x1;\n      if (k1 == -d || (k1 != d && v1[k1_offset - 1] < v1[k1_offset + 1])) {\n        x1 = v1[k1_offset + 1];\n      } else {\n        x1 = v1[k1_offset - 1] + 1;\n      }\n      var y1 = x1 - k1;\n      while (x1 < text1_length && y1 < text2_length &&\n             text1.charAt(x1) == text2.charAt(y1)) {\n        x1++;\n        y1++;\n      }\n      v1[k1_offset] = x1;\n      if (x1 > text1_length) {\n        // Ran off the right of the graph.\n        k1end += 2;\n      } else if (y1 > text2_length) {\n        // Ran off the bottom of the graph.\n        k1start += 2;\n      } else if (front) {\n        var k2_offset = v_offset + delta - k1;\n        if (k2_offset >= 0 && k2_offset < v_length && v2[k2_offset] != -1) {\n          // Mirror x2 onto top-left coordinate system.\n          var x2 = text1_length - v2[k2_offset];\n          if (x1 >= x2) {\n            // Overlap detected.\n            return diff_bisectSplit_(text1, text2, x1, y1);\n          }\n        }\n      }\n    }\n\n    // Walk the reverse path one step.\n    for (var k2 = -d + k2start; k2 <= d - k2end; k2 += 2) {\n      var k2_offset = v_offset + k2;\n      var x2;\n      if (k2 == -d || (k2 != d && v2[k2_offset - 1] < v2[k2_offset + 1])) {\n        x2 = v2[k2_offset + 1];\n      } else {\n        x2 = v2[k2_offset - 1] + 1;\n      }\n      var y2 = x2 - k2;\n      while (x2 < text1_length && y2 < text2_length &&\n             text1.charAt(text1_length - x2 - 1) ==\n             text2.charAt(text2_length - y2 - 1)) {\n        x2++;\n        y2++;\n      }\n      v2[k2_offset] = x2;\n      if (x2 > text1_length) {\n        // Ran off the left of the graph.\n        k2end += 2;\n      } else if (y2 > text2_length) {\n        // Ran off the top of the graph.\n        k2start += 2;\n      } else if (!front) {\n        var k1_offset = v_offset + delta - k2;\n        if (k1_offset >= 0 && k1_offset < v_length && v1[k1_offset] != -1) {\n          var x1 = v1[k1_offset];\n          var y1 = v_offset + x1 - k1_offset;\n          // Mirror x2 onto top-left coordinate system.\n          x2 = text1_length - x2;\n          if (x1 >= x2) {\n            // Overlap detected.\n            return diff_bisectSplit_(text1, text2, x1, y1);\n          }\n        }\n      }\n    }\n  }\n  // Diff took too long and hit the deadline or\n  // number of diffs equals number of characters, no commonality at all.\n  return [[DIFF_DELETE, text1], [DIFF_INSERT, text2]];\n};\n\n\n/**\n * Given the location of the 'middle snake', split the diff in two parts\n * and recurse.\n * @param {string} text1 Old string to be diffed.\n * @param {string} text2 New string to be diffed.\n * @param {number} x Index of split point in text1.\n * @param {number} y Index of split point in text2.\n * @return {Array} Array of diff tuples.\n */\nfunction diff_bisectSplit_(text1, text2, x, y) {\n  var text1a = text1.substring(0, x);\n  var text2a = text2.substring(0, y);\n  var text1b = text1.substring(x);\n  var text2b = text2.substring(y);\n\n  // Compute both diffs serially.\n  var diffs = diff_main(text1a, text2a);\n  var diffsb = diff_main(text1b, text2b);\n\n  return diffs.concat(diffsb);\n};\n\n\n/**\n * Determine the common prefix of two strings.\n * @param {string} text1 First string.\n * @param {string} text2 Second string.\n * @return {number} The number of characters common to the start of each\n *     string.\n */\nfunction diff_commonPrefix(text1, text2) {\n  // Quick check for common null cases.\n  if (!text1 || !text2 || text1.charAt(0) != text2.charAt(0)) {\n    return 0;\n  }\n  // Binary search.\n  // Performance analysis: http://neil.fraser.name/news/2007/10/09/\n  var pointermin = 0;\n  var pointermax = Math.min(text1.length, text2.length);\n  var pointermid = pointermax;\n  var pointerstart = 0;\n  while (pointermin < pointermid) {\n    if (text1.substring(pointerstart, pointermid) ==\n        text2.substring(pointerstart, pointermid)) {\n      pointermin = pointermid;\n      pointerstart = pointermin;\n    } else {\n      pointermax = pointermid;\n    }\n    pointermid = Math.floor((pointermax - pointermin) / 2 + pointermin);\n  }\n  return pointermid;\n};\n\n\n/**\n * Determine the common suffix of two strings.\n * @param {string} text1 First string.\n * @param {string} text2 Second string.\n * @return {number} The number of characters common to the end of each string.\n */\nfunction diff_commonSuffix(text1, text2) {\n  // Quick check for common null cases.\n  if (!text1 || !text2 ||\n      text1.charAt(text1.length - 1) != text2.charAt(text2.length - 1)) {\n    return 0;\n  }\n  // Binary search.\n  // Performance analysis: http://neil.fraser.name/news/2007/10/09/\n  var pointermin = 0;\n  var pointermax = Math.min(text1.length, text2.length);\n  var pointermid = pointermax;\n  var pointerend = 0;\n  while (pointermin < pointermid) {\n    if (text1.substring(text1.length - pointermid, text1.length - pointerend) ==\n        text2.substring(text2.length - pointermid, text2.length - pointerend)) {\n      pointermin = pointermid;\n      pointerend = pointermin;\n    } else {\n      pointermax = pointermid;\n    }\n    pointermid = Math.floor((pointermax - pointermin) / 2 + pointermin);\n  }\n  return pointermid;\n};\n\n\n/**\n * Do the two texts share a substring which is at least half the length of the\n * longer text?\n * This speedup can produce non-minimal diffs.\n * @param {string} text1 First string.\n * @param {string} text2 Second string.\n * @return {Array.<string>} Five element Array, containing the prefix of\n *     text1, the suffix of text1, the prefix of text2, the suffix of\n *     text2 and the common middle.  Or null if there was no match.\n */\nfunction diff_halfMatch_(text1, text2) {\n  var longtext = text1.length > text2.length ? text1 : text2;\n  var shorttext = text1.length > text2.length ? text2 : text1;\n  if (longtext.length < 4 || shorttext.length * 2 < longtext.length) {\n    return null;  // Pointless.\n  }\n\n  /**\n   * Does a substring of shorttext exist within longtext such that the substring\n   * is at least half the length of longtext?\n   * Closure, but does not reference any external variables.\n   * @param {string} longtext Longer string.\n   * @param {string} shorttext Shorter string.\n   * @param {number} i Start index of quarter length substring within longtext.\n   * @return {Array.<string>} Five element Array, containing the prefix of\n   *     longtext, the suffix of longtext, the prefix of shorttext, the suffix\n   *     of shorttext and the common middle.  Or null if there was no match.\n   * @private\n   */\n  function diff_halfMatchI_(longtext, shorttext, i) {\n    // Start with a 1/4 length substring at position i as a seed.\n    var seed = longtext.substring(i, i + Math.floor(longtext.length / 4));\n    var j = -1;\n    var best_common = '';\n    var best_longtext_a, best_longtext_b, best_shorttext_a, best_shorttext_b;\n    while ((j = shorttext.indexOf(seed, j + 1)) != -1) {\n      var prefixLength = diff_commonPrefix(longtext.substring(i),\n                                           shorttext.substring(j));\n      var suffixLength = diff_commonSuffix(longtext.substring(0, i),\n                                           shorttext.substring(0, j));\n      if (best_common.length < suffixLength + prefixLength) {\n        best_common = shorttext.substring(j - suffixLength, j) +\n            shorttext.substring(j, j + prefixLength);\n        best_longtext_a = longtext.substring(0, i - suffixLength);\n        best_longtext_b = longtext.substring(i + prefixLength);\n        best_shorttext_a = shorttext.substring(0, j - suffixLength);\n        best_shorttext_b = shorttext.substring(j + prefixLength);\n      }\n    }\n    if (best_common.length * 2 >= longtext.length) {\n      return [best_longtext_a, best_longtext_b,\n              best_shorttext_a, best_shorttext_b, best_common];\n    } else {\n      return null;\n    }\n  }\n\n  // First check if the second quarter is the seed for a half-match.\n  var hm1 = diff_halfMatchI_(longtext, shorttext,\n                             Math.ceil(longtext.length / 4));\n  // Check again based on the third quarter.\n  var hm2 = diff_halfMatchI_(longtext, shorttext,\n                             Math.ceil(longtext.length / 2));\n  var hm;\n  if (!hm1 && !hm2) {\n    return null;\n  } else if (!hm2) {\n    hm = hm1;\n  } else if (!hm1) {\n    hm = hm2;\n  } else {\n    // Both matched.  Select the longest.\n    hm = hm1[4].length > hm2[4].length ? hm1 : hm2;\n  }\n\n  // A half-match was found, sort out the return data.\n  var text1_a, text1_b, text2_a, text2_b;\n  if (text1.length > text2.length) {\n    text1_a = hm[0];\n    text1_b = hm[1];\n    text2_a = hm[2];\n    text2_b = hm[3];\n  } else {\n    text2_a = hm[0];\n    text2_b = hm[1];\n    text1_a = hm[2];\n    text1_b = hm[3];\n  }\n  var mid_common = hm[4];\n  return [text1_a, text1_b, text2_a, text2_b, mid_common];\n};\n\n\n/**\n * Reorder and merge like edit sections.  Merge equalities.\n * Any edit section can move as long as it doesn't cross an equality.\n * @param {Array} diffs Array of diff tuples.\n */\nfunction diff_cleanupMerge(diffs) {\n  diffs.push([DIFF_EQUAL, '']);  // Add a dummy entry at the end.\n  var pointer = 0;\n  var count_delete = 0;\n  var count_insert = 0;\n  var text_delete = '';\n  var text_insert = '';\n  var commonlength;\n  while (pointer < diffs.length) {\n    switch (diffs[pointer][0]) {\n      case DIFF_INSERT:\n        count_insert++;\n        text_insert += diffs[pointer][1];\n        pointer++;\n        break;\n      case DIFF_DELETE:\n        count_delete++;\n        text_delete += diffs[pointer][1];\n        pointer++;\n        break;\n      case DIFF_EQUAL:\n        // Upon reaching an equality, check for prior redundancies.\n        if (count_delete + count_insert > 1) {\n          if (count_delete !== 0 && count_insert !== 0) {\n            // Factor out any common prefixies.\n            commonlength = diff_commonPrefix(text_insert, text_delete);\n            if (commonlength !== 0) {\n              if ((pointer - count_delete - count_insert) > 0 &&\n                  diffs[pointer - count_delete - count_insert - 1][0] ==\n                  DIFF_EQUAL) {\n                diffs[pointer - count_delete - count_insert - 1][1] +=\n                    text_insert.substring(0, commonlength);\n              } else {\n                diffs.splice(0, 0, [DIFF_EQUAL,\n                                    text_insert.substring(0, commonlength)]);\n                pointer++;\n              }\n              text_insert = text_insert.substring(commonlength);\n              text_delete = text_delete.substring(commonlength);\n            }\n            // Factor out any common suffixies.\n            commonlength = diff_commonSuffix(text_insert, text_delete);\n            if (commonlength !== 0) {\n              diffs[pointer][1] = text_insert.substring(text_insert.length -\n                  commonlength) + diffs[pointer][1];\n              text_insert = text_insert.substring(0, text_insert.length -\n                  commonlength);\n              text_delete = text_delete.substring(0, text_delete.length -\n                  commonlength);\n            }\n          }\n          // Delete the offending records and add the merged ones.\n          if (count_delete === 0) {\n            diffs.splice(pointer - count_insert,\n                count_delete + count_insert, [DIFF_INSERT, text_insert]);\n          } else if (count_insert === 0) {\n            diffs.splice(pointer - count_delete,\n                count_delete + count_insert, [DIFF_DELETE, text_delete]);\n          } else {\n            diffs.splice(pointer - count_delete - count_insert,\n                count_delete + count_insert, [DIFF_DELETE, text_delete],\n                [DIFF_INSERT, text_insert]);\n          }\n          pointer = pointer - count_delete - count_insert +\n                    (count_delete ? 1 : 0) + (count_insert ? 1 : 0) + 1;\n        } else if (pointer !== 0 && diffs[pointer - 1][0] == DIFF_EQUAL) {\n          // Merge this equality with the previous one.\n          diffs[pointer - 1][1] += diffs[pointer][1];\n          diffs.splice(pointer, 1);\n        } else {\n          pointer++;\n        }\n        count_insert = 0;\n        count_delete = 0;\n        text_delete = '';\n        text_insert = '';\n        break;\n    }\n  }\n  if (diffs[diffs.length - 1][1] === '') {\n    diffs.pop();  // Remove the dummy entry at the end.\n  }\n\n  // Second pass: look for single edits surrounded on both sides by equalities\n  // which can be shifted sideways to eliminate an equality.\n  // e.g: A<ins>BA</ins>C -> <ins>AB</ins>AC\n  var changes = false;\n  pointer = 1;\n  // Intentionally ignore the first and last element (don't need checking).\n  while (pointer < diffs.length - 1) {\n    if (diffs[pointer - 1][0] == DIFF_EQUAL &&\n        diffs[pointer + 1][0] == DIFF_EQUAL) {\n      // This is a single edit surrounded by equalities.\n      if (diffs[pointer][1].substring(diffs[pointer][1].length -\n          diffs[pointer - 1][1].length) == diffs[pointer - 1][1]) {\n        // Shift the edit over the previous equality.\n        diffs[pointer][1] = diffs[pointer - 1][1] +\n            diffs[pointer][1].substring(0, diffs[pointer][1].length -\n                                        diffs[pointer - 1][1].length);\n        diffs[pointer + 1][1] = diffs[pointer - 1][1] + diffs[pointer + 1][1];\n        diffs.splice(pointer - 1, 1);\n        changes = true;\n      } else if (diffs[pointer][1].substring(0, diffs[pointer + 1][1].length) ==\n          diffs[pointer + 1][1]) {\n        // Shift the edit over the next equality.\n        diffs[pointer - 1][1] += diffs[pointer + 1][1];\n        diffs[pointer][1] =\n            diffs[pointer][1].substring(diffs[pointer + 1][1].length) +\n            diffs[pointer + 1][1];\n        diffs.splice(pointer + 1, 1);\n        changes = true;\n      }\n    }\n    pointer++;\n  }\n  // If shifts were made, the diff needs reordering and another shift sweep.\n  if (changes) {\n    diff_cleanupMerge(diffs);\n  }\n};\n\n\nvar diff = diff_main;\ndiff.INSERT = DIFF_INSERT;\ndiff.DELETE = DIFF_DELETE;\ndiff.EQUAL = DIFF_EQUAL;\n\nmodule.exports = diff;\n\n/*\n * Modify a diff such that the cursor position points to the start of a change:\n * E.g.\n *   cursor_normalize_diff([[DIFF_EQUAL, 'abc']], 1)\n *     => [1, [[DIFF_EQUAL, 'a'], [DIFF_EQUAL, 'bc']]]\n *   cursor_normalize_diff([[DIFF_INSERT, 'new'], [DIFF_DELETE, 'xyz']], 2)\n *     => [2, [[DIFF_INSERT, 'new'], [DIFF_DELETE, 'xy'], [DIFF_DELETE, 'z']]]\n *\n * @param {Array} diffs Array of diff tuples\n * @param {Int} cursor_pos Suggested edit position. Must not be out of bounds!\n * @return {Array} A tuple [cursor location in the modified diff, modified diff]\n */\nfunction cursor_normalize_diff (diffs, cursor_pos) {\n  if (cursor_pos === 0) {\n    return [DIFF_EQUAL, diffs];\n  }\n  for (var current_pos = 0, i = 0; i < diffs.length; i++) {\n    var d = diffs[i];\n    if (d[0] === DIFF_DELETE || d[0] === DIFF_EQUAL) {\n      var next_pos = current_pos + d[1].length;\n      if (cursor_pos === next_pos) {\n        return [i + 1, diffs];\n      } else if (cursor_pos < next_pos) {\n        // copy to prevent side effects\n        diffs = diffs.slice();\n        // split d into two diff changes\n        var split_pos = cursor_pos - current_pos;\n        var d_left = [d[0], d[1].slice(0, split_pos)];\n        var d_right = [d[0], d[1].slice(split_pos)];\n        diffs.splice(i, 1, d_left, d_right);\n        return [i + 1, diffs];\n      } else {\n        current_pos = next_pos;\n      }\n    }\n  }\n  throw new Error('cursor_pos is out of bounds!')\n}\n\n/*\n * Modify a diff such that the edit position is \"shifted\" to the proposed edit location (cursor_position).\n *\n * Case 1)\n *   Check if a naive shift is possible:\n *     [0, X], [ 1, Y] -> [ 1, Y], [0, X]    (if X + Y === Y + X)\n *     [0, X], [-1, Y] -> [-1, Y], [0, X]    (if X + Y === Y + X) - holds same result\n * Case 2)\n *   Check if the following shifts are possible:\n *     [0, 'pre'], [ 1, 'prefix'] -> [ 1, 'pre'], [0, 'pre'], [ 1, 'fix']\n *     [0, 'pre'], [-1, 'prefix'] -> [-1, 'pre'], [0, 'pre'], [-1, 'fix']\n *         ^            ^\n *         d          d_next\n *\n * @param {Array} diffs Array of diff tuples\n * @param {Int} cursor_pos Suggested edit position. Must not be out of bounds!\n * @return {Array} Array of diff tuples\n */\nfunction fix_cursor (diffs, cursor_pos) {\n  var norm = cursor_normalize_diff(diffs, cursor_pos);\n  var ndiffs = norm[1];\n  var cursor_pointer = norm[0];\n  var d = ndiffs[cursor_pointer];\n  var d_next = ndiffs[cursor_pointer + 1];\n\n  if (d == null) {\n    // Text was deleted from end of original string,\n    // cursor is now out of bounds in new string\n    return diffs;\n  } else if (d[0] !== DIFF_EQUAL) {\n    // A modification happened at the cursor location.\n    // This is the expected outcome, so we can return the original diff.\n    return diffs;\n  } else {\n    if (d_next != null && d[1] + d_next[1] === d_next[1] + d[1]) {\n      // Case 1)\n      // It is possible to perform a naive shift\n      ndiffs.splice(cursor_pointer, 2, d_next, d)\n      return merge_tuples(ndiffs, cursor_pointer, 2)\n    } else if (d_next != null && d_next[1].indexOf(d[1]) === 0) {\n      // Case 2)\n      // d[1] is a prefix of d_next[1]\n      // We can assume that d_next[0] !== 0, since d[0] === 0\n      // Shift edit locations..\n      ndiffs.splice(cursor_pointer, 2, [d_next[0], d[1]], [0, d[1]]);\n      var suffix = d_next[1].slice(d[1].length);\n      if (suffix.length > 0) {\n        ndiffs.splice(cursor_pointer + 2, 0, [d_next[0], suffix]);\n      }\n      return merge_tuples(ndiffs, cursor_pointer, 3)\n    } else {\n      // Not possible to perform any modification\n      return diffs;\n    }\n  }\n}\n\n/*\n * Check diff did not split surrogate pairs.\n * Ex. [0, '\\uD83D'], [-1, '\\uDC36'], [1, '\\uDC2F'] -> [-1, '\\uD83D\\uDC36'], [1, '\\uD83D\\uDC2F']\n *     '\\uD83D\\uDC36' === '🐶', '\\uD83D\\uDC2F' === '🐯'\n *\n * @param {Array} diffs Array of diff tuples\n * @return {Array} Array of diff tuples\n */\nfunction fix_emoji (diffs) {\n  var compact = false;\n  var starts_with_pair_end = function(str) {\n    return str.charCodeAt(0) >= 0xDC00 && str.charCodeAt(0) <= 0xDFFF;\n  }\n  var ends_with_pair_start = function(str) {\n    return str.charCodeAt(str.length-1) >= 0xD800 && str.charCodeAt(str.length-1) <= 0xDBFF;\n  }\n  for (var i = 2; i < diffs.length; i += 1) {\n    if (diffs[i-2][0] === DIFF_EQUAL && ends_with_pair_start(diffs[i-2][1]) &&\n        diffs[i-1][0] === DIFF_DELETE && starts_with_pair_end(diffs[i-1][1]) &&\n        diffs[i][0] === DIFF_INSERT && starts_with_pair_end(diffs[i][1])) {\n      compact = true;\n\n      diffs[i-1][1] = diffs[i-2][1].slice(-1) + diffs[i-1][1];\n      diffs[i][1] = diffs[i-2][1].slice(-1) + diffs[i][1];\n\n      diffs[i-2][1] = diffs[i-2][1].slice(0, -1);\n    }\n  }\n  if (!compact) {\n    return diffs;\n  }\n  var fixed_diffs = [];\n  for (var i = 0; i < diffs.length; i += 1) {\n    if (diffs[i][1].length > 0) {\n      fixed_diffs.push(diffs[i]);\n    }\n  }\n  return fixed_diffs;\n}\n\n/*\n * Try to merge tuples with their neigbors in a given range.\n * E.g. [0, 'a'], [0, 'b'] -> [0, 'ab']\n *\n * @param {Array} diffs Array of diff tuples.\n * @param {Int} start Position of the first element to merge (diffs[start] is also merged with diffs[start - 1]).\n * @param {Int} length Number of consecutive elements to check.\n * @return {Array} Array of merged diff tuples.\n */\nfunction merge_tuples (diffs, start, length) {\n  // Check from (start-1) to (start+length).\n  for (var i = start + length - 1; i >= 0 && i >= start - 1; i--) {\n    if (i + 1 < diffs.length) {\n      var left_d = diffs[i];\n      var right_d = diffs[i+1];\n      if (left_d[0] === right_d[1]) {\n        diffs.splice(i, 2, [left_d[0], left_d[1] + right_d[1]]);\n      }\n    }\n  }\n  return diffs;\n}\n\n\n/***/ }),\n/* 55 */\n/***/ (function(module, exports) {\n\nexports = module.exports = typeof Object.keys === 'function'\n  ? Object.keys : shim;\n\nexports.shim = shim;\nfunction shim (obj) {\n  var keys = [];\n  for (var key in obj) keys.push(key);\n  return keys;\n}\n\n\n/***/ }),\n/* 56 */\n/***/ (function(module, exports) {\n\nvar supportsArgumentsClass = (function(){\n  return Object.prototype.toString.call(arguments)\n})() == '[object Arguments]';\n\nexports = module.exports = supportsArgumentsClass ? supported : unsupported;\n\nexports.supported = supported;\nfunction supported(object) {\n  return Object.prototype.toString.call(object) == '[object Arguments]';\n};\n\nexports.unsupported = unsupported;\nfunction unsupported(object){\n  return object &&\n    typeof object == 'object' &&\n    typeof object.length == 'number' &&\n    Object.prototype.hasOwnProperty.call(object, 'callee') &&\n    !Object.prototype.propertyIsEnumerable.call(object, 'callee') ||\n    false;\n};\n\n\n/***/ }),\n/* 57 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _quillDelta = __webpack_require__(4);\n\nvar _quillDelta2 = _interopRequireDefault(_quillDelta);\n\nvar _op = __webpack_require__(20);\n\nvar _op2 = _interopRequireDefault(_op);\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nvar _code = __webpack_require__(13);\n\nvar _code2 = _interopRequireDefault(_code);\n\nvar _cursor = __webpack_require__(31);\n\nvar _cursor2 = _interopRequireDefault(_cursor);\n\nvar _block = __webpack_require__(3);\n\nvar _block2 = _interopRequireDefault(_block);\n\nvar _break = __webpack_require__(14);\n\nvar _break2 = _interopRequireDefault(_break);\n\nvar _clone = __webpack_require__(21);\n\nvar _clone2 = _interopRequireDefault(_clone);\n\nvar _deepEqual = __webpack_require__(12);\n\nvar _deepEqual2 = _interopRequireDefault(_deepEqual);\n\nvar _extend = __webpack_require__(2);\n\nvar _extend2 = _interopRequireDefault(_extend);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar ASCII = /^[ -~]*$/;\n\nvar Editor = function () {\n  function Editor(scroll) {\n    _classCallCheck(this, Editor);\n\n    this.scroll = scroll;\n    this.delta = this.getDelta();\n  }\n\n  _createClass(Editor, [{\n    key: 'applyDelta',\n    value: function applyDelta(delta) {\n      var _this = this;\n\n      var consumeNextNewline = false;\n      this.scroll.update();\n      var scrollLength = this.scroll.length();\n      this.scroll.batchStart();\n      delta = normalizeDelta(delta);\n      delta.reduce(function (index, op) {\n        var length = op.retain || op.delete || op.insert.length || 1;\n        var attributes = op.attributes || {};\n        if (op.insert != null) {\n          if (typeof op.insert === 'string') {\n            var text = op.insert;\n            if (text.endsWith('\\n') && consumeNextNewline) {\n              consumeNextNewline = false;\n              text = text.slice(0, -1);\n            }\n            if (index >= scrollLength && !text.endsWith('\\n')) {\n              consumeNextNewline = true;\n            }\n            _this.scroll.insertAt(index, text);\n\n            var _scroll$line = _this.scroll.line(index),\n                _scroll$line2 = _slicedToArray(_scroll$line, 2),\n                line = _scroll$line2[0],\n                offset = _scroll$line2[1];\n\n            var formats = (0, _extend2.default)({}, (0, _block.bubbleFormats)(line));\n            if (line instanceof _block2.default) {\n              var _line$descendant = line.descendant(_parchment2.default.Leaf, offset),\n                  _line$descendant2 = _slicedToArray(_line$descendant, 1),\n                  leaf = _line$descendant2[0];\n\n              formats = (0, _extend2.default)(formats, (0, _block.bubbleFormats)(leaf));\n            }\n            attributes = _op2.default.attributes.diff(formats, attributes) || {};\n          } else if (_typeof(op.insert) === 'object') {\n            var key = Object.keys(op.insert)[0]; // There should only be one key\n            if (key == null) return index;\n            _this.scroll.insertAt(index, key, op.insert[key]);\n          }\n          scrollLength += length;\n        }\n        Object.keys(attributes).forEach(function (name) {\n          _this.scroll.formatAt(index, length, name, attributes[name]);\n        });\n        return index + length;\n      }, 0);\n      delta.reduce(function (index, op) {\n        if (typeof op.delete === 'number') {\n          _this.scroll.deleteAt(index, op.delete);\n          return index;\n        }\n        return index + (op.retain || op.insert.length || 1);\n      }, 0);\n      this.scroll.batchEnd();\n      return this.update(delta);\n    }\n  }, {\n    key: 'deleteText',\n    value: function deleteText(index, length) {\n      this.scroll.deleteAt(index, length);\n      return this.update(new _quillDelta2.default().retain(index).delete(length));\n    }\n  }, {\n    key: 'formatLine',\n    value: function formatLine(index, length) {\n      var _this2 = this;\n\n      var formats = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n      this.scroll.update();\n      Object.keys(formats).forEach(function (format) {\n        if (_this2.scroll.whitelist != null && !_this2.scroll.whitelist[format]) return;\n        var lines = _this2.scroll.lines(index, Math.max(length, 1));\n        var lengthRemaining = length;\n        lines.forEach(function (line) {\n          var lineLength = line.length();\n          if (!(line instanceof _code2.default)) {\n            line.format(format, formats[format]);\n          } else {\n            var codeIndex = index - line.offset(_this2.scroll);\n            var codeLength = line.newlineIndex(codeIndex + lengthRemaining) - codeIndex + 1;\n            line.formatAt(codeIndex, codeLength, format, formats[format]);\n          }\n          lengthRemaining -= lineLength;\n        });\n      });\n      this.scroll.optimize();\n      return this.update(new _quillDelta2.default().retain(index).retain(length, (0, _clone2.default)(formats)));\n    }\n  }, {\n    key: 'formatText',\n    value: function formatText(index, length) {\n      var _this3 = this;\n\n      var formats = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n      Object.keys(formats).forEach(function (format) {\n        _this3.scroll.formatAt(index, length, format, formats[format]);\n      });\n      return this.update(new _quillDelta2.default().retain(index).retain(length, (0, _clone2.default)(formats)));\n    }\n  }, {\n    key: 'getContents',\n    value: function getContents(index, length) {\n      return this.delta.slice(index, index + length);\n    }\n  }, {\n    key: 'getDelta',\n    value: function getDelta() {\n      return this.scroll.lines().reduce(function (delta, line) {\n        return delta.concat(line.delta());\n      }, new _quillDelta2.default());\n    }\n  }, {\n    key: 'getFormat',\n    value: function getFormat(index) {\n      var length = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\n      var lines = [],\n          leaves = [];\n      if (length === 0) {\n        this.scroll.path(index).forEach(function (path) {\n          var _path = _slicedToArray(path, 1),\n              blot = _path[0];\n\n          if (blot instanceof _block2.default) {\n            lines.push(blot);\n          } else if (blot instanceof _parchment2.default.Leaf) {\n            leaves.push(blot);\n          }\n        });\n      } else {\n        lines = this.scroll.lines(index, length);\n        leaves = this.scroll.descendants(_parchment2.default.Leaf, index, length);\n      }\n      var formatsArr = [lines, leaves].map(function (blots) {\n        if (blots.length === 0) return {};\n        var formats = (0, _block.bubbleFormats)(blots.shift());\n        while (Object.keys(formats).length > 0) {\n          var blot = blots.shift();\n          if (blot == null) return formats;\n          formats = combineFormats((0, _block.bubbleFormats)(blot), formats);\n        }\n        return formats;\n      });\n      return _extend2.default.apply(_extend2.default, formatsArr);\n    }\n  }, {\n    key: 'getText',\n    value: function getText(index, length) {\n      return this.getContents(index, length).filter(function (op) {\n        return typeof op.insert === 'string';\n      }).map(function (op) {\n        return op.insert;\n      }).join('');\n    }\n  }, {\n    key: 'insertEmbed',\n    value: function insertEmbed(index, embed, value) {\n      this.scroll.insertAt(index, embed, value);\n      return this.update(new _quillDelta2.default().retain(index).insert(_defineProperty({}, embed, value)));\n    }\n  }, {\n    key: 'insertText',\n    value: function insertText(index, text) {\n      var _this4 = this;\n\n      var formats = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n      text = text.replace(/\\r\\n/g, '\\n').replace(/\\r/g, '\\n');\n      this.scroll.insertAt(index, text);\n      Object.keys(formats).forEach(function (format) {\n        _this4.scroll.formatAt(index, text.length, format, formats[format]);\n      });\n      return this.update(new _quillDelta2.default().retain(index).insert(text, (0, _clone2.default)(formats)));\n    }\n  }, {\n    key: 'isBlank',\n    value: function isBlank() {\n      if (this.scroll.children.length == 0) return true;\n      if (this.scroll.children.length > 1) return false;\n      var block = this.scroll.children.head;\n      if (block.statics.blotName !== _block2.default.blotName) return false;\n      if (block.children.length > 1) return false;\n      return block.children.head instanceof _break2.default;\n    }\n  }, {\n    key: 'removeFormat',\n    value: function removeFormat(index, length) {\n      var text = this.getText(index, length);\n\n      var _scroll$line3 = this.scroll.line(index + length),\n          _scroll$line4 = _slicedToArray(_scroll$line3, 2),\n          line = _scroll$line4[0],\n          offset = _scroll$line4[1];\n\n      var suffixLength = 0,\n          suffix = new _quillDelta2.default();\n      if (line != null) {\n        if (!(line instanceof _code2.default)) {\n          suffixLength = line.length() - offset;\n        } else {\n          suffixLength = line.newlineIndex(offset) - offset + 1;\n        }\n        suffix = line.delta().slice(offset, offset + suffixLength - 1).insert('\\n');\n      }\n      var contents = this.getContents(index, length + suffixLength);\n      var diff = contents.diff(new _quillDelta2.default().insert(text).concat(suffix));\n      var delta = new _quillDelta2.default().retain(index).concat(diff);\n      return this.applyDelta(delta);\n    }\n  }, {\n    key: 'update',\n    value: function update(change) {\n      var mutations = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n      var cursorIndex = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined;\n\n      var oldDelta = this.delta;\n      if (mutations.length === 1 && mutations[0].type === 'characterData' && mutations[0].target.data.match(ASCII) && _parchment2.default.find(mutations[0].target)) {\n        // Optimization for character changes\n        var textBlot = _parchment2.default.find(mutations[0].target);\n        var formats = (0, _block.bubbleFormats)(textBlot);\n        var index = textBlot.offset(this.scroll);\n        var oldValue = mutations[0].oldValue.replace(_cursor2.default.CONTENTS, '');\n        var oldText = new _quillDelta2.default().insert(oldValue);\n        var newText = new _quillDelta2.default().insert(textBlot.value());\n        var diffDelta = new _quillDelta2.default().retain(index).concat(oldText.diff(newText, cursorIndex));\n        change = diffDelta.reduce(function (delta, op) {\n          if (op.insert) {\n            return delta.insert(op.insert, formats);\n          } else {\n            return delta.push(op);\n          }\n        }, new _quillDelta2.default());\n        this.delta = oldDelta.compose(change);\n      } else {\n        this.delta = this.getDelta();\n        if (!change || !(0, _deepEqual2.default)(oldDelta.compose(change), this.delta)) {\n          change = oldDelta.diff(this.delta, cursorIndex);\n        }\n      }\n      return change;\n    }\n  }]);\n\n  return Editor;\n}();\n\nfunction combineFormats(formats, combined) {\n  return Object.keys(combined).reduce(function (merged, name) {\n    if (formats[name] == null) return merged;\n    if (combined[name] === formats[name]) {\n      merged[name] = combined[name];\n    } else if (Array.isArray(combined[name])) {\n      if (combined[name].indexOf(formats[name]) < 0) {\n        merged[name] = combined[name].concat([formats[name]]);\n      }\n    } else {\n      merged[name] = [combined[name], formats[name]];\n    }\n    return merged;\n  }, {});\n}\n\nfunction normalizeDelta(delta) {\n  return delta.reduce(function (delta, op) {\n    if (op.insert === 1) {\n      var attributes = (0, _clone2.default)(op.attributes);\n      delete attributes['image'];\n      return delta.insert({ image: op.attributes.image }, attributes);\n    }\n    if (op.attributes != null && (op.attributes.list === true || op.attributes.bullet === true)) {\n      op = (0, _clone2.default)(op);\n      if (op.attributes.list) {\n        op.attributes.list = 'ordered';\n      } else {\n        op.attributes.list = 'bullet';\n        delete op.attributes.bullet;\n      }\n    }\n    if (typeof op.insert === 'string') {\n      var text = op.insert.replace(/\\r\\n/g, '\\n').replace(/\\r/g, '\\n');\n      return delta.insert(text, op.attributes);\n    }\n    return delta.push(op);\n  }, new _quillDelta2.default());\n}\n\nexports.default = Editor;\n\n/***/ }),\n/* 58 */\n/***/ (function(module, exports) {\n\n'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n  , prefix = '~';\n\n/**\n * Constructor to create a storage for our `EE` objects.\n * An `Events` instance is a plain object whose properties are event names.\n *\n * @constructor\n * @api private\n */\nfunction Events() {}\n\n//\n// We try to not inherit from `Object.prototype`. In some engines creating an\n// instance in this way is faster than calling `Object.create(null)` directly.\n// If `Object.create(null)` is not supported we prefix the event names with a\n// character to make sure that the built-in object properties are not\n// overridden or used as an attack vector.\n//\nif (Object.create) {\n  Events.prototype = Object.create(null);\n\n  //\n  // This hack is needed because the `__proto__` property is still inherited in\n  // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n  //\n  if (!new Events().__proto__) prefix = false;\n}\n\n/**\n * Representation of a single event listener.\n *\n * @param {Function} fn The listener function.\n * @param {Mixed} context The context to invoke the listener with.\n * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n * @constructor\n * @api private\n */\nfunction EE(fn, context, once) {\n  this.fn = fn;\n  this.context = context;\n  this.once = once || false;\n}\n\n/**\n * Minimal `EventEmitter` interface that is molded against the Node.js\n * `EventEmitter` interface.\n *\n * @constructor\n * @api public\n */\nfunction EventEmitter() {\n  this._events = new Events();\n  this._eventsCount = 0;\n}\n\n/**\n * Return an array listing the events for which the emitter has registered\n * listeners.\n *\n * @returns {Array}\n * @api public\n */\nEventEmitter.prototype.eventNames = function eventNames() {\n  var names = []\n    , events\n    , name;\n\n  if (this._eventsCount === 0) return names;\n\n  for (name in (events = this._events)) {\n    if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n  }\n\n  if (Object.getOwnPropertySymbols) {\n    return names.concat(Object.getOwnPropertySymbols(events));\n  }\n\n  return names;\n};\n\n/**\n * Return the listeners registered for a given event.\n *\n * @param {String|Symbol} event The event name.\n * @param {Boolean} exists Only check if there are listeners.\n * @returns {Array|Boolean}\n * @api public\n */\nEventEmitter.prototype.listeners = function listeners(event, exists) {\n  var evt = prefix ? prefix + event : event\n    , available = this._events[evt];\n\n  if (exists) return !!available;\n  if (!available) return [];\n  if (available.fn) return [available.fn];\n\n  for (var i = 0, l = available.length, ee = new Array(l); i < l; i++) {\n    ee[i] = available[i].fn;\n  }\n\n  return ee;\n};\n\n/**\n * Calls each of the listeners registered for a given event.\n *\n * @param {String|Symbol} event The event name.\n * @returns {Boolean} `true` if the event had listeners, else `false`.\n * @api public\n */\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n  var evt = prefix ? prefix + event : event;\n\n  if (!this._events[evt]) return false;\n\n  var listeners = this._events[evt]\n    , len = arguments.length\n    , args\n    , i;\n\n  if (listeners.fn) {\n    if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n    switch (len) {\n      case 1: return listeners.fn.call(listeners.context), true;\n      case 2: return listeners.fn.call(listeners.context, a1), true;\n      case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n      case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n      case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n      case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n    }\n\n    for (i = 1, args = new Array(len -1); i < len; i++) {\n      args[i - 1] = arguments[i];\n    }\n\n    listeners.fn.apply(listeners.context, args);\n  } else {\n    var length = listeners.length\n      , j;\n\n    for (i = 0; i < length; i++) {\n      if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n      switch (len) {\n        case 1: listeners[i].fn.call(listeners[i].context); break;\n        case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n        case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n        case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n        default:\n          if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n            args[j - 1] = arguments[j];\n          }\n\n          listeners[i].fn.apply(listeners[i].context, args);\n      }\n    }\n  }\n\n  return true;\n};\n\n/**\n * Add a listener for a given event.\n *\n * @param {String|Symbol} event The event name.\n * @param {Function} fn The listener function.\n * @param {Mixed} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @api public\n */\nEventEmitter.prototype.on = function on(event, fn, context) {\n  var listener = new EE(fn, context || this)\n    , evt = prefix ? prefix + event : event;\n\n  if (!this._events[evt]) this._events[evt] = listener, this._eventsCount++;\n  else if (!this._events[evt].fn) this._events[evt].push(listener);\n  else this._events[evt] = [this._events[evt], listener];\n\n  return this;\n};\n\n/**\n * Add a one-time listener for a given event.\n *\n * @param {String|Symbol} event The event name.\n * @param {Function} fn The listener function.\n * @param {Mixed} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @api public\n */\nEventEmitter.prototype.once = function once(event, fn, context) {\n  var listener = new EE(fn, context || this, true)\n    , evt = prefix ? prefix + event : event;\n\n  if (!this._events[evt]) this._events[evt] = listener, this._eventsCount++;\n  else if (!this._events[evt].fn) this._events[evt].push(listener);\n  else this._events[evt] = [this._events[evt], listener];\n\n  return this;\n};\n\n/**\n * Remove the listeners of a given event.\n *\n * @param {String|Symbol} event The event name.\n * @param {Function} fn Only remove the listeners that match this function.\n * @param {Mixed} context Only remove the listeners that have this context.\n * @param {Boolean} once Only remove one-time listeners.\n * @returns {EventEmitter} `this`.\n * @api public\n */\nEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n  var evt = prefix ? prefix + event : event;\n\n  if (!this._events[evt]) return this;\n  if (!fn) {\n    if (--this._eventsCount === 0) this._events = new Events();\n    else delete this._events[evt];\n    return this;\n  }\n\n  var listeners = this._events[evt];\n\n  if (listeners.fn) {\n    if (\n         listeners.fn === fn\n      && (!once || listeners.once)\n      && (!context || listeners.context === context)\n    ) {\n      if (--this._eventsCount === 0) this._events = new Events();\n      else delete this._events[evt];\n    }\n  } else {\n    for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n      if (\n           listeners[i].fn !== fn\n        || (once && !listeners[i].once)\n        || (context && listeners[i].context !== context)\n      ) {\n        events.push(listeners[i]);\n      }\n    }\n\n    //\n    // Reset the array, or remove it completely if we have no more listeners.\n    //\n    if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n    else if (--this._eventsCount === 0) this._events = new Events();\n    else delete this._events[evt];\n  }\n\n  return this;\n};\n\n/**\n * Remove all listeners, or those of the specified event.\n *\n * @param {String|Symbol} [event] The event name.\n * @returns {EventEmitter} `this`.\n * @api public\n */\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n  var evt;\n\n  if (event) {\n    evt = prefix ? prefix + event : event;\n    if (this._events[evt]) {\n      if (--this._eventsCount === 0) this._events = new Events();\n      else delete this._events[evt];\n    }\n  } else {\n    this._events = new Events();\n    this._eventsCount = 0;\n  }\n\n  return this;\n};\n\n//\n// Alias methods names because people roll like that.\n//\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n//\n// This function doesn't apply anymore.\n//\nEventEmitter.prototype.setMaxListeners = function setMaxListeners() {\n  return this;\n};\n\n//\n// Expose the prefix.\n//\nEventEmitter.prefixed = prefix;\n\n//\n// Allow `EventEmitter` to be imported as module namespace.\n//\nEventEmitter.EventEmitter = EventEmitter;\n\n//\n// Expose the module.\n//\nif ('undefined' !== typeof module) {\n  module.exports = EventEmitter;\n}\n\n\n/***/ }),\n/* 59 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nvar _emitter = __webpack_require__(9);\n\nvar _emitter2 = _interopRequireDefault(_emitter);\n\nvar _block = __webpack_require__(3);\n\nvar _block2 = _interopRequireDefault(_block);\n\nvar _break = __webpack_require__(14);\n\nvar _break2 = _interopRequireDefault(_break);\n\nvar _code = __webpack_require__(13);\n\nvar _code2 = _interopRequireDefault(_code);\n\nvar _container = __webpack_require__(23);\n\nvar _container2 = _interopRequireDefault(_container);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nfunction isLine(blot) {\n  return blot instanceof _block2.default || blot instanceof _block.BlockEmbed;\n}\n\nvar Scroll = function (_Parchment$Scroll) {\n  _inherits(Scroll, _Parchment$Scroll);\n\n  function Scroll(domNode, config) {\n    _classCallCheck(this, Scroll);\n\n    var _this = _possibleConstructorReturn(this, (Scroll.__proto__ || Object.getPrototypeOf(Scroll)).call(this, domNode));\n\n    _this.emitter = config.emitter;\n    if (Array.isArray(config.whitelist)) {\n      _this.whitelist = config.whitelist.reduce(function (whitelist, format) {\n        whitelist[format] = true;\n        return whitelist;\n      }, {});\n    }\n    // Some reason fixes composition issues with character languages in Windows/Chrome, Safari\n    _this.domNode.addEventListener('DOMNodeInserted', function () {});\n    _this.optimize();\n    _this.enable();\n    return _this;\n  }\n\n  _createClass(Scroll, [{\n    key: 'batchStart',\n    value: function batchStart() {\n      this.batch = true;\n    }\n  }, {\n    key: 'batchEnd',\n    value: function batchEnd() {\n      this.batch = false;\n      this.optimize();\n    }\n  }, {\n    key: 'deleteAt',\n    value: function deleteAt(index, length) {\n      var _line = this.line(index),\n          _line2 = _slicedToArray(_line, 2),\n          first = _line2[0],\n          offset = _line2[1];\n\n      var _line3 = this.line(index + length),\n          _line4 = _slicedToArray(_line3, 1),\n          last = _line4[0];\n\n      _get(Scroll.prototype.__proto__ || Object.getPrototypeOf(Scroll.prototype), 'deleteAt', this).call(this, index, length);\n      if (last != null && first !== last && offset > 0) {\n        if (first instanceof _block.BlockEmbed || last instanceof _block.BlockEmbed) {\n          this.optimize();\n          return;\n        }\n        if (first instanceof _code2.default) {\n          var newlineIndex = first.newlineIndex(first.length(), true);\n          if (newlineIndex > -1) {\n            first = first.split(newlineIndex + 1);\n            if (first === last) {\n              this.optimize();\n              return;\n            }\n          }\n        } else if (last instanceof _code2.default) {\n          var _newlineIndex = last.newlineIndex(0);\n          if (_newlineIndex > -1) {\n            last.split(_newlineIndex + 1);\n          }\n        }\n        var ref = last.children.head instanceof _break2.default ? null : last.children.head;\n        first.moveChildren(last, ref);\n        first.remove();\n      }\n      this.optimize();\n    }\n  }, {\n    key: 'enable',\n    value: function enable() {\n      var enabled = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n\n      this.domNode.setAttribute('contenteditable', enabled);\n    }\n  }, {\n    key: 'formatAt',\n    value: function formatAt(index, length, format, value) {\n      if (this.whitelist != null && !this.whitelist[format]) return;\n      _get(Scroll.prototype.__proto__ || Object.getPrototypeOf(Scroll.prototype), 'formatAt', this).call(this, index, length, format, value);\n      this.optimize();\n    }\n  }, {\n    key: 'insertAt',\n    value: function insertAt(index, value, def) {\n      if (def != null && this.whitelist != null && !this.whitelist[value]) return;\n      if (index >= this.length()) {\n        if (def == null || _parchment2.default.query(value, _parchment2.default.Scope.BLOCK) == null) {\n          var blot = _parchment2.default.create(this.statics.defaultChild);\n          this.appendChild(blot);\n          if (def == null && value.endsWith('\\n')) {\n            value = value.slice(0, -1);\n          }\n          blot.insertAt(0, value, def);\n        } else {\n          var embed = _parchment2.default.create(value, def);\n          this.appendChild(embed);\n        }\n      } else {\n        _get(Scroll.prototype.__proto__ || Object.getPrototypeOf(Scroll.prototype), 'insertAt', this).call(this, index, value, def);\n      }\n      this.optimize();\n    }\n  }, {\n    key: 'insertBefore',\n    value: function insertBefore(blot, ref) {\n      if (blot.statics.scope === _parchment2.default.Scope.INLINE_BLOT) {\n        var wrapper = _parchment2.default.create(this.statics.defaultChild);\n        wrapper.appendChild(blot);\n        blot = wrapper;\n      }\n      _get(Scroll.prototype.__proto__ || Object.getPrototypeOf(Scroll.prototype), 'insertBefore', this).call(this, blot, ref);\n    }\n  }, {\n    key: 'leaf',\n    value: function leaf(index) {\n      return this.path(index).pop() || [null, -1];\n    }\n  }, {\n    key: 'line',\n    value: function line(index) {\n      if (index === this.length()) {\n        return this.line(index - 1);\n      }\n      return this.descendant(isLine, index);\n    }\n  }, {\n    key: 'lines',\n    value: function lines() {\n      var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n      var length = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : Number.MAX_VALUE;\n\n      var getLines = function getLines(blot, index, length) {\n        var lines = [],\n            lengthLeft = length;\n        blot.children.forEachAt(index, length, function (child, index, length) {\n          if (isLine(child)) {\n            lines.push(child);\n          } else if (child instanceof _parchment2.default.Container) {\n            lines = lines.concat(getLines(child, index, lengthLeft));\n          }\n          lengthLeft -= length;\n        });\n        return lines;\n      };\n      return getLines(this, index, length);\n    }\n  }, {\n    key: 'optimize',\n    value: function optimize() {\n      var mutations = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n      var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n      if (this.batch === true) return;\n      _get(Scroll.prototype.__proto__ || Object.getPrototypeOf(Scroll.prototype), 'optimize', this).call(this, mutations, context);\n      if (mutations.length > 0) {\n        this.emitter.emit(_emitter2.default.events.SCROLL_OPTIMIZE, mutations, context);\n      }\n    }\n  }, {\n    key: 'path',\n    value: function path(index) {\n      return _get(Scroll.prototype.__proto__ || Object.getPrototypeOf(Scroll.prototype), 'path', this).call(this, index).slice(1); // Exclude self\n    }\n  }, {\n    key: 'update',\n    value: function update(mutations) {\n      if (this.batch === true) return;\n      var source = _emitter2.default.sources.USER;\n      if (typeof mutations === 'string') {\n        source = mutations;\n      }\n      if (!Array.isArray(mutations)) {\n        mutations = this.observer.takeRecords();\n      }\n      if (mutations.length > 0) {\n        this.emitter.emit(_emitter2.default.events.SCROLL_BEFORE_UPDATE, source, mutations);\n      }\n      _get(Scroll.prototype.__proto__ || Object.getPrototypeOf(Scroll.prototype), 'update', this).call(this, mutations.concat([])); // pass copy\n      if (mutations.length > 0) {\n        this.emitter.emit(_emitter2.default.events.SCROLL_UPDATE, source, mutations);\n      }\n    }\n  }]);\n\n  return Scroll;\n}(_parchment2.default.Scroll);\n\nScroll.blotName = 'scroll';\nScroll.className = 'ql-editor';\nScroll.tagName = 'DIV';\nScroll.defaultChild = 'block';\nScroll.allowedChildren = [_block2.default, _block.BlockEmbed, _container2.default];\n\nexports.default = Scroll;\n\n/***/ }),\n/* 60 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.matchText = exports.matchSpacing = exports.matchNewline = exports.matchBlot = exports.matchAttributor = exports.default = undefined;\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _extend2 = __webpack_require__(2);\n\nvar _extend3 = _interopRequireDefault(_extend2);\n\nvar _quillDelta = __webpack_require__(4);\n\nvar _quillDelta2 = _interopRequireDefault(_quillDelta);\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nvar _quill = __webpack_require__(6);\n\nvar _quill2 = _interopRequireDefault(_quill);\n\nvar _logger = __webpack_require__(10);\n\nvar _logger2 = _interopRequireDefault(_logger);\n\nvar _module = __webpack_require__(7);\n\nvar _module2 = _interopRequireDefault(_module);\n\nvar _align = __webpack_require__(34);\n\nvar _background = __webpack_require__(35);\n\nvar _code = __webpack_require__(13);\n\nvar _code2 = _interopRequireDefault(_code);\n\nvar _color = __webpack_require__(24);\n\nvar _direction = __webpack_require__(36);\n\nvar _font = __webpack_require__(37);\n\nvar _size = __webpack_require__(38);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar debug = (0, _logger2.default)('quill:clipboard');\n\nvar DOM_KEY = '__ql-matcher';\n\nvar CLIPBOARD_CONFIG = [[Node.TEXT_NODE, matchText], [Node.TEXT_NODE, matchNewline], ['br', matchBreak], [Node.ELEMENT_NODE, matchNewline], [Node.ELEMENT_NODE, matchBlot], [Node.ELEMENT_NODE, matchSpacing], [Node.ELEMENT_NODE, matchAttributor], [Node.ELEMENT_NODE, matchStyles], ['li', matchIndent], ['b', matchAlias.bind(matchAlias, 'bold')], ['i', matchAlias.bind(matchAlias, 'italic')], ['style', matchIgnore]];\n\nvar ATTRIBUTE_ATTRIBUTORS = [_align.AlignAttribute, _direction.DirectionAttribute].reduce(function (memo, attr) {\n  memo[attr.keyName] = attr;\n  return memo;\n}, {});\n\nvar STYLE_ATTRIBUTORS = [_align.AlignStyle, _background.BackgroundStyle, _color.ColorStyle, _direction.DirectionStyle, _font.FontStyle, _size.SizeStyle].reduce(function (memo, attr) {\n  memo[attr.keyName] = attr;\n  return memo;\n}, {});\n\nvar Clipboard = function (_Module) {\n  _inherits(Clipboard, _Module);\n\n  function Clipboard(quill, options) {\n    _classCallCheck(this, Clipboard);\n\n    var _this = _possibleConstructorReturn(this, (Clipboard.__proto__ || Object.getPrototypeOf(Clipboard)).call(this, quill, options));\n\n    _this.quill.root.addEventListener('paste', _this.onPaste.bind(_this));\n    _this.container = _this.quill.addContainer('ql-clipboard');\n    _this.container.setAttribute('contenteditable', true);\n    _this.container.setAttribute('tabindex', -1);\n    _this.matchers = [];\n    CLIPBOARD_CONFIG.concat(_this.options.matchers).forEach(function (_ref) {\n      var _ref2 = _slicedToArray(_ref, 2),\n          selector = _ref2[0],\n          matcher = _ref2[1];\n\n      if (!options.matchVisual && matcher === matchSpacing) return;\n      _this.addMatcher(selector, matcher);\n    });\n    return _this;\n  }\n\n  _createClass(Clipboard, [{\n    key: 'addMatcher',\n    value: function addMatcher(selector, matcher) {\n      this.matchers.push([selector, matcher]);\n    }\n  }, {\n    key: 'convert',\n    value: function convert(html) {\n      if (typeof html === 'string') {\n        this.container.innerHTML = html.replace(/\\>\\r?\\n +\\</g, '><'); // Remove spaces between tags\n        return this.convert();\n      }\n      var formats = this.quill.getFormat(this.quill.selection.savedRange.index);\n      if (formats[_code2.default.blotName]) {\n        var text = this.container.innerText;\n        this.container.innerHTML = '';\n        return new _quillDelta2.default().insert(text, _defineProperty({}, _code2.default.blotName, formats[_code2.default.blotName]));\n      }\n\n      var _prepareMatching = this.prepareMatching(),\n          _prepareMatching2 = _slicedToArray(_prepareMatching, 2),\n          elementMatchers = _prepareMatching2[0],\n          textMatchers = _prepareMatching2[1];\n\n      var delta = traverse(this.container, elementMatchers, textMatchers);\n      // Remove trailing newline\n      if (deltaEndsWith(delta, '\\n') && delta.ops[delta.ops.length - 1].attributes == null) {\n        delta = delta.compose(new _quillDelta2.default().retain(delta.length() - 1).delete(1));\n      }\n      debug.log('convert', this.container.innerHTML, delta);\n      this.container.innerHTML = '';\n      return delta;\n    }\n  }, {\n    key: 'dangerouslyPasteHTML',\n    value: function dangerouslyPasteHTML(index, html) {\n      var source = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : _quill2.default.sources.API;\n\n      if (typeof index === 'string') {\n        this.quill.setContents(this.convert(index), html);\n        this.quill.setSelection(0, _quill2.default.sources.SILENT);\n      } else {\n        var paste = this.convert(html);\n        this.quill.updateContents(new _quillDelta2.default().retain(index).concat(paste), source);\n        this.quill.setSelection(index + paste.length(), _quill2.default.sources.SILENT);\n      }\n    }\n  }, {\n    key: 'onPaste',\n    value: function onPaste(e) {\n      var _this2 = this;\n\n      if (e.defaultPrevented || !this.quill.isEnabled()) return;\n      var range = this.quill.getSelection();\n      var delta = new _quillDelta2.default().retain(range.index);\n      var scrollTop = this.quill.scrollingContainer.scrollTop;\n      this.container.focus();\n      this.quill.selection.update(_quill2.default.sources.SILENT);\n      setTimeout(function () {\n        delta = delta.concat(_this2.convert()).delete(range.length);\n        _this2.quill.updateContents(delta, _quill2.default.sources.USER);\n        // range.length contributes to delta.length()\n        _this2.quill.setSelection(delta.length() - range.length, _quill2.default.sources.SILENT);\n        _this2.quill.scrollingContainer.scrollTop = scrollTop;\n        _this2.quill.focus();\n      }, 1);\n    }\n  }, {\n    key: 'prepareMatching',\n    value: function prepareMatching() {\n      var _this3 = this;\n\n      var elementMatchers = [],\n          textMatchers = [];\n      this.matchers.forEach(function (pair) {\n        var _pair = _slicedToArray(pair, 2),\n            selector = _pair[0],\n            matcher = _pair[1];\n\n        switch (selector) {\n          case Node.TEXT_NODE:\n            textMatchers.push(matcher);\n            break;\n          case Node.ELEMENT_NODE:\n            elementMatchers.push(matcher);\n            break;\n          default:\n            [].forEach.call(_this3.container.querySelectorAll(selector), function (node) {\n              // TODO use weakmap\n              node[DOM_KEY] = node[DOM_KEY] || [];\n              node[DOM_KEY].push(matcher);\n            });\n            break;\n        }\n      });\n      return [elementMatchers, textMatchers];\n    }\n  }]);\n\n  return Clipboard;\n}(_module2.default);\n\nClipboard.DEFAULTS = {\n  matchers: [],\n  matchVisual: true\n};\n\nfunction applyFormat(delta, format, value) {\n  if ((typeof format === 'undefined' ? 'undefined' : _typeof(format)) === 'object') {\n    return Object.keys(format).reduce(function (delta, key) {\n      return applyFormat(delta, key, format[key]);\n    }, delta);\n  } else {\n    return delta.reduce(function (delta, op) {\n      if (op.attributes && op.attributes[format]) {\n        return delta.push(op);\n      } else {\n        return delta.insert(op.insert, (0, _extend3.default)({}, _defineProperty({}, format, value), op.attributes));\n      }\n    }, new _quillDelta2.default());\n  }\n}\n\nfunction computeStyle(node) {\n  if (node.nodeType !== Node.ELEMENT_NODE) return {};\n  var DOM_KEY = '__ql-computed-style';\n  return node[DOM_KEY] || (node[DOM_KEY] = window.getComputedStyle(node));\n}\n\nfunction deltaEndsWith(delta, text) {\n  var endText = \"\";\n  for (var i = delta.ops.length - 1; i >= 0 && endText.length < text.length; --i) {\n    var op = delta.ops[i];\n    if (typeof op.insert !== 'string') break;\n    endText = op.insert + endText;\n  }\n  return endText.slice(-1 * text.length) === text;\n}\n\nfunction isLine(node) {\n  if (node.childNodes.length === 0) return false; // Exclude embed blocks\n  var style = computeStyle(node);\n  return ['block', 'list-item'].indexOf(style.display) > -1;\n}\n\nfunction traverse(node, elementMatchers, textMatchers) {\n  // Post-order\n  if (node.nodeType === node.TEXT_NODE) {\n    return textMatchers.reduce(function (delta, matcher) {\n      return matcher(node, delta);\n    }, new _quillDelta2.default());\n  } else if (node.nodeType === node.ELEMENT_NODE) {\n    return [].reduce.call(node.childNodes || [], function (delta, childNode) {\n      var childrenDelta = traverse(childNode, elementMatchers, textMatchers);\n      if (childNode.nodeType === node.ELEMENT_NODE) {\n        childrenDelta = elementMatchers.reduce(function (childrenDelta, matcher) {\n          return matcher(childNode, childrenDelta);\n        }, childrenDelta);\n        childrenDelta = (childNode[DOM_KEY] || []).reduce(function (childrenDelta, matcher) {\n          return matcher(childNode, childrenDelta);\n        }, childrenDelta);\n      }\n      return delta.concat(childrenDelta);\n    }, new _quillDelta2.default());\n  } else {\n    return new _quillDelta2.default();\n  }\n}\n\nfunction matchAlias(format, node, delta) {\n  return applyFormat(delta, format, true);\n}\n\nfunction matchAttributor(node, delta) {\n  var attributes = _parchment2.default.Attributor.Attribute.keys(node);\n  var classes = _parchment2.default.Attributor.Class.keys(node);\n  var styles = _parchment2.default.Attributor.Style.keys(node);\n  var formats = {};\n  attributes.concat(classes).concat(styles).forEach(function (name) {\n    var attr = _parchment2.default.query(name, _parchment2.default.Scope.ATTRIBUTE);\n    if (attr != null) {\n      formats[attr.attrName] = attr.value(node);\n      if (formats[attr.attrName]) return;\n    }\n    attr = ATTRIBUTE_ATTRIBUTORS[name];\n    if (attr != null && (attr.attrName === name || attr.keyName === name)) {\n      formats[attr.attrName] = attr.value(node) || undefined;\n    }\n    attr = STYLE_ATTRIBUTORS[name];\n    if (attr != null && (attr.attrName === name || attr.keyName === name)) {\n      attr = STYLE_ATTRIBUTORS[name];\n      formats[attr.attrName] = attr.value(node) || undefined;\n    }\n  });\n  if (Object.keys(formats).length > 0) {\n    delta = applyFormat(delta, formats);\n  }\n  return delta;\n}\n\nfunction matchBlot(node, delta) {\n  var match = _parchment2.default.query(node);\n  if (match == null) return delta;\n  if (match.prototype instanceof _parchment2.default.Embed) {\n    var embed = {};\n    var value = match.value(node);\n    if (value != null) {\n      embed[match.blotName] = value;\n      delta = new _quillDelta2.default().insert(embed, match.formats(node));\n    }\n  } else if (typeof match.formats === 'function') {\n    delta = applyFormat(delta, match.blotName, match.formats(node));\n  }\n  return delta;\n}\n\nfunction matchBreak(node, delta) {\n  if (!deltaEndsWith(delta, '\\n')) {\n    delta.insert('\\n');\n  }\n  return delta;\n}\n\nfunction matchIgnore() {\n  return new _quillDelta2.default();\n}\n\nfunction matchIndent(node, delta) {\n  var match = _parchment2.default.query(node);\n  if (match == null || match.blotName !== 'list-item' || !deltaEndsWith(delta, '\\n')) {\n    return delta;\n  }\n  var indent = -1,\n      parent = node.parentNode;\n  while (!parent.classList.contains('ql-clipboard')) {\n    if ((_parchment2.default.query(parent) || {}).blotName === 'list') {\n      indent += 1;\n    }\n    parent = parent.parentNode;\n  }\n  if (indent <= 0) return delta;\n  return delta.compose(new _quillDelta2.default().retain(delta.length() - 1).retain(1, { indent: indent }));\n}\n\nfunction matchNewline(node, delta) {\n  if (!deltaEndsWith(delta, '\\n')) {\n    if (isLine(node) || delta.length() > 0 && node.nextSibling && isLine(node.nextSibling)) {\n      delta.insert('\\n');\n    }\n  }\n  return delta;\n}\n\nfunction matchSpacing(node, delta) {\n  if (isLine(node) && node.nextElementSibling != null && !deltaEndsWith(delta, '\\n\\n')) {\n    var nodeHeight = node.offsetHeight + parseFloat(computeStyle(node).marginTop) + parseFloat(computeStyle(node).marginBottom);\n    if (node.nextElementSibling.offsetTop > node.offsetTop + nodeHeight * 1.5) {\n      delta.insert('\\n');\n    }\n  }\n  return delta;\n}\n\nfunction matchStyles(node, delta) {\n  var formats = {};\n  var style = node.style || {};\n  if (style.fontStyle && computeStyle(node).fontStyle === 'italic') {\n    formats.italic = true;\n  }\n  if (style.fontWeight && (computeStyle(node).fontWeight.startsWith('bold') || parseInt(computeStyle(node).fontWeight) >= 700)) {\n    formats.bold = true;\n  }\n  if (Object.keys(formats).length > 0) {\n    delta = applyFormat(delta, formats);\n  }\n  if (parseFloat(style.textIndent || 0) > 0) {\n    // Could be 0.5in\n    delta = new _quillDelta2.default().insert('\\t').concat(delta);\n  }\n  return delta;\n}\n\nfunction matchText(node, delta) {\n  var text = node.data;\n  // Word represents empty line with <o:p>&nbsp;</o:p>\n  if (node.parentNode.tagName === 'O:P') {\n    return delta.insert(text.trim());\n  }\n  if (text.trim().length === 0 && node.parentNode.classList.contains('ql-clipboard')) {\n    return delta;\n  }\n  if (!computeStyle(node.parentNode).whiteSpace.startsWith('pre')) {\n    // eslint-disable-next-line func-style\n    var replacer = function replacer(collapse, match) {\n      match = match.replace(/[^\\u00a0]/g, ''); // \\u00a0 is nbsp;\n      return match.length < 1 && collapse ? ' ' : match;\n    };\n    text = text.replace(/\\r\\n/g, ' ').replace(/\\n/g, ' ');\n    text = text.replace(/\\s\\s+/g, replacer.bind(replacer, true)); // collapse whitespace\n    if (node.previousSibling == null && isLine(node.parentNode) || node.previousSibling != null && isLine(node.previousSibling)) {\n      text = text.replace(/^\\s+/, replacer.bind(replacer, false));\n    }\n    if (node.nextSibling == null && isLine(node.parentNode) || node.nextSibling != null && isLine(node.nextSibling)) {\n      text = text.replace(/\\s+$/, replacer.bind(replacer, false));\n    }\n  }\n  return delta.insert(text);\n}\n\nexports.default = Clipboard;\nexports.matchAttributor = matchAttributor;\nexports.matchBlot = matchBlot;\nexports.matchNewline = matchNewline;\nexports.matchSpacing = matchSpacing;\nexports.matchText = matchText;\n\n/***/ }),\n/* 61 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.getLastChangeIndex = exports.default = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nvar _quill = __webpack_require__(6);\n\nvar _quill2 = _interopRequireDefault(_quill);\n\nvar _module = __webpack_require__(7);\n\nvar _module2 = _interopRequireDefault(_module);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar History = function (_Module) {\n  _inherits(History, _Module);\n\n  function History(quill, options) {\n    _classCallCheck(this, History);\n\n    var _this = _possibleConstructorReturn(this, (History.__proto__ || Object.getPrototypeOf(History)).call(this, quill, options));\n\n    _this.lastRecorded = 0;\n    _this.ignoreChange = false;\n    _this.clear();\n    _this.quill.on(_quill2.default.events.EDITOR_CHANGE, function (eventName, delta, oldDelta, source) {\n      if (eventName !== _quill2.default.events.TEXT_CHANGE || _this.ignoreChange) return;\n      if (!_this.options.userOnly || source === _quill2.default.sources.USER) {\n        _this.record(delta, oldDelta);\n      } else {\n        _this.transform(delta);\n      }\n    });\n    _this.quill.keyboard.addBinding({ key: 'Z', shortKey: true }, _this.undo.bind(_this));\n    _this.quill.keyboard.addBinding({ key: 'Z', shortKey: true, shiftKey: true }, _this.redo.bind(_this));\n    if (/Win/i.test(navigator.platform)) {\n      _this.quill.keyboard.addBinding({ key: 'Y', shortKey: true }, _this.redo.bind(_this));\n    }\n    return _this;\n  }\n\n  _createClass(History, [{\n    key: 'change',\n    value: function change(source, dest) {\n      if (this.stack[source].length === 0) return;\n      var delta = this.stack[source].pop();\n      this.stack[dest].push(delta);\n      this.lastRecorded = 0;\n      this.ignoreChange = true;\n      this.quill.updateContents(delta[source], _quill2.default.sources.USER);\n      this.ignoreChange = false;\n      var index = getLastChangeIndex(delta[source]);\n      this.quill.setSelection(index);\n    }\n  }, {\n    key: 'clear',\n    value: function clear() {\n      this.stack = { undo: [], redo: [] };\n    }\n  }, {\n    key: 'cutoff',\n    value: function cutoff() {\n      this.lastRecorded = 0;\n    }\n  }, {\n    key: 'record',\n    value: function record(changeDelta, oldDelta) {\n      if (changeDelta.ops.length === 0) return;\n      this.stack.redo = [];\n      var undoDelta = this.quill.getContents().diff(oldDelta);\n      var timestamp = Date.now();\n      if (this.lastRecorded + this.options.delay > timestamp && this.stack.undo.length > 0) {\n        var delta = this.stack.undo.pop();\n        undoDelta = undoDelta.compose(delta.undo);\n        changeDelta = delta.redo.compose(changeDelta);\n      } else {\n        this.lastRecorded = timestamp;\n      }\n      this.stack.undo.push({\n        redo: changeDelta,\n        undo: undoDelta\n      });\n      if (this.stack.undo.length > this.options.maxStack) {\n        this.stack.undo.shift();\n      }\n    }\n  }, {\n    key: 'redo',\n    value: function redo() {\n      this.change('redo', 'undo');\n    }\n  }, {\n    key: 'transform',\n    value: function transform(delta) {\n      this.stack.undo.forEach(function (change) {\n        change.undo = delta.transform(change.undo, true);\n        change.redo = delta.transform(change.redo, true);\n      });\n      this.stack.redo.forEach(function (change) {\n        change.undo = delta.transform(change.undo, true);\n        change.redo = delta.transform(change.redo, true);\n      });\n    }\n  }, {\n    key: 'undo',\n    value: function undo() {\n      this.change('undo', 'redo');\n    }\n  }]);\n\n  return History;\n}(_module2.default);\n\nHistory.DEFAULTS = {\n  delay: 1000,\n  maxStack: 100,\n  userOnly: false\n};\n\nfunction endsWithNewlineChange(delta) {\n  var lastOp = delta.ops[delta.ops.length - 1];\n  if (lastOp == null) return false;\n  if (lastOp.insert != null) {\n    return typeof lastOp.insert === 'string' && lastOp.insert.endsWith('\\n');\n  }\n  if (lastOp.attributes != null) {\n    return Object.keys(lastOp.attributes).some(function (attr) {\n      return _parchment2.default.query(attr, _parchment2.default.Scope.BLOCK) != null;\n    });\n  }\n  return false;\n}\n\nfunction getLastChangeIndex(delta) {\n  var deleteLength = delta.reduce(function (length, op) {\n    length += op.delete || 0;\n    return length;\n  }, 0);\n  var changeIndex = delta.length() - deleteLength;\n  if (endsWithNewlineChange(delta)) {\n    changeIndex -= 1;\n  }\n  return changeIndex;\n}\n\nexports.default = History;\nexports.getLastChangeIndex = getLastChangeIndex;\n\n/***/ }),\n/* 62 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.IndentClass = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar IdentAttributor = function (_Parchment$Attributor) {\n  _inherits(IdentAttributor, _Parchment$Attributor);\n\n  function IdentAttributor() {\n    _classCallCheck(this, IdentAttributor);\n\n    return _possibleConstructorReturn(this, (IdentAttributor.__proto__ || Object.getPrototypeOf(IdentAttributor)).apply(this, arguments));\n  }\n\n  _createClass(IdentAttributor, [{\n    key: 'add',\n    value: function add(node, value) {\n      if (value === '+1' || value === '-1') {\n        var indent = this.value(node) || 0;\n        value = value === '+1' ? indent + 1 : indent - 1;\n      }\n      if (value === 0) {\n        this.remove(node);\n        return true;\n      } else {\n        return _get(IdentAttributor.prototype.__proto__ || Object.getPrototypeOf(IdentAttributor.prototype), 'add', this).call(this, node, value);\n      }\n    }\n  }, {\n    key: 'canAdd',\n    value: function canAdd(node, value) {\n      return _get(IdentAttributor.prototype.__proto__ || Object.getPrototypeOf(IdentAttributor.prototype), 'canAdd', this).call(this, node, value) || _get(IdentAttributor.prototype.__proto__ || Object.getPrototypeOf(IdentAttributor.prototype), 'canAdd', this).call(this, node, parseInt(value));\n    }\n  }, {\n    key: 'value',\n    value: function value(node) {\n      return parseInt(_get(IdentAttributor.prototype.__proto__ || Object.getPrototypeOf(IdentAttributor.prototype), 'value', this).call(this, node)) || undefined; // Don't return NaN\n    }\n  }]);\n\n  return IdentAttributor;\n}(_parchment2.default.Attributor.Class);\n\nvar IndentClass = new IdentAttributor('indent', 'ql-indent', {\n  scope: _parchment2.default.Scope.BLOCK,\n  whitelist: [1, 2, 3, 4, 5, 6, 7, 8]\n});\n\nexports.IndentClass = IndentClass;\n\n/***/ }),\n/* 63 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _block = __webpack_require__(3);\n\nvar _block2 = _interopRequireDefault(_block);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Blockquote = function (_Block) {\n  _inherits(Blockquote, _Block);\n\n  function Blockquote() {\n    _classCallCheck(this, Blockquote);\n\n    return _possibleConstructorReturn(this, (Blockquote.__proto__ || Object.getPrototypeOf(Blockquote)).apply(this, arguments));\n  }\n\n  return Blockquote;\n}(_block2.default);\n\nBlockquote.blotName = 'blockquote';\nBlockquote.tagName = 'blockquote';\n\nexports.default = Blockquote;\n\n/***/ }),\n/* 64 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _block = __webpack_require__(3);\n\nvar _block2 = _interopRequireDefault(_block);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Header = function (_Block) {\n  _inherits(Header, _Block);\n\n  function Header() {\n    _classCallCheck(this, Header);\n\n    return _possibleConstructorReturn(this, (Header.__proto__ || Object.getPrototypeOf(Header)).apply(this, arguments));\n  }\n\n  _createClass(Header, null, [{\n    key: 'formats',\n    value: function formats(domNode) {\n      return this.tagName.indexOf(domNode.tagName) + 1;\n    }\n  }]);\n\n  return Header;\n}(_block2.default);\n\nHeader.blotName = 'header';\nHeader.tagName = ['H1', 'H2', 'H3', 'H4', 'H5', 'H6'];\n\nexports.default = Header;\n\n/***/ }),\n/* 65 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = exports.ListItem = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nvar _block = __webpack_require__(3);\n\nvar _block2 = _interopRequireDefault(_block);\n\nvar _container = __webpack_require__(23);\n\nvar _container2 = _interopRequireDefault(_container);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ListItem = function (_Block) {\n  _inherits(ListItem, _Block);\n\n  function ListItem() {\n    _classCallCheck(this, ListItem);\n\n    return _possibleConstructorReturn(this, (ListItem.__proto__ || Object.getPrototypeOf(ListItem)).apply(this, arguments));\n  }\n\n  _createClass(ListItem, [{\n    key: 'format',\n    value: function format(name, value) {\n      if (name === List.blotName && !value) {\n        this.replaceWith(_parchment2.default.create(this.statics.scope));\n      } else {\n        _get(ListItem.prototype.__proto__ || Object.getPrototypeOf(ListItem.prototype), 'format', this).call(this, name, value);\n      }\n    }\n  }, {\n    key: 'remove',\n    value: function remove() {\n      if (this.prev == null && this.next == null) {\n        this.parent.remove();\n      } else {\n        _get(ListItem.prototype.__proto__ || Object.getPrototypeOf(ListItem.prototype), 'remove', this).call(this);\n      }\n    }\n  }, {\n    key: 'replaceWith',\n    value: function replaceWith(name, value) {\n      this.parent.isolate(this.offset(this.parent), this.length());\n      if (name === this.parent.statics.blotName) {\n        this.parent.replaceWith(name, value);\n        return this;\n      } else {\n        this.parent.unwrap();\n        return _get(ListItem.prototype.__proto__ || Object.getPrototypeOf(ListItem.prototype), 'replaceWith', this).call(this, name, value);\n      }\n    }\n  }], [{\n    key: 'formats',\n    value: function formats(domNode) {\n      return domNode.tagName === this.tagName ? undefined : _get(ListItem.__proto__ || Object.getPrototypeOf(ListItem), 'formats', this).call(this, domNode);\n    }\n  }]);\n\n  return ListItem;\n}(_block2.default);\n\nListItem.blotName = 'list-item';\nListItem.tagName = 'LI';\n\nvar List = function (_Container) {\n  _inherits(List, _Container);\n\n  _createClass(List, null, [{\n    key: 'create',\n    value: function create(value) {\n      var tagName = value === 'ordered' ? 'OL' : 'UL';\n      var node = _get(List.__proto__ || Object.getPrototypeOf(List), 'create', this).call(this, tagName);\n      if (value === 'checked' || value === 'unchecked') {\n        node.setAttribute('data-checked', value === 'checked');\n      }\n      return node;\n    }\n  }, {\n    key: 'formats',\n    value: function formats(domNode) {\n      if (domNode.tagName === 'OL') return 'ordered';\n      if (domNode.tagName === 'UL') {\n        if (domNode.hasAttribute('data-checked')) {\n          return domNode.getAttribute('data-checked') === 'true' ? 'checked' : 'unchecked';\n        } else {\n          return 'bullet';\n        }\n      }\n      return undefined;\n    }\n  }]);\n\n  function List(domNode) {\n    _classCallCheck(this, List);\n\n    var _this2 = _possibleConstructorReturn(this, (List.__proto__ || Object.getPrototypeOf(List)).call(this, domNode));\n\n    var listEventHandler = function listEventHandler(e) {\n      if (e.target.parentNode !== domNode) return;\n      var format = _this2.statics.formats(domNode);\n      var blot = _parchment2.default.find(e.target);\n      if (format === 'checked') {\n        blot.format('list', 'unchecked');\n      } else if (format === 'unchecked') {\n        blot.format('list', 'checked');\n      }\n    };\n\n    domNode.addEventListener('touchstart', listEventHandler);\n    domNode.addEventListener('mousedown', listEventHandler);\n    return _this2;\n  }\n\n  _createClass(List, [{\n    key: 'format',\n    value: function format(name, value) {\n      if (this.children.length > 0) {\n        this.children.tail.format(name, value);\n      }\n    }\n  }, {\n    key: 'formats',\n    value: function formats() {\n      // We don't inherit from FormatBlot\n      return _defineProperty({}, this.statics.blotName, this.statics.formats(this.domNode));\n    }\n  }, {\n    key: 'insertBefore',\n    value: function insertBefore(blot, ref) {\n      if (blot instanceof ListItem) {\n        _get(List.prototype.__proto__ || Object.getPrototypeOf(List.prototype), 'insertBefore', this).call(this, blot, ref);\n      } else {\n        var index = ref == null ? this.length() : ref.offset(this);\n        var after = this.split(index);\n        after.parent.insertBefore(blot, after);\n      }\n    }\n  }, {\n    key: 'optimize',\n    value: function optimize(context) {\n      _get(List.prototype.__proto__ || Object.getPrototypeOf(List.prototype), 'optimize', this).call(this, context);\n      var next = this.next;\n      if (next != null && next.prev === this && next.statics.blotName === this.statics.blotName && next.domNode.tagName === this.domNode.tagName && next.domNode.getAttribute('data-checked') === this.domNode.getAttribute('data-checked')) {\n        next.moveChildren(this);\n        next.remove();\n      }\n    }\n  }, {\n    key: 'replace',\n    value: function replace(target) {\n      if (target.statics.blotName !== this.statics.blotName) {\n        var item = _parchment2.default.create(this.statics.defaultChild);\n        target.moveChildren(item);\n        this.appendChild(item);\n      }\n      _get(List.prototype.__proto__ || Object.getPrototypeOf(List.prototype), 'replace', this).call(this, target);\n    }\n  }]);\n\n  return List;\n}(_container2.default);\n\nList.blotName = 'list';\nList.scope = _parchment2.default.Scope.BLOCK_BLOT;\nList.tagName = ['OL', 'UL'];\nList.defaultChild = 'list-item';\nList.allowedChildren = [ListItem];\n\nexports.ListItem = ListItem;\nexports.default = List;\n\n/***/ }),\n/* 66 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _bold = __webpack_require__(39);\n\nvar _bold2 = _interopRequireDefault(_bold);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Italic = function (_Bold) {\n  _inherits(Italic, _Bold);\n\n  function Italic() {\n    _classCallCheck(this, Italic);\n\n    return _possibleConstructorReturn(this, (Italic.__proto__ || Object.getPrototypeOf(Italic)).apply(this, arguments));\n  }\n\n  return Italic;\n}(_bold2.default);\n\nItalic.blotName = 'italic';\nItalic.tagName = ['EM', 'I'];\n\nexports.default = Italic;\n\n/***/ }),\n/* 67 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _inline = __webpack_require__(5);\n\nvar _inline2 = _interopRequireDefault(_inline);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Script = function (_Inline) {\n  _inherits(Script, _Inline);\n\n  function Script() {\n    _classCallCheck(this, Script);\n\n    return _possibleConstructorReturn(this, (Script.__proto__ || Object.getPrototypeOf(Script)).apply(this, arguments));\n  }\n\n  _createClass(Script, null, [{\n    key: 'create',\n    value: function create(value) {\n      if (value === 'super') {\n        return document.createElement('sup');\n      } else if (value === 'sub') {\n        return document.createElement('sub');\n      } else {\n        return _get(Script.__proto__ || Object.getPrototypeOf(Script), 'create', this).call(this, value);\n      }\n    }\n  }, {\n    key: 'formats',\n    value: function formats(domNode) {\n      if (domNode.tagName === 'SUB') return 'sub';\n      if (domNode.tagName === 'SUP') return 'super';\n      return undefined;\n    }\n  }]);\n\n  return Script;\n}(_inline2.default);\n\nScript.blotName = 'script';\nScript.tagName = ['SUB', 'SUP'];\n\nexports.default = Script;\n\n/***/ }),\n/* 68 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _inline = __webpack_require__(5);\n\nvar _inline2 = _interopRequireDefault(_inline);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Strike = function (_Inline) {\n  _inherits(Strike, _Inline);\n\n  function Strike() {\n    _classCallCheck(this, Strike);\n\n    return _possibleConstructorReturn(this, (Strike.__proto__ || Object.getPrototypeOf(Strike)).apply(this, arguments));\n  }\n\n  return Strike;\n}(_inline2.default);\n\nStrike.blotName = 'strike';\nStrike.tagName = 'S';\n\nexports.default = Strike;\n\n/***/ }),\n/* 69 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _inline = __webpack_require__(5);\n\nvar _inline2 = _interopRequireDefault(_inline);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Underline = function (_Inline) {\n  _inherits(Underline, _Inline);\n\n  function Underline() {\n    _classCallCheck(this, Underline);\n\n    return _possibleConstructorReturn(this, (Underline.__proto__ || Object.getPrototypeOf(Underline)).apply(this, arguments));\n  }\n\n  return Underline;\n}(_inline2.default);\n\nUnderline.blotName = 'underline';\nUnderline.tagName = 'U';\n\nexports.default = Underline;\n\n/***/ }),\n/* 70 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nvar _link = __webpack_require__(15);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ATTRIBUTES = ['alt', 'height', 'width'];\n\nvar Image = function (_Parchment$Embed) {\n  _inherits(Image, _Parchment$Embed);\n\n  function Image() {\n    _classCallCheck(this, Image);\n\n    return _possibleConstructorReturn(this, (Image.__proto__ || Object.getPrototypeOf(Image)).apply(this, arguments));\n  }\n\n  _createClass(Image, [{\n    key: 'format',\n    value: function format(name, value) {\n      if (ATTRIBUTES.indexOf(name) > -1) {\n        if (value) {\n          this.domNode.setAttribute(name, value);\n        } else {\n          this.domNode.removeAttribute(name);\n        }\n      } else {\n        _get(Image.prototype.__proto__ || Object.getPrototypeOf(Image.prototype), 'format', this).call(this, name, value);\n      }\n    }\n  }], [{\n    key: 'create',\n    value: function create(value) {\n      var node = _get(Image.__proto__ || Object.getPrototypeOf(Image), 'create', this).call(this, value);\n      if (typeof value === 'string') {\n        node.setAttribute('src', this.sanitize(value));\n      }\n      return node;\n    }\n  }, {\n    key: 'formats',\n    value: function formats(domNode) {\n      return ATTRIBUTES.reduce(function (formats, attribute) {\n        if (domNode.hasAttribute(attribute)) {\n          formats[attribute] = domNode.getAttribute(attribute);\n        }\n        return formats;\n      }, {});\n    }\n  }, {\n    key: 'match',\n    value: function match(url) {\n      return (/\\.(jpe?g|gif|png)$/.test(url) || /^data:image\\/.+;base64/.test(url)\n      );\n    }\n  }, {\n    key: 'sanitize',\n    value: function sanitize(url) {\n      return (0, _link.sanitize)(url, ['http', 'https', 'data']) ? url : '//:0';\n    }\n  }, {\n    key: 'value',\n    value: function value(domNode) {\n      return domNode.getAttribute('src');\n    }\n  }]);\n\n  return Image;\n}(_parchment2.default.Embed);\n\nImage.blotName = 'image';\nImage.tagName = 'IMG';\n\nexports.default = Image;\n\n/***/ }),\n/* 71 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _block = __webpack_require__(3);\n\nvar _link = __webpack_require__(15);\n\nvar _link2 = _interopRequireDefault(_link);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ATTRIBUTES = ['height', 'width'];\n\nvar Video = function (_BlockEmbed) {\n  _inherits(Video, _BlockEmbed);\n\n  function Video() {\n    _classCallCheck(this, Video);\n\n    return _possibleConstructorReturn(this, (Video.__proto__ || Object.getPrototypeOf(Video)).apply(this, arguments));\n  }\n\n  _createClass(Video, [{\n    key: 'format',\n    value: function format(name, value) {\n      if (ATTRIBUTES.indexOf(name) > -1) {\n        if (value) {\n          this.domNode.setAttribute(name, value);\n        } else {\n          this.domNode.removeAttribute(name);\n        }\n      } else {\n        _get(Video.prototype.__proto__ || Object.getPrototypeOf(Video.prototype), 'format', this).call(this, name, value);\n      }\n    }\n  }], [{\n    key: 'create',\n    value: function create(value) {\n      var node = _get(Video.__proto__ || Object.getPrototypeOf(Video), 'create', this).call(this, value);\n      node.setAttribute('frameborder', '0');\n      node.setAttribute('allowfullscreen', true);\n      node.setAttribute('src', this.sanitize(value));\n      return node;\n    }\n  }, {\n    key: 'formats',\n    value: function formats(domNode) {\n      return ATTRIBUTES.reduce(function (formats, attribute) {\n        if (domNode.hasAttribute(attribute)) {\n          formats[attribute] = domNode.getAttribute(attribute);\n        }\n        return formats;\n      }, {});\n    }\n  }, {\n    key: 'sanitize',\n    value: function sanitize(url) {\n      return _link2.default.sanitize(url);\n    }\n  }, {\n    key: 'value',\n    value: function value(domNode) {\n      return domNode.getAttribute('src');\n    }\n  }]);\n\n  return Video;\n}(_block.BlockEmbed);\n\nVideo.blotName = 'video';\nVideo.className = 'ql-video';\nVideo.tagName = 'IFRAME';\n\nexports.default = Video;\n\n/***/ }),\n/* 72 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = exports.FormulaBlot = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _embed = __webpack_require__(33);\n\nvar _embed2 = _interopRequireDefault(_embed);\n\nvar _quill = __webpack_require__(6);\n\nvar _quill2 = _interopRequireDefault(_quill);\n\nvar _module = __webpack_require__(7);\n\nvar _module2 = _interopRequireDefault(_module);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar FormulaBlot = function (_Embed) {\n  _inherits(FormulaBlot, _Embed);\n\n  function FormulaBlot() {\n    _classCallCheck(this, FormulaBlot);\n\n    return _possibleConstructorReturn(this, (FormulaBlot.__proto__ || Object.getPrototypeOf(FormulaBlot)).apply(this, arguments));\n  }\n\n  _createClass(FormulaBlot, null, [{\n    key: 'create',\n    value: function create(value) {\n      var node = _get(FormulaBlot.__proto__ || Object.getPrototypeOf(FormulaBlot), 'create', this).call(this, value);\n      if (typeof value === 'string') {\n        window.katex.render(value, node, {\n          throwOnError: false,\n          errorColor: '#f00'\n        });\n        node.setAttribute('data-value', value);\n      }\n      return node;\n    }\n  }, {\n    key: 'value',\n    value: function value(domNode) {\n      return domNode.getAttribute('data-value');\n    }\n  }]);\n\n  return FormulaBlot;\n}(_embed2.default);\n\nFormulaBlot.blotName = 'formula';\nFormulaBlot.className = 'ql-formula';\nFormulaBlot.tagName = 'SPAN';\n\nvar Formula = function (_Module) {\n  _inherits(Formula, _Module);\n\n  _createClass(Formula, null, [{\n    key: 'register',\n    value: function register() {\n      _quill2.default.register(FormulaBlot, true);\n    }\n  }]);\n\n  function Formula() {\n    _classCallCheck(this, Formula);\n\n    var _this2 = _possibleConstructorReturn(this, (Formula.__proto__ || Object.getPrototypeOf(Formula)).call(this));\n\n    if (window.katex == null) {\n      throw new Error('Formula module requires KaTeX.');\n    }\n    return _this2;\n  }\n\n  return Formula;\n}(_module2.default);\n\nexports.FormulaBlot = FormulaBlot;\nexports.default = Formula;\n\n/***/ }),\n/* 73 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = exports.CodeToken = exports.CodeBlock = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nvar _quill = __webpack_require__(6);\n\nvar _quill2 = _interopRequireDefault(_quill);\n\nvar _module = __webpack_require__(7);\n\nvar _module2 = _interopRequireDefault(_module);\n\nvar _code = __webpack_require__(13);\n\nvar _code2 = _interopRequireDefault(_code);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar SyntaxCodeBlock = function (_CodeBlock) {\n  _inherits(SyntaxCodeBlock, _CodeBlock);\n\n  function SyntaxCodeBlock() {\n    _classCallCheck(this, SyntaxCodeBlock);\n\n    return _possibleConstructorReturn(this, (SyntaxCodeBlock.__proto__ || Object.getPrototypeOf(SyntaxCodeBlock)).apply(this, arguments));\n  }\n\n  _createClass(SyntaxCodeBlock, [{\n    key: 'replaceWith',\n    value: function replaceWith(block) {\n      this.domNode.textContent = this.domNode.textContent;\n      this.attach();\n      _get(SyntaxCodeBlock.prototype.__proto__ || Object.getPrototypeOf(SyntaxCodeBlock.prototype), 'replaceWith', this).call(this, block);\n    }\n  }, {\n    key: 'highlight',\n    value: function highlight(_highlight) {\n      var text = this.domNode.textContent;\n      if (this.cachedText !== text) {\n        if (text.trim().length > 0 || this.cachedText == null) {\n          this.domNode.innerHTML = _highlight(text);\n          this.domNode.normalize();\n          this.attach();\n        }\n        this.cachedText = text;\n      }\n    }\n  }]);\n\n  return SyntaxCodeBlock;\n}(_code2.default);\n\nSyntaxCodeBlock.className = 'ql-syntax';\n\nvar CodeToken = new _parchment2.default.Attributor.Class('token', 'hljs', {\n  scope: _parchment2.default.Scope.INLINE\n});\n\nvar Syntax = function (_Module) {\n  _inherits(Syntax, _Module);\n\n  _createClass(Syntax, null, [{\n    key: 'register',\n    value: function register() {\n      _quill2.default.register(CodeToken, true);\n      _quill2.default.register(SyntaxCodeBlock, true);\n    }\n  }]);\n\n  function Syntax(quill, options) {\n    _classCallCheck(this, Syntax);\n\n    var _this2 = _possibleConstructorReturn(this, (Syntax.__proto__ || Object.getPrototypeOf(Syntax)).call(this, quill, options));\n\n    if (typeof _this2.options.highlight !== 'function') {\n      throw new Error('Syntax module requires highlight.js. Please include the library on the page before Quill.');\n    }\n    var timer = null;\n    _this2.quill.on(_quill2.default.events.SCROLL_OPTIMIZE, function () {\n      clearTimeout(timer);\n      timer = setTimeout(function () {\n        _this2.highlight();\n        timer = null;\n      }, _this2.options.interval);\n    });\n    _this2.highlight();\n    return _this2;\n  }\n\n  _createClass(Syntax, [{\n    key: 'highlight',\n    value: function highlight() {\n      var _this3 = this;\n\n      if (this.quill.selection.composing) return;\n      this.quill.update(_quill2.default.sources.USER);\n      var range = this.quill.getSelection();\n      this.quill.scroll.descendants(SyntaxCodeBlock).forEach(function (code) {\n        code.highlight(_this3.options.highlight);\n      });\n      this.quill.update(_quill2.default.sources.SILENT);\n      if (range != null) {\n        this.quill.setSelection(range, _quill2.default.sources.SILENT);\n      }\n    }\n  }]);\n\n  return Syntax;\n}(_module2.default);\n\nSyntax.DEFAULTS = {\n  highlight: function () {\n    if (window.hljs == null) return null;\n    return function (text) {\n      var result = window.hljs.highlightAuto(text);\n      return result.value;\n    };\n  }(),\n  interval: 1000\n};\n\nexports.CodeBlock = SyntaxCodeBlock;\nexports.CodeToken = CodeToken;\nexports.default = Syntax;\n\n/***/ }),\n/* 74 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.addControls = exports.default = undefined;\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _quillDelta = __webpack_require__(4);\n\nvar _quillDelta2 = _interopRequireDefault(_quillDelta);\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nvar _quill = __webpack_require__(6);\n\nvar _quill2 = _interopRequireDefault(_quill);\n\nvar _logger = __webpack_require__(10);\n\nvar _logger2 = _interopRequireDefault(_logger);\n\nvar _module = __webpack_require__(7);\n\nvar _module2 = _interopRequireDefault(_module);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar debug = (0, _logger2.default)('quill:toolbar');\n\nvar Toolbar = function (_Module) {\n  _inherits(Toolbar, _Module);\n\n  function Toolbar(quill, options) {\n    _classCallCheck(this, Toolbar);\n\n    var _this = _possibleConstructorReturn(this, (Toolbar.__proto__ || Object.getPrototypeOf(Toolbar)).call(this, quill, options));\n\n    if (Array.isArray(_this.options.container)) {\n      var container = document.createElement('div');\n      addControls(container, _this.options.container);\n      quill.container.parentNode.insertBefore(container, quill.container);\n      _this.container = container;\n    } else if (typeof _this.options.container === 'string') {\n      _this.container = document.querySelector(_this.options.container);\n    } else {\n      _this.container = _this.options.container;\n    }\n    if (!(_this.container instanceof HTMLElement)) {\n      var _ret;\n\n      return _ret = debug.error('Container required for toolbar', _this.options), _possibleConstructorReturn(_this, _ret);\n    }\n    _this.container.classList.add('ql-toolbar');\n    _this.controls = [];\n    _this.handlers = {};\n    Object.keys(_this.options.handlers).forEach(function (format) {\n      _this.addHandler(format, _this.options.handlers[format]);\n    });\n    [].forEach.call(_this.container.querySelectorAll('button, select'), function (input) {\n      _this.attach(input);\n    });\n    _this.quill.on(_quill2.default.events.EDITOR_CHANGE, function (type, range) {\n      if (type === _quill2.default.events.SELECTION_CHANGE) {\n        _this.update(range);\n      }\n    });\n    _this.quill.on(_quill2.default.events.SCROLL_OPTIMIZE, function () {\n      var _this$quill$selection = _this.quill.selection.getRange(),\n          _this$quill$selection2 = _slicedToArray(_this$quill$selection, 1),\n          range = _this$quill$selection2[0]; // quill.getSelection triggers update\n\n\n      _this.update(range);\n    });\n    return _this;\n  }\n\n  _createClass(Toolbar, [{\n    key: 'addHandler',\n    value: function addHandler(format, handler) {\n      this.handlers[format] = handler;\n    }\n  }, {\n    key: 'attach',\n    value: function attach(input) {\n      var _this2 = this;\n\n      var format = [].find.call(input.classList, function (className) {\n        return className.indexOf('ql-') === 0;\n      });\n      if (!format) return;\n      format = format.slice('ql-'.length);\n      if (input.tagName === 'BUTTON') {\n        input.setAttribute('type', 'button');\n      }\n      if (this.handlers[format] == null) {\n        if (this.quill.scroll.whitelist != null && this.quill.scroll.whitelist[format] == null) {\n          debug.warn('ignoring attaching to disabled format', format, input);\n          return;\n        }\n        if (_parchment2.default.query(format) == null) {\n          debug.warn('ignoring attaching to nonexistent format', format, input);\n          return;\n        }\n      }\n      var eventName = input.tagName === 'SELECT' ? 'change' : 'click';\n      input.addEventListener(eventName, function (e) {\n        var value = void 0;\n        if (input.tagName === 'SELECT') {\n          if (input.selectedIndex < 0) return;\n          var selected = input.options[input.selectedIndex];\n          if (selected.hasAttribute('selected')) {\n            value = false;\n          } else {\n            value = selected.value || false;\n          }\n        } else {\n          if (input.classList.contains('ql-active')) {\n            value = false;\n          } else {\n            value = input.value || !input.hasAttribute('value');\n          }\n          e.preventDefault();\n        }\n        _this2.quill.focus();\n\n        var _quill$selection$getR = _this2.quill.selection.getRange(),\n            _quill$selection$getR2 = _slicedToArray(_quill$selection$getR, 1),\n            range = _quill$selection$getR2[0];\n\n        if (_this2.handlers[format] != null) {\n          _this2.handlers[format].call(_this2, value);\n        } else if (_parchment2.default.query(format).prototype instanceof _parchment2.default.Embed) {\n          value = prompt('Enter ' + format);\n          if (!value) return;\n          _this2.quill.updateContents(new _quillDelta2.default().retain(range.index).delete(range.length).insert(_defineProperty({}, format, value)), _quill2.default.sources.USER);\n        } else {\n          _this2.quill.format(format, value, _quill2.default.sources.USER);\n        }\n        _this2.update(range);\n      });\n      // TODO use weakmap\n      this.controls.push([format, input]);\n    }\n  }, {\n    key: 'update',\n    value: function update(range) {\n      var formats = range == null ? {} : this.quill.getFormat(range);\n      this.controls.forEach(function (pair) {\n        var _pair = _slicedToArray(pair, 2),\n            format = _pair[0],\n            input = _pair[1];\n\n        if (input.tagName === 'SELECT') {\n          var option = void 0;\n          if (range == null) {\n            option = null;\n          } else if (formats[format] == null) {\n            option = input.querySelector('option[selected]');\n          } else if (!Array.isArray(formats[format])) {\n            var value = formats[format];\n            if (typeof value === 'string') {\n              value = value.replace(/\\\"/g, '\\\\\"');\n            }\n            option = input.querySelector('option[value=\"' + value + '\"]');\n          }\n          if (option == null) {\n            input.value = ''; // TODO make configurable?\n            input.selectedIndex = -1;\n          } else {\n            option.selected = true;\n          }\n        } else {\n          if (range == null) {\n            input.classList.remove('ql-active');\n          } else if (input.hasAttribute('value')) {\n            // both being null should match (default values)\n            // '1' should match with 1 (headers)\n            var isActive = formats[format] === input.getAttribute('value') || formats[format] != null && formats[format].toString() === input.getAttribute('value') || formats[format] == null && !input.getAttribute('value');\n            input.classList.toggle('ql-active', isActive);\n          } else {\n            input.classList.toggle('ql-active', formats[format] != null);\n          }\n        }\n      });\n    }\n  }]);\n\n  return Toolbar;\n}(_module2.default);\n\nToolbar.DEFAULTS = {};\n\nfunction addButton(container, format, value) {\n  var input = document.createElement('button');\n  input.setAttribute('type', 'button');\n  input.classList.add('ql-' + format);\n  if (value != null) {\n    input.value = value;\n  }\n  container.appendChild(input);\n}\n\nfunction addControls(container, groups) {\n  if (!Array.isArray(groups[0])) {\n    groups = [groups];\n  }\n  groups.forEach(function (controls) {\n    var group = document.createElement('span');\n    group.classList.add('ql-formats');\n    controls.forEach(function (control) {\n      if (typeof control === 'string') {\n        addButton(group, control);\n      } else {\n        var format = Object.keys(control)[0];\n        var value = control[format];\n        if (Array.isArray(value)) {\n          addSelect(group, format, value);\n        } else {\n          addButton(group, format, value);\n        }\n      }\n    });\n    container.appendChild(group);\n  });\n}\n\nfunction addSelect(container, format, values) {\n  var input = document.createElement('select');\n  input.classList.add('ql-' + format);\n  values.forEach(function (value) {\n    var option = document.createElement('option');\n    if (value !== false) {\n      option.setAttribute('value', value);\n    } else {\n      option.setAttribute('selected', 'selected');\n    }\n    input.appendChild(option);\n  });\n  container.appendChild(input);\n}\n\nToolbar.DEFAULTS = {\n  container: null,\n  handlers: {\n    clean: function clean() {\n      var _this3 = this;\n\n      var range = this.quill.getSelection();\n      if (range == null) return;\n      if (range.length == 0) {\n        var formats = this.quill.getFormat();\n        Object.keys(formats).forEach(function (name) {\n          // Clean functionality in existing apps only clean inline formats\n          if (_parchment2.default.query(name, _parchment2.default.Scope.INLINE) != null) {\n            _this3.quill.format(name, false);\n          }\n        });\n      } else {\n        this.quill.removeFormat(range, _quill2.default.sources.USER);\n      }\n    },\n    direction: function direction(value) {\n      var align = this.quill.getFormat()['align'];\n      if (value === 'rtl' && align == null) {\n        this.quill.format('align', 'right', _quill2.default.sources.USER);\n      } else if (!value && align === 'right') {\n        this.quill.format('align', false, _quill2.default.sources.USER);\n      }\n      this.quill.format('direction', value, _quill2.default.sources.USER);\n    },\n    indent: function indent(value) {\n      var range = this.quill.getSelection();\n      var formats = this.quill.getFormat(range);\n      var indent = parseInt(formats.indent || 0);\n      if (value === '+1' || value === '-1') {\n        var modifier = value === '+1' ? 1 : -1;\n        if (formats.direction === 'rtl') modifier *= -1;\n        this.quill.format('indent', indent + modifier, _quill2.default.sources.USER);\n      }\n    },\n    link: function link(value) {\n      if (value === true) {\n        value = prompt('Enter link URL:');\n      }\n      this.quill.format('link', value, _quill2.default.sources.USER);\n    },\n    list: function list(value) {\n      var range = this.quill.getSelection();\n      var formats = this.quill.getFormat(range);\n      if (value === 'check') {\n        if (formats['list'] === 'checked' || formats['list'] === 'unchecked') {\n          this.quill.format('list', false, _quill2.default.sources.USER);\n        } else {\n          this.quill.format('list', 'unchecked', _quill2.default.sources.USER);\n        }\n      } else {\n        this.quill.format('list', value, _quill2.default.sources.USER);\n      }\n    }\n  }\n};\n\nexports.default = Toolbar;\nexports.addControls = addControls;\n\n/***/ }),\n/* 75 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <line class=ql-stroke x1=3 x2=15 y1=9 y2=9></line> <line class=ql-stroke x1=3 x2=13 y1=14 y2=14></line> <line class=ql-stroke x1=3 x2=9 y1=4 y2=4></line> </svg>\";\n\n/***/ }),\n/* 76 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <line class=ql-stroke x1=15 x2=3 y1=9 y2=9></line> <line class=ql-stroke x1=14 x2=4 y1=14 y2=14></line> <line class=ql-stroke x1=12 x2=6 y1=4 y2=4></line> </svg>\";\n\n/***/ }),\n/* 77 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <line class=ql-stroke x1=15 x2=3 y1=9 y2=9></line> <line class=ql-stroke x1=15 x2=5 y1=14 y2=14></line> <line class=ql-stroke x1=15 x2=9 y1=4 y2=4></line> </svg>\";\n\n/***/ }),\n/* 78 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <line class=ql-stroke x1=15 x2=3 y1=9 y2=9></line> <line class=ql-stroke x1=15 x2=3 y1=14 y2=14></line> <line class=ql-stroke x1=15 x2=3 y1=4 y2=4></line> </svg>\";\n\n/***/ }),\n/* 79 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <g class=\\\"ql-fill ql-color-label\\\"> <polygon points=\\\"6 6.868 6 6 5 6 5 7 5.942 7 6 6.868\\\"></polygon> <rect height=1 width=1 x=4 y=4></rect> <polygon points=\\\"6.817 5 6 5 6 6 6.38 6 6.817 5\\\"></polygon> <rect height=1 width=1 x=2 y=6></rect> <rect height=1 width=1 x=3 y=5></rect> <rect height=1 width=1 x=4 y=7></rect> <polygon points=\\\"4 11.439 4 11 3 11 3 12 3.755 12 4 11.439\\\"></polygon> <rect height=1 width=1 x=2 y=12></rect> <rect height=1 width=1 x=2 y=9></rect> <rect height=1 width=1 x=2 y=15></rect> <polygon points=\\\"4.63 10 4 10 4 11 4.192 11 4.63 10\\\"></polygon> <rect height=1 width=1 x=3 y=8></rect> <path d=M10.832,4.2L11,4.582V4H10.708A1.948,1.948,0,0,1,10.832,4.2Z></path> <path d=M7,4.582L7.168,4.2A1.929,1.929,0,0,1,7.292,4H7V4.582Z></path> <path d=M8,13H7.683l-0.351.8a1.933,1.933,0,0,1-.124.2H8V13Z></path> <rect height=1 width=1 x=12 y=2></rect> <rect height=1 width=1 x=11 y=3></rect> <path d=M9,3H8V3.282A1.985,1.985,0,0,1,9,3Z></path> <rect height=1 width=1 x=2 y=3></rect> <rect height=1 width=1 x=6 y=2></rect> <rect height=1 width=1 x=3 y=2></rect> <rect height=1 width=1 x=5 y=3></rect> <rect height=1 width=1 x=9 y=2></rect> <rect height=1 width=1 x=15 y=14></rect> <polygon points=\\\"13.447 10.174 13.469 10.225 13.472 10.232 13.808 11 14 11 14 10 13.37 10 13.447 10.174\\\"></polygon> <rect height=1 width=1 x=13 y=7></rect> <rect height=1 width=1 x=15 y=5></rect> <rect height=1 width=1 x=14 y=6></rect> <rect height=1 width=1 x=15 y=8></rect> <rect height=1 width=1 x=14 y=9></rect> <path d=M3.775,14H3v1H4V14.314A1.97,1.97,0,0,1,3.775,14Z></path> <rect height=1 width=1 x=14 y=3></rect> <polygon points=\\\"12 6.868 12 6 11.62 6 12 6.868\\\"></polygon> <rect height=1 width=1 x=15 y=2></rect> <rect height=1 width=1 x=12 y=5></rect> <rect height=1 width=1 x=13 y=4></rect> <polygon points=\\\"12.933 9 13 9 13 8 12.495 8 12.933 9\\\"></polygon> <rect height=1 width=1 x=9 y=14></rect> <rect height=1 width=1 x=8 y=15></rect> <path d=M6,14.926V15H7V14.316A1.993,1.993,0,0,1,6,14.926Z></path> <rect height=1 width=1 x=5 y=15></rect> <path d=M10.668,13.8L10.317,13H10v1h0.792A1.947,1.947,0,0,1,10.668,13.8Z></path> <rect height=1 width=1 x=11 y=15></rect> <path d=M14.332,12.2a1.99,1.99,0,0,1,.166.8H15V12H14.245Z></path> <rect height=1 width=1 x=14 y=15></rect> <rect height=1 width=1 x=15 y=11></rect> </g> <polyline class=ql-stroke points=\\\"5.5 13 9 5 12.5 13\\\"></polyline> <line class=ql-stroke x1=11.63 x2=6.38 y1=11 y2=11></line> </svg>\";\n\n/***/ }),\n/* 80 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <rect class=\\\"ql-fill ql-stroke\\\" height=3 width=3 x=4 y=5></rect> <rect class=\\\"ql-fill ql-stroke\\\" height=3 width=3 x=11 y=5></rect> <path class=\\\"ql-even ql-fill ql-stroke\\\" d=M7,8c0,4.031-3,5-3,5></path> <path class=\\\"ql-even ql-fill ql-stroke\\\" d=M14,8c0,4.031-3,5-3,5></path> </svg>\";\n\n/***/ }),\n/* 81 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <path class=ql-stroke d=M5,4H9.5A2.5,2.5,0,0,1,12,6.5v0A2.5,2.5,0,0,1,9.5,9H5A0,0,0,0,1,5,9V4A0,0,0,0,1,5,4Z></path> <path class=ql-stroke d=M5,9h5.5A2.5,2.5,0,0,1,13,11.5v0A2.5,2.5,0,0,1,10.5,14H5a0,0,0,0,1,0,0V9A0,0,0,0,1,5,9Z></path> </svg>\";\n\n/***/ }),\n/* 82 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg class=\\\"\\\" viewbox=\\\"0 0 18 18\\\"> <line class=ql-stroke x1=5 x2=13 y1=3 y2=3></line> <line class=ql-stroke x1=6 x2=9.35 y1=12 y2=3></line> <line class=ql-stroke x1=11 x2=15 y1=11 y2=15></line> <line class=ql-stroke x1=15 x2=11 y1=11 y2=15></line> <rect class=ql-fill height=1 rx=0.5 ry=0.5 width=7 x=2 y=14></rect> </svg>\";\n\n/***/ }),\n/* 83 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <line class=\\\"ql-color-label ql-stroke ql-transparent\\\" x1=3 x2=15 y1=15 y2=15></line> <polyline class=ql-stroke points=\\\"5.5 11 9 3 12.5 11\\\"></polyline> <line class=ql-stroke x1=11.63 x2=6.38 y1=9 y2=9></line> </svg>\";\n\n/***/ }),\n/* 84 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <polygon class=\\\"ql-stroke ql-fill\\\" points=\\\"3 11 5 9 3 7 3 11\\\"></polygon> <line class=\\\"ql-stroke ql-fill\\\" x1=15 x2=11 y1=4 y2=4></line> <path class=ql-fill d=M11,3a3,3,0,0,0,0,6h1V3H11Z></path> <rect class=ql-fill height=11 width=1 x=11 y=4></rect> <rect class=ql-fill height=11 width=1 x=13 y=4></rect> </svg>\";\n\n/***/ }),\n/* 85 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <polygon class=\\\"ql-stroke ql-fill\\\" points=\\\"15 12 13 10 15 8 15 12\\\"></polygon> <line class=\\\"ql-stroke ql-fill\\\" x1=9 x2=5 y1=4 y2=4></line> <path class=ql-fill d=M5,3A3,3,0,0,0,5,9H6V3H5Z></path> <rect class=ql-fill height=11 width=1 x=5 y=4></rect> <rect class=ql-fill height=11 width=1 x=7 y=4></rect> </svg>\";\n\n/***/ }),\n/* 86 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <path class=ql-fill d=M14,16H4a1,1,0,0,1,0-2H14A1,1,0,0,1,14,16Z /> <path class=ql-fill d=M14,4H4A1,1,0,0,1,4,2H14A1,1,0,0,1,14,4Z /> <rect class=ql-fill x=3 y=6 width=12 height=6 rx=1 ry=1 /> </svg>\";\n\n/***/ }),\n/* 87 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <path class=ql-fill d=M13,16H5a1,1,0,0,1,0-2h8A1,1,0,0,1,13,16Z /> <path class=ql-fill d=M13,4H5A1,1,0,0,1,5,2h8A1,1,0,0,1,13,4Z /> <rect class=ql-fill x=2 y=6 width=14 height=6 rx=1 ry=1 /> </svg>\";\n\n/***/ }),\n/* 88 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <path class=ql-fill d=M15,8H13a1,1,0,0,1,0-2h2A1,1,0,0,1,15,8Z /> <path class=ql-fill d=M15,12H13a1,1,0,0,1,0-2h2A1,1,0,0,1,15,12Z /> <path class=ql-fill d=M15,16H5a1,1,0,0,1,0-2H15A1,1,0,0,1,15,16Z /> <path class=ql-fill d=M15,4H5A1,1,0,0,1,5,2H15A1,1,0,0,1,15,4Z /> <rect class=ql-fill x=2 y=6 width=8 height=6 rx=1 ry=1 /> </svg>\";\n\n/***/ }),\n/* 89 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <path class=ql-fill d=M5,8H3A1,1,0,0,1,3,6H5A1,1,0,0,1,5,8Z /> <path class=ql-fill d=M5,12H3a1,1,0,0,1,0-2H5A1,1,0,0,1,5,12Z /> <path class=ql-fill d=M13,16H3a1,1,0,0,1,0-2H13A1,1,0,0,1,13,16Z /> <path class=ql-fill d=M13,4H3A1,1,0,0,1,3,2H13A1,1,0,0,1,13,4Z /> <rect class=ql-fill x=8 y=6 width=8 height=6 rx=1 ry=1 transform=\\\"translate(24 18) rotate(-180)\\\"/> </svg>\";\n\n/***/ }),\n/* 90 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <path class=ql-fill d=M11.759,2.482a2.561,2.561,0,0,0-3.53.607A7.656,7.656,0,0,0,6.8,6.2C6.109,9.188,5.275,14.677,4.15,14.927a1.545,1.545,0,0,0-1.3-.933A0.922,0.922,0,0,0,2,15.036S1.954,16,4.119,16s3.091-2.691,3.7-5.553c0.177-.826.36-1.726,0.554-2.6L8.775,6.2c0.381-1.421.807-2.521,1.306-2.676a1.014,1.014,0,0,0,1.02.56A0.966,0.966,0,0,0,11.759,2.482Z></path> <rect class=ql-fill height=1.6 rx=0.8 ry=0.8 width=5 x=5.15 y=6.2></rect> <path class=ql-fill d=M13.663,12.027a1.662,1.662,0,0,1,.266-0.276q0.193,0.069.456,0.138a2.1,2.1,0,0,0,.535.069,1.075,1.075,0,0,0,.767-0.3,1.044,1.044,0,0,0,.314-0.8,0.84,0.84,0,0,0-.238-0.619,0.8,0.8,0,0,0-.594-0.239,1.154,1.154,0,0,0-.781.3,4.607,4.607,0,0,0-.781,1q-0.091.15-.218,0.346l-0.246.38c-0.068-.288-0.137-0.582-0.212-0.885-0.459-1.847-2.494-.984-2.941-0.8-0.482.2-.353,0.647-0.094,0.529a0.869,0.869,0,0,1,1.281.585c0.217,0.751.377,1.436,0.527,2.038a5.688,5.688,0,0,1-.362.467,2.69,2.69,0,0,1-.264.271q-0.221-.08-0.471-0.147a2.029,2.029,0,0,0-.522-0.066,1.079,1.079,0,0,0-.768.3A1.058,1.058,0,0,0,9,15.131a0.82,0.82,0,0,0,.832.852,1.134,1.134,0,0,0,.787-0.3,5.11,5.11,0,0,0,.776-0.993q0.141-.219.215-0.34c0.046-.076.122-0.194,0.223-0.346a2.786,2.786,0,0,0,.918,1.726,2.582,2.582,0,0,0,2.376-.185c0.317-.181.212-0.565,0-0.494A0.807,0.807,0,0,1,14.176,15a5.159,5.159,0,0,1-.913-2.446l0,0Q13.487,12.24,13.663,12.027Z></path> </svg>\";\n\n/***/ }),\n/* 91 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewBox=\\\"0 0 18 18\\\"> <path class=ql-fill d=M10,4V14a1,1,0,0,1-2,0V10H3v4a1,1,0,0,1-2,0V4A1,1,0,0,1,3,4V8H8V4a1,1,0,0,1,2,0Zm6.06787,9.209H14.98975V7.59863a.54085.54085,0,0,0-.605-.60547h-.62744a1.01119,1.01119,0,0,0-.748.29688L11.645,8.56641a.5435.5435,0,0,0-.022.8584l.28613.30762a.53861.53861,0,0,0,.84717.0332l.09912-.08789a1.2137,1.2137,0,0,0,.2417-.35254h.02246s-.01123.30859-.01123.60547V13.209H12.041a.54085.54085,0,0,0-.605.60547v.43945a.54085.54085,0,0,0,.605.60547h4.02686a.54085.54085,0,0,0,.605-.60547v-.43945A.54085.54085,0,0,0,16.06787,13.209Z /> </svg>\";\n\n/***/ }),\n/* 92 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewBox=\\\"0 0 18 18\\\"> <path class=ql-fill d=M16.73975,13.81445v.43945a.54085.54085,0,0,1-.605.60547H11.855a.58392.58392,0,0,1-.64893-.60547V14.0127c0-2.90527,3.39941-3.42187,3.39941-4.55469a.77675.77675,0,0,0-.84717-.78125,1.17684,1.17684,0,0,0-.83594.38477c-.2749.26367-.561.374-.85791.13184l-.4292-.34082c-.30811-.24219-.38525-.51758-.1543-.81445a2.97155,2.97155,0,0,1,2.45361-1.17676,2.45393,2.45393,0,0,1,2.68408,2.40918c0,2.45312-3.1792,2.92676-3.27832,3.93848h2.79443A.54085.54085,0,0,1,16.73975,13.81445ZM9,3A.99974.99974,0,0,0,8,4V8H3V4A1,1,0,0,0,1,4V14a1,1,0,0,0,2,0V10H8v4a1,1,0,0,0,2,0V4A.99974.99974,0,0,0,9,3Z /> </svg>\";\n\n/***/ }),\n/* 93 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <line class=ql-stroke x1=7 x2=13 y1=4 y2=4></line> <line class=ql-stroke x1=5 x2=11 y1=14 y2=14></line> <line class=ql-stroke x1=8 x2=10 y1=14 y2=4></line> </svg>\";\n\n/***/ }),\n/* 94 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <rect class=ql-stroke height=10 width=12 x=3 y=4></rect> <circle class=ql-fill cx=6 cy=7 r=1></circle> <polyline class=\\\"ql-even ql-fill\\\" points=\\\"5 12 5 11 7 9 8 10 11 7 13 9 13 12 5 12\\\"></polyline> </svg>\";\n\n/***/ }),\n/* 95 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <line class=ql-stroke x1=3 x2=15 y1=14 y2=14></line> <line class=ql-stroke x1=3 x2=15 y1=4 y2=4></line> <line class=ql-stroke x1=9 x2=15 y1=9 y2=9></line> <polyline class=\\\"ql-fill ql-stroke\\\" points=\\\"3 7 3 11 5 9 3 7\\\"></polyline> </svg>\";\n\n/***/ }),\n/* 96 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <line class=ql-stroke x1=3 x2=15 y1=14 y2=14></line> <line class=ql-stroke x1=3 x2=15 y1=4 y2=4></line> <line class=ql-stroke x1=9 x2=15 y1=9 y2=9></line> <polyline class=ql-stroke points=\\\"5 7 5 11 3 9 5 7\\\"></polyline> </svg>\";\n\n/***/ }),\n/* 97 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <line class=ql-stroke x1=7 x2=11 y1=7 y2=11></line> <path class=\\\"ql-even ql-stroke\\\" d=M8.9,4.577a3.476,3.476,0,0,1,.36,4.679A3.476,3.476,0,0,1,4.577,8.9C3.185,7.5,2.035,6.4,4.217,4.217S7.5,3.185,8.9,4.577Z></path> <path class=\\\"ql-even ql-stroke\\\" d=M13.423,9.1a3.476,3.476,0,0,0-4.679-.36,3.476,3.476,0,0,0,.36,4.679c1.392,1.392,2.5,2.542,4.679.36S14.815,10.5,13.423,9.1Z></path> </svg>\";\n\n/***/ }),\n/* 98 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <line class=ql-stroke x1=7 x2=15 y1=4 y2=4></line> <line class=ql-stroke x1=7 x2=15 y1=9 y2=9></line> <line class=ql-stroke x1=7 x2=15 y1=14 y2=14></line> <line class=\\\"ql-stroke ql-thin\\\" x1=2.5 x2=4.5 y1=5.5 y2=5.5></line> <path class=ql-fill d=M3.5,6A0.5,0.5,0,0,1,3,5.5V3.085l-0.276.138A0.5,0.5,0,0,1,2.053,3c-0.124-.247-0.023-0.324.224-0.447l1-.5A0.5,0.5,0,0,1,4,2.5v3A0.5,0.5,0,0,1,3.5,6Z></path> <path class=\\\"ql-stroke ql-thin\\\" d=M4.5,10.5h-2c0-.234,1.85-1.076,1.85-2.234A0.959,0.959,0,0,0,2.5,8.156></path> <path class=\\\"ql-stroke ql-thin\\\" d=M2.5,14.846a0.959,0.959,0,0,0,1.85-.109A0.7,0.7,0,0,0,3.75,14a0.688,0.688,0,0,0,.6-0.736,0.959,0.959,0,0,0-1.85-.109></path> </svg>\";\n\n/***/ }),\n/* 99 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <line class=ql-stroke x1=6 x2=15 y1=4 y2=4></line> <line class=ql-stroke x1=6 x2=15 y1=9 y2=9></line> <line class=ql-stroke x1=6 x2=15 y1=14 y2=14></line> <line class=ql-stroke x1=3 x2=3 y1=4 y2=4></line> <line class=ql-stroke x1=3 x2=3 y1=9 y2=9></line> <line class=ql-stroke x1=3 x2=3 y1=14 y2=14></line> </svg>\";\n\n/***/ }),\n/* 100 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg class=\\\"\\\" viewbox=\\\"0 0 18 18\\\"> <line class=ql-stroke x1=9 x2=15 y1=4 y2=4></line> <polyline class=ql-stroke points=\\\"3 4 4 5 6 3\\\"></polyline> <line class=ql-stroke x1=9 x2=15 y1=14 y2=14></line> <polyline class=ql-stroke points=\\\"3 14 4 15 6 13\\\"></polyline> <line class=ql-stroke x1=9 x2=15 y1=9 y2=9></line> <polyline class=ql-stroke points=\\\"3 9 4 10 6 8\\\"></polyline> </svg>\";\n\n/***/ }),\n/* 101 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <path class=ql-fill d=M15.5,15H13.861a3.858,3.858,0,0,0,1.914-2.975,1.8,1.8,0,0,0-1.6-1.751A1.921,1.921,0,0,0,12.021,11.7a0.50013,0.50013,0,1,0,.957.291h0a0.914,0.914,0,0,1,1.053-.725,0.81,0.81,0,0,1,.744.762c0,1.076-1.16971,1.86982-1.93971,2.43082A1.45639,1.45639,0,0,0,12,15.5a0.5,0.5,0,0,0,.5.5h3A0.5,0.5,0,0,0,15.5,15Z /> <path class=ql-fill d=M9.65,5.241a1,1,0,0,0-1.409.108L6,7.964,3.759,5.349A1,1,0,0,0,2.192,6.59178Q2.21541,6.6213,2.241,6.649L4.684,9.5,2.241,12.35A1,1,0,0,0,3.71,13.70722q0.02557-.02768.049-0.05722L6,11.036,8.241,13.65a1,1,0,1,0,1.567-1.24277Q9.78459,12.3777,9.759,12.35L7.316,9.5,9.759,6.651A1,1,0,0,0,9.65,5.241Z /> </svg>\";\n\n/***/ }),\n/* 102 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <path class=ql-fill d=M15.5,7H13.861a4.015,4.015,0,0,0,1.914-2.975,1.8,1.8,0,0,0-1.6-1.751A1.922,1.922,0,0,0,12.021,3.7a0.5,0.5,0,1,0,.957.291,0.917,0.917,0,0,1,1.053-.725,0.81,0.81,0,0,1,.744.762c0,1.077-1.164,1.925-1.934,2.486A1.423,1.423,0,0,0,12,7.5a0.5,0.5,0,0,0,.5.5h3A0.5,0.5,0,0,0,15.5,7Z /> <path class=ql-fill d=M9.651,5.241a1,1,0,0,0-1.41.108L6,7.964,3.759,5.349a1,1,0,1,0-1.519,1.3L4.683,9.5,2.241,12.35a1,1,0,1,0,1.519,1.3L6,11.036,8.241,13.65a1,1,0,0,0,1.519-1.3L7.317,9.5,9.759,6.651A1,1,0,0,0,9.651,5.241Z /> </svg>\";\n\n/***/ }),\n/* 103 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <line class=\\\"ql-stroke ql-thin\\\" x1=15.5 x2=2.5 y1=8.5 y2=9.5></line> <path class=ql-fill d=M9.007,8C6.542,7.791,6,7.519,6,6.5,6,5.792,7.283,5,9,5c1.571,0,2.765.679,2.969,1.309a1,1,0,0,0,1.9-.617C13.356,4.106,11.354,3,9,3,6.2,3,4,4.538,4,6.5a3.2,3.2,0,0,0,.5,1.843Z></path> <path class=ql-fill d=M8.984,10C11.457,10.208,12,10.479,12,11.5c0,0.708-1.283,1.5-3,1.5-1.571,0-2.765-.679-2.969-1.309a1,1,0,1,0-1.9.617C4.644,13.894,6.646,15,9,15c2.8,0,5-1.538,5-3.5a3.2,3.2,0,0,0-.5-1.843Z></path> </svg>\";\n\n/***/ }),\n/* 104 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <path class=ql-stroke d=M5,3V9a4.012,4.012,0,0,0,4,4H9a4.012,4.012,0,0,0,4-4V3></path> <rect class=ql-fill height=1 rx=0.5 ry=0.5 width=12 x=3 y=15></rect> </svg>\";\n\n/***/ }),\n/* 105 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <rect class=ql-stroke height=12 width=12 x=3 y=3></rect> <rect class=ql-fill height=12 width=1 x=5 y=3></rect> <rect class=ql-fill height=12 width=1 x=12 y=3></rect> <rect class=ql-fill height=2 width=8 x=5 y=8></rect> <rect class=ql-fill height=1 width=3 x=3 y=5></rect> <rect class=ql-fill height=1 width=3 x=3 y=7></rect> <rect class=ql-fill height=1 width=3 x=3 y=10></rect> <rect class=ql-fill height=1 width=3 x=3 y=12></rect> <rect class=ql-fill height=1 width=3 x=12 y=5></rect> <rect class=ql-fill height=1 width=3 x=12 y=7></rect> <rect class=ql-fill height=1 width=3 x=12 y=10></rect> <rect class=ql-fill height=1 width=3 x=12 y=12></rect> </svg>\";\n\n/***/ }),\n/* 106 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <polygon class=ql-stroke points=\\\"7 11 9 13 11 11 7 11\\\"></polygon> <polygon class=ql-stroke points=\\\"7 7 9 5 11 7 7 7\\\"></polygon> </svg>\";\n\n/***/ }),\n/* 107 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = exports.BubbleTooltip = undefined;\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _extend = __webpack_require__(2);\n\nvar _extend2 = _interopRequireDefault(_extend);\n\nvar _emitter = __webpack_require__(9);\n\nvar _emitter2 = _interopRequireDefault(_emitter);\n\nvar _base = __webpack_require__(44);\n\nvar _base2 = _interopRequireDefault(_base);\n\nvar _selection = __webpack_require__(22);\n\nvar _icons = __webpack_require__(26);\n\nvar _icons2 = _interopRequireDefault(_icons);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar TOOLBAR_CONFIG = [['bold', 'italic', 'link'], [{ header: 1 }, { header: 2 }, 'blockquote']];\n\nvar BubbleTheme = function (_BaseTheme) {\n  _inherits(BubbleTheme, _BaseTheme);\n\n  function BubbleTheme(quill, options) {\n    _classCallCheck(this, BubbleTheme);\n\n    if (options.modules.toolbar != null && options.modules.toolbar.container == null) {\n      options.modules.toolbar.container = TOOLBAR_CONFIG;\n    }\n\n    var _this = _possibleConstructorReturn(this, (BubbleTheme.__proto__ || Object.getPrototypeOf(BubbleTheme)).call(this, quill, options));\n\n    _this.quill.container.classList.add('ql-bubble');\n    return _this;\n  }\n\n  _createClass(BubbleTheme, [{\n    key: 'extendToolbar',\n    value: function extendToolbar(toolbar) {\n      this.tooltip = new BubbleTooltip(this.quill, this.options.bounds);\n      this.tooltip.root.appendChild(toolbar.container);\n      this.buildButtons([].slice.call(toolbar.container.querySelectorAll('button')), _icons2.default);\n      this.buildPickers([].slice.call(toolbar.container.querySelectorAll('select')), _icons2.default);\n    }\n  }]);\n\n  return BubbleTheme;\n}(_base2.default);\n\nBubbleTheme.DEFAULTS = (0, _extend2.default)(true, {}, _base2.default.DEFAULTS, {\n  modules: {\n    toolbar: {\n      handlers: {\n        link: function link(value) {\n          if (!value) {\n            this.quill.format('link', false);\n          } else {\n            this.quill.theme.tooltip.edit();\n          }\n        }\n      }\n    }\n  }\n});\n\nvar BubbleTooltip = function (_BaseTooltip) {\n  _inherits(BubbleTooltip, _BaseTooltip);\n\n  function BubbleTooltip(quill, bounds) {\n    _classCallCheck(this, BubbleTooltip);\n\n    var _this2 = _possibleConstructorReturn(this, (BubbleTooltip.__proto__ || Object.getPrototypeOf(BubbleTooltip)).call(this, quill, bounds));\n\n    _this2.quill.on(_emitter2.default.events.EDITOR_CHANGE, function (type, range, oldRange, source) {\n      if (type !== _emitter2.default.events.SELECTION_CHANGE) return;\n      if (range != null && range.length > 0 && source === _emitter2.default.sources.USER) {\n        _this2.show();\n        // Lock our width so we will expand beyond our offsetParent boundaries\n        _this2.root.style.left = '0px';\n        _this2.root.style.width = '';\n        _this2.root.style.width = _this2.root.offsetWidth + 'px';\n        var lines = _this2.quill.getLines(range.index, range.length);\n        if (lines.length === 1) {\n          _this2.position(_this2.quill.getBounds(range));\n        } else {\n          var lastLine = lines[lines.length - 1];\n          var index = _this2.quill.getIndex(lastLine);\n          var length = Math.min(lastLine.length() - 1, range.index + range.length - index);\n          var _bounds = _this2.quill.getBounds(new _selection.Range(index, length));\n          _this2.position(_bounds);\n        }\n      } else if (document.activeElement !== _this2.textbox && _this2.quill.hasFocus()) {\n        _this2.hide();\n      }\n    });\n    return _this2;\n  }\n\n  _createClass(BubbleTooltip, [{\n    key: 'listen',\n    value: function listen() {\n      var _this3 = this;\n\n      _get(BubbleTooltip.prototype.__proto__ || Object.getPrototypeOf(BubbleTooltip.prototype), 'listen', this).call(this);\n      this.root.querySelector('.ql-close').addEventListener('click', function () {\n        _this3.root.classList.remove('ql-editing');\n      });\n      this.quill.on(_emitter2.default.events.SCROLL_OPTIMIZE, function () {\n        // Let selection be restored by toolbar handlers before repositioning\n        setTimeout(function () {\n          if (_this3.root.classList.contains('ql-hidden')) return;\n          var range = _this3.quill.getSelection();\n          if (range != null) {\n            _this3.position(_this3.quill.getBounds(range));\n          }\n        }, 1);\n      });\n    }\n  }, {\n    key: 'cancel',\n    value: function cancel() {\n      this.show();\n    }\n  }, {\n    key: 'position',\n    value: function position(reference) {\n      var shift = _get(BubbleTooltip.prototype.__proto__ || Object.getPrototypeOf(BubbleTooltip.prototype), 'position', this).call(this, reference);\n      var arrow = this.root.querySelector('.ql-tooltip-arrow');\n      arrow.style.marginLeft = '';\n      if (shift === 0) return shift;\n      arrow.style.marginLeft = -1 * shift - arrow.offsetWidth / 2 + 'px';\n    }\n  }]);\n\n  return BubbleTooltip;\n}(_base.BaseTooltip);\n\nBubbleTooltip.TEMPLATE = ['<span class=\"ql-tooltip-arrow\"></span>', '<div class=\"ql-tooltip-editor\">', '<input type=\"text\" data-formula=\"e=mc^2\" data-link=\"https://quilljs.com\" data-video=\"Embed URL\">', '<a class=\"ql-close\"></a>', '</div>'].join('');\n\nexports.BubbleTooltip = BubbleTooltip;\nexports.default = BubbleTheme;\n\n/***/ }),\n/* 108 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _extend = __webpack_require__(2);\n\nvar _extend2 = _interopRequireDefault(_extend);\n\nvar _emitter = __webpack_require__(9);\n\nvar _emitter2 = _interopRequireDefault(_emitter);\n\nvar _base = __webpack_require__(44);\n\nvar _base2 = _interopRequireDefault(_base);\n\nvar _link = __webpack_require__(15);\n\nvar _link2 = _interopRequireDefault(_link);\n\nvar _selection = __webpack_require__(22);\n\nvar _icons = __webpack_require__(26);\n\nvar _icons2 = _interopRequireDefault(_icons);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar TOOLBAR_CONFIG = [[{ header: ['1', '2', '3', false] }], ['bold', 'italic', 'underline', 'link'], [{ list: 'ordered' }, { list: 'bullet' }], ['clean']];\n\nvar SnowTheme = function (_BaseTheme) {\n  _inherits(SnowTheme, _BaseTheme);\n\n  function SnowTheme(quill, options) {\n    _classCallCheck(this, SnowTheme);\n\n    if (options.modules.toolbar != null && options.modules.toolbar.container == null) {\n      options.modules.toolbar.container = TOOLBAR_CONFIG;\n    }\n\n    var _this = _possibleConstructorReturn(this, (SnowTheme.__proto__ || Object.getPrototypeOf(SnowTheme)).call(this, quill, options));\n\n    _this.quill.container.classList.add('ql-snow');\n    return _this;\n  }\n\n  _createClass(SnowTheme, [{\n    key: 'extendToolbar',\n    value: function extendToolbar(toolbar) {\n      toolbar.container.classList.add('ql-snow');\n      this.buildButtons([].slice.call(toolbar.container.querySelectorAll('button')), _icons2.default);\n      this.buildPickers([].slice.call(toolbar.container.querySelectorAll('select')), _icons2.default);\n      this.tooltip = new SnowTooltip(this.quill, this.options.bounds);\n      if (toolbar.container.querySelector('.ql-link')) {\n        this.quill.keyboard.addBinding({ key: 'K', shortKey: true }, function (range, context) {\n          toolbar.handlers['link'].call(toolbar, !context.format.link);\n        });\n      }\n    }\n  }]);\n\n  return SnowTheme;\n}(_base2.default);\n\nSnowTheme.DEFAULTS = (0, _extend2.default)(true, {}, _base2.default.DEFAULTS, {\n  modules: {\n    toolbar: {\n      handlers: {\n        link: function link(value) {\n          if (value) {\n            var range = this.quill.getSelection();\n            if (range == null || range.length == 0) return;\n            var preview = this.quill.getText(range);\n            if (/^\\S+@\\S+\\.\\S+$/.test(preview) && preview.indexOf('mailto:') !== 0) {\n              preview = 'mailto:' + preview;\n            }\n            var tooltip = this.quill.theme.tooltip;\n            tooltip.edit('link', preview);\n          } else {\n            this.quill.format('link', false);\n          }\n        }\n      }\n    }\n  }\n});\n\nvar SnowTooltip = function (_BaseTooltip) {\n  _inherits(SnowTooltip, _BaseTooltip);\n\n  function SnowTooltip(quill, bounds) {\n    _classCallCheck(this, SnowTooltip);\n\n    var _this2 = _possibleConstructorReturn(this, (SnowTooltip.__proto__ || Object.getPrototypeOf(SnowTooltip)).call(this, quill, bounds));\n\n    _this2.preview = _this2.root.querySelector('a.ql-preview');\n    return _this2;\n  }\n\n  _createClass(SnowTooltip, [{\n    key: 'listen',\n    value: function listen() {\n      var _this3 = this;\n\n      _get(SnowTooltip.prototype.__proto__ || Object.getPrototypeOf(SnowTooltip.prototype), 'listen', this).call(this);\n      this.root.querySelector('a.ql-action').addEventListener('click', function (event) {\n        if (_this3.root.classList.contains('ql-editing')) {\n          _this3.save();\n        } else {\n          _this3.edit('link', _this3.preview.textContent);\n        }\n        event.preventDefault();\n      });\n      this.root.querySelector('a.ql-remove').addEventListener('click', function (event) {\n        if (_this3.linkRange != null) {\n          var range = _this3.linkRange;\n          _this3.restoreFocus();\n          _this3.quill.formatText(range, 'link', false, _emitter2.default.sources.USER);\n          delete _this3.linkRange;\n        }\n        event.preventDefault();\n        _this3.hide();\n      });\n      this.quill.on(_emitter2.default.events.SELECTION_CHANGE, function (range, oldRange, source) {\n        if (range == null) return;\n        if (range.length === 0 && source === _emitter2.default.sources.USER) {\n          var _quill$scroll$descend = _this3.quill.scroll.descendant(_link2.default, range.index),\n              _quill$scroll$descend2 = _slicedToArray(_quill$scroll$descend, 2),\n              link = _quill$scroll$descend2[0],\n              offset = _quill$scroll$descend2[1];\n\n          if (link != null) {\n            _this3.linkRange = new _selection.Range(range.index - offset, link.length());\n            var preview = _link2.default.formats(link.domNode);\n            _this3.preview.textContent = preview;\n            _this3.preview.setAttribute('href', preview);\n            _this3.show();\n            _this3.position(_this3.quill.getBounds(_this3.linkRange));\n            return;\n          }\n        } else {\n          delete _this3.linkRange;\n        }\n        _this3.hide();\n      });\n    }\n  }, {\n    key: 'show',\n    value: function show() {\n      _get(SnowTooltip.prototype.__proto__ || Object.getPrototypeOf(SnowTooltip.prototype), 'show', this).call(this);\n      this.root.removeAttribute('data-mode');\n    }\n  }]);\n\n  return SnowTooltip;\n}(_base.BaseTooltip);\n\nSnowTooltip.TEMPLATE = ['<a class=\"ql-preview\" target=\"_blank\" href=\"about:blank\"></a>', '<input type=\"text\" data-formula=\"e=mc^2\" data-link=\"https://quilljs.com\" data-video=\"Embed URL\">', '<a class=\"ql-action\"></a>', '<a class=\"ql-remove\"></a>'].join('');\n\nexports.default = SnowTheme;\n\n/***/ })\n/******/ ])[\"default\"];\n});\n\n\n// WEBPACK FOOTER //\n// quill.min.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 45);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap bc1e3bc04ac5f71cbeee","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar container_1 = require(\"./blot/abstract/container\");\nvar format_1 = require(\"./blot/abstract/format\");\nvar leaf_1 = require(\"./blot/abstract/leaf\");\nvar scroll_1 = require(\"./blot/scroll\");\nvar inline_1 = require(\"./blot/inline\");\nvar block_1 = require(\"./blot/block\");\nvar embed_1 = require(\"./blot/embed\");\nvar text_1 = require(\"./blot/text\");\nvar attributor_1 = require(\"./attributor/attributor\");\nvar class_1 = require(\"./attributor/class\");\nvar style_1 = require(\"./attributor/style\");\nvar store_1 = require(\"./attributor/store\");\nvar Registry = require(\"./registry\");\nvar Parchment = {\n    Scope: Registry.Scope,\n    create: Registry.create,\n    find: Registry.find,\n    query: Registry.query,\n    register: Registry.register,\n    Container: container_1.default,\n    Format: format_1.default,\n    Leaf: leaf_1.default,\n    Embed: embed_1.default,\n    Scroll: scroll_1.default,\n    Block: block_1.default,\n    Inline: inline_1.default,\n    Text: text_1.default,\n    Attributor: {\n        Attribute: attributor_1.default,\n        Class: class_1.default,\n        Style: style_1.default,\n        Store: store_1.default,\n    },\n};\nexports.default = Parchment;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/parchment/src/parchment.ts\n// module id = 0\n// module chunks = 0","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar ParchmentError = /** @class */ (function (_super) {\n    __extends(ParchmentError, _super);\n    function ParchmentError(message) {\n        var _this = this;\n        message = '[Parchment] ' + message;\n        _this = _super.call(this, message) || this;\n        _this.message = message;\n        _this.name = _this.constructor.name;\n        return _this;\n    }\n    return ParchmentError;\n}(Error));\nexports.ParchmentError = ParchmentError;\nvar attributes = {};\nvar classes = {};\nvar tags = {};\nvar types = {};\nexports.DATA_KEY = '__blot';\nvar Scope;\n(function (Scope) {\n    Scope[Scope[\"TYPE\"] = 3] = \"TYPE\";\n    Scope[Scope[\"LEVEL\"] = 12] = \"LEVEL\";\n    Scope[Scope[\"ATTRIBUTE\"] = 13] = \"ATTRIBUTE\";\n    Scope[Scope[\"BLOT\"] = 14] = \"BLOT\";\n    Scope[Scope[\"INLINE\"] = 7] = \"INLINE\";\n    Scope[Scope[\"BLOCK\"] = 11] = \"BLOCK\";\n    Scope[Scope[\"BLOCK_BLOT\"] = 10] = \"BLOCK_BLOT\";\n    Scope[Scope[\"INLINE_BLOT\"] = 6] = \"INLINE_BLOT\";\n    Scope[Scope[\"BLOCK_ATTRIBUTE\"] = 9] = \"BLOCK_ATTRIBUTE\";\n    Scope[Scope[\"INLINE_ATTRIBUTE\"] = 5] = \"INLINE_ATTRIBUTE\";\n    Scope[Scope[\"ANY\"] = 15] = \"ANY\";\n})(Scope = exports.Scope || (exports.Scope = {}));\nfunction create(input, value) {\n    var match = query(input);\n    if (match == null) {\n        throw new ParchmentError(\"Unable to create \" + input + \" blot\");\n    }\n    var BlotClass = match;\n    var node = \n    // @ts-ignore\n    input instanceof Node || input['nodeType'] === Node.TEXT_NODE ? input : BlotClass.create(value);\n    return new BlotClass(node, value);\n}\nexports.create = create;\nfunction find(node, bubble) {\n    if (bubble === void 0) { bubble = false; }\n    if (node == null)\n        return null;\n    // @ts-ignore\n    if (node[exports.DATA_KEY] != null)\n        return node[exports.DATA_KEY].blot;\n    if (bubble)\n        return find(node.parentNode, bubble);\n    return null;\n}\nexports.find = find;\nfunction query(query, scope) {\n    if (scope === void 0) { scope = Scope.ANY; }\n    var match;\n    if (typeof query === 'string') {\n        match = types[query] || attributes[query];\n        // @ts-ignore\n    }\n    else if (query instanceof Text || query['nodeType'] === Node.TEXT_NODE) {\n        match = types['text'];\n    }\n    else if (typeof query === 'number') {\n        if (query & Scope.LEVEL & Scope.BLOCK) {\n            match = types['block'];\n        }\n        else if (query & Scope.LEVEL & Scope.INLINE) {\n            match = types['inline'];\n        }\n    }\n    else if (query instanceof HTMLElement) {\n        var names = (query.getAttribute('class') || '').split(/\\s+/);\n        for (var i in names) {\n            match = classes[names[i]];\n            if (match)\n                break;\n        }\n        match = match || tags[query.tagName];\n    }\n    if (match == null)\n        return null;\n    // @ts-ignore\n    if (scope & Scope.LEVEL & match.scope && scope & Scope.TYPE & match.scope)\n        return match;\n    return null;\n}\nexports.query = query;\nfunction register() {\n    var Definitions = [];\n    for (var _i = 0; _i < arguments.length; _i++) {\n        Definitions[_i] = arguments[_i];\n    }\n    if (Definitions.length > 1) {\n        return Definitions.map(function (d) {\n            return register(d);\n        });\n    }\n    var Definition = Definitions[0];\n    if (typeof Definition.blotName !== 'string' && typeof Definition.attrName !== 'string') {\n        throw new ParchmentError('Invalid definition');\n    }\n    else if (Definition.blotName === 'abstract') {\n        throw new ParchmentError('Cannot register abstract class');\n    }\n    types[Definition.blotName || Definition.attrName] = Definition;\n    if (typeof Definition.keyName === 'string') {\n        attributes[Definition.keyName] = Definition;\n    }\n    else {\n        if (Definition.className != null) {\n            classes[Definition.className] = Definition;\n        }\n        if (Definition.tagName != null) {\n            if (Array.isArray(Definition.tagName)) {\n                Definition.tagName = Definition.tagName.map(function (tagName) {\n                    return tagName.toUpperCase();\n                });\n            }\n            else {\n                Definition.tagName = Definition.tagName.toUpperCase();\n            }\n            var tagNames = Array.isArray(Definition.tagName) ? Definition.tagName : [Definition.tagName];\n            tagNames.forEach(function (tag) {\n                if (tags[tag] == null || Definition.className == null) {\n                    tags[tag] = Definition;\n                }\n            });\n        }\n    }\n    return Definition;\n}\nexports.register = register;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/parchment/src/registry.ts\n// module id = 1\n// module chunks = 0","'use strict';\n\nvar hasOwn = Object.prototype.hasOwnProperty;\nvar toStr = Object.prototype.toString;\n\nvar isArray = function isArray(arr) {\n\tif (typeof Array.isArray === 'function') {\n\t\treturn Array.isArray(arr);\n\t}\n\n\treturn toStr.call(arr) === '[object Array]';\n};\n\nvar isPlainObject = function isPlainObject(obj) {\n\tif (!obj || toStr.call(obj) !== '[object Object]') {\n\t\treturn false;\n\t}\n\n\tvar hasOwnConstructor = hasOwn.call(obj, 'constructor');\n\tvar hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf');\n\t// Not own constructor property must be Object\n\tif (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {\n\t\treturn false;\n\t}\n\n\t// Own properties are enumerated firstly, so to speed up,\n\t// if last one is own, then all properties are own.\n\tvar key;\n\tfor (key in obj) { /**/ }\n\n\treturn typeof key === 'undefined' || hasOwn.call(obj, key);\n};\n\nmodule.exports = function extend() {\n\tvar options, name, src, copy, copyIsArray, clone;\n\tvar target = arguments[0];\n\tvar i = 1;\n\tvar length = arguments.length;\n\tvar deep = false;\n\n\t// Handle a deep copy situation\n\tif (typeof target === 'boolean') {\n\t\tdeep = target;\n\t\ttarget = arguments[1] || {};\n\t\t// skip the boolean and the target\n\t\ti = 2;\n\t}\n\tif (target == null || (typeof target !== 'object' && typeof target !== 'function')) {\n\t\ttarget = {};\n\t}\n\n\tfor (; i < length; ++i) {\n\t\toptions = arguments[i];\n\t\t// Only deal with non-null/undefined values\n\t\tif (options != null) {\n\t\t\t// Extend the base object\n\t\t\tfor (name in options) {\n\t\t\t\tsrc = target[name];\n\t\t\t\tcopy = options[name];\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif (target !== copy) {\n\t\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\t\tif (deep && copy && (isPlainObject(copy) || (copyIsArray = isArray(copy)))) {\n\t\t\t\t\t\tif (copyIsArray) {\n\t\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\t\tclone = src && isArray(src) ? src : [];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tclone = src && isPlainObject(src) ? src : {};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\t\ttarget[name] = extend(deep, clone, copy);\n\n\t\t\t\t\t// Don't bring in undefined values\n\t\t\t\t\t} else if (typeof copy !== 'undefined') {\n\t\t\t\t\t\ttarget[name] = copy;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/extend/index.js\n// module id = 2\n// module chunks = 0","import extend from 'extend';\nimport Delta from 'quill-delta';\nimport Parchment from 'parchment';\nimport Break from './break';\nimport Inline from './inline';\nimport TextBlot from './text';\n\n\nconst NEWLINE_LENGTH = 1;\n\n\nclass BlockEmbed extends Parchment.Embed {\n  attach() {\n    super.attach();\n    this.attributes = new Parchment.Attributor.Store(this.domNode);\n  }\n\n  delta() {\n    return new Delta().insert(this.value(), extend(this.formats(), this.attributes.values()));\n  }\n\n  format(name, value) {\n    let attribute = Parchment.query(name, Parchment.Scope.BLOCK_ATTRIBUTE);\n    if (attribute != null) {\n      this.attributes.attribute(attribute, value);\n    }\n  }\n\n  formatAt(index, length, name, value) {\n    this.format(name, value);\n  }\n\n  insertAt(index, value, def) {\n    if (typeof value === 'string' && value.endsWith('\\n')) {\n      let block = Parchment.create(Block.blotName);\n      this.parent.insertBefore(block, index === 0 ? this : this.next);\n      block.insertAt(0, value.slice(0, -1));\n    } else {\n      super.insertAt(index, value, def);\n    }\n  }\n}\nBlockEmbed.scope = Parchment.Scope.BLOCK_BLOT;\n// It is important for cursor behavior BlockEmbeds use tags that are block level elements\n\n\nclass Block extends Parchment.Block {\n  constructor(domNode) {\n    super(domNode);\n    this.cache = {};\n  }\n\n  delta() {\n    if (this.cache.delta == null) {\n      this.cache.delta = this.descendants(Parchment.Leaf).reduce((delta, leaf) => {\n        if (leaf.length() === 0) {\n          return delta;\n        } else {\n          return delta.insert(leaf.value(), bubbleFormats(leaf));\n        }\n      }, new Delta()).insert('\\n', bubbleFormats(this));\n    }\n    return this.cache.delta;\n  }\n\n  deleteAt(index, length) {\n    super.deleteAt(index, length);\n    this.cache = {};\n  }\n\n  formatAt(index, length, name, value) {\n    if (length <= 0) return;\n    if (Parchment.query(name, Parchment.Scope.BLOCK)) {\n      if (index + length === this.length()) {\n        this.format(name, value);\n      }\n    } else {\n      super.formatAt(index, Math.min(length, this.length() - index - 1), name, value);\n    }\n    this.cache = {};\n  }\n\n  insertAt(index, value, def) {\n    if (def != null) return super.insertAt(index, value, def);\n    if (value.length === 0) return;\n    let lines = value.split('\\n');\n    let text = lines.shift();\n    if (text.length > 0) {\n      if (index < this.length() - 1 || this.children.tail == null) {\n        super.insertAt(Math.min(index, this.length() - 1), text);\n      } else {\n        this.children.tail.insertAt(this.children.tail.length(), text);\n      }\n      this.cache = {};\n    }\n    let block = this;\n    lines.reduce(function(index, line) {\n      block = block.split(index, true);\n      block.insertAt(0, line);\n      return line.length;\n    }, index + text.length);\n  }\n\n  insertBefore(blot, ref) {\n    let head = this.children.head;\n    super.insertBefore(blot, ref);\n    if (head instanceof Break) {\n      head.remove();\n    }\n    this.cache = {};\n  }\n\n  length() {\n    if (this.cache.length == null) {\n      this.cache.length = super.length() + NEWLINE_LENGTH;\n    }\n    return this.cache.length;\n  }\n\n  moveChildren(target, ref) {\n    super.moveChildren(target, ref);\n    this.cache = {};\n  }\n\n  optimize(context) {\n    super.optimize(context);\n    this.cache = {};\n  }\n\n  path(index) {\n    return super.path(index, true);\n  }\n\n  removeChild(child) {\n    super.removeChild(child);\n    this.cache = {};\n  }\n\n  split(index, force = false) {\n    if (force && (index === 0 || index >= this.length() - NEWLINE_LENGTH)) {\n      let clone = this.clone();\n      if (index === 0) {\n        this.parent.insertBefore(clone, this);\n        return this;\n      } else {\n        this.parent.insertBefore(clone, this.next);\n        return clone;\n      }\n    } else {\n      let next = super.split(index, force);\n      this.cache = {};\n      return next;\n    }\n  }\n}\nBlock.blotName = 'block';\nBlock.tagName = 'P';\nBlock.defaultChild = 'break';\nBlock.allowedChildren = [Inline, Parchment.Embed, TextBlot];\n\n\nfunction bubbleFormats(blot, formats = {}) {\n  if (blot == null) return formats;\n  if (typeof blot.formats === 'function') {\n    formats = extend(formats, blot.formats());\n  }\n  if (blot.parent == null || blot.parent.blotName == 'scroll' || blot.parent.statics.scope !== blot.statics.scope) {\n    return formats;\n  }\n  return bubbleFormats(blot.parent, formats);\n}\n\n\nexport { bubbleFormats, BlockEmbed, Block as default };\n\n\n\n// WEBPACK FOOTER //\n// ./blots/block.js","var diff = require('fast-diff');\nvar equal = require('deep-equal');\nvar extend = require('extend');\nvar op = require('./op');\n\n\nvar NULL_CHARACTER = String.fromCharCode(0);  // Placeholder char for embed in diff()\n\n\nvar Delta = function (ops) {\n  // Assume we are given a well formed ops\n  if (Array.isArray(ops)) {\n    this.ops = ops;\n  } else if (ops != null && Array.isArray(ops.ops)) {\n    this.ops = ops.ops;\n  } else {\n    this.ops = [];\n  }\n};\n\n\nDelta.prototype.insert = function (text, attributes) {\n  var newOp = {};\n  if (text.length === 0) return this;\n  newOp.insert = text;\n  if (attributes != null && typeof attributes === 'object' && Object.keys(attributes).length > 0) {\n    newOp.attributes = attributes;\n  }\n  return this.push(newOp);\n};\n\nDelta.prototype['delete'] = function (length) {\n  if (length <= 0) return this;\n  return this.push({ 'delete': length });\n};\n\nDelta.prototype.retain = function (length, attributes) {\n  if (length <= 0) return this;\n  var newOp = { retain: length };\n  if (attributes != null && typeof attributes === 'object' && Object.keys(attributes).length > 0) {\n    newOp.attributes = attributes;\n  }\n  return this.push(newOp);\n};\n\nDelta.prototype.push = function (newOp) {\n  var index = this.ops.length;\n  var lastOp = this.ops[index - 1];\n  newOp = extend(true, {}, newOp);\n  if (typeof lastOp === 'object') {\n    if (typeof newOp['delete'] === 'number' && typeof lastOp['delete'] === 'number') {\n      this.ops[index - 1] = { 'delete': lastOp['delete'] + newOp['delete'] };\n      return this;\n    }\n    // Since it does not matter if we insert before or after deleting at the same index,\n    // always prefer to insert first\n    if (typeof lastOp['delete'] === 'number' && newOp.insert != null) {\n      index -= 1;\n      lastOp = this.ops[index - 1];\n      if (typeof lastOp !== 'object') {\n        this.ops.unshift(newOp);\n        return this;\n      }\n    }\n    if (equal(newOp.attributes, lastOp.attributes)) {\n      if (typeof newOp.insert === 'string' && typeof lastOp.insert === 'string') {\n        this.ops[index - 1] = { insert: lastOp.insert + newOp.insert };\n        if (typeof newOp.attributes === 'object') this.ops[index - 1].attributes = newOp.attributes\n        return this;\n      } else if (typeof newOp.retain === 'number' && typeof lastOp.retain === 'number') {\n        this.ops[index - 1] = { retain: lastOp.retain + newOp.retain };\n        if (typeof newOp.attributes === 'object') this.ops[index - 1].attributes = newOp.attributes\n        return this;\n      }\n    }\n  }\n  if (index === this.ops.length) {\n    this.ops.push(newOp);\n  } else {\n    this.ops.splice(index, 0, newOp);\n  }\n  return this;\n};\n\nDelta.prototype.chop = function () {\n  var lastOp = this.ops[this.ops.length - 1];\n  if (lastOp && lastOp.retain && !lastOp.attributes) {\n    this.ops.pop();\n  }\n  return this;\n};\n\nDelta.prototype.filter = function (predicate) {\n  return this.ops.filter(predicate);\n};\n\nDelta.prototype.forEach = function (predicate) {\n  this.ops.forEach(predicate);\n};\n\nDelta.prototype.map = function (predicate) {\n  return this.ops.map(predicate);\n};\n\nDelta.prototype.partition = function (predicate) {\n  var passed = [], failed = [];\n  this.forEach(function(op) {\n    var target = predicate(op) ? passed : failed;\n    target.push(op);\n  });\n  return [passed, failed];\n};\n\nDelta.prototype.reduce = function (predicate, initial) {\n  return this.ops.reduce(predicate, initial);\n};\n\nDelta.prototype.changeLength = function () {\n  return this.reduce(function (length, elem) {\n    if (elem.insert) {\n      return length + op.length(elem);\n    } else if (elem.delete) {\n      return length - elem.delete;\n    }\n    return length;\n  }, 0);\n};\n\nDelta.prototype.length = function () {\n  return this.reduce(function (length, elem) {\n    return length + op.length(elem);\n  }, 0);\n};\n\nDelta.prototype.slice = function (start, end) {\n  start = start || 0;\n  if (typeof end !== 'number') end = Infinity;\n  var ops = [];\n  var iter = op.iterator(this.ops);\n  var index = 0;\n  while (index < end && iter.hasNext()) {\n    var nextOp;\n    if (index < start) {\n      nextOp = iter.next(start - index);\n    } else {\n      nextOp = iter.next(end - index);\n      ops.push(nextOp);\n    }\n    index += op.length(nextOp);\n  }\n  return new Delta(ops);\n};\n\n\nDelta.prototype.compose = function (other) {\n  var thisIter = op.iterator(this.ops);\n  var otherIter = op.iterator(other.ops);\n  var delta = new Delta();\n  while (thisIter.hasNext() || otherIter.hasNext()) {\n    if (otherIter.peekType() === 'insert') {\n      delta.push(otherIter.next());\n    } else if (thisIter.peekType() === 'delete') {\n      delta.push(thisIter.next());\n    } else {\n      var length = Math.min(thisIter.peekLength(), otherIter.peekLength());\n      var thisOp = thisIter.next(length);\n      var otherOp = otherIter.next(length);\n      if (typeof otherOp.retain === 'number') {\n        var newOp = {};\n        if (typeof thisOp.retain === 'number') {\n          newOp.retain = length;\n        } else {\n          newOp.insert = thisOp.insert;\n        }\n        // Preserve null when composing with a retain, otherwise remove it for inserts\n        var attributes = op.attributes.compose(thisOp.attributes, otherOp.attributes, typeof thisOp.retain === 'number');\n        if (attributes) newOp.attributes = attributes;\n        delta.push(newOp);\n      // Other op should be delete, we could be an insert or retain\n      // Insert + delete cancels out\n      } else if (typeof otherOp['delete'] === 'number' && typeof thisOp.retain === 'number') {\n        delta.push(otherOp);\n      }\n    }\n  }\n  return delta.chop();\n};\n\nDelta.prototype.concat = function (other) {\n  var delta = new Delta(this.ops.slice());\n  if (other.ops.length > 0) {\n    delta.push(other.ops[0]);\n    delta.ops = delta.ops.concat(other.ops.slice(1));\n  }\n  return delta;\n};\n\nDelta.prototype.diff = function (other, index) {\n  if (this.ops === other.ops) {\n    return new Delta();\n  }\n  var strings = [this, other].map(function (delta) {\n    return delta.map(function (op) {\n      if (op.insert != null) {\n        return typeof op.insert === 'string' ? op.insert : NULL_CHARACTER;\n      }\n      var prep = (delta === other) ? 'on' : 'with';\n      throw new Error('diff() called ' + prep + ' non-document');\n    }).join('');\n  });\n  var delta = new Delta();\n  var diffResult = diff(strings[0], strings[1], index);\n  var thisIter = op.iterator(this.ops);\n  var otherIter = op.iterator(other.ops);\n  diffResult.forEach(function (component) {\n    var length = component[1].length;\n    while (length > 0) {\n      var opLength = 0;\n      switch (component[0]) {\n        case diff.INSERT:\n          opLength = Math.min(otherIter.peekLength(), length);\n          delta.push(otherIter.next(opLength));\n          break;\n        case diff.DELETE:\n          opLength = Math.min(length, thisIter.peekLength());\n          thisIter.next(opLength);\n          delta['delete'](opLength);\n          break;\n        case diff.EQUAL:\n          opLength = Math.min(thisIter.peekLength(), otherIter.peekLength(), length);\n          var thisOp = thisIter.next(opLength);\n          var otherOp = otherIter.next(opLength);\n          if (equal(thisOp.insert, otherOp.insert)) {\n            delta.retain(opLength, op.attributes.diff(thisOp.attributes, otherOp.attributes));\n          } else {\n            delta.push(otherOp)['delete'](opLength);\n          }\n          break;\n      }\n      length -= opLength;\n    }\n  });\n  return delta.chop();\n};\n\nDelta.prototype.eachLine = function (predicate, newline) {\n  newline = newline || '\\n';\n  var iter = op.iterator(this.ops);\n  var line = new Delta();\n  var i = 0;\n  while (iter.hasNext()) {\n    if (iter.peekType() !== 'insert') return;\n    var thisOp = iter.peek();\n    var start = op.length(thisOp) - iter.peekLength();\n    var index = typeof thisOp.insert === 'string' ?\n      thisOp.insert.indexOf(newline, start) - start : -1;\n    if (index < 0) {\n      line.push(iter.next());\n    } else if (index > 0) {\n      line.push(iter.next(index));\n    } else {\n      if (predicate(line, iter.next(1).attributes || {}, i) === false) {\n        return;\n      }\n      i += 1;\n      line = new Delta();\n    }\n  }\n  if (line.length() > 0) {\n    predicate(line, {}, i);\n  }\n};\n\nDelta.prototype.transform = function (other, priority) {\n  priority = !!priority;\n  if (typeof other === 'number') {\n    return this.transformPosition(other, priority);\n  }\n  var thisIter = op.iterator(this.ops);\n  var otherIter = op.iterator(other.ops);\n  var delta = new Delta();\n  while (thisIter.hasNext() || otherIter.hasNext()) {\n    if (thisIter.peekType() === 'insert' && (priority || otherIter.peekType() !== 'insert')) {\n      delta.retain(op.length(thisIter.next()));\n    } else if (otherIter.peekType() === 'insert') {\n      delta.push(otherIter.next());\n    } else {\n      var length = Math.min(thisIter.peekLength(), otherIter.peekLength());\n      var thisOp = thisIter.next(length);\n      var otherOp = otherIter.next(length);\n      if (thisOp['delete']) {\n        // Our delete either makes their delete redundant or removes their retain\n        continue;\n      } else if (otherOp['delete']) {\n        delta.push(otherOp);\n      } else {\n        // We retain either their retain or insert\n        delta.retain(length, op.attributes.transform(thisOp.attributes, otherOp.attributes, priority));\n      }\n    }\n  }\n  return delta.chop();\n};\n\nDelta.prototype.transformPosition = function (index, priority) {\n  priority = !!priority;\n  var thisIter = op.iterator(this.ops);\n  var offset = 0;\n  while (thisIter.hasNext() && offset <= index) {\n    var length = thisIter.peekLength();\n    var nextType = thisIter.peekType();\n    thisIter.next();\n    if (nextType === 'delete') {\n      index -= Math.min(length, index - offset);\n      continue;\n    } else if (nextType === 'insert' && (offset < index || !priority)) {\n      index += length;\n    }\n    offset += length;\n  }\n  return index;\n};\n\n\nmodule.exports = Delta;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/quill-delta/lib/delta.js\n// module id = 4\n// module chunks = 0","import Text from './text';\nimport Parchment from 'parchment';\n\n\nclass Inline extends Parchment.Inline {\n  static compare(self, other) {\n    let selfIndex = Inline.order.indexOf(self);\n    let otherIndex = Inline.order.indexOf(other);\n    if (selfIndex >= 0 || otherIndex >= 0) {\n      return selfIndex - otherIndex;\n    } else if (self === other) {\n      return 0;\n    } else if (self < other) {\n      return -1;\n    } else {\n      return 1;\n    }\n  }\n\n  formatAt(index, length, name, value) {\n    if (Inline.compare(this.statics.blotName, name) < 0 && Parchment.query(name, Parchment.Scope.BLOT)) {\n      let blot = this.isolate(index, length);\n      if (value) {\n        blot.wrap(name, value);\n      }\n    } else {\n      super.formatAt(index, length, name, value);\n    }\n  }\n\n  optimize(context) {\n    super.optimize(context);\n    if (this.parent instanceof Inline &&\n        Inline.compare(this.statics.blotName, this.parent.statics.blotName) > 0) {\n      let parent = this.parent.isolate(this.offset(), this.length());\n      this.moveChildren(parent);\n      parent.wrap(this);\n    }\n  }\n}\nInline.allowedChildren = [Inline, Parchment.Embed, Text];\n// Lower index means deeper in the DOM tree, since not found (-1) is for embeds\nInline.order = [\n  'cursor', 'inline',   // Must be lower\n  'underline', 'strike', 'italic', 'bold', 'script',\n  'link', 'code'        // Must be higher\n];\n\n\nexport default Inline;\n\n\n\n// WEBPACK FOOTER //\n// ./blots/inline.js","import './polyfill';\nimport Delta from 'quill-delta';\nimport Editor from './editor';\nimport Emitter from './emitter';\nimport Module from './module';\nimport Parchment from 'parchment';\nimport Selection, { Range } from './selection';\nimport extend from 'extend';\nimport logger from './logger';\nimport Theme from './theme';\n\nlet debug = logger('quill');\n\n\nclass Quill {\n  static debug(limit) {\n    if (limit === true) {\n      limit = 'log';\n    }\n    logger.level(limit);\n  }\n\n  static find(node) {\n    return node.__quill || Parchment.find(node);\n  }\n\n  static import(name) {\n    if (this.imports[name] == null) {\n      debug.error(`Cannot import ${name}. Are you sure it was registered?`);\n    }\n    return this.imports[name];\n  }\n\n  static register(path, target, overwrite = false) {\n    if (typeof path !== 'string') {\n      let name = path.attrName || path.blotName;\n      if (typeof name === 'string') {\n        // register(Blot | Attributor, overwrite)\n        this.register('formats/' + name, path, target);\n      } else {\n        Object.keys(path).forEach((key) => {\n          this.register(key, path[key], target);\n        });\n      }\n    } else {\n      if (this.imports[path] != null && !overwrite) {\n        debug.warn(`Overwriting ${path} with`, target);\n      }\n      this.imports[path] = target;\n      if ((path.startsWith('blots/') || path.startsWith('formats/')) &&\n          target.blotName !== 'abstract') {\n        Parchment.register(target);\n      } else if (path.startsWith('modules') && typeof target.register === 'function') {\n        target.register();\n      }\n    }\n  }\n\n  constructor(container, options = {}) {\n    this.options = expandConfig(container, options);\n    this.container = this.options.container;\n    if (this.container == null) {\n      return debug.error('Invalid Quill container', container);\n    }\n    if (this.options.debug) {\n      Quill.debug(this.options.debug);\n    }\n    let html = this.container.innerHTML.trim();\n    this.container.classList.add('ql-container');\n    this.container.innerHTML = '';\n    this.container.__quill = this;\n    this.root = this.addContainer('ql-editor');\n    this.root.classList.add('ql-blank');\n    this.root.setAttribute('data-gramm', false);\n    this.scrollingContainer = this.options.scrollingContainer || this.root;\n    this.emitter = new Emitter();\n    this.scroll = Parchment.create(this.root, {\n      emitter: this.emitter,\n      whitelist: this.options.formats\n    });\n    this.editor = new Editor(this.scroll);\n    this.selection = new Selection(this.scroll, this.emitter);\n    this.theme = new this.options.theme(this, this.options);\n    this.keyboard = this.theme.addModule('keyboard');\n    this.clipboard = this.theme.addModule('clipboard');\n    this.history = this.theme.addModule('history');\n    this.theme.init();\n    this.emitter.on(Emitter.events.EDITOR_CHANGE, (type) => {\n      if (type === Emitter.events.TEXT_CHANGE) {\n        this.root.classList.toggle('ql-blank', this.editor.isBlank());\n      }\n    });\n    this.emitter.on(Emitter.events.SCROLL_UPDATE, (source, mutations) => {\n      let range = this.selection.lastRange;\n      let index = range && range.length === 0 ? range.index : undefined;\n      modify.call(this, () => {\n        return this.editor.update(null, mutations, index);\n      }, source);\n    });\n    let contents = this.clipboard.convert(`<div class='ql-editor' style=\"white-space: normal;\">${html}<p><br></p></div>`);\n    this.setContents(contents);\n    this.history.clear();\n    if (this.options.placeholder) {\n      this.root.setAttribute('data-placeholder', this.options.placeholder);\n    }\n    if (this.options.readOnly) {\n      this.disable();\n    }\n  }\n\n  addContainer(container, refNode = null) {\n    if (typeof container === 'string') {\n      let className = container;\n      container = document.createElement('div');\n      container.classList.add(className);\n    }\n    this.container.insertBefore(container, refNode);\n    return container;\n  }\n\n  blur() {\n    this.selection.setRange(null);\n  }\n\n  deleteText(index, length, source) {\n    [index, length, , source] = overload(index, length, source);\n    return modify.call(this, () => {\n      return this.editor.deleteText(index, length);\n    }, source, index, -1*length);\n  }\n\n  disable() {\n    this.enable(false);\n  }\n\n  enable(enabled = true) {\n    this.scroll.enable(enabled);\n    this.container.classList.toggle('ql-disabled', !enabled);\n  }\n\n  focus() {\n    let scrollTop = this.scrollingContainer.scrollTop;\n    this.selection.focus();\n    this.scrollingContainer.scrollTop = scrollTop;\n    this.scrollIntoView();\n  }\n\n  format(name, value, source = Emitter.sources.API) {\n    return modify.call(this, () => {\n      let range = this.getSelection(true);\n      let change = new Delta();\n      if (range == null) {\n        return change;\n      } else if (Parchment.query(name, Parchment.Scope.BLOCK)) {\n        change = this.editor.formatLine(range.index, range.length, { [name]: value });\n      } else if (range.length === 0) {\n        this.selection.format(name, value);\n        return change;\n      } else {\n        change = this.editor.formatText(range.index, range.length, { [name]: value });\n      }\n      this.setSelection(range, Emitter.sources.SILENT);\n      return change;\n    }, source);\n  }\n\n  formatLine(index, length, name, value, source) {\n    let formats;\n    [index, length, formats, source] = overload(index, length, name, value, source);\n    return modify.call(this, () => {\n      return this.editor.formatLine(index, length, formats);\n    }, source, index, 0);\n  }\n\n  formatText(index, length, name, value, source) {\n    let formats;\n    [index, length, formats, source] = overload(index, length, name, value, source);\n    return modify.call(this, () => {\n      return this.editor.formatText(index, length, formats);\n    }, source, index, 0);\n  }\n\n  getBounds(index, length = 0) {\n    let bounds;\n    if (typeof index === 'number') {\n      bounds = this.selection.getBounds(index, length);\n    } else {\n      bounds = this.selection.getBounds(index.index, index.length);\n    }\n    let containerBounds = this.container.getBoundingClientRect();\n    return {\n      bottom: bounds.bottom - containerBounds.top,\n      height: bounds.height,\n      left: bounds.left - containerBounds.left,\n      right: bounds.right - containerBounds.left,\n      top: bounds.top - containerBounds.top,\n      width: bounds.width\n    };\n  }\n\n  getContents(index = 0, length = this.getLength() - index) {\n    [index, length] = overload(index, length);\n    return this.editor.getContents(index, length);\n  }\n\n  getFormat(index = this.getSelection(true), length = 0) {\n    if (typeof index === 'number') {\n      return this.editor.getFormat(index, length);\n    } else {\n      return this.editor.getFormat(index.index, index.length);\n    }\n  }\n\n  getIndex(blot) {\n    return blot.offset(this.scroll);\n  }\n\n  getLength() {\n    return this.scroll.length();\n  }\n\n  getLeaf(index) {\n    return this.scroll.leaf(index);\n  }\n\n  getLine(index) {\n    return this.scroll.line(index);\n  }\n\n  getLines(index = 0, length = Number.MAX_VALUE) {\n    if (typeof index !== 'number') {\n      return this.scroll.lines(index.index, index.length);\n    } else {\n      return this.scroll.lines(index, length);\n    }\n  }\n\n  getModule(name) {\n    return this.theme.modules[name];\n  }\n\n  getSelection(focus = false) {\n    if (focus) this.focus();\n    this.update();  // Make sure we access getRange with editor in consistent state\n    return this.selection.getRange()[0];\n  }\n\n  getText(index = 0, length = this.getLength() - index) {\n    [index, length] = overload(index, length);\n    return this.editor.getText(index, length);\n  }\n\n  hasFocus() {\n    return this.selection.hasFocus();\n  }\n\n  insertEmbed(index, embed, value, source = Quill.sources.API) {\n    return modify.call(this, () => {\n      return this.editor.insertEmbed(index, embed, value);\n    }, source, index);\n  }\n\n  insertText(index, text, name, value, source) {\n    let formats;\n    [index, , formats, source] = overload(index, 0, name, value, source);\n    return modify.call(this, () => {\n      return this.editor.insertText(index, text, formats);\n    }, source, index, text.length);\n  }\n\n  isEnabled() {\n    return !this.container.classList.contains('ql-disabled');\n  }\n\n  off() {\n    return this.emitter.off.apply(this.emitter, arguments);\n  }\n\n  on() {\n    return this.emitter.on.apply(this.emitter, arguments);\n  }\n\n  once() {\n    return this.emitter.once.apply(this.emitter, arguments);\n  }\n\n  pasteHTML(index, html, source) {\n    this.clipboard.dangerouslyPasteHTML(index, html, source);\n  }\n\n  removeFormat(index, length, source) {\n    [index, length, , source] = overload(index, length, source);\n    return modify.call(this, () => {\n      return this.editor.removeFormat(index, length);\n    }, source, index);\n  }\n\n  scrollIntoView() {\n    this.selection.scrollIntoView(this.scrollingContainer);\n  }\n\n  setContents(delta, source = Emitter.sources.API) {\n    return modify.call(this, () => {\n      delta = new Delta(delta);\n      let length = this.getLength();\n      let deleted = this.editor.deleteText(0, length);\n      let applied = this.editor.applyDelta(delta);\n      let lastOp = applied.ops[applied.ops.length - 1];\n      if (lastOp != null && typeof(lastOp.insert) === 'string' && lastOp.insert[lastOp.insert.length-1] === '\\n') {\n        this.editor.deleteText(this.getLength() - 1, 1);\n        applied.delete(1);\n      }\n      let ret = deleted.compose(applied);\n      return ret;\n    }, source);\n  }\n\n  setSelection(index, length, source) {\n    if (index == null) {\n      this.selection.setRange(null, length || Quill.sources.API);\n    } else {\n      [index, length, , source] = overload(index, length, source);\n      this.selection.setRange(new Range(index, length), source);\n      if (source !== Emitter.sources.SILENT) {\n        this.selection.scrollIntoView(this.scrollingContainer);\n      }\n    }\n  }\n\n  setText(text, source = Emitter.sources.API) {\n    let delta = new Delta().insert(text);\n    return this.setContents(delta, source);\n  }\n\n  update(source = Emitter.sources.USER) {\n    let change = this.scroll.update(source);   // Will update selection before selection.update() does if text changes\n    this.selection.update(source);\n    return change;\n  }\n\n  updateContents(delta, source = Emitter.sources.API) {\n    return modify.call(this, () => {\n      delta = new Delta(delta);\n      return this.editor.applyDelta(delta, source);\n    }, source, true);\n  }\n}\nQuill.DEFAULTS = {\n  bounds: null,\n  formats: null,\n  modules: {},\n  placeholder: '',\n  readOnly: false,\n  scrollingContainer: null,\n  strict: true,\n  theme: 'default'\n};\nQuill.events = Emitter.events;\nQuill.sources = Emitter.sources;\n// eslint-disable-next-line no-undef\nQuill.version = typeof(QUILL_VERSION) === 'undefined' ? 'dev' : QUILL_VERSION;\n\nQuill.imports = {\n  'delta'       : Delta,\n  'parchment'   : Parchment,\n  'core/module' : Module,\n  'core/theme'  : Theme\n};\n\n\nfunction expandConfig(container, userConfig) {\n  userConfig = extend(true, {\n    container: container,\n    modules: {\n      clipboard: true,\n      keyboard: true,\n      history: true\n    }\n  }, userConfig);\n  if (!userConfig.theme || userConfig.theme === Quill.DEFAULTS.theme) {\n    userConfig.theme = Theme;\n  } else {\n    userConfig.theme = Quill.import(`themes/${userConfig.theme}`);\n    if (userConfig.theme == null) {\n      throw new Error(`Invalid theme ${userConfig.theme}. Did you register it?`);\n    }\n  }\n  let themeConfig = extend(true, {}, userConfig.theme.DEFAULTS);\n  [themeConfig, userConfig].forEach(function(config) {\n    config.modules = config.modules || {};\n    Object.keys(config.modules).forEach(function(module) {\n      if (config.modules[module] === true) {\n        config.modules[module] = {};\n      }\n    });\n  });\n  let moduleNames = Object.keys(themeConfig.modules).concat(Object.keys(userConfig.modules));\n  let moduleConfig = moduleNames.reduce(function(config, name) {\n    let moduleClass = Quill.import(`modules/${name}`);\n    if (moduleClass == null) {\n      debug.error(`Cannot load ${name} module. Are you sure you registered it?`);\n    } else {\n      config[name] = moduleClass.DEFAULTS || {};\n    }\n    return config;\n  }, {});\n  // Special case toolbar shorthand\n  if (userConfig.modules != null && userConfig.modules.toolbar &&\n      userConfig.modules.toolbar.constructor !== Object) {\n    userConfig.modules.toolbar = {\n      container: userConfig.modules.toolbar\n    };\n  }\n  userConfig = extend(true, {}, Quill.DEFAULTS, { modules: moduleConfig }, themeConfig, userConfig);\n  ['bounds', 'container', 'scrollingContainer'].forEach(function(key) {\n    if (typeof userConfig[key] === 'string') {\n      userConfig[key] = document.querySelector(userConfig[key]);\n    }\n  });\n  userConfig.modules = Object.keys(userConfig.modules).reduce(function(config, name) {\n    if (userConfig.modules[name]) {\n      config[name] = userConfig.modules[name];\n    }\n    return config;\n  }, {});\n  return userConfig;\n}\n\n// Handle selection preservation and TEXT_CHANGE emission\n// common to modification APIs\nfunction modify(modifier, source, index, shift) {\n  if (this.options.strict && !this.isEnabled() && source === Emitter.sources.USER) {\n    return new Delta();\n  }\n  let range = index == null ? null : this.getSelection();\n  let oldDelta = this.editor.delta;\n  let change = modifier();\n  if (range != null) {\n    if (index === true) index = range.index;\n    if (shift == null) {\n      range = shiftRange(range, change, source);\n    } else if (shift !== 0) {\n      range = shiftRange(range, index, shift, source);\n    }\n    this.setSelection(range, Emitter.sources.SILENT);\n  }\n  if (change.length() > 0) {\n    let args = [Emitter.events.TEXT_CHANGE, change, oldDelta, source];\n    this.emitter.emit(Emitter.events.EDITOR_CHANGE, ...args);\n    if (source !== Emitter.sources.SILENT) {\n      this.emitter.emit(...args);\n    }\n  }\n  return change;\n}\n\nfunction overload(index, length, name, value, source) {\n  let formats = {};\n  if (typeof index.index === 'number' && typeof index.length === 'number') {\n    // Allow for throwaway end (used by insertText/insertEmbed)\n    if (typeof length !== 'number') {\n      source = value, value = name, name = length, length = index.length, index = index.index;\n    } else {\n      length = index.length, index = index.index;\n    }\n  } else if (typeof length !== 'number') {\n    source = value, value = name, name = length, length = 0;\n  }\n  // Handle format being object, two format name/value strings or excluded\n  if (typeof name === 'object') {\n    formats = name;\n    source = value;\n  } else if (typeof name === 'string') {\n    if (value != null) {\n      formats[name] = value;\n    } else {\n      source = name;\n    }\n  }\n  // Handle optional source\n  source = source || Emitter.sources.API;\n  return [index, length, formats, source];\n}\n\nfunction shiftRange(range, index, length, source) {\n  if (range == null) return null;\n  let start, end;\n  if (index instanceof Delta) {\n    [start, end] = [range.index, range.index + range.length].map(function(pos) {\n      return index.transformPosition(pos, source !== Emitter.sources.USER);\n    });\n  } else {\n    [start, end] = [range.index, range.index + range.length].map(function(pos) {\n      if (pos < index || (pos === index && source === Emitter.sources.USER)) return pos;\n      if (length >= 0) {\n        return pos + length;\n      } else {\n        return Math.max(index, pos + length);\n      }\n    });\n  }\n  return new Range(start, end - start);\n}\n\n\nexport { expandConfig, overload, Quill as default };\n\n\n\n// WEBPACK FOOTER //\n// ./core/quill.js","class Module {\n  constructor(quill, options = {}) {\n    this.quill = quill;\n    this.options = options;\n  }\n}\nModule.DEFAULTS = {};\n\n\nexport default Module;\n\n\n\n// WEBPACK FOOTER //\n// ./core/module.js","import Parchment from 'parchment';\n\nclass TextBlot extends Parchment.Text { }\n\nexport default TextBlot;\n\n\n\n// WEBPACK FOOTER //\n// ./blots/text.js","import EventEmitter from 'eventemitter3';\nimport logger from './logger';\n\nlet debug = logger('quill:events');\n\nconst EVENTS = ['selectionchange', 'mousedown', 'mouseup', 'click'];\n\nEVENTS.forEach(function(eventName) {\n  document.addEventListener(eventName, (...args) => {\n    [].slice.call(document.querySelectorAll('.ql-container')).forEach((node) => {\n      // TODO use WeakMap\n      if (node.__quill && node.__quill.emitter) {\n        node.__quill.emitter.handleDOM(...args);\n      }\n    });\n  });\n});\n\n\nclass Emitter extends EventEmitter {\n  constructor() {\n    super();\n    this.listeners = {};\n    this.on('error', debug.error);\n  }\n\n  emit() {\n    debug.log.apply(debug, arguments);\n    super.emit.apply(this, arguments);\n  }\n\n  handleDOM(event, ...args) {\n    (this.listeners[event.type] || []).forEach(function({ node, handler }) {\n      if (event.target === node || node.contains(event.target)) {\n        handler(event, ...args);\n      }\n    });\n  }\n\n  listenDOM(eventName, node, handler) {\n    if (!this.listeners[eventName]) {\n      this.listeners[eventName] = [];\n    }\n    this.listeners[eventName].push({ node, handler })\n  }\n}\n\nEmitter.events = {\n  EDITOR_CHANGE        : 'editor-change',\n  SCROLL_BEFORE_UPDATE : 'scroll-before-update',\n  SCROLL_OPTIMIZE      : 'scroll-optimize',\n  SCROLL_UPDATE        : 'scroll-update',\n  SELECTION_CHANGE     : 'selection-change',\n  TEXT_CHANGE          : 'text-change'\n};\nEmitter.sources = {\n  API    : 'api',\n  SILENT : 'silent',\n  USER   : 'user'\n};\n\n\nexport default Emitter;\n\n\n\n// WEBPACK FOOTER //\n// ./core/emitter.js","let levels = ['error', 'warn', 'log', 'info'];\nlet level = 'warn';\n\nfunction debug(method, ...args) {\n  if (levels.indexOf(method) <= levels.indexOf(level)) {\n    console[method](...args);  // eslint-disable-line no-console\n  }\n}\n\nfunction namespace(ns) {\n  return levels.reduce(function(logger, method) {\n    logger[method] = debug.bind(console, method, ns);\n    return logger;\n  }, {});\n}\n\ndebug.level = namespace.level = function(newLevel) {\n  level = newLevel;\n};\n\n\nexport default namespace;\n\n\n\n// WEBPACK FOOTER //\n// ./core/logger.js","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Registry = require(\"../registry\");\nvar Attributor = /** @class */ (function () {\n    function Attributor(attrName, keyName, options) {\n        if (options === void 0) { options = {}; }\n        this.attrName = attrName;\n        this.keyName = keyName;\n        var attributeBit = Registry.Scope.TYPE & Registry.Scope.ATTRIBUTE;\n        if (options.scope != null) {\n            // Ignore type bits, force attribute bit\n            this.scope = (options.scope & Registry.Scope.LEVEL) | attributeBit;\n        }\n        else {\n            this.scope = Registry.Scope.ATTRIBUTE;\n        }\n        if (options.whitelist != null)\n            this.whitelist = options.whitelist;\n    }\n    Attributor.keys = function (node) {\n        return [].map.call(node.attributes, function (item) {\n            return item.name;\n        });\n    };\n    Attributor.prototype.add = function (node, value) {\n        if (!this.canAdd(node, value))\n            return false;\n        node.setAttribute(this.keyName, value);\n        return true;\n    };\n    Attributor.prototype.canAdd = function (node, value) {\n        var match = Registry.query(node, Registry.Scope.BLOT & (this.scope | Registry.Scope.TYPE));\n        if (match == null)\n            return false;\n        if (this.whitelist == null)\n            return true;\n        if (typeof value === 'string') {\n            return this.whitelist.indexOf(value.replace(/[\"']/g, '')) > -1;\n        }\n        else {\n            return this.whitelist.indexOf(value) > -1;\n        }\n    };\n    Attributor.prototype.remove = function (node) {\n        node.removeAttribute(this.keyName);\n    };\n    Attributor.prototype.value = function (node) {\n        var value = node.getAttribute(this.keyName);\n        if (this.canAdd(node, value) && value) {\n            return value;\n        }\n        return '';\n    };\n    return Attributor;\n}());\nexports.default = Attributor;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/parchment/src/attributor/attributor.ts\n// module id = 11\n// module chunks = 0","var pSlice = Array.prototype.slice;\nvar objectKeys = require('./lib/keys.js');\nvar isArguments = require('./lib/is_arguments.js');\n\nvar deepEqual = module.exports = function (actual, expected, opts) {\n  if (!opts) opts = {};\n  // 7.1. All identical values are equivalent, as determined by ===.\n  if (actual === expected) {\n    return true;\n\n  } else if (actual instanceof Date && expected instanceof Date) {\n    return actual.getTime() === expected.getTime();\n\n  // 7.3. Other pairs that do not both pass typeof value == 'object',\n  // equivalence is determined by ==.\n  } else if (!actual || !expected || typeof actual != 'object' && typeof expected != 'object') {\n    return opts.strict ? actual === expected : actual == expected;\n\n  // 7.4. For all other Object pairs, including Array objects, equivalence is\n  // determined by having the same number of owned properties (as verified\n  // with Object.prototype.hasOwnProperty.call), the same set of keys\n  // (although not necessarily the same order), equivalent values for every\n  // corresponding key, and an identical 'prototype' property. Note: this\n  // accounts for both named and indexed properties on Arrays.\n  } else {\n    return objEquiv(actual, expected, opts);\n  }\n}\n\nfunction isUndefinedOrNull(value) {\n  return value === null || value === undefined;\n}\n\nfunction isBuffer (x) {\n  if (!x || typeof x !== 'object' || typeof x.length !== 'number') return false;\n  if (typeof x.copy !== 'function' || typeof x.slice !== 'function') {\n    return false;\n  }\n  if (x.length > 0 && typeof x[0] !== 'number') return false;\n  return true;\n}\n\nfunction objEquiv(a, b, opts) {\n  var i, key;\n  if (isUndefinedOrNull(a) || isUndefinedOrNull(b))\n    return false;\n  // an identical 'prototype' property.\n  if (a.prototype !== b.prototype) return false;\n  //~~~I've managed to break Object.keys through screwy arguments passing.\n  //   Converting to array solves the problem.\n  if (isArguments(a)) {\n    if (!isArguments(b)) {\n      return false;\n    }\n    a = pSlice.call(a);\n    b = pSlice.call(b);\n    return deepEqual(a, b, opts);\n  }\n  if (isBuffer(a)) {\n    if (!isBuffer(b)) {\n      return false;\n    }\n    if (a.length !== b.length) return false;\n    for (i = 0; i < a.length; i++) {\n      if (a[i] !== b[i]) return false;\n    }\n    return true;\n  }\n  try {\n    var ka = objectKeys(a),\n        kb = objectKeys(b);\n  } catch (e) {//happens when one is a string literal and the other isn't\n    return false;\n  }\n  // having the same number of owned properties (keys incorporates\n  // hasOwnProperty)\n  if (ka.length != kb.length)\n    return false;\n  //the same set of keys (although not necessarily the same order),\n  ka.sort();\n  kb.sort();\n  //~~~cheap key test\n  for (i = ka.length - 1; i >= 0; i--) {\n    if (ka[i] != kb[i])\n      return false;\n  }\n  //equivalent values for every corresponding key, and\n  //~~~possibly expensive deep test\n  for (i = ka.length - 1; i >= 0; i--) {\n    key = ka[i];\n    if (!deepEqual(a[key], b[key], opts)) return false;\n  }\n  return typeof a === typeof b;\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/deep-equal/index.js\n// module id = 12\n// module chunks = 0","import Delta from 'quill-delta';\nimport Parchment from 'parchment';\nimport Block from '../blots/block';\nimport Inline from '../blots/inline';\nimport TextBlot from '../blots/text';\n\n\nclass Code extends Inline {}\nCode.blotName = 'code';\nCode.tagName = 'CODE';\n\n\nclass CodeBlock extends Block {\n  static create(value) {\n    let domNode = super.create(value);\n    domNode.setAttribute('spellcheck', false);\n    return domNode;\n  }\n\n  static formats() {\n    return true;\n  }\n\n  delta() {\n    let text = this.domNode.textContent;\n    if (text.endsWith('\\n')) {      // Should always be true\n      text = text.slice(0, -1);\n    }\n    return text.split('\\n').reduce((delta, frag) => {\n      return delta.insert(frag).insert('\\n', this.formats());\n    }, new Delta());\n  }\n\n  format(name, value) {\n    if (name === this.statics.blotName && value) return;\n    let [text, ] = this.descendant(TextBlot, this.length() - 1);\n    if (text != null) {\n      text.deleteAt(text.length() - 1, 1);\n    }\n    super.format(name, value);\n  }\n\n  formatAt(index, length, name, value) {\n    if (length === 0) return;\n    if (Parchment.query(name, Parchment.Scope.BLOCK) == null ||\n        (name === this.statics.blotName && value === this.statics.formats(this.domNode))) {\n      return;\n    }\n    let nextNewline = this.newlineIndex(index);\n    if (nextNewline < 0 || nextNewline >= index + length) return;\n    let prevNewline = this.newlineIndex(index, true) + 1;\n    let isolateLength = nextNewline - prevNewline + 1;\n    let blot = this.isolate(prevNewline, isolateLength);\n    let next = blot.next;\n    blot.format(name, value);\n    if (next instanceof CodeBlock) {\n      next.formatAt(0, index - prevNewline + length - isolateLength, name, value);\n    }\n  }\n\n  insertAt(index, value, def) {\n    if (def != null) return;\n    let [text, offset] = this.descendant(TextBlot, index);\n    text.insertAt(offset, value);\n  }\n\n  length() {\n    let length = this.domNode.textContent.length;\n    if (!this.domNode.textContent.endsWith('\\n')) {\n      return length + 1;\n    }\n    return length;\n  }\n\n  newlineIndex(searchIndex, reverse = false) {\n    if (!reverse) {\n      let offset = this.domNode.textContent.slice(searchIndex).indexOf('\\n');\n      return offset > -1 ? searchIndex + offset : -1;\n    } else {\n      return this.domNode.textContent.slice(0, searchIndex).lastIndexOf('\\n');\n    }\n  }\n\n  optimize(context) {\n    if (!this.domNode.textContent.endsWith('\\n')) {\n      this.appendChild(Parchment.create('text', '\\n'));\n    }\n    super.optimize(context);\n    let next = this.next;\n    if (next != null && next.prev === this &&\n        next.statics.blotName === this.statics.blotName &&\n        this.statics.formats(this.domNode) === next.statics.formats(next.domNode)) {\n      next.optimize(context);\n      next.moveChildren(this);\n      next.remove();\n    }\n  }\n\n  replace(target) {\n    super.replace(target);\n    [].slice.call(this.domNode.querySelectorAll('*')).forEach(function(node) {\n      let blot = Parchment.find(node);\n      if (blot == null) {\n        node.parentNode.removeChild(node);\n      } else if (blot instanceof Parchment.Embed) {\n        blot.remove();\n      } else {\n        blot.unwrap();\n      }\n    });\n  }\n}\nCodeBlock.blotName = 'code-block';\nCodeBlock.tagName = 'PRE';\nCodeBlock.TAB = '  ';\n\n\nexport { Code, CodeBlock as default };\n\n\n\n// WEBPACK FOOTER //\n// ./formats/code.js","import Parchment from 'parchment';\n\n\nclass Break extends Parchment.Embed {\n  static value() {\n    return undefined;\n  }\n\n  insertInto(parent, ref) {\n    if (parent.children.length === 0) {\n      super.insertInto(parent, ref);\n    } else {\n      this.remove();\n    }\n  }\n\n  length() {\n    return 0;\n  }\n\n  value() {\n    return '';\n  }\n}\nBreak.blotName = 'break';\nBreak.tagName = 'BR';\n\n\nexport default Break;\n\n\n\n// WEBPACK FOOTER //\n// ./blots/break.js","import Inline from '../blots/inline';\n\n\nclass Link extends Inline {\n  static create(value) {\n    let node = super.create(value);\n    value = this.sanitize(value);\n    node.setAttribute('href', value);\n    node.setAttribute('target', '_blank');\n    return node;\n  }\n\n  static formats(domNode) {\n    return domNode.getAttribute('href');\n  }\n\n  static sanitize(url) {\n    return sanitize(url, this.PROTOCOL_WHITELIST) ? url : this.SANITIZED_URL;\n  }\n\n  format(name, value) {\n    if (name !== this.statics.blotName || !value) return super.format(name, value);\n    value = this.constructor.sanitize(value);\n    this.domNode.setAttribute('href', value);\n  }\n}\nLink.blotName = 'link';\nLink.tagName = 'A';\nLink.SANITIZED_URL = 'about:blank';\nLink.PROTOCOL_WHITELIST = ['http', 'https', 'mailto', 'tel'];\n\n\nfunction sanitize(url, protocols) {\n  let anchor = document.createElement('a');\n  anchor.href = url;\n  let protocol = anchor.href.slice(0, anchor.href.indexOf(':'));\n  return protocols.indexOf(protocol) > -1;\n}\n\n\nexport { Link as default, sanitize };\n\n\n\n// WEBPACK FOOTER //\n// ./formats/link.js","import Keyboard from '../modules/keyboard';\nimport DropdownIcon from '../assets/icons/dropdown.svg';\n\nlet optionsCounter = 0;\n\nfunction toggleAriaAttribute(element, attribute) {\n  element.setAttribute(attribute, !(element.getAttribute(attribute) === 'true'));\n}\n\nclass Picker {\n  constructor(select) {\n    this.select = select;\n    this.container = document.createElement('span');\n    this.buildPicker();\n    this.select.style.display = 'none';\n    this.select.parentNode.insertBefore(this.container, this.select);\n\n    this.label.addEventListener('mousedown', () => {\n      this.togglePicker();\n    });\n    this.label.addEventListener('keydown', (event) => {\n      switch(event.keyCode) {\n        // Allows the \"Enter\" key to open the picker\n        case Keyboard.keys.ENTER:\n          this.togglePicker();\n          break;\n\n        // Allows the \"Escape\" key to close the picker\n        case Keyboard.keys.ESCAPE:\n          this.escape();\n          event.preventDefault();\n          break;\n        default:\n      }\n    });\n    this.select.addEventListener('change', this.update.bind(this));\n  }\n\n  togglePicker() {\n    this.container.classList.toggle('ql-expanded');\n    // Toggle aria-expanded and aria-hidden to make the picker accessible\n    toggleAriaAttribute(this.label, 'aria-expanded');\n    toggleAriaAttribute(this.options, 'aria-hidden');\n  }\n\n  buildItem(option) {\n    let item = document.createElement('span');\n    item.tabIndex = '0';\n    item.setAttribute('role', 'button');\n\n    item.classList.add('ql-picker-item');\n    if (option.hasAttribute('value')) {\n      item.setAttribute('data-value', option.getAttribute('value'));\n    }\n    if (option.textContent) {\n      item.setAttribute('data-label', option.textContent);\n    }\n    item.addEventListener('click', () => {\n      this.selectItem(item, true);\n    });\n    item.addEventListener('keydown', (event) => {\n      switch(event.keyCode) {\n        // Allows the \"Enter\" key to select an item\n        case Keyboard.keys.ENTER:\n          this.selectItem(item, true);\n          event.preventDefault();\n          break;\n\n        // Allows the \"Escape\" key to close the picker\n        case Keyboard.keys.ESCAPE:\n          this.escape();\n          event.preventDefault();\n          break;\n        default:\n      }\n    });\n\n    return item;\n  }\n\n  buildLabel() {\n    let label = document.createElement('span');\n    label.classList.add('ql-picker-label');\n    label.innerHTML = DropdownIcon;\n    label.tabIndex = '0';\n    label.setAttribute('role', 'button');\n    label.setAttribute('aria-expanded', 'false');\n    this.container.appendChild(label);\n    return label;\n  }\n\n  buildOptions() {\n    let options = document.createElement('span');\n    options.classList.add('ql-picker-options');\n\n    // Don't want screen readers to read this until options are visible\n    options.setAttribute('aria-hidden', 'true');\n    options.tabIndex = '-1';\n\n    // Need a unique id for aria-controls\n    options.id = `ql-picker-options-${optionsCounter}`;\n    optionsCounter += 1;\n    this.label.setAttribute('aria-controls', options.id);\n\n    this.options = options;\n\n    [].slice.call(this.select.options).forEach((option) => {\n      let item = this.buildItem(option);\n      options.appendChild(item);\n      if (option.selected === true) {\n        this.selectItem(item);\n      }\n    });\n    this.container.appendChild(options);\n  }\n\n  buildPicker() {\n    [].slice.call(this.select.attributes).forEach((item) => {\n      this.container.setAttribute(item.name, item.value);\n    });\n    this.container.classList.add('ql-picker');\n    this.label = this.buildLabel();\n    this.buildOptions();\n  }\n\n  escape() {\n    // Close menu and return focus to trigger label\n    this.close();\n    // Need setTimeout for accessibility to ensure that the browser executes\n    // focus on the next process thread and after any DOM content changes\n    setTimeout(() => this.label.focus(), 1);\n  }\n\n  close() {\n    this.container.classList.remove('ql-expanded');\n    this.label.setAttribute('aria-expanded', 'false');\n    this.options.setAttribute('aria-hidden', 'true');\n  }\n\n  selectItem(item, trigger = false) {\n    let selected = this.container.querySelector('.ql-selected');\n    if (item === selected) return;\n    if (selected != null) {\n      selected.classList.remove('ql-selected');\n    }\n    if (item == null) return;\n    item.classList.add('ql-selected');\n    this.select.selectedIndex = [].indexOf.call(item.parentNode.children, item);\n    if (item.hasAttribute('data-value')) {\n      this.label.setAttribute('data-value', item.getAttribute('data-value'));\n    } else {\n      this.label.removeAttribute('data-value');\n    }\n    if (item.hasAttribute('data-label')) {\n      this.label.setAttribute('data-label', item.getAttribute('data-label'));\n    } else {\n      this.label.removeAttribute('data-label');\n    }\n    if (trigger) {\n      if (typeof Event === 'function') {\n        this.select.dispatchEvent(new Event('change'));\n      } else if (typeof Event === 'object') {     // IE11\n        let event = document.createEvent('Event');\n        event.initEvent('change', true, true);\n        this.select.dispatchEvent(event);\n      }\n      this.close();\n    }\n  }\n\n  update() {\n    let option;\n    if (this.select.selectedIndex > -1) {\n      let item = this.container.querySelector('.ql-picker-options').children[this.select.selectedIndex];\n      option = this.select.options[this.select.selectedIndex];\n      this.selectItem(item);\n    } else {\n      this.selectItem(null);\n    }\n    let isActive = option != null && option !== this.select.querySelector('option[selected]');\n    this.label.classList.toggle('ql-active', isActive);\n  }\n}\n\n\nexport default Picker;\n\n\n\n// WEBPACK FOOTER //\n// ./ui/picker.js","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar linked_list_1 = require(\"../../collection/linked-list\");\nvar shadow_1 = require(\"./shadow\");\nvar Registry = require(\"../../registry\");\nvar ContainerBlot = /** @class */ (function (_super) {\n    __extends(ContainerBlot, _super);\n    function ContainerBlot(domNode) {\n        var _this = _super.call(this, domNode) || this;\n        _this.build();\n        return _this;\n    }\n    ContainerBlot.prototype.appendChild = function (other) {\n        this.insertBefore(other);\n    };\n    ContainerBlot.prototype.attach = function () {\n        _super.prototype.attach.call(this);\n        this.children.forEach(function (child) {\n            child.attach();\n        });\n    };\n    ContainerBlot.prototype.build = function () {\n        var _this = this;\n        this.children = new linked_list_1.default();\n        // Need to be reversed for if DOM nodes already in order\n        [].slice\n            .call(this.domNode.childNodes)\n            .reverse()\n            .forEach(function (node) {\n            try {\n                var child = makeBlot(node);\n                _this.insertBefore(child, _this.children.head || undefined);\n            }\n            catch (err) {\n                if (err instanceof Registry.ParchmentError)\n                    return;\n                else\n                    throw err;\n            }\n        });\n    };\n    ContainerBlot.prototype.deleteAt = function (index, length) {\n        if (index === 0 && length === this.length()) {\n            return this.remove();\n        }\n        this.children.forEachAt(index, length, function (child, offset, length) {\n            child.deleteAt(offset, length);\n        });\n    };\n    ContainerBlot.prototype.descendant = function (criteria, index) {\n        var _a = this.children.find(index), child = _a[0], offset = _a[1];\n        if ((criteria.blotName == null && criteria(child)) ||\n            (criteria.blotName != null && child instanceof criteria)) {\n            return [child, offset];\n        }\n        else if (child instanceof ContainerBlot) {\n            return child.descendant(criteria, offset);\n        }\n        else {\n            return [null, -1];\n        }\n    };\n    ContainerBlot.prototype.descendants = function (criteria, index, length) {\n        if (index === void 0) { index = 0; }\n        if (length === void 0) { length = Number.MAX_VALUE; }\n        var descendants = [];\n        var lengthLeft = length;\n        this.children.forEachAt(index, length, function (child, index, length) {\n            if ((criteria.blotName == null && criteria(child)) ||\n                (criteria.blotName != null && child instanceof criteria)) {\n                descendants.push(child);\n            }\n            if (child instanceof ContainerBlot) {\n                descendants = descendants.concat(child.descendants(criteria, index, lengthLeft));\n            }\n            lengthLeft -= length;\n        });\n        return descendants;\n    };\n    ContainerBlot.prototype.detach = function () {\n        this.children.forEach(function (child) {\n            child.detach();\n        });\n        _super.prototype.detach.call(this);\n    };\n    ContainerBlot.prototype.formatAt = function (index, length, name, value) {\n        this.children.forEachAt(index, length, function (child, offset, length) {\n            child.formatAt(offset, length, name, value);\n        });\n    };\n    ContainerBlot.prototype.insertAt = function (index, value, def) {\n        var _a = this.children.find(index), child = _a[0], offset = _a[1];\n        if (child) {\n            child.insertAt(offset, value, def);\n        }\n        else {\n            var blot = def == null ? Registry.create('text', value) : Registry.create(value, def);\n            this.appendChild(blot);\n        }\n    };\n    ContainerBlot.prototype.insertBefore = function (childBlot, refBlot) {\n        if (this.statics.allowedChildren != null &&\n            !this.statics.allowedChildren.some(function (child) {\n                return childBlot instanceof child;\n            })) {\n            throw new Registry.ParchmentError(\"Cannot insert \" + childBlot.statics.blotName + \" into \" + this.statics.blotName);\n        }\n        childBlot.insertInto(this, refBlot);\n    };\n    ContainerBlot.prototype.length = function () {\n        return this.children.reduce(function (memo, child) {\n            return memo + child.length();\n        }, 0);\n    };\n    ContainerBlot.prototype.moveChildren = function (targetParent, refNode) {\n        this.children.forEach(function (child) {\n            targetParent.insertBefore(child, refNode);\n        });\n    };\n    ContainerBlot.prototype.optimize = function (context) {\n        _super.prototype.optimize.call(this, context);\n        if (this.children.length === 0) {\n            if (this.statics.defaultChild != null) {\n                var child = Registry.create(this.statics.defaultChild);\n                this.appendChild(child);\n                child.optimize(context);\n            }\n            else {\n                this.remove();\n            }\n        }\n    };\n    ContainerBlot.prototype.path = function (index, inclusive) {\n        if (inclusive === void 0) { inclusive = false; }\n        var _a = this.children.find(index, inclusive), child = _a[0], offset = _a[1];\n        var position = [[this, index]];\n        if (child instanceof ContainerBlot) {\n            return position.concat(child.path(offset, inclusive));\n        }\n        else if (child != null) {\n            position.push([child, offset]);\n        }\n        return position;\n    };\n    ContainerBlot.prototype.removeChild = function (child) {\n        this.children.remove(child);\n    };\n    ContainerBlot.prototype.replace = function (target) {\n        if (target instanceof ContainerBlot) {\n            target.moveChildren(this);\n        }\n        _super.prototype.replace.call(this, target);\n    };\n    ContainerBlot.prototype.split = function (index, force) {\n        if (force === void 0) { force = false; }\n        if (!force) {\n            if (index === 0)\n                return this;\n            if (index === this.length())\n                return this.next;\n        }\n        var after = this.clone();\n        this.parent.insertBefore(after, this.next);\n        this.children.forEachAt(index, this.length(), function (child, offset, length) {\n            child = child.split(offset, force);\n            after.appendChild(child);\n        });\n        return after;\n    };\n    ContainerBlot.prototype.unwrap = function () {\n        this.moveChildren(this.parent, this.next);\n        this.remove();\n    };\n    ContainerBlot.prototype.update = function (mutations, context) {\n        var _this = this;\n        var addedNodes = [];\n        var removedNodes = [];\n        mutations.forEach(function (mutation) {\n            if (mutation.target === _this.domNode && mutation.type === 'childList') {\n                addedNodes.push.apply(addedNodes, mutation.addedNodes);\n                removedNodes.push.apply(removedNodes, mutation.removedNodes);\n            }\n        });\n        removedNodes.forEach(function (node) {\n            // Check node has actually been removed\n            // One exception is Chrome does not immediately remove IFRAMEs\n            // from DOM but MutationRecord is correct in its reported removal\n            if (node.parentNode != null &&\n                // @ts-ignore\n                node.tagName !== 'IFRAME' &&\n                document.body.compareDocumentPosition(node) & Node.DOCUMENT_POSITION_CONTAINED_BY) {\n                return;\n            }\n            var blot = Registry.find(node);\n            if (blot == null)\n                return;\n            if (blot.domNode.parentNode == null || blot.domNode.parentNode === _this.domNode) {\n                blot.detach();\n            }\n        });\n        addedNodes\n            .filter(function (node) {\n            return node.parentNode == _this.domNode;\n        })\n            .sort(function (a, b) {\n            if (a === b)\n                return 0;\n            if (a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_FOLLOWING) {\n                return 1;\n            }\n            return -1;\n        })\n            .forEach(function (node) {\n            var refBlot = null;\n            if (node.nextSibling != null) {\n                refBlot = Registry.find(node.nextSibling);\n            }\n            var blot = makeBlot(node);\n            if (blot.next != refBlot || blot.next == null) {\n                if (blot.parent != null) {\n                    blot.parent.removeChild(_this);\n                }\n                _this.insertBefore(blot, refBlot || undefined);\n            }\n        });\n    };\n    return ContainerBlot;\n}(shadow_1.default));\nfunction makeBlot(node) {\n    var blot = Registry.find(node);\n    if (blot == null) {\n        try {\n            blot = Registry.create(node);\n        }\n        catch (e) {\n            blot = Registry.create(Registry.Scope.INLINE);\n            [].slice.call(node.childNodes).forEach(function (child) {\n                // @ts-ignore\n                blot.domNode.appendChild(child);\n            });\n            if (node.parentNode) {\n                node.parentNode.replaceChild(blot.domNode, node);\n            }\n            blot.attach();\n        }\n    }\n    return blot;\n}\nexports.default = ContainerBlot;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/parchment/src/blot/abstract/container.ts\n// module id = 17\n// module chunks = 0","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar attributor_1 = require(\"../../attributor/attributor\");\nvar store_1 = require(\"../../attributor/store\");\nvar container_1 = require(\"./container\");\nvar Registry = require(\"../../registry\");\nvar FormatBlot = /** @class */ (function (_super) {\n    __extends(FormatBlot, _super);\n    function FormatBlot(domNode) {\n        var _this = _super.call(this, domNode) || this;\n        _this.attributes = new store_1.default(_this.domNode);\n        return _this;\n    }\n    FormatBlot.formats = function (domNode) {\n        if (typeof this.tagName === 'string') {\n            return true;\n        }\n        else if (Array.isArray(this.tagName)) {\n            return domNode.tagName.toLowerCase();\n        }\n        return undefined;\n    };\n    FormatBlot.prototype.format = function (name, value) {\n        var format = Registry.query(name);\n        if (format instanceof attributor_1.default) {\n            this.attributes.attribute(format, value);\n        }\n        else if (value) {\n            if (format != null && (name !== this.statics.blotName || this.formats()[name] !== value)) {\n                this.replaceWith(name, value);\n            }\n        }\n    };\n    FormatBlot.prototype.formats = function () {\n        var formats = this.attributes.values();\n        var format = this.statics.formats(this.domNode);\n        if (format != null) {\n            formats[this.statics.blotName] = format;\n        }\n        return formats;\n    };\n    FormatBlot.prototype.replaceWith = function (name, value) {\n        var replacement = _super.prototype.replaceWith.call(this, name, value);\n        this.attributes.copy(replacement);\n        return replacement;\n    };\n    FormatBlot.prototype.update = function (mutations, context) {\n        var _this = this;\n        _super.prototype.update.call(this, mutations, context);\n        if (mutations.some(function (mutation) {\n            return mutation.target === _this.domNode && mutation.type === 'attributes';\n        })) {\n            this.attributes.build();\n        }\n    };\n    FormatBlot.prototype.wrap = function (name, value) {\n        var wrapper = _super.prototype.wrap.call(this, name, value);\n        if (wrapper instanceof FormatBlot && wrapper.statics.scope === this.statics.scope) {\n            this.attributes.move(wrapper);\n        }\n        return wrapper;\n    };\n    return FormatBlot;\n}(container_1.default));\nexports.default = FormatBlot;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/parchment/src/blot/abstract/format.ts\n// module id = 18\n// module chunks = 0","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar shadow_1 = require(\"./shadow\");\nvar Registry = require(\"../../registry\");\nvar LeafBlot = /** @class */ (function (_super) {\n    __extends(LeafBlot, _super);\n    function LeafBlot() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    LeafBlot.value = function (domNode) {\n        return true;\n    };\n    LeafBlot.prototype.index = function (node, offset) {\n        if (this.domNode === node ||\n            this.domNode.compareDocumentPosition(node) & Node.DOCUMENT_POSITION_CONTAINED_BY) {\n            return Math.min(offset, 1);\n        }\n        return -1;\n    };\n    LeafBlot.prototype.position = function (index, inclusive) {\n        var offset = [].indexOf.call(this.parent.domNode.childNodes, this.domNode);\n        if (index > 0)\n            offset += 1;\n        return [this.parent.domNode, offset];\n    };\n    LeafBlot.prototype.value = function () {\n        return _a = {}, _a[this.statics.blotName] = this.statics.value(this.domNode) || true, _a;\n        var _a;\n    };\n    LeafBlot.scope = Registry.Scope.INLINE_BLOT;\n    return LeafBlot;\n}(shadow_1.default));\nexports.default = LeafBlot;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/parchment/src/blot/abstract/leaf.ts\n// module id = 19\n// module chunks = 0","var equal = require('deep-equal');\nvar extend = require('extend');\n\n\nvar lib = {\n  attributes: {\n    compose: function (a, b, keepNull) {\n      if (typeof a !== 'object') a = {};\n      if (typeof b !== 'object') b = {};\n      var attributes = extend(true, {}, b);\n      if (!keepNull) {\n        attributes = Object.keys(attributes).reduce(function (copy, key) {\n          if (attributes[key] != null) {\n            copy[key] = attributes[key];\n          }\n          return copy;\n        }, {});\n      }\n      for (var key in a) {\n        if (a[key] !== undefined && b[key] === undefined) {\n          attributes[key] = a[key];\n        }\n      }\n      return Object.keys(attributes).length > 0 ? attributes : undefined;\n    },\n\n    diff: function(a, b) {\n      if (typeof a !== 'object') a = {};\n      if (typeof b !== 'object') b = {};\n      var attributes = Object.keys(a).concat(Object.keys(b)).reduce(function (attributes, key) {\n        if (!equal(a[key], b[key])) {\n          attributes[key] = b[key] === undefined ? null : b[key];\n        }\n        return attributes;\n      }, {});\n      return Object.keys(attributes).length > 0 ? attributes : undefined;\n    },\n\n    transform: function (a, b, priority) {\n      if (typeof a !== 'object') return b;\n      if (typeof b !== 'object') return undefined;\n      if (!priority) return b;  // b simply overwrites us without priority\n      var attributes = Object.keys(b).reduce(function (attributes, key) {\n        if (a[key] === undefined) attributes[key] = b[key];  // null is a valid value\n        return attributes;\n      }, {});\n      return Object.keys(attributes).length > 0 ? attributes : undefined;\n    }\n  },\n\n  iterator: function (ops) {\n    return new Iterator(ops);\n  },\n\n  length: function (op) {\n    if (typeof op['delete'] === 'number') {\n      return op['delete'];\n    } else if (typeof op.retain === 'number') {\n      return op.retain;\n    } else {\n      return typeof op.insert === 'string' ? op.insert.length : 1;\n    }\n  }\n};\n\n\nfunction Iterator(ops) {\n  this.ops = ops;\n  this.index = 0;\n  this.offset = 0;\n};\n\nIterator.prototype.hasNext = function () {\n  return this.peekLength() < Infinity;\n};\n\nIterator.prototype.next = function (length) {\n  if (!length) length = Infinity;\n  var nextOp = this.ops[this.index];\n  if (nextOp) {\n    var offset = this.offset;\n    var opLength = lib.length(nextOp)\n    if (length >= opLength - offset) {\n      length = opLength - offset;\n      this.index += 1;\n      this.offset = 0;\n    } else {\n      this.offset += length;\n    }\n    if (typeof nextOp['delete'] === 'number') {\n      return { 'delete': length };\n    } else {\n      var retOp = {};\n      if (nextOp.attributes) {\n        retOp.attributes = nextOp.attributes;\n      }\n      if (typeof nextOp.retain === 'number') {\n        retOp.retain = length;\n      } else if (typeof nextOp.insert === 'string') {\n        retOp.insert = nextOp.insert.substr(offset, length);\n      } else {\n        // offset should === 0, length should === 1\n        retOp.insert = nextOp.insert;\n      }\n      return retOp;\n    }\n  } else {\n    return { retain: Infinity };\n  }\n};\n\nIterator.prototype.peek = function () {\n  return this.ops[this.index];\n};\n\nIterator.prototype.peekLength = function () {\n  if (this.ops[this.index]) {\n    // Should never return 0 if our index is being managed correctly\n    return lib.length(this.ops[this.index]) - this.offset;\n  } else {\n    return Infinity;\n  }\n};\n\nIterator.prototype.peekType = function () {\n  if (this.ops[this.index]) {\n    if (typeof this.ops[this.index]['delete'] === 'number') {\n      return 'delete';\n    } else if (typeof this.ops[this.index].retain === 'number') {\n      return 'retain';\n    } else {\n      return 'insert';\n    }\n  }\n  return 'retain';\n};\n\n\nmodule.exports = lib;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/quill-delta/lib/op.js\n// module id = 20\n// module chunks = 0","var clone = (function() {\n'use strict';\n\nfunction _instanceof(obj, type) {\n  return type != null && obj instanceof type;\n}\n\nvar nativeMap;\ntry {\n  nativeMap = Map;\n} catch(_) {\n  // maybe a reference error because no `Map`. Give it a dummy value that no\n  // value will ever be an instanceof.\n  nativeMap = function() {};\n}\n\nvar nativeSet;\ntry {\n  nativeSet = Set;\n} catch(_) {\n  nativeSet = function() {};\n}\n\nvar nativePromise;\ntry {\n  nativePromise = Promise;\n} catch(_) {\n  nativePromise = function() {};\n}\n\n/**\n * Clones (copies) an Object using deep copying.\n *\n * This function supports circular references by default, but if you are certain\n * there are no circular references in your object, you can save some CPU time\n * by calling clone(obj, false).\n *\n * Caution: if `circular` is false and `parent` contains circular references,\n * your program may enter an infinite loop and crash.\n *\n * @param `parent` - the object to be cloned\n * @param `circular` - set to true if the object to be cloned may contain\n *    circular references. (optional - true by default)\n * @param `depth` - set to a number if the object is only to be cloned to\n *    a particular depth. (optional - defaults to Infinity)\n * @param `prototype` - sets the prototype to be used when cloning an object.\n *    (optional - defaults to parent prototype).\n * @param `includeNonEnumerable` - set to true if the non-enumerable properties\n *    should be cloned as well. Non-enumerable properties on the prototype\n *    chain will be ignored. (optional - false by default)\n*/\nfunction clone(parent, circular, depth, prototype, includeNonEnumerable) {\n  if (typeof circular === 'object') {\n    depth = circular.depth;\n    prototype = circular.prototype;\n    includeNonEnumerable = circular.includeNonEnumerable;\n    circular = circular.circular;\n  }\n  // maintain two arrays for circular references, where corresponding parents\n  // and children have the same index\n  var allParents = [];\n  var allChildren = [];\n\n  var useBuffer = typeof Buffer != 'undefined';\n\n  if (typeof circular == 'undefined')\n    circular = true;\n\n  if (typeof depth == 'undefined')\n    depth = Infinity;\n\n  // recurse this function so we don't reset allParents and allChildren\n  function _clone(parent, depth) {\n    // cloning null always returns null\n    if (parent === null)\n      return null;\n\n    if (depth === 0)\n      return parent;\n\n    var child;\n    var proto;\n    if (typeof parent != 'object') {\n      return parent;\n    }\n\n    if (_instanceof(parent, nativeMap)) {\n      child = new nativeMap();\n    } else if (_instanceof(parent, nativeSet)) {\n      child = new nativeSet();\n    } else if (_instanceof(parent, nativePromise)) {\n      child = new nativePromise(function (resolve, reject) {\n        parent.then(function(value) {\n          resolve(_clone(value, depth - 1));\n        }, function(err) {\n          reject(_clone(err, depth - 1));\n        });\n      });\n    } else if (clone.__isArray(parent)) {\n      child = [];\n    } else if (clone.__isRegExp(parent)) {\n      child = new RegExp(parent.source, __getRegExpFlags(parent));\n      if (parent.lastIndex) child.lastIndex = parent.lastIndex;\n    } else if (clone.__isDate(parent)) {\n      child = new Date(parent.getTime());\n    } else if (useBuffer && Buffer.isBuffer(parent)) {\n      child = new Buffer(parent.length);\n      parent.copy(child);\n      return child;\n    } else if (_instanceof(parent, Error)) {\n      child = Object.create(parent);\n    } else {\n      if (typeof prototype == 'undefined') {\n        proto = Object.getPrototypeOf(parent);\n        child = Object.create(proto);\n      }\n      else {\n        child = Object.create(prototype);\n        proto = prototype;\n      }\n    }\n\n    if (circular) {\n      var index = allParents.indexOf(parent);\n\n      if (index != -1) {\n        return allChildren[index];\n      }\n      allParents.push(parent);\n      allChildren.push(child);\n    }\n\n    if (_instanceof(parent, nativeMap)) {\n      parent.forEach(function(value, key) {\n        var keyChild = _clone(key, depth - 1);\n        var valueChild = _clone(value, depth - 1);\n        child.set(keyChild, valueChild);\n      });\n    }\n    if (_instanceof(parent, nativeSet)) {\n      parent.forEach(function(value) {\n        var entryChild = _clone(value, depth - 1);\n        child.add(entryChild);\n      });\n    }\n\n    for (var i in parent) {\n      var attrs;\n      if (proto) {\n        attrs = Object.getOwnPropertyDescriptor(proto, i);\n      }\n\n      if (attrs && attrs.set == null) {\n        continue;\n      }\n      child[i] = _clone(parent[i], depth - 1);\n    }\n\n    if (Object.getOwnPropertySymbols) {\n      var symbols = Object.getOwnPropertySymbols(parent);\n      for (var i = 0; i < symbols.length; i++) {\n        // Don't need to worry about cloning a symbol because it is a primitive,\n        // like a number or string.\n        var symbol = symbols[i];\n        var descriptor = Object.getOwnPropertyDescriptor(parent, symbol);\n        if (descriptor && !descriptor.enumerable && !includeNonEnumerable) {\n          continue;\n        }\n        child[symbol] = _clone(parent[symbol], depth - 1);\n        if (!descriptor.enumerable) {\n          Object.defineProperty(child, symbol, {\n            enumerable: false\n          });\n        }\n      }\n    }\n\n    if (includeNonEnumerable) {\n      var allPropertyNames = Object.getOwnPropertyNames(parent);\n      for (var i = 0; i < allPropertyNames.length; i++) {\n        var propertyName = allPropertyNames[i];\n        var descriptor = Object.getOwnPropertyDescriptor(parent, propertyName);\n        if (descriptor && descriptor.enumerable) {\n          continue;\n        }\n        child[propertyName] = _clone(parent[propertyName], depth - 1);\n        Object.defineProperty(child, propertyName, {\n          enumerable: false\n        });\n      }\n    }\n\n    return child;\n  }\n\n  return _clone(parent, depth);\n}\n\n/**\n * Simple flat clone using prototype, accepts only objects, usefull for property\n * override on FLAT configuration object (no nested props).\n *\n * USE WITH CAUTION! This may not behave as you wish if you do not know how this\n * works.\n */\nclone.clonePrototype = function clonePrototype(parent) {\n  if (parent === null)\n    return null;\n\n  var c = function () {};\n  c.prototype = parent;\n  return new c();\n};\n\n// private utility functions\n\nfunction __objToStr(o) {\n  return Object.prototype.toString.call(o);\n}\nclone.__objToStr = __objToStr;\n\nfunction __isDate(o) {\n  return typeof o === 'object' && __objToStr(o) === '[object Date]';\n}\nclone.__isDate = __isDate;\n\nfunction __isArray(o) {\n  return typeof o === 'object' && __objToStr(o) === '[object Array]';\n}\nclone.__isArray = __isArray;\n\nfunction __isRegExp(o) {\n  return typeof o === 'object' && __objToStr(o) === '[object RegExp]';\n}\nclone.__isRegExp = __isRegExp;\n\nfunction __getRegExpFlags(re) {\n  var flags = '';\n  if (re.global) flags += 'g';\n  if (re.ignoreCase) flags += 'i';\n  if (re.multiline) flags += 'm';\n  return flags;\n}\nclone.__getRegExpFlags = __getRegExpFlags;\n\nreturn clone;\n})();\n\nif (typeof module === 'object' && module.exports) {\n  module.exports = clone;\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/clone/clone.js\n// module id = 21\n// module chunks = 0","import Parchment from 'parchment';\nimport clone from 'clone';\nimport equal from 'deep-equal';\nimport Emitter from './emitter';\nimport logger from './logger';\n\nlet debug = logger('quill:selection');\n\n\nclass Range {\n  constructor(index, length = 0) {\n    this.index = index;\n    this.length = length;\n  }\n}\n\n\nclass Selection {\n  constructor(scroll, emitter) {\n    this.emitter = emitter;\n    this.scroll = scroll;\n    this.composing = false;\n    this.mouseDown = false;\n    this.root = this.scroll.domNode;\n    this.cursor = Parchment.create('cursor', this);\n    // savedRange is last non-null range\n    this.lastRange = this.savedRange = new Range(0, 0);\n    this.handleComposition();\n    this.handleDragging();\n    this.emitter.listenDOM('selectionchange', document, () => {\n      if (!this.mouseDown) {\n        setTimeout(this.update.bind(this, Emitter.sources.USER), 1);\n      }\n    });\n    this.emitter.on(Emitter.events.EDITOR_CHANGE, (type, delta) => {\n      if (type === Emitter.events.TEXT_CHANGE && delta.length() > 0) {\n        this.update(Emitter.sources.SILENT);\n      }\n    });\n    this.emitter.on(Emitter.events.SCROLL_BEFORE_UPDATE, () => {\n      if (!this.hasFocus()) return;\n      let native = this.getNativeRange();\n      if (native == null) return;\n      if (native.start.node === this.cursor.textNode) return;  // cursor.restore() will handle\n      // TODO unclear if this has negative side effects\n      this.emitter.once(Emitter.events.SCROLL_UPDATE, () => {\n        try {\n          this.setNativeRange(native.start.node, native.start.offset, native.end.node, native.end.offset);\n        } catch (ignored) {}\n      });\n    });\n    this.emitter.on(Emitter.events.SCROLL_OPTIMIZE, (mutations, context) => {\n      if (context.range) {\n        const { startNode, startOffset, endNode, endOffset } = context.range;\n        this.setNativeRange(startNode, startOffset, endNode, endOffset);\n      }\n    });\n    this.update(Emitter.sources.SILENT);\n  }\n\n  handleComposition() {\n    this.root.addEventListener('compositionstart', () => {\n      this.composing = true;\n    });\n    this.root.addEventListener('compositionend', () => {\n      this.composing = false;\n      if (this.cursor.parent) {\n        const range = this.cursor.restore();\n        if (!range) return;\n        setTimeout(() => {\n          this.setNativeRange(range.startNode, range.startOffset, range.endNode, range.endOffset);\n        }, 1);\n      }\n    });\n  }\n\n  handleDragging() {\n    this.emitter.listenDOM('mousedown', document.body, () => {\n      this.mouseDown = true;\n    });\n    this.emitter.listenDOM('mouseup', document.body, () => {\n      this.mouseDown = false;\n      this.update(Emitter.sources.USER);\n    });\n  }\n\n  focus() {\n    if (this.hasFocus()) return;\n    this.root.focus();\n    this.setRange(this.savedRange);\n  }\n\n  format(format, value) {\n    if (this.scroll.whitelist != null && !this.scroll.whitelist[format]) return;\n    this.scroll.update();\n    let nativeRange = this.getNativeRange();\n    if (nativeRange == null || !nativeRange.native.collapsed || Parchment.query(format, Parchment.Scope.BLOCK)) return;\n    if (nativeRange.start.node !== this.cursor.textNode) {\n      let blot = Parchment.find(nativeRange.start.node, false);\n      if (blot == null) return;\n      // TODO Give blot ability to not split\n      if (blot instanceof Parchment.Leaf) {\n        let after = blot.split(nativeRange.start.offset);\n        blot.parent.insertBefore(this.cursor, after);\n      } else {\n        blot.insertBefore(this.cursor, nativeRange.start.node);  // Should never happen\n      }\n      this.cursor.attach();\n    }\n    this.cursor.format(format, value);\n    this.scroll.optimize();\n    this.setNativeRange(this.cursor.textNode, this.cursor.textNode.data.length);\n    this.update();\n  }\n\n  getBounds(index, length = 0) {\n    let scrollLength = this.scroll.length();\n    index = Math.min(index, scrollLength - 1);\n    length = Math.min(index + length, scrollLength - 1) - index;\n    let node, [leaf, offset] = this.scroll.leaf(index);\n    if (leaf == null) return null;\n    [node, offset] = leaf.position(offset, true);\n    let range = document.createRange();\n    if (length > 0) {\n      range.setStart(node, offset);\n      [leaf, offset] = this.scroll.leaf(index + length);\n      if (leaf == null) return null;\n      [node, offset] = leaf.position(offset, true);\n      range.setEnd(node, offset);\n      return range.getBoundingClientRect();\n    } else {\n      let side = 'left';\n      let rect;\n      if (node instanceof Text) {\n        if (offset < node.data.length) {\n          range.setStart(node, offset);\n          range.setEnd(node, offset + 1);\n        } else {\n          range.setStart(node, offset - 1);\n          range.setEnd(node, offset);\n          side = 'right';\n        }\n        rect = range.getBoundingClientRect();\n      } else {\n        rect = leaf.domNode.getBoundingClientRect();\n        if (offset > 0) side = 'right';\n      }\n      return {\n        bottom: rect.top + rect.height,\n        height: rect.height,\n        left: rect[side],\n        right: rect[side],\n        top: rect.top,\n        width: 0\n      };\n    }\n  }\n\n  getNativeRange() {\n    let selection = document.getSelection();\n    if (selection == null || selection.rangeCount <= 0) return null;\n    let nativeRange = selection.getRangeAt(0);\n    if (nativeRange == null) return null;\n    let range = this.normalizeNative(nativeRange);\n    debug.info('getNativeRange', range);\n    return range;\n  }\n\n  getRange() {\n    let normalized = this.getNativeRange();\n    if (normalized == null) return [null, null];\n    let range = this.normalizedToRange(normalized);\n    return [range, normalized];\n  }\n\n  hasFocus() {\n    return document.activeElement === this.root;\n  }\n\n  normalizedToRange(range) {\n    let positions = [[range.start.node, range.start.offset]];\n    if (!range.native.collapsed) {\n      positions.push([range.end.node, range.end.offset]);\n    }\n    let indexes = positions.map((position) => {\n      let [node, offset] = position;\n      let blot = Parchment.find(node, true);\n      let index = blot.offset(this.scroll);\n      if (offset === 0) {\n        return index;\n      } else if (blot instanceof Parchment.Container) {\n        return index + blot.length();\n      } else {\n        return index + blot.index(node, offset);\n      }\n    });\n    let end = Math.min(Math.max(...indexes), this.scroll.length() - 1);\n    let start = Math.min(end, ...indexes);\n    return new Range(start, end-start);\n  }\n\n  normalizeNative(nativeRange) {\n    if (!contains(this.root, nativeRange.startContainer) ||\n        (!nativeRange.collapsed && !contains(this.root, nativeRange.endContainer))) {\n      return null;\n    }\n    let range = {\n      start: { node: nativeRange.startContainer, offset: nativeRange.startOffset },\n      end: { node: nativeRange.endContainer, offset: nativeRange.endOffset },\n      native: nativeRange\n    };\n    [range.start, range.end].forEach(function(position) {\n      let node = position.node, offset = position.offset;\n      while (!(node instanceof Text) && node.childNodes.length > 0) {\n        if (node.childNodes.length > offset) {\n          node = node.childNodes[offset];\n          offset = 0;\n        } else if (node.childNodes.length === offset) {\n          node = node.lastChild;\n          offset = node instanceof Text ? node.data.length : node.childNodes.length + 1;\n        } else {\n          break;\n        }\n      }\n      position.node = node, position.offset = offset;\n    });\n    return range;\n  }\n\n  rangeToNative(range) {\n    let indexes = range.collapsed ? [range.index] : [range.index, range.index + range.length];\n    let args = [];\n    let scrollLength = this.scroll.length();\n    indexes.forEach((index, i) => {\n      index = Math.min(scrollLength - 1, index);\n      let node, [leaf, offset] = this.scroll.leaf(index);\n      [node, offset] = leaf.position(offset, i !== 0);\n      args.push(node, offset);\n    });\n    if (args.length < 2) {\n      args = args.concat(args);\n    }\n    return args;\n  }\n\n  scrollIntoView(scrollingContainer) {\n    let range = this.lastRange;\n    if (range == null) return;\n    let bounds = this.getBounds(range.index, range.length);\n    if (bounds == null) return;\n    let limit = this.scroll.length()-1;\n    let [first, ] = this.scroll.line(Math.min(range.index, limit));\n    let last = first;\n    if (range.length > 0) {\n      [last, ] = this.scroll.line(Math.min(range.index + range.length, limit));\n    }\n    if (first == null || last == null) return;\n    let scrollBounds = scrollingContainer.getBoundingClientRect();\n    if (bounds.top < scrollBounds.top) {\n      scrollingContainer.scrollTop -= (scrollBounds.top - bounds.top);\n    } else if (bounds.bottom > scrollBounds.bottom) {\n      scrollingContainer.scrollTop += (bounds.bottom - scrollBounds.bottom);\n    }\n  }\n\n  setNativeRange(startNode, startOffset, endNode = startNode, endOffset = startOffset, force = false) {\n    debug.info('setNativeRange', startNode, startOffset, endNode, endOffset);\n    if (startNode != null && (this.root.parentNode == null || startNode.parentNode == null || endNode.parentNode == null)) {\n      return;\n    }\n    let selection = document.getSelection();\n    if (selection == null) return;\n    if (startNode != null) {\n      if (!this.hasFocus()) this.root.focus();\n      let native = (this.getNativeRange() || {}).native;\n      if (native == null || force ||\n          startNode !== native.startContainer ||\n          startOffset !== native.startOffset ||\n          endNode !== native.endContainer ||\n          endOffset !== native.endOffset) {\n\n        if (startNode.tagName == \"BR\") {\n          startOffset = [].indexOf.call(startNode.parentNode.childNodes, startNode);\n          startNode = startNode.parentNode;\n        }\n        if (endNode.tagName == \"BR\") {\n          endOffset = [].indexOf.call(endNode.parentNode.childNodes, endNode);\n          endNode = endNode.parentNode;\n        }\n        let range = document.createRange();\n        range.setStart(startNode, startOffset);\n        range.setEnd(endNode, endOffset);\n        selection.removeAllRanges();\n        selection.addRange(range);\n      }\n    } else {\n      selection.removeAllRanges();\n      this.root.blur();\n      document.body.focus();  // root.blur() not enough on IE11+Travis+SauceLabs (but not local VMs)\n    }\n  }\n\n  setRange(range, force = false, source = Emitter.sources.API) {\n    if (typeof force === 'string') {\n      source = force;\n      force = false;\n    }\n    debug.info('setRange', range);\n    if (range != null) {\n      let args = this.rangeToNative(range);\n      this.setNativeRange(...args, force);\n    } else {\n      this.setNativeRange(null);\n    }\n    this.update(source);\n  }\n\n  update(source = Emitter.sources.USER) {\n    let oldRange = this.lastRange;\n    let [lastRange, nativeRange] = this.getRange();\n    this.lastRange = lastRange;\n    if (this.lastRange != null) {\n      this.savedRange = this.lastRange;\n    }\n    if (!equal(oldRange, this.lastRange)) {\n      if (!this.composing && nativeRange != null && nativeRange.native.collapsed && nativeRange.start.node !== this.cursor.textNode) {\n        this.cursor.restore();\n      }\n      let args = [Emitter.events.SELECTION_CHANGE, clone(this.lastRange), clone(oldRange), source];\n      this.emitter.emit(Emitter.events.EDITOR_CHANGE, ...args);\n      if (source !== Emitter.sources.SILENT) {\n        this.emitter.emit(...args);\n      }\n    }\n  }\n}\n\n\nfunction contains(parent, descendant) {\n  try {\n    // Firefox inserts inaccessible nodes around video elements\n    descendant.parentNode;\n  } catch (e) {\n    return false;\n  }\n  // IE11 has bug with Text nodes\n  // https://connect.microsoft.com/IE/feedback/details/780874/node-contains-is-incorrect\n  if (descendant instanceof Text) {\n    descendant = descendant.parentNode;\n  }\n  return parent.contains(descendant);\n}\n\n\nexport { Range, Selection as default };\n\n\n\n// WEBPACK FOOTER //\n// ./core/selection.js","import Parchment from 'parchment';\nimport Block, { BlockEmbed } from './block';\n\n\nclass Container extends Parchment.Container { }\nContainer.allowedChildren = [Block, BlockEmbed, Container];\n\n\nexport default Container;\n\n\n\n// WEBPACK FOOTER //\n// ./blots/container.js","import Parchment from 'parchment';\n\nclass ColorAttributor extends Parchment.Attributor.Style {\n  value(domNode) {\n    let value = super.value(domNode);\n    if (!value.startsWith('rgb(')) return value;\n    value = value.replace(/^[^\\d]+/, '').replace(/[^\\d]+$/, '');\n    return '#' + value.split(',').map(function(component) {\n      return ('00' + parseInt(component).toString(16)).slice(-2);\n    }).join('');\n  }\n}\n\nlet ColorClass = new Parchment.Attributor.Class('color', 'ql-color', {\n  scope: Parchment.Scope.INLINE\n});\nlet ColorStyle = new ColorAttributor('color', 'color', {\n  scope: Parchment.Scope.INLINE\n});\n\nexport { ColorAttributor, ColorClass, ColorStyle };\n\n\n\n// WEBPACK FOOTER //\n// ./formats/color.js","import clone from 'clone';\nimport equal from 'deep-equal';\nimport extend from 'extend';\nimport Delta from 'quill-delta';\nimport DeltaOp from 'quill-delta/lib/op';\nimport Parchment from 'parchment';\nimport Quill from '../core/quill';\nimport logger from '../core/logger';\nimport Module from '../core/module';\n\nlet debug = logger('quill:keyboard');\n\nconst SHORTKEY = /Mac/i.test(navigator.platform) ? 'metaKey' : 'ctrlKey';\n\n\nclass Keyboard extends Module {\n  static match(evt, binding) {\n    binding = normalize(binding);\n    if (['altKey', 'ctrlKey', 'metaKey', 'shiftKey'].some(function(key) {\n      return (!!binding[key] !== evt[key] && binding[key] !== null);\n    })) {\n      return false;\n    }\n    return binding.key === (evt.which || evt.keyCode);\n  }\n\n  constructor(quill, options) {\n    super(quill, options);\n    this.bindings = {};\n    Object.keys(this.options.bindings).forEach((name) => {\n      if (name === 'list autofill' &&\n          quill.scroll.whitelist != null &&\n          !quill.scroll.whitelist['list']) {\n        return;\n      }\n      if (this.options.bindings[name]) {\n        this.addBinding(this.options.bindings[name]);\n      }\n    });\n    this.addBinding({ key: Keyboard.keys.ENTER, shiftKey: null }, handleEnter);\n    this.addBinding({ key: Keyboard.keys.ENTER, metaKey: null, ctrlKey: null, altKey: null }, function() {});\n    if (/Firefox/i.test(navigator.userAgent)) {\n      // Need to handle delete and backspace for Firefox in the general case #1171\n      this.addBinding({ key: Keyboard.keys.BACKSPACE }, { collapsed: true }, handleBackspace);\n      this.addBinding({ key: Keyboard.keys.DELETE }, { collapsed: true }, handleDelete);\n    } else {\n      this.addBinding({ key: Keyboard.keys.BACKSPACE }, { collapsed: true, prefix: /^.?$/ }, handleBackspace);\n      this.addBinding({ key: Keyboard.keys.DELETE }, { collapsed: true, suffix: /^.?$/ }, handleDelete);\n    }\n    this.addBinding({ key: Keyboard.keys.BACKSPACE }, { collapsed: false }, handleDeleteRange);\n    this.addBinding({ key: Keyboard.keys.DELETE }, { collapsed: false }, handleDeleteRange);\n    this.addBinding({ key: Keyboard.keys.BACKSPACE, altKey: null, ctrlKey: null, metaKey: null, shiftKey: null },\n                    { collapsed: true, offset: 0 },\n                    handleBackspace);\n    this.listen();\n  }\n\n  addBinding(key, context = {}, handler = {}) {\n    let binding = normalize(key);\n    if (binding == null || binding.key == null) {\n      return debug.warn('Attempted to add invalid keyboard binding', binding);\n    }\n    if (typeof context === 'function') {\n      context = { handler: context };\n    }\n    if (typeof handler === 'function') {\n      handler = { handler: handler };\n    }\n    binding = extend(binding, context, handler);\n    this.bindings[binding.key] = this.bindings[binding.key] || [];\n    this.bindings[binding.key].push(binding);\n  }\n\n  listen() {\n    this.quill.root.addEventListener('keydown', (evt) => {\n      if (evt.defaultPrevented) return;\n      let which = evt.which || evt.keyCode;\n      let bindings = (this.bindings[which] || []).filter(function(binding) {\n        return Keyboard.match(evt, binding);\n      });\n      if (bindings.length === 0) return;\n      let range = this.quill.getSelection();\n      if (range == null || !this.quill.hasFocus()) return;\n      let [line, offset] = this.quill.getLine(range.index);\n      let [leafStart, offsetStart] = this.quill.getLeaf(range.index);\n      let [leafEnd, offsetEnd] = range.length === 0 ? [leafStart, offsetStart] : this.quill.getLeaf(range.index + range.length);\n      let prefixText = leafStart instanceof Parchment.Text ? leafStart.value().slice(0, offsetStart) : '';\n      let suffixText = leafEnd instanceof Parchment.Text ? leafEnd.value().slice(offsetEnd) : '';\n      let curContext = {\n        collapsed: range.length === 0,\n        empty: range.length === 0 && line.length() <= 1,\n        format: this.quill.getFormat(range),\n        offset: offset,\n        prefix: prefixText,\n        suffix: suffixText\n      };\n      let prevented = bindings.some((binding) => {\n        if (binding.collapsed != null && binding.collapsed !== curContext.collapsed) return false;\n        if (binding.empty != null && binding.empty !== curContext.empty) return false;\n        if (binding.offset != null && binding.offset !== curContext.offset) return false;\n        if (Array.isArray(binding.format)) {\n          // any format is present\n          if (binding.format.every(function(name) {\n            return curContext.format[name] == null;\n          })) {\n            return false;\n          }\n        } else if (typeof binding.format === 'object') {\n          // all formats must match\n          if (!Object.keys(binding.format).every(function(name) {\n            if (binding.format[name] === true) return curContext.format[name] != null;\n            if (binding.format[name] === false) return curContext.format[name] == null;\n            return equal(binding.format[name], curContext.format[name]);\n          })) {\n            return false;\n          }\n        }\n        if (binding.prefix != null && !binding.prefix.test(curContext.prefix)) return false;\n        if (binding.suffix != null && !binding.suffix.test(curContext.suffix)) return false;\n        return binding.handler.call(this, range, curContext) !== true;\n      });\n      if (prevented) {\n        evt.preventDefault();\n      }\n    });\n  }\n}\n\nKeyboard.keys = {\n  BACKSPACE: 8,\n  TAB: 9,\n  ENTER: 13,\n  ESCAPE: 27,\n  LEFT: 37,\n  UP: 38,\n  RIGHT: 39,\n  DOWN: 40,\n  DELETE: 46\n};\n\nKeyboard.DEFAULTS = {\n  bindings: {\n    'bold'      : makeFormatHandler('bold'),\n    'italic'    : makeFormatHandler('italic'),\n    'underline' : makeFormatHandler('underline'),\n    'indent': {\n      // highlight tab or tab at beginning of list, indent or blockquote\n      key: Keyboard.keys.TAB,\n      format: ['blockquote', 'indent', 'list'],\n      handler: function(range, context) {\n        if (context.collapsed && context.offset !== 0) return true;\n        this.quill.format('indent', '+1', Quill.sources.USER);\n      }\n    },\n    'outdent': {\n      key: Keyboard.keys.TAB,\n      shiftKey: true,\n      format: ['blockquote', 'indent', 'list'],\n      // highlight tab or tab at beginning of list, indent or blockquote\n      handler: function(range, context) {\n        if (context.collapsed && context.offset !== 0) return true;\n        this.quill.format('indent', '-1', Quill.sources.USER);\n      }\n    },\n    'outdent backspace': {\n      key: Keyboard.keys.BACKSPACE,\n      collapsed: true,\n      shiftKey: null,\n      metaKey: null,\n      ctrlKey: null,\n      altKey: null,\n      format: ['indent', 'list'],\n      offset: 0,\n      handler: function(range, context) {\n        if (context.format.indent != null) {\n          this.quill.format('indent', '-1', Quill.sources.USER);\n        } else if (context.format.list != null) {\n          this.quill.format('list', false, Quill.sources.USER);\n        }\n      }\n    },\n    'indent code-block': makeCodeBlockHandler(true),\n    'outdent code-block': makeCodeBlockHandler(false),\n    'remove tab': {\n      key: Keyboard.keys.TAB,\n      shiftKey: true,\n      collapsed: true,\n      prefix: /\\t$/,\n      handler: function(range) {\n        this.quill.deleteText(range.index - 1, 1, Quill.sources.USER);\n      }\n    },\n    'tab': {\n      key: Keyboard.keys.TAB,\n      handler: function(range) {\n        this.quill.history.cutoff();\n        let delta = new Delta().retain(range.index)\n                               .delete(range.length)\n                               .insert('\\t');\n        this.quill.updateContents(delta, Quill.sources.USER);\n        this.quill.history.cutoff();\n        this.quill.setSelection(range.index + 1, Quill.sources.SILENT);\n      }\n    },\n    'list empty enter': {\n      key: Keyboard.keys.ENTER,\n      collapsed: true,\n      format: ['list'],\n      empty: true,\n      handler: function(range, context) {\n        this.quill.format('list', false, Quill.sources.USER);\n        if (context.format.indent) {\n          this.quill.format('indent', false, Quill.sources.USER);\n        }\n      }\n    },\n    'checklist enter': {\n      key: Keyboard.keys.ENTER,\n      collapsed: true,\n      format: { list: 'checked' },\n      handler: function(range) {\n        let [line, offset] = this.quill.getLine(range.index);\n        let formats = extend({}, line.formats(), { list: 'checked' });\n        let delta = new Delta().retain(range.index)\n                               .insert('\\n', formats)\n                               .retain(line.length() - offset - 1)\n                               .retain(1, { list: 'unchecked' });\n        this.quill.updateContents(delta, Quill.sources.USER);\n        this.quill.setSelection(range.index + 1, Quill.sources.SILENT);\n        this.quill.scrollIntoView();\n      }\n    },\n    'header enter': {\n      key: Keyboard.keys.ENTER,\n      collapsed: true,\n      format: ['header'],\n      suffix: /^$/,\n      handler: function(range, context) {\n        let [line, offset] = this.quill.getLine(range.index);\n        let delta = new Delta().retain(range.index)\n                               .insert('\\n', context.format)\n                               .retain(line.length() - offset - 1)\n                               .retain(1, { header: null });\n        this.quill.updateContents(delta, Quill.sources.USER);\n        this.quill.setSelection(range.index + 1, Quill.sources.SILENT);\n        this.quill.scrollIntoView();\n      }\n    },\n    'list autofill': {\n      key: ' ',\n      collapsed: true,\n      format: { list: false },\n      prefix: /^\\s*?(\\d+\\.|-|\\*|\\[ ?\\]|\\[x\\])$/,\n      handler: function(range, context) {\n        let length = context.prefix.length;\n        let [line, offset] = this.quill.getLine(range.index);\n        if (offset > length) return true;\n        let value;\n        switch (context.prefix.trim()) {\n          case '[]': case '[ ]':\n            value = 'unchecked';\n            break;\n          case '[x]':\n            value = 'checked';\n            break;\n          case '-': case '*':\n            value = 'bullet';\n            break;\n          default:\n            value = 'ordered';\n        }\n        this.quill.insertText(range.index, ' ', Quill.sources.USER);\n        this.quill.history.cutoff();\n        let delta = new Delta().retain(range.index - offset)\n                               .delete(length + 1)\n                               .retain(line.length() - 2 - offset)\n                               .retain(1, { list: value });\n        this.quill.updateContents(delta, Quill.sources.USER);\n        this.quill.history.cutoff();\n        this.quill.setSelection(range.index - length, Quill.sources.SILENT);\n      }\n    },\n    'code exit': {\n      key: Keyboard.keys.ENTER,\n      collapsed: true,\n      format: ['code-block'],\n      prefix: /\\n\\n$/,\n      suffix: /^\\s+$/,\n      handler: function(range) {\n        const [line, offset] = this.quill.getLine(range.index);\n        const delta = new Delta()\n          .retain(range.index + line.length() - offset - 2)\n          .retain(1, { 'code-block': null })\n          .delete(1);\n        this.quill.updateContents(delta, Quill.sources.USER);\n      }\n    },\n    'embed left': makeEmbedArrowHandler(Keyboard.keys.LEFT, false),\n    'embed left shift': makeEmbedArrowHandler(Keyboard.keys.LEFT, true),\n    'embed right': makeEmbedArrowHandler(Keyboard.keys.RIGHT, false),\n    'embed right shift': makeEmbedArrowHandler(Keyboard.keys.RIGHT, true)\n  }\n};\n\nfunction makeEmbedArrowHandler(key, shiftKey) {\n  const where = key === Keyboard.keys.LEFT ? 'prefix' : 'suffix';\n  return {\n    key,\n    shiftKey,\n    altKey: null,\n    [where]: /^$/,\n    handler: function(range) {\n      let index = range.index;\n      if (key === Keyboard.keys.RIGHT) {\n        index += (range.length + 1);\n      }\n      const [leaf, ] = this.quill.getLeaf(index);\n      if (!(leaf instanceof Parchment.Embed)) return true;\n      if (key === Keyboard.keys.LEFT) {\n        if (shiftKey) {\n          this.quill.setSelection(range.index - 1, range.length + 1, Quill.sources.USER);\n        } else {\n          this.quill.setSelection(range.index - 1, Quill.sources.USER);\n        }\n      } else {\n        if (shiftKey) {\n          this.quill.setSelection(range.index, range.length + 1, Quill.sources.USER);\n        } else {\n          this.quill.setSelection(range.index + range.length + 1, Quill.sources.USER);\n        }\n      }\n      return false;\n    }\n  };\n}\n\n\nfunction handleBackspace(range, context) {\n  if (range.index === 0 || this.quill.getLength() <= 1) return;\n  let [line, ] = this.quill.getLine(range.index);\n  let formats = {};\n  if (context.offset === 0) {\n    let [prev, ] = this.quill.getLine(range.index - 1);\n    if (prev != null && prev.length() > 1) {\n      let curFormats = line.formats();\n      let prevFormats = this.quill.getFormat(range.index-1, 1);\n      formats = DeltaOp.attributes.diff(curFormats, prevFormats) || {};\n    }\n  }\n  // Check for astral symbols\n  let length = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]$/.test(context.prefix) ? 2 : 1;\n  this.quill.deleteText(range.index-length, length, Quill.sources.USER);\n  if (Object.keys(formats).length > 0) {\n    this.quill.formatLine(range.index-length, length, formats, Quill.sources.USER);\n  }\n  this.quill.focus();\n}\n\nfunction handleDelete(range, context) {\n  // Check for astral symbols\n  let length = /^[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/.test(context.suffix) ? 2 : 1;\n  if (range.index >= this.quill.getLength() - length) return;\n  let formats = {}, nextLength = 0;\n  let [line, ] = this.quill.getLine(range.index);\n  if (context.offset >= line.length() - 1) {\n    let [next, ] = this.quill.getLine(range.index + 1);\n    if (next) {\n      let curFormats = line.formats();\n      let nextFormats = this.quill.getFormat(range.index, 1);\n      formats = DeltaOp.attributes.diff(curFormats, nextFormats) || {};\n      nextLength = next.length();\n    }\n  }\n  this.quill.deleteText(range.index, length, Quill.sources.USER);\n  if (Object.keys(formats).length > 0) {\n    this.quill.formatLine(range.index + nextLength - 1, length, formats, Quill.sources.USER);\n  }\n}\n\nfunction handleDeleteRange(range) {\n  let lines = this.quill.getLines(range);\n  let formats = {};\n  if (lines.length > 1) {\n    let firstFormats = lines[0].formats();\n    let lastFormats = lines[lines.length - 1].formats();\n    formats = DeltaOp.attributes.diff(lastFormats, firstFormats) || {};\n  }\n  this.quill.deleteText(range, Quill.sources.USER);\n  if (Object.keys(formats).length > 0) {\n    this.quill.formatLine(range.index, 1, formats, Quill.sources.USER);\n  }\n  this.quill.setSelection(range.index, Quill.sources.SILENT);\n  this.quill.focus();\n}\n\nfunction handleEnter(range, context) {\n  if (range.length > 0) {\n    this.quill.scroll.deleteAt(range.index, range.length);  // So we do not trigger text-change\n  }\n  let lineFormats = Object.keys(context.format).reduce(function(lineFormats, format) {\n    if (Parchment.query(format, Parchment.Scope.BLOCK) && !Array.isArray(context.format[format])) {\n      lineFormats[format] = context.format[format];\n    }\n    return lineFormats;\n  }, {});\n  this.quill.insertText(range.index, '\\n', lineFormats, Quill.sources.USER);\n  // Earlier scroll.deleteAt might have messed up our selection,\n  // so insertText's built in selection preservation is not reliable\n  this.quill.setSelection(range.index + 1, Quill.sources.SILENT);\n  this.quill.focus();\n  Object.keys(context.format).forEach((name) => {\n    if (lineFormats[name] != null) return;\n    if (Array.isArray(context.format[name])) return;\n    if (name === 'link') return;\n    this.quill.format(name, context.format[name], Quill.sources.USER);\n  });\n}\n\nfunction makeCodeBlockHandler(indent) {\n  return {\n    key: Keyboard.keys.TAB,\n    shiftKey: !indent,\n    format: {'code-block': true },\n    handler: function(range) {\n      let CodeBlock = Parchment.query('code-block');\n      let index = range.index, length = range.length;\n      let [block, offset] = this.quill.scroll.descendant(CodeBlock, index);\n      if (block == null) return;\n      let scrollIndex = this.quill.getIndex(block);\n      let start = block.newlineIndex(offset, true) + 1;\n      let end = block.newlineIndex(scrollIndex + offset + length);\n      let lines = block.domNode.textContent.slice(start, end).split('\\n');\n      offset = 0;\n      lines.forEach((line, i) => {\n        if (indent) {\n          block.insertAt(start + offset, CodeBlock.TAB);\n          offset += CodeBlock.TAB.length;\n          if (i === 0) {\n            index += CodeBlock.TAB.length;\n          } else {\n            length += CodeBlock.TAB.length;\n          }\n        } else if (line.startsWith(CodeBlock.TAB)) {\n          block.deleteAt(start + offset, CodeBlock.TAB.length);\n          offset -= CodeBlock.TAB.length;\n          if (i === 0) {\n            index -= CodeBlock.TAB.length;\n          } else {\n            length -= CodeBlock.TAB.length;\n          }\n        }\n        offset += line.length + 1;\n      });\n      this.quill.update(Quill.sources.USER);\n      this.quill.setSelection(index, length, Quill.sources.SILENT);\n    }\n  };\n}\n\nfunction makeFormatHandler(format) {\n  return {\n    key: format[0].toUpperCase(),\n    shortKey: true,\n    handler: function(range, context) {\n      this.quill.format(format, !context.format[format], Quill.sources.USER);\n    }\n  };\n}\n\nfunction normalize(binding) {\n  if (typeof binding === 'string' || typeof binding === 'number') {\n    return normalize({ key: binding });\n  }\n  if (typeof binding === 'object') {\n    binding = clone(binding, false);\n  }\n  if (typeof binding.key === 'string') {\n    if (Keyboard.keys[binding.key.toUpperCase()] != null) {\n      binding.key = Keyboard.keys[binding.key.toUpperCase()];\n    } else if (binding.key.length === 1) {\n      binding.key = binding.key.toUpperCase().charCodeAt(0);\n    } else {\n      return null;\n    }\n  }\n  if (binding.shortKey) {\n    binding[SHORTKEY] = binding.shortKey;\n    delete binding.shortKey;\n  }\n  return binding;\n}\n\n\nexport { Keyboard as default, SHORTKEY };\n\n\n\n// WEBPACK FOOTER //\n// ./modules/keyboard.js","module.exports = {\n  'align': {\n    ''        : require('../assets/icons/align-left.svg'),\n    'center'  : require('../assets/icons/align-center.svg'),\n    'right'   : require('../assets/icons/align-right.svg'),\n    'justify' : require('../assets/icons/align-justify.svg')\n  },\n  'background': require('../assets/icons/background.svg'),\n  'blockquote': require('../assets/icons/blockquote.svg'),\n  'bold'      : require('../assets/icons/bold.svg'),\n  'clean'     : require('../assets/icons/clean.svg'),\n  'code'      : require('../assets/icons/code.svg'),\n  'code-block': require('../assets/icons/code.svg'),\n  'color'     : require('../assets/icons/color.svg'),\n  'direction' : {\n    ''        : require('../assets/icons/direction-ltr.svg'),\n    'rtl'     : require('../assets/icons/direction-rtl.svg')\n  },\n  'float': {\n    'center'  : require('../assets/icons/float-center.svg'),\n    'full'    : require('../assets/icons/float-full.svg'),\n    'left'    : require('../assets/icons/float-left.svg'),\n    'right'   : require('../assets/icons/float-right.svg')\n  },\n  'formula'   : require('../assets/icons/formula.svg'),\n  'header': {\n    '1'       : require('../assets/icons/header.svg'),\n    '2'       : require('../assets/icons/header-2.svg')\n  },\n  'italic'    : require('../assets/icons/italic.svg'),\n  'image'     : require('../assets/icons/image.svg'),\n  'indent': {\n    '+1'      : require('../assets/icons/indent.svg'),\n    '-1'      : require('../assets/icons/outdent.svg')\n  },\n  'link'      : require('../assets/icons/link.svg'),\n  'list': {\n    'ordered' : require('../assets/icons/list-ordered.svg'),\n    'bullet'  : require('../assets/icons/list-bullet.svg'),\n    'check'   : require('../assets/icons/list-check.svg')\n  },\n  'script': {\n    'sub'     : require('../assets/icons/subscript.svg'),\n    'super'   : require('../assets/icons/superscript.svg'),\n  },\n  'strike'    : require('../assets/icons/strike.svg'),\n  'underline' : require('../assets/icons/underline.svg'),\n  'video'     : require('../assets/icons/video.svg')\n};\n\n\n\n// WEBPACK FOOTER //\n// ./ui/icons.js","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Registry = require(\"../../registry\");\nvar ShadowBlot = /** @class */ (function () {\n    function ShadowBlot(domNode) {\n        this.domNode = domNode;\n        // @ts-ignore\n        this.domNode[Registry.DATA_KEY] = { blot: this };\n    }\n    Object.defineProperty(ShadowBlot.prototype, \"statics\", {\n        // Hack for accessing inherited static methods\n        get: function () {\n            return this.constructor;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    ShadowBlot.create = function (value) {\n        if (this.tagName == null) {\n            throw new Registry.ParchmentError('Blot definition missing tagName');\n        }\n        var node;\n        if (Array.isArray(this.tagName)) {\n            if (typeof value === 'string') {\n                value = value.toUpperCase();\n                if (parseInt(value).toString() === value) {\n                    value = parseInt(value);\n                }\n            }\n            if (typeof value === 'number') {\n                node = document.createElement(this.tagName[value - 1]);\n            }\n            else if (this.tagName.indexOf(value) > -1) {\n                node = document.createElement(value);\n            }\n            else {\n                node = document.createElement(this.tagName[0]);\n            }\n        }\n        else {\n            node = document.createElement(this.tagName);\n        }\n        if (this.className) {\n            node.classList.add(this.className);\n        }\n        return node;\n    };\n    ShadowBlot.prototype.attach = function () {\n        if (this.parent != null) {\n            this.scroll = this.parent.scroll;\n        }\n    };\n    ShadowBlot.prototype.clone = function () {\n        var domNode = this.domNode.cloneNode(false);\n        return Registry.create(domNode);\n    };\n    ShadowBlot.prototype.detach = function () {\n        if (this.parent != null)\n            this.parent.removeChild(this);\n        // @ts-ignore\n        delete this.domNode[Registry.DATA_KEY];\n    };\n    ShadowBlot.prototype.deleteAt = function (index, length) {\n        var blot = this.isolate(index, length);\n        blot.remove();\n    };\n    ShadowBlot.prototype.formatAt = function (index, length, name, value) {\n        var blot = this.isolate(index, length);\n        if (Registry.query(name, Registry.Scope.BLOT) != null && value) {\n            blot.wrap(name, value);\n        }\n        else if (Registry.query(name, Registry.Scope.ATTRIBUTE) != null) {\n            var parent = Registry.create(this.statics.scope);\n            blot.wrap(parent);\n            parent.format(name, value);\n        }\n    };\n    ShadowBlot.prototype.insertAt = function (index, value, def) {\n        var blot = def == null ? Registry.create('text', value) : Registry.create(value, def);\n        var ref = this.split(index);\n        this.parent.insertBefore(blot, ref);\n    };\n    ShadowBlot.prototype.insertInto = function (parentBlot, refBlot) {\n        if (refBlot === void 0) { refBlot = null; }\n        if (this.parent != null) {\n            this.parent.children.remove(this);\n        }\n        var refDomNode = null;\n        parentBlot.children.insertBefore(this, refBlot);\n        if (refBlot != null) {\n            refDomNode = refBlot.domNode;\n        }\n        if (this.domNode.parentNode != parentBlot.domNode ||\n            this.domNode.nextSibling != refDomNode) {\n            parentBlot.domNode.insertBefore(this.domNode, refDomNode);\n        }\n        this.parent = parentBlot;\n        this.attach();\n    };\n    ShadowBlot.prototype.isolate = function (index, length) {\n        var target = this.split(index);\n        target.split(length);\n        return target;\n    };\n    ShadowBlot.prototype.length = function () {\n        return 1;\n    };\n    ShadowBlot.prototype.offset = function (root) {\n        if (root === void 0) { root = this.parent; }\n        if (this.parent == null || this == root)\n            return 0;\n        return this.parent.children.offset(this) + this.parent.offset(root);\n    };\n    ShadowBlot.prototype.optimize = function (context) {\n        // TODO clean up once we use WeakMap\n        // @ts-ignore\n        if (this.domNode[Registry.DATA_KEY] != null) {\n            // @ts-ignore\n            delete this.domNode[Registry.DATA_KEY].mutations;\n        }\n    };\n    ShadowBlot.prototype.remove = function () {\n        if (this.domNode.parentNode != null) {\n            this.domNode.parentNode.removeChild(this.domNode);\n        }\n        this.detach();\n    };\n    ShadowBlot.prototype.replace = function (target) {\n        if (target.parent == null)\n            return;\n        target.parent.insertBefore(this, target.next);\n        target.remove();\n    };\n    ShadowBlot.prototype.replaceWith = function (name, value) {\n        var replacement = typeof name === 'string' ? Registry.create(name, value) : name;\n        replacement.replace(this);\n        return replacement;\n    };\n    ShadowBlot.prototype.split = function (index, force) {\n        return index === 0 ? this : this.next;\n    };\n    ShadowBlot.prototype.update = function (mutations, context) {\n        // Nothing to do by default\n    };\n    ShadowBlot.prototype.wrap = function (name, value) {\n        var wrapper = typeof name === 'string' ? Registry.create(name, value) : name;\n        if (this.parent != null) {\n            this.parent.insertBefore(wrapper, this.next);\n        }\n        wrapper.appendChild(this);\n        return wrapper;\n    };\n    ShadowBlot.blotName = 'abstract';\n    return ShadowBlot;\n}());\nexports.default = ShadowBlot;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/parchment/src/blot/abstract/shadow.ts\n// module id = 27\n// module chunks = 0","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar attributor_1 = require(\"./attributor\");\nvar class_1 = require(\"./class\");\nvar style_1 = require(\"./style\");\nvar Registry = require(\"../registry\");\nvar AttributorStore = /** @class */ (function () {\n    function AttributorStore(domNode) {\n        this.attributes = {};\n        this.domNode = domNode;\n        this.build();\n    }\n    AttributorStore.prototype.attribute = function (attribute, value) {\n        // verb\n        if (value) {\n            if (attribute.add(this.domNode, value)) {\n                if (attribute.value(this.domNode) != null) {\n                    this.attributes[attribute.attrName] = attribute;\n                }\n                else {\n                    delete this.attributes[attribute.attrName];\n                }\n            }\n        }\n        else {\n            attribute.remove(this.domNode);\n            delete this.attributes[attribute.attrName];\n        }\n    };\n    AttributorStore.prototype.build = function () {\n        var _this = this;\n        this.attributes = {};\n        var attributes = attributor_1.default.keys(this.domNode);\n        var classes = class_1.default.keys(this.domNode);\n        var styles = style_1.default.keys(this.domNode);\n        attributes\n            .concat(classes)\n            .concat(styles)\n            .forEach(function (name) {\n            var attr = Registry.query(name, Registry.Scope.ATTRIBUTE);\n            if (attr instanceof attributor_1.default) {\n                _this.attributes[attr.attrName] = attr;\n            }\n        });\n    };\n    AttributorStore.prototype.copy = function (target) {\n        var _this = this;\n        Object.keys(this.attributes).forEach(function (key) {\n            var value = _this.attributes[key].value(_this.domNode);\n            target.format(key, value);\n        });\n    };\n    AttributorStore.prototype.move = function (target) {\n        var _this = this;\n        this.copy(target);\n        Object.keys(this.attributes).forEach(function (key) {\n            _this.attributes[key].remove(_this.domNode);\n        });\n        this.attributes = {};\n    };\n    AttributorStore.prototype.values = function () {\n        var _this = this;\n        return Object.keys(this.attributes).reduce(function (attributes, name) {\n            attributes[name] = _this.attributes[name].value(_this.domNode);\n            return attributes;\n        }, {});\n    };\n    return AttributorStore;\n}());\nexports.default = AttributorStore;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/parchment/src/attributor/store.ts\n// module id = 28\n// module chunks = 0","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar attributor_1 = require(\"./attributor\");\nfunction match(node, prefix) {\n    var className = node.getAttribute('class') || '';\n    return className.split(/\\s+/).filter(function (name) {\n        return name.indexOf(prefix + \"-\") === 0;\n    });\n}\nvar ClassAttributor = /** @class */ (function (_super) {\n    __extends(ClassAttributor, _super);\n    function ClassAttributor() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    ClassAttributor.keys = function (node) {\n        return (node.getAttribute('class') || '').split(/\\s+/).map(function (name) {\n            return name\n                .split('-')\n                .slice(0, -1)\n                .join('-');\n        });\n    };\n    ClassAttributor.prototype.add = function (node, value) {\n        if (!this.canAdd(node, value))\n            return false;\n        this.remove(node);\n        node.classList.add(this.keyName + \"-\" + value);\n        return true;\n    };\n    ClassAttributor.prototype.remove = function (node) {\n        var matches = match(node, this.keyName);\n        matches.forEach(function (name) {\n            node.classList.remove(name);\n        });\n        if (node.classList.length === 0) {\n            node.removeAttribute('class');\n        }\n    };\n    ClassAttributor.prototype.value = function (node) {\n        var result = match(node, this.keyName)[0] || '';\n        var value = result.slice(this.keyName.length + 1); // +1 for hyphen\n        return this.canAdd(node, value) ? value : '';\n    };\n    return ClassAttributor;\n}(attributor_1.default));\nexports.default = ClassAttributor;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/parchment/src/attributor/class.ts\n// module id = 29\n// module chunks = 0","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar attributor_1 = require(\"./attributor\");\nfunction camelize(name) {\n    var parts = name.split('-');\n    var rest = parts\n        .slice(1)\n        .map(function (part) {\n        return part[0].toUpperCase() + part.slice(1);\n    })\n        .join('');\n    return parts[0] + rest;\n}\nvar StyleAttributor = /** @class */ (function (_super) {\n    __extends(StyleAttributor, _super);\n    function StyleAttributor() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    StyleAttributor.keys = function (node) {\n        return (node.getAttribute('style') || '').split(';').map(function (value) {\n            var arr = value.split(':');\n            return arr[0].trim();\n        });\n    };\n    StyleAttributor.prototype.add = function (node, value) {\n        if (!this.canAdd(node, value))\n            return false;\n        // @ts-ignore\n        node.style[camelize(this.keyName)] = value;\n        return true;\n    };\n    StyleAttributor.prototype.remove = function (node) {\n        // @ts-ignore\n        node.style[camelize(this.keyName)] = '';\n        if (!node.getAttribute('style')) {\n            node.removeAttribute('style');\n        }\n    };\n    StyleAttributor.prototype.value = function (node) {\n        // @ts-ignore\n        var value = node.style[camelize(this.keyName)];\n        return this.canAdd(node, value) ? value : '';\n    };\n    return StyleAttributor;\n}(attributor_1.default));\nexports.default = StyleAttributor;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/parchment/src/attributor/style.ts\n// module id = 30\n// module chunks = 0","import Parchment from 'parchment';\nimport TextBlot from './text';\n\n\nclass Cursor extends Parchment.Embed {\n  static value() {\n    return undefined;\n  }\n\n  constructor(domNode, selection) {\n    super(domNode);\n    this.selection = selection;\n    this.textNode = document.createTextNode(Cursor.CONTENTS);\n    this.domNode.appendChild(this.textNode);\n    this._length = 0;\n  }\n\n  detach() {\n    // super.detach() will also clear domNode.__blot\n    if (this.parent != null) this.parent.removeChild(this);\n  }\n\n  format(name, value) {\n    if (this._length !== 0) {\n      return super.format(name, value);\n    }\n    let target = this, index = 0;\n    while (target != null && target.statics.scope !== Parchment.Scope.BLOCK_BLOT) {\n      index += target.offset(target.parent);\n      target = target.parent;\n    }\n    if (target != null) {\n      this._length = Cursor.CONTENTS.length;\n      target.optimize();\n      target.formatAt(index, Cursor.CONTENTS.length, name, value);\n      this._length = 0;\n    }\n  }\n\n  index(node, offset) {\n    if (node === this.textNode) return 0;\n    return super.index(node, offset);\n  }\n\n  length() {\n    return this._length;\n  }\n\n  position() {\n    return [this.textNode, this.textNode.data.length];\n  }\n\n  remove() {\n    super.remove();\n    this.parent = null;\n  }\n\n  restore() {\n    if (this.selection.composing || this.parent == null) return;\n    let textNode = this.textNode;\n    let range = this.selection.getNativeRange();\n    let restoreText, start, end;\n    if (range != null && range.start.node === textNode && range.end.node === textNode) {\n      [restoreText, start, end] = [textNode, range.start.offset, range.end.offset];\n    }\n    // Link format will insert text outside of anchor tag\n    while (this.domNode.lastChild != null && this.domNode.lastChild !== this.textNode) {\n      this.domNode.parentNode.insertBefore(this.domNode.lastChild, this.domNode);\n    }\n    if (this.textNode.data !== Cursor.CONTENTS) {\n      let text = this.textNode.data.split(Cursor.CONTENTS).join('');\n      if (this.next instanceof TextBlot) {\n        restoreText = this.next.domNode;\n        this.next.insertAt(0, text);\n        this.textNode.data = Cursor.CONTENTS;\n      } else {\n        this.textNode.data = text;\n        this.parent.insertBefore(Parchment.create(this.textNode), this);\n        this.textNode = document.createTextNode(Cursor.CONTENTS);\n        this.domNode.appendChild(this.textNode);\n      }\n    }\n    this.remove();\n    if (start != null) {\n      [start, end] = [start, end].map(function(offset) {\n        return Math.max(0, Math.min(restoreText.data.length, offset - 1));\n      });\n      return {\n        startNode: restoreText,\n        startOffset: start,\n        endNode: restoreText,\n        endOffset: end\n      };\n    }\n  }\n\n  update(mutations, context) {\n    if (mutations.some((mutation) => {\n      return mutation.type === 'characterData' && mutation.target === this.textNode;\n    })) {\n      let range = this.restore();\n      if (range) context.range = range;\n    }\n  }\n\n  value() {\n    return '';\n  }\n}\nCursor.blotName = 'cursor';\nCursor.className = 'ql-cursor';\nCursor.tagName = 'span';\nCursor.CONTENTS = \"\\uFEFF\";   // Zero width no break space\n\n\nexport default Cursor;\n\n\n\n// WEBPACK FOOTER //\n// ./blots/cursor.js","class Theme {\n  constructor(quill, options) {\n    this.quill = quill;\n    this.options = options;\n    this.modules = {};\n  }\n\n  init() {\n    Object.keys(this.options.modules).forEach((name) => {\n      if (this.modules[name] == null) {\n        this.addModule(name);\n      }\n    });\n  }\n\n  addModule(name) {\n    let moduleClass = this.quill.constructor.import(`modules/${name}`);\n    this.modules[name] = new moduleClass(this.quill, this.options.modules[name] || {});\n    return this.modules[name];\n  }\n}\nTheme.DEFAULTS = {\n  modules: {}\n};\nTheme.themes = {\n  'default': Theme\n};\n\n\nexport default Theme;\n\n\n\n// WEBPACK FOOTER //\n// ./core/theme.js","import Parchment from 'parchment';\nimport TextBlot from './text';\n\nconst GUARD_TEXT = \"\\uFEFF\";\n\n\nclass Embed extends Parchment.Embed {\n  constructor(node) {\n    super(node);\n    this.contentNode = document.createElement('span');\n    this.contentNode.setAttribute('contenteditable', false);\n    [].slice.call(this.domNode.childNodes).forEach((childNode) => {\n      this.contentNode.appendChild(childNode);\n    });\n    this.leftGuard = document.createTextNode(GUARD_TEXT);\n    this.rightGuard = document.createTextNode(GUARD_TEXT);\n    this.domNode.appendChild(this.leftGuard);\n    this.domNode.appendChild(this.contentNode);\n    this.domNode.appendChild(this.rightGuard);\n  }\n\n  index(node, offset) {\n    if (node === this.leftGuard) return 0;\n    if (node === this.rightGuard) return 1;\n    return super.index(node, offset);\n  }\n\n  restore(node) {\n    let range, textNode;\n    let text = node.data.split(GUARD_TEXT).join('');\n    if (node === this.leftGuard) {\n      if (this.prev instanceof TextBlot) {\n        let prevLength = this.prev.length();\n        this.prev.insertAt(prevLength, text);\n        range = {\n          startNode: this.prev.domNode,\n          startOffset: prevLength + text.length\n        };\n      } else {\n        textNode = document.createTextNode(text);\n        this.parent.insertBefore(Parchment.create(textNode), this);\n        range = {\n          startNode: textNode,\n          startOffset: text.length\n        };\n      }\n    } else if (node === this.rightGuard) {\n      if (this.next instanceof TextBlot) {\n        this.next.insertAt(0, text);\n        range = {\n          startNode: this.next.domNode,\n          startOffset: text.length\n        }\n      } else {\n        textNode = document.createTextNode(text);\n        this.parent.insertBefore(Parchment.create(textNode), this.next);\n        range = {\n          startNode: textNode,\n          startOffset: text.length\n        };\n      }\n    }\n    node.data = GUARD_TEXT;\n    return range;\n  }\n\n  update(mutations, context) {\n    mutations.forEach((mutation) => {\n      if (mutation.type === 'characterData' &&\n          (mutation.target === this.leftGuard || mutation.target === this.rightGuard)) {\n        let range = this.restore(mutation.target);\n        if (range) context.range = range;\n      }\n    });\n  }\n}\n\n\nexport default Embed;\n\n\n\n// WEBPACK FOOTER //\n// ./blots/embed.js","import Parchment from 'parchment';\n\nlet config = {\n  scope: Parchment.Scope.BLOCK,\n  whitelist: ['right', 'center', 'justify']\n};\n\nlet AlignAttribute = new Parchment.Attributor.Attribute('align', 'align', config);\nlet AlignClass = new Parchment.Attributor.Class('align', 'ql-align', config);\nlet AlignStyle = new Parchment.Attributor.Style('align', 'text-align', config);\n\nexport { AlignAttribute, AlignClass, AlignStyle };\n\n\n\n// WEBPACK FOOTER //\n// ./formats/align.js","import Parchment from 'parchment';\nimport { ColorAttributor } from './color';\n\nlet BackgroundClass = new Parchment.Attributor.Class('background', 'ql-bg', {\n  scope: Parchment.Scope.INLINE\n});\nlet BackgroundStyle = new ColorAttributor('background', 'background-color', {\n  scope: Parchment.Scope.INLINE\n});\n\nexport { BackgroundClass, BackgroundStyle };\n\n\n\n// WEBPACK FOOTER //\n// ./formats/background.js","import Parchment from 'parchment';\n\nlet config = {\n  scope: Parchment.Scope.BLOCK,\n  whitelist: ['rtl']\n};\n\nlet DirectionAttribute = new Parchment.Attributor.Attribute('direction', 'dir', config);\nlet DirectionClass = new Parchment.Attributor.Class('direction', 'ql-direction', config);\nlet DirectionStyle = new Parchment.Attributor.Style('direction', 'direction', config);\n\nexport { DirectionAttribute, DirectionClass, DirectionStyle };\n\n\n\n// WEBPACK FOOTER //\n// ./formats/direction.js","import Parchment from 'parchment';\n\nlet config = {\n  scope: Parchment.Scope.INLINE,\n  whitelist: ['serif', 'monospace']\n};\n\nlet FontClass = new Parchment.Attributor.Class('font', 'ql-font', config);\n\nclass FontStyleAttributor extends Parchment.Attributor.Style {\n  value(node) {\n    return super.value(node).replace(/[\"']/g, '');\n  }\n}\n\nlet FontStyle = new FontStyleAttributor('font', 'font-family', config);\n\nexport { FontStyle, FontClass };\n\n\n\n// WEBPACK FOOTER //\n// ./formats/font.js","import Parchment from 'parchment';\n\nlet SizeClass = new Parchment.Attributor.Class('size', 'ql-size', {\n  scope: Parchment.Scope.INLINE,\n  whitelist: ['small', 'large', 'huge']\n});\nlet SizeStyle = new Parchment.Attributor.Style('size', 'font-size', {\n  scope: Parchment.Scope.INLINE,\n  whitelist: ['10px', '18px', '32px']\n});\n\nexport { SizeClass, SizeStyle };\n\n\n\n// WEBPACK FOOTER //\n// ./formats/size.js","import Inline from '../blots/inline';\n\nclass Bold extends Inline {\n  static create() {\n    return super.create();\n  }\n\n  static formats() {\n    return true;\n  }\n\n  optimize(context) {\n    super.optimize(context);\n    if (this.domNode.tagName !== this.statics.tagName[0]) {\n      this.replaceWith(this.statics.blotName);\n    }\n  }\n}\nBold.blotName = 'bold';\nBold.tagName = ['STRONG', 'B'];\n\nexport default Bold;\n\n\n\n// WEBPACK FOOTER //\n// ./formats/bold.js","module.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <polyline class=\\\"ql-even ql-stroke\\\" points=\\\"5 7 3 9 5 11\\\"></polyline> <polyline class=\\\"ql-even ql-stroke\\\" points=\\\"13 7 15 9 13 11\\\"></polyline> <line class=ql-stroke x1=10 x2=8 y1=5 y2=13></line> </svg>\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./assets/icons/code.svg\n// module id = 40\n// module chunks = 0","import Picker from './picker';\n\n\nclass ColorPicker extends Picker {\n  constructor(select, label) {\n    super(select);\n    this.label.innerHTML = label;\n    this.container.classList.add('ql-color-picker');\n    [].slice.call(this.container.querySelectorAll('.ql-picker-item'), 0, 7).forEach(function(item) {\n      item.classList.add('ql-primary');\n    });\n  }\n\n  buildItem(option) {\n    let item = super.buildItem(option);\n    item.style.backgroundColor = option.getAttribute('value') || '';\n    return item;\n  }\n\n  selectItem(item, trigger) {\n    super.selectItem(item, trigger);\n    let colorLabel = this.label.querySelector('.ql-color-label');\n    let value = item ? item.getAttribute('data-value') || '' : '';\n    if (colorLabel) {\n      if (colorLabel.tagName === 'line') {\n        colorLabel.style.stroke = value;\n      } else {\n        colorLabel.style.fill = value;\n      }\n    }\n  }\n}\n\n\nexport default ColorPicker;\n\n\n\n// WEBPACK FOOTER //\n// ./ui/color-picker.js","import Picker from './picker';\n\n\nclass IconPicker extends Picker {\n  constructor(select, icons) {\n    super(select);\n    this.container.classList.add('ql-icon-picker');\n    [].forEach.call(this.container.querySelectorAll('.ql-picker-item'), (item) => {\n      item.innerHTML = icons[item.getAttribute('data-value') || ''];\n    });\n    this.defaultItem = this.container.querySelector('.ql-selected');\n    this.selectItem(this.defaultItem);\n  }\n\n  selectItem(item, trigger) {\n    super.selectItem(item, trigger);\n    item = item || this.defaultItem;\n    this.label.innerHTML = item.innerHTML;\n  }\n}\n\n\nexport default IconPicker;\n\n\n\n// WEBPACK FOOTER //\n// ./ui/icon-picker.js","class Tooltip {\n  constructor(quill, boundsContainer) {\n    this.quill = quill;\n    this.boundsContainer = boundsContainer || document.body;\n    this.root = quill.addContainer('ql-tooltip');\n    this.root.innerHTML = this.constructor.TEMPLATE;\n    if (this.quill.root === this.quill.scrollingContainer) {\n      this.quill.root.addEventListener('scroll', () => {\n        this.root.style.marginTop = (-1*this.quill.root.scrollTop) + 'px';\n      });\n    }\n    this.hide();\n  }\n\n  hide() {\n    this.root.classList.add('ql-hidden');\n  }\n\n  position(reference) {\n    let left = reference.left + reference.width/2 - this.root.offsetWidth/2;\n    // root.scrollTop should be 0 if scrollContainer !== root\n    let top = reference.bottom + this.quill.root.scrollTop;\n    this.root.style.left = left + 'px';\n    this.root.style.top = top + 'px';\n    this.root.classList.remove('ql-flip');\n    let containerBounds = this.boundsContainer.getBoundingClientRect();\n    let rootBounds = this.root.getBoundingClientRect();\n    let shift = 0;\n    if (rootBounds.right > containerBounds.right) {\n      shift = containerBounds.right - rootBounds.right;\n      this.root.style.left = (left + shift) + 'px';\n    }\n    if (rootBounds.left < containerBounds.left) {\n      shift = containerBounds.left - rootBounds.left;\n      this.root.style.left = (left + shift) + 'px';\n    }\n    if (rootBounds.bottom > containerBounds.bottom) {\n      let height = rootBounds.bottom - rootBounds.top;\n      let verticalShift = reference.bottom - reference.top + height;\n      this.root.style.top = (top - verticalShift) + 'px';\n      this.root.classList.add('ql-flip');\n    }\n    return shift;\n  }\n\n  show() {\n    this.root.classList.remove('ql-editing');\n    this.root.classList.remove('ql-hidden');\n  }\n}\n\n\nexport default Tooltip;\n\n\n\n// WEBPACK FOOTER //\n// ./ui/tooltip.js","import extend from 'extend';\nimport Delta from 'quill-delta';\nimport Emitter from '../core/emitter';\nimport Keyboard from '../modules/keyboard';\nimport Theme from '../core/theme';\nimport ColorPicker from '../ui/color-picker';\nimport IconPicker from '../ui/icon-picker';\nimport Picker from '../ui/picker';\nimport Tooltip from '../ui/tooltip';\n\n\nconst ALIGNS = [ false, 'center', 'right', 'justify' ];\n\nconst COLORS = [\n  \"#000000\", \"#e60000\", \"#ff9900\", \"#ffff00\", \"#008a00\", \"#0066cc\", \"#9933ff\",\n  \"#ffffff\", \"#facccc\", \"#ffebcc\", \"#ffffcc\", \"#cce8cc\", \"#cce0f5\", \"#ebd6ff\",\n  \"#bbbbbb\", \"#f06666\", \"#ffc266\", \"#ffff66\", \"#66b966\", \"#66a3e0\", \"#c285ff\",\n  \"#888888\", \"#a10000\", \"#b26b00\", \"#b2b200\", \"#006100\", \"#0047b2\", \"#6b24b2\",\n  \"#444444\", \"#5c0000\", \"#663d00\", \"#666600\", \"#003700\", \"#002966\", \"#3d1466\"\n];\n\nconst FONTS = [ false, 'serif', 'monospace' ];\n\nconst HEADERS = [ '1', '2', '3', false ];\n\nconst SIZES = [ 'small', false, 'large', 'huge' ];\n\n\nclass BaseTheme extends Theme {\n  constructor(quill, options) {\n    super(quill, options);\n    let listener = (e) => {\n      if (!document.body.contains(quill.root)) {\n        return document.body.removeEventListener('click', listener);\n      }\n      if (this.tooltip != null && !this.tooltip.root.contains(e.target) &&\n          document.activeElement !== this.tooltip.textbox && !this.quill.hasFocus()) {\n        this.tooltip.hide();\n      }\n      if (this.pickers != null) {\n        this.pickers.forEach(function(picker) {\n          if (!picker.container.contains(e.target)) {\n            picker.close();\n          }\n        });\n      }\n    };\n    quill.emitter.listenDOM('click', document.body, listener);\n  }\n\n  addModule(name) {\n    let module = super.addModule(name);\n    if (name === 'toolbar') {\n      this.extendToolbar(module);\n    }\n    return module;\n  }\n\n  buildButtons(buttons, icons) {\n    buttons.forEach((button) => {\n      let className = button.getAttribute('class') || '';\n      className.split(/\\s+/).forEach((name) => {\n        if (!name.startsWith('ql-')) return;\n        name = name.slice('ql-'.length);\n        if (icons[name] == null) return;\n        if (name === 'direction') {\n          button.innerHTML = icons[name][''] + icons[name]['rtl'];\n        } else if (typeof icons[name] === 'string') {\n          button.innerHTML = icons[name];\n        } else {\n          let value = button.value || '';\n          if (value != null && icons[name][value]) {\n            button.innerHTML = icons[name][value];\n          }\n        }\n      });\n    });\n  }\n\n  buildPickers(selects, icons) {\n    this.pickers = selects.map((select) => {\n      if (select.classList.contains('ql-align')) {\n        if (select.querySelector('option') == null) {\n          fillSelect(select, ALIGNS);\n        }\n        return new IconPicker(select, icons.align);\n      } else if (select.classList.contains('ql-background') || select.classList.contains('ql-color')) {\n        let format = select.classList.contains('ql-background') ? 'background' : 'color';\n        if (select.querySelector('option') == null) {\n          fillSelect(select, COLORS, format === 'background' ? '#ffffff' : '#000000');\n        }\n        return new ColorPicker(select, icons[format]);\n      } else {\n        if (select.querySelector('option') == null) {\n          if (select.classList.contains('ql-font')) {\n            fillSelect(select, FONTS);\n          } else if (select.classList.contains('ql-header')) {\n            fillSelect(select, HEADERS);\n          } else if (select.classList.contains('ql-size')) {\n            fillSelect(select, SIZES);\n          }\n        }\n        return new Picker(select);\n      }\n    });\n    let update = () => {\n      this.pickers.forEach(function(picker) {\n        picker.update();\n      });\n    };\n    this.quill.on(Emitter.events.EDITOR_CHANGE, update);\n  }\n}\nBaseTheme.DEFAULTS = extend(true, {}, Theme.DEFAULTS, {\n  modules: {\n    toolbar: {\n      handlers: {\n        formula: function() {\n          this.quill.theme.tooltip.edit('formula');\n        },\n        image: function() {\n          let fileInput = this.container.querySelector('input.ql-image[type=file]');\n          if (fileInput == null) {\n            fileInput = document.createElement('input');\n            fileInput.setAttribute('type', 'file');\n            fileInput.setAttribute('accept', 'image/png, image/gif, image/jpeg, image/bmp, image/x-icon');\n            fileInput.classList.add('ql-image');\n            fileInput.addEventListener('change', () => {\n              if (fileInput.files != null && fileInput.files[0] != null) {\n                let reader = new FileReader();\n                reader.onload = (e) => {\n                  let range = this.quill.getSelection(true);\n                  this.quill.updateContents(new Delta()\n                    .retain(range.index)\n                    .delete(range.length)\n                    .insert({ image: e.target.result })\n                  , Emitter.sources.USER);\n                  this.quill.setSelection(range.index + 1, Emitter.sources.SILENT);\n                  fileInput.value = \"\";\n                }\n                reader.readAsDataURL(fileInput.files[0]);\n              }\n            });\n            this.container.appendChild(fileInput);\n          }\n          fileInput.click();\n        },\n        video: function() {\n          this.quill.theme.tooltip.edit('video');\n        }\n      }\n    }\n  }\n});\n\n\nclass BaseTooltip extends Tooltip {\n  constructor(quill, boundsContainer) {\n    super(quill, boundsContainer);\n    this.textbox = this.root.querySelector('input[type=\"text\"]');\n    this.listen();\n  }\n\n  listen() {\n    this.textbox.addEventListener('keydown', (event) => {\n      if (Keyboard.match(event, 'enter')) {\n        this.save();\n        event.preventDefault();\n      } else if (Keyboard.match(event, 'escape')) {\n        this.cancel();\n        event.preventDefault();\n      }\n    });\n  }\n\n  cancel() {\n    this.hide();\n  }\n\n  edit(mode = 'link', preview = null) {\n    this.root.classList.remove('ql-hidden');\n    this.root.classList.add('ql-editing');\n    if (preview != null) {\n      this.textbox.value = preview;\n    } else if (mode !== this.root.getAttribute('data-mode')) {\n      this.textbox.value = '';\n    }\n    this.position(this.quill.getBounds(this.quill.selection.savedRange));\n    this.textbox.select();\n    this.textbox.setAttribute('placeholder', this.textbox.getAttribute(`data-${mode}`) || '');\n    this.root.setAttribute('data-mode', mode);\n  }\n\n  restoreFocus() {\n    let scrollTop = this.quill.scrollingContainer.scrollTop;\n    this.quill.focus();\n    this.quill.scrollingContainer.scrollTop = scrollTop;\n  }\n\n  save() {\n    let value = this.textbox.value;\n    switch(this.root.getAttribute('data-mode')) {\n      case 'link': {\n        let scrollTop = this.quill.root.scrollTop;\n        if (this.linkRange) {\n          this.quill.formatText(this.linkRange, 'link', value, Emitter.sources.USER);\n          delete this.linkRange;\n        } else {\n          this.restoreFocus();\n          this.quill.format('link', value, Emitter.sources.USER);\n        }\n        this.quill.root.scrollTop = scrollTop;\n        break;\n      }\n      case 'video': {\n        value = extractVideoUrl(value);\n      } // eslint-disable-next-line no-fallthrough\n      case 'formula': {\n        if (!value) break;\n        let range = this.quill.getSelection(true);\n        if (range != null) {\n          let index = range.index + range.length;\n          this.quill.insertEmbed(index, this.root.getAttribute('data-mode'), value, Emitter.sources.USER);\n          if (this.root.getAttribute('data-mode') === 'formula') {\n            this.quill.insertText(index + 1, ' ', Emitter.sources.USER);\n          }\n          this.quill.setSelection(index + 2, Emitter.sources.USER);\n        }\n        break;\n      }\n      default:\n    }\n    this.textbox.value = '';\n    this.hide();\n  }\n}\n\n\nfunction extractVideoUrl(url) {\n  let match = url.match(/^(?:(https?):\\/\\/)?(?:(?:www|m)\\.)?youtube\\.com\\/watch.*v=([a-zA-Z0-9_-]+)/) ||\n              url.match(/^(?:(https?):\\/\\/)?(?:(?:www|m)\\.)?youtu\\.be\\/([a-zA-Z0-9_-]+)/);\n  if (match) {\n    return (match[1] || 'https') + '://www.youtube.com/embed/' + match[2] + '?showinfo=0';\n  }\n  if (match = url.match(/^(?:(https?):\\/\\/)?(?:www\\.)?vimeo\\.com\\/(\\d+)/)) {  // eslint-disable-line no-cond-assign\n    return (match[1] || 'https') + '://player.vimeo.com/video/' + match[2] + '/';\n  }\n  return url;\n}\n\nfunction fillSelect(select, values, defaultValue = false) {\n  values.forEach(function(value) {\n    let option = document.createElement('option');\n    if (value === defaultValue) {\n      option.setAttribute('selected', 'selected');\n    } else {\n      option.setAttribute('value', value);\n    }\n    select.appendChild(option);\n  });\n}\n\n\nexport { BaseTooltip, BaseTheme as default };\n\n\n\n// WEBPACK FOOTER //\n// ./themes/base.js","import Quill from './core';\n\nimport { AlignClass, AlignStyle } from './formats/align';\nimport { DirectionAttribute, DirectionClass, DirectionStyle } from './formats/direction';\nimport { IndentClass as Indent } from './formats/indent';\n\nimport Blockquote from './formats/blockquote';\nimport Header from './formats/header';\nimport List, { ListItem } from './formats/list';\n\nimport { BackgroundClass, BackgroundStyle } from './formats/background';\nimport { ColorClass, ColorStyle } from './formats/color';\nimport { FontClass, FontStyle } from './formats/font';\nimport { SizeClass, SizeStyle } from './formats/size';\n\nimport Bold from './formats/bold';\nimport Italic from './formats/italic';\nimport Link from './formats/link';\nimport Script from './formats/script';\nimport Strike from './formats/strike';\nimport Underline from './formats/underline';\n\nimport Image from './formats/image';\nimport Video from './formats/video';\n\nimport CodeBlock, { Code as InlineCode } from './formats/code';\n\nimport Formula from './modules/formula';\nimport Syntax from './modules/syntax';\nimport Toolbar from './modules/toolbar';\n\nimport Icons from './ui/icons';\nimport Picker from './ui/picker';\nimport ColorPicker from './ui/color-picker';\nimport IconPicker from './ui/icon-picker';\nimport Tooltip from './ui/tooltip';\n\nimport BubbleTheme from './themes/bubble';\nimport SnowTheme from './themes/snow';\n\n\nQuill.register({\n  'attributors/attribute/direction': DirectionAttribute,\n\n  'attributors/class/align': AlignClass,\n  'attributors/class/background': BackgroundClass,\n  'attributors/class/color': ColorClass,\n  'attributors/class/direction': DirectionClass,\n  'attributors/class/font': FontClass,\n  'attributors/class/size': SizeClass,\n\n  'attributors/style/align': AlignStyle,\n  'attributors/style/background': BackgroundStyle,\n  'attributors/style/color': ColorStyle,\n  'attributors/style/direction': DirectionStyle,\n  'attributors/style/font': FontStyle,\n  'attributors/style/size': SizeStyle\n}, true);\n\n\nQuill.register({\n  'formats/align': AlignClass,\n  'formats/direction': DirectionClass,\n  'formats/indent': Indent,\n\n  'formats/background': BackgroundStyle,\n  'formats/color': ColorStyle,\n  'formats/font': FontClass,\n  'formats/size': SizeClass,\n\n  'formats/blockquote': Blockquote,\n  'formats/code-block': CodeBlock,\n  'formats/header': Header,\n  'formats/list': List,\n\n  'formats/bold': Bold,\n  'formats/code': InlineCode,\n  'formats/italic': Italic,\n  'formats/link': Link,\n  'formats/script': Script,\n  'formats/strike': Strike,\n  'formats/underline': Underline,\n\n  'formats/image': Image,\n  'formats/video': Video,\n\n  'formats/list/item': ListItem,\n\n  'modules/formula': Formula,\n  'modules/syntax': Syntax,\n  'modules/toolbar': Toolbar,\n\n  'themes/bubble': BubbleTheme,\n  'themes/snow': SnowTheme,\n\n  'ui/icons': Icons,\n  'ui/picker': Picker,\n  'ui/icon-picker': IconPicker,\n  'ui/color-picker': ColorPicker,\n  'ui/tooltip': Tooltip\n}, true);\n\n\nexport default Quill;\n\n\n\n// WEBPACK FOOTER //\n// ./quill.js","import Parchment from 'parchment';\nimport Quill from './core/quill';\n\nimport Block, { BlockEmbed } from './blots/block';\nimport Break from './blots/break';\nimport Container from './blots/container';\nimport Cursor from './blots/cursor';\nimport Embed from './blots/embed';\nimport Inline from './blots/inline';\nimport Scroll from './blots/scroll';\nimport TextBlot from './blots/text';\n\nimport Clipboard from './modules/clipboard';\nimport History from './modules/history';\nimport Keyboard from './modules/keyboard';\n\nQuill.register({\n  'blots/block'        : Block,\n  'blots/block/embed'  : BlockEmbed,\n  'blots/break'        : Break,\n  'blots/container'    : Container,\n  'blots/cursor'       : Cursor,\n  'blots/embed'        : Embed,\n  'blots/inline'       : Inline,\n  'blots/scroll'       : Scroll,\n  'blots/text'         : TextBlot,\n\n  'modules/clipboard'  : Clipboard,\n  'modules/history'    : History,\n  'modules/keyboard'   : Keyboard\n});\n\nParchment.register(Block, Break, Cursor, Inline, Scroll, TextBlot);\n\n\nexport default Quill;\n\n\n\n// WEBPACK FOOTER //\n// ./core.js","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar LinkedList = /** @class */ (function () {\n    function LinkedList() {\n        this.head = this.tail = null;\n        this.length = 0;\n    }\n    LinkedList.prototype.append = function () {\n        var nodes = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            nodes[_i] = arguments[_i];\n        }\n        this.insertBefore(nodes[0], null);\n        if (nodes.length > 1) {\n            this.append.apply(this, nodes.slice(1));\n        }\n    };\n    LinkedList.prototype.contains = function (node) {\n        var cur, next = this.iterator();\n        while ((cur = next())) {\n            if (cur === node)\n                return true;\n        }\n        return false;\n    };\n    LinkedList.prototype.insertBefore = function (node, refNode) {\n        if (!node)\n            return;\n        node.next = refNode;\n        if (refNode != null) {\n            node.prev = refNode.prev;\n            if (refNode.prev != null) {\n                refNode.prev.next = node;\n            }\n            refNode.prev = node;\n            if (refNode === this.head) {\n                this.head = node;\n            }\n        }\n        else if (this.tail != null) {\n            this.tail.next = node;\n            node.prev = this.tail;\n            this.tail = node;\n        }\n        else {\n            node.prev = null;\n            this.head = this.tail = node;\n        }\n        this.length += 1;\n    };\n    LinkedList.prototype.offset = function (target) {\n        var index = 0, cur = this.head;\n        while (cur != null) {\n            if (cur === target)\n                return index;\n            index += cur.length();\n            cur = cur.next;\n        }\n        return -1;\n    };\n    LinkedList.prototype.remove = function (node) {\n        if (!this.contains(node))\n            return;\n        if (node.prev != null)\n            node.prev.next = node.next;\n        if (node.next != null)\n            node.next.prev = node.prev;\n        if (node === this.head)\n            this.head = node.next;\n        if (node === this.tail)\n            this.tail = node.prev;\n        this.length -= 1;\n    };\n    LinkedList.prototype.iterator = function (curNode) {\n        if (curNode === void 0) { curNode = this.head; }\n        // TODO use yield when we can\n        return function () {\n            var ret = curNode;\n            if (curNode != null)\n                curNode = curNode.next;\n            return ret;\n        };\n    };\n    LinkedList.prototype.find = function (index, inclusive) {\n        if (inclusive === void 0) { inclusive = false; }\n        var cur, next = this.iterator();\n        while ((cur = next())) {\n            var length = cur.length();\n            if (index < length ||\n                (inclusive && index === length && (cur.next == null || cur.next.length() !== 0))) {\n                return [cur, index];\n            }\n            index -= length;\n        }\n        return [null, 0];\n    };\n    LinkedList.prototype.forEach = function (callback) {\n        var cur, next = this.iterator();\n        while ((cur = next())) {\n            callback(cur);\n        }\n    };\n    LinkedList.prototype.forEachAt = function (index, length, callback) {\n        if (length <= 0)\n            return;\n        var _a = this.find(index), startNode = _a[0], offset = _a[1];\n        var cur, curIndex = index - offset, next = this.iterator(startNode);\n        while ((cur = next()) && curIndex < index + length) {\n            var curLength = cur.length();\n            if (index > curIndex) {\n                callback(cur, index - curIndex, Math.min(length, curIndex + curLength - index));\n            }\n            else {\n                callback(cur, 0, Math.min(curLength, index + length - curIndex));\n            }\n            curIndex += curLength;\n        }\n    };\n    LinkedList.prototype.map = function (callback) {\n        return this.reduce(function (memo, cur) {\n            memo.push(callback(cur));\n            return memo;\n        }, []);\n    };\n    LinkedList.prototype.reduce = function (callback, memo) {\n        var cur, next = this.iterator();\n        while ((cur = next())) {\n            memo = callback(memo, cur);\n        }\n        return memo;\n    };\n    return LinkedList;\n}());\nexports.default = LinkedList;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/parchment/src/collection/linked-list.ts\n// module id = 47\n// module chunks = 0","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar container_1 = require(\"./abstract/container\");\nvar Registry = require(\"../registry\");\nvar OBSERVER_CONFIG = {\n    attributes: true,\n    characterData: true,\n    characterDataOldValue: true,\n    childList: true,\n    subtree: true,\n};\nvar MAX_OPTIMIZE_ITERATIONS = 100;\nvar ScrollBlot = /** @class */ (function (_super) {\n    __extends(ScrollBlot, _super);\n    function ScrollBlot(node) {\n        var _this = _super.call(this, node) || this;\n        _this.scroll = _this;\n        _this.observer = new MutationObserver(function (mutations) {\n            _this.update(mutations);\n        });\n        _this.observer.observe(_this.domNode, OBSERVER_CONFIG);\n        _this.attach();\n        return _this;\n    }\n    ScrollBlot.prototype.detach = function () {\n        _super.prototype.detach.call(this);\n        this.observer.disconnect();\n    };\n    ScrollBlot.prototype.deleteAt = function (index, length) {\n        this.update();\n        if (index === 0 && length === this.length()) {\n            this.children.forEach(function (child) {\n                child.remove();\n            });\n        }\n        else {\n            _super.prototype.deleteAt.call(this, index, length);\n        }\n    };\n    ScrollBlot.prototype.formatAt = function (index, length, name, value) {\n        this.update();\n        _super.prototype.formatAt.call(this, index, length, name, value);\n    };\n    ScrollBlot.prototype.insertAt = function (index, value, def) {\n        this.update();\n        _super.prototype.insertAt.call(this, index, value, def);\n    };\n    ScrollBlot.prototype.optimize = function (mutations, context) {\n        var _this = this;\n        if (mutations === void 0) { mutations = []; }\n        if (context === void 0) { context = {}; }\n        _super.prototype.optimize.call(this, context);\n        // We must modify mutations directly, cannot make copy and then modify\n        var records = [].slice.call(this.observer.takeRecords());\n        // Array.push currently seems to be implemented by a non-tail recursive function\n        // so we cannot just mutations.push.apply(mutations, this.observer.takeRecords());\n        while (records.length > 0)\n            mutations.push(records.pop());\n        // TODO use WeakMap\n        var mark = function (blot, markParent) {\n            if (markParent === void 0) { markParent = true; }\n            if (blot == null || blot === _this)\n                return;\n            if (blot.domNode.parentNode == null)\n                return;\n            // @ts-ignore\n            if (blot.domNode[Registry.DATA_KEY].mutations == null) {\n                // @ts-ignore\n                blot.domNode[Registry.DATA_KEY].mutations = [];\n            }\n            if (markParent)\n                mark(blot.parent);\n        };\n        var optimize = function (blot) {\n            // Post-order traversal\n            if (\n            // @ts-ignore\n            blot.domNode[Registry.DATA_KEY] == null ||\n                // @ts-ignore\n                blot.domNode[Registry.DATA_KEY].mutations == null) {\n                return;\n            }\n            if (blot instanceof container_1.default) {\n                blot.children.forEach(optimize);\n            }\n            blot.optimize(context);\n        };\n        var remaining = mutations;\n        for (var i = 0; remaining.length > 0; i += 1) {\n            if (i >= MAX_OPTIMIZE_ITERATIONS) {\n                throw new Error('[Parchment] Maximum optimize iterations reached');\n            }\n            remaining.forEach(function (mutation) {\n                var blot = Registry.find(mutation.target, true);\n                if (blot == null)\n                    return;\n                if (blot.domNode === mutation.target) {\n                    if (mutation.type === 'childList') {\n                        mark(Registry.find(mutation.previousSibling, false));\n                        [].forEach.call(mutation.addedNodes, function (node) {\n                            var child = Registry.find(node, false);\n                            mark(child, false);\n                            if (child instanceof container_1.default) {\n                                child.children.forEach(function (grandChild) {\n                                    mark(grandChild, false);\n                                });\n                            }\n                        });\n                    }\n                    else if (mutation.type === 'attributes') {\n                        mark(blot.prev);\n                    }\n                }\n                mark(blot);\n            });\n            this.children.forEach(optimize);\n            remaining = [].slice.call(this.observer.takeRecords());\n            records = remaining.slice();\n            while (records.length > 0)\n                mutations.push(records.pop());\n        }\n    };\n    ScrollBlot.prototype.update = function (mutations, context) {\n        var _this = this;\n        if (context === void 0) { context = {}; }\n        mutations = mutations || this.observer.takeRecords();\n        // TODO use WeakMap\n        mutations\n            .map(function (mutation) {\n            var blot = Registry.find(mutation.target, true);\n            if (blot == null)\n                return null;\n            // @ts-ignore\n            if (blot.domNode[Registry.DATA_KEY].mutations == null) {\n                // @ts-ignore\n                blot.domNode[Registry.DATA_KEY].mutations = [mutation];\n                return blot;\n            }\n            else {\n                // @ts-ignore\n                blot.domNode[Registry.DATA_KEY].mutations.push(mutation);\n                return null;\n            }\n        })\n            .forEach(function (blot) {\n            if (blot == null ||\n                blot === _this ||\n                //@ts-ignore\n                blot.domNode[Registry.DATA_KEY] == null)\n                return;\n            // @ts-ignore\n            blot.update(blot.domNode[Registry.DATA_KEY].mutations || [], context);\n        });\n        // @ts-ignore\n        if (this.domNode[Registry.DATA_KEY].mutations != null) {\n            // @ts-ignore\n            _super.prototype.update.call(this, this.domNode[Registry.DATA_KEY].mutations, context);\n        }\n        this.optimize(mutations, context);\n    };\n    ScrollBlot.blotName = 'scroll';\n    ScrollBlot.defaultChild = 'block';\n    ScrollBlot.scope = Registry.Scope.BLOCK_BLOT;\n    ScrollBlot.tagName = 'DIV';\n    return ScrollBlot;\n}(container_1.default));\nexports.default = ScrollBlot;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/parchment/src/blot/scroll.ts\n// module id = 48\n// module chunks = 0","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar format_1 = require(\"./abstract/format\");\nvar Registry = require(\"../registry\");\n// Shallow object comparison\nfunction isEqual(obj1, obj2) {\n    if (Object.keys(obj1).length !== Object.keys(obj2).length)\n        return false;\n    // @ts-ignore\n    for (var prop in obj1) {\n        // @ts-ignore\n        if (obj1[prop] !== obj2[prop])\n            return false;\n    }\n    return true;\n}\nvar InlineBlot = /** @class */ (function (_super) {\n    __extends(InlineBlot, _super);\n    function InlineBlot() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    InlineBlot.formats = function (domNode) {\n        if (domNode.tagName === InlineBlot.tagName)\n            return undefined;\n        return _super.formats.call(this, domNode);\n    };\n    InlineBlot.prototype.format = function (name, value) {\n        var _this = this;\n        if (name === this.statics.blotName && !value) {\n            this.children.forEach(function (child) {\n                if (!(child instanceof format_1.default)) {\n                    child = child.wrap(InlineBlot.blotName, true);\n                }\n                _this.attributes.copy(child);\n            });\n            this.unwrap();\n        }\n        else {\n            _super.prototype.format.call(this, name, value);\n        }\n    };\n    InlineBlot.prototype.formatAt = function (index, length, name, value) {\n        if (this.formats()[name] != null || Registry.query(name, Registry.Scope.ATTRIBUTE)) {\n            var blot = this.isolate(index, length);\n            blot.format(name, value);\n        }\n        else {\n            _super.prototype.formatAt.call(this, index, length, name, value);\n        }\n    };\n    InlineBlot.prototype.optimize = function (context) {\n        _super.prototype.optimize.call(this, context);\n        var formats = this.formats();\n        if (Object.keys(formats).length === 0) {\n            return this.unwrap(); // unformatted span\n        }\n        var next = this.next;\n        if (next instanceof InlineBlot && next.prev === this && isEqual(formats, next.formats())) {\n            next.moveChildren(this);\n            next.remove();\n        }\n    };\n    InlineBlot.blotName = 'inline';\n    InlineBlot.scope = Registry.Scope.INLINE_BLOT;\n    InlineBlot.tagName = 'SPAN';\n    return InlineBlot;\n}(format_1.default));\nexports.default = InlineBlot;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/parchment/src/blot/inline.ts\n// module id = 49\n// module chunks = 0","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar format_1 = require(\"./abstract/format\");\nvar Registry = require(\"../registry\");\nvar BlockBlot = /** @class */ (function (_super) {\n    __extends(BlockBlot, _super);\n    function BlockBlot() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    BlockBlot.formats = function (domNode) {\n        var tagName = Registry.query(BlockBlot.blotName).tagName;\n        if (domNode.tagName === tagName)\n            return undefined;\n        return _super.formats.call(this, domNode);\n    };\n    BlockBlot.prototype.format = function (name, value) {\n        if (Registry.query(name, Registry.Scope.BLOCK) == null) {\n            return;\n        }\n        else if (name === this.statics.blotName && !value) {\n            this.replaceWith(BlockBlot.blotName);\n        }\n        else {\n            _super.prototype.format.call(this, name, value);\n        }\n    };\n    BlockBlot.prototype.formatAt = function (index, length, name, value) {\n        if (Registry.query(name, Registry.Scope.BLOCK) != null) {\n            this.format(name, value);\n        }\n        else {\n            _super.prototype.formatAt.call(this, index, length, name, value);\n        }\n    };\n    BlockBlot.prototype.insertAt = function (index, value, def) {\n        if (def == null || Registry.query(value, Registry.Scope.INLINE) != null) {\n            // Insert text or inline\n            _super.prototype.insertAt.call(this, index, value, def);\n        }\n        else {\n            var after = this.split(index);\n            var blot = Registry.create(value, def);\n            after.parent.insertBefore(blot, after);\n        }\n    };\n    BlockBlot.prototype.update = function (mutations, context) {\n        if (navigator.userAgent.match(/Trident/)) {\n            this.build();\n        }\n        else {\n            _super.prototype.update.call(this, mutations, context);\n        }\n    };\n    BlockBlot.blotName = 'block';\n    BlockBlot.scope = Registry.Scope.BLOCK_BLOT;\n    BlockBlot.tagName = 'P';\n    return BlockBlot;\n}(format_1.default));\nexports.default = BlockBlot;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/parchment/src/blot/block.ts\n// module id = 50\n// module chunks = 0","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar leaf_1 = require(\"./abstract/leaf\");\nvar EmbedBlot = /** @class */ (function (_super) {\n    __extends(EmbedBlot, _super);\n    function EmbedBlot() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    EmbedBlot.formats = function (domNode) {\n        return undefined;\n    };\n    EmbedBlot.prototype.format = function (name, value) {\n        // super.formatAt wraps, which is what we want in general,\n        // but this allows subclasses to overwrite for formats\n        // that just apply to particular embeds\n        _super.prototype.formatAt.call(this, 0, this.length(), name, value);\n    };\n    EmbedBlot.prototype.formatAt = function (index, length, name, value) {\n        if (index === 0 && length === this.length()) {\n            this.format(name, value);\n        }\n        else {\n            _super.prototype.formatAt.call(this, index, length, name, value);\n        }\n    };\n    EmbedBlot.prototype.formats = function () {\n        return this.statics.formats(this.domNode);\n    };\n    return EmbedBlot;\n}(leaf_1.default));\nexports.default = EmbedBlot;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/parchment/src/blot/embed.ts\n// module id = 51\n// module chunks = 0","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar leaf_1 = require(\"./abstract/leaf\");\nvar Registry = require(\"../registry\");\nvar TextBlot = /** @class */ (function (_super) {\n    __extends(TextBlot, _super);\n    function TextBlot(node) {\n        var _this = _super.call(this, node) || this;\n        _this.text = _this.statics.value(_this.domNode);\n        return _this;\n    }\n    TextBlot.create = function (value) {\n        return document.createTextNode(value);\n    };\n    TextBlot.value = function (domNode) {\n        var text = domNode.data;\n        // @ts-ignore\n        if (text['normalize'])\n            text = text['normalize']();\n        return text;\n    };\n    TextBlot.prototype.deleteAt = function (index, length) {\n        this.domNode.data = this.text = this.text.slice(0, index) + this.text.slice(index + length);\n    };\n    TextBlot.prototype.index = function (node, offset) {\n        if (this.domNode === node) {\n            return offset;\n        }\n        return -1;\n    };\n    TextBlot.prototype.insertAt = function (index, value, def) {\n        if (def == null) {\n            this.text = this.text.slice(0, index) + value + this.text.slice(index);\n            this.domNode.data = this.text;\n        }\n        else {\n            _super.prototype.insertAt.call(this, index, value, def);\n        }\n    };\n    TextBlot.prototype.length = function () {\n        return this.text.length;\n    };\n    TextBlot.prototype.optimize = function (context) {\n        _super.prototype.optimize.call(this, context);\n        this.text = this.statics.value(this.domNode);\n        if (this.text.length === 0) {\n            this.remove();\n        }\n        else if (this.next instanceof TextBlot && this.next.prev === this) {\n            this.insertAt(this.length(), this.next.value());\n            this.next.remove();\n        }\n    };\n    TextBlot.prototype.position = function (index, inclusive) {\n        if (inclusive === void 0) { inclusive = false; }\n        return [this.domNode, index];\n    };\n    TextBlot.prototype.split = function (index, force) {\n        if (force === void 0) { force = false; }\n        if (!force) {\n            if (index === 0)\n                return this;\n            if (index === this.length())\n                return this.next;\n        }\n        var after = Registry.create(this.domNode.splitText(index));\n        this.parent.insertBefore(after, this.next);\n        this.text = this.statics.value(this.domNode);\n        return after;\n    };\n    TextBlot.prototype.update = function (mutations, context) {\n        var _this = this;\n        if (mutations.some(function (mutation) {\n            return mutation.type === 'characterData' && mutation.target === _this.domNode;\n        })) {\n            this.text = this.statics.value(this.domNode);\n        }\n    };\n    TextBlot.prototype.value = function () {\n        return this.text;\n    };\n    TextBlot.blotName = 'text';\n    TextBlot.scope = Registry.Scope.INLINE_BLOT;\n    return TextBlot;\n}(leaf_1.default));\nexports.default = TextBlot;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/parchment/src/blot/text.ts\n// module id = 52\n// module chunks = 0","let elem = document.createElement('div');\nelem.classList.toggle('test-class', false);\nif (elem.classList.contains('test-class')) {\n  let _toggle = DOMTokenList.prototype.toggle;\n  DOMTokenList.prototype.toggle = function(token, force) {\n    if (arguments.length > 1 && !this.contains(token) === !force) {\n      return force;\n    } else {\n      return _toggle.call(this, token);\n    }\n  };\n}\n\nif (!String.prototype.startsWith) {\n  String.prototype.startsWith = function(searchString, position){\n    position = position || 0;\n    return this.substr(position, searchString.length) === searchString;\n  };\n}\n\nif (!String.prototype.endsWith) {\n  String.prototype.endsWith = function(searchString, position) {\n    var subjectString = this.toString();\n    if (typeof position !== 'number' || !isFinite(position) || Math.floor(position) !== position || position > subjectString.length) {\n      position = subjectString.length;\n    }\n    position -= searchString.length;\n    var lastIndex = subjectString.indexOf(searchString, position);\n    return lastIndex !== -1 && lastIndex === position;\n  };\n}\n\nif (!Array.prototype.find) {\n  Object.defineProperty(Array.prototype, \"find\", {\n    value: function(predicate) {\n      if (this === null) {\n        throw new TypeError('Array.prototype.find called on null or undefined');\n      }\n      if (typeof predicate !== 'function') {\n        throw new TypeError('predicate must be a function');\n      }\n      var list = Object(this);\n      var length = list.length >>> 0;\n      var thisArg = arguments[1];\n      var value;\n\n      for (var i = 0; i < length; i++) {\n        value = list[i];\n        if (predicate.call(thisArg, value, i, list)) {\n          return value;\n        }\n      }\n      return undefined;\n    }\n  });\n}\n\ndocument.addEventListener(\"DOMContentLoaded\", function() {\n  // Disable resizing in Firefox\n  document.execCommand(\"enableObjectResizing\", false, false);\n  // Disable automatic linkifying in IE11\n  document.execCommand(\"autoUrlDetect\", false, false);\n});\n\n\n\n// WEBPACK FOOTER //\n// ./core/polyfill.js","/**\n * This library modifies the diff-patch-match library by Neil Fraser\n * by removing the patch and match functionality and certain advanced\n * options in the diff function. The original license is as follows:\n *\n * ===\n *\n * Diff Match and Patch\n *\n * Copyright 2006 Google Inc.\n * http://code.google.com/p/google-diff-match-patch/\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\n/**\n * The data structure representing a diff is an array of tuples:\n * [[DIFF_DELETE, 'Hello'], [DIFF_INSERT, 'Goodbye'], [DIFF_EQUAL, ' world.']]\n * which means: delete 'Hello', add 'Goodbye' and keep ' world.'\n */\nvar DIFF_DELETE = -1;\nvar DIFF_INSERT = 1;\nvar DIFF_EQUAL = 0;\n\n\n/**\n * Find the differences between two texts.  Simplifies the problem by stripping\n * any common prefix or suffix off the texts before diffing.\n * @param {string} text1 Old string to be diffed.\n * @param {string} text2 New string to be diffed.\n * @param {Int} cursor_pos Expected edit position in text1 (optional)\n * @return {Array} Array of diff tuples.\n */\nfunction diff_main(text1, text2, cursor_pos) {\n  // Check for equality (speedup).\n  if (text1 == text2) {\n    if (text1) {\n      return [[DIFF_EQUAL, text1]];\n    }\n    return [];\n  }\n\n  // Check cursor_pos within bounds\n  if (cursor_pos < 0 || text1.length < cursor_pos) {\n    cursor_pos = null;\n  }\n\n  // Trim off common prefix (speedup).\n  var commonlength = diff_commonPrefix(text1, text2);\n  var commonprefix = text1.substring(0, commonlength);\n  text1 = text1.substring(commonlength);\n  text2 = text2.substring(commonlength);\n\n  // Trim off common suffix (speedup).\n  commonlength = diff_commonSuffix(text1, text2);\n  var commonsuffix = text1.substring(text1.length - commonlength);\n  text1 = text1.substring(0, text1.length - commonlength);\n  text2 = text2.substring(0, text2.length - commonlength);\n\n  // Compute the diff on the middle block.\n  var diffs = diff_compute_(text1, text2);\n\n  // Restore the prefix and suffix.\n  if (commonprefix) {\n    diffs.unshift([DIFF_EQUAL, commonprefix]);\n  }\n  if (commonsuffix) {\n    diffs.push([DIFF_EQUAL, commonsuffix]);\n  }\n  diff_cleanupMerge(diffs);\n  if (cursor_pos != null) {\n    diffs = fix_cursor(diffs, cursor_pos);\n  }\n  diffs = fix_emoji(diffs);\n  return diffs;\n};\n\n\n/**\n * Find the differences between two texts.  Assumes that the texts do not\n * have any common prefix or suffix.\n * @param {string} text1 Old string to be diffed.\n * @param {string} text2 New string to be diffed.\n * @return {Array} Array of diff tuples.\n */\nfunction diff_compute_(text1, text2) {\n  var diffs;\n\n  if (!text1) {\n    // Just add some text (speedup).\n    return [[DIFF_INSERT, text2]];\n  }\n\n  if (!text2) {\n    // Just delete some text (speedup).\n    return [[DIFF_DELETE, text1]];\n  }\n\n  var longtext = text1.length > text2.length ? text1 : text2;\n  var shorttext = text1.length > text2.length ? text2 : text1;\n  var i = longtext.indexOf(shorttext);\n  if (i != -1) {\n    // Shorter text is inside the longer text (speedup).\n    diffs = [[DIFF_INSERT, longtext.substring(0, i)],\n             [DIFF_EQUAL, shorttext],\n             [DIFF_INSERT, longtext.substring(i + shorttext.length)]];\n    // Swap insertions for deletions if diff is reversed.\n    if (text1.length > text2.length) {\n      diffs[0][0] = diffs[2][0] = DIFF_DELETE;\n    }\n    return diffs;\n  }\n\n  if (shorttext.length == 1) {\n    // Single character string.\n    // After the previous speedup, the character can't be an equality.\n    return [[DIFF_DELETE, text1], [DIFF_INSERT, text2]];\n  }\n\n  // Check to see if the problem can be split in two.\n  var hm = diff_halfMatch_(text1, text2);\n  if (hm) {\n    // A half-match was found, sort out the return data.\n    var text1_a = hm[0];\n    var text1_b = hm[1];\n    var text2_a = hm[2];\n    var text2_b = hm[3];\n    var mid_common = hm[4];\n    // Send both pairs off for separate processing.\n    var diffs_a = diff_main(text1_a, text2_a);\n    var diffs_b = diff_main(text1_b, text2_b);\n    // Merge the results.\n    return diffs_a.concat([[DIFF_EQUAL, mid_common]], diffs_b);\n  }\n\n  return diff_bisect_(text1, text2);\n};\n\n\n/**\n * Find the 'middle snake' of a diff, split the problem in two\n * and return the recursively constructed diff.\n * See Myers 1986 paper: An O(ND) Difference Algorithm and Its Variations.\n * @param {string} text1 Old string to be diffed.\n * @param {string} text2 New string to be diffed.\n * @return {Array} Array of diff tuples.\n * @private\n */\nfunction diff_bisect_(text1, text2) {\n  // Cache the text lengths to prevent multiple calls.\n  var text1_length = text1.length;\n  var text2_length = text2.length;\n  var max_d = Math.ceil((text1_length + text2_length) / 2);\n  var v_offset = max_d;\n  var v_length = 2 * max_d;\n  var v1 = new Array(v_length);\n  var v2 = new Array(v_length);\n  // Setting all elements to -1 is faster in Chrome & Firefox than mixing\n  // integers and undefined.\n  for (var x = 0; x < v_length; x++) {\n    v1[x] = -1;\n    v2[x] = -1;\n  }\n  v1[v_offset + 1] = 0;\n  v2[v_offset + 1] = 0;\n  var delta = text1_length - text2_length;\n  // If the total number of characters is odd, then the front path will collide\n  // with the reverse path.\n  var front = (delta % 2 != 0);\n  // Offsets for start and end of k loop.\n  // Prevents mapping of space beyond the grid.\n  var k1start = 0;\n  var k1end = 0;\n  var k2start = 0;\n  var k2end = 0;\n  for (var d = 0; d < max_d; d++) {\n    // Walk the front path one step.\n    for (var k1 = -d + k1start; k1 <= d - k1end; k1 += 2) {\n      var k1_offset = v_offset + k1;\n      var x1;\n      if (k1 == -d || (k1 != d && v1[k1_offset - 1] < v1[k1_offset + 1])) {\n        x1 = v1[k1_offset + 1];\n      } else {\n        x1 = v1[k1_offset - 1] + 1;\n      }\n      var y1 = x1 - k1;\n      while (x1 < text1_length && y1 < text2_length &&\n             text1.charAt(x1) == text2.charAt(y1)) {\n        x1++;\n        y1++;\n      }\n      v1[k1_offset] = x1;\n      if (x1 > text1_length) {\n        // Ran off the right of the graph.\n        k1end += 2;\n      } else if (y1 > text2_length) {\n        // Ran off the bottom of the graph.\n        k1start += 2;\n      } else if (front) {\n        var k2_offset = v_offset + delta - k1;\n        if (k2_offset >= 0 && k2_offset < v_length && v2[k2_offset] != -1) {\n          // Mirror x2 onto top-left coordinate system.\n          var x2 = text1_length - v2[k2_offset];\n          if (x1 >= x2) {\n            // Overlap detected.\n            return diff_bisectSplit_(text1, text2, x1, y1);\n          }\n        }\n      }\n    }\n\n    // Walk the reverse path one step.\n    for (var k2 = -d + k2start; k2 <= d - k2end; k2 += 2) {\n      var k2_offset = v_offset + k2;\n      var x2;\n      if (k2 == -d || (k2 != d && v2[k2_offset - 1] < v2[k2_offset + 1])) {\n        x2 = v2[k2_offset + 1];\n      } else {\n        x2 = v2[k2_offset - 1] + 1;\n      }\n      var y2 = x2 - k2;\n      while (x2 < text1_length && y2 < text2_length &&\n             text1.charAt(text1_length - x2 - 1) ==\n             text2.charAt(text2_length - y2 - 1)) {\n        x2++;\n        y2++;\n      }\n      v2[k2_offset] = x2;\n      if (x2 > text1_length) {\n        // Ran off the left of the graph.\n        k2end += 2;\n      } else if (y2 > text2_length) {\n        // Ran off the top of the graph.\n        k2start += 2;\n      } else if (!front) {\n        var k1_offset = v_offset + delta - k2;\n        if (k1_offset >= 0 && k1_offset < v_length && v1[k1_offset] != -1) {\n          var x1 = v1[k1_offset];\n          var y1 = v_offset + x1 - k1_offset;\n          // Mirror x2 onto top-left coordinate system.\n          x2 = text1_length - x2;\n          if (x1 >= x2) {\n            // Overlap detected.\n            return diff_bisectSplit_(text1, text2, x1, y1);\n          }\n        }\n      }\n    }\n  }\n  // Diff took too long and hit the deadline or\n  // number of diffs equals number of characters, no commonality at all.\n  return [[DIFF_DELETE, text1], [DIFF_INSERT, text2]];\n};\n\n\n/**\n * Given the location of the 'middle snake', split the diff in two parts\n * and recurse.\n * @param {string} text1 Old string to be diffed.\n * @param {string} text2 New string to be diffed.\n * @param {number} x Index of split point in text1.\n * @param {number} y Index of split point in text2.\n * @return {Array} Array of diff tuples.\n */\nfunction diff_bisectSplit_(text1, text2, x, y) {\n  var text1a = text1.substring(0, x);\n  var text2a = text2.substring(0, y);\n  var text1b = text1.substring(x);\n  var text2b = text2.substring(y);\n\n  // Compute both diffs serially.\n  var diffs = diff_main(text1a, text2a);\n  var diffsb = diff_main(text1b, text2b);\n\n  return diffs.concat(diffsb);\n};\n\n\n/**\n * Determine the common prefix of two strings.\n * @param {string} text1 First string.\n * @param {string} text2 Second string.\n * @return {number} The number of characters common to the start of each\n *     string.\n */\nfunction diff_commonPrefix(text1, text2) {\n  // Quick check for common null cases.\n  if (!text1 || !text2 || text1.charAt(0) != text2.charAt(0)) {\n    return 0;\n  }\n  // Binary search.\n  // Performance analysis: http://neil.fraser.name/news/2007/10/09/\n  var pointermin = 0;\n  var pointermax = Math.min(text1.length, text2.length);\n  var pointermid = pointermax;\n  var pointerstart = 0;\n  while (pointermin < pointermid) {\n    if (text1.substring(pointerstart, pointermid) ==\n        text2.substring(pointerstart, pointermid)) {\n      pointermin = pointermid;\n      pointerstart = pointermin;\n    } else {\n      pointermax = pointermid;\n    }\n    pointermid = Math.floor((pointermax - pointermin) / 2 + pointermin);\n  }\n  return pointermid;\n};\n\n\n/**\n * Determine the common suffix of two strings.\n * @param {string} text1 First string.\n * @param {string} text2 Second string.\n * @return {number} The number of characters common to the end of each string.\n */\nfunction diff_commonSuffix(text1, text2) {\n  // Quick check for common null cases.\n  if (!text1 || !text2 ||\n      text1.charAt(text1.length - 1) != text2.charAt(text2.length - 1)) {\n    return 0;\n  }\n  // Binary search.\n  // Performance analysis: http://neil.fraser.name/news/2007/10/09/\n  var pointermin = 0;\n  var pointermax = Math.min(text1.length, text2.length);\n  var pointermid = pointermax;\n  var pointerend = 0;\n  while (pointermin < pointermid) {\n    if (text1.substring(text1.length - pointermid, text1.length - pointerend) ==\n        text2.substring(text2.length - pointermid, text2.length - pointerend)) {\n      pointermin = pointermid;\n      pointerend = pointermin;\n    } else {\n      pointermax = pointermid;\n    }\n    pointermid = Math.floor((pointermax - pointermin) / 2 + pointermin);\n  }\n  return pointermid;\n};\n\n\n/**\n * Do the two texts share a substring which is at least half the length of the\n * longer text?\n * This speedup can produce non-minimal diffs.\n * @param {string} text1 First string.\n * @param {string} text2 Second string.\n * @return {Array.<string>} Five element Array, containing the prefix of\n *     text1, the suffix of text1, the prefix of text2, the suffix of\n *     text2 and the common middle.  Or null if there was no match.\n */\nfunction diff_halfMatch_(text1, text2) {\n  var longtext = text1.length > text2.length ? text1 : text2;\n  var shorttext = text1.length > text2.length ? text2 : text1;\n  if (longtext.length < 4 || shorttext.length * 2 < longtext.length) {\n    return null;  // Pointless.\n  }\n\n  /**\n   * Does a substring of shorttext exist within longtext such that the substring\n   * is at least half the length of longtext?\n   * Closure, but does not reference any external variables.\n   * @param {string} longtext Longer string.\n   * @param {string} shorttext Shorter string.\n   * @param {number} i Start index of quarter length substring within longtext.\n   * @return {Array.<string>} Five element Array, containing the prefix of\n   *     longtext, the suffix of longtext, the prefix of shorttext, the suffix\n   *     of shorttext and the common middle.  Or null if there was no match.\n   * @private\n   */\n  function diff_halfMatchI_(longtext, shorttext, i) {\n    // Start with a 1/4 length substring at position i as a seed.\n    var seed = longtext.substring(i, i + Math.floor(longtext.length / 4));\n    var j = -1;\n    var best_common = '';\n    var best_longtext_a, best_longtext_b, best_shorttext_a, best_shorttext_b;\n    while ((j = shorttext.indexOf(seed, j + 1)) != -1) {\n      var prefixLength = diff_commonPrefix(longtext.substring(i),\n                                           shorttext.substring(j));\n      var suffixLength = diff_commonSuffix(longtext.substring(0, i),\n                                           shorttext.substring(0, j));\n      if (best_common.length < suffixLength + prefixLength) {\n        best_common = shorttext.substring(j - suffixLength, j) +\n            shorttext.substring(j, j + prefixLength);\n        best_longtext_a = longtext.substring(0, i - suffixLength);\n        best_longtext_b = longtext.substring(i + prefixLength);\n        best_shorttext_a = shorttext.substring(0, j - suffixLength);\n        best_shorttext_b = shorttext.substring(j + prefixLength);\n      }\n    }\n    if (best_common.length * 2 >= longtext.length) {\n      return [best_longtext_a, best_longtext_b,\n              best_shorttext_a, best_shorttext_b, best_common];\n    } else {\n      return null;\n    }\n  }\n\n  // First check if the second quarter is the seed for a half-match.\n  var hm1 = diff_halfMatchI_(longtext, shorttext,\n                             Math.ceil(longtext.length / 4));\n  // Check again based on the third quarter.\n  var hm2 = diff_halfMatchI_(longtext, shorttext,\n                             Math.ceil(longtext.length / 2));\n  var hm;\n  if (!hm1 && !hm2) {\n    return null;\n  } else if (!hm2) {\n    hm = hm1;\n  } else if (!hm1) {\n    hm = hm2;\n  } else {\n    // Both matched.  Select the longest.\n    hm = hm1[4].length > hm2[4].length ? hm1 : hm2;\n  }\n\n  // A half-match was found, sort out the return data.\n  var text1_a, text1_b, text2_a, text2_b;\n  if (text1.length > text2.length) {\n    text1_a = hm[0];\n    text1_b = hm[1];\n    text2_a = hm[2];\n    text2_b = hm[3];\n  } else {\n    text2_a = hm[0];\n    text2_b = hm[1];\n    text1_a = hm[2];\n    text1_b = hm[3];\n  }\n  var mid_common = hm[4];\n  return [text1_a, text1_b, text2_a, text2_b, mid_common];\n};\n\n\n/**\n * Reorder and merge like edit sections.  Merge equalities.\n * Any edit section can move as long as it doesn't cross an equality.\n * @param {Array} diffs Array of diff tuples.\n */\nfunction diff_cleanupMerge(diffs) {\n  diffs.push([DIFF_EQUAL, '']);  // Add a dummy entry at the end.\n  var pointer = 0;\n  var count_delete = 0;\n  var count_insert = 0;\n  var text_delete = '';\n  var text_insert = '';\n  var commonlength;\n  while (pointer < diffs.length) {\n    switch (diffs[pointer][0]) {\n      case DIFF_INSERT:\n        count_insert++;\n        text_insert += diffs[pointer][1];\n        pointer++;\n        break;\n      case DIFF_DELETE:\n        count_delete++;\n        text_delete += diffs[pointer][1];\n        pointer++;\n        break;\n      case DIFF_EQUAL:\n        // Upon reaching an equality, check for prior redundancies.\n        if (count_delete + count_insert > 1) {\n          if (count_delete !== 0 && count_insert !== 0) {\n            // Factor out any common prefixies.\n            commonlength = diff_commonPrefix(text_insert, text_delete);\n            if (commonlength !== 0) {\n              if ((pointer - count_delete - count_insert) > 0 &&\n                  diffs[pointer - count_delete - count_insert - 1][0] ==\n                  DIFF_EQUAL) {\n                diffs[pointer - count_delete - count_insert - 1][1] +=\n                    text_insert.substring(0, commonlength);\n              } else {\n                diffs.splice(0, 0, [DIFF_EQUAL,\n                                    text_insert.substring(0, commonlength)]);\n                pointer++;\n              }\n              text_insert = text_insert.substring(commonlength);\n              text_delete = text_delete.substring(commonlength);\n            }\n            // Factor out any common suffixies.\n            commonlength = diff_commonSuffix(text_insert, text_delete);\n            if (commonlength !== 0) {\n              diffs[pointer][1] = text_insert.substring(text_insert.length -\n                  commonlength) + diffs[pointer][1];\n              text_insert = text_insert.substring(0, text_insert.length -\n                  commonlength);\n              text_delete = text_delete.substring(0, text_delete.length -\n                  commonlength);\n            }\n          }\n          // Delete the offending records and add the merged ones.\n          if (count_delete === 0) {\n            diffs.splice(pointer - count_insert,\n                count_delete + count_insert, [DIFF_INSERT, text_insert]);\n          } else if (count_insert === 0) {\n            diffs.splice(pointer - count_delete,\n                count_delete + count_insert, [DIFF_DELETE, text_delete]);\n          } else {\n            diffs.splice(pointer - count_delete - count_insert,\n                count_delete + count_insert, [DIFF_DELETE, text_delete],\n                [DIFF_INSERT, text_insert]);\n          }\n          pointer = pointer - count_delete - count_insert +\n                    (count_delete ? 1 : 0) + (count_insert ? 1 : 0) + 1;\n        } else if (pointer !== 0 && diffs[pointer - 1][0] == DIFF_EQUAL) {\n          // Merge this equality with the previous one.\n          diffs[pointer - 1][1] += diffs[pointer][1];\n          diffs.splice(pointer, 1);\n        } else {\n          pointer++;\n        }\n        count_insert = 0;\n        count_delete = 0;\n        text_delete = '';\n        text_insert = '';\n        break;\n    }\n  }\n  if (diffs[diffs.length - 1][1] === '') {\n    diffs.pop();  // Remove the dummy entry at the end.\n  }\n\n  // Second pass: look for single edits surrounded on both sides by equalities\n  // which can be shifted sideways to eliminate an equality.\n  // e.g: A<ins>BA</ins>C -> <ins>AB</ins>AC\n  var changes = false;\n  pointer = 1;\n  // Intentionally ignore the first and last element (don't need checking).\n  while (pointer < diffs.length - 1) {\n    if (diffs[pointer - 1][0] == DIFF_EQUAL &&\n        diffs[pointer + 1][0] == DIFF_EQUAL) {\n      // This is a single edit surrounded by equalities.\n      if (diffs[pointer][1].substring(diffs[pointer][1].length -\n          diffs[pointer - 1][1].length) == diffs[pointer - 1][1]) {\n        // Shift the edit over the previous equality.\n        diffs[pointer][1] = diffs[pointer - 1][1] +\n            diffs[pointer][1].substring(0, diffs[pointer][1].length -\n                                        diffs[pointer - 1][1].length);\n        diffs[pointer + 1][1] = diffs[pointer - 1][1] + diffs[pointer + 1][1];\n        diffs.splice(pointer - 1, 1);\n        changes = true;\n      } else if (diffs[pointer][1].substring(0, diffs[pointer + 1][1].length) ==\n          diffs[pointer + 1][1]) {\n        // Shift the edit over the next equality.\n        diffs[pointer - 1][1] += diffs[pointer + 1][1];\n        diffs[pointer][1] =\n            diffs[pointer][1].substring(diffs[pointer + 1][1].length) +\n            diffs[pointer + 1][1];\n        diffs.splice(pointer + 1, 1);\n        changes = true;\n      }\n    }\n    pointer++;\n  }\n  // If shifts were made, the diff needs reordering and another shift sweep.\n  if (changes) {\n    diff_cleanupMerge(diffs);\n  }\n};\n\n\nvar diff = diff_main;\ndiff.INSERT = DIFF_INSERT;\ndiff.DELETE = DIFF_DELETE;\ndiff.EQUAL = DIFF_EQUAL;\n\nmodule.exports = diff;\n\n/*\n * Modify a diff such that the cursor position points to the start of a change:\n * E.g.\n *   cursor_normalize_diff([[DIFF_EQUAL, 'abc']], 1)\n *     => [1, [[DIFF_EQUAL, 'a'], [DIFF_EQUAL, 'bc']]]\n *   cursor_normalize_diff([[DIFF_INSERT, 'new'], [DIFF_DELETE, 'xyz']], 2)\n *     => [2, [[DIFF_INSERT, 'new'], [DIFF_DELETE, 'xy'], [DIFF_DELETE, 'z']]]\n *\n * @param {Array} diffs Array of diff tuples\n * @param {Int} cursor_pos Suggested edit position. Must not be out of bounds!\n * @return {Array} A tuple [cursor location in the modified diff, modified diff]\n */\nfunction cursor_normalize_diff (diffs, cursor_pos) {\n  if (cursor_pos === 0) {\n    return [DIFF_EQUAL, diffs];\n  }\n  for (var current_pos = 0, i = 0; i < diffs.length; i++) {\n    var d = diffs[i];\n    if (d[0] === DIFF_DELETE || d[0] === DIFF_EQUAL) {\n      var next_pos = current_pos + d[1].length;\n      if (cursor_pos === next_pos) {\n        return [i + 1, diffs];\n      } else if (cursor_pos < next_pos) {\n        // copy to prevent side effects\n        diffs = diffs.slice();\n        // split d into two diff changes\n        var split_pos = cursor_pos - current_pos;\n        var d_left = [d[0], d[1].slice(0, split_pos)];\n        var d_right = [d[0], d[1].slice(split_pos)];\n        diffs.splice(i, 1, d_left, d_right);\n        return [i + 1, diffs];\n      } else {\n        current_pos = next_pos;\n      }\n    }\n  }\n  throw new Error('cursor_pos is out of bounds!')\n}\n\n/*\n * Modify a diff such that the edit position is \"shifted\" to the proposed edit location (cursor_position).\n *\n * Case 1)\n *   Check if a naive shift is possible:\n *     [0, X], [ 1, Y] -> [ 1, Y], [0, X]    (if X + Y === Y + X)\n *     [0, X], [-1, Y] -> [-1, Y], [0, X]    (if X + Y === Y + X) - holds same result\n * Case 2)\n *   Check if the following shifts are possible:\n *     [0, 'pre'], [ 1, 'prefix'] -> [ 1, 'pre'], [0, 'pre'], [ 1, 'fix']\n *     [0, 'pre'], [-1, 'prefix'] -> [-1, 'pre'], [0, 'pre'], [-1, 'fix']\n *         ^            ^\n *         d          d_next\n *\n * @param {Array} diffs Array of diff tuples\n * @param {Int} cursor_pos Suggested edit position. Must not be out of bounds!\n * @return {Array} Array of diff tuples\n */\nfunction fix_cursor (diffs, cursor_pos) {\n  var norm = cursor_normalize_diff(diffs, cursor_pos);\n  var ndiffs = norm[1];\n  var cursor_pointer = norm[0];\n  var d = ndiffs[cursor_pointer];\n  var d_next = ndiffs[cursor_pointer + 1];\n\n  if (d == null) {\n    // Text was deleted from end of original string,\n    // cursor is now out of bounds in new string\n    return diffs;\n  } else if (d[0] !== DIFF_EQUAL) {\n    // A modification happened at the cursor location.\n    // This is the expected outcome, so we can return the original diff.\n    return diffs;\n  } else {\n    if (d_next != null && d[1] + d_next[1] === d_next[1] + d[1]) {\n      // Case 1)\n      // It is possible to perform a naive shift\n      ndiffs.splice(cursor_pointer, 2, d_next, d)\n      return merge_tuples(ndiffs, cursor_pointer, 2)\n    } else if (d_next != null && d_next[1].indexOf(d[1]) === 0) {\n      // Case 2)\n      // d[1] is a prefix of d_next[1]\n      // We can assume that d_next[0] !== 0, since d[0] === 0\n      // Shift edit locations..\n      ndiffs.splice(cursor_pointer, 2, [d_next[0], d[1]], [0, d[1]]);\n      var suffix = d_next[1].slice(d[1].length);\n      if (suffix.length > 0) {\n        ndiffs.splice(cursor_pointer + 2, 0, [d_next[0], suffix]);\n      }\n      return merge_tuples(ndiffs, cursor_pointer, 3)\n    } else {\n      // Not possible to perform any modification\n      return diffs;\n    }\n  }\n}\n\n/*\n * Check diff did not split surrogate pairs.\n * Ex. [0, '\\uD83D'], [-1, '\\uDC36'], [1, '\\uDC2F'] -> [-1, '\\uD83D\\uDC36'], [1, '\\uD83D\\uDC2F']\n *     '\\uD83D\\uDC36' === '🐶', '\\uD83D\\uDC2F' === '🐯'\n *\n * @param {Array} diffs Array of diff tuples\n * @return {Array} Array of diff tuples\n */\nfunction fix_emoji (diffs) {\n  var compact = false;\n  var starts_with_pair_end = function(str) {\n    return str.charCodeAt(0) >= 0xDC00 && str.charCodeAt(0) <= 0xDFFF;\n  }\n  var ends_with_pair_start = function(str) {\n    return str.charCodeAt(str.length-1) >= 0xD800 && str.charCodeAt(str.length-1) <= 0xDBFF;\n  }\n  for (var i = 2; i < diffs.length; i += 1) {\n    if (diffs[i-2][0] === DIFF_EQUAL && ends_with_pair_start(diffs[i-2][1]) &&\n        diffs[i-1][0] === DIFF_DELETE && starts_with_pair_end(diffs[i-1][1]) &&\n        diffs[i][0] === DIFF_INSERT && starts_with_pair_end(diffs[i][1])) {\n      compact = true;\n\n      diffs[i-1][1] = diffs[i-2][1].slice(-1) + diffs[i-1][1];\n      diffs[i][1] = diffs[i-2][1].slice(-1) + diffs[i][1];\n\n      diffs[i-2][1] = diffs[i-2][1].slice(0, -1);\n    }\n  }\n  if (!compact) {\n    return diffs;\n  }\n  var fixed_diffs = [];\n  for (var i = 0; i < diffs.length; i += 1) {\n    if (diffs[i][1].length > 0) {\n      fixed_diffs.push(diffs[i]);\n    }\n  }\n  return fixed_diffs;\n}\n\n/*\n * Try to merge tuples with their neigbors in a given range.\n * E.g. [0, 'a'], [0, 'b'] -> [0, 'ab']\n *\n * @param {Array} diffs Array of diff tuples.\n * @param {Int} start Position of the first element to merge (diffs[start] is also merged with diffs[start - 1]).\n * @param {Int} length Number of consecutive elements to check.\n * @return {Array} Array of merged diff tuples.\n */\nfunction merge_tuples (diffs, start, length) {\n  // Check from (start-1) to (start+length).\n  for (var i = start + length - 1; i >= 0 && i >= start - 1; i--) {\n    if (i + 1 < diffs.length) {\n      var left_d = diffs[i];\n      var right_d = diffs[i+1];\n      if (left_d[0] === right_d[1]) {\n        diffs.splice(i, 2, [left_d[0], left_d[1] + right_d[1]]);\n      }\n    }\n  }\n  return diffs;\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/fast-diff/diff.js\n// module id = 54\n// module chunks = 0","exports = module.exports = typeof Object.keys === 'function'\n  ? Object.keys : shim;\n\nexports.shim = shim;\nfunction shim (obj) {\n  var keys = [];\n  for (var key in obj) keys.push(key);\n  return keys;\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/deep-equal/lib/keys.js\n// module id = 55\n// module chunks = 0","var supportsArgumentsClass = (function(){\n  return Object.prototype.toString.call(arguments)\n})() == '[object Arguments]';\n\nexports = module.exports = supportsArgumentsClass ? supported : unsupported;\n\nexports.supported = supported;\nfunction supported(object) {\n  return Object.prototype.toString.call(object) == '[object Arguments]';\n};\n\nexports.unsupported = unsupported;\nfunction unsupported(object){\n  return object &&\n    typeof object == 'object' &&\n    typeof object.length == 'number' &&\n    Object.prototype.hasOwnProperty.call(object, 'callee') &&\n    !Object.prototype.propertyIsEnumerable.call(object, 'callee') ||\n    false;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/deep-equal/lib/is_arguments.js\n// module id = 56\n// module chunks = 0","import Delta from 'quill-delta';\nimport DeltaOp from 'quill-delta/lib/op';\nimport Parchment from 'parchment';\nimport CodeBlock from '../formats/code';\nimport CursorBlot from '../blots/cursor';\nimport Block, { bubbleFormats } from '../blots/block';\nimport Break from '../blots/break';\nimport clone from 'clone';\nimport equal from 'deep-equal';\nimport extend from 'extend';\n\n\nconst ASCII = /^[ -~]*$/;\n\n\nclass Editor {\n  constructor(scroll) {\n    this.scroll = scroll;\n    this.delta = this.getDelta();\n  }\n\n  applyDelta(delta) {\n    let consumeNextNewline = false;\n    this.scroll.update();\n    let scrollLength = this.scroll.length();\n    this.scroll.batchStart();\n    delta = normalizeDelta(delta);\n    delta.reduce((index, op) => {\n      let length = op.retain || op.delete || op.insert.length || 1;\n      let attributes = op.attributes || {};\n      if (op.insert != null) {\n        if (typeof op.insert === 'string') {\n          let text = op.insert;\n          if (text.endsWith('\\n') && consumeNextNewline) {\n            consumeNextNewline = false;\n            text = text.slice(0, -1);\n          }\n          if (index >= scrollLength && !text.endsWith('\\n')) {\n            consumeNextNewline = true;\n          }\n          this.scroll.insertAt(index, text);\n          let [line, offset] = this.scroll.line(index);\n          let formats = extend({}, bubbleFormats(line));\n          if (line instanceof Block) {\n            let [leaf, ] = line.descendant(Parchment.Leaf, offset);\n            formats = extend(formats, bubbleFormats(leaf));\n          }\n          attributes = DeltaOp.attributes.diff(formats, attributes) || {};\n        } else if (typeof op.insert === 'object') {\n          let key = Object.keys(op.insert)[0];  // There should only be one key\n          if (key == null) return index;\n          this.scroll.insertAt(index, key, op.insert[key]);\n        }\n        scrollLength += length;\n      }\n      Object.keys(attributes).forEach((name) => {\n        this.scroll.formatAt(index, length, name, attributes[name]);\n      });\n      return index + length;\n    }, 0);\n    delta.reduce((index, op) => {\n      if (typeof op.delete === 'number') {\n        this.scroll.deleteAt(index, op.delete);\n        return index;\n      }\n      return index + (op.retain || op.insert.length || 1);\n    }, 0);\n    this.scroll.batchEnd();\n    return this.update(delta);\n  }\n\n  deleteText(index, length) {\n    this.scroll.deleteAt(index, length);\n    return this.update(new Delta().retain(index).delete(length));\n  }\n\n  formatLine(index, length, formats = {}) {\n    this.scroll.update();\n    Object.keys(formats).forEach((format) => {\n      if (this.scroll.whitelist != null && !this.scroll.whitelist[format]) return;\n      let lines = this.scroll.lines(index, Math.max(length, 1));\n      let lengthRemaining = length;\n      lines.forEach((line) => {\n        let lineLength = line.length();\n        if (!(line instanceof CodeBlock)) {\n          line.format(format, formats[format]);\n        } else {\n          let codeIndex = index - line.offset(this.scroll);\n          let codeLength = line.newlineIndex(codeIndex + lengthRemaining) - codeIndex + 1;\n          line.formatAt(codeIndex, codeLength, format, formats[format]);\n        }\n        lengthRemaining -= lineLength;\n      });\n    });\n    this.scroll.optimize();\n    return this.update(new Delta().retain(index).retain(length, clone(formats)));\n  }\n\n  formatText(index, length, formats = {}) {\n    Object.keys(formats).forEach((format) => {\n      this.scroll.formatAt(index, length, format, formats[format]);\n    });\n    return this.update(new Delta().retain(index).retain(length, clone(formats)));\n  }\n\n  getContents(index, length) {\n    return this.delta.slice(index, index + length);\n  }\n\n  getDelta() {\n    return this.scroll.lines().reduce((delta, line) => {\n      return delta.concat(line.delta());\n    }, new Delta());\n  }\n\n  getFormat(index, length = 0) {\n    let lines = [], leaves = [];\n    if (length === 0) {\n      this.scroll.path(index).forEach(function(path) {\n        let [blot, ] = path;\n        if (blot instanceof Block) {\n          lines.push(blot);\n        } else if (blot instanceof Parchment.Leaf) {\n          leaves.push(blot);\n        }\n      });\n    } else {\n      lines = this.scroll.lines(index, length);\n      leaves = this.scroll.descendants(Parchment.Leaf, index, length);\n    }\n    let formatsArr = [lines, leaves].map(function(blots) {\n      if (blots.length === 0) return {};\n      let formats = bubbleFormats(blots.shift());\n      while (Object.keys(formats).length > 0) {\n        let blot = blots.shift();\n        if (blot == null) return formats;\n        formats = combineFormats(bubbleFormats(blot), formats);\n      }\n      return formats;\n    });\n    return extend.apply(extend, formatsArr);\n  }\n\n  getText(index, length) {\n    return this.getContents(index, length).filter(function(op) {\n      return typeof op.insert === 'string';\n    }).map(function(op) {\n      return op.insert;\n    }).join('');\n  }\n\n  insertEmbed(index, embed, value) {\n    this.scroll.insertAt(index, embed, value);\n    return this.update(new Delta().retain(index).insert({ [embed]: value }));\n  }\n\n  insertText(index, text, formats = {}) {\n    text = text.replace(/\\r\\n/g, '\\n').replace(/\\r/g, '\\n');\n    this.scroll.insertAt(index, text);\n    Object.keys(formats).forEach((format) => {\n      this.scroll.formatAt(index, text.length, format, formats[format]);\n    });\n    return this.update(new Delta().retain(index).insert(text, clone(formats)));\n  }\n\n  isBlank() {\n    if (this.scroll.children.length == 0) return true;\n    if (this.scroll.children.length > 1) return false;\n    let block = this.scroll.children.head;\n    if (block.statics.blotName !== Block.blotName) return false;\n    if (block.children.length > 1) return false;\n    return block.children.head instanceof Break;\n  }\n\n  removeFormat(index, length) {\n    let text = this.getText(index, length);\n    let [line, offset] = this.scroll.line(index + length);\n    let suffixLength = 0, suffix = new Delta();\n    if (line != null) {\n      if (!(line instanceof CodeBlock)) {\n        suffixLength = line.length() - offset;\n      } else {\n        suffixLength = line.newlineIndex(offset) - offset + 1;\n      }\n      suffix = line.delta().slice(offset, offset + suffixLength - 1).insert('\\n');\n    }\n    let contents = this.getContents(index, length + suffixLength);\n    let diff = contents.diff(new Delta().insert(text).concat(suffix));\n    let delta = new Delta().retain(index).concat(diff);\n    return this.applyDelta(delta);\n  }\n\n  update(change, mutations = [], cursorIndex = undefined) {\n    let oldDelta = this.delta;\n    if (mutations.length === 1 &&\n        mutations[0].type === 'characterData' &&\n        mutations[0].target.data.match(ASCII) &&\n        Parchment.find(mutations[0].target)) {\n      // Optimization for character changes\n      let textBlot = Parchment.find(mutations[0].target);\n      let formats = bubbleFormats(textBlot);\n      let index = textBlot.offset(this.scroll);\n      let oldValue = mutations[0].oldValue.replace(CursorBlot.CONTENTS, '');\n      let oldText = new Delta().insert(oldValue);\n      let newText = new Delta().insert(textBlot.value());\n      let diffDelta = new Delta().retain(index).concat(oldText.diff(newText, cursorIndex));\n      change = diffDelta.reduce(function(delta, op) {\n        if (op.insert) {\n          return delta.insert(op.insert, formats);\n        } else {\n          return delta.push(op);\n        }\n      }, new Delta());\n      this.delta = oldDelta.compose(change);\n    } else {\n      this.delta = this.getDelta();\n      if (!change || !equal(oldDelta.compose(change), this.delta)) {\n        change = oldDelta.diff(this.delta, cursorIndex);\n      }\n    }\n    return change;\n  }\n}\n\n\nfunction combineFormats(formats, combined) {\n  return Object.keys(combined).reduce(function(merged, name) {\n    if (formats[name] == null) return merged;\n    if (combined[name] === formats[name]) {\n      merged[name] = combined[name];\n    } else if (Array.isArray(combined[name])) {\n      if (combined[name].indexOf(formats[name]) < 0) {\n        merged[name] = combined[name].concat([formats[name]]);\n      }\n    } else {\n      merged[name] = [combined[name], formats[name]];\n    }\n    return merged;\n  }, {});\n}\n\nfunction normalizeDelta(delta) {\n  return delta.reduce(function(delta, op) {\n    if (op.insert === 1) {\n      let attributes = clone(op.attributes);\n      delete attributes['image'];\n      return delta.insert({ image: op.attributes.image }, attributes);\n    }\n    if (op.attributes != null && (op.attributes.list === true || op.attributes.bullet === true)) {\n      op = clone(op);\n      if (op.attributes.list) {\n        op.attributes.list = 'ordered';\n      } else {\n        op.attributes.list = 'bullet';\n        delete op.attributes.bullet;\n      }\n    }\n    if (typeof op.insert === 'string') {\n      let text = op.insert.replace(/\\r\\n/g, '\\n').replace(/\\r/g, '\\n');\n      return delta.insert(text, op.attributes);\n    }\n    return delta.push(op);\n  }, new Delta());\n}\n\n\nexport default Editor;\n\n\n\n// WEBPACK FOOTER //\n// ./core/editor.js","'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n  , prefix = '~';\n\n/**\n * Constructor to create a storage for our `EE` objects.\n * An `Events` instance is a plain object whose properties are event names.\n *\n * @constructor\n * @api private\n */\nfunction Events() {}\n\n//\n// We try to not inherit from `Object.prototype`. In some engines creating an\n// instance in this way is faster than calling `Object.create(null)` directly.\n// If `Object.create(null)` is not supported we prefix the event names with a\n// character to make sure that the built-in object properties are not\n// overridden or used as an attack vector.\n//\nif (Object.create) {\n  Events.prototype = Object.create(null);\n\n  //\n  // This hack is needed because the `__proto__` property is still inherited in\n  // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n  //\n  if (!new Events().__proto__) prefix = false;\n}\n\n/**\n * Representation of a single event listener.\n *\n * @param {Function} fn The listener function.\n * @param {Mixed} context The context to invoke the listener with.\n * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n * @constructor\n * @api private\n */\nfunction EE(fn, context, once) {\n  this.fn = fn;\n  this.context = context;\n  this.once = once || false;\n}\n\n/**\n * Minimal `EventEmitter` interface that is molded against the Node.js\n * `EventEmitter` interface.\n *\n * @constructor\n * @api public\n */\nfunction EventEmitter() {\n  this._events = new Events();\n  this._eventsCount = 0;\n}\n\n/**\n * Return an array listing the events for which the emitter has registered\n * listeners.\n *\n * @returns {Array}\n * @api public\n */\nEventEmitter.prototype.eventNames = function eventNames() {\n  var names = []\n    , events\n    , name;\n\n  if (this._eventsCount === 0) return names;\n\n  for (name in (events = this._events)) {\n    if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n  }\n\n  if (Object.getOwnPropertySymbols) {\n    return names.concat(Object.getOwnPropertySymbols(events));\n  }\n\n  return names;\n};\n\n/**\n * Return the listeners registered for a given event.\n *\n * @param {String|Symbol} event The event name.\n * @param {Boolean} exists Only check if there are listeners.\n * @returns {Array|Boolean}\n * @api public\n */\nEventEmitter.prototype.listeners = function listeners(event, exists) {\n  var evt = prefix ? prefix + event : event\n    , available = this._events[evt];\n\n  if (exists) return !!available;\n  if (!available) return [];\n  if (available.fn) return [available.fn];\n\n  for (var i = 0, l = available.length, ee = new Array(l); i < l; i++) {\n    ee[i] = available[i].fn;\n  }\n\n  return ee;\n};\n\n/**\n * Calls each of the listeners registered for a given event.\n *\n * @param {String|Symbol} event The event name.\n * @returns {Boolean} `true` if the event had listeners, else `false`.\n * @api public\n */\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n  var evt = prefix ? prefix + event : event;\n\n  if (!this._events[evt]) return false;\n\n  var listeners = this._events[evt]\n    , len = arguments.length\n    , args\n    , i;\n\n  if (listeners.fn) {\n    if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n    switch (len) {\n      case 1: return listeners.fn.call(listeners.context), true;\n      case 2: return listeners.fn.call(listeners.context, a1), true;\n      case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n      case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n      case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n      case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n    }\n\n    for (i = 1, args = new Array(len -1); i < len; i++) {\n      args[i - 1] = arguments[i];\n    }\n\n    listeners.fn.apply(listeners.context, args);\n  } else {\n    var length = listeners.length\n      , j;\n\n    for (i = 0; i < length; i++) {\n      if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n      switch (len) {\n        case 1: listeners[i].fn.call(listeners[i].context); break;\n        case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n        case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n        case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n        default:\n          if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n            args[j - 1] = arguments[j];\n          }\n\n          listeners[i].fn.apply(listeners[i].context, args);\n      }\n    }\n  }\n\n  return true;\n};\n\n/**\n * Add a listener for a given event.\n *\n * @param {String|Symbol} event The event name.\n * @param {Function} fn The listener function.\n * @param {Mixed} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @api public\n */\nEventEmitter.prototype.on = function on(event, fn, context) {\n  var listener = new EE(fn, context || this)\n    , evt = prefix ? prefix + event : event;\n\n  if (!this._events[evt]) this._events[evt] = listener, this._eventsCount++;\n  else if (!this._events[evt].fn) this._events[evt].push(listener);\n  else this._events[evt] = [this._events[evt], listener];\n\n  return this;\n};\n\n/**\n * Add a one-time listener for a given event.\n *\n * @param {String|Symbol} event The event name.\n * @param {Function} fn The listener function.\n * @param {Mixed} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @api public\n */\nEventEmitter.prototype.once = function once(event, fn, context) {\n  var listener = new EE(fn, context || this, true)\n    , evt = prefix ? prefix + event : event;\n\n  if (!this._events[evt]) this._events[evt] = listener, this._eventsCount++;\n  else if (!this._events[evt].fn) this._events[evt].push(listener);\n  else this._events[evt] = [this._events[evt], listener];\n\n  return this;\n};\n\n/**\n * Remove the listeners of a given event.\n *\n * @param {String|Symbol} event The event name.\n * @param {Function} fn Only remove the listeners that match this function.\n * @param {Mixed} context Only remove the listeners that have this context.\n * @param {Boolean} once Only remove one-time listeners.\n * @returns {EventEmitter} `this`.\n * @api public\n */\nEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n  var evt = prefix ? prefix + event : event;\n\n  if (!this._events[evt]) return this;\n  if (!fn) {\n    if (--this._eventsCount === 0) this._events = new Events();\n    else delete this._events[evt];\n    return this;\n  }\n\n  var listeners = this._events[evt];\n\n  if (listeners.fn) {\n    if (\n         listeners.fn === fn\n      && (!once || listeners.once)\n      && (!context || listeners.context === context)\n    ) {\n      if (--this._eventsCount === 0) this._events = new Events();\n      else delete this._events[evt];\n    }\n  } else {\n    for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n      if (\n           listeners[i].fn !== fn\n        || (once && !listeners[i].once)\n        || (context && listeners[i].context !== context)\n      ) {\n        events.push(listeners[i]);\n      }\n    }\n\n    //\n    // Reset the array, or remove it completely if we have no more listeners.\n    //\n    if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n    else if (--this._eventsCount === 0) this._events = new Events();\n    else delete this._events[evt];\n  }\n\n  return this;\n};\n\n/**\n * Remove all listeners, or those of the specified event.\n *\n * @param {String|Symbol} [event] The event name.\n * @returns {EventEmitter} `this`.\n * @api public\n */\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n  var evt;\n\n  if (event) {\n    evt = prefix ? prefix + event : event;\n    if (this._events[evt]) {\n      if (--this._eventsCount === 0) this._events = new Events();\n      else delete this._events[evt];\n    }\n  } else {\n    this._events = new Events();\n    this._eventsCount = 0;\n  }\n\n  return this;\n};\n\n//\n// Alias methods names because people roll like that.\n//\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n//\n// This function doesn't apply anymore.\n//\nEventEmitter.prototype.setMaxListeners = function setMaxListeners() {\n  return this;\n};\n\n//\n// Expose the prefix.\n//\nEventEmitter.prefixed = prefix;\n\n//\n// Allow `EventEmitter` to be imported as module namespace.\n//\nEventEmitter.EventEmitter = EventEmitter;\n\n//\n// Expose the module.\n//\nif ('undefined' !== typeof module) {\n  module.exports = EventEmitter;\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/eventemitter3/index.js\n// module id = 58\n// module chunks = 0","import Parchment from 'parchment';\nimport Emitter from '../core/emitter';\nimport Block, { BlockEmbed } from './block';\nimport Break from './break';\nimport CodeBlock from '../formats/code';\nimport Container from './container';\n\n\nfunction isLine(blot) {\n  return (blot instanceof Block || blot instanceof BlockEmbed);\n}\n\n\nclass Scroll extends Parchment.Scroll {\n  constructor(domNode, config) {\n    super(domNode);\n    this.emitter = config.emitter;\n    if (Array.isArray(config.whitelist)) {\n      this.whitelist = config.whitelist.reduce(function(whitelist, format) {\n        whitelist[format] = true;\n        return whitelist;\n      }, {});\n    }\n    // Some reason fixes composition issues with character languages in Windows/Chrome, Safari\n    this.domNode.addEventListener('DOMNodeInserted', function() {});\n    this.optimize();\n    this.enable();\n  }\n\n  batchStart() {\n    this.batch = true;\n  }\n\n  batchEnd() {\n    this.batch = false;\n    this.optimize();\n  }\n\n  deleteAt(index, length) {\n    let [first, offset] = this.line(index);\n    let [last, ] = this.line(index + length);\n    super.deleteAt(index, length);\n    if (last != null && first !== last && offset > 0) {\n      if (first instanceof BlockEmbed || last instanceof BlockEmbed) {\n        this.optimize();\n        return;\n      }\n      if (first instanceof CodeBlock) {\n        let newlineIndex = first.newlineIndex(first.length(), true);\n        if (newlineIndex > -1) {\n          first = first.split(newlineIndex + 1);\n          if (first === last) {\n            this.optimize();\n            return;\n          }\n        }\n      } else if (last instanceof CodeBlock) {\n        let newlineIndex = last.newlineIndex(0);\n        if (newlineIndex > -1) {\n          last.split(newlineIndex + 1);\n        }\n      }\n      let ref = last.children.head instanceof Break ? null : last.children.head;\n      first.moveChildren(last, ref);\n      first.remove();\n    }\n    this.optimize();\n  }\n\n  enable(enabled = true) {\n    this.domNode.setAttribute('contenteditable', enabled);\n  }\n\n  formatAt(index, length, format, value) {\n    if (this.whitelist != null && !this.whitelist[format]) return;\n    super.formatAt(index, length, format, value);\n    this.optimize();\n  }\n\n  insertAt(index, value, def) {\n    if (def != null && this.whitelist != null && !this.whitelist[value]) return;\n    if (index >= this.length()) {\n      if (def == null || Parchment.query(value, Parchment.Scope.BLOCK) == null) {\n        let blot = Parchment.create(this.statics.defaultChild);\n        this.appendChild(blot);\n        if (def == null && value.endsWith('\\n')) {\n          value = value.slice(0, -1);\n        }\n        blot.insertAt(0, value, def);\n      } else {\n        let embed = Parchment.create(value, def);\n        this.appendChild(embed);\n      }\n    } else {\n      super.insertAt(index, value, def);\n    }\n    this.optimize();\n  }\n\n  insertBefore(blot, ref) {\n    if (blot.statics.scope === Parchment.Scope.INLINE_BLOT) {\n      let wrapper = Parchment.create(this.statics.defaultChild);\n      wrapper.appendChild(blot);\n      blot = wrapper;\n    }\n    super.insertBefore(blot, ref);\n  }\n\n  leaf(index) {\n    return this.path(index).pop() || [null, -1];\n  }\n\n  line(index) {\n    if (index === this.length()) {\n      return this.line(index - 1);\n    }\n    return this.descendant(isLine, index);\n  }\n\n  lines(index = 0, length = Number.MAX_VALUE) {\n    let getLines = (blot, index, length) => {\n      let lines = [], lengthLeft = length;\n      blot.children.forEachAt(index, length, function(child, index, length) {\n        if (isLine(child)) {\n          lines.push(child);\n        } else if (child instanceof Parchment.Container) {\n          lines = lines.concat(getLines(child, index, lengthLeft));\n        }\n        lengthLeft -= length;\n      });\n      return lines;\n    };\n    return getLines(this, index, length);\n  }\n\n  optimize(mutations = [], context = {}) {\n    if (this.batch === true) return;\n    super.optimize(mutations, context);\n    if (mutations.length > 0) {\n      this.emitter.emit(Emitter.events.SCROLL_OPTIMIZE, mutations, context);\n    }\n  }\n\n  path(index) {\n    return super.path(index).slice(1);  // Exclude self\n  }\n\n  update(mutations) {\n    if (this.batch === true) return;\n    let source = Emitter.sources.USER;\n    if (typeof mutations === 'string') {\n      source = mutations;\n    }\n    if (!Array.isArray(mutations)) {\n      mutations = this.observer.takeRecords();\n    }\n    if (mutations.length > 0) {\n      this.emitter.emit(Emitter.events.SCROLL_BEFORE_UPDATE, source, mutations);\n    }\n    super.update(mutations.concat([]));   // pass copy\n    if (mutations.length > 0) {\n      this.emitter.emit(Emitter.events.SCROLL_UPDATE, source, mutations);\n    }\n  }\n}\nScroll.blotName = 'scroll';\nScroll.className = 'ql-editor';\nScroll.tagName = 'DIV';\nScroll.defaultChild = 'block';\nScroll.allowedChildren = [Block, BlockEmbed, Container];\n\n\nexport default Scroll;\n\n\n\n// WEBPACK FOOTER //\n// ./blots/scroll.js","import extend from 'extend';\nimport Delta from 'quill-delta';\nimport Parchment from 'parchment';\nimport Quill from '../core/quill';\nimport logger from '../core/logger';\nimport Module from '../core/module';\n\nimport { AlignAttribute, AlignStyle } from '../formats/align';\nimport { BackgroundStyle } from '../formats/background';\nimport CodeBlock from '../formats/code';\nimport { ColorStyle } from '../formats/color';\nimport { DirectionAttribute, DirectionStyle } from '../formats/direction';\nimport { FontStyle } from '../formats/font';\nimport { SizeStyle } from '../formats/size';\n\nlet debug = logger('quill:clipboard');\n\n\nconst DOM_KEY = '__ql-matcher';\n\nconst CLIPBOARD_CONFIG = [\n  [Node.TEXT_NODE, matchText],\n  [Node.TEXT_NODE, matchNewline],\n  ['br', matchBreak],\n  [Node.ELEMENT_NODE, matchNewline],\n  [Node.ELEMENT_NODE, matchBlot],\n  [Node.ELEMENT_NODE, matchSpacing],\n  [Node.ELEMENT_NODE, matchAttributor],\n  [Node.ELEMENT_NODE, matchStyles],\n  ['li', matchIndent],\n  ['b', matchAlias.bind(matchAlias, 'bold')],\n  ['i', matchAlias.bind(matchAlias, 'italic')],\n  ['style', matchIgnore]\n];\n\nconst ATTRIBUTE_ATTRIBUTORS = [\n  AlignAttribute,\n  DirectionAttribute\n].reduce(function(memo, attr) {\n  memo[attr.keyName] = attr;\n  return memo;\n}, {});\n\nconst STYLE_ATTRIBUTORS = [\n  AlignStyle,\n  BackgroundStyle,\n  ColorStyle,\n  DirectionStyle,\n  FontStyle,\n  SizeStyle\n].reduce(function(memo, attr) {\n  memo[attr.keyName] = attr;\n  return memo;\n}, {});\n\n\nclass Clipboard extends Module {\n  constructor(quill, options) {\n    super(quill, options);\n    this.quill.root.addEventListener('paste', this.onPaste.bind(this));\n    this.container = this.quill.addContainer('ql-clipboard');\n    this.container.setAttribute('contenteditable', true);\n    this.container.setAttribute('tabindex', -1);\n    this.matchers = [];\n    CLIPBOARD_CONFIG.concat(this.options.matchers).forEach(([selector, matcher]) => {\n      if (!options.matchVisual && matcher === matchSpacing) return;\n      this.addMatcher(selector, matcher);\n    });\n  }\n\n  addMatcher(selector, matcher) {\n    this.matchers.push([selector, matcher]);\n  }\n\n  convert(html) {\n    if (typeof html === 'string') {\n      this.container.innerHTML = html.replace(/\\>\\r?\\n +\\</g, '><'); // Remove spaces between tags\n      return this.convert();\n    }\n    const formats = this.quill.getFormat(this.quill.selection.savedRange.index);\n    if (formats[CodeBlock.blotName]) {\n      const text = this.container.innerText;\n      this.container.innerHTML = '';\n      return new Delta().insert(text, { [CodeBlock.blotName]: formats[CodeBlock.blotName] });\n    }\n    let [elementMatchers, textMatchers] = this.prepareMatching();\n    let delta = traverse(this.container, elementMatchers, textMatchers);\n    // Remove trailing newline\n    if (deltaEndsWith(delta, '\\n') && delta.ops[delta.ops.length - 1].attributes == null) {\n      delta = delta.compose(new Delta().retain(delta.length() - 1).delete(1));\n    }\n    debug.log('convert', this.container.innerHTML, delta);\n    this.container.innerHTML = '';\n    return delta;\n  }\n\n  dangerouslyPasteHTML(index, html, source = Quill.sources.API) {\n    if (typeof index === 'string') {\n      this.quill.setContents(this.convert(index), html);\n      this.quill.setSelection(0, Quill.sources.SILENT);\n    } else {\n      let paste = this.convert(html);\n      this.quill.updateContents(new Delta().retain(index).concat(paste), source);\n      this.quill.setSelection(index + paste.length(), Quill.sources.SILENT);\n    }\n  }\n\n  onPaste(e) {\n    if (e.defaultPrevented || !this.quill.isEnabled()) return;\n    let range = this.quill.getSelection();\n    let delta = new Delta().retain(range.index);\n    let scrollTop = this.quill.scrollingContainer.scrollTop;\n    this.container.focus();\n    this.quill.selection.update(Quill.sources.SILENT);\n    setTimeout(() => {\n      delta = delta.concat(this.convert()).delete(range.length);\n      this.quill.updateContents(delta, Quill.sources.USER);\n      // range.length contributes to delta.length()\n      this.quill.setSelection(delta.length() - range.length, Quill.sources.SILENT);\n      this.quill.scrollingContainer.scrollTop = scrollTop;\n      this.quill.focus();\n    }, 1);\n  }\n\n  prepareMatching() {\n    let elementMatchers = [], textMatchers = [];\n    this.matchers.forEach((pair) => {\n      let [selector, matcher] = pair;\n      switch (selector) {\n        case Node.TEXT_NODE:\n          textMatchers.push(matcher);\n          break;\n        case Node.ELEMENT_NODE:\n          elementMatchers.push(matcher);\n          break;\n        default:\n          [].forEach.call(this.container.querySelectorAll(selector), (node) => {\n            // TODO use weakmap\n            node[DOM_KEY] = node[DOM_KEY] || [];\n            node[DOM_KEY].push(matcher);\n          });\n          break;\n      }\n    });\n    return [elementMatchers, textMatchers];\n  }\n}\nClipboard.DEFAULTS = {\n  matchers: [],\n  matchVisual: true\n};\n\n\nfunction applyFormat(delta, format, value) {\n  if (typeof format === 'object') {\n    return Object.keys(format).reduce(function(delta, key) {\n      return applyFormat(delta, key, format[key]);\n    }, delta);\n  } else {\n    return delta.reduce(function(delta, op) {\n      if (op.attributes && op.attributes[format]) {\n        return delta.push(op);\n      } else {\n        return delta.insert(op.insert, extend({}, {[format]: value}, op.attributes));\n      }\n    }, new Delta());\n  }\n}\n\nfunction computeStyle(node) {\n  if (node.nodeType !== Node.ELEMENT_NODE) return {};\n  const DOM_KEY = '__ql-computed-style';\n  return node[DOM_KEY] || (node[DOM_KEY] = window.getComputedStyle(node));\n}\n\nfunction deltaEndsWith(delta, text) {\n  let endText = \"\";\n  for (let i = delta.ops.length - 1; i >= 0 && endText.length < text.length; --i) {\n    let op  = delta.ops[i];\n    if (typeof op.insert !== 'string') break;\n    endText = op.insert + endText;\n  }\n  return endText.slice(-1*text.length) === text;\n}\n\nfunction isLine(node) {\n  if (node.childNodes.length === 0) return false;   // Exclude embed blocks\n  let style = computeStyle(node);\n  return ['block', 'list-item'].indexOf(style.display) > -1;\n}\n\nfunction traverse(node, elementMatchers, textMatchers) {  // Post-order\n  if (node.nodeType === node.TEXT_NODE) {\n    return textMatchers.reduce(function(delta, matcher) {\n      return matcher(node, delta);\n    }, new Delta());\n  } else if (node.nodeType === node.ELEMENT_NODE) {\n    return [].reduce.call(node.childNodes || [], (delta, childNode) => {\n      let childrenDelta = traverse(childNode, elementMatchers, textMatchers);\n      if (childNode.nodeType === node.ELEMENT_NODE) {\n        childrenDelta = elementMatchers.reduce(function(childrenDelta, matcher) {\n          return matcher(childNode, childrenDelta);\n        }, childrenDelta);\n        childrenDelta = (childNode[DOM_KEY] || []).reduce(function(childrenDelta, matcher) {\n          return matcher(childNode, childrenDelta);\n        }, childrenDelta);\n      }\n      return delta.concat(childrenDelta);\n    }, new Delta());\n  } else {\n    return new Delta();\n  }\n}\n\n\nfunction matchAlias(format, node, delta) {\n  return applyFormat(delta, format, true);\n}\n\nfunction matchAttributor(node, delta) {\n  let attributes = Parchment.Attributor.Attribute.keys(node);\n  let classes = Parchment.Attributor.Class.keys(node);\n  let styles = Parchment.Attributor.Style.keys(node);\n  let formats = {};\n  attributes.concat(classes).concat(styles).forEach((name) => {\n    let attr = Parchment.query(name, Parchment.Scope.ATTRIBUTE);\n    if (attr != null) {\n      formats[attr.attrName] = attr.value(node);\n      if (formats[attr.attrName]) return;\n    }\n    attr = ATTRIBUTE_ATTRIBUTORS[name];\n    if (attr != null && (attr.attrName === name || attr.keyName === name)) {\n      formats[attr.attrName] = attr.value(node) || undefined;\n    }\n    attr = STYLE_ATTRIBUTORS[name]\n    if (attr != null && (attr.attrName === name || attr.keyName === name)) {\n      attr = STYLE_ATTRIBUTORS[name];\n      formats[attr.attrName] = attr.value(node) || undefined;\n    }\n  });\n  if (Object.keys(formats).length > 0) {\n    delta = applyFormat(delta, formats);\n  }\n  return delta;\n}\n\nfunction matchBlot(node, delta) {\n  let match = Parchment.query(node);\n  if (match == null) return delta;\n  if (match.prototype instanceof Parchment.Embed) {\n    let embed = {};\n    let value = match.value(node);\n    if (value != null) {\n      embed[match.blotName] = value;\n      delta = new Delta().insert(embed, match.formats(node));\n    }\n  } else if (typeof match.formats === 'function') {\n    delta = applyFormat(delta, match.blotName, match.formats(node));\n  }\n  return delta;\n}\n\nfunction matchBreak(node, delta) {\n  if (!deltaEndsWith(delta, '\\n')) {\n    delta.insert('\\n');\n  }\n  return delta;\n}\n\nfunction matchIgnore() {\n  return new Delta();\n}\n\nfunction matchIndent(node, delta) {\n  let match = Parchment.query(node);\n  if (match == null || match.blotName !== 'list-item' || !deltaEndsWith(delta, '\\n')) {\n    return delta;\n  }\n  let indent = -1, parent = node.parentNode;\n  while (!parent.classList.contains('ql-clipboard')) {\n    if ((Parchment.query(parent) || {}).blotName === 'list') {\n      indent += 1;\n    }\n    parent = parent.parentNode;\n  }\n  if (indent <= 0) return delta;\n  return delta.compose(new Delta().retain(delta.length() - 1).retain(1, { indent: indent}));\n}\n\nfunction matchNewline(node, delta) {\n  if (!deltaEndsWith(delta, '\\n')) {\n    if (isLine(node) || (delta.length() > 0 && node.nextSibling && isLine(node.nextSibling))) {\n      delta.insert('\\n');\n    }\n  }\n  return delta;\n}\n\nfunction matchSpacing(node, delta) {\n  if (isLine(node) && node.nextElementSibling != null && !deltaEndsWith(delta, '\\n\\n')) {\n    let nodeHeight = node.offsetHeight + parseFloat(computeStyle(node).marginTop) + parseFloat(computeStyle(node).marginBottom);\n    if (node.nextElementSibling.offsetTop > node.offsetTop + nodeHeight*1.5) {\n      delta.insert('\\n');\n    }\n  }\n  return delta;\n}\n\nfunction matchStyles(node, delta) {\n  let formats = {};\n  let style = node.style || {};\n  if (style.fontStyle && computeStyle(node).fontStyle === 'italic') {\n    formats.italic = true;\n  }\n  if (style.fontWeight && (computeStyle(node).fontWeight.startsWith('bold') ||\n                           parseInt(computeStyle(node).fontWeight) >= 700)) {\n    formats.bold = true;\n  }\n  if (Object.keys(formats).length > 0) {\n    delta = applyFormat(delta, formats);\n  }\n  if (parseFloat(style.textIndent || 0) > 0) {  // Could be 0.5in\n    delta = new Delta().insert('\\t').concat(delta);\n  }\n  return delta;\n}\n\nfunction matchText(node, delta) {\n  let text = node.data;\n  // Word represents empty line with <o:p>&nbsp;</o:p>\n  if (node.parentNode.tagName === 'O:P') {\n    return delta.insert(text.trim());\n  }\n  if (text.trim().length === 0 && node.parentNode.classList.contains('ql-clipboard')) {\n    return delta;\n  }\n  if (!computeStyle(node.parentNode).whiteSpace.startsWith('pre')) {\n    // eslint-disable-next-line func-style\n    let replacer = function(collapse, match) {\n      match = match.replace(/[^\\u00a0]/g, '');    // \\u00a0 is nbsp;\n      return match.length < 1 && collapse ? ' ' : match;\n    };\n    text = text.replace(/\\r\\n/g, ' ').replace(/\\n/g, ' ');\n    text = text.replace(/\\s\\s+/g, replacer.bind(replacer, true));  // collapse whitespace\n    if ((node.previousSibling == null && isLine(node.parentNode)) ||\n        (node.previousSibling != null && isLine(node.previousSibling))) {\n      text = text.replace(/^\\s+/, replacer.bind(replacer, false));\n    }\n    if ((node.nextSibling == null && isLine(node.parentNode)) ||\n        (node.nextSibling != null && isLine(node.nextSibling))) {\n      text = text.replace(/\\s+$/, replacer.bind(replacer, false));\n    }\n  }\n  return delta.insert(text);\n}\n\n\nexport { Clipboard as default, matchAttributor, matchBlot, matchNewline, matchSpacing, matchText };\n\n\n\n// WEBPACK FOOTER //\n// ./modules/clipboard.js","import Parchment from 'parchment';\nimport Quill from '../core/quill';\nimport Module from '../core/module';\n\n\nclass History extends Module {\n  constructor(quill, options) {\n    super(quill, options);\n    this.lastRecorded = 0;\n    this.ignoreChange = false;\n    this.clear();\n    this.quill.on(Quill.events.EDITOR_CHANGE, (eventName, delta, oldDelta, source) => {\n      if (eventName !== Quill.events.TEXT_CHANGE || this.ignoreChange) return;\n      if (!this.options.userOnly || source === Quill.sources.USER) {\n        this.record(delta, oldDelta);\n      } else {\n        this.transform(delta);\n      }\n    });\n    this.quill.keyboard.addBinding({ key: 'Z', shortKey: true }, this.undo.bind(this));\n    this.quill.keyboard.addBinding({ key: 'Z', shortKey: true, shiftKey: true }, this.redo.bind(this));\n    if (/Win/i.test(navigator.platform)) {\n      this.quill.keyboard.addBinding({ key: 'Y', shortKey: true }, this.redo.bind(this));\n    }\n  }\n\n  change(source, dest) {\n    if (this.stack[source].length === 0) return;\n    let delta = this.stack[source].pop();\n    this.stack[dest].push(delta);\n    this.lastRecorded = 0;\n    this.ignoreChange = true;\n    this.quill.updateContents(delta[source], Quill.sources.USER);\n    this.ignoreChange = false;\n    let index = getLastChangeIndex(delta[source]);\n    this.quill.setSelection(index);\n  }\n\n  clear() {\n    this.stack = { undo: [], redo: [] };\n  }\n\n  cutoff() {\n    this.lastRecorded = 0;\n  }\n\n  record(changeDelta, oldDelta) {\n    if (changeDelta.ops.length === 0) return;\n    this.stack.redo = [];\n    let undoDelta = this.quill.getContents().diff(oldDelta);\n    let timestamp = Date.now();\n    if (this.lastRecorded + this.options.delay > timestamp && this.stack.undo.length > 0) {\n      let delta = this.stack.undo.pop();\n      undoDelta = undoDelta.compose(delta.undo);\n      changeDelta = delta.redo.compose(changeDelta);\n    } else {\n      this.lastRecorded = timestamp;\n    }\n    this.stack.undo.push({\n      redo: changeDelta,\n      undo: undoDelta\n    });\n    if (this.stack.undo.length > this.options.maxStack) {\n      this.stack.undo.shift();\n    }\n  }\n\n  redo() {\n    this.change('redo', 'undo');\n  }\n\n  transform(delta) {\n    this.stack.undo.forEach(function(change) {\n      change.undo = delta.transform(change.undo, true);\n      change.redo = delta.transform(change.redo, true);\n    });\n    this.stack.redo.forEach(function(change) {\n      change.undo = delta.transform(change.undo, true);\n      change.redo = delta.transform(change.redo, true);\n    });\n  }\n\n  undo() {\n    this.change('undo', 'redo');\n  }\n}\nHistory.DEFAULTS = {\n  delay: 1000,\n  maxStack: 100,\n  userOnly: false\n};\n\nfunction endsWithNewlineChange(delta) {\n  let lastOp = delta.ops[delta.ops.length - 1];\n  if (lastOp == null) return false;\n  if (lastOp.insert != null) {\n    return typeof lastOp.insert === 'string' && lastOp.insert.endsWith('\\n');\n  }\n  if (lastOp.attributes != null) {\n    return Object.keys(lastOp.attributes).some(function(attr) {\n      return Parchment.query(attr, Parchment.Scope.BLOCK) != null;\n    });\n  }\n  return false;\n}\n\nfunction getLastChangeIndex(delta) {\n  let deleteLength = delta.reduce(function(length, op) {\n    length += (op.delete || 0);\n    return length;\n  }, 0);\n  let changeIndex = delta.length() - deleteLength;\n  if (endsWithNewlineChange(delta)) {\n    changeIndex -= 1;\n  }\n  return changeIndex;\n}\n\n\nexport { History as default, getLastChangeIndex };\n\n\n\n// WEBPACK FOOTER //\n// ./modules/history.js","import Parchment from 'parchment';\n\nclass IdentAttributor extends Parchment.Attributor.Class {\n  add(node, value) {\n    if (value === '+1' || value === '-1') {\n      let indent = this.value(node) || 0;\n      value = (value === '+1' ? (indent + 1) : (indent - 1));\n    }\n    if (value === 0) {\n      this.remove(node);\n      return true;\n    } else {\n      return super.add(node, value);\n    }\n  }\n\n  canAdd(node, value) {\n    return super.canAdd(node, value) || super.canAdd(node, parseInt(value));\n  }\n\n  value(node) {\n    return parseInt(super.value(node)) || undefined;  // Don't return NaN\n  }\n}\n\nlet IndentClass = new IdentAttributor('indent', 'ql-indent', {\n  scope: Parchment.Scope.BLOCK,\n  whitelist: [1, 2, 3, 4, 5, 6, 7, 8]\n});\n\nexport { IndentClass };\n\n\n\n// WEBPACK FOOTER //\n// ./formats/indent.js","import Block from '../blots/block';\n\n\nclass Blockquote extends Block {}\nBlockquote.blotName = 'blockquote';\nBlockquote.tagName = 'blockquote';\n\n\nexport default Blockquote;\n\n\n\n// WEBPACK FOOTER //\n// ./formats/blockquote.js","import Block from '../blots/block';\n\n\nclass Header extends Block {\n  static formats(domNode) {\n    return this.tagName.indexOf(domNode.tagName) + 1;\n  }\n}\nHeader.blotName = 'header';\nHeader.tagName = ['H1', 'H2', 'H3', 'H4', 'H5', 'H6'];\n\n\nexport default Header;\n\n\n\n// WEBPACK FOOTER //\n// ./formats/header.js","import Parchment from 'parchment';\nimport Block from '../blots/block';\nimport Container from '../blots/container';\n\n\nclass ListItem extends Block {\n  static formats(domNode) {\n    return domNode.tagName === this.tagName ? undefined : super.formats(domNode);\n  }\n\n  format(name, value) {\n    if (name === List.blotName && !value) {\n      this.replaceWith(Parchment.create(this.statics.scope));\n    } else {\n      super.format(name, value);\n    }\n  }\n\n  remove() {\n    if (this.prev == null && this.next == null) {\n      this.parent.remove();\n    } else {\n      super.remove();\n    }\n  }\n\n  replaceWith(name, value) {\n    this.parent.isolate(this.offset(this.parent), this.length());\n    if (name === this.parent.statics.blotName) {\n      this.parent.replaceWith(name, value);\n      return this;\n    } else {\n      this.parent.unwrap();\n      return super.replaceWith(name, value);\n    }\n  }\n}\nListItem.blotName = 'list-item';\nListItem.tagName = 'LI';\n\n\nclass List extends Container {\n  static create(value) {\n    let tagName = value === 'ordered' ? 'OL' : 'UL';\n    let node = super.create(tagName);\n    if (value === 'checked' || value === 'unchecked') {\n      node.setAttribute('data-checked', value === 'checked');\n    }\n    return node;\n  }\n\n  static formats(domNode) {\n    if (domNode.tagName === 'OL') return 'ordered';\n    if (domNode.tagName === 'UL') {\n      if (domNode.hasAttribute('data-checked')) {\n        return domNode.getAttribute('data-checked') === 'true' ? 'checked' : 'unchecked';\n      } else {\n        return 'bullet';\n      }\n    }\n    return undefined;\n  }\n\n  constructor(domNode) {\n    super(domNode);\n    const listEventHandler = (e) => {\n      if (e.target.parentNode !== domNode) return;\n      let format = this.statics.formats(domNode);\n      let blot = Parchment.find(e.target);\n      if (format === 'checked') {\n        blot.format('list', 'unchecked');\n      } else if(format === 'unchecked') {\n        blot.format('list', 'checked');\n      }\n    }\n\n    domNode.addEventListener('touchstart', listEventHandler);\n    domNode.addEventListener('mousedown', listEventHandler);\n  }\n\n  format(name, value) {\n    if (this.children.length > 0) {\n      this.children.tail.format(name, value);\n    }\n  }\n\n  formats() {\n    // We don't inherit from FormatBlot\n    return { [this.statics.blotName]: this.statics.formats(this.domNode) };\n  }\n\n  insertBefore(blot, ref) {\n    if (blot instanceof ListItem) {\n      super.insertBefore(blot, ref);\n    } else {\n      let index = ref == null ? this.length() : ref.offset(this);\n      let after = this.split(index);\n      after.parent.insertBefore(blot, after);\n    }\n  }\n\n  optimize(context) {\n    super.optimize(context);\n    let next = this.next;\n    if (next != null && next.prev === this &&\n        next.statics.blotName === this.statics.blotName &&\n        next.domNode.tagName === this.domNode.tagName &&\n        next.domNode.getAttribute('data-checked') === this.domNode.getAttribute('data-checked')) {\n      next.moveChildren(this);\n      next.remove();\n    }\n  }\n\n  replace(target) {\n    if (target.statics.blotName !== this.statics.blotName) {\n      let item = Parchment.create(this.statics.defaultChild);\n      target.moveChildren(item);\n      this.appendChild(item);\n    }\n    super.replace(target);\n  }\n}\nList.blotName = 'list';\nList.scope = Parchment.Scope.BLOCK_BLOT;\nList.tagName = ['OL', 'UL'];\nList.defaultChild = 'list-item';\nList.allowedChildren = [ListItem];\n\n\nexport { ListItem, List as default };\n\n\n\n// WEBPACK FOOTER //\n// ./formats/list.js","import Bold from './bold';\n\nclass Italic extends Bold { }\nItalic.blotName = 'italic';\nItalic.tagName = ['EM', 'I'];\n\nexport default Italic;\n\n\n\n// WEBPACK FOOTER //\n// ./formats/italic.js","import Inline from '../blots/inline';\n\nclass Script extends Inline {\n  static create(value) {\n    if (value === 'super') {\n      return document.createElement('sup');\n    } else if (value === 'sub') {\n      return document.createElement('sub');\n    } else {\n      return super.create(value);\n    }\n  }\n\n  static formats(domNode) {\n    if (domNode.tagName === 'SUB') return 'sub';\n    if (domNode.tagName === 'SUP') return 'super';\n    return undefined;\n  }\n}\nScript.blotName = 'script';\nScript.tagName = ['SUB', 'SUP'];\n\nexport default Script;\n\n\n\n// WEBPACK FOOTER //\n// ./formats/script.js","import Inline from '../blots/inline';\n\nclass Strike extends Inline { }\nStrike.blotName = 'strike';\nStrike.tagName = 'S';\n\nexport default Strike;\n\n\n\n// WEBPACK FOOTER //\n// ./formats/strike.js","import Inline from '../blots/inline';\n\nclass Underline extends Inline { }\nUnderline.blotName = 'underline';\nUnderline.tagName = 'U';\n\nexport default Underline;\n\n\n\n// WEBPACK FOOTER //\n// ./formats/underline.js","import Parchment from 'parchment';\nimport { sanitize } from '../formats/link';\n\nconst ATTRIBUTES = [\n  'alt',\n  'height',\n  'width'\n];\n\n\nclass Image extends Parchment.Embed {\n  static create(value) {\n    let node = super.create(value);\n    if (typeof value === 'string') {\n      node.setAttribute('src', this.sanitize(value));\n    }\n    return node;\n  }\n\n  static formats(domNode) {\n    return ATTRIBUTES.reduce(function(formats, attribute) {\n      if (domNode.hasAttribute(attribute)) {\n        formats[attribute] = domNode.getAttribute(attribute);\n      }\n      return formats;\n    }, {});\n  }\n\n  static match(url) {\n    return /\\.(jpe?g|gif|png)$/.test(url) || /^data:image\\/.+;base64/.test(url);\n  }\n\n  static sanitize(url) {\n    return sanitize(url, ['http', 'https', 'data']) ? url : '//:0';\n  }\n\n  static value(domNode) {\n    return domNode.getAttribute('src');\n  }\n\n  format(name, value) {\n    if (ATTRIBUTES.indexOf(name) > -1) {\n      if (value) {\n        this.domNode.setAttribute(name, value);\n      } else {\n        this.domNode.removeAttribute(name);\n      }\n    } else {\n      super.format(name, value);\n    }\n  }\n}\nImage.blotName = 'image';\nImage.tagName = 'IMG';\n\n\nexport default Image;\n\n\n\n// WEBPACK FOOTER //\n// ./formats/image.js","import { BlockEmbed } from '../blots/block';\nimport Link from '../formats/link';\n\nconst ATTRIBUTES = [\n  'height',\n  'width'\n];\n\n\nclass Video extends BlockEmbed {\n  static create(value) {\n    let node = super.create(value);\n    node.setAttribute('frameborder', '0');\n    node.setAttribute('allowfullscreen', true);\n    node.setAttribute('src', this.sanitize(value));\n    return node;\n  }\n\n  static formats(domNode) {\n    return ATTRIBUTES.reduce(function(formats, attribute) {\n      if (domNode.hasAttribute(attribute)) {\n        formats[attribute] = domNode.getAttribute(attribute);\n      }\n      return formats;\n    }, {});\n  }\n\n  static sanitize(url) {\n    return Link.sanitize(url);\n  }\n\n  static value(domNode) {\n    return domNode.getAttribute('src');\n  }\n\n  format(name, value) {\n    if (ATTRIBUTES.indexOf(name) > -1) {\n      if (value) {\n        this.domNode.setAttribute(name, value);\n      } else {\n        this.domNode.removeAttribute(name);\n      }\n    } else {\n      super.format(name, value);\n    }\n  }\n}\nVideo.blotName = 'video';\nVideo.className = 'ql-video';\nVideo.tagName = 'IFRAME';\n\n\nexport default Video;\n\n\n\n// WEBPACK FOOTER //\n// ./formats/video.js","import Embed from '../blots/embed';\nimport Quill from '../core/quill';\nimport Module from '../core/module';\n\n\nclass FormulaBlot extends Embed {\n  static create(value) {\n    let node = super.create(value);\n    if (typeof value === 'string') {\n      window.katex.render(value, node, {\n        throwOnError: false,\n        errorColor: '#f00'\n      });\n      node.setAttribute('data-value', value);\n    }\n    return node;\n  }\n\n  static value(domNode) {\n    return domNode.getAttribute('data-value');\n  }\n}\nFormulaBlot.blotName = 'formula';\nFormulaBlot.className = 'ql-formula';\nFormulaBlot.tagName = 'SPAN';\n\n\nclass Formula extends Module {\n  static register() {\n    Quill.register(FormulaBlot, true);\n  }\n\n  constructor() {\n    super();\n    if (window.katex == null) {\n      throw new Error('Formula module requires KaTeX.');\n    }\n  }\n}\n\n\nexport { FormulaBlot, Formula as default };\n\n\n\n// WEBPACK FOOTER //\n// ./modules/formula.js","import Parchment from 'parchment';\nimport Quill from '../core/quill';\nimport Module from '../core/module';\nimport CodeBlock from '../formats/code';\n\n\nclass SyntaxCodeBlock extends CodeBlock {\n  replaceWith(block) {\n    this.domNode.textContent = this.domNode.textContent;\n    this.attach();\n    super.replaceWith(block);\n  }\n\n  highlight(highlight) {\n    let text = this.domNode.textContent;\n    if (this.cachedText !== text) {\n      if (text.trim().length > 0 || this.cachedText == null) {\n        this.domNode.innerHTML = highlight(text);\n        this.domNode.normalize();\n        this.attach();\n      }\n      this.cachedText = text;\n    }\n  }\n}\nSyntaxCodeBlock.className = 'ql-syntax';\n\n\nlet CodeToken = new Parchment.Attributor.Class('token', 'hljs', {\n  scope: Parchment.Scope.INLINE\n});\n\n\nclass Syntax extends Module {\n  static register() {\n    Quill.register(CodeToken, true);\n    Quill.register(SyntaxCodeBlock, true);\n  }\n\n  constructor(quill, options) {\n    super(quill, options);\n    if (typeof this.options.highlight !== 'function') {\n      throw new Error('Syntax module requires highlight.js. Please include the library on the page before Quill.');\n    }\n    let timer = null;\n    this.quill.on(Quill.events.SCROLL_OPTIMIZE, () => {\n      clearTimeout(timer);\n      timer = setTimeout(() => {\n        this.highlight();\n        timer = null;\n      }, this.options.interval);\n    });\n    this.highlight();\n  }\n\n  highlight() {\n    if (this.quill.selection.composing) return;\n    this.quill.update(Quill.sources.USER);\n    let range = this.quill.getSelection();\n    this.quill.scroll.descendants(SyntaxCodeBlock).forEach((code) => {\n      code.highlight(this.options.highlight);\n    });\n    this.quill.update(Quill.sources.SILENT);\n    if (range != null) {\n      this.quill.setSelection(range, Quill.sources.SILENT);\n    }\n  }\n}\nSyntax.DEFAULTS = {\n  highlight: (function() {\n    if (window.hljs == null) return null;\n    return function(text) {\n      let result = window.hljs.highlightAuto(text);\n      return result.value;\n    };\n  })(),\n  interval: 1000\n};\n\n\nexport { SyntaxCodeBlock as CodeBlock, CodeToken, Syntax as default};\n\n\n\n// WEBPACK FOOTER //\n// ./modules/syntax.js","import Delta from 'quill-delta';\nimport Parchment from 'parchment';\nimport Quill from '../core/quill';\nimport logger from '../core/logger';\nimport Module from '../core/module';\n\nlet debug = logger('quill:toolbar');\n\n\nclass Toolbar extends Module {\n  constructor(quill, options) {\n    super(quill, options);\n    if (Array.isArray(this.options.container)) {\n      let container = document.createElement('div');\n      addControls(container, this.options.container);\n      quill.container.parentNode.insertBefore(container, quill.container);\n      this.container = container;\n    } else if (typeof this.options.container === 'string') {\n      this.container = document.querySelector(this.options.container);\n    } else {\n      this.container = this.options.container;\n    }\n    if (!(this.container instanceof HTMLElement)) {\n      return debug.error('Container required for toolbar', this.options);\n    }\n    this.container.classList.add('ql-toolbar');\n    this.controls = [];\n    this.handlers = {};\n    Object.keys(this.options.handlers).forEach((format) => {\n      this.addHandler(format, this.options.handlers[format]);\n    });\n    [].forEach.call(this.container.querySelectorAll('button, select'), (input) => {\n      this.attach(input);\n    });\n    this.quill.on(Quill.events.EDITOR_CHANGE, (type, range) => {\n      if (type === Quill.events.SELECTION_CHANGE) {\n        this.update(range);\n      }\n    });\n    this.quill.on(Quill.events.SCROLL_OPTIMIZE, () => {\n      let [range, ] = this.quill.selection.getRange();  // quill.getSelection triggers update\n      this.update(range);\n    });\n  }\n\n  addHandler(format, handler) {\n    this.handlers[format] = handler;\n  }\n\n  attach(input) {\n    let format = [].find.call(input.classList, (className) => {\n      return className.indexOf('ql-') === 0;\n    });\n    if (!format) return;\n    format = format.slice('ql-'.length);\n    if (input.tagName === 'BUTTON') {\n      input.setAttribute('type', 'button');\n    }\n    if (this.handlers[format] == null) {\n      if (this.quill.scroll.whitelist != null && this.quill.scroll.whitelist[format] == null) {\n        debug.warn('ignoring attaching to disabled format', format, input);\n        return;\n      }\n      if (Parchment.query(format) == null) {\n        debug.warn('ignoring attaching to nonexistent format', format, input);\n        return;\n      }\n    }\n    let eventName = input.tagName === 'SELECT' ? 'change' : 'click';\n    input.addEventListener(eventName, (e) => {\n      let value;\n      if (input.tagName === 'SELECT') {\n        if (input.selectedIndex < 0) return;\n        let selected = input.options[input.selectedIndex];\n        if (selected.hasAttribute('selected')) {\n          value = false;\n        } else {\n          value = selected.value || false;\n        }\n      } else {\n        if (input.classList.contains('ql-active')) {\n          value = false;\n        } else {\n          value = input.value || !input.hasAttribute('value');\n        }\n        e.preventDefault();\n      }\n      this.quill.focus();\n      let [range, ] = this.quill.selection.getRange();\n      if (this.handlers[format] != null) {\n        this.handlers[format].call(this, value);\n      } else if (Parchment.query(format).prototype instanceof Parchment.Embed) {\n        value = prompt(`Enter ${format}`);\n        if (!value) return;\n        this.quill.updateContents(new Delta()\n          .retain(range.index)\n          .delete(range.length)\n          .insert({ [format]: value })\n        , Quill.sources.USER);\n      } else {\n        this.quill.format(format, value, Quill.sources.USER);\n      }\n      this.update(range);\n    });\n    // TODO use weakmap\n    this.controls.push([format, input]);\n  }\n\n  update(range) {\n    let formats = range == null ? {} : this.quill.getFormat(range);\n    this.controls.forEach(function(pair) {\n      let [format, input] = pair;\n      if (input.tagName === 'SELECT') {\n        let option;\n        if (range == null) {\n          option = null;\n        } else if (formats[format] == null) {\n          option = input.querySelector('option[selected]');\n        } else if (!Array.isArray(formats[format])) {\n          let value = formats[format];\n          if (typeof value === 'string') {\n            value = value.replace(/\\\"/g, '\\\\\"');\n          }\n          option = input.querySelector(`option[value=\"${value}\"]`);\n        }\n        if (option == null) {\n          input.value = '';   // TODO make configurable?\n          input.selectedIndex = -1;\n        } else {\n          option.selected = true;\n        }\n      } else {\n        if (range == null) {\n          input.classList.remove('ql-active');\n        } else if (input.hasAttribute('value')) {\n          // both being null should match (default values)\n          // '1' should match with 1 (headers)\n          let isActive = formats[format] === input.getAttribute('value') ||\n                         (formats[format] != null && formats[format].toString() === input.getAttribute('value')) ||\n                         (formats[format] == null && !input.getAttribute('value'));\n          input.classList.toggle('ql-active', isActive);\n        } else {\n          input.classList.toggle('ql-active', formats[format] != null);\n        }\n      }\n    });\n  }\n}\nToolbar.DEFAULTS = {};\n\n\nfunction addButton(container, format, value) {\n  let input = document.createElement('button');\n  input.setAttribute('type', 'button');\n  input.classList.add('ql-' + format);\n  if (value != null) {\n    input.value = value;\n  }\n  container.appendChild(input);\n}\n\nfunction addControls(container, groups) {\n  if (!Array.isArray(groups[0])) {\n    groups = [groups];\n  }\n  groups.forEach(function(controls) {\n    let group = document.createElement('span');\n    group.classList.add('ql-formats');\n    controls.forEach(function(control) {\n      if (typeof control === 'string') {\n        addButton(group, control);\n      } else {\n        let format = Object.keys(control)[0];\n        let value = control[format];\n        if (Array.isArray(value)) {\n          addSelect(group, format, value);\n        } else {\n          addButton(group, format, value);\n        }\n      }\n    });\n    container.appendChild(group);\n  });\n}\n\nfunction addSelect(container, format, values) {\n  let input = document.createElement('select');\n  input.classList.add('ql-' + format);\n  values.forEach(function(value) {\n    let option = document.createElement('option');\n    if (value !== false) {\n      option.setAttribute('value', value);\n    } else {\n      option.setAttribute('selected', 'selected');\n    }\n    input.appendChild(option);\n  });\n  container.appendChild(input);\n}\n\nToolbar.DEFAULTS = {\n  container: null,\n  handlers: {\n    clean: function() {\n      let range = this.quill.getSelection();\n      if (range == null) return;\n      if (range.length == 0) {\n        let formats = this.quill.getFormat();\n        Object.keys(formats).forEach((name) => {\n          // Clean functionality in existing apps only clean inline formats\n          if (Parchment.query(name, Parchment.Scope.INLINE) != null) {\n            this.quill.format(name, false);\n          }\n        });\n      } else {\n        this.quill.removeFormat(range, Quill.sources.USER);\n      }\n    },\n    direction: function(value) {\n      let align = this.quill.getFormat()['align'];\n      if (value === 'rtl' && align == null) {\n        this.quill.format('align', 'right', Quill.sources.USER);\n      } else if (!value && align === 'right') {\n        this.quill.format('align', false, Quill.sources.USER);\n      }\n      this.quill.format('direction', value, Quill.sources.USER);\n    },\n    indent: function(value) {\n      let range = this.quill.getSelection();\n      let formats = this.quill.getFormat(range);\n      let indent = parseInt(formats.indent || 0);\n      if (value === '+1' || value === '-1') {\n        let modifier = (value === '+1') ? 1 : -1;\n        if (formats.direction === 'rtl') modifier *= -1;\n        this.quill.format('indent', indent + modifier, Quill.sources.USER);\n      }\n    },\n    link: function(value) {\n      if (value === true) {\n        value = prompt('Enter link URL:');\n      }\n      this.quill.format('link', value, Quill.sources.USER);\n    },\n    list: function(value) {\n      let range = this.quill.getSelection();\n      let formats = this.quill.getFormat(range);\n      if (value === 'check') {\n        if (formats['list'] === 'checked' || formats['list'] === 'unchecked') {\n          this.quill.format('list', false, Quill.sources.USER);\n        } else {\n          this.quill.format('list', 'unchecked', Quill.sources.USER);\n        }\n      } else {\n        this.quill.format('list', value, Quill.sources.USER);\n      }\n    }\n  }\n}\n\n\nexport { Toolbar as default, addControls };\n\n\n\n// WEBPACK FOOTER //\n// ./modules/toolbar.js","module.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <line class=ql-stroke x1=3 x2=15 y1=9 y2=9></line> <line class=ql-stroke x1=3 x2=13 y1=14 y2=14></line> <line class=ql-stroke x1=3 x2=9 y1=4 y2=4></line> </svg>\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./assets/icons/align-left.svg\n// module id = 75\n// module chunks = 0","module.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <line class=ql-stroke x1=15 x2=3 y1=9 y2=9></line> <line class=ql-stroke x1=14 x2=4 y1=14 y2=14></line> <line class=ql-stroke x1=12 x2=6 y1=4 y2=4></line> </svg>\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./assets/icons/align-center.svg\n// module id = 76\n// module chunks = 0","module.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <line class=ql-stroke x1=15 x2=3 y1=9 y2=9></line> <line class=ql-stroke x1=15 x2=5 y1=14 y2=14></line> <line class=ql-stroke x1=15 x2=9 y1=4 y2=4></line> </svg>\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./assets/icons/align-right.svg\n// module id = 77\n// module chunks = 0","module.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <line class=ql-stroke x1=15 x2=3 y1=9 y2=9></line> <line class=ql-stroke x1=15 x2=3 y1=14 y2=14></line> <line class=ql-stroke x1=15 x2=3 y1=4 y2=4></line> </svg>\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./assets/icons/align-justify.svg\n// module id = 78\n// module chunks = 0","module.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <g class=\\\"ql-fill ql-color-label\\\"> <polygon points=\\\"6 6.868 6 6 5 6 5 7 5.942 7 6 6.868\\\"></polygon> <rect height=1 width=1 x=4 y=4></rect> <polygon points=\\\"6.817 5 6 5 6 6 6.38 6 6.817 5\\\"></polygon> <rect height=1 width=1 x=2 y=6></rect> <rect height=1 width=1 x=3 y=5></rect> <rect height=1 width=1 x=4 y=7></rect> <polygon points=\\\"4 11.439 4 11 3 11 3 12 3.755 12 4 11.439\\\"></polygon> <rect height=1 width=1 x=2 y=12></rect> <rect height=1 width=1 x=2 y=9></rect> <rect height=1 width=1 x=2 y=15></rect> <polygon points=\\\"4.63 10 4 10 4 11 4.192 11 4.63 10\\\"></polygon> <rect height=1 width=1 x=3 y=8></rect> <path d=M10.832,4.2L11,4.582V4H10.708A1.948,1.948,0,0,1,10.832,4.2Z></path> <path d=M7,4.582L7.168,4.2A1.929,1.929,0,0,1,7.292,4H7V4.582Z></path> <path d=M8,13H7.683l-0.351.8a1.933,1.933,0,0,1-.124.2H8V13Z></path> <rect height=1 width=1 x=12 y=2></rect> <rect height=1 width=1 x=11 y=3></rect> <path d=M9,3H8V3.282A1.985,1.985,0,0,1,9,3Z></path> <rect height=1 width=1 x=2 y=3></rect> <rect height=1 width=1 x=6 y=2></rect> <rect height=1 width=1 x=3 y=2></rect> <rect height=1 width=1 x=5 y=3></rect> <rect height=1 width=1 x=9 y=2></rect> <rect height=1 width=1 x=15 y=14></rect> <polygon points=\\\"13.447 10.174 13.469 10.225 13.472 10.232 13.808 11 14 11 14 10 13.37 10 13.447 10.174\\\"></polygon> <rect height=1 width=1 x=13 y=7></rect> <rect height=1 width=1 x=15 y=5></rect> <rect height=1 width=1 x=14 y=6></rect> <rect height=1 width=1 x=15 y=8></rect> <rect height=1 width=1 x=14 y=9></rect> <path d=M3.775,14H3v1H4V14.314A1.97,1.97,0,0,1,3.775,14Z></path> <rect height=1 width=1 x=14 y=3></rect> <polygon points=\\\"12 6.868 12 6 11.62 6 12 6.868\\\"></polygon> <rect height=1 width=1 x=15 y=2></rect> <rect height=1 width=1 x=12 y=5></rect> <rect height=1 width=1 x=13 y=4></rect> <polygon points=\\\"12.933 9 13 9 13 8 12.495 8 12.933 9\\\"></polygon> <rect height=1 width=1 x=9 y=14></rect> <rect height=1 width=1 x=8 y=15></rect> <path d=M6,14.926V15H7V14.316A1.993,1.993,0,0,1,6,14.926Z></path> <rect height=1 width=1 x=5 y=15></rect> <path d=M10.668,13.8L10.317,13H10v1h0.792A1.947,1.947,0,0,1,10.668,13.8Z></path> <rect height=1 width=1 x=11 y=15></rect> <path d=M14.332,12.2a1.99,1.99,0,0,1,.166.8H15V12H14.245Z></path> <rect height=1 width=1 x=14 y=15></rect> <rect height=1 width=1 x=15 y=11></rect> </g> <polyline class=ql-stroke points=\\\"5.5 13 9 5 12.5 13\\\"></polyline> <line class=ql-stroke x1=11.63 x2=6.38 y1=11 y2=11></line> </svg>\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./assets/icons/background.svg\n// module id = 79\n// module chunks = 0","module.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <rect class=\\\"ql-fill ql-stroke\\\" height=3 width=3 x=4 y=5></rect> <rect class=\\\"ql-fill ql-stroke\\\" height=3 width=3 x=11 y=5></rect> <path class=\\\"ql-even ql-fill ql-stroke\\\" d=M7,8c0,4.031-3,5-3,5></path> <path class=\\\"ql-even ql-fill ql-stroke\\\" d=M14,8c0,4.031-3,5-3,5></path> </svg>\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./assets/icons/blockquote.svg\n// module id = 80\n// module chunks = 0","module.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <path class=ql-stroke d=M5,4H9.5A2.5,2.5,0,0,1,12,6.5v0A2.5,2.5,0,0,1,9.5,9H5A0,0,0,0,1,5,9V4A0,0,0,0,1,5,4Z></path> <path class=ql-stroke d=M5,9h5.5A2.5,2.5,0,0,1,13,11.5v0A2.5,2.5,0,0,1,10.5,14H5a0,0,0,0,1,0,0V9A0,0,0,0,1,5,9Z></path> </svg>\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./assets/icons/bold.svg\n// module id = 81\n// module chunks = 0","module.exports = \"<svg class=\\\"\\\" viewbox=\\\"0 0 18 18\\\"> <line class=ql-stroke x1=5 x2=13 y1=3 y2=3></line> <line class=ql-stroke x1=6 x2=9.35 y1=12 y2=3></line> <line class=ql-stroke x1=11 x2=15 y1=11 y2=15></line> <line class=ql-stroke x1=15 x2=11 y1=11 y2=15></line> <rect class=ql-fill height=1 rx=0.5 ry=0.5 width=7 x=2 y=14></rect> </svg>\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./assets/icons/clean.svg\n// module id = 82\n// module chunks = 0","module.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <line class=\\\"ql-color-label ql-stroke ql-transparent\\\" x1=3 x2=15 y1=15 y2=15></line> <polyline class=ql-stroke points=\\\"5.5 11 9 3 12.5 11\\\"></polyline> <line class=ql-stroke x1=11.63 x2=6.38 y1=9 y2=9></line> </svg>\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./assets/icons/color.svg\n// module id = 83\n// module chunks = 0","module.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <polygon class=\\\"ql-stroke ql-fill\\\" points=\\\"3 11 5 9 3 7 3 11\\\"></polygon> <line class=\\\"ql-stroke ql-fill\\\" x1=15 x2=11 y1=4 y2=4></line> <path class=ql-fill d=M11,3a3,3,0,0,0,0,6h1V3H11Z></path> <rect class=ql-fill height=11 width=1 x=11 y=4></rect> <rect class=ql-fill height=11 width=1 x=13 y=4></rect> </svg>\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./assets/icons/direction-ltr.svg\n// module id = 84\n// module chunks = 0","module.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <polygon class=\\\"ql-stroke ql-fill\\\" points=\\\"15 12 13 10 15 8 15 12\\\"></polygon> <line class=\\\"ql-stroke ql-fill\\\" x1=9 x2=5 y1=4 y2=4></line> <path class=ql-fill d=M5,3A3,3,0,0,0,5,9H6V3H5Z></path> <rect class=ql-fill height=11 width=1 x=5 y=4></rect> <rect class=ql-fill height=11 width=1 x=7 y=4></rect> </svg>\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./assets/icons/direction-rtl.svg\n// module id = 85\n// module chunks = 0","module.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <path class=ql-fill d=M14,16H4a1,1,0,0,1,0-2H14A1,1,0,0,1,14,16Z /> <path class=ql-fill d=M14,4H4A1,1,0,0,1,4,2H14A1,1,0,0,1,14,4Z /> <rect class=ql-fill x=3 y=6 width=12 height=6 rx=1 ry=1 /> </svg>\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./assets/icons/float-center.svg\n// module id = 86\n// module chunks = 0","module.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <path class=ql-fill d=M13,16H5a1,1,0,0,1,0-2h8A1,1,0,0,1,13,16Z /> <path class=ql-fill d=M13,4H5A1,1,0,0,1,5,2h8A1,1,0,0,1,13,4Z /> <rect class=ql-fill x=2 y=6 width=14 height=6 rx=1 ry=1 /> </svg>\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./assets/icons/float-full.svg\n// module id = 87\n// module chunks = 0","module.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <path class=ql-fill d=M15,8H13a1,1,0,0,1,0-2h2A1,1,0,0,1,15,8Z /> <path class=ql-fill d=M15,12H13a1,1,0,0,1,0-2h2A1,1,0,0,1,15,12Z /> <path class=ql-fill d=M15,16H5a1,1,0,0,1,0-2H15A1,1,0,0,1,15,16Z /> <path class=ql-fill d=M15,4H5A1,1,0,0,1,5,2H15A1,1,0,0,1,15,4Z /> <rect class=ql-fill x=2 y=6 width=8 height=6 rx=1 ry=1 /> </svg>\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./assets/icons/float-left.svg\n// module id = 88\n// module chunks = 0","module.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <path class=ql-fill d=M5,8H3A1,1,0,0,1,3,6H5A1,1,0,0,1,5,8Z /> <path class=ql-fill d=M5,12H3a1,1,0,0,1,0-2H5A1,1,0,0,1,5,12Z /> <path class=ql-fill d=M13,16H3a1,1,0,0,1,0-2H13A1,1,0,0,1,13,16Z /> <path class=ql-fill d=M13,4H3A1,1,0,0,1,3,2H13A1,1,0,0,1,13,4Z /> <rect class=ql-fill x=8 y=6 width=8 height=6 rx=1 ry=1 transform=\\\"translate(24 18) rotate(-180)\\\"/> </svg>\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./assets/icons/float-right.svg\n// module id = 89\n// module chunks = 0","module.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <path class=ql-fill d=M11.759,2.482a2.561,2.561,0,0,0-3.53.607A7.656,7.656,0,0,0,6.8,6.2C6.109,9.188,5.275,14.677,4.15,14.927a1.545,1.545,0,0,0-1.3-.933A0.922,0.922,0,0,0,2,15.036S1.954,16,4.119,16s3.091-2.691,3.7-5.553c0.177-.826.36-1.726,0.554-2.6L8.775,6.2c0.381-1.421.807-2.521,1.306-2.676a1.014,1.014,0,0,0,1.02.56A0.966,0.966,0,0,0,11.759,2.482Z></path> <rect class=ql-fill height=1.6 rx=0.8 ry=0.8 width=5 x=5.15 y=6.2></rect> <path class=ql-fill d=M13.663,12.027a1.662,1.662,0,0,1,.266-0.276q0.193,0.069.456,0.138a2.1,2.1,0,0,0,.535.069,1.075,1.075,0,0,0,.767-0.3,1.044,1.044,0,0,0,.314-0.8,0.84,0.84,0,0,0-.238-0.619,0.8,0.8,0,0,0-.594-0.239,1.154,1.154,0,0,0-.781.3,4.607,4.607,0,0,0-.781,1q-0.091.15-.218,0.346l-0.246.38c-0.068-.288-0.137-0.582-0.212-0.885-0.459-1.847-2.494-.984-2.941-0.8-0.482.2-.353,0.647-0.094,0.529a0.869,0.869,0,0,1,1.281.585c0.217,0.751.377,1.436,0.527,2.038a5.688,5.688,0,0,1-.362.467,2.69,2.69,0,0,1-.264.271q-0.221-.08-0.471-0.147a2.029,2.029,0,0,0-.522-0.066,1.079,1.079,0,0,0-.768.3A1.058,1.058,0,0,0,9,15.131a0.82,0.82,0,0,0,.832.852,1.134,1.134,0,0,0,.787-0.3,5.11,5.11,0,0,0,.776-0.993q0.141-.219.215-0.34c0.046-.076.122-0.194,0.223-0.346a2.786,2.786,0,0,0,.918,1.726,2.582,2.582,0,0,0,2.376-.185c0.317-.181.212-0.565,0-0.494A0.807,0.807,0,0,1,14.176,15a5.159,5.159,0,0,1-.913-2.446l0,0Q13.487,12.24,13.663,12.027Z></path> </svg>\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./assets/icons/formula.svg\n// module id = 90\n// module chunks = 0","module.exports = \"<svg viewBox=\\\"0 0 18 18\\\"> <path class=ql-fill d=M10,4V14a1,1,0,0,1-2,0V10H3v4a1,1,0,0,1-2,0V4A1,1,0,0,1,3,4V8H8V4a1,1,0,0,1,2,0Zm6.06787,9.209H14.98975V7.59863a.54085.54085,0,0,0-.605-.60547h-.62744a1.01119,1.01119,0,0,0-.748.29688L11.645,8.56641a.5435.5435,0,0,0-.022.8584l.28613.30762a.53861.53861,0,0,0,.84717.0332l.09912-.08789a1.2137,1.2137,0,0,0,.2417-.35254h.02246s-.01123.30859-.01123.60547V13.209H12.041a.54085.54085,0,0,0-.605.60547v.43945a.54085.54085,0,0,0,.605.60547h4.02686a.54085.54085,0,0,0,.605-.60547v-.43945A.54085.54085,0,0,0,16.06787,13.209Z /> </svg>\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./assets/icons/header.svg\n// module id = 91\n// module chunks = 0","module.exports = \"<svg viewBox=\\\"0 0 18 18\\\"> <path class=ql-fill d=M16.73975,13.81445v.43945a.54085.54085,0,0,1-.605.60547H11.855a.58392.58392,0,0,1-.64893-.60547V14.0127c0-2.90527,3.39941-3.42187,3.39941-4.55469a.77675.77675,0,0,0-.84717-.78125,1.17684,1.17684,0,0,0-.83594.38477c-.2749.26367-.561.374-.85791.13184l-.4292-.34082c-.30811-.24219-.38525-.51758-.1543-.81445a2.97155,2.97155,0,0,1,2.45361-1.17676,2.45393,2.45393,0,0,1,2.68408,2.40918c0,2.45312-3.1792,2.92676-3.27832,3.93848h2.79443A.54085.54085,0,0,1,16.73975,13.81445ZM9,3A.99974.99974,0,0,0,8,4V8H3V4A1,1,0,0,0,1,4V14a1,1,0,0,0,2,0V10H8v4a1,1,0,0,0,2,0V4A.99974.99974,0,0,0,9,3Z /> </svg>\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./assets/icons/header-2.svg\n// module id = 92\n// module chunks = 0","module.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <line class=ql-stroke x1=7 x2=13 y1=4 y2=4></line> <line class=ql-stroke x1=5 x2=11 y1=14 y2=14></line> <line class=ql-stroke x1=8 x2=10 y1=14 y2=4></line> </svg>\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./assets/icons/italic.svg\n// module id = 93\n// module chunks = 0","module.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <rect class=ql-stroke height=10 width=12 x=3 y=4></rect> <circle class=ql-fill cx=6 cy=7 r=1></circle> <polyline class=\\\"ql-even ql-fill\\\" points=\\\"5 12 5 11 7 9 8 10 11 7 13 9 13 12 5 12\\\"></polyline> </svg>\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./assets/icons/image.svg\n// module id = 94\n// module chunks = 0","module.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <line class=ql-stroke x1=3 x2=15 y1=14 y2=14></line> <line class=ql-stroke x1=3 x2=15 y1=4 y2=4></line> <line class=ql-stroke x1=9 x2=15 y1=9 y2=9></line> <polyline class=\\\"ql-fill ql-stroke\\\" points=\\\"3 7 3 11 5 9 3 7\\\"></polyline> </svg>\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./assets/icons/indent.svg\n// module id = 95\n// module chunks = 0","module.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <line class=ql-stroke x1=3 x2=15 y1=14 y2=14></line> <line class=ql-stroke x1=3 x2=15 y1=4 y2=4></line> <line class=ql-stroke x1=9 x2=15 y1=9 y2=9></line> <polyline class=ql-stroke points=\\\"5 7 5 11 3 9 5 7\\\"></polyline> </svg>\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./assets/icons/outdent.svg\n// module id = 96\n// module chunks = 0","module.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <line class=ql-stroke x1=7 x2=11 y1=7 y2=11></line> <path class=\\\"ql-even ql-stroke\\\" d=M8.9,4.577a3.476,3.476,0,0,1,.36,4.679A3.476,3.476,0,0,1,4.577,8.9C3.185,7.5,2.035,6.4,4.217,4.217S7.5,3.185,8.9,4.577Z></path> <path class=\\\"ql-even ql-stroke\\\" d=M13.423,9.1a3.476,3.476,0,0,0-4.679-.36,3.476,3.476,0,0,0,.36,4.679c1.392,1.392,2.5,2.542,4.679.36S14.815,10.5,13.423,9.1Z></path> </svg>\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./assets/icons/link.svg\n// module id = 97\n// module chunks = 0","module.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <line class=ql-stroke x1=7 x2=15 y1=4 y2=4></line> <line class=ql-stroke x1=7 x2=15 y1=9 y2=9></line> <line class=ql-stroke x1=7 x2=15 y1=14 y2=14></line> <line class=\\\"ql-stroke ql-thin\\\" x1=2.5 x2=4.5 y1=5.5 y2=5.5></line> <path class=ql-fill d=M3.5,6A0.5,0.5,0,0,1,3,5.5V3.085l-0.276.138A0.5,0.5,0,0,1,2.053,3c-0.124-.247-0.023-0.324.224-0.447l1-.5A0.5,0.5,0,0,1,4,2.5v3A0.5,0.5,0,0,1,3.5,6Z></path> <path class=\\\"ql-stroke ql-thin\\\" d=M4.5,10.5h-2c0-.234,1.85-1.076,1.85-2.234A0.959,0.959,0,0,0,2.5,8.156></path> <path class=\\\"ql-stroke ql-thin\\\" d=M2.5,14.846a0.959,0.959,0,0,0,1.85-.109A0.7,0.7,0,0,0,3.75,14a0.688,0.688,0,0,0,.6-0.736,0.959,0.959,0,0,0-1.85-.109></path> </svg>\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./assets/icons/list-ordered.svg\n// module id = 98\n// module chunks = 0","module.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <line class=ql-stroke x1=6 x2=15 y1=4 y2=4></line> <line class=ql-stroke x1=6 x2=15 y1=9 y2=9></line> <line class=ql-stroke x1=6 x2=15 y1=14 y2=14></line> <line class=ql-stroke x1=3 x2=3 y1=4 y2=4></line> <line class=ql-stroke x1=3 x2=3 y1=9 y2=9></line> <line class=ql-stroke x1=3 x2=3 y1=14 y2=14></line> </svg>\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./assets/icons/list-bullet.svg\n// module id = 99\n// module chunks = 0","module.exports = \"<svg class=\\\"\\\" viewbox=\\\"0 0 18 18\\\"> <line class=ql-stroke x1=9 x2=15 y1=4 y2=4></line> <polyline class=ql-stroke points=\\\"3 4 4 5 6 3\\\"></polyline> <line class=ql-stroke x1=9 x2=15 y1=14 y2=14></line> <polyline class=ql-stroke points=\\\"3 14 4 15 6 13\\\"></polyline> <line class=ql-stroke x1=9 x2=15 y1=9 y2=9></line> <polyline class=ql-stroke points=\\\"3 9 4 10 6 8\\\"></polyline> </svg>\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./assets/icons/list-check.svg\n// module id = 100\n// module chunks = 0","module.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <path class=ql-fill d=M15.5,15H13.861a3.858,3.858,0,0,0,1.914-2.975,1.8,1.8,0,0,0-1.6-1.751A1.921,1.921,0,0,0,12.021,11.7a0.50013,0.50013,0,1,0,.957.291h0a0.914,0.914,0,0,1,1.053-.725,0.81,0.81,0,0,1,.744.762c0,1.076-1.16971,1.86982-1.93971,2.43082A1.45639,1.45639,0,0,0,12,15.5a0.5,0.5,0,0,0,.5.5h3A0.5,0.5,0,0,0,15.5,15Z /> <path class=ql-fill d=M9.65,5.241a1,1,0,0,0-1.409.108L6,7.964,3.759,5.349A1,1,0,0,0,2.192,6.59178Q2.21541,6.6213,2.241,6.649L4.684,9.5,2.241,12.35A1,1,0,0,0,3.71,13.70722q0.02557-.02768.049-0.05722L6,11.036,8.241,13.65a1,1,0,1,0,1.567-1.24277Q9.78459,12.3777,9.759,12.35L7.316,9.5,9.759,6.651A1,1,0,0,0,9.65,5.241Z /> </svg>\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./assets/icons/subscript.svg\n// module id = 101\n// module chunks = 0","module.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <path class=ql-fill d=M15.5,7H13.861a4.015,4.015,0,0,0,1.914-2.975,1.8,1.8,0,0,0-1.6-1.751A1.922,1.922,0,0,0,12.021,3.7a0.5,0.5,0,1,0,.957.291,0.917,0.917,0,0,1,1.053-.725,0.81,0.81,0,0,1,.744.762c0,1.077-1.164,1.925-1.934,2.486A1.423,1.423,0,0,0,12,7.5a0.5,0.5,0,0,0,.5.5h3A0.5,0.5,0,0,0,15.5,7Z /> <path class=ql-fill d=M9.651,5.241a1,1,0,0,0-1.41.108L6,7.964,3.759,5.349a1,1,0,1,0-1.519,1.3L4.683,9.5,2.241,12.35a1,1,0,1,0,1.519,1.3L6,11.036,8.241,13.65a1,1,0,0,0,1.519-1.3L7.317,9.5,9.759,6.651A1,1,0,0,0,9.651,5.241Z /> </svg>\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./assets/icons/superscript.svg\n// module id = 102\n// module chunks = 0","module.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <line class=\\\"ql-stroke ql-thin\\\" x1=15.5 x2=2.5 y1=8.5 y2=9.5></line> <path class=ql-fill d=M9.007,8C6.542,7.791,6,7.519,6,6.5,6,5.792,7.283,5,9,5c1.571,0,2.765.679,2.969,1.309a1,1,0,0,0,1.9-.617C13.356,4.106,11.354,3,9,3,6.2,3,4,4.538,4,6.5a3.2,3.2,0,0,0,.5,1.843Z></path> <path class=ql-fill d=M8.984,10C11.457,10.208,12,10.479,12,11.5c0,0.708-1.283,1.5-3,1.5-1.571,0-2.765-.679-2.969-1.309a1,1,0,1,0-1.9.617C4.644,13.894,6.646,15,9,15c2.8,0,5-1.538,5-3.5a3.2,3.2,0,0,0-.5-1.843Z></path> </svg>\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./assets/icons/strike.svg\n// module id = 103\n// module chunks = 0","module.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <path class=ql-stroke d=M5,3V9a4.012,4.012,0,0,0,4,4H9a4.012,4.012,0,0,0,4-4V3></path> <rect class=ql-fill height=1 rx=0.5 ry=0.5 width=12 x=3 y=15></rect> </svg>\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./assets/icons/underline.svg\n// module id = 104\n// module chunks = 0","module.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <rect class=ql-stroke height=12 width=12 x=3 y=3></rect> <rect class=ql-fill height=12 width=1 x=5 y=3></rect> <rect class=ql-fill height=12 width=1 x=12 y=3></rect> <rect class=ql-fill height=2 width=8 x=5 y=8></rect> <rect class=ql-fill height=1 width=3 x=3 y=5></rect> <rect class=ql-fill height=1 width=3 x=3 y=7></rect> <rect class=ql-fill height=1 width=3 x=3 y=10></rect> <rect class=ql-fill height=1 width=3 x=3 y=12></rect> <rect class=ql-fill height=1 width=3 x=12 y=5></rect> <rect class=ql-fill height=1 width=3 x=12 y=7></rect> <rect class=ql-fill height=1 width=3 x=12 y=10></rect> <rect class=ql-fill height=1 width=3 x=12 y=12></rect> </svg>\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./assets/icons/video.svg\n// module id = 105\n// module chunks = 0","module.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <polygon class=ql-stroke points=\\\"7 11 9 13 11 11 7 11\\\"></polygon> <polygon class=ql-stroke points=\\\"7 7 9 5 11 7 7 7\\\"></polygon> </svg>\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./assets/icons/dropdown.svg\n// module id = 106\n// module chunks = 0","import extend from 'extend';\nimport Emitter from '../core/emitter';\nimport BaseTheme, { BaseTooltip } from './base';\nimport { Range } from '../core/selection';\nimport icons from '../ui/icons';\n\n\nconst TOOLBAR_CONFIG = [\n  ['bold', 'italic', 'link'],\n  [{ header: 1 }, { header: 2 }, 'blockquote']\n];\n\nclass BubbleTheme extends BaseTheme {\n  constructor(quill, options) {\n    if (options.modules.toolbar != null && options.modules.toolbar.container == null) {\n      options.modules.toolbar.container = TOOLBAR_CONFIG;\n    }\n    super(quill, options);\n    this.quill.container.classList.add('ql-bubble');\n  }\n\n  extendToolbar(toolbar) {\n    this.tooltip = new BubbleTooltip(this.quill, this.options.bounds);\n    this.tooltip.root.appendChild(toolbar.container);\n    this.buildButtons([].slice.call(toolbar.container.querySelectorAll('button')), icons);\n    this.buildPickers([].slice.call(toolbar.container.querySelectorAll('select')), icons);\n  }\n}\nBubbleTheme.DEFAULTS = extend(true, {}, BaseTheme.DEFAULTS, {\n  modules: {\n    toolbar: {\n      handlers: {\n        link: function(value) {\n          if (!value) {\n            this.quill.format('link', false);\n          } else {\n            this.quill.theme.tooltip.edit();\n          }\n        }\n      }\n    }\n  }\n});\n\n\nclass BubbleTooltip extends BaseTooltip {\n  constructor(quill, bounds) {\n    super(quill, bounds);\n    this.quill.on(Emitter.events.EDITOR_CHANGE, (type, range, oldRange, source) => {\n      if (type !== Emitter.events.SELECTION_CHANGE) return;\n      if (range != null && range.length > 0 && source === Emitter.sources.USER) {\n        this.show();\n        // Lock our width so we will expand beyond our offsetParent boundaries\n        this.root.style.left = '0px';\n        this.root.style.width = '';\n        this.root.style.width = this.root.offsetWidth + 'px';\n        let lines = this.quill.getLines(range.index, range.length);\n        if (lines.length === 1) {\n          this.position(this.quill.getBounds(range));\n        } else {\n          let lastLine = lines[lines.length - 1];\n          let index = this.quill.getIndex(lastLine);\n          let length = Math.min(lastLine.length() - 1, range.index + range.length - index);\n          let bounds = this.quill.getBounds(new Range(index, length));\n          this.position(bounds);\n        }\n      } else if (document.activeElement !== this.textbox && this.quill.hasFocus()) {\n        this.hide();\n      }\n    });\n  }\n\n  listen() {\n    super.listen();\n    this.root.querySelector('.ql-close').addEventListener('click', () => {\n      this.root.classList.remove('ql-editing');\n    });\n    this.quill.on(Emitter.events.SCROLL_OPTIMIZE, () => {\n      // Let selection be restored by toolbar handlers before repositioning\n      setTimeout(() => {\n        if (this.root.classList.contains('ql-hidden')) return;\n        let range = this.quill.getSelection();\n        if (range != null) {\n          this.position(this.quill.getBounds(range));\n        }\n      }, 1);\n    });\n  }\n\n  cancel() {\n    this.show();\n  }\n\n  position(reference) {\n    let shift = super.position(reference);\n    let arrow = this.root.querySelector('.ql-tooltip-arrow');\n    arrow.style.marginLeft = '';\n    if (shift === 0) return shift;\n    arrow.style.marginLeft = (-1*shift - arrow.offsetWidth/2) + 'px';\n  }\n}\nBubbleTooltip.TEMPLATE = [\n  '<span class=\"ql-tooltip-arrow\"></span>',\n  '<div class=\"ql-tooltip-editor\">',\n    '<input type=\"text\" data-formula=\"e=mc^2\" data-link=\"https://quilljs.com\" data-video=\"Embed URL\">',\n    '<a class=\"ql-close\"></a>',\n  '</div>'\n].join('');\n\n\nexport { BubbleTooltip, BubbleTheme as default };\n\n\n\n// WEBPACK FOOTER //\n// ./themes/bubble.js","import extend from 'extend';\nimport Emitter from '../core/emitter';\nimport BaseTheme, { BaseTooltip } from './base';\nimport LinkBlot from '../formats/link';\nimport { Range } from '../core/selection';\nimport icons from '../ui/icons';\n\n\nconst TOOLBAR_CONFIG = [\n  [{ header: ['1', '2', '3', false] }],\n  ['bold', 'italic', 'underline', 'link'],\n  [{ list: 'ordered' }, { list: 'bullet' }],\n  ['clean']\n];\n\nclass SnowTheme extends BaseTheme {\n  constructor(quill, options) {\n    if (options.modules.toolbar != null && options.modules.toolbar.container == null) {\n      options.modules.toolbar.container = TOOLBAR_CONFIG;\n    }\n    super(quill, options);\n    this.quill.container.classList.add('ql-snow');\n  }\n\n  extendToolbar(toolbar) {\n    toolbar.container.classList.add('ql-snow');\n    this.buildButtons([].slice.call(toolbar.container.querySelectorAll('button')), icons);\n    this.buildPickers([].slice.call(toolbar.container.querySelectorAll('select')), icons);\n    this.tooltip = new SnowTooltip(this.quill, this.options.bounds);\n    if (toolbar.container.querySelector('.ql-link')) {\n      this.quill.keyboard.addBinding({ key: 'K', shortKey: true }, function(range, context) {\n        toolbar.handlers['link'].call(toolbar, !context.format.link);\n      });\n    }\n  }\n}\nSnowTheme.DEFAULTS = extend(true, {}, BaseTheme.DEFAULTS, {\n  modules: {\n    toolbar: {\n      handlers: {\n        link: function(value) {\n          if (value) {\n            let range = this.quill.getSelection();\n            if (range == null || range.length == 0) return;\n            let preview = this.quill.getText(range);\n            if (/^\\S+@\\S+\\.\\S+$/.test(preview) && preview.indexOf('mailto:') !== 0) {\n              preview = 'mailto:' + preview;\n            }\n            let tooltip = this.quill.theme.tooltip;\n            tooltip.edit('link', preview);\n          } else {\n            this.quill.format('link', false);\n          }\n        }\n      }\n    }\n  }\n});\n\n\nclass SnowTooltip extends BaseTooltip {\n  constructor(quill, bounds) {\n    super(quill, bounds);\n    this.preview = this.root.querySelector('a.ql-preview');\n  }\n\n  listen() {\n    super.listen();\n    this.root.querySelector('a.ql-action').addEventListener('click', (event) => {\n      if (this.root.classList.contains('ql-editing')) {\n        this.save();\n      } else {\n        this.edit('link', this.preview.textContent);\n      }\n      event.preventDefault();\n    });\n    this.root.querySelector('a.ql-remove').addEventListener('click', (event) => {\n      if (this.linkRange != null) {\n        let range = this.linkRange;\n        this.restoreFocus();\n        this.quill.formatText(range, 'link', false, Emitter.sources.USER);\n        delete this.linkRange;\n      }\n      event.preventDefault();\n      this.hide();\n    });\n    this.quill.on(Emitter.events.SELECTION_CHANGE, (range, oldRange, source) => {\n      if (range == null) return;\n      if (range.length === 0 && source === Emitter.sources.USER) {\n        let [link, offset] = this.quill.scroll.descendant(LinkBlot, range.index);\n        if (link != null) {\n          this.linkRange = new Range(range.index - offset, link.length());\n          let preview = LinkBlot.formats(link.domNode);\n          this.preview.textContent = preview;\n          this.preview.setAttribute('href', preview);\n          this.show();\n          this.position(this.quill.getBounds(this.linkRange));\n          return;\n        }\n      } else {\n        delete this.linkRange;\n      }\n      this.hide();\n    });\n  }\n\n  show() {\n    super.show();\n    this.root.removeAttribute('data-mode');\n  }\n}\nSnowTooltip.TEMPLATE = [\n  '<a class=\"ql-preview\" target=\"_blank\" href=\"about:blank\"></a>',\n  '<input type=\"text\" data-formula=\"e=mc^2\" data-link=\"https://quilljs.com\" data-video=\"Embed URL\">',\n  '<a class=\"ql-action\"></a>',\n  '<a class=\"ql-remove\"></a>'\n].join('');\n\n\nexport default SnowTheme;\n\n\n\n// WEBPACK FOOTER //\n// ./themes/snow.js"],"sourceRoot":""}
\ No newline at end of file
diff --git a/htdocs/cgi-bin/wsrc/quill/quill.snow.css b/htdocs/cgi-bin/wsrc/quill/quill.snow.css
new file mode 100644 (file)
index 0000000..70fc3ea
--- /dev/null
@@ -0,0 +1,945 @@
+/*!
+ * Quill Editor v1.3.6
+ * https://quilljs.com/
+ * Copyright (c) 2014, Jason Chen
+ * Copyright (c) 2013, salesforce.com
+ */
+.ql-container {
+  box-sizing: border-box;
+  font-family: Helvetica, Arial, sans-serif;
+  font-size: 13px;
+  height: 100%;
+  margin: 0px;
+  position: relative;
+}
+.ql-container.ql-disabled .ql-tooltip {
+  visibility: hidden;
+}
+.ql-container.ql-disabled .ql-editor ul[data-checked] > li::before {
+  pointer-events: none;
+}
+.ql-clipboard {
+  left: -100000px;
+  height: 1px;
+  overflow-y: hidden;
+  position: absolute;
+  top: 50%;
+}
+.ql-clipboard p {
+  margin: 0;
+  padding: 0;
+}
+.ql-editor {
+  box-sizing: border-box;
+  line-height: 1.42;
+  height: 100%;
+  outline: none;
+  overflow-y: auto;
+  padding: 12px 15px;
+  tab-size: 4;
+  -moz-tab-size: 4;
+  text-align: left;
+  white-space: pre-wrap;
+  word-wrap: break-word;
+}
+.ql-editor > * {
+  cursor: text;
+}
+.ql-editor p,
+.ql-editor ol,
+.ql-editor ul,
+.ql-editor pre,
+.ql-editor blockquote,
+.ql-editor h1,
+.ql-editor h2,
+.ql-editor h3,
+.ql-editor h4,
+.ql-editor h5,
+.ql-editor h6 {
+  margin: 0;
+  padding: 0;
+  counter-reset: list-1 list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9;
+}
+.ql-editor ol,
+.ql-editor ul {
+  padding-left: 1.5em;
+}
+.ql-editor ol > li,
+.ql-editor ul > li {
+  list-style-type: none;
+}
+.ql-editor ul > li::before {
+  content: '\2022';
+}
+.ql-editor ul[data-checked=true],
+.ql-editor ul[data-checked=false] {
+  pointer-events: none;
+}
+.ql-editor ul[data-checked=true] > li *,
+.ql-editor ul[data-checked=false] > li * {
+  pointer-events: all;
+}
+.ql-editor ul[data-checked=true] > li::before,
+.ql-editor ul[data-checked=false] > li::before {
+  color: #777;
+  cursor: pointer;
+  pointer-events: all;
+}
+.ql-editor ul[data-checked=true] > li::before {
+  content: '\2611';
+}
+.ql-editor ul[data-checked=false] > li::before {
+  content: '\2610';
+}
+.ql-editor li::before {
+  display: inline-block;
+  white-space: nowrap;
+  width: 1.2em;
+}
+.ql-editor li:not(.ql-direction-rtl)::before {
+  margin-left: -1.5em;
+  margin-right: 0.3em;
+  text-align: right;
+}
+.ql-editor li.ql-direction-rtl::before {
+  margin-left: 0.3em;
+  margin-right: -1.5em;
+}
+.ql-editor ol li:not(.ql-direction-rtl),
+.ql-editor ul li:not(.ql-direction-rtl) {
+  padding-left: 1.5em;
+}
+.ql-editor ol li.ql-direction-rtl,
+.ql-editor ul li.ql-direction-rtl {
+  padding-right: 1.5em;
+}
+.ql-editor ol li {
+  counter-reset: list-1 list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9;
+  counter-increment: list-0;
+}
+.ql-editor ol li:before {
+  content: counter(list-0, decimal) '. ';
+}
+.ql-editor ol li.ql-indent-1 {
+  counter-increment: list-1;
+}
+.ql-editor ol li.ql-indent-1:before {
+  content: counter(list-1, lower-alpha) '. ';
+}
+.ql-editor ol li.ql-indent-1 {
+  counter-reset: list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9;
+}
+.ql-editor ol li.ql-indent-2 {
+  counter-increment: list-2;
+}
+.ql-editor ol li.ql-indent-2:before {
+  content: counter(list-2, lower-roman) '. ';
+}
+.ql-editor ol li.ql-indent-2 {
+  counter-reset: list-3 list-4 list-5 list-6 list-7 list-8 list-9;
+}
+.ql-editor ol li.ql-indent-3 {
+  counter-increment: list-3;
+}
+.ql-editor ol li.ql-indent-3:before {
+  content: counter(list-3, decimal) '. ';
+}
+.ql-editor ol li.ql-indent-3 {
+  counter-reset: list-4 list-5 list-6 list-7 list-8 list-9;
+}
+.ql-editor ol li.ql-indent-4 {
+  counter-increment: list-4;
+}
+.ql-editor ol li.ql-indent-4:before {
+  content: counter(list-4, lower-alpha) '. ';
+}
+.ql-editor ol li.ql-indent-4 {
+  counter-reset: list-5 list-6 list-7 list-8 list-9;
+}
+.ql-editor ol li.ql-indent-5 {
+  counter-increment: list-5;
+}
+.ql-editor ol li.ql-indent-5:before {
+  content: counter(list-5, lower-roman) '. ';
+}
+.ql-editor ol li.ql-indent-5 {
+  counter-reset: list-6 list-7 list-8 list-9;
+}
+.ql-editor ol li.ql-indent-6 {
+  counter-increment: list-6;
+}
+.ql-editor ol li.ql-indent-6:before {
+  content: counter(list-6, decimal) '. ';
+}
+.ql-editor ol li.ql-indent-6 {
+  counter-reset: list-7 list-8 list-9;
+}
+.ql-editor ol li.ql-indent-7 {
+  counter-increment: list-7;
+}
+.ql-editor ol li.ql-indent-7:before {
+  content: counter(list-7, lower-alpha) '. ';
+}
+.ql-editor ol li.ql-indent-7 {
+  counter-reset: list-8 list-9;
+}
+.ql-editor ol li.ql-indent-8 {
+  counter-increment: list-8;
+}
+.ql-editor ol li.ql-indent-8:before {
+  content: counter(list-8, lower-roman) '. ';
+}
+.ql-editor ol li.ql-indent-8 {
+  counter-reset: list-9;
+}
+.ql-editor ol li.ql-indent-9 {
+  counter-increment: list-9;
+}
+.ql-editor ol li.ql-indent-9:before {
+  content: counter(list-9, decimal) '. ';
+}
+.ql-editor .ql-indent-1:not(.ql-direction-rtl) {
+  padding-left: 3em;
+}
+.ql-editor li.ql-indent-1:not(.ql-direction-rtl) {
+  padding-left: 4.5em;
+}
+.ql-editor .ql-indent-1.ql-direction-rtl.ql-align-right {
+  padding-right: 3em;
+}
+.ql-editor li.ql-indent-1.ql-direction-rtl.ql-align-right {
+  padding-right: 4.5em;
+}
+.ql-editor .ql-indent-2:not(.ql-direction-rtl) {
+  padding-left: 6em;
+}
+.ql-editor li.ql-indent-2:not(.ql-direction-rtl) {
+  padding-left: 7.5em;
+}
+.ql-editor .ql-indent-2.ql-direction-rtl.ql-align-right {
+  padding-right: 6em;
+}
+.ql-editor li.ql-indent-2.ql-direction-rtl.ql-align-right {
+  padding-right: 7.5em;
+}
+.ql-editor .ql-indent-3:not(.ql-direction-rtl) {
+  padding-left: 9em;
+}
+.ql-editor li.ql-indent-3:not(.ql-direction-rtl) {
+  padding-left: 10.5em;
+}
+.ql-editor .ql-indent-3.ql-direction-rtl.ql-align-right {
+  padding-right: 9em;
+}
+.ql-editor li.ql-indent-3.ql-direction-rtl.ql-align-right {
+  padding-right: 10.5em;
+}
+.ql-editor .ql-indent-4:not(.ql-direction-rtl) {
+  padding-left: 12em;
+}
+.ql-editor li.ql-indent-4:not(.ql-direction-rtl) {
+  padding-left: 13.5em;
+}
+.ql-editor .ql-indent-4.ql-direction-rtl.ql-align-right {
+  padding-right: 12em;
+}
+.ql-editor li.ql-indent-4.ql-direction-rtl.ql-align-right {
+  padding-right: 13.5em;
+}
+.ql-editor .ql-indent-5:not(.ql-direction-rtl) {
+  padding-left: 15em;
+}
+.ql-editor li.ql-indent-5:not(.ql-direction-rtl) {
+  padding-left: 16.5em;
+}
+.ql-editor .ql-indent-5.ql-direction-rtl.ql-align-right {
+  padding-right: 15em;
+}
+.ql-editor li.ql-indent-5.ql-direction-rtl.ql-align-right {
+  padding-right: 16.5em;
+}
+.ql-editor .ql-indent-6:not(.ql-direction-rtl) {
+  padding-left: 18em;
+}
+.ql-editor li.ql-indent-6:not(.ql-direction-rtl) {
+  padding-left: 19.5em;
+}
+.ql-editor .ql-indent-6.ql-direction-rtl.ql-align-right {
+  padding-right: 18em;
+}
+.ql-editor li.ql-indent-6.ql-direction-rtl.ql-align-right {
+  padding-right: 19.5em;
+}
+.ql-editor .ql-indent-7:not(.ql-direction-rtl) {
+  padding-left: 21em;
+}
+.ql-editor li.ql-indent-7:not(.ql-direction-rtl) {
+  padding-left: 22.5em;
+}
+.ql-editor .ql-indent-7.ql-direction-rtl.ql-align-right {
+  padding-right: 21em;
+}
+.ql-editor li.ql-indent-7.ql-direction-rtl.ql-align-right {
+  padding-right: 22.5em;
+}
+.ql-editor .ql-indent-8:not(.ql-direction-rtl) {
+  padding-left: 24em;
+}
+.ql-editor li.ql-indent-8:not(.ql-direction-rtl) {
+  padding-left: 25.5em;
+}
+.ql-editor .ql-indent-8.ql-direction-rtl.ql-align-right {
+  padding-right: 24em;
+}
+.ql-editor li.ql-indent-8.ql-direction-rtl.ql-align-right {
+  padding-right: 25.5em;
+}
+.ql-editor .ql-indent-9:not(.ql-direction-rtl) {
+  padding-left: 27em;
+}
+.ql-editor li.ql-indent-9:not(.ql-direction-rtl) {
+  padding-left: 28.5em;
+}
+.ql-editor .ql-indent-9.ql-direction-rtl.ql-align-right {
+  padding-right: 27em;
+}
+.ql-editor li.ql-indent-9.ql-direction-rtl.ql-align-right {
+  padding-right: 28.5em;
+}
+.ql-editor .ql-video {
+  display: block;
+  max-width: 100%;
+}
+.ql-editor .ql-video.ql-align-center {
+  margin: 0 auto;
+}
+.ql-editor .ql-video.ql-align-right {
+  margin: 0 0 0 auto;
+}
+.ql-editor .ql-bg-black {
+  background-color: #000;
+}
+.ql-editor .ql-bg-red {
+  background-color: #e60000;
+}
+.ql-editor .ql-bg-orange {
+  background-color: #f90;
+}
+.ql-editor .ql-bg-yellow {
+  background-color: #ff0;
+}
+.ql-editor .ql-bg-green {
+  background-color: #008a00;
+}
+.ql-editor .ql-bg-blue {
+  background-color: #06c;
+}
+.ql-editor .ql-bg-purple {
+  background-color: #93f;
+}
+.ql-editor .ql-color-white {
+  color: #fff;
+}
+.ql-editor .ql-color-red {
+  color: #e60000;
+}
+.ql-editor .ql-color-orange {
+  color: #f90;
+}
+.ql-editor .ql-color-yellow {
+  color: #ff0;
+}
+.ql-editor .ql-color-green {
+  color: #008a00;
+}
+.ql-editor .ql-color-blue {
+  color: #06c;
+}
+.ql-editor .ql-color-purple {
+  color: #93f;
+}
+.ql-editor .ql-font-serif {
+  font-family: Georgia, Times New Roman, serif;
+}
+.ql-editor .ql-font-monospace {
+  font-family: Monaco, Courier New, monospace;
+}
+.ql-editor .ql-size-small {
+  font-size: 0.75em;
+}
+.ql-editor .ql-size-large {
+  font-size: 1.5em;
+}
+.ql-editor .ql-size-huge {
+  font-size: 2.5em;
+}
+.ql-editor .ql-direction-rtl {
+  direction: rtl;
+  text-align: inherit;
+}
+.ql-editor .ql-align-center {
+  text-align: center;
+}
+.ql-editor .ql-align-justify {
+  text-align: justify;
+}
+.ql-editor .ql-align-right {
+  text-align: right;
+}
+.ql-editor.ql-blank::before {
+  color: rgba(0,0,0,0.6);
+  content: attr(data-placeholder);
+  font-style: italic;
+  left: 15px;
+  pointer-events: none;
+  position: absolute;
+  right: 15px;
+}
+.ql-snow.ql-toolbar:after,
+.ql-snow .ql-toolbar:after {
+  clear: both;
+  content: '';
+  display: table;
+}
+.ql-snow.ql-toolbar button,
+.ql-snow .ql-toolbar button {
+  background: none;
+  border: none;
+  cursor: pointer;
+  display: inline-block;
+  float: left;
+  height: 24px;
+  padding: 3px 5px;
+  width: 28px;
+}
+.ql-snow.ql-toolbar button svg,
+.ql-snow .ql-toolbar button svg {
+  float: left;
+  height: 100%;
+}
+.ql-snow.ql-toolbar button:active:hover,
+.ql-snow .ql-toolbar button:active:hover {
+  outline: none;
+}
+.ql-snow.ql-toolbar input.ql-image[type=file],
+.ql-snow .ql-toolbar input.ql-image[type=file] {
+  display: none;
+}
+.ql-snow.ql-toolbar button:hover,
+.ql-snow .ql-toolbar button:hover,
+.ql-snow.ql-toolbar button:focus,
+.ql-snow .ql-toolbar button:focus,
+.ql-snow.ql-toolbar button.ql-active,
+.ql-snow .ql-toolbar button.ql-active,
+.ql-snow.ql-toolbar .ql-picker-label:hover,
+.ql-snow .ql-toolbar .ql-picker-label:hover,
+.ql-snow.ql-toolbar .ql-picker-label.ql-active,
+.ql-snow .ql-toolbar .ql-picker-label.ql-active,
+.ql-snow.ql-toolbar .ql-picker-item:hover,
+.ql-snow .ql-toolbar .ql-picker-item:hover,
+.ql-snow.ql-toolbar .ql-picker-item.ql-selected,
+.ql-snow .ql-toolbar .ql-picker-item.ql-selected {
+  color: #06c;
+}
+.ql-snow.ql-toolbar button:hover .ql-fill,
+.ql-snow .ql-toolbar button:hover .ql-fill,
+.ql-snow.ql-toolbar button:focus .ql-fill,
+.ql-snow .ql-toolbar button:focus .ql-fill,
+.ql-snow.ql-toolbar button.ql-active .ql-fill,
+.ql-snow .ql-toolbar button.ql-active .ql-fill,
+.ql-snow.ql-toolbar .ql-picker-label:hover .ql-fill,
+.ql-snow .ql-toolbar .ql-picker-label:hover .ql-fill,
+.ql-snow.ql-toolbar .ql-picker-label.ql-active .ql-fill,
+.ql-snow .ql-toolbar .ql-picker-label.ql-active .ql-fill,
+.ql-snow.ql-toolbar .ql-picker-item:hover .ql-fill,
+.ql-snow .ql-toolbar .ql-picker-item:hover .ql-fill,
+.ql-snow.ql-toolbar .ql-picker-item.ql-selected .ql-fill,
+.ql-snow .ql-toolbar .ql-picker-item.ql-selected .ql-fill,
+.ql-snow.ql-toolbar button:hover .ql-stroke.ql-fill,
+.ql-snow .ql-toolbar button:hover .ql-stroke.ql-fill,
+.ql-snow.ql-toolbar button:focus .ql-stroke.ql-fill,
+.ql-snow .ql-toolbar button:focus .ql-stroke.ql-fill,
+.ql-snow.ql-toolbar button.ql-active .ql-stroke.ql-fill,
+.ql-snow .ql-toolbar button.ql-active .ql-stroke.ql-fill,
+.ql-snow.ql-toolbar .ql-picker-label:hover .ql-stroke.ql-fill,
+.ql-snow .ql-toolbar .ql-picker-label:hover .ql-stroke.ql-fill,
+.ql-snow.ql-toolbar .ql-picker-label.ql-active .ql-stroke.ql-fill,
+.ql-snow .ql-toolbar .ql-picker-label.ql-active .ql-stroke.ql-fill,
+.ql-snow.ql-toolbar .ql-picker-item:hover .ql-stroke.ql-fill,
+.ql-snow .ql-toolbar .ql-picker-item:hover .ql-stroke.ql-fill,
+.ql-snow.ql-toolbar .ql-picker-item.ql-selected .ql-stroke.ql-fill,
+.ql-snow .ql-toolbar .ql-picker-item.ql-selected .ql-stroke.ql-fill {
+  fill: #06c;
+}
+.ql-snow.ql-toolbar button:hover .ql-stroke,
+.ql-snow .ql-toolbar button:hover .ql-stroke,
+.ql-snow.ql-toolbar button:focus .ql-stroke,
+.ql-snow .ql-toolbar button:focus .ql-stroke,
+.ql-snow.ql-toolbar button.ql-active .ql-stroke,
+.ql-snow .ql-toolbar button.ql-active .ql-stroke,
+.ql-snow.ql-toolbar .ql-picker-label:hover .ql-stroke,
+.ql-snow .ql-toolbar .ql-picker-label:hover .ql-stroke,
+.ql-snow.ql-toolbar .ql-picker-label.ql-active .ql-stroke,
+.ql-snow .ql-toolbar .ql-picker-label.ql-active .ql-stroke,
+.ql-snow.ql-toolbar .ql-picker-item:hover .ql-stroke,
+.ql-snow .ql-toolbar .ql-picker-item:hover .ql-stroke,
+.ql-snow.ql-toolbar .ql-picker-item.ql-selected .ql-stroke,
+.ql-snow .ql-toolbar .ql-picker-item.ql-selected .ql-stroke,
+.ql-snow.ql-toolbar button:hover .ql-stroke-miter,
+.ql-snow .ql-toolbar button:hover .ql-stroke-miter,
+.ql-snow.ql-toolbar button:focus .ql-stroke-miter,
+.ql-snow .ql-toolbar button:focus .ql-stroke-miter,
+.ql-snow.ql-toolbar button.ql-active .ql-stroke-miter,
+.ql-snow .ql-toolbar button.ql-active .ql-stroke-miter,
+.ql-snow.ql-toolbar .ql-picker-label:hover .ql-stroke-miter,
+.ql-snow .ql-toolbar .ql-picker-label:hover .ql-stroke-miter,
+.ql-snow.ql-toolbar .ql-picker-label.ql-active .ql-stroke-miter,
+.ql-snow .ql-toolbar .ql-picker-label.ql-active .ql-stroke-miter,
+.ql-snow.ql-toolbar .ql-picker-item:hover .ql-stroke-miter,
+.ql-snow .ql-toolbar .ql-picker-item:hover .ql-stroke-miter,
+.ql-snow.ql-toolbar .ql-picker-item.ql-selected .ql-stroke-miter,
+.ql-snow .ql-toolbar .ql-picker-item.ql-selected .ql-stroke-miter {
+  stroke: #06c;
+}
+@media (pointer: coarse) {
+  .ql-snow.ql-toolbar button:hover:not(.ql-active),
+  .ql-snow .ql-toolbar button:hover:not(.ql-active) {
+    color: #444;
+  }
+  .ql-snow.ql-toolbar button:hover:not(.ql-active) .ql-fill,
+  .ql-snow .ql-toolbar button:hover:not(.ql-active) .ql-fill,
+  .ql-snow.ql-toolbar button:hover:not(.ql-active) .ql-stroke.ql-fill,
+  .ql-snow .ql-toolbar button:hover:not(.ql-active) .ql-stroke.ql-fill {
+    fill: #444;
+  }
+  .ql-snow.ql-toolbar button:hover:not(.ql-active) .ql-stroke,
+  .ql-snow .ql-toolbar button:hover:not(.ql-active) .ql-stroke,
+  .ql-snow.ql-toolbar button:hover:not(.ql-active) .ql-stroke-miter,
+  .ql-snow .ql-toolbar button:hover:not(.ql-active) .ql-stroke-miter {
+    stroke: #444;
+  }
+}
+.ql-snow {
+  box-sizing: border-box;
+}
+.ql-snow * {
+  box-sizing: border-box;
+}
+.ql-snow .ql-hidden {
+  display: none;
+}
+.ql-snow .ql-out-bottom,
+.ql-snow .ql-out-top {
+  visibility: hidden;
+}
+.ql-snow .ql-tooltip {
+  position: absolute;
+  transform: translateY(10px);
+}
+.ql-snow .ql-tooltip a {
+  cursor: pointer;
+  text-decoration: none;
+}
+.ql-snow .ql-tooltip.ql-flip {
+  transform: translateY(-10px);
+}
+.ql-snow .ql-formats {
+  display: inline-block;
+  vertical-align: middle;
+}
+.ql-snow .ql-formats:after {
+  clear: both;
+  content: '';
+  display: table;
+}
+.ql-snow .ql-stroke {
+  fill: none;
+  stroke: #444;
+  stroke-linecap: round;
+  stroke-linejoin: round;
+  stroke-width: 2;
+}
+.ql-snow .ql-stroke-miter {
+  fill: none;
+  stroke: #444;
+  stroke-miterlimit: 10;
+  stroke-width: 2;
+}
+.ql-snow .ql-fill,
+.ql-snow .ql-stroke.ql-fill {
+  fill: #444;
+}
+.ql-snow .ql-empty {
+  fill: none;
+}
+.ql-snow .ql-even {
+  fill-rule: evenodd;
+}
+.ql-snow .ql-thin,
+.ql-snow .ql-stroke.ql-thin {
+  stroke-width: 1;
+}
+.ql-snow .ql-transparent {
+  opacity: 0.4;
+}
+.ql-snow .ql-direction svg:last-child {
+  display: none;
+}
+.ql-snow .ql-direction.ql-active svg:last-child {
+  display: inline;
+}
+.ql-snow .ql-direction.ql-active svg:first-child {
+  display: none;
+}
+.ql-snow .ql-editor h1 {
+  font-size: 2em;
+}
+.ql-snow .ql-editor h2 {
+  font-size: 1.5em;
+}
+.ql-snow .ql-editor h3 {
+  font-size: 1.17em;
+}
+.ql-snow .ql-editor h4 {
+  font-size: 1em;
+}
+.ql-snow .ql-editor h5 {
+  font-size: 0.83em;
+}
+.ql-snow .ql-editor h6 {
+  font-size: 0.67em;
+}
+.ql-snow .ql-editor a {
+  text-decoration: underline;
+}
+.ql-snow .ql-editor blockquote {
+  border-left: 4px solid #ccc;
+  margin-bottom: 5px;
+  margin-top: 5px;
+  padding-left: 16px;
+}
+.ql-snow .ql-editor code,
+.ql-snow .ql-editor pre {
+  background-color: #f0f0f0;
+  border-radius: 3px;
+}
+.ql-snow .ql-editor pre {
+  white-space: pre-wrap;
+  margin-bottom: 5px;
+  margin-top: 5px;
+  padding: 5px 10px;
+}
+.ql-snow .ql-editor code {
+  font-size: 85%;
+  padding: 2px 4px;
+}
+.ql-snow .ql-editor pre.ql-syntax {
+  background-color: #23241f;
+  color: #f8f8f2;
+  overflow: visible;
+}
+.ql-snow .ql-editor img {
+  max-width: 100%;
+}
+.ql-snow .ql-picker {
+  color: #444;
+  display: inline-block;
+  float: left;
+  font-size: 14px;
+  font-weight: 500;
+  height: 24px;
+  position: relative;
+  vertical-align: middle;
+}
+.ql-snow .ql-picker-label {
+  cursor: pointer;
+  display: inline-block;
+  height: 100%;
+  padding-left: 8px;
+  padding-right: 2px;
+  position: relative;
+  width: 100%;
+}
+.ql-snow .ql-picker-label::before {
+  display: inline-block;
+  line-height: 22px;
+}
+.ql-snow .ql-picker-options {
+  background-color: #fff;
+  display: none;
+  min-width: 100%;
+  padding: 4px 8px;
+  position: absolute;
+  white-space: nowrap;
+}
+.ql-snow .ql-picker-options .ql-picker-item {
+  cursor: pointer;
+  display: block;
+  padding-bottom: 5px;
+  padding-top: 5px;
+}
+.ql-snow .ql-picker.ql-expanded .ql-picker-label {
+  color: #ccc;
+  z-index: 2;
+}
+.ql-snow .ql-picker.ql-expanded .ql-picker-label .ql-fill {
+  fill: #ccc;
+}
+.ql-snow .ql-picker.ql-expanded .ql-picker-label .ql-stroke {
+  stroke: #ccc;
+}
+.ql-snow .ql-picker.ql-expanded .ql-picker-options {
+  display: block;
+  margin-top: -1px;
+  top: 100%;
+  z-index: 1;
+}
+.ql-snow .ql-color-picker,
+.ql-snow .ql-icon-picker {
+  width: 28px;
+}
+.ql-snow .ql-color-picker .ql-picker-label,
+.ql-snow .ql-icon-picker .ql-picker-label {
+  padding: 2px 4px;
+}
+.ql-snow .ql-color-picker .ql-picker-label svg,
+.ql-snow .ql-icon-picker .ql-picker-label svg {
+  right: 4px;
+}
+.ql-snow .ql-icon-picker .ql-picker-options {
+  padding: 4px 0px;
+}
+.ql-snow .ql-icon-picker .ql-picker-item {
+  height: 24px;
+  width: 24px;
+  padding: 2px 4px;
+}
+.ql-snow .ql-color-picker .ql-picker-options {
+  padding: 3px 5px;
+  width: 152px;
+}
+.ql-snow .ql-color-picker .ql-picker-item {
+  border: 1px solid transparent;
+  float: left;
+  height: 16px;
+  margin: 2px;
+  padding: 0px;
+  width: 16px;
+}
+.ql-snow .ql-picker:not(.ql-color-picker):not(.ql-icon-picker) svg {
+  position: absolute;
+  margin-top: -9px;
+  right: 0;
+  top: 50%;
+  width: 18px;
+}
+.ql-snow .ql-picker.ql-header .ql-picker-label[data-label]:not([data-label=''])::before,
+.ql-snow .ql-picker.ql-font .ql-picker-label[data-label]:not([data-label=''])::before,
+.ql-snow .ql-picker.ql-size .ql-picker-label[data-label]:not([data-label=''])::before,
+.ql-snow .ql-picker.ql-header .ql-picker-item[data-label]:not([data-label=''])::before,
+.ql-snow .ql-picker.ql-font .ql-picker-item[data-label]:not([data-label=''])::before,
+.ql-snow .ql-picker.ql-size .ql-picker-item[data-label]:not([data-label=''])::before {
+  content: attr(data-label);
+}
+.ql-snow .ql-picker.ql-header {
+  width: 98px;
+}
+.ql-snow .ql-picker.ql-header .ql-picker-label::before,
+.ql-snow .ql-picker.ql-header .ql-picker-item::before {
+  content: 'Normal';
+}
+.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="1"]::before,
+.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="1"]::before {
+  content: 'Heading 1';
+}
+.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="2"]::before,
+.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="2"]::before {
+  content: 'Heading 2';
+}
+.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="3"]::before,
+.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="3"]::before {
+  content: 'Heading 3';
+}
+.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="4"]::before,
+.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="4"]::before {
+  content: 'Heading 4';
+}
+.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="5"]::before,
+.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="5"]::before {
+  content: 'Heading 5';
+}
+.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="6"]::before,
+.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="6"]::before {
+  content: 'Heading 6';
+}
+.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="1"]::before {
+  font-size: 2em;
+}
+.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="2"]::before {
+  font-size: 1.5em;
+}
+.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="3"]::before {
+  font-size: 1.17em;
+}
+.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="4"]::before {
+  font-size: 1em;
+}
+.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="5"]::before {
+  font-size: 0.83em;
+}
+.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="6"]::before {
+  font-size: 0.67em;
+}
+.ql-snow .ql-picker.ql-font {
+  width: 108px;
+}
+.ql-snow .ql-picker.ql-font .ql-picker-label::before,
+.ql-snow .ql-picker.ql-font .ql-picker-item::before {
+  content: 'Sans Serif';
+}
+.ql-snow .ql-picker.ql-font .ql-picker-label[data-value=serif]::before,
+.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=serif]::before {
+  content: 'Serif';
+}
+.ql-snow .ql-picker.ql-font .ql-picker-label[data-value=monospace]::before,
+.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=monospace]::before {
+  content: 'Monospace';
+}
+.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=serif]::before {
+  font-family: Georgia, Times New Roman, serif;
+}
+.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=monospace]::before {
+  font-family: Monaco, Courier New, monospace;
+}
+.ql-snow .ql-picker.ql-size {
+  width: 98px;
+}
+.ql-snow .ql-picker.ql-size .ql-picker-label::before,
+.ql-snow .ql-picker.ql-size .ql-picker-item::before {
+  content: 'Normal';
+}
+.ql-snow .ql-picker.ql-size .ql-picker-label[data-value=small]::before,
+.ql-snow .ql-picker.ql-size .ql-picker-item[data-value=small]::before {
+  content: 'Small';
+}
+.ql-snow .ql-picker.ql-size .ql-picker-label[data-value=large]::before,
+.ql-snow .ql-picker.ql-size .ql-picker-item[data-value=large]::before {
+  content: 'Large';
+}
+.ql-snow .ql-picker.ql-size .ql-picker-label[data-value=huge]::before,
+.ql-snow .ql-picker.ql-size .ql-picker-item[data-value=huge]::before {
+  content: 'Huge';
+}
+.ql-snow .ql-picker.ql-size .ql-picker-item[data-value=small]::before {
+  font-size: 10px;
+}
+.ql-snow .ql-picker.ql-size .ql-picker-item[data-value=large]::before {
+  font-size: 18px;
+}
+.ql-snow .ql-picker.ql-size .ql-picker-item[data-value=huge]::before {
+  font-size: 32px;
+}
+.ql-snow .ql-color-picker.ql-background .ql-picker-item {
+  background-color: #fff;
+}
+.ql-snow .ql-color-picker.ql-color .ql-picker-item {
+  background-color: #000;
+}
+.ql-toolbar.ql-snow {
+  border: 1px solid #ccc;
+  box-sizing: border-box;
+  font-family: 'Helvetica Neue', 'Helvetica', 'Arial', sans-serif;
+  padding: 8px;
+}
+.ql-toolbar.ql-snow .ql-formats {
+  margin-right: 15px;
+}
+.ql-toolbar.ql-snow .ql-picker-label {
+  border: 1px solid transparent;
+}
+.ql-toolbar.ql-snow .ql-picker-options {
+  border: 1px solid transparent;
+  box-shadow: rgba(0,0,0,0.2) 0 2px 8px;
+}
+.ql-toolbar.ql-snow .ql-picker.ql-expanded .ql-picker-label {
+  border-color: #ccc;
+}
+.ql-toolbar.ql-snow .ql-picker.ql-expanded .ql-picker-options {
+  border-color: #ccc;
+}
+.ql-toolbar.ql-snow .ql-color-picker .ql-picker-item.ql-selected,
+.ql-toolbar.ql-snow .ql-color-picker .ql-picker-item:hover {
+  border-color: #000;
+}
+.ql-toolbar.ql-snow + .ql-container.ql-snow {
+  border-top: 0px;
+}
+.ql-snow .ql-tooltip {
+  background-color: #fff;
+  border: 1px solid #ccc;
+  box-shadow: 0px 0px 5px #ddd;
+  color: #444;
+  padding: 5px 12px;
+  white-space: nowrap;
+}
+.ql-snow .ql-tooltip::before {
+  content: "Visit URL:";
+  line-height: 26px;
+  margin-right: 8px;
+}
+.ql-snow .ql-tooltip input[type=text] {
+  display: none;
+  border: 1px solid #ccc;
+  font-size: 13px;
+  height: 26px;
+  margin: 0px;
+  padding: 3px 5px;
+  width: 170px;
+}
+.ql-snow .ql-tooltip a.ql-preview {
+  display: inline-block;
+  max-width: 200px;
+  overflow-x: hidden;
+  text-overflow: ellipsis;
+  vertical-align: top;
+}
+.ql-snow .ql-tooltip a.ql-action::after {
+  border-right: 1px solid #ccc;
+  content: 'Edit';
+  margin-left: 16px;
+  padding-right: 8px;
+}
+.ql-snow .ql-tooltip a.ql-remove::before {
+  content: 'Remove';
+  margin-left: 8px;
+}
+.ql-snow .ql-tooltip a {
+  line-height: 26px;
+}
+.ql-snow .ql-tooltip.ql-editing a.ql-preview,
+.ql-snow .ql-tooltip.ql-editing a.ql-remove {
+  display: none;
+}
+.ql-snow .ql-tooltip.ql-editing input[type=text] {
+  display: inline-block;
+}
+.ql-snow .ql-tooltip.ql-editing a.ql-action::after {
+  border-right: 0px;
+  content: 'Save';
+  padding-right: 0px;
+}
+.ql-snow .ql-tooltip[data-mode=link]::before {
+  content: "Enter link:";
+}
+.ql-snow .ql-tooltip[data-mode=formula]::before {
+  content: "Enter formula:";
+}
+.ql-snow .ql-tooltip[data-mode=video]::before {
+  content: "Enter video:";
+}
+.ql-snow a {
+  color: #06c;
+}
+.ql-container.ql-snow {
+  border: 1px solid #ccc;
+}
diff --git a/htdocs/cgi-bin/wsrc/tip-yellowsimple/tip-yellowsimple.css b/htdocs/cgi-bin/wsrc/tip-yellowsimple/tip-yellowsimple.css
new file mode 100644 (file)
index 0000000..f800f2b
--- /dev/null
@@ -0,0 +1,65 @@
+.tip-yellowsimple {
+       z-index:1000;
+       text-align:left;
+       border:1px solid #c7bf93;
+       border-radius:4px;
+       -moz-border-radius:4px;
+       -webkit-border-radius:4px;
+       padding:6px 8px;
+       min-width:50px;
+       max-width:300px;
+       color:#000;
+       background-color:#fff9c9;
+       /**
+        * - If you set a background-image, border/padding/background-color will be ingnored.
+        *   You can set any padding to .tip-inner instead if you need.
+        * - If you want a tiled background-image and border/padding for the tip,
+        *   set the background-image to .tip-inner instead.
+        */
+}
+.tip-yellowsimple .tip-inner {
+       font:12px/16px arial,helvetica,sans-serif;
+       color:#000;
+}
+
+/* Configure an arrow image - the script will automatically position it on the correct side of the tip */
+.tip-yellowsimple .tip-arrow-top {
+       margin-top:-6px;
+       margin-left:-5px; /* approx. half the width to center it */
+       top:0;
+       left:50%;
+       width:9px;
+       height:6px;
+       color:#000;
+       background:url(tip-yellowsimple_arrows.gif) no-repeat;
+}
+.tip-yellowsimple .tip-arrow-right {
+       margin-top:-4px; /* approx. half the height to center it */
+       margin-left:0;
+       top:50%;
+       left:100%;
+       width:6px;
+       height:9px;
+       color:#000;
+       background:url(tip-yellowsimple_arrows.gif) no-repeat -9px 0;
+}
+.tip-yellowsimple .tip-arrow-bottom {
+       margin-top:0;
+       margin-left:-5px; /* approx. half the width to center it */
+       top:100%;
+       left:50%;
+       width:9px;
+       height:6px;
+       color:#000;
+       background:url(tip-yellowsimple_arrows.gif) no-repeat -18px 0;
+}
+.tip-yellowsimple .tip-arrow-left {
+       margin-top:-4px; /* approx. half the height to center it */
+       margin-left:-6px;
+       top:50%;
+       left:0;
+       width:6px;
+       height:9px;
+       color:#000;
+       background:url(tip-yellowsimple_arrows.gif) no-repeat -27px 0;
+}
\ No newline at end of file
diff --git a/htdocs/cgi-bin/wsrc/tip-yellowsimple/tip-yellowsimple_arrows.gif b/htdocs/cgi-bin/wsrc/tip-yellowsimple/tip-yellowsimple_arrows.gif
new file mode 100644 (file)
index 0000000..2649f14
Binary files /dev/null and b/htdocs/cgi-bin/wsrc/tip-yellowsimple/tip-yellowsimple_arrows.gif differ
diff --git a/htdocs/test.html b/htdocs/test.html
new file mode 100644 (file)
index 0000000..3911662
--- /dev/null
@@ -0,0 +1,5 @@
+<body>
+<h1>Hello From THTTPD</h1>
+
+<b>To run the Web Application please click on <a href="cgi-bin">CGI-BIN</a>.</b>
+</body>
diff --git a/install.sh b/install.sh
new file mode 100755 (executable)
index 0000000..5fa31b2
--- /dev/null
@@ -0,0 +1,43 @@
+
+sudo apt install libpq-dev
+sudo mkdir /usr/include/postgresql
+apt install zlib1g-dev
+
+
+
+#
+# From LifeLog v.3.5 installation is to local user directory if you have latest perl recompiled under your users home.
+# And want to develop and test it from latest relases runing user localy, which is recomended. When all works and you are happy
+# with latest changes and release, you can then move cgi and files, setup to your system or production server.
+# Run this script as user root, if want to install required modules for the whole system.
+#
+perl -MCPAN -e 'install DBI'
+perl -MCPAN -e 'install CGI'
+perl -MCPAN -e 'install CGI::Session'
+perl -MCPAN -e 'install DBD::SQLite'
+perl -MCPAN -e 'install DBD::Pg'
+perl -MCPAN -e 'install Exception::Class '
+perl -MCPAN -e 'install Syntax::Keyword::Try'
+perl -MCPAN -e 'install DateTime::Format::SQLite'
+perl -MCPAN -e 'install Capture::Tiny'
+perl -MCPAN -e 'install Text::CSV'
+perl -MCPAN -e 'install Text::Markdown'
+perl -MCPAN -e 'install Regexp::Common'
+perl -MCPAN -e 'install Gzip::Faster'
+perl -MCPAN -e 'install CGI:Session'
+perl -MCPAN -e 'install Crypt::CBC'
+perl -MCPAN -e 'install Crypt::Blowfish'
+perl -MCPAN -e 'install DateTime'
+perl -MCPAN -e 'install DateTime::Format::Human::Duration'
+perl -MCPAN -e 'install DateTime::Format::SQLite'
+perl -MCPAN -e 'install IO::Compress::Gzip'
+perl -MCPAN -e 'install IO::Interactive '
+perl -MCPAN -e 'install IO::Prompter'
+perl -MCPAN -e 'install IPC::Run'
+perl -MCPAN -e 'install JSON'
+perl -MCPAN -e 'install Regexp::Common'
+perl -MCPAN -e 'install Perl::LanguageServer'
+perl -MCPAN -e 'install Log::Log4perl'
+perl -MCPAN -e 'install Number::Bytes::Human'
+perl -MCPAN -e 'install File::ReadBackwards'
+
diff --git a/install_as_system_modules.sh b/install_as_system_modules.sh
new file mode 100755 (executable)
index 0000000..1f1116b
--- /dev/null
@@ -0,0 +1,35 @@
+#!/bin/bash
+#
+# This script tries to install install and test required modules for this project.
+#
+# You must have superuser admin password priviledges to run this script.
+#
+## git clone https://github.com/wbudic/LifeLog.git
+# Uncoment the  following git pull if also wanting to perform a latest pull
+# from the master (upgrade) repository.
+## git pull
+
+if type -p perl < /dev/null > /dev/null 2>&1  ; then
+
+pver=$(perl -e "print $]")
+[[ $pver<5.030000 ]] && echo -e "Warning your perl version is $pver might be outdated!\n Recomended perl version is 5.34+."
+else
+echo -e "Perl language not detected please install latest version, ideally (as sudo) from source.\n"
+exit
+fi
+
+LifeLogInstall=install_lifelog_req_modules_2.4.sh
+sudo cat Installation.txt | grep 'sudo apt install' | awk '{print $0, "-y"}' > $LifeLogInstall
+sudo cat Installation.txt | grep 'sudo cpan' >> $LifeLogInstall 
+sudo chmod +x $LifeLogInstall
+# The following is actual installation file generated. Don't run outside this script.
+# You can delete or keep after running this script.
+sudo ./$LifeLogInstall
+
+#Used for stats, required utility
+sudo apt install inxi -y
+
+echo -e "\nDone with Life Log modules installation!"
+
+
+
diff --git a/install_cpan_modules_required.pl b/install_cpan_modules_required.pl
new file mode 100755 (executable)
index 0000000..30c2e28
--- /dev/null
@@ -0,0 +1,225 @@
+#!/usr/bin/env perl
+##
+# Module installer for projects.
+# Run this script from any Project directory containing perl modules or scripts.
+##
+use warnings; use strict;
+###
+# Prerequisites for this script itself. Run first:
+# cpan Term::ReadKey;
+# cpan Term::ANSIColor;
+## no critic (ProhibitStringyEval)
+use Term::ReadKey;
+use Term::ANSIColor qw(:constants);
+
+use constant PERL_FILES_GLOB => "*local/*.pl local/*.pm system/modules/*.pm htdocs/cgi-bin/*.cgi htdocs/cgi-bin/system/modules/*.pm tests/*.pm tests/*.pl .pl *.pm *.cgi";
+
+my $project = `pwd`."/".$0; $project =~ s/\/.*.pl$//g;  $project =~ s/\s$//g;
+my @user_glob;
+our $PERL_VERSION = $^V->{'original'}; my $ERR = 0; my $key;
+
+print WHITE "\n *** Project Perl Module Installer coded by ",BRIGHT_RED, "https://github.com/wbudic", WHITE,"***", qq(
+         \nRunning scan on project path:$project
+         \nYou have Perl on $^O [$^X] version: $PERL_VERSION\n
+);
+print BLUE "<<@<\@INC<\n# Your default module package paths:\n", YELLOW;
+local $. = 0; foreach(@INC){
+  print $.++.".: $_\n";
+}
+print BLUE ">>\n", RESET;
+if($> > 0){
+  print "You are NOT installing system wide, which is required for webservers CGI.\nAre you sure about this?\n";
+  print "Tip -> If you are getting web page errors of some modules missing, try runing this utility as sudo.\n";
+}else{
+  print "You are INSTALLING modules SYSTEM WIDE, are you sure about this?\n"
+}
+if(@ARGV==0){
+  print qq(\nThis program will try to figure out now all the modules
+  required for this project, and install them if missing.
+  This can take some time.
+  );
+  print RED "Do you want to proceed (press either the 'Y'es or 'N'o key)?", RESET;
+
+do{
+  ReadMode('cbreak');
+  $key = ReadKey(0); print "\n";
+  ReadMode('normal');
+    exit 1 if(uc $key eq 'N');
+    $key = "[ENTER]" if $key =~ /\n/;
+    print "You have pressed the '$key' key, that is nice, but why?\nOnly the CTRL+C/Y/N keys do something normal." if uc $key ne 'Y';
+  }while(uc $key ne 'Y');
+}
+else{
+  foreach(@ARGV){
+    if(-d $_){
+      $_ =~ s/\s$//g;
+      print "\nGlobing for perl files in $project/$_";
+      my @located = glob("$_/*.pl $_/*.pm");
+      print " ... found ".@located." files.";
+      push @user_glob, @located;
+
+    }else{
+      warn "Argument: $_ is not a local directory."
+    }
+  }
+}
+
+my @locals=();
+print "\nGlobing for perl modules in project $project";
+my @perl_files = glob(PERL_FILES_GLOB);
+print " ... found ".@perl_files." files.\n";
+push @perl_files, @user_glob;
+my %modules; my %localPackages;
+foreach my $file(@perl_files){
+   next if $0 =~ /$file$/;
+   if($file =~ /(\w*)\.pm$/){
+      $localPackages{$1}=$file;
+   }
+   print "\nExamining:$file\n";
+   my $res  =  `perl -ne '/\\s*(^use\\s([a-zA-Z:]*))\\W/ and print "\$2;"' $file`;
+   my @list = split(/;+/,$res);
+   foreach(@list){
+     if($_=~ /^\w\d\.\d+.*/){
+      print "\tA specified 'use $_' found in ->$file\n";
+      if($PERL_VERSION ne $_){
+         $_ =~s/^v//g;
+         my @fv = split(/\./, $_);
+         $PERL_VERSION =~s/^v//g;
+         my @pv = split(/\./, $PERL_VERSION);
+         push @fv, 0 if @fv < 3;
+         for my$i(0..$#fv){
+           if( $pv[$i] < $fv[$i] ){
+              $ERR++; print "\n\t\033[31mERROR -> Perl required version has been found not matching.\033[0m\n";
+              last
+           }
+         }
+      }
+     }
+   }
+   foreach(@list){
+    $_ =~ s/^\s*|\s*use\s*//g;
+    $_ =~ s/[\'\"].*[\'\"]$//g;
+    next if !$_ or $_ =~ /^[a-z]|\d*\.\d*$|^\W/;
+    $_ =~ s/\(\)|\(.*\)|qw\(.*\)//g;
+    $modules{$_}=$file if $_;
+    print "$_\n";
+   }
+   if($file=~/\.pm$/){# it is presumed local package module.
+      $locals[@locals] = `perl -ne '/\\s*(^package\\s(\\w+))/ and print "\$2" and exit' $file`;
+   }
+}
+
+print WHITE "\nList of Modules required for thie project:\n";
+my @missing=();
+foreach my $mod (sort keys %modules){
+    my $missing;
+    eval "use $mod";
+    if ($@){
+      $missing[@missing] = $mod;
+      print MAGENTA "\t$mod \t in ", $modules{$mod}," is suspicious?\n";
+    }else{
+      print BLUE "\t$mod\n"
+    }
+}foreach(@missing){
+  if(exists $localPackages{$_}){
+      delete $modules{$_}
+  }else{
+      print BRIGHT_RED $_, MAGENTA, " is missing!\n"
+  }
+}
+my %skip_candidates;
+my $missing_count = @missing;
+if($missing_count>0){
+  foreach my $candidate(@missing){
+    foreach(@locals){
+      if($_ eq $candidate && not exists $skip_candidates{$_}){
+        $missing_count--;
+        $skip_candidates{$_} = 1;
+        print GREEN, "Found the missing $candidate module in locals.\n"
+      }
+    }
+  }
+}
+my $perls = `whereis perl`;
+print GREEN, "Following is all of ",$perls;
+print YELLOW, "Reminder -> Make sure you switched to the right brew release.\n" if $perls =~ /perlbrew/;
+print RESET, "Number of local modules:",scalar(@locals),"\n";
+print RESET, "Number of external modules:",scalar(keys %modules),"\n";
+print RESET, "Number of cpan modules about to be tried to install:",$missing_count,"\n";
+
+print GREEN, qq(
+Do you still want to continue to compile/test/install or check further modules?
+Only the first run is the depest and can take a long time, i.e. if you have to install over 5 modules.
+At other times this will only check further your current status.
+
+Now (press either the 'Y'es or 'N'o key) please?), RESET;
+do{
+ReadMode('cbreak');
+$key = ReadKey(0); print "\n";
+ReadMode('normal');
+  exit 1 if(uc $key eq 'N');
+  $key = "[ENTER]" if $key =~ /\n/;
+  print "You have pressed the '$key' key, that is nice, but why?\nOnly the CTRL+C/Y/N keys do something normal.\n" if uc $key ne 'Y';
+}while(uc $key ne 'Y');
+
+my ($mcnt,$mins) = (0,0);
+my @kangaroos = sort keys %skip_candidates;
+
+##
+# Some modules if found to be forcefeed. can be hardcoded here my friends, why not?
+# You got plenty of space on your disc, these days, don't you?
+##
+foreach (('lib::relative,',
+                'Syntax::Keyword::Try',
+                'DBD::SQLite',
+                'DBD::Pg',
+                'LWP::Simple',
+                'LWP::Protocol::https',
+                'XML::LibXML::SAX'
+)){
+  $modules{$_}=1; print "Forcefeed: $_\n"
+}
+
+MODULES_LOOP:
+foreach my $mod (sort keys %modules){
+
+  foreach(@kangaroos){
+      if($_ eq $mod){
+        next MODULES_LOOP
+      }
+  }
+  $mcnt++;
+  ## no critic (ProhibitStringyEval)
+  eval "use $mod";
+  if ($@) {
+      system(qq(perl -MCPAN -e 'install $mod'));
+      if ($? == -1) {
+        print "failed to install: $mod\n";
+      }else{
+        my $v = eval "\$$mod\::VERSION";
+           $v = $v ? "(v$v)" : "";
+        print "Installed module $mod $v!\n";
+        $mins++
+      }
+  }else{
+   $mod =~ s/\s*$//;
+   my $v = eval "\$$mod\::VERSION";
+      $v = $v ? "(v$v)" : "";
+      print "Skipping module $mod $v, already installed!\n";
+  }
+}
+print "\nProject $project\nRequires $mcnt modules.\nInstalled New: $mins\n";
+print "WARNING! - This project requires in ($ERR) parts code that might not be compatible yet with your installed/running version of perl (v$PERL_VERSION).\n"
+if $ERR;
+
+
+=begin copyright
+Programed by  : Will Budic
+EContactHash  : 990MWWLWM8C2MI8K (https://github.com/wbudic/EContactHash.md)
+Source        : https://github.com/wbudic/PerlCNF.git
+Documentation : Specifications_For_CNF_ReadMe.md
+    This source file is copied and usually placed in a local directory, outside of its repository project.
+    So it could not be the actual or current version, can vary or has been modiefied for what ever purpose in another project.
+    Please leave source of origin in this file for future references.
+Open Source Code License -> https://github.com/wbudic/PerlCNF/blob/master/ISC_License.md
+=cut copyright
\ No newline at end of file
diff --git a/install_lifelog_req_modules_2.4.sh b/install_lifelog_req_modules_2.4.sh
new file mode 100755 (executable)
index 0000000..1af9048
--- /dev/null
@@ -0,0 +1,35 @@
+sudo apt install cpanminus -y
+sudo apt install perlbrew -y
+sudo apt install libperl-critic-perl -y
+sudo apt install libperl-dev -y
+Avoid: sudo apt install openssl -y
+sudo cpan DBD::SQLite;
+sudo cpan Perl::LanguageServer
+# before was -> sudo cpanm Try::Tiny;
+sudo cpan Exception::Class
+sudo cpan Log::Log4per
+sudo cpan Syntax::Keyword::Try
+sudo cpan DateTime;
+sudo cpan DateTime::Format::Human::Duration
+sudo cpan DateTime::Format::SQLite;
+sudo cpan Text::CSV;
+sudo cpan Number::Bytes::Human;
+sudo cpan Gzip::Faster;
+sudo cpan Number/Bytes/Human.pm;
+sudo cpan Regexp::Common;
+sudo cpan JSON;
+sudo cpan Switch;
+sudo cpan IPC::Run;
+sudo cpan Syntax::Keyword::Try;
+sudo cpan Text::Markdown
+sudo cpan Crypt::Blowfish;
+sudo cpan Compress::Zlib;
+sudo cpan IO::Compress::Gzip;
+sudo cpan IO::Prompter;
+sudo cpan IO::Interactive;
+sudo cpan -T DBD::Pg;
+sudo cpan CGI CGI::Session;
+sudo cpan Crypt::CBC;
+sudo cpan DBI;
+sudo cpan DBD::SQLite;
+  *$ sudo cpan -r Perl::LanguageServer
diff --git a/lifelog.er b/lifelog.er
new file mode 100644 (file)
index 0000000..8c0d40c
--- /dev/null
@@ -0,0 +1,57 @@
+title {label: "Entity-Relationship Diagram For Life Log", size: "240", bgcolor:"#ececfc"}
+
+[CONFIG]
+*ID             {label: "   INT NOT NULL UNIQUE GENERATED BY DEFAULT AS IDENTITY"}
+NAME            {label: "   VARCHAR(16)  UNIQUE"}
+VALUE           {label: "   VARCHAR(28)"}
+DESCRIPTION     {label: "   VARCHAR(128)"}
+
+[AUTH]
+*ALIAS {label: "    VARCHAR (20) PRIMARY KEY"}
+PASSW  {label: "    TEXT"}
+EMAIL  {label: "    VARCHAR (44)"}
+ACTION {label: "    INT"}
+
+
+[LOG] {bgcolor: "gold"}  
+*ID    {label: "    INT UNIQUE GENERATED ALWAYS AS IDENTITY" }
+ID_CAT {label: "    INT NOT NULL"}
+ID_RTF {label: "    INT DEFAULT 0"}
+DATE   {label: "    TIMESTAMP NOT NULL"}
+LOG    {label: "    VARCHAR (128) NOT NULL"}
+AMOUNT {label: "    INT"}
+AFLAG  {label: "    INT DEFAULT 0"}
+STICKY {label: "    BOOL DEFAULT FALSE"}
+
+[CAT] {bgcolor: "maroon"}  
+*ID {label: "   INT GENERATED BY DEFAULT AS IDENTITY"}
+NAME {label: "  VARCHAR (16)"}
+DESCRIPTION {label: "   VARCHAR (225)"}
+
+[NOTES]{bgcolor: "cyan"}
+*LID {label: "  INTEGER PRIMARY KEY NOT NULL"}
+DOC  {label: "  TEXT"}
+
+
+        
+
+
+# Each relationship must be between exactly two entities, which need not
+# be distinct. Each entity in the relationship has exactly one of four
+# possible cardinalities:
+#
+# Cardinality    Syntax
+# 0 or 1         0
+# exactly 1      1
+# 0 or more      *
+# 1 or more      +
+
+LOG *--1 CAT
+LOG *--0 NOTES
+
+LIFE_LOG_APPLICATION 1--1 CONFIG
+LIFE_LOG_APPLICATION 1--1 AUTH
+LIFE_LOG_APPLICATION 1--1 LOG
+Alias 1--1 Database
+
+
diff --git a/lighttpd.conf b/lighttpd.conf
new file mode 100644 (file)
index 0000000..6fd08f9
--- /dev/null
@@ -0,0 +1,44 @@
+server.document-root = "/home/will/LifeLog/htdocs/cgi-bin" 
+dir-listing.activate = "enable"
+server.port = 80
+
+mimetype.assign = (
+  ".html" => "text/html",  
+  ".md"   => "text/plain",
+  ".txt" => "text/plain",
+  ".jpg" => "image/jpeg",
+  ".gif" => "image/gif",
+  ".png" => "image/png",
+  ".ico" => "image/ico",
+  ".svg" => "image/svg+xml",
+  ".css" => "text/css",
+  ".js" => "text/javascript"
+)
+
+server.modules = (
+"mod_access",
+"mod_accesslog",
+"mod_auth",
+"mod_expire",
+"mod_compress",
+"mod_redirect",
+"mod_setenv",
+"mod_rewrite",
+"mod_alias",
+"mod_cgi",
+"mod_openssl"
+)
+
+
+index-file.names = ( "index.html" )
+server.breakagelog = "/home/will/LifeLog/lighttpd_server.log"
+cgi.assign = ( ".pl"  => "/usr/bin/perl", ".cgi" => "/usr/bin/perl" )
+cgi.x-sendfile = "disable"
+
+$SERVER["socket"] == "104.225.141.231:443" { 
+ssl.engine = "enable"                                                                                                                           
+ssl.pemfile = "/etc/lighttpd/server.pem"
+server.name = "perl1.xip.com" 
+}
+$HTTP["url"] =~ "^/static($|/)" { server.dir-listing = "enable" }
+$HTTP["url"] =~ "^docs($|/)" { server.dir-listing = "enable" }
diff --git a/lighttpd_server.log b/lighttpd_server.log
new file mode 100644 (file)
index 0000000..e9887e1
--- /dev/null
@@ -0,0 +1,3514 @@
+tar: Removing leading `../../' from member names
+tar: Removing leading `../../' from hard link targets
+[Tue Jun 13 11:17:11 2023] login_ctr.cgi: Use of uninitialized value $res[0] in addition (+) at system/modules/Settings.pm line 490.
+[Tue Jun 13 11:17:11 2023] login_ctr.cgi: Use of uninitialized value $where in concatenation (.) or string at system/modules/Settings.pm line 381.
+[Tue Jun 13 11:17:11 2023] login_ctr.cgi: Use of uninitialized value $dnm in string eq at /home/will/LifeLog/htdocs/cgi-bin/login_ctr.cgi line 568.
+[Tue Jun 13 11:17:11 2023] login_ctr.cgi: Use of uninitialized value $dnm in concatenation (.) or string at /home/will/LifeLog/htdocs/cgi-bin/login_ctr.cgi line 569.
+tar: Removing leading `../../' from member names
+tar: Removing leading `../../' from hard link targets
+[Mon Jun 26 00:08:40 2023] index.cgi: Wide character in say at /home/will/LifeLog/htdocs/cgi-bin/index.cgi line 56.
+[Mon Jun 26 06:59:06 2023] stats.cgi: CGI::Pretty is DEPRECATED and will be removed in a future release. Please see https://github.com/leejo/CGI.pm/issues/162 for more information at /usr/local/share/perl/5.34.0/CGI/Pretty.pm line 20.
+tar: Removing leading `../../' from member names
+tar: Removing leading `../../' from hard link targets
+hex string is too short, padding with zero bytes to length
+[Fri Jun 30 01:48:39 2023] data.cgi: CGI::param called in list context from /home/will/LifeLog/htdocs/cgi-bin/data.cgi line 147, this can lead to vulnerabilities. See the warning in "Fetching the value or values of a single named parameter" at /usr/local/share/perl/5.34.0/CGI.pm line 415.
+[Fri Jun 30 01:48:43 2023] data.cgi: CGI::param called in list context from /home/will/LifeLog/htdocs/cgi-bin/data.cgi line 236, this can lead to vulnerabilities. See the warning in "Fetching the value or values of a single named parameter" at /usr/local/share/perl/5.34.0/CGI.pm line 415.
+tar: Removing leading `../../' from member names
+tar: Removing leading `../../' from hard link targets
+tar: Removing leading `../../' from member names
+tar: Removing leading `../../' from hard link targets
+[Sat Jul 29 19:58:33 2023] data.cgi: CGI::param called in list context from /home/will/LifeLog/htdocs/cgi-bin/data.cgi line 147, this can lead to vulnerabilities. See the warning in "Fetching the value or values of a single named parameter" at /usr/local/share/perl/5.34.0/CGI.pm line 415.
+[Sat Jul 29 19:58:41 2023] data.cgi: CGI::param called in list context from /home/will/LifeLog/htdocs/cgi-bin/data.cgi line 236, this can lead to vulnerabilities. See the warning in "Fetching the value or values of a single named parameter" at /usr/local/share/perl/5.34.0/CGI.pm line 415.
+[Sat Jul 29 22:04:20 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 115.
+[Sat Jul 29 22:04:38 2023] index.cgi: Use of uninitialized value in numeric ge (>=) at system/modules/MarkdownPlugin.pm line 260.
+[Sat Jul 29 22:04:38 2023] index.cgi: Use of uninitialized value in numeric ge (>=) at system/modules/MarkdownPlugin.pm line 260.
+[Sat Jul 29 22:04:38 2023] index.cgi: Use of uninitialized value in numeric ge (>=) at system/modules/MarkdownPlugin.pm line 260.
+[Sat Jul 29 22:04:38 2023] index.cgi: Use of uninitialized value in numeric ge (>=) at system/modules/MarkdownPlugin.pm line 260.
+[Sat Jul 29 22:04:38 2023] index.cgi: Use of uninitialized value in numeric ge (>=) at system/modules/MarkdownPlugin.pm line 260.
+[Sat Jul 29 22:04:38 2023] index.cgi: Use of uninitialized value in numeric ge (>=) at system/modules/MarkdownPlugin.pm line 260.
+[Sat Jul 29 22:04:38 2023] index.cgi: Use of uninitialized value in numeric ge (>=) at system/modules/MarkdownPlugin.pm line 260.
+[Sat Jul 29 22:04:38 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 115.
+[Sat Jul 29 22:04:38 2023] index.cgi: Use of uninitialized value in numeric ge (>=) at system/modules/MarkdownPlugin.pm line 260.
+[Sat Jul 29 22:04:38 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 115.
+[Sat Jul 29 22:04:38 2023] index.cgi: Use of uninitialized value in numeric ge (>=) at system/modules/MarkdownPlugin.pm line 260.
+[Sat Jul 29 22:04:38 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 115.
+[Sat Jul 29 22:04:38 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 115.
+[Sat Jul 29 22:04:38 2023] index.cgi: Use of uninitialized value in numeric ge (>=) at system/modules/MarkdownPlugin.pm line 260.
+[Sat Jul 29 22:04:38 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 115.
+[Sat Jul 29 22:04:38 2023] index.cgi: Use of uninitialized value in numeric ge (>=) at system/modules/MarkdownPlugin.pm line 260.
+[Sat Jul 29 22:04:38 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 115.
+[Sat Jul 29 22:04:38 2023] index.cgi: Use of uninitialized value in numeric ge (>=) at system/modules/MarkdownPlugin.pm line 260.
+[Sat Jul 29 22:04:38 2023] index.cgi: Use of uninitialized value in numeric ge (>=) at system/modules/MarkdownPlugin.pm line 260.
+[Sat Jul 29 22:04:38 2023] index.cgi: Use of uninitialized value in numeric ge (>=) at system/modules/MarkdownPlugin.pm line 260.
+[Sat Jul 29 22:04:38 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 115.
+[Sat Jul 29 22:04:38 2023] index.cgi: Use of uninitialized value $cc in concatenation (.) or string at system/modules/MarkdownPlugin.pm line 657.
+[Sat Jul 29 22:04:38 2023] index.cgi: Use of uninitialized value $cc in concatenation (.) or string at system/modules/MarkdownPlugin.pm line 634.
+[Sat Jul 29 22:04:38 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 115.
+[Sat Jul 29 22:04:38 2023] index.cgi: Use of uninitialized value $cc in concatenation (.) or string at system/modules/MarkdownPlugin.pm line 634.
+[Sat Jul 29 22:04:38 2023] index.cgi: Use of uninitialized value $cc in concatenation (.) or string at system/modules/MarkdownPlugin.pm line 657.
+[Sat Jul 29 22:04:38 2023] index.cgi: Use of uninitialized value $cc in concatenation (.) or string at system/modules/MarkdownPlugin.pm line 634.
+[Sat Jul 29 22:04:38 2023] index.cgi: Use of uninitialized value $cc in concatenation (.) or string at system/modules/MarkdownPlugin.pm line 634.
+[Sat Jul 29 22:04:38 2023] index.cgi: Wide character in say at /home/will/LifeLog/htdocs/cgi-bin/index.cgi line 53.
+[Sat Jul 29 22:07:06 2023] data.cgi: CGI::param called in list context from /home/will/LifeLog/htdocs/cgi-bin/data.cgi line 147, this can lead to vulnerabilities. See the warning in "Fetching the value or values of a single named parameter" at /usr/local/share/perl/5.34.0/CGI.pm line 415.
+[Sat Jul 29 22:07:10 2023] data.cgi: CGI::param called in list context from /home/will/LifeLog/htdocs/cgi-bin/data.cgi line 236, this can lead to vulnerabilities. See the warning in "Fetching the value or values of a single named parameter" at /usr/local/share/perl/5.34.0/CGI.pm line 415.
+[Sat Jul 29 22:14:35 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 115.
+[Sat Jul 29 22:15:18 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 115.
+[Sat Jul 29 22:15:18 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 115.
+[Sat Jul 29 22:15:21 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 115.
+[Sat Jul 29 22:15:25 2023] index.cgi: Use of uninitialized value in numeric ge (>=) at system/modules/MarkdownPlugin.pm line 260.
+[Sat Jul 29 22:15:25 2023] index.cgi: Use of uninitialized value in numeric ge (>=) at system/modules/MarkdownPlugin.pm line 260.
+[Sat Jul 29 22:15:25 2023] index.cgi: Use of uninitialized value in numeric ge (>=) at system/modules/MarkdownPlugin.pm line 260.
+[Sat Jul 29 22:15:25 2023] index.cgi: Use of uninitialized value in numeric ge (>=) at system/modules/MarkdownPlugin.pm line 260.
+[Sat Jul 29 22:15:25 2023] index.cgi: Use of uninitialized value in numeric ge (>=) at system/modules/MarkdownPlugin.pm line 260.
+[Sat Jul 29 22:15:25 2023] index.cgi: Use of uninitialized value in numeric ge (>=) at system/modules/MarkdownPlugin.pm line 260.
+[Sat Jul 29 22:15:25 2023] index.cgi: Use of uninitialized value in numeric ge (>=) at system/modules/MarkdownPlugin.pm line 260.
+[Sat Jul 29 22:15:25 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 115.
+[Sat Jul 29 22:15:25 2023] index.cgi: Use of uninitialized value in numeric ge (>=) at system/modules/MarkdownPlugin.pm line 260.
+[Sat Jul 29 22:15:25 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 115.
+[Sat Jul 29 22:15:25 2023] index.cgi: Use of uninitialized value in numeric ge (>=) at system/modules/MarkdownPlugin.pm line 260.
+[Sat Jul 29 22:15:25 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 115.
+[Sat Jul 29 22:15:25 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 115.
+[Sat Jul 29 22:15:25 2023] index.cgi: Use of uninitialized value in numeric ge (>=) at system/modules/MarkdownPlugin.pm line 260.
+[Sat Jul 29 22:15:25 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 115.
+[Sat Jul 29 22:15:25 2023] index.cgi: Use of uninitialized value in numeric ge (>=) at system/modules/MarkdownPlugin.pm line 260.
+[Sat Jul 29 22:15:25 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 115.
+[Sat Jul 29 22:15:25 2023] index.cgi: Use of uninitialized value in numeric ge (>=) at system/modules/MarkdownPlugin.pm line 260.
+[Sat Jul 29 22:15:25 2023] index.cgi: Use of uninitialized value in numeric ge (>=) at system/modules/MarkdownPlugin.pm line 260.
+[Sat Jul 29 22:15:25 2023] index.cgi: Use of uninitialized value in numeric ge (>=) at system/modules/MarkdownPlugin.pm line 260.
+[Sat Jul 29 22:15:25 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 115.
+[Sat Jul 29 22:15:25 2023] index.cgi: Use of uninitialized value $cc in concatenation (.) or string at system/modules/MarkdownPlugin.pm line 657.
+[Sat Jul 29 22:15:25 2023] index.cgi: Use of uninitialized value $cc in concatenation (.) or string at system/modules/MarkdownPlugin.pm line 634.
+[Sat Jul 29 22:15:25 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 115.
+[Sat Jul 29 22:15:25 2023] index.cgi: Use of uninitialized value $cc in concatenation (.) or string at system/modules/MarkdownPlugin.pm line 634.
+[Sat Jul 29 22:15:25 2023] index.cgi: Use of uninitialized value $cc in concatenation (.) or string at system/modules/MarkdownPlugin.pm line 657.
+[Sat Jul 29 22:15:25 2023] index.cgi: Use of uninitialized value $cc in concatenation (.) or string at system/modules/MarkdownPlugin.pm line 634.
+[Sat Jul 29 22:15:25 2023] index.cgi: Use of uninitialized value $cc in concatenation (.) or string at system/modules/MarkdownPlugin.pm line 634.
+[Sat Jul 29 22:15:25 2023] index.cgi: Wide character in say at /home/will/LifeLog/htdocs/cgi-bin/index.cgi line 53.
+[Sat Jul 29 22:15:46 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 115.
+[Sun Jul 30 00:28:34 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 115.
+[Sun Jul 30 00:29:06 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 115.
+[Sun Jul 30 00:29:06 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 115.
+[Sun Jul 30 00:29:06 2023] index.cgi: Use of uninitialized value $cc in concatenation (.) or string at system/modules/MarkdownPlugin.pm line 657.
+[Sun Jul 30 00:29:06 2023] index.cgi: Use of uninitialized value $cc in concatenation (.) or string at system/modules/MarkdownPlugin.pm line 634.
+[Sun Jul 30 00:29:06 2023] index.cgi: Use of uninitialized value $cc in concatenation (.) or string at system/modules/MarkdownPlugin.pm line 634.
+[Sun Jul 30 00:29:06 2023] index.cgi: Use of uninitialized value $cc in concatenation (.) or string at system/modules/MarkdownPlugin.pm line 634.
+[Sun Jul 30 00:29:06 2023] index.cgi: Use of uninitialized value $cc in concatenation (.) or string at system/modules/MarkdownPlugin.pm line 634.
+[Sun Jul 30 00:29:06 2023] index.cgi: Use of uninitialized value $cc in concatenation (.) or string at system/modules/MarkdownPlugin.pm line 634.
+[Sun Jul 30 00:29:06 2023] index.cgi: Use of uninitialized value $cc in concatenation (.) or string at system/modules/MarkdownPlugin.pm line 634.
+[Sun Jul 30 00:29:06 2023] index.cgi: Use of uninitialized value $cc in concatenation (.) or string at system/modules/MarkdownPlugin.pm line 634.
+[Sun Jul 30 00:29:06 2023] index.cgi: Use of uninitialized value $cc in concatenation (.) or string at system/modules/MarkdownPlugin.pm line 634.
+[Sun Jul 30 00:29:06 2023] index.cgi: Use of uninitialized value $cc in concatenation (.) or string at system/modules/MarkdownPlugin.pm line 634.
+[Sun Jul 30 00:29:06 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 115.
+[Sun Jul 30 00:57:05 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 115.
+[Sun Jul 30 00:57:05 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 115.
+[Sun Jul 30 00:57:15 2023] index.cgi: Use of uninitialized value in numeric ge (>=) at system/modules/MarkdownPlugin.pm line 260.
+[Sun Jul 30 00:57:15 2023] index.cgi: Use of uninitialized value in numeric ge (>=) at system/modules/MarkdownPlugin.pm line 260.
+[Sun Jul 30 00:57:15 2023] index.cgi: Use of uninitialized value in numeric ge (>=) at system/modules/MarkdownPlugin.pm line 260.
+[Sun Jul 30 00:57:15 2023] index.cgi: Use of uninitialized value in numeric ge (>=) at system/modules/MarkdownPlugin.pm line 260.
+[Sun Jul 30 00:57:15 2023] index.cgi: Use of uninitialized value in numeric ge (>=) at system/modules/MarkdownPlugin.pm line 260.
+[Sun Jul 30 00:57:15 2023] index.cgi: Use of uninitialized value in numeric ge (>=) at system/modules/MarkdownPlugin.pm line 260.
+[Sun Jul 30 00:57:15 2023] index.cgi: Use of uninitialized value in numeric ge (>=) at system/modules/MarkdownPlugin.pm line 260.
+[Sun Jul 30 00:57:15 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 115.
+[Sun Jul 30 00:57:15 2023] index.cgi: Use of uninitialized value in numeric ge (>=) at system/modules/MarkdownPlugin.pm line 260.
+[Sun Jul 30 00:57:15 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 115.
+[Sun Jul 30 00:57:15 2023] index.cgi: Use of uninitialized value in numeric ge (>=) at system/modules/MarkdownPlugin.pm line 260.
+[Sun Jul 30 00:57:15 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 115.
+[Sun Jul 30 00:57:15 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 115.
+[Sun Jul 30 00:57:15 2023] index.cgi: Use of uninitialized value in numeric ge (>=) at system/modules/MarkdownPlugin.pm line 260.
+[Sun Jul 30 00:57:15 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 115.
+[Sun Jul 30 00:57:15 2023] index.cgi: Use of uninitialized value in numeric ge (>=) at system/modules/MarkdownPlugin.pm line 260.
+[Sun Jul 30 00:57:15 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 115.
+[Sun Jul 30 00:57:15 2023] index.cgi: Use of uninitialized value in numeric ge (>=) at system/modules/MarkdownPlugin.pm line 260.
+[Sun Jul 30 00:57:15 2023] index.cgi: Use of uninitialized value in numeric ge (>=) at system/modules/MarkdownPlugin.pm line 260.
+[Sun Jul 30 00:57:15 2023] index.cgi: Use of uninitialized value in numeric ge (>=) at system/modules/MarkdownPlugin.pm line 260.
+[Sun Jul 30 00:57:15 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 115.
+[Sun Jul 30 00:57:15 2023] index.cgi: Use of uninitialized value $cc in concatenation (.) or string at system/modules/MarkdownPlugin.pm line 657.
+[Sun Jul 30 00:57:15 2023] index.cgi: Use of uninitialized value $cc in concatenation (.) or string at system/modules/MarkdownPlugin.pm line 634.
+[Sun Jul 30 00:57:15 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 115.
+[Sun Jul 30 00:57:15 2023] index.cgi: Use of uninitialized value $cc in concatenation (.) or string at system/modules/MarkdownPlugin.pm line 634.
+[Sun Jul 30 00:57:15 2023] index.cgi: Use of uninitialized value $cc in concatenation (.) or string at system/modules/MarkdownPlugin.pm line 657.
+[Sun Jul 30 00:57:15 2023] index.cgi: Use of uninitialized value $cc in concatenation (.) or string at system/modules/MarkdownPlugin.pm line 634.
+[Sun Jul 30 00:57:15 2023] index.cgi: Use of uninitialized value $cc in concatenation (.) or string at system/modules/MarkdownPlugin.pm line 634.
+[Sun Jul 30 00:57:15 2023] index.cgi: Wide character in say at /home/will/LifeLog/htdocs/cgi-bin/index.cgi line 53.
+tar: Removing leading `../../' from member names
+tar: Removing leading `../../' from hard link targets
+[Sun Aug  6 09:57:55 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 115.
+[Sun Aug  6 09:57:55 2023] index.cgi: Use of uninitialized value in numeric ge (>=) at system/modules/MarkdownPlugin.pm line 260.
+[Sun Aug  6 09:57:55 2023] index.cgi: Use of uninitialized value in numeric ge (>=) at system/modules/MarkdownPlugin.pm line 260.
+[Sun Aug  6 09:57:55 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 115.
+[Sun Aug  6 09:57:55 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 115.
+[Sun Aug  6 09:57:55 2023] index.cgi: Use of uninitialized value in numeric ge (>=) at system/modules/MarkdownPlugin.pm line 260.
+[Sun Aug  6 09:57:55 2023] index.cgi: Use of uninitialized value in numeric ge (>=) at system/modules/MarkdownPlugin.pm line 260.
+[Sun Aug  6 09:57:55 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 115.
+[Sun Aug  6 09:57:55 2023] index.cgi: Use of uninitialized value in numeric ge (>=) at system/modules/MarkdownPlugin.pm line 260.
+[Sun Aug  6 09:57:55 2023] index.cgi: Use of uninitialized value in numeric ge (>=) at system/modules/MarkdownPlugin.pm line 260.
+[Sun Aug  6 09:57:55 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 115.
+[Sun Aug  6 09:57:55 2023] index.cgi: Use of uninitialized value $cc in concatenation (.) or string at system/modules/MarkdownPlugin.pm line 628.
+[Sun Aug  6 09:57:55 2023] index.cgi: Use of uninitialized value $cc in concatenation (.) or string at system/modules/MarkdownPlugin.pm line 641.
+[Sun Aug  6 09:57:55 2023] index.cgi: Use of uninitialized value in numeric ge (>=) at system/modules/MarkdownPlugin.pm line 260.
+[Sun Aug  6 09:57:55 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 115.
+[Sun Aug  6 09:57:55 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 115.
+[Sun Aug  6 09:57:55 2023] index.cgi: Wide character in say at /home/will/LifeLog/htdocs/cgi-bin/index.cgi line 53.
+[Tue Aug 15 05:33:16 2023] main.cgi: Argument "" isn't numeric in numeric eq (==) at /home/will/LifeLog/htdocs/cgi-bin/main.cgi line 1383.
+[Tue Aug 15 05:33:16 2023] main.cgi: Argument "42FAP5H0JUSZM" isn't numeric in numeric eq (==) at /home/will/LifeLog/htdocs/cgi-bin/main.cgi line 1383.
+[Tue Aug 15 05:33:16 2023] main.cgi: DBI::db=HASH(0x563559a5b790)->disconnect invalidates 1 active statement handle (either destroy statement handles or call finish on them before disconnecting) at /home/will/LifeLog/htdocs/cgi-bin/main.cgi line 1407.
+[Tue Aug 15 05:33:35 2023] main.cgi: Argument "" isn't numeric in numeric eq (==) at /home/will/LifeLog/htdocs/cgi-bin/main.cgi line 1383.
+[Tue Aug 15 05:33:35 2023] main.cgi: Argument "42FAP5H0JUSZM" isn't numeric in numeric eq (==) at /home/will/LifeLog/htdocs/cgi-bin/main.cgi line 1383.
+[Tue Aug 15 05:33:35 2023] main.cgi: DBI::db=HASH(0x564cbe204840)->disconnect invalidates 1 active statement handle (either destroy statement handles or call finish on them before disconnecting) at /home/will/LifeLog/htdocs/cgi-bin/main.cgi line 1407.
+[Tue Aug 15 06:32:05 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 115.
+[Tue Aug 15 06:32:19 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 115.
+[Tue Aug 15 06:32:19 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 115.
+[Tue Aug 15 06:32:19 2023] index.cgi: Use of uninitialized value $cc in concatenation (.) or string at system/modules/MarkdownPlugin.pm line 664.
+[Tue Aug 15 06:32:19 2023] index.cgi: Use of uninitialized value $cc in concatenation (.) or string at system/modules/MarkdownPlugin.pm line 641.
+[Tue Aug 15 06:32:19 2023] index.cgi: Use of uninitialized value $cc in concatenation (.) or string at system/modules/MarkdownPlugin.pm line 641.
+[Tue Aug 15 06:32:19 2023] index.cgi: Use of uninitialized value $cc in concatenation (.) or string at system/modules/MarkdownPlugin.pm line 641.
+[Tue Aug 15 06:32:19 2023] index.cgi: Use of uninitialized value $cc in concatenation (.) or string at system/modules/MarkdownPlugin.pm line 641.
+[Tue Aug 15 06:32:19 2023] index.cgi: Use of uninitialized value $cc in concatenation (.) or string at system/modules/MarkdownPlugin.pm line 641.
+[Tue Aug 15 06:32:19 2023] index.cgi: Use of uninitialized value $cc in concatenation (.) or string at system/modules/MarkdownPlugin.pm line 641.
+[Tue Aug 15 06:32:19 2023] index.cgi: Use of uninitialized value $cc in concatenation (.) or string at system/modules/MarkdownPlugin.pm line 641.
+[Tue Aug 15 06:32:19 2023] index.cgi: Use of uninitialized value $cc in concatenation (.) or string at system/modules/MarkdownPlugin.pm line 641.
+[Tue Aug 15 06:32:19 2023] index.cgi: Use of uninitialized value $cc in concatenation (.) or string at system/modules/MarkdownPlugin.pm line 641.
+[Tue Aug 15 06:32:19 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 115.
+[Sun Aug 20 06:53:22 2023] main.cgi: Argument "94,88" isn't numeric in numeric eq (==) at /home/will/LifeLog/htdocs/cgi-bin/main.cgi line 155.
+[Sun Aug 20 06:53:22 2023] main.cgi: Use of uninitialized value in string eq at /home/will/LifeLog/htdocs/cgi-bin/main.cgi line 172.
+[Sun Aug 20 07:36:48 2023] data.cgi: CGI::param called in list context from /home/will/LifeLog/htdocs/cgi-bin/data.cgi line 147, this can lead to vulnerabilities. See the warning in "Fetching the value or values of a single named parameter" at /usr/local/share/perl/5.34.0/CGI.pm line 415.
+tar: Removing leading `../../' from member names
+tar: Removing leading `../../' from hard link targets
+[Sun Aug 20 07:38:49 2023] config.cgi: Use of uninitialized value $file in index at /home/will/LifeLog/htdocs/cgi-bin/config.cgi line 1189.
+[Sun Aug 20 07:39:03 2023] config.cgi: Use of uninitialized value $file in index at /home/will/LifeLog/htdocs/cgi-bin/config.cgi line 1189.
+[Sun Aug 20 07:39:18 2023] config.cgi: Use of uninitialized value $file in index at /home/will/LifeLog/htdocs/cgi-bin/config.cgi line 1189.
+[Sun Aug 20 07:39:28 2023] config.cgi: Use of uninitialized value $file in index at /home/will/LifeLog/htdocs/cgi-bin/config.cgi line 1189.
+[Sun Aug 20 07:39:39 2023] config.cgi: Use of uninitialized value $file in index at /home/will/LifeLog/htdocs/cgi-bin/config.cgi line 1189.
+[Sun Aug 20 07:39:58 2023] config.cgi: Use of uninitialized value $file in index at /home/will/LifeLog/htdocs/cgi-bin/config.cgi line 1189.
+[Sun Aug 20 07:40:10 2023] config.cgi: Use of uninitialized value $file in index at /home/will/LifeLog/htdocs/cgi-bin/config.cgi line 1189.
+[Sun Aug 20 07:40:21 2023] config.cgi: Use of uninitialized value $file in index at /home/will/LifeLog/htdocs/cgi-bin/config.cgi line 1189.
+[Sun Aug 20 07:40:34 2023] config.cgi: Use of uninitialized value $file in index at /home/will/LifeLog/htdocs/cgi-bin/config.cgi line 1189.
+[Sun Aug 20 07:41:04 2023] config.cgi: Use of uninitialized value $file in index at /home/will/LifeLog/htdocs/cgi-bin/config.cgi line 1189.
+[Sat Aug 26 08:10:12 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 115.
+[Sat Aug 26 08:10:12 2023] index.cgi: Use of uninitialized value in numeric ge (>=) at system/modules/MarkdownPlugin.pm line 260.
+[Sat Aug 26 08:10:12 2023] index.cgi: Use of uninitialized value in numeric ge (>=) at system/modules/MarkdownPlugin.pm line 260.
+[Sat Aug 26 08:10:12 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 115.
+[Sat Aug 26 08:10:12 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 115.
+[Sat Aug 26 08:10:12 2023] index.cgi: Use of uninitialized value in numeric ge (>=) at system/modules/MarkdownPlugin.pm line 260.
+[Sat Aug 26 08:10:12 2023] index.cgi: Use of uninitialized value in numeric ge (>=) at system/modules/MarkdownPlugin.pm line 260.
+[Sat Aug 26 08:10:12 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 115.
+[Sat Aug 26 08:10:12 2023] index.cgi: Use of uninitialized value in numeric ge (>=) at system/modules/MarkdownPlugin.pm line 260.
+[Sat Aug 26 08:10:12 2023] index.cgi: Use of uninitialized value in numeric ge (>=) at system/modules/MarkdownPlugin.pm line 260.
+[Sat Aug 26 08:10:12 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 115.
+[Sat Aug 26 08:10:12 2023] index.cgi: Use of uninitialized value $cc in concatenation (.) or string at system/modules/MarkdownPlugin.pm line 628.
+[Sat Aug 26 08:10:12 2023] index.cgi: Use of uninitialized value $cc in concatenation (.) or string at system/modules/MarkdownPlugin.pm line 641.
+[Sat Aug 26 08:10:12 2023] index.cgi: Use of uninitialized value in numeric ge (>=) at system/modules/MarkdownPlugin.pm line 260.
+[Sat Aug 26 08:10:12 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 115.
+[Sat Aug 26 08:10:12 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 115.
+[Sat Aug 26 08:10:12 2023] index.cgi: Wide character in say at /home/will/LifeLog/htdocs/cgi-bin/index.cgi line 53.
+tar: Removing leading `../../' from member names
+tar: Removing leading `../../' from hard link targets
+tar: Removing leading `../../' from member names
+tar: Removing leading `../../' from hard link targets
+[Wed Aug 30 18:24:27 2023] config.cgi: Use of uninitialized value $file in index at /home/will/LifeLog/htdocs/cgi-bin/config.cgi line 1189.
+[Wed Aug 30 18:24:49 2023] config.cgi: Use of uninitialized value $file in index at /home/will/LifeLog/htdocs/cgi-bin/config.cgi line 1189.
+[Fri Sep  1 07:54:35 2023] json.cgi: Use of uninitialized value in string eq at /home/will/LifeLog/htdocs/cgi-bin/json.cgi line 133.
+[Fri Sep  1 07:54:44 2023] json.cgi: Use of uninitialized value in string eq at /home/will/LifeLog/htdocs/cgi-bin/json.cgi line 133.
+tar: Removing leading `../../' from member names
+tar: Removing leading `../../' from hard link targets
+[Sat Sep  2 16:41:37 2023] data.cgi: CGI::param called in list context from /home/will/LifeLog/htdocs/cgi-bin/data.cgi line 147, this can lead to vulnerabilities. See the warning in "Fetching the value or values of a single named parameter" at /usr/local/share/perl/5.34.0/CGI.pm line 415.
+[Sat Sep  2 16:41:41 2023] data.cgi: CGI::param called in list context from /home/will/LifeLog/htdocs/cgi-bin/data.cgi line 236, this can lead to vulnerabilities. See the warning in "Fetching the value or values of a single named parameter" at /usr/local/share/perl/5.34.0/CGI.pm line 415.
+[Sat Sep  2 16:41:48 2023] data.cgi: CGI::param called in list context from /home/will/LifeLog/htdocs/cgi-bin/data.cgi line 147, this can lead to vulnerabilities. See the warning in "Fetching the value or values of a single named parameter" at /usr/local/share/perl/5.34.0/CGI.pm line 415.
+[Sat Sep  9 20:09:58 2023] stats.cgi: CGI::Pretty is DEPRECATED and will be removed in a future release. Please see https://github.com/leejo/CGI.pm/issues/162 for more information at /usr/local/share/perl/5.34.0/CGI/Pretty.pm line 20.
+[Sat Sep  9 20:10:47 2023] data.cgi: CGI::param called in list context from /home/will/LifeLog/htdocs/cgi-bin/data.cgi line 147, this can lead to vulnerabilities. See the warning in "Fetching the value or values of a single named parameter" at /usr/local/share/perl/5.34.0/CGI.pm line 415.
+[Sat Sep  9 20:10:54 2023] data.cgi: CGI::param called in list context from /home/will/LifeLog/htdocs/cgi-bin/data.cgi line 236, this can lead to vulnerabilities. See the warning in "Fetching the value or values of a single named parameter" at /usr/local/share/perl/5.34.0/CGI.pm line 415.
+[Sat Sep  9 21:15:21 2023] stats.cgi: CGI::Pretty is DEPRECATED and will be removed in a future release. Please see https://github.com/leejo/CGI.pm/issues/162 for more information at /usr/local/share/perl/5.34.0/CGI/Pretty.pm line 20.
+[Wed Sep 20 00:40:49 2023] CNFServices.cgi: [Wed Sep 20 00:40:49 2023] CNFServices.cgi: [Wed Sep 20 00:40:49 2023] CNFServices.cgi: Can't locate DateTime/Format/DateParse.pm in @INC (you may need to install the DateTime::Format::DateParse module) (@INC contains: system/modules /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.34.0 /usr/local/share/perl/5.34.0 /usr/lib/x86_64-linux-gnu/perl5/5.34 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl-base /usr/lib/x86_64-linux-gnu/perl/5.34 /usr/share/perl/5.34 /usr/local/lib/site_perl) at system/modules/CNFDateTime.pm line 10.
+[Wed Sep 20 00:40:49 2023] CNFServices.cgi: [Wed Sep 20 00:40:49 2023] CNFServices.cgi: [Wed Sep 20 00:40:49 2023] CNFServices.cgi: BEGIN failed--compilation aborted at system/modules/CNFDateTime.pm line 10.
+[Wed Sep 20 00:40:49 2023] CNFServices.cgi: [Wed Sep 20 00:40:49 2023] CNFServices.cgi: Compilation failed in require at system/modules/CNFParser.pm line 14.
+[Wed Sep 20 00:40:49 2023] CNFServices.cgi: Compilation failed in require at /home/will/LifeLog/htdocs/cgi-bin/CNFServices.cgi line 29.
+[Wed Sep 20 00:40:58 2023] index.cgi: [Wed Sep 20 00:40:58 2023] index.cgi: [Wed Sep 20 00:40:58 2023] index.cgi: Can't locate DateTime/Format/DateParse.pm in @INC (you may need to install the DateTime::Format::DateParse module) (@INC contains: system/modules /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.34.0 /usr/local/share/perl/5.34.0 /usr/lib/x86_64-linux-gnu/perl5/5.34 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl-base /usr/lib/x86_64-linux-gnu/perl/5.34 /usr/share/perl/5.34 /usr/local/lib/site_perl) at system/modules/CNFDateTime.pm line 10.
+[Wed Sep 20 00:40:58 2023] index.cgi: [Wed Sep 20 00:40:58 2023] index.cgi: [Wed Sep 20 00:40:58 2023] index.cgi: BEGIN failed--compilation aborted at system/modules/CNFDateTime.pm line 10.
+[Wed Sep 20 00:40:58 2023] index.cgi: [Wed Sep 20 00:40:58 2023] index.cgi: Compilation failed in require at system/modules/CNFParser.pm line 14.
+[Wed Sep 20 00:40:58 2023] index.cgi: Compilation failed in require at /home/will/LifeLog/htdocs/cgi-bin/index.cgi line 32.
+[Wed Sep 20 00:43:35 2023] CNFServices.cgi: Can't locate XML/RSS/Parser.pm in @INC (you may need to install the XML::RSS::Parser module) (@INC contains: system/modules /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.34.0 /usr/local/share/perl/5.34.0 /usr/lib/x86_64-linux-gnu/perl5/5.34 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl-base /usr/lib/x86_64-linux-gnu/perl/5.34 /usr/share/perl/5.34 /usr/local/lib/site_perl) at system/modules/RSSFeedsPlugin.pm line 12.
+[Wed Sep 20 00:43:35 2023] CNFServices.cgi: BEGIN failed--compilation aborted at system/modules/RSSFeedsPlugin.pm line 12.
+[Wed Sep 20 00:43:35 2023] CNFServices.cgi: Compilation failed in require at system/modules/CNFParser.pm line 1097.
+[Wed Sep 20 00:47:24 2023] CNFServices.cgi: could not find ParserDetails.ini in /usr/local/share/perl/5.34.0/XML/SAX
+[Wed Sep 20 00:47:28 2023] CNFServices.cgi: Wide character in print at system/modules/RSSFeedsPlugin.pm line 90.
+[Wed Sep 20 00:47:28 2023] CNFServices.cgi: Use of uninitialized value $Description in concatenation (.) or string at system/modules/RSSFeedsPlugin.pm line 126.
+[Wed Sep 20 00:47:28 2023] CNFServices.cgi: Use of uninitialized value $Description in concatenation (.) or string at system/modules/RSSFeedsPlugin.pm line 126.
+[Wed Sep 20 00:47:28 2023] CNFServices.cgi: Use of uninitialized value $Description in concatenation (.) or string at system/modules/RSSFeedsPlugin.pm line 126.
+[Wed Sep 20 00:47:28 2023] CNFServices.cgi: Use of uninitialized value $Description in concatenation (.) or string at system/modules/RSSFeedsPlugin.pm line 126.
+[Wed Sep 20 00:47:28 2023] CNFServices.cgi: Use of uninitialized value $Description in concatenation (.) or string at system/modules/RSSFeedsPlugin.pm line 126.
+[Wed Sep 20 00:47:28 2023] CNFServices.cgi: Use of uninitialized value $Description in concatenation (.) or string at system/modules/RSSFeedsPlugin.pm line 126.
+[Wed Sep 20 00:47:28 2023] CNFServices.cgi: Use of uninitialized value $Description in concatenation (.) or string at system/modules/RSSFeedsPlugin.pm line 126.
+[Wed Sep 20 00:47:28 2023] CNFServices.cgi: Use of uninitialized value $Description in concatenation (.) or string at system/modules/RSSFeedsPlugin.pm line 126.
+[Wed Sep 20 00:47:28 2023] CNFServices.cgi: Use of uninitialized value $Description in concatenation (.) or string at system/modules/RSSFeedsPlugin.pm line 126.
+[Wed Sep 20 00:47:28 2023] CNFServices.cgi: Use of uninitialized value $Description in concatenation (.) or string at system/modules/RSSFeedsPlugin.pm line 126.
+[Wed Sep 20 00:47:28 2023] CNFServices.cgi: Use of uninitialized value $Description in concatenation (.) or string at system/modules/RSSFeedsPlugin.pm line 126.
+[Wed Sep 20 00:47:28 2023] CNFServices.cgi: Use of uninitialized value $Description in concatenation (.) or string at system/modules/RSSFeedsPlugin.pm line 126.
+[Wed Sep 20 00:47:28 2023] CNFServices.cgi: Use of uninitialized value $Description in concatenation (.) or string at system/modules/RSSFeedsPlugin.pm line 126.
+[Wed Sep 20 00:47:28 2023] CNFServices.cgi: Use of uninitialized value $Description in concatenation (.) or string at system/modules/RSSFeedsPlugin.pm line 126.
+[Wed Sep 20 00:47:28 2023] CNFServices.cgi: Use of uninitialized value $Description in concatenation (.) or string at system/modules/RSSFeedsPlugin.pm line 126.
+[Wed Sep 20 00:47:28 2023] CNFServices.cgi: Use of uninitialized value $Description in concatenation (.) or string at system/modules/RSSFeedsPlugin.pm line 126.
+[Wed Sep 20 00:47:28 2023] CNFServices.cgi: Wide character in say at /home/will/LifeLog/htdocs/cgi-bin/CNFServices.cgi line 43.
+[Wed Sep 20 00:48:46 2023] CNFServices.cgi: could not find ParserDetails.ini in /usr/local/share/perl/5.34.0/XML/SAX
+[Wed Sep 20 01:02:48 2023] CNFServices.cgi: could not find ParserDetails.ini in /usr/local/share/perl/5.34.0/XML/SAX
+[Wed Sep 20 01:03:41 2023] CNFServices.cgi: Use of uninitialized value $Description in concatenation (.) or string at system/modules/RSSFeedsPlugin.pm line 126.
+[Wed Sep 20 01:03:41 2023] CNFServices.cgi: Use of uninitialized value $Description in concatenation (.) or string at system/modules/RSSFeedsPlugin.pm line 126.
+[Wed Sep 20 01:03:41 2023] CNFServices.cgi: Use of uninitialized value $Description in concatenation (.) or string at system/modules/RSSFeedsPlugin.pm line 126.
+[Wed Sep 20 01:03:41 2023] CNFServices.cgi: Use of uninitialized value $Description in concatenation (.) or string at system/modules/RSSFeedsPlugin.pm line 126.
+[Wed Sep 20 01:03:41 2023] CNFServices.cgi: Use of uninitialized value $Description in concatenation (.) or string at system/modules/RSSFeedsPlugin.pm line 126.
+[Wed Sep 20 01:03:41 2023] CNFServices.cgi: Use of uninitialized value $Description in concatenation (.) or string at system/modules/RSSFeedsPlugin.pm line 126.
+[Wed Sep 20 01:03:41 2023] CNFServices.cgi: Use of uninitialized value $Description in concatenation (.) or string at system/modules/RSSFeedsPlugin.pm line 126.
+[Wed Sep 20 01:03:41 2023] CNFServices.cgi: Use of uninitialized value $Description in concatenation (.) or string at system/modules/RSSFeedsPlugin.pm line 126.
+[Wed Sep 20 01:03:41 2023] CNFServices.cgi: Use of uninitialized value $Description in concatenation (.) or string at system/modules/RSSFeedsPlugin.pm line 126.
+[Wed Sep 20 01:03:41 2023] CNFServices.cgi: Use of uninitialized value $Description in concatenation (.) or string at system/modules/RSSFeedsPlugin.pm line 126.
+[Wed Sep 20 01:03:41 2023] CNFServices.cgi: Use of uninitialized value $Description in concatenation (.) or string at system/modules/RSSFeedsPlugin.pm line 126.
+[Wed Sep 20 01:03:41 2023] CNFServices.cgi: Use of uninitialized value $Description in concatenation (.) or string at system/modules/RSSFeedsPlugin.pm line 126.
+[Wed Sep 20 01:03:41 2023] CNFServices.cgi: Use of uninitialized value $Description in concatenation (.) or string at system/modules/RSSFeedsPlugin.pm line 126.
+[Wed Sep 20 01:03:41 2023] CNFServices.cgi: Use of uninitialized value $Description in concatenation (.) or string at system/modules/RSSFeedsPlugin.pm line 126.
+[Wed Sep 20 01:03:41 2023] CNFServices.cgi: Use of uninitialized value $Description in concatenation (.) or string at system/modules/RSSFeedsPlugin.pm line 126.
+[Wed Sep 20 01:03:41 2023] CNFServices.cgi: Use of uninitialized value $Description in concatenation (.) or string at system/modules/RSSFeedsPlugin.pm line 126.
+[Wed Sep 20 01:40:07 2023] CNFServices.cgi: Use of uninitialized value $Description in concatenation (.) or string at system/modules/RSSFeedsPlugin.pm line 126.
+[Wed Sep 20 01:40:07 2023] CNFServices.cgi: Use of uninitialized value $Description in concatenation (.) or string at system/modules/RSSFeedsPlugin.pm line 126.
+[Wed Sep 20 01:40:07 2023] CNFServices.cgi: Use of uninitialized value $Description in concatenation (.) or string at system/modules/RSSFeedsPlugin.pm line 126.
+[Wed Sep 20 01:40:07 2023] CNFServices.cgi: Use of uninitialized value $Description in concatenation (.) or string at system/modules/RSSFeedsPlugin.pm line 126.
+[Wed Sep 20 01:40:07 2023] CNFServices.cgi: Use of uninitialized value $Description in concatenation (.) or string at system/modules/RSSFeedsPlugin.pm line 126.
+[Wed Sep 20 01:40:07 2023] CNFServices.cgi: Use of uninitialized value $Description in concatenation (.) or string at system/modules/RSSFeedsPlugin.pm line 126.
+[Wed Sep 20 01:40:07 2023] CNFServices.cgi: Use of uninitialized value $Description in concatenation (.) or string at system/modules/RSSFeedsPlugin.pm line 126.
+[Wed Sep 20 01:40:07 2023] CNFServices.cgi: Use of uninitialized value $Description in concatenation (.) or string at system/modules/RSSFeedsPlugin.pm line 126.
+[Wed Sep 20 01:40:07 2023] CNFServices.cgi: Use of uninitialized value $Description in concatenation (.) or string at system/modules/RSSFeedsPlugin.pm line 126.
+[Wed Sep 20 01:40:07 2023] CNFServices.cgi: Use of uninitialized value $Description in concatenation (.) or string at system/modules/RSSFeedsPlugin.pm line 126.
+[Wed Sep 20 01:40:07 2023] CNFServices.cgi: Use of uninitialized value $Description in concatenation (.) or string at system/modules/RSSFeedsPlugin.pm line 126.
+[Wed Sep 20 01:40:07 2023] CNFServices.cgi: Use of uninitialized value $Description in concatenation (.) or string at system/modules/RSSFeedsPlugin.pm line 126.
+[Wed Sep 20 01:40:07 2023] CNFServices.cgi: Use of uninitialized value $Description in concatenation (.) or string at system/modules/RSSFeedsPlugin.pm line 126.
+[Wed Sep 20 01:40:07 2023] CNFServices.cgi: Use of uninitialized value $Description in concatenation (.) or string at system/modules/RSSFeedsPlugin.pm line 126.
+[Wed Sep 20 01:40:07 2023] CNFServices.cgi: Use of uninitialized value $Description in concatenation (.) or string at system/modules/RSSFeedsPlugin.pm line 126.
+[Wed Sep 20 01:40:07 2023] CNFServices.cgi: Use of uninitialized value $Description in concatenation (.) or string at system/modules/RSSFeedsPlugin.pm line 126.
+[Wed Sep 20 13:51:18 2023] json.cgi: WARNING: The key derivation method "opensslv1" is deprecated. Using -pbkdf=>'pbkdf2' would be better.
+[Wed Sep 20 13:51:18 2023] json.cgi: Pass -nodeprecate=>1 to inhibit this message.
+[Wed Sep 20 13:51:18 2023] json.cgi:  at /home/will/LifeLog/htdocs/cgi-bin/json.cgi line 110.
+[Wed Sep 20 13:51:25 2023] json.cgi: Use of uninitialized value in string eq at /home/will/LifeLog/htdocs/cgi-bin/json.cgi line 133.
+[Wed Sep 20 13:51:28 2023] json.cgi: Use of uninitialized value in string eq at /home/will/LifeLog/htdocs/cgi-bin/json.cgi line 133.
+[Wed Sep 20 13:56:04 2023] data.cgi: CGI::param called in list context from /home/will/LifeLog/htdocs/cgi-bin/data.cgi line 147, this can lead to vulnerabilities. See the warning in "Fetching the value or values of a single named parameter" at /usr/local/share/perl/5.34.0/CGI.pm line 415.
+[Wed Sep 20 13:56:08 2023] data.cgi: CGI::param called in list context from /home/will/LifeLog/htdocs/cgi-bin/data.cgi line 147, this can lead to vulnerabilities. See the warning in "Fetching the value or values of a single named parameter" at /usr/local/share/perl/5.34.0/CGI.pm line 415.
+[Wed Sep 20 13:56:21 2023] json.cgi: Use of uninitialized value in string eq at /home/will/LifeLog/htdocs/cgi-bin/json.cgi line 133.
+[Wed Sep 20 13:56:24 2023] json.cgi: Use of uninitialized value in string eq at /home/will/LifeLog/htdocs/cgi-bin/json.cgi line 133.
+[Wed Sep 20 13:56:35 2023] json.cgi: WARNING: The key derivation method "opensslv1" is deprecated. Using -pbkdf=>'pbkdf2' would be better.
+[Wed Sep 20 13:56:35 2023] json.cgi: Pass -nodeprecate=>1 to inhibit this message.
+[Wed Sep 20 13:56:35 2023] json.cgi:  at /home/will/LifeLog/htdocs/cgi-bin/json.cgi line 110.
+[Wed Sep 20 13:56:42 2023] json.cgi: WARNING: The key derivation method "opensslv1" is deprecated. Using -pbkdf=>'pbkdf2' would be better.
+[Wed Sep 20 13:56:42 2023] json.cgi: Pass -nodeprecate=>1 to inhibit this message.
+[Wed Sep 20 13:56:42 2023] json.cgi:  at /home/will/LifeLog/htdocs/cgi-bin/json.cgi line 110.
+[Wed Sep 20 13:56:51 2023] json.cgi: Use of uninitialized value in string eq at /home/will/LifeLog/htdocs/cgi-bin/json.cgi line 133.
+[Wed Sep 20 13:57:02 2023] json.cgi: Use of uninitialized value in string eq at /home/will/LifeLog/htdocs/cgi-bin/json.cgi line 133.
+[Thu Sep 21 01:55:11 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 104.
+[Thu Sep 21 01:55:11 2023] index.cgi: Use of uninitialized value in numeric ge (>=) at system/modules/MarkdownPlugin.pm line 250.
+[Thu Sep 21 01:55:11 2023] index.cgi: Use of uninitialized value in numeric ge (>=) at system/modules/MarkdownPlugin.pm line 250.
+[Thu Sep 21 01:55:11 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 104.
+[Thu Sep 21 01:55:11 2023] index.cgi: Use of uninitialized value $cc in concatenation (.) or string at system/modules/MarkdownPlugin.pm line 681.
+[Thu Sep 21 01:55:11 2023] index.cgi: Use of uninitialized value in numeric ge (>=) at system/modules/MarkdownPlugin.pm line 250.
+[Thu Sep 21 01:55:11 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 104.
+[Thu Sep 21 01:55:11 2023] index.cgi: Use of uninitialized value $cc in concatenation (.) or string at system/modules/MarkdownPlugin.pm line 658.
+[Thu Sep 21 01:55:11 2023] index.cgi: Use of uninitialized value $cc in concatenation (.) or string at system/modules/MarkdownPlugin.pm line 658.
+[Thu Sep 21 01:55:11 2023] index.cgi: Use of uninitialized value $cc in concatenation (.) or string at system/modules/MarkdownPlugin.pm line 681.
+[Thu Sep 21 01:55:12 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 104.
+[Thu Sep 21 01:55:12 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 104.
+[Thu Sep 21 02:01:01 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 104.
+[Thu Sep 21 02:01:01 2023] index.cgi: Use of uninitialized value in numeric ge (>=) at system/modules/MarkdownPlugin.pm line 250.
+[Thu Sep 21 02:01:01 2023] index.cgi: Use of uninitialized value in numeric ge (>=) at system/modules/MarkdownPlugin.pm line 250.
+[Thu Sep 21 02:01:01 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 104.
+[Thu Sep 21 02:01:02 2023] index.cgi: Use of uninitialized value $cc in concatenation (.) or string at system/modules/MarkdownPlugin.pm line 681.
+[Thu Sep 21 02:01:02 2023] index.cgi: Use of uninitialized value in numeric ge (>=) at system/modules/MarkdownPlugin.pm line 250.
+[Thu Sep 21 02:01:02 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 104.
+[Thu Sep 21 02:01:02 2023] index.cgi: Use of uninitialized value $cc in concatenation (.) or string at system/modules/MarkdownPlugin.pm line 658.
+[Thu Sep 21 02:01:02 2023] index.cgi: Use of uninitialized value $cc in concatenation (.) or string at system/modules/MarkdownPlugin.pm line 658.
+[Thu Sep 21 02:01:02 2023] index.cgi: Use of uninitialized value $cc in concatenation (.) or string at system/modules/MarkdownPlugin.pm line 681.
+[Thu Sep 21 02:01:02 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 104.
+[Thu Sep 21 02:06:55 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 104.
+[Thu Sep 21 02:06:55 2023] index.cgi: Use of uninitialized value in numeric ge (>=) at system/modules/MarkdownPlugin.pm line 250.
+[Thu Sep 21 02:06:55 2023] index.cgi: Use of uninitialized value in numeric ge (>=) at system/modules/MarkdownPlugin.pm line 250.
+[Thu Sep 21 02:06:55 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 104.
+[Thu Sep 21 02:06:56 2023] index.cgi: Use of uninitialized value $cc in concatenation (.) or string at system/modules/MarkdownPlugin.pm line 681.
+[Thu Sep 21 02:06:56 2023] index.cgi: Use of uninitialized value in numeric ge (>=) at system/modules/MarkdownPlugin.pm line 250.
+[Thu Sep 21 02:06:56 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 104.
+[Thu Sep 21 02:06:56 2023] index.cgi: Use of uninitialized value $cc in concatenation (.) or string at system/modules/MarkdownPlugin.pm line 658.
+[Thu Sep 21 02:06:56 2023] index.cgi: Use of uninitialized value $cc in concatenation (.) or string at system/modules/MarkdownPlugin.pm line 658.
+[Thu Sep 21 02:06:56 2023] index.cgi: Use of uninitialized value $cc in concatenation (.) or string at system/modules/MarkdownPlugin.pm line 681.
+[Thu Sep 21 02:06:56 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 104.
+[Thu Sep 21 02:20:41 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 104.
+[Thu Sep 21 02:20:41 2023] index.cgi: Use of uninitialized value in numeric ge (>=) at system/modules/MarkdownPlugin.pm line 250.
+[Thu Sep 21 02:20:41 2023] index.cgi: Use of uninitialized value in numeric ge (>=) at system/modules/MarkdownPlugin.pm line 250.
+[Thu Sep 21 02:20:41 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 104.
+[Thu Sep 21 02:20:42 2023] index.cgi: Use of uninitialized value $cc in concatenation (.) or string at system/modules/MarkdownPlugin.pm line 681.
+[Thu Sep 21 02:20:42 2023] index.cgi: Use of uninitialized value in numeric ge (>=) at system/modules/MarkdownPlugin.pm line 250.
+[Thu Sep 21 02:20:42 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 104.
+[Thu Sep 21 02:20:42 2023] index.cgi: Use of uninitialized value $cc in concatenation (.) or string at system/modules/MarkdownPlugin.pm line 658.
+[Thu Sep 21 02:20:42 2023] index.cgi: Use of uninitialized value $cc in concatenation (.) or string at system/modules/MarkdownPlugin.pm line 658.
+[Thu Sep 21 02:20:42 2023] index.cgi: Use of uninitialized value $cc in concatenation (.) or string at system/modules/MarkdownPlugin.pm line 681.
+[Thu Sep 21 02:20:42 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 104.
+[Thu Sep 21 03:11:55 2023] json.cgi: Use of uninitialized value in string eq at /home/will/LifeLog/htdocs/cgi-bin/json.cgi line 133.
+[Fri Sep 22 03:35:00 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 104.
+[Fri Sep 22 03:35:00 2023] index.cgi: Use of uninitialized value in numeric ge (>=) at system/modules/MarkdownPlugin.pm line 250.
+[Fri Sep 22 03:35:00 2023] index.cgi: Use of uninitialized value in numeric ge (>=) at system/modules/MarkdownPlugin.pm line 250.
+[Fri Sep 22 03:35:00 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 104.
+[Fri Sep 22 03:35:00 2023] index.cgi: Use of uninitialized value $cc in concatenation (.) or string at system/modules/MarkdownPlugin.pm line 681.
+[Fri Sep 22 03:35:00 2023] index.cgi: Use of uninitialized value in numeric ge (>=) at system/modules/MarkdownPlugin.pm line 250.
+[Fri Sep 22 03:35:00 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 104.
+[Fri Sep 22 03:35:00 2023] index.cgi: Use of uninitialized value $cc in concatenation (.) or string at system/modules/MarkdownPlugin.pm line 658.
+[Fri Sep 22 03:35:00 2023] index.cgi: Use of uninitialized value $cc in concatenation (.) or string at system/modules/MarkdownPlugin.pm line 658.
+[Fri Sep 22 03:35:00 2023] index.cgi: Use of uninitialized value $cc in concatenation (.) or string at system/modules/MarkdownPlugin.pm line 681.
+[Fri Sep 22 03:35:01 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 104.
+[Fri Sep 22 04:33:33 2023] CNFServices.cgi: could not find ParserDetails.ini in /usr/local/share/perl/5.34.0/XML/SAX
+[Fri Sep 22 04:33:39 2023] CNFServices.cgi: Wide character in print at system/modules/RSSFeedsPlugin.pm line 92.
+[Fri Sep 22 04:33:39 2023] CNFServices.cgi: Wide character in say at /home/will/LifeLog/htdocs/cgi-bin/CNFServices.cgi line 54.
+  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
+                                 Dload  Upload   Total   Spent    Left  Speed
+\r  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0\r100  8192    0  8192    0     0   9434      0 --:--:-- --:--:-- --:--:--  9426\r100 79039    0 79039    0     0  71536      0 --:--:--  0:00:01 --:--:-- 71593
+[Fri Sep 22 04:40:30 2023] CNFServices.cgi: could not find ParserDetails.ini in /usr/local/share/perl/5.34.0/XML/SAX
+[Fri Sep 22 04:40:31 2023] CNFServices.cgi: Wide character in print at system/modules/RSSFeedsPlugin.pm line 92.
+[Fri Sep 22 04:40:31 2023] CNFServices.cgi: Wide character in say at /home/will/LifeLog/htdocs/cgi-bin/CNFServices.cgi line 54.
+[Fri Sep 22 04:52:49 2023] CNFServices.cgi: could not find ParserDetails.ini in /usr/local/share/perl/5.34.0/XML/SAX
+[Fri Sep 22 04:52:52 2023] CNFServices.cgi: Wide character in print at system/modules/RSSFeedsPlugin.pm line 92.
+[Fri Sep 22 04:52:52 2023] CNFServices.cgi: Wide character in say at /home/will/LifeLog/htdocs/cgi-bin/CNFServices.cgi line 54.
+[Fri Sep 22 07:03:38 2023] CNFServices.cgi: could not find ParserDetails.ini in /usr/local/share/perl/5.34.0/XML/SAX
+[Fri Sep 22 07:03:41 2023] CNFServices.cgi: Wide character in print at system/modules/RSSFeedsPlugin.pm line 268.
+[Fri Sep 22 07:03:43 2023] CNFServices.cgi: Wide character in print at system/modules/RSSFeedsPlugin.pm line 92.
+[Fri Sep 22 07:03:43 2023] CNFServices.cgi: Wide character in say at /home/will/LifeLog/htdocs/cgi-bin/CNFServices.cgi line 54.
+[Fri Sep 22 07:04:49 2023] CNFServices.cgi: Use of uninitialized value $Description in concatenation (.) or string at system/modules/RSSFeedsPlugin.pm line 132.
+[Fri Sep 22 07:04:49 2023] CNFServices.cgi: Use of uninitialized value $Description in concatenation (.) or string at system/modules/RSSFeedsPlugin.pm line 132.
+[Fri Sep 22 07:04:49 2023] CNFServices.cgi: Use of uninitialized value $Description in concatenation (.) or string at system/modules/RSSFeedsPlugin.pm line 132.
+[Fri Sep 22 07:04:49 2023] CNFServices.cgi: Use of uninitialized value $Description in concatenation (.) or string at system/modules/RSSFeedsPlugin.pm line 132.
+[Fri Sep 22 07:04:49 2023] CNFServices.cgi: Use of uninitialized value $Description in concatenation (.) or string at system/modules/RSSFeedsPlugin.pm line 132.
+[Fri Sep 22 07:04:49 2023] CNFServices.cgi: Use of uninitialized value $Description in concatenation (.) or string at system/modules/RSSFeedsPlugin.pm line 132.
+[Fri Sep 22 07:04:49 2023] CNFServices.cgi: Use of uninitialized value $Description in concatenation (.) or string at system/modules/RSSFeedsPlugin.pm line 132.
+[Fri Sep 22 07:04:49 2023] CNFServices.cgi: Use of uninitialized value $Description in concatenation (.) or string at system/modules/RSSFeedsPlugin.pm line 132.
+[Fri Sep 22 07:04:49 2023] CNFServices.cgi: Use of uninitialized value $Description in concatenation (.) or string at system/modules/RSSFeedsPlugin.pm line 132.
+[Fri Sep 22 07:04:49 2023] CNFServices.cgi: Use of uninitialized value $Description in concatenation (.) or string at system/modules/RSSFeedsPlugin.pm line 132.
+[Fri Sep 22 07:04:49 2023] CNFServices.cgi: Use of uninitialized value $Description in concatenation (.) or string at system/modules/RSSFeedsPlugin.pm line 132.
+[Fri Sep 22 07:04:49 2023] CNFServices.cgi: Use of uninitialized value $Description in concatenation (.) or string at system/modules/RSSFeedsPlugin.pm line 132.
+[Fri Sep 22 07:04:49 2023] CNFServices.cgi: Use of uninitialized value $Description in concatenation (.) or string at system/modules/RSSFeedsPlugin.pm line 132.
+[Fri Sep 22 07:04:49 2023] CNFServices.cgi: Use of uninitialized value $Description in concatenation (.) or string at system/modules/RSSFeedsPlugin.pm line 132.
+[Fri Sep 22 07:04:49 2023] CNFServices.cgi: Use of uninitialized value $Description in concatenation (.) or string at system/modules/RSSFeedsPlugin.pm line 132.
+[Fri Sep 22 07:04:49 2023] CNFServices.cgi: Use of uninitialized value $Description in concatenation (.) or string at system/modules/RSSFeedsPlugin.pm line 132.
+[Fri Sep 22 14:44:05 2023] json.cgi: Use of uninitialized value in string eq at /home/will/LifeLog/htdocs/cgi-bin/json.cgi line 133.
+[Fri Sep 22 14:44:06 2023] data.cgi: CGI::param called in list context from /home/will/LifeLog/htdocs/cgi-bin/data.cgi line 147, this can lead to vulnerabilities. See the warning in "Fetching the value or values of a single named parameter" at /usr/local/share/perl/5.34.0/CGI.pm line 415.
+[Fri Sep 22 14:44:21 2023] json.cgi: Use of uninitialized value in string eq at /home/will/LifeLog/htdocs/cgi-bin/json.cgi line 133.
+[Sat Sep 23 03:11:59 2023] json.cgi: WARNING: The key derivation method "opensslv1" is deprecated. Using -pbkdf=>'pbkdf2' would be better.
+[Sat Sep 23 03:11:59 2023] json.cgi: Pass -nodeprecate=>1 to inhibit this message.
+[Sat Sep 23 03:11:59 2023] json.cgi:  at /home/will/LifeLog/htdocs/cgi-bin/json.cgi line 110.
+[Sat Sep 23 03:12:15 2023] json.cgi: Use of uninitialized value in string eq at /home/will/LifeLog/htdocs/cgi-bin/json.cgi line 133.
+[Fri Sep 29 00:47:45 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 104.
+[Fri Sep 29 00:47:45 2023] index.cgi: Use of uninitialized value in numeric ge (>=) at system/modules/MarkdownPlugin.pm line 250.
+[Fri Sep 29 00:47:45 2023] index.cgi: Use of uninitialized value in numeric ge (>=) at system/modules/MarkdownPlugin.pm line 250.
+[Fri Sep 29 00:47:45 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 104.
+[Fri Sep 29 00:47:45 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 104.
+[Fri Sep 29 00:47:45 2023] index.cgi: Use of uninitialized value in numeric ge (>=) at system/modules/MarkdownPlugin.pm line 250.
+[Fri Sep 29 00:47:45 2023] index.cgi: Use of uninitialized value in numeric ge (>=) at system/modules/MarkdownPlugin.pm line 250.
+[Fri Sep 29 00:47:46 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 104.
+[Fri Sep 29 00:47:46 2023] index.cgi: Use of uninitialized value in numeric ge (>=) at system/modules/MarkdownPlugin.pm line 250.
+[Fri Sep 29 00:47:46 2023] index.cgi: Use of uninitialized value in numeric ge (>=) at system/modules/MarkdownPlugin.pm line 250.
+[Fri Sep 29 00:47:47 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 104.
+[Fri Sep 29 00:47:47 2023] index.cgi: Use of uninitialized value $cc in concatenation (.) or string at system/modules/MarkdownPlugin.pm line 645.
+[Fri Sep 29 00:47:47 2023] index.cgi: Use of uninitialized value $cc in concatenation (.) or string at system/modules/MarkdownPlugin.pm line 658.
+[Fri Sep 29 00:47:47 2023] index.cgi: Use of uninitialized value in numeric ge (>=) at system/modules/MarkdownPlugin.pm line 250.
+[Fri Sep 29 00:47:47 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 104.
+[Fri Sep 29 00:47:48 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 104.
+[Fri Sep 29 00:47:48 2023] index.cgi: Wide character in say at /home/will/LifeLog/htdocs/cgi-bin/index.cgi line 50.
+[Fri Sep 29 00:48:27 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 104.
+[Fri Sep 29 00:48:27 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 104.
+[Fri Sep 29 00:48:27 2023] index.cgi: Use of uninitialized value $cc in concatenation (.) or string at system/modules/MarkdownPlugin.pm line 681.
+[Fri Sep 29 00:48:27 2023] index.cgi: Use of uninitialized value $cc in concatenation (.) or string at system/modules/MarkdownPlugin.pm line 658.
+[Fri Sep 29 00:48:27 2023] index.cgi: Use of uninitialized value $cc in concatenation (.) or string at system/modules/MarkdownPlugin.pm line 658.
+[Fri Sep 29 00:48:27 2023] index.cgi: Use of uninitialized value $cc in concatenation (.) or string at system/modules/MarkdownPlugin.pm line 658.
+[Fri Sep 29 00:48:27 2023] index.cgi: Use of uninitialized value $cc in concatenation (.) or string at system/modules/MarkdownPlugin.pm line 658.
+[Fri Sep 29 00:48:27 2023] index.cgi: Use of uninitialized value $cc in concatenation (.) or string at system/modules/MarkdownPlugin.pm line 658.
+[Fri Sep 29 00:48:27 2023] index.cgi: Use of uninitialized value $cc in concatenation (.) or string at system/modules/MarkdownPlugin.pm line 658.
+[Fri Sep 29 00:48:27 2023] index.cgi: Use of uninitialized value $cc in concatenation (.) or string at system/modules/MarkdownPlugin.pm line 658.
+[Fri Sep 29 00:48:27 2023] index.cgi: Use of uninitialized value $cc in concatenation (.) or string at system/modules/MarkdownPlugin.pm line 658.
+[Fri Sep 29 00:48:27 2023] index.cgi: Use of uninitialized value $cc in concatenation (.) or string at system/modules/MarkdownPlugin.pm line 658.
+[Fri Sep 29 00:48:28 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 104.
+[Sat Sep 30 08:53:39 2023] index.cgi: Wide character in say at /home/will/LifeLog/htdocs/cgi-bin/index.cgi line 50.
+Can't locate CGI/Tiny.pm in @INC (you may need to install the CGI::Tiny module) (@INC contains: /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.34.0 /usr/local/share/perl/5.34.0 /usr/lib/x86_64-linux-gnu/perl5/5.34 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl-base /usr/lib/x86_64-linux-gnu/perl/5.34 /usr/share/perl/5.34 /usr/local/lib/site_perl) at /home/will/LifeLog/htdocs/cgi-bin/CNFServices.cgi line 11.
+BEGIN failed--compilation aborted at /home/will/LifeLog/htdocs/cgi-bin/CNFServices.cgi line 11.
+Can't locate CGI/Tiny.pm in @INC (you may need to install the CGI::Tiny module) (@INC contains: /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.34.0 /usr/local/share/perl/5.34.0 /usr/lib/x86_64-linux-gnu/perl5/5.34 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl-base /usr/lib/x86_64-linux-gnu/perl/5.34 /usr/share/perl/5.34 /usr/local/lib/site_perl) at /home/will/LifeLog/htdocs/cgi-bin/CNFServices.cgi line 11.
+BEGIN failed--compilation aborted at /home/will/LifeLog/htdocs/cgi-bin/CNFServices.cgi line 11.
+Can't locate CGI/Tiny.pm in @INC (you may need to install the CGI::Tiny module) (@INC contains: /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.34.0 /usr/local/share/perl/5.34.0 /usr/lib/x86_64-linux-gnu/perl5/5.34 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl-base /usr/lib/x86_64-linux-gnu/perl/5.34 /usr/share/perl/5.34 /usr/local/lib/site_perl) at /home/will/LifeLog/htdocs/cgi-bin/CNFServices.cgi line 11.
+BEGIN failed--compilation aborted at /home/will/LifeLog/htdocs/cgi-bin/CNFServices.cgi line 11.
+Can't locate CGI/Tiny.pm in @INC (you may need to install the CGI::Tiny module) (@INC contains: /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.34.0 /usr/local/share/perl/5.34.0 /usr/lib/x86_64-linux-gnu/perl5/5.34 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl-base /usr/lib/x86_64-linux-gnu/perl/5.34 /usr/share/perl/5.34 /usr/local/lib/site_perl) at /home/will/LifeLog/htdocs/cgi-bin/CNFServices.cgi line 11.
+BEGIN failed--compilation aborted at /home/will/LifeLog/htdocs/cgi-bin/CNFServices.cgi line 11.
+Can't locate CGI/Tiny.pm in @INC (you may need to install the CGI::Tiny module) (@INC contains: /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.34.0 /usr/local/share/perl/5.34.0 /usr/lib/x86_64-linux-gnu/perl5/5.34 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl-base /usr/lib/x86_64-linux-gnu/perl/5.34 /usr/share/perl/5.34 /usr/local/lib/site_perl) at /home/will/LifeLog/htdocs/cgi-bin/CNFServices.cgi line 11.
+BEGIN failed--compilation aborted at /home/will/LifeLog/htdocs/cgi-bin/CNFServices.cgi line 11.
+Can't locate CGI/Tiny.pm in @INC (you may need to install the CGI::Tiny module) (@INC contains: /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.34.0 /usr/local/share/perl/5.34.0 /usr/lib/x86_64-linux-gnu/perl5/5.34 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl-base /usr/lib/x86_64-linux-gnu/perl/5.34 /usr/share/perl/5.34 /usr/local/lib/site_perl) at /home/will/LifeLog/htdocs/cgi-bin/CNFServices.cgi line 11.
+BEGIN failed--compilation aborted at /home/will/LifeLog/htdocs/cgi-bin/CNFServices.cgi line 11.
+Can't locate CGI/Tiny.pm in @INC (you may need to install the CGI::Tiny module) (@INC contains: /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.34.0 /usr/local/share/perl/5.34.0 /usr/lib/x86_64-linux-gnu/perl5/5.34 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl-base /usr/lib/x86_64-linux-gnu/perl/5.34 /usr/share/perl/5.34 /usr/local/lib/site_perl) at /home/will/LifeLog/htdocs/cgi-bin/CNFServices.cgi line 11.
+BEGIN failed--compilation aborted at /home/will/LifeLog/htdocs/cgi-bin/CNFServices.cgi line 11.
+Can't locate CGI/Tiny.pm in @INC (you may need to install the CGI::Tiny module) (@INC contains: /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.34.0 /usr/local/share/perl/5.34.0 /usr/lib/x86_64-linux-gnu/perl5/5.34 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl-base /usr/lib/x86_64-linux-gnu/perl/5.34 /usr/share/perl/5.34 /usr/local/lib/site_perl) at /home/will/LifeLog/htdocs/cgi-bin/CNFServices.cgi line 11.
+BEGIN failed--compilation aborted at /home/will/LifeLog/htdocs/cgi-bin/CNFServices.cgi line 11.
+Can't locate CGI/Tiny.pm in @INC (you may need to install the CGI::Tiny module) (@INC contains: /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.34.0 /usr/local/share/perl/5.34.0 /usr/lib/x86_64-linux-gnu/perl5/5.34 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl-base /usr/lib/x86_64-linux-gnu/perl/5.34 /usr/share/perl/5.34 /usr/local/lib/site_perl) at /home/will/LifeLog/htdocs/cgi-bin/CNFServices.cgi line 11.
+BEGIN failed--compilation aborted at /home/will/LifeLog/htdocs/cgi-bin/CNFServices.cgi line 11.
+Can't locate CGI/Tiny.pm in @INC (you may need to install the CGI::Tiny module) (@INC contains: /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.34.0 /usr/local/share/perl/5.34.0 /usr/lib/x86_64-linux-gnu/perl5/5.34 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl-base /usr/lib/x86_64-linux-gnu/perl/5.34 /usr/share/perl/5.34 /usr/local/lib/site_perl) at /home/will/LifeLog/htdocs/cgi-bin/CNFServices.cgi line 11.
+BEGIN failed--compilation aborted at /home/will/LifeLog/htdocs/cgi-bin/CNFServices.cgi line 11.
+Can't locate CGI/Tiny.pm in @INC (you may need to install the CGI::Tiny module) (@INC contains: /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.34.0 /usr/local/share/perl/5.34.0 /usr/lib/x86_64-linux-gnu/perl5/5.34 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl-base /usr/lib/x86_64-linux-gnu/perl/5.34 /usr/share/perl/5.34 /usr/local/lib/site_perl) at /home/will/LifeLog/htdocs/cgi-bin/CNFServices.cgi line 11.
+BEGIN failed--compilation aborted at /home/will/LifeLog/htdocs/cgi-bin/CNFServices.cgi line 11.
+[Sun Oct  1 21:12:17 2023] CNFServices.cgi: Can't locate lib/relative.pm in @INC (you may need to install the lib::relative module) (@INC contains: /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.34.0 /usr/local/share/perl/5.34.0 /usr/lib/x86_64-linux-gnu/perl5/5.34 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl-base /usr/lib/x86_64-linux-gnu/perl/5.34 /usr/share/perl/5.34 /usr/local/lib/site_perl) at /home/will/LifeLog/htdocs/cgi-bin/CNFServices.cgi line 24.
+[Sun Oct  1 21:12:17 2023] CNFServices.cgi: BEGIN failed--compilation aborted at /home/will/LifeLog/htdocs/cgi-bin/CNFServices.cgi line 24.
+[Sun Oct  1 21:12:17 2023] CNFServices.cgi: cgi exited without rendering a response
+[Sun Oct  1 21:12:53 2023] CNFServices.cgi: Can't locate lib/relative.pm in @INC (you may need to install the lib::relative module) (@INC contains: /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.34.0 /usr/local/share/perl/5.34.0 /usr/lib/x86_64-linux-gnu/perl5/5.34 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl-base /usr/lib/x86_64-linux-gnu/perl/5.34 /usr/share/perl/5.34 /usr/local/lib/site_perl) at /home/will/LifeLog/htdocs/cgi-bin/CNFServices.cgi line 24.
+[Sun Oct  1 21:12:53 2023] CNFServices.cgi: BEGIN failed--compilation aborted at /home/will/LifeLog/htdocs/cgi-bin/CNFServices.cgi line 24.
+[Sun Oct  1 21:12:53 2023] CNFServices.cgi: cgi exited without rendering a response
+[Sun Oct  1 21:14:28 2023] CNFServices.cgi: Use of uninitialized value $Description in concatenation (.) or string at /home/will/LifeLog/htdocs/cgi-bin/system/modules/RSSFeedsPlugin.pm line 132.
+[Sun Oct  1 21:29:05 2023] CNFServices.cgi: Wide character in print at /home/will/LifeLog/htdocs/cgi-bin/system/modules/RSSFeedsPlugin.pm line 92.
+[Mon Oct  2 01:35:09 2023] CNFServices.cgi: Wide character in print at /home/will/LifeLog/htdocs/cgi-bin/system/modules/RSSFeedsPlugin.pm line 268.
+[Mon Oct  2 01:35:11 2023] CNFServices.cgi: Wide character in print at /home/will/LifeLog/htdocs/cgi-bin/system/modules/RSSFeedsPlugin.pm line 92.
+[Mon Oct  2 03:40:56 2023] CNFServices.cgi: Use of uninitialized value $Description in concatenation (.) or string at /home/will/LifeLog/htdocs/cgi-bin/system/modules/RSSFeedsPlugin.pm line 132.
+[Mon Oct  2 03:42:06 2023] index.cgi: Use of uninitialized value in numeric ge (>=) at system/modules/MarkdownPlugin.pm line 252.
+[Mon Oct  2 03:42:06 2023] index.cgi: Use of uninitialized value in numeric ge (>=) at system/modules/MarkdownPlugin.pm line 252.
+[Mon Oct  2 03:42:06 2023] index.cgi: Use of uninitialized value in numeric ge (>=) at system/modules/MarkdownPlugin.pm line 252.
+[Mon Oct  2 03:42:06 2023] index.cgi: Use of uninitialized value in numeric ge (>=) at system/modules/MarkdownPlugin.pm line 252.
+[Mon Oct  2 03:42:06 2023] index.cgi: Use of uninitialized value in numeric ge (>=) at system/modules/MarkdownPlugin.pm line 252.
+[Mon Oct  2 03:42:06 2023] index.cgi: Use of uninitialized value in numeric ge (>=) at system/modules/MarkdownPlugin.pm line 252.
+[Mon Oct  2 03:42:06 2023] index.cgi: Use of uninitialized value in numeric ge (>=) at system/modules/MarkdownPlugin.pm line 252.
+[Mon Oct  2 03:42:06 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 104.
+[Mon Oct  2 03:42:06 2023] index.cgi: Use of uninitialized value in numeric ge (>=) at system/modules/MarkdownPlugin.pm line 252.
+[Mon Oct  2 03:42:06 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 104.
+[Mon Oct  2 03:42:06 2023] index.cgi: Use of uninitialized value in numeric ge (>=) at system/modules/MarkdownPlugin.pm line 252.
+[Mon Oct  2 03:42:06 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 104.
+[Mon Oct  2 03:42:06 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 104.
+[Mon Oct  2 03:42:06 2023] index.cgi: Use of uninitialized value in numeric ge (>=) at system/modules/MarkdownPlugin.pm line 252.
+[Mon Oct  2 03:42:06 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 104.
+[Mon Oct  2 03:42:06 2023] index.cgi: Use of uninitialized value in numeric ge (>=) at system/modules/MarkdownPlugin.pm line 252.
+[Mon Oct  2 03:42:06 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 104.
+[Mon Oct  2 03:42:06 2023] index.cgi: Use of uninitialized value in numeric ge (>=) at system/modules/MarkdownPlugin.pm line 252.
+[Mon Oct  2 03:42:06 2023] index.cgi: Use of uninitialized value in numeric ge (>=) at system/modules/MarkdownPlugin.pm line 252.
+[Mon Oct  2 03:42:06 2023] index.cgi: Use of uninitialized value in numeric ge (>=) at system/modules/MarkdownPlugin.pm line 252.
+[Mon Oct  2 03:42:06 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 104.
+[Mon Oct  2 03:42:06 2023] index.cgi: Use of uninitialized value $cc in concatenation (.) or string at system/modules/MarkdownPlugin.pm line 681.
+[Mon Oct  2 03:42:06 2023] index.cgi: Use of uninitialized value $cc in concatenation (.) or string at system/modules/MarkdownPlugin.pm line 658.
+[Mon Oct  2 03:42:06 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 104.
+[Mon Oct  2 03:42:08 2023] index.cgi: Use of uninitialized value $cc in concatenation (.) or string at system/modules/MarkdownPlugin.pm line 658.
+[Mon Oct  2 03:42:08 2023] index.cgi: Use of uninitialized value $cc in concatenation (.) or string at system/modules/MarkdownPlugin.pm line 681.
+[Mon Oct  2 03:42:08 2023] index.cgi: Use of uninitialized value $cc in concatenation (.) or string at system/modules/MarkdownPlugin.pm line 658.
+[Mon Oct  2 03:42:08 2023] index.cgi: Use of uninitialized value $cc in concatenation (.) or string at system/modules/MarkdownPlugin.pm line 658.
+[Mon Oct  2 03:42:08 2023] index.cgi: Wide character in say at /home/will/LifeLog/htdocs/cgi-bin/index.cgi line 50.
+[Mon Oct  2 04:25:40 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 104.
+[Mon Oct  2 04:25:40 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 104.
+[Mon Oct  2 04:26:16 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 104.
+[Mon Oct  2 04:26:16 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 104.
+[Mon Oct  2 04:26:16 2023] index.cgi: Use of uninitialized value $cc in concatenation (.) or string at system/modules/MarkdownPlugin.pm line 681.
+[Mon Oct  2 04:26:16 2023] index.cgi: Use of uninitialized value $cc in concatenation (.) or string at system/modules/MarkdownPlugin.pm line 658.
+[Mon Oct  2 04:26:16 2023] index.cgi: Use of uninitialized value $cc in concatenation (.) or string at system/modules/MarkdownPlugin.pm line 658.
+[Mon Oct  2 04:26:16 2023] index.cgi: Use of uninitialized value $cc in concatenation (.) or string at system/modules/MarkdownPlugin.pm line 658.
+[Mon Oct  2 04:26:16 2023] index.cgi: Use of uninitialized value $cc in concatenation (.) or string at system/modules/MarkdownPlugin.pm line 658.
+[Mon Oct  2 04:26:16 2023] index.cgi: Use of uninitialized value $cc in concatenation (.) or string at system/modules/MarkdownPlugin.pm line 658.
+[Mon Oct  2 04:26:16 2023] index.cgi: Use of uninitialized value $cc in concatenation (.) or string at system/modules/MarkdownPlugin.pm line 658.
+[Mon Oct  2 04:26:16 2023] index.cgi: Use of uninitialized value $cc in concatenation (.) or string at system/modules/MarkdownPlugin.pm line 658.
+[Mon Oct  2 04:26:16 2023] index.cgi: Use of uninitialized value $cc in concatenation (.) or string at system/modules/MarkdownPlugin.pm line 658.
+[Mon Oct  2 04:26:16 2023] index.cgi: Use of uninitialized value $cc in concatenation (.) or string at system/modules/MarkdownPlugin.pm line 658.
+[Mon Oct  2 04:26:17 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 104.
+[Mon Oct  2 04:27:06 2023] index.cgi: Wide character in say at /home/will/LifeLog/htdocs/cgi-bin/index.cgi line 50.
+[Mon Oct  2 04:28:41 2023] json.cgi: Use of uninitialized value in string eq at /home/will/LifeLog/htdocs/cgi-bin/json.cgi line 133.
+tar: Removing leading `../../' from member names
+tar: Removing leading `../../' from hard link targets
+[Mon Oct  2 04:31:17 2023] stats.cgi: CGI::Pretty is DEPRECATED and will be removed in a future release. Please see https://github.com/leejo/CGI.pm/issues/162 for more information at /usr/local/share/perl/5.34.0/CGI/Pretty.pm line 20.
+[Mon Oct  2 04:34:20 2023] data.cgi: CGI::param called in list context from /home/will/LifeLog/htdocs/cgi-bin/data.cgi line 147, this can lead to vulnerabilities. See the warning in "Fetching the value or values of a single named parameter" at /usr/local/share/perl/5.34.0/CGI.pm line 415.
+[Mon Oct  2 04:34:25 2023] data.cgi: CGI::param called in list context from /home/will/LifeLog/htdocs/cgi-bin/data.cgi line 236, this can lead to vulnerabilities. See the warning in "Fetching the value or values of a single named parameter" at /usr/local/share/perl/5.34.0/CGI.pm line 415.
+[Mon Oct  2 04:34:56 2023] data.cgi: CGI::param called in list context from /home/will/LifeLog/htdocs/cgi-bin/data.cgi line 147, this can lead to vulnerabilities. See the warning in "Fetching the value or values of a single named parameter" at /usr/local/share/perl/5.34.0/CGI.pm line 415.
+[Mon Oct  2 04:35:02 2023] data.cgi: CGI::param called in list context from /home/will/LifeLog/htdocs/cgi-bin/data.cgi line 236, this can lead to vulnerabilities. See the warning in "Fetching the value or values of a single named parameter" at /usr/local/share/perl/5.34.0/CGI.pm line 415.
+[Mon Oct  2 04:57:22 2023] CNFServices.cgi: Wide character in print at /home/will/LifeLog/htdocs/cgi-bin/system/modules/RSSFeedsPlugin.pm line 92.
+[Mon Oct  2 04:58:01 2023] CNFServices.cgi: Wide character in print at /home/will/LifeLog/htdocs/cgi-bin/system/modules/RSSFeedsPlugin.pm line 92.
+[Tue Oct  3 05:24:58 2023] CNFServices.cgi: Wide character in print at /home/will/LifeLog/htdocs/cgi-bin/system/modules/RSSFeedsPlugin.pm line 92.
+[Tue Oct  3 05:24:58 2023] CNFServices.cgi: Use of uninitialized value $Description in concatenation (.) or string at /home/will/LifeLog/htdocs/cgi-bin/system/modules/RSSFeedsPlugin.pm line 132.
+[Wed Oct  4 05:35:47 2023] json.cgi: Use of uninitialized value in string eq at /home/will/LifeLog/htdocs/cgi-bin/json.cgi line 133.
+[Wed Oct  4 05:42:18 2023] json.cgi: WARNING: The key derivation method "opensslv1" is deprecated. Using -pbkdf=>'pbkdf2' would be better.
+[Wed Oct  4 05:42:18 2023] json.cgi: Pass -nodeprecate=>1 to inhibit this message.
+[Wed Oct  4 05:42:18 2023] json.cgi:  at /home/will/LifeLog/htdocs/cgi-bin/json.cgi line 110.
+[Wed Oct  4 05:42:26 2023] json.cgi: Use of uninitialized value in string eq at /home/will/LifeLog/htdocs/cgi-bin/json.cgi line 133.
+[Fri Oct 13 05:03:11 2023] login_ctr.cgi: Use of uninitialized value $res[0] in addition (+) at system/modules/Settings.pm line 494.
+[Fri Oct 13 05:03:11 2023] login_ctr.cgi: Use of uninitialized value $where in concatenation (.) or string at system/modules/Settings.pm line 384.
+[Fri Oct 13 05:03:11 2023] login_ctr.cgi: Use of uninitialized value $dnm in string eq at /home/will/LifeLog/htdocs/cgi-bin/login_ctr.cgi line 585.
+[Fri Oct 13 05:03:11 2023] login_ctr.cgi: Use of uninitialized value $dnm in concatenation (.) or string at /home/will/LifeLog/htdocs/cgi-bin/login_ctr.cgi line 586.
+[Fri Oct 13 05:03:57 2023] stats.cgi: CGI::Pretty is DEPRECATED and will be removed in a future release. Please see https://github.com/leejo/CGI.pm/issues/162 for more information at /usr/local/share/perl/5.34.0/CGI/Pretty.pm line 20.
+[Fri Oct 13 05:04:48 2023] stats.cgi: CGI::Pretty is DEPRECATED and will be removed in a future release. Please see https://github.com/leejo/CGI.pm/issues/162 for more information at /usr/local/share/perl/5.34.0/CGI/Pretty.pm line 20.
+[Fri Oct 13 05:07:59 2023] data.cgi: CGI::param called in list context from /home/will/LifeLog/htdocs/cgi-bin/data.cgi line 147, this can lead to vulnerabilities. See the warning in "Fetching the value or values of a single named parameter" at /usr/local/share/perl/5.34.0/CGI.pm line 415.
+[Fri Oct 13 05:08:46 2023] main.cgi: Argument "999,999,999,999,999,945,575,230,987,042,816.00" isn't numeric in numeric lt (<) at /home/will/LifeLog/htdocs/cgi-bin/main.cgi line 751.
+[Fri Oct 13 05:14:55 2023] stats.cgi: CGI::Pretty is DEPRECATED and will be removed in a future release. Please see https://github.com/leejo/CGI.pm/issues/162 for more information at /usr/local/share/perl/5.34.0/CGI/Pretty.pm line 20.
+[Fri Oct 13 05:15:00 2023] main.cgi: Argument "999,999,999,999,999,945,575,230,987,042,816.00" isn't numeric in numeric lt (<) at /home/will/LifeLog/htdocs/cgi-bin/main.cgi line 751.
+[Fri Oct 13 05:15:04 2023] main.cgi: Argument "999,999,999,999,999,945,575,230,987,042,816.00" isn't numeric in numeric lt (<) at /home/will/LifeLog/htdocs/cgi-bin/main.cgi line 751.
+2023-10-24 18:50:41: (server.c.1551) server started (lighttpd/1.4.63)
+2023-10-24 19:18:54: (connections.c.718) invalid request-line -> sending Status 400
+2023-10-24 20:04:22: (connections.c.718) invalid request-line -> sending Status 400
+2023-10-24 21:01:45: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-24 21:01:46: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-24 21:01:47: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-10-24 21:20:27: (connections.c.718) invalid request-line -> sending Status 400
+2023-10-24 21:35:45: (connections.c.718) invalid request-line -> sending Status 400
+2023-10-24 21:58:21: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-10-24 22:36:09: (connections.c.718) invalid request-line -> sending Status 400
+2023-10-24 22:50:58: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-24 22:50:58: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-24 22:50:58: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-10-24 23:14:04: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-24 23:14:42: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-24 23:15:49: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-24 23:15:49: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-24 23:15:49: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-10-24 23:22:15: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-24 23:23:55: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-24 23:24:28: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-10-24 23:33:26: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-24 23:33:26: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-24 23:33:26: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-10-24 23:43:51: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-10-24 23:50:10: (connections.c.718) invalid request-line -> sending Status 400
+2023-10-24 23:58:24: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-10-25 01:50:17: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-10-25 01:50:17: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-10-25 02:09:26: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-10-25 02:20:00: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-10-25 03:23:38: (connections.c.718) invalid request-line -> sending Status 400
+2023-10-25 04:04:14: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-10-25 04:43:55: (connections.c.718) invalid request-line -> sending Status 400
+2023-10-25 04:44:10: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+[Wed Oct 25 05:02:14 2023] CNFServices.cgi: Use of uninitialized value $Description in concatenation (.) or string at /home/will/LifeLog/htdocs/cgi-bin/system/modules/RSSFeedsPlugin.pm line 132.
+  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
+                                 Dload  Upload   Total   Spent    Left  Speed
+\r  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0\r100  8192    0  8192    0     0   8960      0 --:--:-- --:--:-- --:--:--  8953\r100 79954    0 79954    0     0  69581      0 --:--:--  0:00:01 --:--:-- 69646
+[Wed Oct 25 05:03:48 2023] CNFServices.cgi: Wide character in print at /home/will/LifeLog/htdocs/cgi-bin/system/modules/RSSFeedsPlugin.pm line 92.
+[Wed Oct 25 05:04:23 2023] CNFServices.cgi: Use of uninitialized value $Description in concatenation (.) or string at /home/will/LifeLog/htdocs/cgi-bin/system/modules/RSSFeedsPlugin.pm line 132.
+2023-10-25 07:06:35: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 07:50:50: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-10-25 10:32:42: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-10-25 10:56:30: (connections.c.718) invalid request-line -> sending Status 400
+2023-10-25 10:57:46: (connections.c.718) invalid request-line -> sending Status 400
+2023-10-25 11:02:21: (connections.c.718) invalid request-line -> sending Status 400
+2023-10-25 11:10:02: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-10-25 13:49:49: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-10-25 16:15:04: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-10-25 16:15:04: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-10-25 17:48:51: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-10-25 19:30:19: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 19:30:19: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 19:30:19: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-25 19:30:19: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 19:30:19: (mod_openssl.c.3247) SSL: 1 error:0A0000FC:SSL routines::unknown protocol
+2023-10-25 20:42:50: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-10-25 21:13:25: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-10-25 22:33:55: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-10-25 23:00:14: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-10-25 23:10:23: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:23: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:23: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-10-25 23:10:24: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:24: (mod_openssl.c.3135) SSL: renegotiation initiated by client, killing connection
+2023-10-25 23:10:24: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:24: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:24: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:24: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:24: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:24: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:24: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:25: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:25: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:25: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:25: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:25: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:25: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:25: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:26: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:26: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:26: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:26: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:26: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:26: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:26: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:26: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:26: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:26: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:26: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:26: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:26: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:26: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:26: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:26: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:26: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:27: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:27: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:27: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:27: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:27: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:27: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:27: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:27: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:27: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:27: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:27: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:27: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:27: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:27: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:27: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:28: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:28: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:28: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:28: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:28: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:28: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:28: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:28: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:28: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:28: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:28: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:28: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:28: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:28: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:29: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:29: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:29: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:29: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:29: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:29: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:29: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:29: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:29: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:29: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:29: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:29: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:29: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:30: (mod_openssl.c.3247) SSL: 1 error:0A0000F4:SSL routines::unexpected message
+2023-10-25 23:10:30: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:30: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:30: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:30: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:30: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:30: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:30: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:30: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:30: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:30: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:30: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:30: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:30: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:30: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:31: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:31: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:31: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:31: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:31: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:31: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:31: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:31: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:31: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:31: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:31: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:31: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:31: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:31: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:31: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:31: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:31: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:31: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:31: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:31: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:31: (mod_openssl.c.3247) SSL: 1 error:0A0000F4:SSL routines::unexpected message
+2023-10-25 23:10:32: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:32: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:32: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:32: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:32: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:32: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-25 23:10:32: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:32: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:32: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:32: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:32: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:32: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:32: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:32: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:32: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:32: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:32: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:32: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:32: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:33: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:33: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:33: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:33: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:33: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:33: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:33: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:33: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:33: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:33: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:33: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:33: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:33: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:33: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:33: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:33: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:33: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:33: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:33: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:33: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:33: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:33: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:33: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:34: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:34: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:34: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:34: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:34: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:34: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:34: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:34: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:34: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:34: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:34: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:34: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:34: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:34: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:34: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:34: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:34: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:34: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:34: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:34: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:34: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:34: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:34: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:34: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:34: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:35: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:35: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:35: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:35: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:35: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:35: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:35: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:35: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:35: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:35: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:35: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:35: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:35: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:35: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:35: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:35: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:35: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:35: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:35: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:36: (mod_openssl.c.3247) SSL: 1 error:1C800066:Provider routines::cipher operation failed
+2023-10-25 23:10:36: (mod_openssl.c.3247) SSL: 1 error:0A000119:SSL routines::decryption failed or bad record mac
+2023-10-25 23:10:36: (mod_openssl.c.3247) SSL: 1 error:1C800066:Provider routines::cipher operation failed
+2023-10-25 23:10:36: (mod_openssl.c.3247) SSL: 1 error:0A000119:SSL routines::decryption failed or bad record mac
+2023-10-25 23:10:36: (mod_openssl.c.3247) SSL: 1 error:1C800066:Provider routines::cipher operation failed
+2023-10-25 23:10:36: (mod_openssl.c.3247) SSL: 1 error:0A000119:SSL routines::decryption failed or bad record mac
+2023-10-25 23:10:36: (mod_openssl.c.3247) SSL: 1 error:1C800066:Provider routines::cipher operation failed
+2023-10-25 23:10:36: (mod_openssl.c.3247) SSL: 1 error:0A000119:SSL routines::decryption failed or bad record mac
+2023-10-25 23:10:36: (mod_openssl.c.3247) SSL: 1 error:1C800066:Provider routines::cipher operation failed
+2023-10-25 23:10:36: (mod_openssl.c.3247) SSL: 1 error:0A000119:SSL routines::decryption failed or bad record mac
+2023-10-25 23:10:36: (mod_openssl.c.3247) SSL: 1 error:1C800066:Provider routines::cipher operation failed
+2023-10-25 23:10:36: (mod_openssl.c.3247) SSL: 1 error:0A000119:SSL routines::decryption failed or bad record mac
+2023-10-25 23:10:36: (mod_openssl.c.3247) SSL: 1 error:1C800066:Provider routines::cipher operation failed
+2023-10-25 23:10:36: (mod_openssl.c.3247) SSL: 1 error:0A000119:SSL routines::decryption failed or bad record mac
+2023-10-25 23:10:36: (mod_openssl.c.3247) SSL: 1 error:1C800066:Provider routines::cipher operation failed
+2023-10-25 23:10:36: (mod_openssl.c.3247) SSL: 1 error:0A000119:SSL routines::decryption failed or bad record mac
+2023-10-25 23:10:36: (mod_openssl.c.3247) SSL: 1 error:1C800066:Provider routines::cipher operation failed
+2023-10-25 23:10:36: (mod_openssl.c.3247) SSL: 1 error:0A000119:SSL routines::decryption failed or bad record mac
+2023-10-25 23:10:36: (mod_openssl.c.3247) SSL: 1 error:1C800066:Provider routines::cipher operation failed
+2023-10-25 23:10:36: (mod_openssl.c.3247) SSL: 1 error:0A000119:SSL routines::decryption failed or bad record mac
+2023-10-25 23:10:36: (mod_openssl.c.3247) SSL: 1 error:0A0000FC:SSL routines::unknown protocol
+2023-10-25 23:10:36: (mod_openssl.c.3247) SSL: 1 error:0A0000FC:SSL routines::unknown protocol
+2023-10-25 23:10:36: (mod_openssl.c.3247) SSL: 1 error:0A0000FC:SSL routines::unknown protocol
+2023-10-25 23:10:36: (mod_openssl.c.3247) SSL: 1 error:0A0000FC:SSL routines::unknown protocol
+2023-10-25 23:10:37: (mod_openssl.c.3247) SSL: 1 error:1C800066:Provider routines::cipher operation failed
+2023-10-25 23:10:37: (mod_openssl.c.3247) SSL: 1 error:0A000119:SSL routines::decryption failed or bad record mac
+2023-10-25 23:10:37: (mod_openssl.c.3247) SSL: 1 error:0A0000FC:SSL routines::unknown protocol
+2023-10-25 23:10:37: (mod_openssl.c.3247) SSL: 1 error:0A0000FC:SSL routines::unknown protocol
+2023-10-25 23:10:37: (mod_openssl.c.3247) SSL: 1 error:1C800066:Provider routines::cipher operation failed
+2023-10-25 23:10:37: (mod_openssl.c.3247) SSL: 1 error:0A000119:SSL routines::decryption failed or bad record mac
+2023-10-25 23:10:37: (mod_openssl.c.3247) SSL: 1 error:0A0000FC:SSL routines::unknown protocol
+2023-10-25 23:10:37: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-25 23:10:37: (mod_openssl.c.3247) SSL: 1 error:1C800066:Provider routines::cipher operation failed
+2023-10-25 23:10:37: (mod_openssl.c.3247) SSL: 1 error:0A000119:SSL routines::decryption failed or bad record mac
+2023-10-25 23:10:37: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-25 23:10:37: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-25 23:10:37: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-25 23:10:37: (mod_openssl.c.3247) SSL: 1 error:1C800066:Provider routines::cipher operation failed
+2023-10-25 23:10:37: (mod_openssl.c.3247) SSL: 1 error:0A000119:SSL routines::decryption failed or bad record mac
+2023-10-25 23:10:37: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-25 23:10:37: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-25 23:10:37: (mod_openssl.c.3247) SSL: 1 error:1C800066:Provider routines::cipher operation failed
+2023-10-25 23:10:37: (mod_openssl.c.3247) SSL: 1 error:0A000119:SSL routines::decryption failed or bad record mac
+2023-10-25 23:10:37: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-25 23:10:37: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-25 23:10:37: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-25 23:10:37: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-25 23:10:37: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-25 23:10:37: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-25 23:10:38: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-25 23:10:38: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-25 23:10:38: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-25 23:10:38: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-25 23:10:38: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-25 23:10:38: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-25 23:10:38: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-25 23:10:38: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-25 23:10:38: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-25 23:10:38: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-25 23:10:38: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-25 23:10:38: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-25 23:10:38: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-25 23:10:38: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-25 23:10:38: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-25 23:10:38: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-25 23:10:38: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-25 23:10:38: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-25 23:10:38: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-25 23:10:38: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-25 23:10:38: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-25 23:10:38: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-25 23:10:38: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-25 23:10:38: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-25 23:10:39: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-25 23:10:39: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-25 23:10:39: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-25 23:10:39: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-25 23:10:39: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-25 23:10:39: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-25 23:10:39: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-25 23:10:39: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-25 23:10:39: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-25 23:10:39: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-25 23:10:39: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-25 23:10:39: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-25 23:10:39: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-25 23:10:39: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-25 23:10:39: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-25 23:10:39: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-25 23:10:39: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-25 23:10:39: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-25 23:10:39: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-25 23:10:39: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-25 23:10:39: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-25 23:10:39: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-25 23:10:39: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-25 23:10:39: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-25 23:10:40: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-25 23:10:40: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-25 23:10:40: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-25 23:10:40: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-25 23:10:40: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-25 23:10:40: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-25 23:10:40: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-25 23:10:40: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-25 23:10:40: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-25 23:10:40: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-25 23:10:40: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-25 23:10:40: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-25 23:10:40: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-25 23:10:40: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-25 23:10:40: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-25 23:10:40: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-25 23:10:40: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-25 23:10:40: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-25 23:10:40: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-25 23:10:40: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-25 23:10:40: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:40: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:40: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:40: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:40: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:41: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:41: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:41: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:41: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:41: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:41: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:41: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:41: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:41: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:41: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:41: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:41: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:41: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:41: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:41: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:41: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:41: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:41: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:41: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:41: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:41: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:41: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:42: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:42: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:42: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:42: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:42: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:42: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:42: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:42: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:42: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:42: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:42: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:42: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:42: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:42: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:42: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:42: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:42: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:42: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:42: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:42: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:42: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:42: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:42: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:42: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:42: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:42: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:43: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:43: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:43: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:43: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:43: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:43: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:43: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:43: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:43: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:43: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:43: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:43: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:43: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:43: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:43: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:43: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:43: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:43: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:43: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:43: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:43: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:43: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:43: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:43: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:43: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:43: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:44: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-25 23:10:44: (mod_openssl.c.3247) SSL: 1 error:0A000065:SSL routines::no suitable key share
+2023-10-25 23:10:44: (mod_openssl.c.3247) SSL: 1 error:0A000065:SSL routines::no suitable key share
+2023-10-25 23:10:44: (mod_openssl.c.3247) SSL: 1 error:0A000065:SSL routines::no suitable key share
+2023-10-25 23:10:44: (mod_openssl.c.3247) SSL: 1 error:0A000065:SSL routines::no suitable key share
+2023-10-25 23:10:44: (mod_openssl.c.3247) SSL: 1 error:0A000065:SSL routines::no suitable key share
+2023-10-25 23:10:44: (mod_openssl.c.3247) SSL: 1 error:0A000065:SSL routines::no suitable key share
+2023-10-25 23:10:44: (mod_openssl.c.3247) SSL: 1 error:0A000065:SSL routines::no suitable key share
+2023-10-25 23:10:44: (mod_openssl.c.3247) SSL: 1 error:0A000065:SSL routines::no suitable key share
+2023-10-25 23:10:44: (mod_openssl.c.3247) SSL: 1 error:0A000065:SSL routines::no suitable key share
+2023-10-25 23:10:44: (mod_openssl.c.3247) SSL: 1 error:0A000065:SSL routines::no suitable key share
+2023-10-25 23:10:44: (mod_openssl.c.3247) SSL: 1 error:0A000065:SSL routines::no suitable key share
+2023-10-25 23:10:44: (mod_openssl.c.3247) SSL: 1 error:0A000065:SSL routines::no suitable key share
+2023-10-25 23:10:44: (mod_openssl.c.3247) SSL: 1 error:0A000065:SSL routines::no suitable key share
+2023-10-25 23:10:44: (mod_openssl.c.3247) SSL: 1 error:0A000065:SSL routines::no suitable key share
+2023-10-25 23:10:44: (mod_openssl.c.3247) SSL: 1 error:0A000065:SSL routines::no suitable key share
+2023-10-25 23:10:44: (mod_openssl.c.3247) SSL: 1 error:0A000065:SSL routines::no suitable key share
+2023-10-25 23:10:44: (mod_openssl.c.3247) SSL: 1 error:0A000065:SSL routines::no suitable key share
+2023-10-25 23:10:44: (mod_openssl.c.3247) SSL: 1 error:0A000065:SSL routines::no suitable key share
+2023-10-25 23:10:44: (mod_openssl.c.3247) SSL: 1 error:0A000065:SSL routines::no suitable key share
+2023-10-25 23:10:44: (mod_openssl.c.3247) SSL: 1 error:0A000065:SSL routines::no suitable key share
+2023-10-25 23:10:44: (mod_openssl.c.3247) SSL: 1 error:0A000065:SSL routines::no suitable key share
+2023-10-25 23:10:44: (mod_openssl.c.3247) SSL: 1 error:0A000065:SSL routines::no suitable key share
+2023-10-25 23:15:04: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-25 23:58:41: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-26 00:15:42: (connections.c.718) invalid request-line -> sending Status 400
+2023-10-26 00:47:38: (connections.c.718) invalid request-line -> sending Status 400
+2023-10-26 01:00:21: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-10-26 01:16:22: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-26 02:33:51: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-26 02:33:52: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-26 02:33:52: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-26 02:33:52: (mod_openssl.c.3247) SSL: 1 error:0A0000FC:SSL routines::unknown protocol
+2023-10-26 02:33:52: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-26 05:43:36: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-10-26 05:55:46: (connections.c.718) invalid request-line -> sending Status 400
+2023-10-26 06:05:13: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-10-26 07:07:40: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-26 07:08:11: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-26 07:10:15: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-26 07:10:15: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-26 07:10:15: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-10-26 07:56:38: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-10-26 07:56:38: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-10-26 08:06:42: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-10-26 08:29:16: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-26 08:29:20: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-26 08:29:27: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-10-26 09:50:00: (connections.c.718) invalid request-line -> sending Status 400
+2023-10-26 09:55:28: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-10-26 11:39:47: (connections.c.718) invalid request-line -> sending Status 400
+2023-10-26 12:36:55: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-10-26 13:10:37: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-10-26 13:54:52: (connections.c.718) invalid request-line -> sending Status 400
+2023-10-26 14:18:03: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-10-26 14:19:48: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-10-26 14:19:49: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-10-26 14:19:49: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-10-26 14:19:51: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-26 14:19:52: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-26 14:19:52: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-10-26 14:19:53: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-10-26 14:19:53: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-10-26 14:25:47: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-26 14:34:16: (connections.c.718) invalid request-line -> sending Status 400
+2023-10-26 15:54:58: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-26 16:53:18: (connections.c.718) invalid request-line -> sending Status 400
+2023-10-26 17:13:13: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-10-26 18:14:07: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-26 18:14:07: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-26 18:14:08: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-10-26 18:29:10: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-10-26 19:31:15: (connections.c.718) invalid request-line -> sending Status 400
+2023-10-26 19:56:32: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-10-26 20:06:28: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-26 20:21:57: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-10-26 20:23:26: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-10-26 21:21:57: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-10-26 21:21:57: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-10-26 21:45:23: (connections.c.718) invalid request-line -> sending Status 400
+2023-10-26 23:21:01: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-26 23:21:02: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-26 23:21:02: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-10-26 23:21:26: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-10-26 23:29:25: (connections.c.718) invalid request-line -> sending Status 400
+2023-10-26 23:44:40: (connections.c.718) invalid request-line -> sending Status 400
+2023-10-27 00:30:05: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-10-27 00:45:54: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-10-27 00:45:54: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-10-27 00:45:54: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-10-27 00:45:54: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-10-27 00:45:54: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-10-27 00:45:54: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-10-27 01:22:57: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-10-27 01:54:11: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-10-27 01:54:30: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-27 01:54:46: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-10-27 01:55:02: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-27 01:57:03: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-27 01:57:03: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-27 01:57:03: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-10-27 02:12:30: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-10-27 03:33:30: (connections.c.718) invalid request-line -> sending Status 400
+2023-10-27 03:53:12: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-10-27 04:33:15: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-10-27 04:33:17: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-10-27 04:33:17: (connections.c.718) invalid request-line -> sending Status 400
+2023-10-27 04:33:18: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-10-27 04:33:20: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-10-27 04:33:21: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-10-27 04:33:22: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-10-27 04:33:22: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-10-27 05:11:38: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-10-27 05:29:51: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-27 05:29:51: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-27 05:29:52: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-10-27 05:39:46: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-10-27 05:50:53: (connections.c.718) invalid request-line -> sending Status 400
+2023-10-27 06:13:38: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-10-27 06:29:48: (connections.c.718) invalid request-line -> sending Status 400
+2023-10-27 06:50:01: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-10-27 07:49:11: (connections.c.718) invalid request-line -> sending Status 400
+2023-10-27 08:15:26: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-10-27 08:15:26: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-10-27 08:15:26: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-10-27 09:13:57: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-10-27 09:32:17: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-27 09:35:21: (connections.c.718) invalid request-line -> sending Status 400
+2023-10-27 10:55:13: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-10-27 10:56:51: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-10-27 11:18:29: (connections.c.718) invalid request-line -> sending Status 400
+2023-10-27 12:53:52: (connections.c.718) invalid request-line -> sending Status 400
+2023-10-27 14:14:07: (connections.c.718) invalid request-line -> sending Status 400
+2023-10-27 14:45:02: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-10-27 14:45:07: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-10-27 15:13:53: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-10-27 15:47:29: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-10-27 15:47:30: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-10-27 16:07:20: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+[Fri Oct 27 16:34:05 2023] json.cgi: WARNING: The key derivation method "opensslv1" is deprecated. Using -pbkdf=>'pbkdf2' would be better.
+[Fri Oct 27 16:34:05 2023] json.cgi: Pass -nodeprecate=>1 to inhibit this message.
+[Fri Oct 27 16:34:05 2023] json.cgi:  at /home/will/LifeLog/htdocs/cgi-bin/json.cgi line 110.
+[Fri Oct 27 16:34:49 2023] json.cgi: WARNING: The key derivation method "opensslv1" is deprecated. Using -pbkdf=>'pbkdf2' would be better.
+[Fri Oct 27 16:34:49 2023] json.cgi: Pass -nodeprecate=>1 to inhibit this message.
+[Fri Oct 27 16:34:49 2023] json.cgi:  at /home/will/LifeLog/htdocs/cgi-bin/json.cgi line 110.
+[Fri Oct 27 16:34:52 2023] json.cgi: WARNING: The key derivation method "opensslv1" is deprecated. Using -pbkdf=>'pbkdf2' would be better.
+[Fri Oct 27 16:34:52 2023] json.cgi: Pass -nodeprecate=>1 to inhibit this message.
+[Fri Oct 27 16:34:52 2023] json.cgi:  at /home/will/LifeLog/htdocs/cgi-bin/json.cgi line 110.
+[Fri Oct 27 16:34:59 2023] json.cgi: WARNING: The key derivation method "opensslv1" is deprecated. Using -pbkdf=>'pbkdf2' would be better.
+[Fri Oct 27 16:34:59 2023] json.cgi: Pass -nodeprecate=>1 to inhibit this message.
+[Fri Oct 27 16:34:59 2023] json.cgi:  at /home/will/LifeLog/htdocs/cgi-bin/json.cgi line 110.
+[Fri Oct 27 16:35:06 2023] json.cgi: Use of uninitialized value in string eq at /home/will/LifeLog/htdocs/cgi-bin/json.cgi line 133.
+2023-10-27 17:06:10: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-27 17:11:01: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-27 18:02:19: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-27 18:02:20: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-27 18:02:22: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-10-27 19:56:40: (connections.c.718) invalid request-line -> sending Status 400
+2023-10-27 20:26:15: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-10-27 20:47:10: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-10-27 20:56:03: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-27 21:02:24: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-10-27 21:27:02: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-27 21:27:02: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-27 21:27:02: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-27 21:27:02: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-27 21:27:02: (mod_openssl.c.3247) SSL: 1 error:0A0000FC:SSL routines::unknown protocol
+2023-10-27 21:29:17: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-27 21:29:17: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-27 22:11:06: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-27 22:11:06: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-27 22:11:06: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-10-27 22:17:28: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-10-27 23:42:42: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-27 23:42:45: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-27 23:42:45: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-10-27 23:44:43: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-27 23:46:23: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-27 23:46:56: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-10-27 23:51:07: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-10-27 23:55:48: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-10-28 00:07:27: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-28 01:58:32: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-10-28 03:54:47: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-28 03:54:48: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-28 03:54:48: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-10-28 04:38:57: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-28 04:39:34: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-28 04:42:38: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-28 04:42:38: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-28 04:42:38: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-10-28 05:06:34: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-10-28 06:47:15: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-28 06:47:16: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-28 06:47:17: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-10-28 07:19:22: (connections.c.718) invalid request-line -> sending Status 400
+2023-10-28 08:37:25: (connections.c.718) invalid request-line -> sending Status 400
+2023-10-28 08:41:50: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-10-28 08:43:44: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-10-28 08:45:54: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-10-28 08:48:33: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-10-28 08:51:07: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-10-28 08:53:47: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-10-28 08:56:36: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-10-28 08:59:19: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-10-28 09:02:07: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-10-28 09:04:50: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-10-28 09:07:37: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-10-28 09:10:18: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-10-28 09:12:58: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-10-28 09:15:40: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-10-28 09:18:24: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-10-28 09:21:08: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-10-28 09:23:52: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-10-28 09:26:25: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-10-28 09:27:46: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-10-28 09:28:57: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-10-28 09:31:30: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-10-28 09:34:15: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-10-28 09:36:47: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-10-28 09:39:17: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-10-28 09:41:47: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-10-28 09:44:19: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-10-28 09:46:48: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-10-28 09:49:20: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-10-28 09:51:42: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-10-28 09:51:48: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-10-28 09:51:51: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-10-28 09:51:53: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-10-28 09:52:12: (connections.c.718) invalid request-line -> sending Status 400
+2023-10-28 09:52:27: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-10-28 09:54:18: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-10-28 09:56:38: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-10-28 09:59:07: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-10-28 10:01:38: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-10-28 10:04:08: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-10-28 10:06:36: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-10-28 10:09:08: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-10-28 10:32:58: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-10-28 11:30:41: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-28 11:30:41: (mod_openssl.c.3247) SSL: 1 error:0A0000FC:SSL routines::unknown protocol
+2023-10-28 11:30:41: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-28 11:30:41: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-28 11:30:41: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-28 11:30:42: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-28 11:30:42: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-28 11:30:42: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-28 11:30:42: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-28 11:30:42: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-28 11:30:42: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-28 11:30:42: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-28 11:30:42: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-28 11:30:42: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-28 11:30:42: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-28 11:30:42: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-28 11:30:42: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-28 11:30:42: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-28 11:30:42: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-28 11:30:42: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-28 11:30:42: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-28 11:30:42: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-28 11:30:42: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-28 11:30:42: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-28 11:30:42: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-28 11:30:42: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-28 11:30:43: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-28 11:30:44: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-28 11:30:44: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-28 11:30:44: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-28 11:30:46: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-28 11:30:46: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-28 11:44:52: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-10-28 13:30:40: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-10-28 13:30:41: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-10-28 14:34:49: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-28 14:43:05: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-28 14:43:05: (mod_openssl.c.3247) SSL: 1 error:0A0000FC:SSL routines::unknown protocol
+2023-10-28 14:43:05: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-28 14:52:48: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-10-28 15:04:08: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-10-28 16:46:50: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-28 16:48:52: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-28 16:48:52: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-28 16:48:53: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-10-28 18:07:38: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-28 19:20:56: (mod_openssl.c.3247) SSL: 1 error:0A000438:SSL routines::tlsv1 alert internal error
+2023-10-28 19:20:56: (mod_openssl.c.3247) SSL: 1 error:0A000438:SSL routines::tlsv1 alert internal error
+2023-10-28 19:20:56: (mod_openssl.c.3247) SSL: 1 error:0A000438:SSL routines::tlsv1 alert internal error
+2023-10-28 19:20:56: (mod_openssl.c.3247) SSL: 1 error:0A000438:SSL routines::tlsv1 alert internal error
+2023-10-28 19:20:56: (mod_openssl.c.3247) SSL: 1 error:0A000438:SSL routines::tlsv1 alert internal error
+2023-10-28 19:21:21: (mod_openssl.c.3247) SSL: 1 error:0A000438:SSL routines::tlsv1 alert internal error
+2023-10-28 19:21:21: (mod_openssl.c.3247) SSL: 1 error:0A000438:SSL routines::tlsv1 alert internal error
+2023-10-28 19:21:21: (mod_openssl.c.3247) SSL: 1 error:0A000438:SSL routines::tlsv1 alert internal error
+2023-10-28 19:21:21: (mod_openssl.c.3247) SSL: 1 error:0A000438:SSL routines::tlsv1 alert internal error
+2023-10-28 19:21:21: (mod_openssl.c.3247) SSL: 1 error:0A000438:SSL routines::tlsv1 alert internal error
+[Sat Oct 28 19:25:08 2023] json.cgi: Use of uninitialized value in string eq at /home/will/LifeLog/htdocs/cgi-bin/json.cgi line 133.
+tar: Removing leading `../../' from member names
+tar: Removing leading `../../' from hard link targets
+2023-10-28 20:36:59: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-10-28 20:37:14: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-28 20:37:16: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-28 20:37:16: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-10-28 21:39:41: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-10-28 21:39:42: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-10-28 21:39:42: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-10-28 21:39:43: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-10-28 21:39:50: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-10-28 21:39:50: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-10-28 21:39:50: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-10-28 21:39:50: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-10-28 21:39:55: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-10-28 21:39:55: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-10-28 21:39:55: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-10-28 21:39:56: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-10-28 21:42:14: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-28 21:42:14: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-28 21:42:14: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-10-28 23:44:28: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-10-29 00:37:28: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-29 00:37:28: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-29 00:37:28: (mod_openssl.c.3247) SSL: 1 error:0A0000FC:SSL routines::unknown protocol
+2023-10-29 00:37:28: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-29 00:38:44: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-10-29 01:18:33: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-29 02:28:53: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-10-29 04:21:54: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-10-29 04:22:40: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-10-29 04:22:40: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-10-29 04:28:07: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-29 04:28:41: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-29 04:31:35: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-29 04:31:35: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-29 04:31:35: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-10-29 04:38:05: (connections.c.718) invalid request-line -> sending Status 400
+2023-10-29 05:39:13: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-10-29 05:47:05: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-29 06:27:30: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-29 06:50:54: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-10-29 06:50:54: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-10-29 08:36:07: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-29 10:35:14: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-10-29 11:03:55: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-10-29 11:23:55: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-10-29 11:23:56: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-10-29 11:23:56: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-10-29 11:23:56: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-29 11:23:56: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-29 11:23:56: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-10-29 11:23:56: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-10-29 11:23:56: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-10-29 14:27:56: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-29 14:27:56: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-29 14:27:56: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-10-29 20:08:01: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-10-29 20:08:03: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-29 20:08:04: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-29 20:08:04: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-10-29 21:08:10: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-29 21:08:11: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-29 21:08:12: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-10-29 21:18:24: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-10-29 21:22:16: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-29 21:47:58: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-10-29 22:40:43: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-10-29 22:56:25: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-10-29 22:56:25: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-10-30 00:02:17: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-10-30 00:09:58: (connections.c.718) invalid request-line -> sending Status 400
+2023-10-30 00:18:59: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-10-30 00:20:38: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-10-30 00:27:51: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 00:27:51: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 00:27:51: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-10-30 01:28:56: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 02:33:59: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 02:58:51: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-10-30 02:58:51: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-10-30 03:35:31: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 03:35:32: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 03:35:32: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-10-30 03:41:41: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-10-30 03:41:42: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-10-30 03:42:09: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 03:42:15: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 03:42:17: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-10-30 03:48:33: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 03:48:33: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-30 03:48:33: (mod_openssl.c.3247) SSL: 1 error:0A0000FC:SSL routines::unknown protocol
+2023-10-30 03:48:33: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 03:48:33: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 04:49:37: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-30 04:50:02: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 04:51:15: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 04:51:15: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 04:51:15: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-10-30 05:32:30: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 05:32:35: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 05:32:38: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-10-30 05:39:09: (connections.c.718) invalid request-line -> sending Status 400
+2023-10-30 06:53:50: (connections.c.718) invalid request-line -> sending Status 400
+2023-10-30 06:54:29: (connections.c.718) invalid request-line -> sending Status 400
+2023-10-30 08:07:49: (connections.c.718) invalid request-line -> sending Status 400
+2023-10-30 10:24:38: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-10-30 10:53:27: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-10-30 10:53:28: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-10-30 10:53:31: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-10-30 10:53:32: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-10-30 10:53:34: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-10-30 10:57:28: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-10-30 11:46:14: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-10-30 12:07:00: (connections.c.718) invalid request-line -> sending Status 400
+2023-10-30 14:39:50: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 15:38:55: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-10-30 15:50:32: (mod_openssl.c.3247) SSL: 1 error:0A0000FC:SSL routines::unknown protocol
+2023-10-30 15:50:32: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 15:50:32: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 15:50:32: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-30 15:50:32: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 17:00:12: (connections.c.718) invalid request-line -> sending Status 400
+2023-10-30 18:02:23: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-10-30 18:26:12: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-10-30 19:38:27: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 21:07:08: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-10-30 21:44:03: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-10-30 21:48:46: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-10-30 21:57:24: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 21:59:32: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-10-30 21:59:33: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-10-30 22:09:47: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-10-30 22:14:33: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-10-30 22:55:43: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 22:55:43: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 22:55:43: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-10-30 23:19:27: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:27: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:27: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-10-30 23:19:28: (mod_openssl.c.3247) SSL: 1 error:0A000065:SSL routines::no suitable key share
+2023-10-30 23:19:28: (mod_openssl.c.3247) SSL: 1 error:0A000065:SSL routines::no suitable key share
+2023-10-30 23:19:28: (mod_openssl.c.3247) SSL: 1 error:0A000065:SSL routines::no suitable key share
+2023-10-30 23:19:28: (mod_openssl.c.3247) SSL: 1 error:0A000065:SSL routines::no suitable key share
+2023-10-30 23:19:28: (mod_openssl.c.3247) SSL: 1 error:0A000065:SSL routines::no suitable key share
+2023-10-30 23:19:28: (mod_openssl.c.3247) SSL: 1 error:0A000065:SSL routines::no suitable key share
+2023-10-30 23:19:28: (mod_openssl.c.3247) SSL: 1 error:0A000065:SSL routines::no suitable key share
+2023-10-30 23:19:28: (mod_openssl.c.3247) SSL: 1 error:0A000065:SSL routines::no suitable key share
+2023-10-30 23:19:28: (mod_openssl.c.3247) SSL: 1 error:0A000065:SSL routines::no suitable key share
+2023-10-30 23:19:28: (mod_openssl.c.3247) SSL: 1 error:0A000065:SSL routines::no suitable key share
+2023-10-30 23:19:28: (mod_openssl.c.3247) SSL: 1 error:0A000065:SSL routines::no suitable key share
+2023-10-30 23:19:28: (mod_openssl.c.3247) SSL: 1 error:0A000065:SSL routines::no suitable key share
+2023-10-30 23:19:28: (mod_openssl.c.3247) SSL: 1 error:0A000065:SSL routines::no suitable key share
+2023-10-30 23:19:28: (mod_openssl.c.3247) SSL: 1 error:0A000065:SSL routines::no suitable key share
+2023-10-30 23:19:28: (mod_openssl.c.3247) SSL: 1 error:0A000065:SSL routines::no suitable key share
+2023-10-30 23:19:29: (mod_openssl.c.3247) SSL: 1 error:0A000065:SSL routines::no suitable key share
+2023-10-30 23:19:29: (mod_openssl.c.3247) SSL: 1 error:0A000065:SSL routines::no suitable key share
+2023-10-30 23:19:29: (mod_openssl.c.3247) SSL: 1 error:0A000065:SSL routines::no suitable key share
+2023-10-30 23:19:29: (mod_openssl.c.3247) SSL: 1 error:0A000065:SSL routines::no suitable key share
+2023-10-30 23:19:29: (mod_openssl.c.3247) SSL: 1 error:0A000065:SSL routines::no suitable key share
+2023-10-30 23:19:29: (mod_openssl.c.3247) SSL: 1 error:0A000065:SSL routines::no suitable key share
+2023-10-30 23:19:29: (mod_openssl.c.3247) SSL: 1 error:0A000065:SSL routines::no suitable key share
+2023-10-30 23:19:29: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:29: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:29: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:29: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:29: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:29: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:29: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:29: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:29: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:29: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:29: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:29: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:30: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:30: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:30: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:30: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:30: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:30: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:30: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:30: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:30: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:30: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:30: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:30: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:31: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:31: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:31: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:31: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:31: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:31: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:31: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:31: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:31: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:31: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:31: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:31: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:31: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:31: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:31: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:31: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:31: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:31: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:31: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:31: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:32: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:32: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:32: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:32: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:32: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:32: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:32: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:32: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:32: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:32: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:32: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:32: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:32: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:32: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:33: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:33: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:33: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:33: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:33: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:33: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:33: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:33: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:33: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:33: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:33: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:33: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:33: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:33: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:33: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:33: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:33: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:34: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:34: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:34: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:34: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:34: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:34: (mod_openssl.c.3247) SSL: 1 error:0A0000F4:SSL routines::unexpected message
+2023-10-30 23:19:34: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:34: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:34: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:34: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:34: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:34: (mod_openssl.c.3247) SSL: 1 error:0A0000F4:SSL routines::unexpected message
+2023-10-30 23:19:34: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:34: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:34: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:34: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:34: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:34: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:35: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:35: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:35: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:35: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:35: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:35: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:35: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:35: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:35: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:35: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:35: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:36: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:36: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:36: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:36: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:36: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:36: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:36: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:36: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:36: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:36: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:36: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:36: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:36: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:36: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:36: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:36: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:36: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:36: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:36: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:36: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:36: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:37: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:37: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:37: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:37: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:37: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:37: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:37: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:37: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:37: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:37: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:37: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:37: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:37: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:37: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:37: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:37: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:37: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:37: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:37: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:37: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:37: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:37: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:37: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:37: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:37: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:37: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:38: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:38: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:38: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:38: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:38: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:38: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:38: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:38: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:38: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:38: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:38: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:38: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:38: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:38: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:38: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:38: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:38: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:38: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:38: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:38: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:38: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:38: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:38: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:38: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:39: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:39: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:39: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:39: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:39: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:39: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:39: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:39: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:39: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:39: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:39: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:39: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:39: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:39: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:39: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:39: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:39: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:39: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:39: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:39: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:39: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-30 23:19:39: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-30 23:19:39: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-30 23:19:39: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-30 23:19:39: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-30 23:19:40: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-30 23:19:40: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-30 23:19:40: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-30 23:19:40: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-30 23:19:40: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-30 23:19:40: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-30 23:19:40: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-30 23:19:40: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-30 23:19:40: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-30 23:19:40: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-30 23:19:40: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-30 23:19:40: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-30 23:19:40: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-30 23:19:40: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-30 23:19:40: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-30 23:19:40: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-30 23:19:40: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-30 23:19:40: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-30 23:19:40: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-30 23:19:40: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-30 23:19:40: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-30 23:19:40: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-30 23:19:40: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-30 23:19:41: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-30 23:19:41: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-30 23:19:41: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-30 23:19:41: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-30 23:19:41: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-30 23:19:41: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-30 23:19:41: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-30 23:19:41: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-30 23:19:41: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-30 23:19:41: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-30 23:19:41: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-30 23:19:41: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-30 23:19:41: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-30 23:19:41: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-30 23:19:41: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-30 23:19:41: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-30 23:19:41: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-30 23:19:41: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-30 23:19:41: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-30 23:19:41: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-30 23:19:41: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-30 23:19:41: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-30 23:19:41: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-30 23:19:41: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-30 23:19:41: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-30 23:19:41: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-30 23:19:41: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-30 23:19:42: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-30 23:19:42: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-30 23:19:42: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-30 23:19:42: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-30 23:19:42: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-30 23:19:42: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-30 23:19:42: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-30 23:19:42: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-30 23:19:42: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-30 23:19:42: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-30 23:19:42: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-30 23:19:42: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-30 23:19:42: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-30 23:19:42: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-30 23:19:42: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-30 23:19:42: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-30 23:19:42: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-30 23:19:42: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-30 23:19:42: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-30 23:19:42: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-30 23:19:42: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-30 23:19:42: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-30 23:19:42: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-30 23:19:42: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-30 23:19:43: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-30 23:19:43: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-30 23:19:43: (mod_openssl.c.3135) SSL: renegotiation initiated by client, killing connection
+2023-10-30 23:19:43: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:43: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:43: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:43: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:43: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:43: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:43: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:43: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:43: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:43: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:43: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:43: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:43: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:43: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:43: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:43: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:43: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:43: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:44: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:44: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:44: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:44: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:44: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:44: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:44: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:44: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:44: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:44: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:44: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:44: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:44: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:44: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:44: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:44: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:44: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:44: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:44: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:44: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:44: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:44: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:44: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:44: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:44: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:44: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:45: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:45: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:45: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:45: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:45: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:45: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:45: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:45: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:45: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:45: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:45: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:45: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:45: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:45: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:45: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:45: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:45: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:45: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:45: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:45: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:45: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:45: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:45: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:45: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:45: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:45: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:46: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:46: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:46: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:46: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:46: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:46: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:46: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:46: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:46: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:46: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-30 23:19:46: (mod_openssl.c.3247) SSL: 1 error:1C800066:Provider routines::cipher operation failed
+2023-10-30 23:19:46: (mod_openssl.c.3247) SSL: 1 error:0A000119:SSL routines::decryption failed or bad record mac
+2023-10-30 23:19:46: (mod_openssl.c.3247) SSL: 1 error:1C800066:Provider routines::cipher operation failed
+2023-10-30 23:19:46: (mod_openssl.c.3247) SSL: 1 error:0A000119:SSL routines::decryption failed or bad record mac
+2023-10-30 23:19:46: (mod_openssl.c.3247) SSL: 1 error:1C800066:Provider routines::cipher operation failed
+2023-10-30 23:19:46: (mod_openssl.c.3247) SSL: 1 error:0A000119:SSL routines::decryption failed or bad record mac
+2023-10-30 23:19:46: (mod_openssl.c.3247) SSL: 1 error:1C800066:Provider routines::cipher operation failed
+2023-10-30 23:19:46: (mod_openssl.c.3247) SSL: 1 error:0A000119:SSL routines::decryption failed or bad record mac
+2023-10-30 23:19:47: (mod_openssl.c.3247) SSL: 1 error:1C800066:Provider routines::cipher operation failed
+2023-10-30 23:19:47: (mod_openssl.c.3247) SSL: 1 error:0A000119:SSL routines::decryption failed or bad record mac
+2023-10-30 23:19:47: (mod_openssl.c.3247) SSL: 1 error:1C800066:Provider routines::cipher operation failed
+2023-10-30 23:19:47: (mod_openssl.c.3247) SSL: 1 error:0A000119:SSL routines::decryption failed or bad record mac
+2023-10-30 23:19:47: (mod_openssl.c.3247) SSL: 1 error:1C800066:Provider routines::cipher operation failed
+2023-10-30 23:19:47: (mod_openssl.c.3247) SSL: 1 error:0A000119:SSL routines::decryption failed or bad record mac
+2023-10-30 23:19:47: (mod_openssl.c.3247) SSL: 1 error:1C800066:Provider routines::cipher operation failed
+2023-10-30 23:19:47: (mod_openssl.c.3247) SSL: 1 error:0A000119:SSL routines::decryption failed or bad record mac
+2023-10-30 23:19:47: (mod_openssl.c.3247) SSL: 1 error:1C800066:Provider routines::cipher operation failed
+2023-10-30 23:19:47: (mod_openssl.c.3247) SSL: 1 error:0A000119:SSL routines::decryption failed or bad record mac
+2023-10-30 23:19:47: (mod_openssl.c.3247) SSL: 1 error:1C800066:Provider routines::cipher operation failed
+2023-10-30 23:19:47: (mod_openssl.c.3247) SSL: 1 error:0A000119:SSL routines::decryption failed or bad record mac
+2023-10-30 23:19:47: (mod_openssl.c.3247) SSL: 1 error:0A0000FC:SSL routines::unknown protocol
+2023-10-30 23:19:47: (mod_openssl.c.3247) SSL: 1 error:0A0000FC:SSL routines::unknown protocol
+2023-10-30 23:19:47: (mod_openssl.c.3247) SSL: 1 error:0A0000FC:SSL routines::unknown protocol
+2023-10-30 23:19:47: (mod_openssl.c.3247) SSL: 1 error:1C800066:Provider routines::cipher operation failed
+2023-10-30 23:19:47: (mod_openssl.c.3247) SSL: 1 error:0A000119:SSL routines::decryption failed or bad record mac
+2023-10-30 23:19:47: (mod_openssl.c.3247) SSL: 1 error:0A0000FC:SSL routines::unknown protocol
+2023-10-30 23:19:47: (mod_openssl.c.3247) SSL: 1 error:0A0000FC:SSL routines::unknown protocol
+2023-10-30 23:19:47: (mod_openssl.c.3247) SSL: 1 error:0A0000FC:SSL routines::unknown protocol
+2023-10-30 23:19:47: (mod_openssl.c.3247) SSL: 1 error:1C800066:Provider routines::cipher operation failed
+2023-10-30 23:19:47: (mod_openssl.c.3247) SSL: 1 error:0A000119:SSL routines::decryption failed or bad record mac
+2023-10-30 23:19:47: (mod_openssl.c.3247) SSL: 1 error:0A0000FC:SSL routines::unknown protocol
+2023-10-30 23:19:47: (mod_openssl.c.3247) SSL: 1 error:1C800066:Provider routines::cipher operation failed
+2023-10-30 23:19:47: (mod_openssl.c.3247) SSL: 1 error:0A000119:SSL routines::decryption failed or bad record mac
+2023-10-30 23:19:48: (mod_openssl.c.3247) SSL: 1 error:1C800066:Provider routines::cipher operation failed
+2023-10-30 23:19:48: (mod_openssl.c.3247) SSL: 1 error:0A000119:SSL routines::decryption failed or bad record mac
+2023-10-30 23:19:48: (mod_openssl.c.3247) SSL: 1 error:1C800066:Provider routines::cipher operation failed
+2023-10-30 23:19:48: (mod_openssl.c.3247) SSL: 1 error:0A000119:SSL routines::decryption failed or bad record mac
+2023-10-31 00:05:54: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-10-31 01:23:19: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-10-31 01:23:19: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-10-31 01:23:21: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-31 01:23:22: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-31 01:23:22: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-10-31 02:46:35: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-10-31 02:53:22: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-10-31 03:34:16: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-10-31 04:48:02: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-31 05:12:47: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-10-31 05:12:47: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-10-31 05:34:27: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-10-31 05:34:27: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-10-31 05:34:27: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-10-31 06:13:45: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-31 06:13:49: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-31 06:13:50: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-10-31 06:44:31: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-31 06:50:02: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-10-31 07:16:43: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-31 07:17:20: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-31 07:18:21: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-31 07:18:22: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-31 07:18:22: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-10-31 07:37:34: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-10-31 08:02:07: (connections.c.718) invalid request-line -> sending Status 400
+2023-10-31 08:40:10: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-31 08:41:50: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-31 08:42:24: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-10-31 10:30:51: (connections.c.718) invalid request-line -> sending Status 400
+2023-10-31 10:32:28: (connections.c.718) invalid request-line -> sending Status 400
+2023-10-31 11:01:34: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-31 11:01:34: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-31 11:01:34: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-10-31 11:03:11: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-10-31 11:03:14: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-10-31 11:03:16: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-10-31 12:45:15: (connections.c.718) invalid request-line -> sending Status 400
+2023-10-31 14:22:26: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-31 14:22:26: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-31 14:22:27: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-10-31 17:36:40: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-31 17:36:40: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-31 17:36:41: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-10-31 18:00:27: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-31 18:00:27: (mod_openssl.c.3247) SSL: 1 error:0A0000FC:SSL routines::unknown protocol
+2023-10-31 18:00:27: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-31 18:00:27: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-10-31 18:00:27: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-31 20:02:26: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-10-31 20:53:49: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-10-31 20:53:49: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-10-31 20:53:49: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-10-31 20:59:27: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-10-31 20:59:27: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-10-31 21:01:24: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-10-31 21:38:48: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-10-31 21:47:59: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-10-31 23:07:16: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-01 00:26:08: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-01 00:45:03: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-01 01:09:32: (connections.c.718) invalid request-line -> sending Status 400
+2023-11-01 01:09:33: (connections.c.718) invalid request-line -> sending Status 400
+2023-11-01 01:09:33: (connections.c.718) invalid request-line -> sending Status 400
+2023-11-01 02:05:54: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-01 02:06:29: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-01 02:09:21: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-01 02:09:21: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-01 02:09:21: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-11-01 02:28:19: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-01 02:28:20: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-01 02:28:20: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-11-01 02:45:33: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-01 03:49:29: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-01 04:01:52: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-11-01 04:10:55: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-01 04:10:55: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-01 04:10:55: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-11-01 04:44:41: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-11-01 04:45:33: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-01 04:45:39: (mod_openssl.c.3247) SSL: 1 error:0A0000FC:SSL routines::unknown protocol
+2023-11-01 04:45:39: (connections.c.718) invalid request-line -> sending Status 400
+2023-11-01 04:45:39: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-11-01 04:45:40: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-01 04:45:40: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-01 04:45:48: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-01 04:45:50: (mod_openssl.c.3247) SSL: 1 error:0A0000FC:SSL routines::unknown protocol
+2023-11-01 04:45:50: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-01 04:45:50: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-01 04:45:50: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-01 04:45:50: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-01 04:45:50: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-01 04:45:50: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-01 04:45:50: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-01 04:45:50: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-01 04:45:50: (mod_openssl.c.3247) SSL: 1 error:0A0000EB:SSL routines::no application protocol
+2023-11-01 04:45:50: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-01 04:45:50: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-01 04:45:50: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-01 04:45:50: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-01 04:45:50: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-01 04:45:50: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-01 04:45:50: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-01 04:45:51: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-01 04:45:51: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-01 04:45:51: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-01 04:45:51: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-01 04:45:51: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-01 04:45:51: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-01 04:45:51: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-01 04:45:51: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-01 04:45:51: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-01 04:45:51: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-01 04:45:52: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-01 04:45:52: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-01 04:45:52: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-01 04:45:52: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-01 04:45:52: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-01 04:45:52: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-01 04:45:52: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-01 04:45:53: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-01 04:45:54: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-01 04:45:55: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-01 04:45:55: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-01 04:45:59: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-01 04:46:01: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-01 04:46:01: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-01 04:46:01: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-01 04:46:01: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-01 06:29:59: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-11-01 06:29:59: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-11-01 06:29:59: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-11-01 08:01:57: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-11-01 08:01:57: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-01 08:01:57: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-01 08:01:57: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-11-01 08:45:49: (connections.c.718) invalid request-line -> sending Status 400
+2023-11-01 08:54:10: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-11-01 08:54:10: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-11-01 08:54:10: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-11-01 08:54:10: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-11-01 08:54:10: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-01 08:54:46: (connections.c.718) invalid request-line -> sending Status 400
+2023-11-01 08:56:26: (connections.c.718) invalid request-line -> sending Status 400
+2023-11-01 10:21:41: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-01 12:36:52: (connections.c.718) invalid request-line -> sending Status 400
+2023-11-01 16:09:44: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-01 16:23:50: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-11-01 16:36:20: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-11-01 19:40:21: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-01 19:40:22: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-01 19:40:22: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-11-01 20:05:14: (connections.c.718) invalid request-line -> sending Status 400
+2023-11-01 22:50:53: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-01 23:02:07: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-01 23:57:27: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-02 00:04:57: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-02 00:04:57: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-02 01:06:49: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-02 01:31:04: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-11-02 01:49:28: (connections.c.718) invalid request-line -> sending Status 400
+2023-11-02 04:51:40: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-02 04:52:05: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-02 04:54:27: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-02 04:54:27: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-02 04:54:27: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-11-02 05:10:27: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-02 05:32:06: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-02 11:11:04: (connections.c.718) invalid request-line -> sending Status 400
+2023-11-02 13:32:59: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-02 13:32:59: (mod_openssl.c.3247) SSL: 1 error:0A0000FC:SSL routines::unknown protocol
+2023-11-02 13:32:59: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-02 13:32:59: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-02 13:32:59: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-02 13:45:47: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-11-02 14:36:01: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-02 14:55:17: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-11-02 14:55:18: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-11-02 16:52:33: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-02 16:53:34: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-02 16:53:34: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-02 16:53:35: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-11-02 17:52:19: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-02 19:56:15: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-11-02 19:56:15: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-11-02 19:56:15: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-11-02 19:56:16: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-02 19:56:16: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-02 19:56:16: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-11-02 19:56:17: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-11-02 19:56:17: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-11-02 20:38:49: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-02 22:41:04: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-02 22:41:06: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-02 22:41:06: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-11-02 22:41:07: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-02 22:41:07: (mod_openssl.c.3247) SSL: 1 error:0A0000FC:SSL routines::unknown protocol
+2023-11-02 22:41:09: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-02 22:41:10: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-02 22:41:11: (connections.c.718) invalid request-line -> sending Status 400
+2023-11-02 22:41:11: (connections.c.718) invalid request-line -> sending Status 400
+2023-11-02 22:41:13: (connections.c.718) invalid request-line -> sending Status 400
+2023-11-02 22:41:13: (connections.c.718) invalid request-line -> sending Status 400
+2023-11-02 22:41:15: (mod_openssl.c.3247) SSL: 1 error:0A0000F5:SSL routines::unexpected record
+2023-11-02 22:41:29: (connections.c.718) invalid request-line -> sending Status 400
+2023-11-02 22:41:29: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-02 22:51:28: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-02 22:51:28: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-03 00:01:50: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-03 00:26:11: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-03 00:41:22: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-11-03 00:59:55: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-11-03 01:07:39: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-03 01:07:39: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-03 01:07:39: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-11-03 03:42:14: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-11-03 03:42:17: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-11-03 03:42:18: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-11-03 03:42:21: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-11-03 03:42:23: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-11-03 04:16:07: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-11-03 04:54:07: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-03 05:14:34: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-03 05:14:34: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-03 05:14:36: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-03 05:27:09: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-11-03 05:27:09: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-11-03 05:29:19: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-11-03 06:00:14: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-11-03 06:00:14: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-11-03 06:00:15: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-11-03 06:00:15: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-11-03 06:00:15: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-11-03 06:00:15: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-11-03 07:28:08: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-03 07:28:36: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-03 07:29:43: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-03 07:29:44: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-03 07:29:44: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-11-03 07:35:37: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-03 09:32:32: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-03 09:32:32: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-03 09:32:32: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-03 10:19:13: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-03 10:20:53: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-03 10:21:26: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-11-03 12:14:49: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-11-03 12:31:24: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-03 12:36:29: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-03 12:36:30: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-03 12:36:30: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-03 12:36:30: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-03 12:36:30: (mod_openssl.c.3247) SSL: 1 error:0A0000FC:SSL routines::unknown protocol
+2023-11-03 15:55:04: (mod_openssl.c.3247) SSL: 1 error:0A0000FC:SSL routines::unknown protocol
+2023-11-03 15:55:04: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-03 15:55:04: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-03 15:55:04: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-03 15:55:04: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-03 17:00:27: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-11-03 19:59:04: (connections.c.718) invalid request-line -> sending Status 400
+2023-11-03 20:03:17: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-11-03 20:19:19: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-11-03 20:22:00: (connections.c.718) invalid request-line -> sending Status 400
+2023-11-03 21:00:00: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-03 21:00:00: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-03 21:00:00: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-11-03 21:01:34: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-03 21:10:45: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-11-03 21:13:24: (connections.c.718) invalid request-line -> sending Status 400
+2023-11-03 21:18:03: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-03 21:19:19: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-03 21:36:22: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-03 21:36:29: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-11-03 21:36:29: (connections.c.718) invalid request-line -> sending Status 400
+2023-11-03 21:36:39: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-03 21:36:39: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-03 21:36:39: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-11-03 21:36:39: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-11-03 21:36:39: (mod_openssl.c.3247) SSL: 1 error:0A0000FC:SSL routines::unknown protocol
+2023-11-03 21:36:49: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-03 21:36:49: (mod_openssl.c.3247) SSL: 1 error:0A0000FC:SSL routines::unknown protocol
+2023-11-03 21:36:49: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-03 21:36:49: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-03 21:36:49: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-03 21:36:49: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-03 21:36:49: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-03 21:36:49: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-03 21:36:49: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-03 21:36:49: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-03 21:36:49: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-03 21:36:49: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-03 21:36:50: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-03 21:36:50: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-03 21:36:50: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-03 21:36:50: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-03 21:36:50: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-03 21:36:50: (mod_openssl.c.3247) SSL: 1 error:0A0000EB:SSL routines::no application protocol
+2023-11-03 21:36:50: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-03 21:36:51: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-03 21:36:51: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-03 21:36:51: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-03 21:36:51: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-03 22:20:54: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-03 22:20:54: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-03 22:30:26: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-03 22:53:10: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-03 22:53:10: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-03 22:53:10: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-11-03 23:05:34: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-11-04 01:57:50: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-11-04 02:03:46: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-04 02:03:46: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-04 02:03:47: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-04 02:03:49: (mod_openssl.c.3247) SSL: 1 error:0A0000FC:SSL routines::unknown protocol
+2023-11-04 02:03:50: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-04 02:03:50: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-04 04:55:49: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-04 05:23:50: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-11-04 06:40:46: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+[Sat Nov  4 06:53:54 2023] json.cgi: Use of uninitialized value in string eq at /home/will/LifeLog/htdocs/cgi-bin/json.cgi line 133.
+2023-11-04 07:08:00: (mod_openssl.c.3247) SSL: 1 error:0A000438:SSL routines::tlsv1 alert internal error
+2023-11-04 07:08:00: (mod_openssl.c.3247) SSL: 1 error:0A000438:SSL routines::tlsv1 alert internal error
+2023-11-04 07:08:00: (mod_openssl.c.3247) SSL: 1 error:0A000438:SSL routines::tlsv1 alert internal error
+2023-11-04 07:08:00: (mod_openssl.c.3247) SSL: 1 error:0A000438:SSL routines::tlsv1 alert internal error
+2023-11-04 07:08:00: (mod_openssl.c.3247) SSL: 1 error:0A000438:SSL routines::tlsv1 alert internal error
+2023-11-04 07:35:49: (connections.c.718) invalid request-line -> sending Status 400
+2023-11-04 08:02:48: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-04 08:02:48: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-04 08:02:49: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-04 08:13:59: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-11-04 08:33:06: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-04 08:33:32: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-11-04 09:38:38: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-04 09:38:38: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-04 09:38:38: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-04 09:38:38: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-04 09:38:38: (mod_openssl.c.3247) SSL: 1 error:0A0000FC:SSL routines::unknown protocol
+2023-11-04 10:09:09: (connections.c.718) invalid request-line -> sending Status 400
+2023-11-04 10:21:05: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-11-04 10:43:29: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-11-04 11:44:03: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-04 11:44:04: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-04 11:44:04: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-11-04 12:23:28: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-04 12:23:28: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-04 12:23:28: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-11-04 13:04:18: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-11-04 13:04:35: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-04 13:04:36: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-04 13:04:37: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-11-04 14:03:22: (connections.c.718) invalid request-line -> sending Status 400
+2023-11-04 14:09:22: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-11-04 15:04:51: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-04 15:34:45: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-04 16:27:53: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-04 16:27:53: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-04 16:27:53: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-04 16:27:53: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-04 16:27:53: (mod_openssl.c.3247) SSL: 1 error:0A0000FC:SSL routines::unknown protocol
+2023-11-04 17:07:51: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-11-04 17:22:59: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-11-04 18:18:46: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-04 18:18:47: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-04 18:18:48: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-11-04 19:24:44: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-11-04 20:33:12: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-04 20:33:48: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-04 20:35:42: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-04 20:35:42: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-04 20:35:42: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-11-04 22:54:00: (connections.c.718) invalid request-line -> sending Status 400
+2023-11-04 23:05:18: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-04 23:54:22: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-04 23:54:22: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-04 23:54:23: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-11-05 00:08:14: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-05 00:45:23: (connections.c.718) invalid request-line -> sending Status 400
+2023-11-05 01:45:57: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-11-05 01:06:41: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-05 01:06:43: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-05 01:06:43: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-11-05 01:08:01: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-05 01:08:02: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-05 04:15:24: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-05 05:00:14: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-05 05:00:15: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-05 05:00:15: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-11-05 05:42:45: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-05 05:42:45: (mod_openssl.c.3247) SSL: 1 error:0A0000FC:SSL routines::unknown protocol
+2023-11-05 05:42:45: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-05 05:42:45: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-05 05:42:45: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-05 06:27:04: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-05 06:28:48: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-05 06:28:49: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-05 07:08:22: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-11-05 10:18:50: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-05 10:18:52: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-05 10:18:53: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-11-05 10:26:32: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-11-05 11:04:44: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-11-05 11:04:46: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-11-05 11:04:49: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-11-05 12:45:01: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-05 15:34:50: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-05 15:34:50: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-05 15:34:50: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-11-05 18:12:24: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-05 18:26:27: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-11-05 18:27:06: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-11-05 18:34:43: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-05 18:34:44: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-05 19:24:15: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-05 19:24:15: (mod_openssl.c.3247) SSL: 1 error:0A0000FC:SSL routines::unknown protocol
+2023-11-05 19:24:15: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-05 19:24:15: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-05 19:24:15: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-05 19:24:15: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-05 19:24:15: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-05 19:24:15: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-05 19:24:15: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-05 19:24:15: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-05 19:24:15: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-05 19:24:15: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-05 19:24:15: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-05 19:24:15: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-05 19:24:15: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-05 19:24:15: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-05 19:24:15: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-05 19:24:15: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-05 19:24:15: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-05 19:24:15: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-05 19:24:15: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-05 19:24:15: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-05 19:24:15: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-05 19:24:15: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-05 19:24:15: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-05 19:24:15: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-05 19:24:16: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-05 19:24:16: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-05 19:24:17: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-05 19:24:17: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-05 19:24:18: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-05 19:24:18: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-05 20:19:00: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-05 21:15:46: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-05 21:36:10: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-05 21:36:10: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-05 22:26:15: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-11-05 22:27:02: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-05 23:33:17: (connections.c.718) invalid request-line -> sending Status 400
+2023-11-05 23:35:36: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-11-06 00:02:36: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-06 00:02:55: (connections.c.718) invalid request-line -> sending Status 400
+2023-11-06 00:46:52: (connections.c.718) invalid request-line -> sending Status 400
+2023-11-06 00:48:58: (connections.c.718) invalid request-line -> sending Status 400
+2023-11-06 00:50:45: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-11-06 01:10:31: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-06 01:36:57: (connections.c.718) invalid request-line -> sending Status 400
+2023-11-06 02:57:09: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-06 04:58:19: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-11-06 04:59:21: (connections.c.718) invalid request-line -> sending Status 400
+2023-11-06 05:15:52: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-11-06 05:46:29: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-06 05:46:29: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-06 05:46:29: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-11-06 06:41:56: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-06 06:42:24: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-06 06:44:13: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-06 06:44:13: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-06 06:44:13: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-11-06 09:49:33: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-11-06 10:34:32: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-11-06 11:33:42: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-11-06 12:12:02: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-06 15:31:30: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-06 15:44:50: (connections.c.718) invalid request-line -> sending Status 400
+2023-11-06 18:00:52: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-06 18:02:32: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-06 18:03:05: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-11-06 19:27:36: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-06 19:27:38: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-06 19:27:38: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-11-06 19:38:05: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-06 19:38:38: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-06 19:41:34: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-06 19:41:34: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-06 19:41:34: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-11-06 20:34:33: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-06 22:26:27: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-06 22:26:27: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-06 22:44:12: (mod_openssl.c.3247) SSL: 1 error:0A0000C6:SSL routines::packet length too long
+2023-11-06 23:05:18: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-11-06 23:05:18: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-11-06 23:06:19: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-06 23:36:38: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-07 01:28:06: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-11-07 02:11:53: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-07 02:45:06: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-07 02:45:06: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-07 02:45:06: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-11-07 03:44:38: (connections.c.718) invalid request-line -> sending Status 400
+2023-11-07 03:47:22: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-07 03:49:55: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-07 03:51:45: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-07 03:54:28: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-07 03:57:21: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-07 03:57:57: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-07 04:00:28: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-07 04:03:33: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-07 04:06:25: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-07 04:08:54: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-07 04:11:40: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-07 04:14:37: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-07 04:17:48: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-07 04:20:53: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-07 04:24:09: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-07 04:27:15: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-07 04:30:11: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-07 04:33:00: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-07 04:35:30: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-07 04:38:18: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-07 04:41:14: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-07 04:44:37: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-07 04:47:42: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-07 04:50:47: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-07 04:51:13: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-07 04:51:14: (mod_openssl.c.3247) SSL: 1 error:0A0000FC:SSL routines::unknown protocol
+2023-11-07 04:51:14: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-07 04:51:14: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-07 04:51:14: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-07 04:53:51: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-07 04:56:39: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-07 04:59:16: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-07 05:01:57: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-07 05:04:48: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-07 05:07:52: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-07 05:10:46: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-07 05:14:01: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-07 05:16:43: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-07 05:19:20: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-07 05:22:18: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-07 05:25:32: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-07 05:28:40: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-07 05:39:46: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-11-07 05:42:12: (connections.c.718) invalid request-line -> sending Status 400
+2023-11-07 06:24:06: (connections.c.718) invalid request-line -> sending Status 400
+2023-11-07 06:35:43: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-11-07 06:39:44: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-11-07 06:39:46: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-11-07 06:40:00: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-11-07 08:54:49: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-07 08:54:50: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-07 08:54:50: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-11-07 10:34:33: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-11-07 11:05:28: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-07 11:07:43: (connections.c.718) invalid request-line -> sending Status 400
+2023-11-07 11:29:31: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-11-07 11:41:47: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-11-07 12:38:35: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-07 12:38:35: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-07 12:38:35: (mod_openssl.c.3247) SSL: 1 error:0A0000FC:SSL routines::unknown protocol
+2023-11-07 12:38:35: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-07 12:38:35: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-07 13:27:55: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-07 13:27:55: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-07 13:27:55: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-11-07 14:34:02: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-07 16:20:13: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-07 16:20:40: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-07 16:20:40: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-07 16:20:40: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-11-07 16:39:44: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-07 16:51:39: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-11-07 17:21:06: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-11-07 17:27:06: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-07 17:27:06: (mod_openssl.c.3247) SSL: 1 error:0A0000FC:SSL routines::unknown protocol
+2023-11-07 17:27:06: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-07 17:50:28: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-07 17:53:00: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-11-07 17:53:01: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-11-07 17:53:01: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-11-07 19:17:46: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-11-07 19:25:29: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-07 19:25:30: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-07 20:42:46: (connections.c.718) invalid request-line -> sending Status 400
+2023-11-07 21:31:38: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-07 21:31:38: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-07 21:31:38: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-11-07 21:52:27: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-07 21:56:00: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-07 22:26:24: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-11-08 01:08:25: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-08 01:08:57: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-08 01:09:53: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-08 01:09:53: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-08 01:09:53: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-11-08 02:08:03: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-11-08 03:32:35: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-08 04:29:44: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-08 04:29:44: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-08 04:29:44: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-11-08 07:11:12: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-08 10:05:45: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-08 10:05:47: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-08 10:05:47: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-11-08 12:19:24: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-11-08 14:24:12: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-08 14:24:12: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-08 15:16:45: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-08 16:41:59: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-11-08 17:54:24: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-11-08 17:54:26: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-11-08 17:54:46: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-08 17:54:47: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-08 17:54:48: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-11-08 17:57:25: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-11-08 17:57:25: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-11-08 19:28:17: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-08 19:35:05: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-08 19:35:41: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-08 19:38:31: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-08 19:38:31: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-08 19:38:31: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-11-08 19:50:52: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-08 19:50:52: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-08 19:50:52: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-11-08 20:00:51: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-11-08 20:59:12: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-11-08 21:56:41: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-08 22:44:11: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-11-08 23:06:38: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-11-08 23:53:40: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-09 01:44:50: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-11-09 01:46:07: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 02:10:16: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-11-09 02:23:13: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-11-09 02:33:29: (connections.c.718) invalid request-line -> sending Status 400
+2023-11-09 04:26:21: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-09 05:33:30: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 05:33:30: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 05:33:30: (mod_openssl.c.3247) SSL: 1 error:0A0000FC:SSL routines::unknown protocol
+2023-11-09 05:33:30: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 05:33:30: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-09 05:56:24: (connections.c.718) invalid request-line -> sending Status 400
+2023-11-09 06:12:24: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-11-09 06:12:24: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-11-09 06:12:24: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-11-09 06:12:24: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-11-09 06:12:24: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-11-09 06:12:24: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-11-09 06:14:10: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 07:54:45: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-11-09 08:12:56: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 10:04:21: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 10:04:21: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 10:04:21: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-11-09 10:24:47: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-09 12:31:21: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 15:11:19: (mod_openssl.c.3247) SSL: 1 error:0A0000FC:SSL routines::unknown protocol
+2023-11-09 15:11:19: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-09 15:11:19: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 15:11:19: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 15:11:19: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 17:08:11: (connections.c.689) oversized request-header -> sending Status 431
+2023-11-09 19:18:37: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-11-09 19:40:38: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 19:40:38: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 19:40:38: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-11-09 19:45:56: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-09 19:45:56: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-09 21:02:38: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-09 21:06:18: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-11-09 21:06:18: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-11-09 22:23:30: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-09 23:05:55: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:05:56: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:05:56: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-11-09 23:05:56: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:05:56: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:05:56: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:05:56: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:05:57: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:05:57: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:05:57: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:05:57: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:05:57: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:05:57: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:05:57: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:05:57: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:05:57: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:05:57: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:05:57: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:05:57: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:05:57: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:05:57: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:05:57: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:05:57: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:05:57: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:05:57: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:05:57: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:05:57: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:05:58: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:05:58: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:05:58: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:05:58: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:05:58: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:05:58: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:05:58: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:05:58: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:05:58: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:05:58: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:05:58: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:05:58: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:05:58: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:05:58: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:05:59: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:05:59: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:05:59: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:05:59: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:05:59: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:05:59: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:05:59: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:05:59: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:05:59: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:05:59: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:05:59: (mod_openssl.c.3247) SSL: 1 error:0A0000F4:SSL routines::unexpected message
+2023-11-09 23:05:59: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:05:59: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:05:59: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:05:59: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:05:59: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:05:59: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:05:59: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:05:59: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:06:00: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:06:00: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:06:00: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:06:00: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:06:00: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:06:00: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:06:00: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:06:00: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:06:00: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:06:00: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:06:00: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:06:00: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:06:00: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:06:00: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:06:00: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:06:00: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:06:01: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:06:01: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:06:01: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:06:01: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:06:01: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:06:01: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:06:01: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:06:01: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:06:01: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:06:02: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:06:02: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:06:02: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:06:02: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:06:02: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:06:02: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:06:02: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:06:02: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:06:02: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:06:02: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:06:02: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:06:03: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:06:03: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:06:03: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:06:03: (mod_openssl.c.3247) SSL: 1 error:0A0000F4:SSL routines::unexpected message
+2023-11-09 23:06:03: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:06:03: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:06:03: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:06:03: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:06:03: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:06:03: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:06:03: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:06:03: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:06:03: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:06:03: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:06:03: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:06:03: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:06:03: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:06:03: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:06:03: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:06:03: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:06:04: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:06:04: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:06:04: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:06:04: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:04: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:04: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:04: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:04: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:04: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:04: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:04: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:04: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:04: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:04: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:04: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:04: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:04: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:04: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:04: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:04: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:04: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:05: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:05: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:05: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:05: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:05: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:05: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:05: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:05: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:05: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:05: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:05: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:05: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:05: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:05: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:05: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:05: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:05: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:05: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:05: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:05: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:05: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:05: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:05: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:05: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:05: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:06: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:06: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:06: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:06: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:06: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:06: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:06: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:06: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:06: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:06: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:06: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:06: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:06: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:06: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:06: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:06: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:06: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:06: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:06: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:06: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:06: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:07: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:07: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:07: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:07: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:07: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:07: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:07: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:07: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:07: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:07: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:07: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:07: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:07: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:07: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:07: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:07: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:07: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:07: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:07: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:07: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:07: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:07: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:07: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:07: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:07: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:07: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:07: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:07: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:08: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:08: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:08: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:08: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:08: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:08: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:08: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:08: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:08: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:08: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:08: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:08: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:08: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:08: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:08: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:08: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:08: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:08: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:08: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:08: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:08: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:08: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:08: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:08: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:08: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:09: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:09: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:09: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:09: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:09: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:09: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:09: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:09: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:09: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:09: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:09: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:09: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:09: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:09: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:09: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:09: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:09: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:09: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:09: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:09: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:09: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:09: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:09: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:10: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:10: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:10: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:10: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:10: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:10: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:10: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:10: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:10: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:10: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:10: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:10: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:10: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:10: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:10: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:10: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:10: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:10: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:10: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:10: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:06:10: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-09 23:06:10: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-09 23:06:10: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-09 23:06:10: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-09 23:06:11: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-09 23:06:11: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-09 23:06:11: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-09 23:06:11: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-09 23:06:11: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-09 23:06:11: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-09 23:06:11: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-09 23:06:11: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-09 23:06:11: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-09 23:06:11: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-09 23:06:11: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-09 23:06:11: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-09 23:06:11: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-09 23:06:11: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-09 23:06:11: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-09 23:06:11: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-09 23:06:11: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-09 23:06:11: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-09 23:06:11: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-09 23:06:11: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-09 23:06:11: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-09 23:06:11: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-09 23:06:11: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-09 23:06:11: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-09 23:06:11: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-09 23:06:11: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-09 23:06:11: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-09 23:06:11: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-09 23:06:12: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-09 23:06:12: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-09 23:06:12: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-09 23:06:12: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-09 23:06:12: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-09 23:06:12: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-09 23:06:12: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-09 23:06:12: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-09 23:06:12: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-09 23:06:12: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-09 23:06:12: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-09 23:06:12: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-09 23:06:12: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-09 23:06:12: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-09 23:06:12: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-09 23:06:12: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-09 23:06:12: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-09 23:06:12: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-09 23:06:12: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-09 23:06:12: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-09 23:06:12: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-09 23:06:12: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-09 23:06:12: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-09 23:06:13: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-09 23:06:13: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-09 23:06:13: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-09 23:06:13: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-09 23:06:13: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-09 23:06:13: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-09 23:06:13: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-09 23:06:13: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-09 23:06:13: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-09 23:06:13: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-09 23:06:13: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-09 23:06:13: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-09 23:06:13: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-09 23:06:13: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-09 23:06:13: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-09 23:06:13: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-09 23:06:13: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-09 23:06:13: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-09 23:06:13: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-09 23:06:13: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-09 23:06:13: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-09 23:06:13: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-09 23:06:13: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-09 23:06:14: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-09 23:06:14: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-09 23:06:14: (mod_openssl.c.3247) SSL: 1 error:1C800066:Provider routines::cipher operation failed
+2023-11-09 23:06:14: (mod_openssl.c.3247) SSL: 1 error:0A000119:SSL routines::decryption failed or bad record mac
+2023-11-09 23:06:14: (mod_openssl.c.3247) SSL: 1 error:1C800066:Provider routines::cipher operation failed
+2023-11-09 23:06:14: (mod_openssl.c.3247) SSL: 1 error:0A000119:SSL routines::decryption failed or bad record mac
+2023-11-09 23:06:14: (mod_openssl.c.3247) SSL: 1 error:1C800066:Provider routines::cipher operation failed
+2023-11-09 23:06:14: (mod_openssl.c.3247) SSL: 1 error:0A000119:SSL routines::decryption failed or bad record mac
+2023-11-09 23:06:14: (mod_openssl.c.3247) SSL: 1 error:1C800066:Provider routines::cipher operation failed
+2023-11-09 23:06:14: (mod_openssl.c.3247) SSL: 1 error:0A000119:SSL routines::decryption failed or bad record mac
+2023-11-09 23:06:14: (mod_openssl.c.3247) SSL: 1 error:1C800066:Provider routines::cipher operation failed
+2023-11-09 23:06:14: (mod_openssl.c.3247) SSL: 1 error:0A000119:SSL routines::decryption failed or bad record mac
+2023-11-09 23:06:14: (mod_openssl.c.3247) SSL: 1 error:1C800066:Provider routines::cipher operation failed
+2023-11-09 23:06:14: (mod_openssl.c.3247) SSL: 1 error:0A000119:SSL routines::decryption failed or bad record mac
+2023-11-09 23:06:14: (mod_openssl.c.3247) SSL: 1 error:1C800066:Provider routines::cipher operation failed
+2023-11-09 23:06:14: (mod_openssl.c.3247) SSL: 1 error:0A000119:SSL routines::decryption failed or bad record mac
+2023-11-09 23:06:14: (mod_openssl.c.3247) SSL: 1 error:1C800066:Provider routines::cipher operation failed
+2023-11-09 23:06:14: (mod_openssl.c.3247) SSL: 1 error:0A000119:SSL routines::decryption failed or bad record mac
+2023-11-09 23:06:15: (mod_openssl.c.3247) SSL: 1 error:1C800066:Provider routines::cipher operation failed
+2023-11-09 23:06:15: (mod_openssl.c.3247) SSL: 1 error:0A000119:SSL routines::decryption failed or bad record mac
+2023-11-09 23:06:15: (mod_openssl.c.3247) SSL: 1 error:1C800066:Provider routines::cipher operation failed
+2023-11-09 23:06:15: (mod_openssl.c.3247) SSL: 1 error:0A000119:SSL routines::decryption failed or bad record mac
+2023-11-09 23:06:15: (mod_openssl.c.3247) SSL: 1 error:0A0000FC:SSL routines::unknown protocol
+2023-11-09 23:06:15: (mod_openssl.c.3247) SSL: 1 error:0A0000FC:SSL routines::unknown protocol
+2023-11-09 23:06:15: (mod_openssl.c.3247) SSL: 1 error:0A0000FC:SSL routines::unknown protocol
+2023-11-09 23:06:15: (mod_openssl.c.3247) SSL: 1 error:0A0000FC:SSL routines::unknown protocol
+2023-11-09 23:06:15: (mod_openssl.c.3247) SSL: 1 error:1C800066:Provider routines::cipher operation failed
+2023-11-09 23:06:15: (mod_openssl.c.3247) SSL: 1 error:0A000119:SSL routines::decryption failed or bad record mac
+2023-11-09 23:06:15: (mod_openssl.c.3247) SSL: 1 error:0A0000FC:SSL routines::unknown protocol
+2023-11-09 23:06:15: (mod_openssl.c.3247) SSL: 1 error:0A0000FC:SSL routines::unknown protocol
+2023-11-09 23:06:15: (mod_openssl.c.3247) SSL: 1 error:1C800066:Provider routines::cipher operation failed
+2023-11-09 23:06:15: (mod_openssl.c.3247) SSL: 1 error:0A000119:SSL routines::decryption failed or bad record mac
+2023-11-09 23:06:15: (mod_openssl.c.3247) SSL: 1 error:0A0000FC:SSL routines::unknown protocol
+2023-11-09 23:06:15: (mod_openssl.c.3247) SSL: 1 error:1C800066:Provider routines::cipher operation failed
+2023-11-09 23:06:15: (mod_openssl.c.3247) SSL: 1 error:0A000119:SSL routines::decryption failed or bad record mac
+2023-11-09 23:06:15: (mod_openssl.c.3247) SSL: 1 error:0A000065:SSL routines::no suitable key share
+2023-11-09 23:06:15: (mod_openssl.c.3247) SSL: 1 error:0A000065:SSL routines::no suitable key share
+2023-11-09 23:06:15: (mod_openssl.c.3247) SSL: 1 error:0A000065:SSL routines::no suitable key share
+2023-11-09 23:06:15: (mod_openssl.c.3247) SSL: 1 error:1C800066:Provider routines::cipher operation failed
+2023-11-09 23:06:15: (mod_openssl.c.3247) SSL: 1 error:0A000119:SSL routines::decryption failed or bad record mac
+2023-11-09 23:06:15: (mod_openssl.c.3247) SSL: 1 error:0A000065:SSL routines::no suitable key share
+2023-11-09 23:06:15: (mod_openssl.c.3247) SSL: 1 error:0A000065:SSL routines::no suitable key share
+2023-11-09 23:06:16: (mod_openssl.c.3247) SSL: 1 error:0A000065:SSL routines::no suitable key share
+2023-11-09 23:06:16: (mod_openssl.c.3247) SSL: 1 error:1C800066:Provider routines::cipher operation failed
+2023-11-09 23:06:16: (mod_openssl.c.3247) SSL: 1 error:0A000119:SSL routines::decryption failed or bad record mac
+2023-11-09 23:06:16: (mod_openssl.c.3247) SSL: 1 error:0A000065:SSL routines::no suitable key share
+2023-11-09 23:06:16: (mod_openssl.c.3247) SSL: 1 error:0A000065:SSL routines::no suitable key share
+2023-11-09 23:06:16: (mod_openssl.c.3247) SSL: 1 error:0A000065:SSL routines::no suitable key share
+2023-11-09 23:06:16: (mod_openssl.c.3247) SSL: 1 error:0A000065:SSL routines::no suitable key share
+2023-11-09 23:06:16: (mod_openssl.c.3247) SSL: 1 error:0A000065:SSL routines::no suitable key share
+2023-11-09 23:06:16: (mod_openssl.c.3247) SSL: 1 error:0A000065:SSL routines::no suitable key share
+2023-11-09 23:06:16: (mod_openssl.c.3247) SSL: 1 error:0A000065:SSL routines::no suitable key share
+2023-11-09 23:06:16: (mod_openssl.c.3247) SSL: 1 error:0A000065:SSL routines::no suitable key share
+2023-11-09 23:06:16: (mod_openssl.c.3247) SSL: 1 error:0A000065:SSL routines::no suitable key share
+2023-11-09 23:06:16: (mod_openssl.c.3247) SSL: 1 error:0A000065:SSL routines::no suitable key share
+2023-11-09 23:06:16: (mod_openssl.c.3247) SSL: 1 error:0A000065:SSL routines::no suitable key share
+2023-11-09 23:06:16: (mod_openssl.c.3247) SSL: 1 error:0A000065:SSL routines::no suitable key share
+2023-11-09 23:06:16: (mod_openssl.c.3247) SSL: 1 error:0A000065:SSL routines::no suitable key share
+2023-11-09 23:06:16: (mod_openssl.c.3247) SSL: 1 error:0A000065:SSL routines::no suitable key share
+2023-11-09 23:06:16: (mod_openssl.c.3247) SSL: 1 error:0A000065:SSL routines::no suitable key share
+2023-11-09 23:06:16: (mod_openssl.c.3247) SSL: 1 error:0A000065:SSL routines::no suitable key share
+2023-11-09 23:06:17: (mod_openssl.c.3135) SSL: renegotiation initiated by client, killing connection
+2023-11-09 23:08:37: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-09 23:25:51: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:27:31: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:28:04: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-11-09 23:55:12: (mod_openssl.c.3247) SSL: 1 error:0A0000FC:SSL routines::unknown protocol
+2023-11-09 23:55:12: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-09 23:55:12: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:55:12: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:55:12: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-09 23:55:12: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:55:12: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:55:13: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-09 23:55:13: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-10 01:20:27: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-10 01:21:01: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-10 01:22:09: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-10 01:22:09: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-10 01:22:10: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-11-10 02:18:33: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-10 03:41:48: (connections.c.718) invalid request-line -> sending Status 400
+2023-11-10 03:44:25: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-10 03:46:17: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-10 03:48:16: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-10 03:51:04: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-10 03:53:40: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-10 03:56:20: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-10 03:58:56: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-10 04:01:35: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-10 04:04:14: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-10 04:06:58: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-10 04:09:37: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-10 04:12:17: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-10 04:15:03: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-10 04:17:53: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-10 04:18:02: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-10 04:18:02: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-10 04:18:02: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-10 04:20:33: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-10 04:23:07: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-10 04:25:47: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-10 04:28:22: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-10 04:31:05: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-10 04:33:48: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-10 04:36:41: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-10 04:39:29: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-10 04:42:09: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-10 04:44:41: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-10 04:47:15: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-10 04:49:59: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-10 04:52:42: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-10 04:55:28: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-10 04:58:09: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-10 05:00:49: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-10 05:03:36: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-10 05:06:08: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-10 05:08:33: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-10 05:10:59: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-10 05:13:26: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-10 05:15:52: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-10 05:20:32: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-10 05:47:29: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-11-10 07:46:31: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-11-10 08:01:04: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-10 08:55:46: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-11-10 09:34:23: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-10 10:42:12: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-10 11:09:38: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-11-10 12:09:24: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-11-10 12:18:52: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-11-10 12:20:18: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-10 12:20:27: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-10 12:20:30: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-11-10 12:45:38: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-11-10 12:48:37: (mod_openssl.c.3247) SSL: 1 error:0A0000EB:SSL routines::no application protocol
+2023-11-10 12:49:27: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-10 13:27:46: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-10 13:27:46: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-10 13:27:46: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-11-10 14:46:00: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-11-10 15:07:33: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-10 15:07:34: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-10 15:07:34: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-11-10 15:20:28: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-10 15:20:28: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-10 15:20:28: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-11-10 16:00:14: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-10 16:00:14: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-10 16:00:14: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-10 16:57:45: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-11-10 19:36:04: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-10 19:36:39: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-10 19:38:24: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-10 19:38:24: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-10 19:38:24: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-11-10 19:50:01: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-10 19:50:01: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-10 19:50:01: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-11-10 22:04:49: (connections.c.718) invalid request-line -> sending Status 400
+2023-11-10 22:13:28: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-10 23:12:22: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-11-10 23:39:46: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-11-10 23:57:15: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-10 23:57:15: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-11 01:53:27: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-11-11 02:01:32: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-11 02:03:45: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-11 02:42:18: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-11 04:45:08: (connections.c.718) invalid request-line -> sending Status 400
+2023-11-11 04:45:09: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-11 04:45:09: (connections.c.718) invalid request-line -> sending Status 400
+2023-11-11 04:45:13: (connections.c.718) invalid request-line -> sending Status 400
+2023-11-11 04:59:06: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-11 04:59:06: (mod_openssl.c.3247) SSL: 1 error:0A0000FC:SSL routines::unknown protocol
+2023-11-11 04:59:06: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-11 04:59:06: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-11 04:59:06: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-11 04:59:06: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-11 04:59:06: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-11 04:59:06: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-11 04:59:06: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-11 04:59:06: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-11 04:59:06: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-11 04:59:06: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-11 04:59:06: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-11 04:59:06: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-11 04:59:06: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-11 04:59:06: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-11 04:59:06: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-11 04:59:06: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-11 04:59:06: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-11 04:59:06: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-11 04:59:06: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-11 04:59:06: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-11 04:59:06: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-11 04:59:07: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-11 04:59:07: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-11 04:59:07: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-11 04:59:08: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-11 04:59:08: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-11 04:59:09: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-11 04:59:09: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-11 04:59:10: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-11 04:59:10: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-11 06:30:40: (connections.c.718) invalid request-line -> sending Status 400
+2023-11-11 07:12:44: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-11 08:49:38: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-11 11:20:42: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-11 12:32:28: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-11 12:32:28: (mod_openssl.c.3247) SSL: 1 error:0A0000FC:SSL routines::unknown protocol
+2023-11-11 12:32:28: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-11 12:32:28: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-11 12:43:09: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-11 12:43:09: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-11 13:07:51: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-11-11 14:06:12: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-11-11 14:06:12: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-11-11 14:06:12: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-11-11 14:06:12: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-11 14:06:13: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-11 14:06:13: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-11-11 14:06:13: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-11-11 14:06:13: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-11-11 15:35:51: (mod_openssl.c.3247) SSL: 1 error:0A0000FC:SSL routines::unknown protocol
+2023-11-11 15:35:51: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-11 15:35:51: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-11 15:35:51: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-11 15:35:51: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-11 15:41:26: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-11 17:36:09: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-11 17:36:11: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-11 17:36:11: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-11-11 19:13:21: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-11-11 19:30:49: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-11-11 19:54:54: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-11 19:54:55: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-11 19:54:55: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-11-11 20:18:51: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-11 20:38:12: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-11 20:38:12: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-11 20:38:12: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-11-11 20:45:44: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-11-11 21:04:01: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-11 21:04:01: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-11 21:04:01: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-11-11 22:22:22: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-11 22:57:51: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-11 22:57:52: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-11 22:57:52: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-11-11 23:03:05: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-11-11 23:18:45: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-11 23:18:45: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-11 23:18:46: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-11 23:18:46: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-11-12 00:07:27: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-12 00:16:18: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-12 00:27:35: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+[Sun Nov 12 00:44:15 2023] json.cgi: WARNING: The key derivation method "opensslv1" is deprecated. Using -pbkdf=>'pbkdf2' would be better.
+[Sun Nov 12 00:44:15 2023] json.cgi: Pass -nodeprecate=>1 to inhibit this message.
+[Sun Nov 12 00:44:15 2023] json.cgi:  at /home/will/LifeLog/htdocs/cgi-bin/json.cgi line 110.
+[Sun Nov 12 00:44:25 2023] json.cgi: Use of uninitialized value in string eq at /home/will/LifeLog/htdocs/cgi-bin/json.cgi line 133.
+[Sun Nov 12 00:47:19 2023] json.cgi: Use of uninitialized value in string eq at /home/will/LifeLog/htdocs/cgi-bin/json.cgi line 133.
+[Sun Nov 12 01:07:06 2023] json.cgi: Use of uninitialized value in string eq at /home/will/LifeLog/htdocs/cgi-bin/json.cgi line 133.
+[Sun Nov 12 01:07:51 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 104.
+[Sun Nov 12 01:08:11 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 104.
+[Sun Nov 12 01:08:11 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 104.
+[Sun Nov 12 01:08:28 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 104.
+[Sun Nov 12 01:08:28 2023] index.cgi: Use of uninitialized value in numeric ge (>=) at system/modules/MarkdownPlugin.pm line 252.
+[Sun Nov 12 01:08:28 2023] index.cgi: Use of uninitialized value in numeric ge (>=) at system/modules/MarkdownPlugin.pm line 252.
+[Sun Nov 12 01:08:28 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 104.
+[Sun Nov 12 01:08:28 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 104.
+[Sun Nov 12 01:08:28 2023] index.cgi: Use of uninitialized value in numeric ge (>=) at system/modules/MarkdownPlugin.pm line 252.
+[Sun Nov 12 01:08:28 2023] index.cgi: Use of uninitialized value in numeric ge (>=) at system/modules/MarkdownPlugin.pm line 252.
+[Sun Nov 12 01:08:29 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 104.
+[Sun Nov 12 01:08:29 2023] index.cgi: Use of uninitialized value in numeric ge (>=) at system/modules/MarkdownPlugin.pm line 252.
+[Sun Nov 12 01:08:29 2023] index.cgi: Use of uninitialized value in numeric ge (>=) at system/modules/MarkdownPlugin.pm line 252.
+[Sun Nov 12 01:08:30 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 104.
+[Sun Nov 12 01:08:30 2023] index.cgi: Use of uninitialized value $cc in concatenation (.) or string at system/modules/MarkdownPlugin.pm line 645.
+[Sun Nov 12 01:08:30 2023] index.cgi: Use of uninitialized value $cc in concatenation (.) or string at system/modules/MarkdownPlugin.pm line 658.
+[Sun Nov 12 01:08:31 2023] index.cgi: Use of uninitialized value in numeric ge (>=) at system/modules/MarkdownPlugin.pm line 252.
+[Sun Nov 12 01:08:31 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 104.
+[Sun Nov 12 01:08:31 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 104.
+[Sun Nov 12 01:08:31 2023] index.cgi: Wide character in say at /home/will/LifeLog/htdocs/cgi-bin/index.cgi line 50.
+[Sun Nov 12 01:09:17 2023] index.cgi: Wide character in say at /home/will/LifeLog/htdocs/cgi-bin/index.cgi line 50.
+[Sun Nov 12 01:10:57 2023] json.cgi: Use of uninitialized value in string eq at /home/will/LifeLog/htdocs/cgi-bin/json.cgi line 133.
+2023-11-12 01:57:16: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-12 01:57:39: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-12 01:57:45: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-11-12 02:41:31: (connections.c.718) invalid request-line -> sending Status 400
+2023-11-12 02:43:23: (connections.c.718) invalid request-line -> sending Status 400
+2023-11-12 03:50:05: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-12 03:50:38: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-12 03:52:57: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-12 03:52:57: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-12 03:52:57: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-11-12 04:13:21: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-12 04:13:21: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-12 04:13:23: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-12 04:36:36: (connections.c.718) invalid request-line -> sending Status 400
+2023-11-12 06:14:26: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-12 06:50:50: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-12 07:24:10: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-11-12 07:24:13: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-11-12 07:24:18: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-11-12 08:21:27: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-12 08:21:27: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-12 08:21:28: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-12 08:21:28: (mod_openssl.c.3247) SSL: 1 error:0A0000FC:SSL routines::unknown protocol
+2023-11-12 08:21:28: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-12 09:48:01: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-11-12 09:48:03: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-11-12 09:48:24: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-12 09:49:06: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-11-12 09:49:08: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-11-12 10:55:42: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-11-12 10:56:43: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-11-12 12:53:43: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-11-12 15:20:29: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-12 15:33:48: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-12 15:33:49: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-12 15:33:50: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-11-12 15:55:38: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-12 15:56:59: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-12 15:56:59: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-12 15:56:59: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-11-12 17:25:58: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-12 17:25:59: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-12 18:47:47: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-12 18:49:26: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-12 18:50:00: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-11-12 20:16:12: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-12 20:27:33: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-11-12 22:54:46: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-12 23:08:09: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-12 23:34:08: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-11-12 23:46:44: (connections.c.718) invalid request-line -> sending Status 400
+2023-11-13 00:09:56: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-13 01:18:03: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-13 02:04:45: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-11-13 02:19:53: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-11-13 02:59:25: (connections.c.718) invalid request-line -> sending Status 400
+2023-11-13 03:48:28: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-13 03:48:56: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-13 03:51:11: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-13 03:51:11: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-13 03:51:11: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-11-13 04:03:08: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-13 04:03:08: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-13 04:03:08: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-11-13 04:08:41: (connections.c.718) invalid request-line -> sending Status 400
+2023-11-13 04:57:42: (connections.c.718) invalid request-line -> sending Status 400
+2023-11-13 05:31:09: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-13 05:31:10: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-13 05:31:10: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-11-13 06:21:15: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-11-13 06:57:38: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-11-13 07:35:44: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-11-13 11:36:59: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-11-13 12:10:14: (connections.c.718) invalid request-line -> sending Status 400
+2023-11-13 12:27:32: (connections.c.718) invalid request-line -> sending Status 400
+2023-11-13 14:08:09: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-13 14:33:15: (connections.c.718) invalid request-line -> sending Status 400
+2023-11-13 15:24:36: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-13 15:24:36: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-13 15:24:36: (mod_openssl.c.3247) SSL: 1 error:0A0000FC:SSL routines::unknown protocol
+2023-11-13 15:24:36: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-13 15:24:37: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-13 16:23:42: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-11-13 16:42:52: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-11-13 16:48:06: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-13 16:48:06: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-13 19:01:36: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+[Mon Nov 13 20:34:25 2023] json.cgi: WARNING: The key derivation method "opensslv1" is deprecated. Using -pbkdf=>'pbkdf2' would be better.
+[Mon Nov 13 20:34:25 2023] json.cgi: Pass -nodeprecate=>1 to inhibit this message.
+[Mon Nov 13 20:34:25 2023] json.cgi:  at /home/will/LifeLog/htdocs/cgi-bin/json.cgi line 110.
+[Mon Nov 13 20:34:30 2023] json.cgi: WARNING: The key derivation method "opensslv1" is deprecated. Using -pbkdf=>'pbkdf2' would be better.
+[Mon Nov 13 20:34:30 2023] json.cgi: Pass -nodeprecate=>1 to inhibit this message.
+[Mon Nov 13 20:34:30 2023] json.cgi:  at /home/will/LifeLog/htdocs/cgi-bin/json.cgi line 110.
+[Mon Nov 13 20:35:04 2023] json.cgi: Use of uninitialized value in string eq at /home/will/LifeLog/htdocs/cgi-bin/json.cgi line 133.
+[Mon Nov 13 20:37:58 2023] json.cgi: WARNING: The key derivation method "opensslv1" is deprecated. Using -pbkdf=>'pbkdf2' would be better.
+[Mon Nov 13 20:37:58 2023] json.cgi: Pass -nodeprecate=>1 to inhibit this message.
+[Mon Nov 13 20:37:58 2023] json.cgi:  at /home/will/LifeLog/htdocs/cgi-bin/json.cgi line 110.
+[Mon Nov 13 20:53:48 2023] json.cgi: Use of uninitialized value in string eq at /home/will/LifeLog/htdocs/cgi-bin/json.cgi line 133.
+tar: Removing leading `../../' from member names
+tar: Removing leading `../../' from hard link targets
+[Mon Nov 13 21:06:25 2023] json.cgi: Use of uninitialized value in string eq at /home/will/LifeLog/htdocs/cgi-bin/json.cgi line 133.
+[Mon Nov 13 21:08:06 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 104.
+[Mon Nov 13 21:08:06 2023] index.cgi: Use of uninitialized value in numeric ge (>=) at system/modules/MarkdownPlugin.pm line 252.
+[Mon Nov 13 21:08:06 2023] index.cgi: Use of uninitialized value in numeric ge (>=) at system/modules/MarkdownPlugin.pm line 252.
+[Mon Nov 13 21:08:06 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 104.
+[Mon Nov 13 21:08:06 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 104.
+[Mon Nov 13 21:08:06 2023] index.cgi: Use of uninitialized value in numeric ge (>=) at system/modules/MarkdownPlugin.pm line 252.
+[Mon Nov 13 21:08:06 2023] index.cgi: Use of uninitialized value in numeric ge (>=) at system/modules/MarkdownPlugin.pm line 252.
+[Mon Nov 13 21:08:06 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 104.
+[Mon Nov 13 21:08:06 2023] index.cgi: Use of uninitialized value in numeric ge (>=) at system/modules/MarkdownPlugin.pm line 252.
+[Mon Nov 13 21:08:07 2023] index.cgi: Use of uninitialized value in numeric ge (>=) at system/modules/MarkdownPlugin.pm line 252.
+[Mon Nov 13 21:08:07 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 104.
+[Mon Nov 13 21:08:07 2023] index.cgi: Use of uninitialized value $cc in concatenation (.) or string at system/modules/MarkdownPlugin.pm line 645.
+[Mon Nov 13 21:08:07 2023] index.cgi: Use of uninitialized value $cc in concatenation (.) or string at system/modules/MarkdownPlugin.pm line 658.
+[Mon Nov 13 21:08:08 2023] index.cgi: Use of uninitialized value in numeric ge (>=) at system/modules/MarkdownPlugin.pm line 252.
+[Mon Nov 13 21:08:08 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 104.
+[Mon Nov 13 21:08:09 2023] index.cgi: Use of uninitialized value in numeric eq (==) at system/modules/MarkdownPlugin.pm line 104.
+[Mon Nov 13 21:08:09 2023] index.cgi: Wide character in say at /home/will/LifeLog/htdocs/cgi-bin/index.cgi line 50.
+2023-11-13 21:40:21: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-13 22:56:41: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-14 00:54:47: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-14 01:45:37: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-14 02:16:22: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-11-14 04:35:13: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-14 05:41:06: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-11-14 05:56:14: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-14 05:56:14: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-14 05:56:14: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-14 05:56:14: (mod_openssl.c.3247) SSL: 1 error:0A0000FC:SSL routines::unknown protocol
+2023-11-14 05:56:14: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-14 06:33:36: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-14 06:34:08: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-14 06:36:01: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-14 06:36:01: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-14 06:36:01: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-11-14 06:56:03: (connections.c.718) invalid request-line -> sending Status 400
+2023-11-14 07:05:03: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-11-14 07:57:05: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-11-14 08:16:50: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+[Tue Nov 14 08:38:05 2023] json.cgi: Use of uninitialized value in string eq at /home/will/LifeLog/htdocs/cgi-bin/json.cgi line 133.
+[Tue Nov 14 08:38:18 2023] json.cgi: Use of uninitialized value in string eq at /home/will/LifeLog/htdocs/cgi-bin/json.cgi line 133.
+[Tue Nov 14 08:38:22 2023] json.cgi: Use of uninitialized value in string eq at /home/will/LifeLog/htdocs/cgi-bin/json.cgi line 133.
+[Tue Nov 14 08:38:50 2023] json.cgi: Use of uninitialized value in string eq at /home/will/LifeLog/htdocs/cgi-bin/json.cgi line 133.
+[Tue Nov 14 08:44:34 2023] json.cgi: Use of uninitialized value in string eq at /home/will/LifeLog/htdocs/cgi-bin/json.cgi line 133.
+2023-11-14 09:41:08: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-14 09:41:08: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-14 09:41:08: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-11-14 10:05:00: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-14 10:05:01: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-14 10:05:02: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-11-14 10:33:18: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-14 10:33:20: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-14 10:33:20: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-11-14 10:41:46: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-11-14 12:13:06: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-14 12:13:09: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-14 12:13:09: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-14 12:13:11: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-14 12:13:11: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-14 12:13:12: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-14 12:13:13: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-14 12:18:11: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-14 12:18:12: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-14 12:18:12: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-11-14 12:27:59: (mod_openssl.c.3247) SSL: 1 error:0A0000FC:SSL routines::unknown protocol
+2023-11-14 12:27:59: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-14 12:27:59: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-14 12:27:59: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-14 12:27:59: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-14 12:28:00: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-14 12:28:00: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-14 12:28:00: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-14 12:28:00: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-14 13:10:59: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-14 14:20:45: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-14 14:20:47: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-14 14:20:48: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-11-14 14:20:48: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-14 14:20:50: (mod_openssl.c.3247) SSL: 1 error:0A0000FC:SSL routines::unknown protocol
+2023-11-14 14:20:50: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-14 14:20:51: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-14 14:20:53: (connections.c.718) invalid request-line -> sending Status 400
+2023-11-14 14:20:55: (connections.c.718) invalid request-line -> sending Status 400
+2023-11-14 14:20:57: (connections.c.718) invalid request-line -> sending Status 400
+2023-11-14 14:20:57: (connections.c.718) invalid request-line -> sending Status 400
+2023-11-14 14:20:59: (mod_openssl.c.3247) SSL: 1 error:0A0000F5:SSL routines::unexpected record
+2023-11-14 14:21:14: (connections.c.718) invalid request-line -> sending Status 400
+2023-11-14 14:21:22: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-14 19:13:33: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-14 19:13:35: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-14 19:13:36: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-11-14 19:21:30: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-14 19:56:58: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-14 20:17:45: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-14 20:17:57: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-14 20:18:06: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-11-14 20:29:58: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-11-14 20:41:25: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-14 20:41:25: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-14 20:41:25: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-11-14 21:20:01: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-14 22:10:51: (connections.c.718) invalid request-line -> sending Status 400
+2023-11-14 22:26:21: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-14 22:46:39: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-14 23:14:35: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-11-14 23:14:36: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-11-14 23:14:46: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-11-15 00:06:44: (connections.c.718) invalid request-line -> sending Status 400
+2023-11-15 00:15:59: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-15 00:15:59: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-15 01:42:42: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-11-15 01:42:42: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-11-15 01:52:40: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-15 02:04:22: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-15 02:14:08: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-15 02:14:28: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-15 04:44:44: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-11-15 05:27:30: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-11-15 06:47:47: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-15 06:48:16: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-15 06:49:24: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-15 06:49:25: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-15 06:49:25: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-11-15 09:07:20: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-11-15 09:49:14: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-11-15 10:23:30: (connections.c.718) invalid request-line -> sending Status 400
+2023-11-15 10:45:16: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-11-15 11:30:29: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-15 13:26:57: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-11-15 15:18:02: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-15 15:18:03: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-15 15:18:03: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-11-15 15:30:29: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-15 15:30:31: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-15 15:30:33: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-11-15 15:30:33: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-15 15:30:33: (mod_openssl.c.3247) SSL: 1 error:0A0000FC:SSL routines::unknown protocol
+2023-11-15 15:30:34: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-15 15:30:34: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-15 15:30:37: (connections.c.718) invalid request-line -> sending Status 400
+2023-11-15 15:30:38: (connections.c.718) invalid request-line -> sending Status 400
+2023-11-15 15:30:39: (connections.c.718) invalid request-line -> sending Status 400
+2023-11-15 15:30:40: (connections.c.718) invalid request-line -> sending Status 400
+2023-11-15 15:30:41: (mod_openssl.c.3247) SSL: 1 error:0A0000F5:SSL routines::unexpected record
+2023-11-15 15:31:04: (connections.c.718) invalid request-line -> sending Status 400
+2023-11-15 15:31:06: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-15 16:43:48: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-15 17:57:25: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-15 17:57:25: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-15 17:57:25: (mod_openssl.c.3247) SSL: 1 error:0A0000FC:SSL routines::unknown protocol
+2023-11-15 17:57:25: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-15 17:57:25: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-15 18:03:53: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-11-15 19:08:49: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-15 19:08:49: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-15 19:32:45: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-11-15 19:41:49: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-15 19:42:22: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-15 19:44:34: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-15 19:44:34: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-15 19:44:34: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-11-15 20:07:27: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-15 20:09:07: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-15 20:09:40: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-11-15 20:16:08: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-15 20:16:08: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-15 20:16:08: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-11-15 22:25:30: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-16 00:34:01: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-11-16 02:12:27: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-16 02:16:07: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-16 03:06:13: (connections.c.689) oversized request-header -> sending Status 431
+2023-11-16 03:33:02: (connections.c.718) invalid request-line -> sending Status 400
+2023-11-16 03:42:16: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-11-16 03:47:59: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-11-16 04:02:06: (connections.c.718) invalid request-line -> sending Status 400
+2023-11-16 04:18:23: (connections.c.689) oversized request-header -> sending Status 431
+2023-11-16 04:46:23: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-16 07:00:13: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-16 07:00:14: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-16 07:00:14: (mod_openssl.c.3247) SSL: 1 error:0A00006C:SSL routines::bad key share
+2023-11-16 07:38:15: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-16 08:18:15: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-16 08:21:34: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-11-16 11:57:19: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-16 12:58:47: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-16 13:45:08: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-16 13:57:35: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-11-16 14:16:33: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-16 14:16:33: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-16 14:16:33: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-16 14:16:33: (mod_openssl.c.3247) SSL: 1 error:0A0000FC:SSL routines::unknown protocol
+2023-11-16 14:16:33: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-16 14:28:42: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-16 15:06:20: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-16 15:06:27: (mod_openssl.c.3247) SSL: 1 error:0A00010B:SSL routines::wrong version number
+2023-11-16 15:06:27: (mod_openssl.c.3247) SSL: 1 error:0A0000FC:SSL routines::unknown protocol
+2023-11-16 15:06:27: (connections.c.718) invalid request-line -> sending Status 400
+2023-11-16 15:06:27: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-11-16 15:06:27: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-11-16 15:06:28: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-16 15:06:28: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-11-16 15:06:29: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-16 15:06:37: (mod_openssl.c.3247) SSL: 1 error:0A00009C:SSL routines::http request
+2023-11-16 15:06:37: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-16 15:06:37: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-16 15:06:37: (mod_openssl.c.3247) SSL: 1 error:0A0000FC:SSL routines::unknown protocol
+2023-11-16 15:06:38: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-16 15:06:38: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-16 15:06:38: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-16 15:06:38: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-16 15:06:39: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-16 15:06:39: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-16 15:06:39: (connections.c.718) unexpected TLS ClientHello on clear port
+2023-11-16 15:06:40: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-16 15:06:40: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-16 15:06:41: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-16 15:06:41: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-16 15:06:41: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-16 15:06:41: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-16 15:06:41: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-16 15:06:41: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-16 15:06:41: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-16 15:06:42: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-16 15:06:42: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-16 15:06:42: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-16 15:06:42: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-16 15:06:42: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-16 15:06:42: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-16 15:06:43: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-16 15:06:43: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-16 15:06:43: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-16 15:06:43: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-16 15:06:43: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-16 15:06:43: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-16 15:06:44: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-16 15:06:44: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-16 15:06:44: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-16 15:06:44: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-16 15:06:44: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-16 15:06:44: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-16 15:06:44: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-16 15:06:44: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-16 15:06:45: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-16 15:06:45: (mod_openssl.c.3247) SSL: 1 error:0A000102:SSL routines::unsupported protocol
+2023-11-16 15:06:45: (mod_openssl.c.3247) SSL: 1 error:0A0000EB:SSL routines::no application protocol
+2023-11-16 15:06:46: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-16 15:06:47: (mod_openssl.c.3247) SSL: 1 error:0A0000C1:SSL routines::no shared cipher
+2023-11-16 15:06:48: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-16 15:06:48: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-16 15:06:49: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
+2023-11-16 15:06:49: (mod_openssl.c.3247) SSL: 1 error:0A00018C:SSL routines::version too low
diff --git a/log.pl b/log.pl
new file mode 100755 (executable)
index 0000000..10cbb91
--- /dev/null
+++ b/log.pl
@@ -0,0 +1,369 @@
+#!/usr/bin/perl -w
+#
+# Server side command line logging utility.
+# Use to log entries to an database, without having to access via browser.
+# 
+# Programed by: Will Budic
+# Open Source License -> https://choosealicense.com/licenses/isc/
+#
+use v5.14;
+use feature 'switch';
+
+use warnings;
+use strict;
+no warnings ('portable', 'once');
+
+use lib $ENV{'PWD'}.'/htdocs/cgi-bin/system/modules';
+
+require CNFParser;
+require Settings;
+$CGI::Carp::WRAP = 0;     
+
+use Exception::Class ('LifeLogException');
+use DBI;
+use IO::Prompter [ -stdio, -style=>'bold' ];
+
+my $cnf = CNFParser->new('dbLifeLog/main.cnf');
+
+my $TITLE = "LifeLog Command Line Access Utility (".Settings::release().")";
+my $LIMIT = 100; 
+my $LIMIT_REC = Settings::viewAllLimit();
+my ($VW_NAME,$COL_NAME,$COL_TYPE, $SELECT, $INSERT);
+
+my $help = qq(
+$TITLE\n
+Syntax: $0 {-option} {value}...{-dump}={file.log} | {-dump} {dump.log}\n
+Arguments:
+-database   - Database name (usually same as the alias).
+-system     - Automatically login from anon property <<AUTO_LOGIN</> which has to be set in the main.inf.
+            - Options -database and -alias are ignored if this flag is set.
+-db_src     - (Optional) Driver source, defaults to <<DBI_SOURCE<DBI:SQLite:> set in main.cnf.            
+-sys_table  - Create/Use sys table, for the logs. Format: -sys_table=table_name:col_name:sql_type.
+            - i.e. -sys_table=BITCOIN:VALUE:NUMBER  or -sys_table=MESSAGES:MSG:TEXT
+            - The -system option, all previous mentioned, don't need to be set as this overrides and implies when this option is set.
+    -insert - (Optional) Similar to -log, value for the sys_table.
+       -list       - List by category entries we are not logging. Next argument can be a single or list of catecory id's.
+                   - i.e. -list '1:6:9' or just -list to list all categories up to 10.
+-alias      - alias for login into database.            
+-cat_id     - (Optional) New log entry category id. Will be prompted for if not provided.
+-log        - (Optional) Log message or text to be logged is next argument.
+-uvar       - (Optional) Reads in an user variable for the insert value.
+
+This program requires an interactive shell, for unspeciefied but required arguments will be terminal asked, i.e password. 
+Piping to this program is not anymore being supported.
+
+       Limitations:
+           Currently date based entries are not possible to be added, and it is not recomended to use this utility for batch processing. 
+           To access any LifeLog based database, password has to be entered in the terminal. Can be bypassed with -system option flag.
+           There is a limit to log message size to $LIMIT_REC characters (can't be changed).
+           There is a limit of data presented and dumped to a \$LIMIT=$LIMIT of entries (modify in $0 to \$LIMIT=\"\"; if you want unlimited).
+           Data dumps are only by category from the latest entry as returned by the view of VW_LOG.
+    Examples:
+    $0 -db_src "DBI:Pg:host=localhost;" -database lifelog -sys_table=BITCOIN:VALUE:INTEGER
+
+    The following -nbuilt can be used by modifying this perl file (not recommended):
+    ./log.pl -inbuilt
+
+    The following will put into LOF field an current user variable, the table REMOTE_MONITOR will be created if it doesn't exists.
+    ./log.pl -system -sys_table REMOTE_MONITOR:LOG:VARCHAR(1024) -uvar LAST_MONITOR_READING
+
+    The following selects an externaly created view AVG_BITCOIN and greps the data as output only:
+    $0 -database lifelog -list 01:2:3
+    -db_src "DBI:Pg:host=localhost;" -database lifelog -sys_table=AVG_BITCOIN -list -system | grep "|"
+    Result:
+    46804.49|Avg: 46804.49|Min: 44321|Max: 48043|
+
+);
+
+
+       my ($database, $alias, $passw, $db_source, $set, $insert, $table, $cat_id,$list, $dump, $out) = 0;
+       my ($IS_PG_DB, $DSN, $DBFILE);
+       my $LOG_PATH = "dbLifeLog/";
+    my $log;
+  
+       foreach my $arg(@ARGV){
+           #print "{{{$arg}}}"; 
+           if($arg =~ /^\-/){
+                if   ($arg=~/(^\-*\?)/){print $help; exit}  
+                elsif($arg=~/(^\-*database)/){$set=1;}
+                elsif($arg=~/(^\-*alias)/){$set=2;}
+                elsif($arg=~/(^\-*db_src)/){$set=3;}
+                elsif($arg=~/(^\-*c.*)/){$set=4;}
+                elsif($arg=~/(^\-*log)/){$set=5;}
+                elsif($arg=~/(^\-*list)/){$set=6;$list=-1}
+                elsif($arg=~/(^\-*dump)/){
+                    foreach(split /=/, $arg){
+                      $dump = $_; 
+                      if($dump =~ m/^~\//) {
+                                   $dump =~ s/~/$ENV{'HOME'}/
+                      }
+                    }
+                    if($dump && $dump !~ /(^\-*dump)/){$out = "You have set log output file to -> $dump\n"}else{$set=7}
+                }
+                elsif($arg=~/(^\-*system)/){$set = 8; $passw = $database}
+                elsif($arg=~/(^\-*sys_table)/){$set = 9; foreach(split /=/, $arg){$table = $_;}
+                    if($table && $table =~ /(^\-*sys_table)/){$table = undef}
+                }
+                elsif($arg=~/(^\-*insert)/){$set = 10;}
+                elsif($arg=~/(^\-uvar)/)   {$set = 11;}
+                elsif($arg=~/(^\-*inbuilt)/){
+                    # Use Inbuild here and configurate here in perl script. Why not?
+                    # Tip - Setup main.inf and login with bellow creadentials, to create the lifelog database.
+                    $db_source = "DBI:Pg:host=localhost;";
+                    $database  = "lifelog";
+                    $alias     = "lifelog";
+                    $passw     = "lifelog";
+                    $table     = "BITCOIN:VALUE:INTEGER";
+                }
+           }elsif($arg ne $ENV{'HOME'}){          
+
+                if($arg=~/^\w+\./){
+                    print "Ignoring -> $arg\n"; 
+                    next;
+                }
+                next if ! $set;
+                if   ($set == 1 ){$database = $arg}
+                elsif($set == 2 ){$alias = $arg}
+                elsif($set == 3 ){$db_source = $arg}
+                elsif($set == 4 ){$cat_id = $arg}
+                elsif($set == 5 ){$log = $arg}
+                elsif($set == 6 ){$list="";
+                    foreach(split /:/, $arg){$list .= "ID_CAT=$_ OR ";}
+                    if($list =~ m/ OR $/){$list =~ s/ OR $//;}else{$list.="ID_CAT=".$arg}
+                }
+                elsif($set == 7 ){$dump = $arg}
+                elsif($set == 9 ){$table = $arg if (!$table)}
+                elsif($set == 10){$insert = $arg}
+                elsif($set == 11){$insert = `~/uvar.sh -r $arg`}
+                undef $set;
+        }else{
+            print "<<<<<$arg>>>>\n"
+        }
+       }#rof
+    say "WARNING! Argument type $set, has not been provided!" if($set);
+
+if($insert){
+   $log = $insert;
+}    
+
+if($set && $set > 7 && !$db_source){
+    my $prp = $cnf->anon('AUTO_LOGIN', undef);
+    my @a = split('/', $prp);
+    if(@a==2){
+        $alias=$database=$a[0]; $passw=$a[1];
+    }else{
+        say "Error: Autonom property not set AUTO_LOGIN<".$prp."> in main.inf to operate system table -> $table."; exit 0;
+    }          
+    undef $set;
+}
+
+if($list){
+    if($list eq -1){
+       if($cat_id){$list = $cat_id}else{$list="<11"}
+    }
+    $cat_id = $list;
+}
+
+if(!$db_source){
+    $db_source = $cnf->constant('DBI_SOURCE');
+    $db_source = "DBI:SQLite:" if !$db_source;
+}
+
+$IS_PG_DB = 1 if(index (uc $db_source, 'DBI:PG') ==0);
+
+if(!$database){$database = prompt "\n$TITLE\nPlease enter database name: "}
+if(!$alias){$alias = prompt "\n$TITLE\nPlease enter alias name: "}
+if(!$passw){$passw = prompt "\n$TITLE\nPlease enter password for database -> $database: ", -echo => '*'}
+$passw = uc crypt $passw, hex Settings->CIPHER_KEY if $passw && !$IS_PG_DB;
+       
+  
+my $db = connectDB($database,$alias,$passw);
+my $st = traceDBExe("SELECT alias FROM AUTH WHERE alias='$alias' and passw='$passw';");
+my @c = $st->fetchrow_array();
+if (@c && $c[0] eq $alias) {
+    if($table){checkCreateTable()}
+    elsif(!$cat_id){
+            $cat_id = $cnf->anon('CAT', undef);
+            $cat_id =~ s/^.*>\n//;
+            say "Sample Categories:\n$cat_id";
+            $cat_id = prompt "Enter Category id (default is '01' for Unspecified): ";
+            $cat_id = '01' if ($cat_id eq ""); 
+    }
+    
+    if(!$log&&!$list){
+        my $t = prompt "Enter Log ([enter] key quits):";
+        $log = $t;
+        while($t ne ""){
+            $t=prompt ":";
+            $log .= "\n".$t if $t;
+        }
+
+        say "\nLog:$log";
+        if(!$log){
+            say "Aborting, no log has been entered."; exit;
+        }
+    }
+    else{
+        #encode
+        $log =~ s/'/''/g if $log;
+    }
+    if($list){
+        my ($fh, $is_view, $cnt) = (undef,0,0);
+        if($table) {
+            if($IS_PG_DB){
+             $SELECT = "SELECT * FROM public.\"$table\";"; 
+            }else{
+             $SELECT = "SELECT * FROM '$table';"; 
+            }
+            $is_view = 1;
+        }
+        if (!$SELECT){
+             $SELECT = "SELECT DATE, LOG FROM VW_LOG WHERE $list LIMIT $LIMIT_REC"; 
+        }
+        $st = traceDBExe($SELECT);
+        if ($dump){print $out if $out; open($fh, '>', $dump)}else{$fh=*STDOUT}
+        my $dot = "-" x 80;
+        print $fh $dot."\n";
+            print $fh $TITLE."\nDSN: $DSN\n"."DATE: ".gmtime()."\nSQL: $SELECT\n";
+        print $fh $dot."\n";
+        while(@c=$st->fetchrow_array()){
+            if($LIMIT && $cnt>$LIMIT){last}
+            if($is_view){
+                foreach(@c){print $fh $_."|";}
+                print "\n";
+            }else{
+                print $fh "".$c[0]."|".$c[1]."\n"; 
+            }
+            $cnt++;
+        }
+        print $fh $dot."\n";
+        close $fh if $dump;
+        print "Done, written to dump file $cnt entries!\n" if $dump;
+    }
+    else{
+        if($INSERT){
+            # try{
+                if($log ne""){
+                    my $stamp = Settings::getCurrentSQLTimeStamp();                
+                    my $pst = $db->prepare($INSERT);                
+                    $pst->execute("$stamp", $log);
+                    say "Insert issued to -> $DSN: for $table $stamp=>'$log'";
+                }
+               
+            # }catch{                
+
+            #     # if (my $ex = $@) {
+            #     #     print STDERR "DBI Exception:\n";
+            #     #     print STDERR "  Exception Type: ", ref $ex, "\n";
+            #     #     print STDERR "  Error:          ", $ex->error, "\n";
+            #     #     print STDERR "  Err:            ", $ex->err, "\n";
+            #     #     print STDERR "  Errstr:         ", $ex->errstr, "\n";
+            #     #     print STDERR "  State:          ", $ex->state, "\n";
+            #     #     print STDERR "  Return Value:   ", ($ex->retval || 'undef'), "\n";
+            #     # } 
+
+
+            #     LifeLogException->throw(error=>"DSN: [$DSN]\nSQL:$INSERT\nError encountered -> $@", show_trace=>1);
+            # };
+        }
+        else{
+            Settings::toLog($db, $log, $cat_id);
+            say "Log issued to -> $DSN: for LifeLog.LOG";
+        }
+                
+    }
+}else{
+    #We log failed possible intruder access.
+    if(!$passw){
+        say "Error: Exiting, no password has been entered for ($alias).";  exit 0;
+    }
+    Settings::toLog($db,"User $alias, failed to authenticate, from command line!");
+    say "Error: Get out of here! Entered password doesn't match for ($alias).";  exit 0;
+}
+
+sub connectDB {
+    my ($d,$u,$p) = @_;
+    $u = $alias if(!$u);
+    $p = $alias if(!$p);
+    my $db =$u;
+    if(!$d){$db = 'data_'.$u.'_log.db';$d=$u}
+    else{   $db = 'data_'.$d.'_log.db';$database = $d if !$database}
+    $DBFILE = $LOG_PATH.$db;
+    if ($IS_PG_DB)  {
+        $DSN = $db_source .'dbname='.$d;
+    }else{
+        $DSN = $db_source .'dbname='.$DBFILE;        
+    }    
+    try{$u=$p="lifelog";
+        return DBI->connect($DSN, $u, $p, {AutoCommit => 1, RaiseError => 1, PrintError => 0, show_trace=>1});
+    }catch{           
+       LifeLogException->throw(error=>"Error->$@\n[$DSN]",  show_trace=>1);
+    }
+}
+
+sub traceDBExe {
+    my $sql = shift;
+    try{
+        print "<<traceDBExe<$sql>>>\n" if($sql !~ /^SELECT/);
+        my $st = $db->prepare($sql);
+           $st -> execute() or LifeLogException->throw("Execute failed [$DBI::errstri]", show_trace=>1);
+        return $st;
+    }catch{
+        #BUG 31 fix.
+        if($IS_PG_DB &&  index($sql,Settings->VW_LOG)>0){
+            $db -> do(Settings::createViewLOGStmt());
+            my $st = $db->prepare($sql);
+               $st -> execute() or LifeLogException->throw("Execute failed [$DBI::errstri]", show_trace=>1);
+            return $st;
+        }
+        LifeLogException->throw(error=>"DSN: [".Settings::dsn()."] Error encountered -> $@", show_trace=>1);
+    }
+}
+
+
+sub checkCreateTable {
+   print "$TITLE\nUsing spec -> $table\n";
+   my($table,$col,$typ) =  split(':',$table); # our global $table is different to the one we use with SQL.   
+   if($table && $col && $typ){
+      $table = uc $table;
+      $VW_NAME = "VW_$table";
+      $COL_NAME = uc $col;
+      $COL_TYPE = uc $typ;
+      if($IS_PG_DB){
+          #TODO
+            my %tables = ();
+            my @tbls = $db->tables(undef, 'public');
+            foreach (@tbls){
+                my $t = uc substr($_,7);
+                $tables{$t} = 1;
+            }
+            if(!$tables{$table}){
+                traceDBExe("CREATE TABLE $table (DATE TIMESTAMP NOT NULL, $COL_NAME $COL_TYPE NOT NULL);");
+                traceDBExe(qq(CREATE VIEW $VW_NAME AS
+          SELECT rowid as ID,*, (select count(rowid) from LOG as recount where a.rowid >= recount.rowid) as PID
+          FROM $table as a ORDER BY Date(DATE) DESC;
+));
+            }
+
+      }else{
+                my $pst = traceDBExe("SELECT count(name) FROM sqlite_master WHERE type='table' and name like '$table';");
+                my @res = $pst->fetchrow_array();
+                if($res[0]==0){
+                    traceDBExe("CREATE TABLE $table (DATE DATETIME NOT NULL, $COL_NAME $COL_TYPE NOT NULL);");
+                }
+                $pst = traceDBExe("SELECT count(name) FROM sqlite_master WHERE type='view' and name like '$VW_NAME';");
+                @res = $pst->fetchrow_array();
+                if($res[0]==0){
+                    traceDBExe(
+                                qq(CREATE VIEW $VW_NAME AS
+                                        SELECT rowid as ID,*, (select count(rowid) from LOG as recount where a.rowid >= recount.rowid) as PID
+                                        FROM $table as a ORDER BY Date(DATE) DESC, Time(DATE) DESC;
+                    ));
+                }
+       }      
+      $SELECT = "SELECT DATE, $COL_NAME FROM $VW_NAME LIMIT $LIMIT_REC;";
+      $INSERT = "INSERT INTO $table(DATE, $COL_NAME) VALUES(?,?)";
+  }
+}
+
+END {$db->disconnect() if ($db)}
\ No newline at end of file
diff --git a/rss_output/tree_feed_CPAN.cnf b/rss_output/tree_feed_CPAN.cnf
new file mode 100644 (file)
index 0000000..14ba1d0
--- /dev/null
@@ -0,0 +1,1230 @@
+<<CNF_FEED<TREE>
+    Release: 1
+    Version: 1.0
+      <Feed<
+       Expires: 2023-09-26 08:46:42
+       File: ./rss_output/tree_feed_CPAN.cnf
+       Published: 2023-09-14 22:46:42.042 UTC
+       Title: 'Recent CPAN uploads - MetaCPAN'
+       URL: http://search.cpan.org/uploads.rdf
+      [#[
+         CPAN modules news and agenda.
+      ]#]
+      >Feed>
+      <Brew<
+         <Item<
+          Date: 2023-09-14 08:33:57
+          Link: https://metacpan.org/release/SHLOMIF/XML-GrammarBase-0.2.10
+          Title: XML-GrammarBase-0.2.10
+            <Description<
+            [#[
+               <p>Provide roles and base classes for processors of specialized XML grammars.</p><p>Changes for 0.2.10 - 2023-09-14</p><ul><li>Better compatibility with bleadperl</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-14 08:01:08
+          Link: https://metacpan.org/release/SYP/Net-Curl-0.54_2
+          Title: Net-Curl-0.54_2
+            <Description<
+            [#[
+               Perl interface for libcurl
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-14 03:02:53
+          Link: https://metacpan.org/release/ANATOFUZ/Teng-0.34
+          Title: Teng-0.34
+            <Description<
+            [#[
+               <p>very simple DBI wrapper/ORMapper</p><p>Changes for 0.34 - 2023-09-14T03:02:36Z</p><ul><li>[IMPORTANT]  change the minimum supported perl version to 5.16 (#165)</li>
+               <li>FIX: Don't update when set column from null to null (#164 thanks hitode909)</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-14 02:18:56
+          Link: https://metacpan.org/release/KIMOTO/SPVM-0.989042
+          Title: SPVM-0.989042
+            <Description<
+            [#[
+               <p>SPVM Language</p><p>Changes for 0.989042 - 2023-09-12</p><ul><li>Incompatible Changes</li>
+               <li>New Features</li>
+               <li>Document Improvement</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-14 00:05:27
+          Link: https://metacpan.org/release/PERLANCAR/Perinci-To-Doc-0.881
+          Title: Perinci-To-Doc-0.881
+            <Description<
+            [#[
+               <p>Convert Rinci metadata to documentation</p><p>Changes for 0.881 - 2023-07-09</p><ul><li>No functional changes.</li>
+               <li>Remove usage of smartmatch.</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-13 23:57:14
+          Link: https://metacpan.org/release/MARIOROY/MCE-Shared-1.886
+          Title: MCE-Shared-1.886
+            <Description<
+            [#[
+               <p>MCE extension for sharing data supporting threads and processes</p><p>Changes for 1.886</p><ul><li>Add Android support. This required moving MCE::Shared::Base::Common out of MCE::Shared::Base to separate file MCE::Shared::Common.</li>
+               <li>Bump MCE dependency to 1.889.</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-13 23:37:02
+          Link: https://metacpan.org/release/MARIOROY/MCE-1.889
+          Title: MCE-1.889
+            <Description<
+            [#[
+               <p>Many-Core Engine for Perl providing parallel processing capabilities</p><p>Changes for 1.889</p><ul><li>Add Android support. Thank you, Dimitrios Kechagias.</li>
+               <li>Revert defer signal-handling in MCE::Channel (send2 method).</li>
+               <li>Improve mutex synchronize (aka enter) with guard capability. Thank you, Jos� Joaqu�n Atria.</li>
+               <li>Fix mutex re-entrant lock on the Windows platform.</li>
+               <li>Add mutex guard_lock method.</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-13 23:35:35
+          Link: https://metacpan.org/release/MARIOROY/Mutex-1.011
+          Title: Mutex-1.011
+            <Description<
+            [#[
+               <p>Various locking implementations supporting processes and threads</p><p>Changes for 1.011</p><ul><li>Bump version.</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-13 22:40:32
+          Link: https://metacpan.org/release/EXODIST/Test2-Suite-0.000156
+          Title: Test2-Suite-0.000156
+            <Description<
+            [#[
+               <p>Distribution with a rich set of tools built upon the Test2 framework.</p><p>Changes for 0.000156 - 2023-09-13T15:11:52-07:00</p><ul><li>Fix typo in POD for Test2::Util::Importer</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-13 21:57:38
+          Link: https://metacpan.org/release/PEVANS/Device-AVR-UPDI-0.14
+          Title: Device-AVR-UPDI-0.14
+            <Description<
+            [#[
+               <p>interact with an AVR microcontroller over UPDI</p><p>Changes for 0.14 - 2023-09-13</p><ul><li>CHANGES</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-13 21:30:55
+          Link: https://metacpan.org/release/AJNN/Mac-Finder-Tags-0.02
+          Title: Mac-Finder-Tags-0.02
+            <Description<
+            [#[
+               <p>Access macOS file tags (aka Finder labels)</p><p>Changes for 0.02 - 2023-09-13</p><ul><li>Avoid syntax that causes warnings in Object::Pad 0.801.</li>
+               <li>Tests no longer fail for unexpected warnings, except during author testing.</li>
+               <li>Drop Devel::CheckOS prerequisite (by bundling it).</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-13 21:00:16
+          Link: https://metacpan.org/release/MICHIELB/GD-Barcode-2.00
+          Title: GD-Barcode-2.00
+            <Description<
+            [#[
+               <p>Create barcode image with GD</p><p>Changes for 2.00 - 2023-09-13</p><ul><li>'Production' release, no changes to 1.99_03</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-13 20:58:49
+          Link: https://metacpan.org/release/BENNIE/VMware-vCloud-2.403
+          Title: VMware-vCloud-2.403
+            <Description<
+            [#[
+               <p>VMware vCloud API</p><p>Changes for 2.403 - 2023-09-13</p><ul><li>Added: POD test</li>
+               <li>Improved: 'use warnings' on all modules</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-13 20:44:39
+          Link: https://metacpan.org/release/RKAPL/EAI-Wrap-0.3
+          Title: EAI-Wrap-0.3
+            <Description<
+            [#[
+               framework for easy creation of Enterprise Application Integration tasks
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-13 20:27:57
+          Link: https://metacpan.org/release/MIYAGAWA/Starman-0.4017
+          Title: Starman-0.4017
+            <Description<
+            [#[
+               <p>High-performance preforking PSGI/Plack web server</p><p>Changes for 0.4017 - 2023-09-13T13:27:02Z</p><ul><li>Handle EINTR when doing sysread calls (Rob Mueller) #148</li>
+               <li>Requires perl 5.14</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-13 17:41:55
+          Link: https://metacpan.org/release/EXODIST/Term-Table-0.017
+          Title: Term-Table-0.017
+            <Description<
+            [#[
+               <p>Format a header and rows into a table</p><p>Changes for 0.017 - 2023-09-13T10:41:08-07:00</p><ul><li>Remove 'Importer' dependency</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-13 16:02:42
+          Link: https://metacpan.org/release/PEVANS/Device-Chip-TSL256x-0.09
+          Title: Device-Chip-TSL256x-0.09
+            <Description<
+            [#[
+               <p>chip driver for TSL256x</p><p>Changes for 0.09 - 2023-09-13</p><ul><li>CHANGES</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-13 16:01:19
+          Link: https://metacpan.org/release/PEVANS/Device-Chip-TCS3472x-0.05
+          Title: Device-Chip-TCS3472x-0.05
+            <Description<
+            [#[
+               <p>chip driver for TCS3472x-family</p><p>Changes for 0.05 - 2023-09-13</p><ul><li>CHANGES</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-13 16:01:04
+          Link: https://metacpan.org/release/PEVANS/Device-Chip-SSD1306-0.14
+          Title: Device-Chip-SSD1306-0.14
+            <Description<
+            [#[
+               <p>chip driver for monochrome OLED modules</p><p>Changes for 0.14 - 2023-09-13</p><ul><li>CHANGES</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-13 15:59:38
+          Link: https://metacpan.org/release/PEVANS/Device-Chip-Si5351-0.02
+          Title: Device-Chip-Si5351-0.02
+            <Description<
+            [#[
+               <p>chip driver for Si5351</p><p>Changes for 0.02 - 2023-09-13</p><ul><li>CHANGES</li>
+               <li>BUGFIXES</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-13 15:58:10
+          Link: https://metacpan.org/release/PEVANS/Device-Chip-SDCard-0.04
+          Title: Device-Chip-SDCard-0.04
+            <Description<
+            [#[
+               <p>chip driver for SD and MMC cards</p><p>Changes for 0.04 - 2023-09-13</p><ul><li>CHANGES</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-13 15:56:44
+          Link: https://metacpan.org/release/PEVANS/Device-Chip-PCF8574-0.06
+          Title: Device-Chip-PCF8574-0.06
+            <Description<
+            [#[
+               <p>chip driver for a PCF8574 or PCA8574</p><p>Changes for 0.06 - 2023-09-13</p><ul><li>CHANGES</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-13 15:56:33
+          Link: https://metacpan.org/release/PEVANS/Device-Chip-PCF8563-0.04
+          Title: Device-Chip-PCF8563-0.04
+            <Description<
+            [#[
+               <p>chip driver for a PCF8563</p><p>Changes for 0.04 - 2023-09-13</p><ul><li>CHANGES</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-13 15:54:59
+          Link: https://metacpan.org/release/PEVANS/Device-Chip-OPT3001-0.03
+          Title: Device-Chip-OPT3001-0.03
+            <Description<
+            [#[
+               <p>chip driver for OPT3001</p><p>Changes for 0.03 - 2023-09-13</p><ul><li>CHANGES</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-13 15:53:40
+          Link: https://metacpan.org/release/PEVANS/Device-Chip-nRF24L01P-0.08
+          Title: Device-Chip-nRF24L01P-0.08
+            <Description<
+            [#[
+               <p>chip driver for a nRF24L01+</p><p>Changes for 0.08 - 2023-09-13</p><ul><li>CHANGES</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-13 15:52:21
+          Link: https://metacpan.org/release/PEVANS/Device-Chip-NoritakeGU_D-0.06
+          Title: Device-Chip-NoritakeGU_D-0.06
+            <Description<
+            [#[
+               <p>chip driver for Noritake GU-D display modules</p><p>Changes for 0.06 - 2023-09-13</p><ul><li>CHANGES</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-13 15:50:58
+          Link: https://metacpan.org/release/PEVANS/Device-Chip-MPL3115A2-0.13
+          Title: Device-Chip-MPL3115A2-0.13
+            <Description<
+            [#[
+               <p>chip driver for a MPL3115A2</p><p>Changes for 0.13 - 2023-09-13</p><ul><li>CHANGES</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-13 15:49:37
+          Link: https://metacpan.org/release/PEVANS/Device-Chip-MCP23x17-0.07
+          Title: Device-Chip-MCP23x17-0.07
+            <Description<
+            [#[
+               <p>chip driver for the MCP23x17 family</p><p>Changes for 0.07 - 2023-09-13</p><ul><li>CHANGES</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-13 15:48:18
+          Link: https://metacpan.org/release/PEVANS/Device-Chip-MAX7219-0.09
+          Title: Device-Chip-MAX7219-0.09
+            <Description<
+            [#[
+               <p>chip driver for a MAX7219</p><p>Changes for 0.09 - 2023-09-13</p><ul><li>CHANGES</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-13 15:47:00
+          Link: https://metacpan.org/release/PEVANS/Device-Chip-MAX44009-0.05
+          Title: Device-Chip-MAX44009-0.05
+            <Description<
+            [#[
+               <p>chip driver for MAX44009</p><p>Changes for 0.05 - 2023-09-13</p><ul><li>CHANGES</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-13 15:45:41
+          Link: https://metacpan.org/release/PEVANS/Device-Chip-INA219-0.10
+          Title: Device-Chip-INA219-0.10
+            <Description<
+            [#[
+               <p>chip driver for an INA219</p><p>Changes for 0.10 - 2023-09-13</p><ul><li>CHANGES</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-13 15:44:22
+          Link: https://metacpan.org/release/PEVANS/Device-Chip-HTU21D-0.10
+          Title: Device-Chip-HTU21D-0.10
+            <Description<
+            [#[
+               <p>chip driver for HTU21D</p><p>Changes for 0.10 - 2023-09-13</p><ul><li>CHANGES</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-13 15:43:03
+          Link: https://metacpan.org/release/PEVANS/Device-Chip-DS1307-0.08
+          Title: Device-Chip-DS1307-0.08
+            <Description<
+            [#[
+               <p>chip driver for a DS1307</p><p>Changes for 0.08 - 2023-09-13</p><ul><li>CHANGES</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-13 15:41:44
+          Link: https://metacpan.org/release/PEVANS/Device-Chip-CCS811-0.03
+          Title: Device-Chip-CCS811-0.03
+            <Description<
+            [#[
+               <p>chip driver for CCS811</p><p>Changes for 0.03 - 2023-09-13</p><ul><li>CHANGES</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-13 15:40:25
+          Link: https://metacpan.org/release/PEVANS/Device-Chip-CC1101-0.09
+          Title: Device-Chip-CC1101-0.09
+            <Description<
+            [#[
+               <p>chip driver for a CC1101</p><p>Changes for 0.09 - 2023-09-13</p><ul><li>CHANGES</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-13 15:38:58
+          Link: https://metacpan.org/release/PEVANS/Device-Chip-BV4243-0.04
+          Title: Device-Chip-BV4243-0.04
+            <Description<
+            [#[
+               <p>chip driver for a BV4243</p><p>Changes for 0.04 - 2023-09-13</p><ul><li>CHANGES</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-13 15:37:36
+          Link: https://metacpan.org/release/PEVANS/Device-Chip-BNO055-0.04
+          Title: Device-Chip-BNO055-0.04
+            <Description<
+            [#[
+               <p>chip driver for BNO055</p><p>Changes for 0.04 - 2023-09-13</p><ul><li>CHANGES</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-13 15:36:09
+          Link: https://metacpan.org/release/PEVANS/Device-Chip-BME280-0.06
+          Title: Device-Chip-BME280-0.06
+            <Description<
+            [#[
+               <p>chip driver for BME280</p><p>Changes for 0.06 - 2023-09-13</p><ul><li>CHANGES</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-13 15:33:22
+          Link: https://metacpan.org/release/PEVANS/Device-Chip-AVR_HVSP-0.07
+          Title: Device-Chip-AVR_HVSP-0.07
+            <Description<
+            [#[
+               <p>high-voltage serial programming for AVR chips</p><p>Changes for 0.07 - 2023-09-13</p><ul><li>CHANGES</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-13 15:26:50
+          Link: https://metacpan.org/release/PEVANS/Device-Chip-AS3935-0.04
+          Title: Device-Chip-AS3935-0.04
+            <Description<
+            [#[
+               <p>chip driver for AS3935</p><p>Changes for 0.04 - 2023-09-13</p><ul><li>CHANGES</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-13 15:25:06
+          Link: https://metacpan.org/release/PEVANS/Device-Chip-AnalogConverters-0.15
+          Title: Device-Chip-AnalogConverters-0.15
+            <Description<
+            [#[
+               <p>a collection of chip drivers</p><p>Changes for 0.15 - 2023-08-13</p><ul><li>CHANGES</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-13 15:23:40
+          Link: https://metacpan.org/release/PEVANS/Device-Chip-AD9833-0.05
+          Title: Device-Chip-AD9833-0.05
+            <Description<
+            [#[
+               <p>chip driver for AD9833</p><p>Changes for 0.05 - 2023-09-13</p><ul><li>CHANGES</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-13 14:58:27
+          Link: https://metacpan.org/release/YANICK/Dist-Zilla-Plugin-CoalescePod-1.0.0
+          Title: Dist-Zilla-Plugin-CoalescePod-1.0.0
+            <Description<
+            [#[
+               <p>merge .pod files into their .pm counterparts</p><p>Changes for 1.0.0 - 2023-09-13</p><ul><li>API CHANGES</li>
+               <li>STATISTICS</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-13 14:57:01
+          Link: https://metacpan.org/release/YANICK/Dist-Zilla-Plugin-CoalescePod-0.3.1
+          Title: Dist-Zilla-Plugin-CoalescePod-0.3.1
+            <Description<
+            [#[
+               <p>merge .pod files into their .pm counterparts</p><p>Changes for 0.3.1 - 2023-09-13</p><ul><li>STATISTICS</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-13 14:10:21
+          Link: https://metacpan.org/release/PEVANS/App-sdview-Output-Tickit-0.03
+          Title: App-sdview-Output-Tickit-0.03
+            <Description<
+            [#[
+               <p>interactive terminal-based viewer for App::sdview</p><p>Changes for 0.03 - 2023-09-13</p><ul><li>CHANGES</li>
+               <li>BUGFIXES</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-13 11:25:40
+          Link: https://metacpan.org/release/AWNCORP/Venus-4.11
+          Title: Venus-4.11
+            <Description<
+            [#[
+               <p>OO Library for Perl 5</p><p>Changes for 4.11 - 2023-09-13</p><ul><li>[feature] Implement Venus::Assert#includes</li>
+               <li>[feature] Implement Venus::Future</li>
+               <li>[feature] Refactor Venus::Assert, Implement Venus::{Coercion,Constraint}</li>
+               <li>[feature] Implement Venus::Space#{patch,patched,unpatch}</li>
+               <li>[feature] Implement Venus::Sealed</li>
+               <li>[feature] Implement Venus::Atom</li>
+               <li>[feature] Implement Venus::Enum</li>
+               <li>[feature] Implement Venus::Role::Superable</li>
+               <li>[feature] Implement Venus::Role::Patchable</li>
+               <li>[feature] Implement Venus#clone</li>
+               <li>[feature] Implement Venus::Process#future</li>
+               <li>[feature] Implement Venus::Future#wait</li>
+               <li>[update] Refactor Venus::Test</li>
+               <li>[update] Add test and documentation for Venus::Process#is_dyadic</li>
+               <li>[update] Update Venus::Process#await, auto-reap processes</li>
+               <li>[update] Research CPANTS issue with Venus::Process</li>
+               <li>[update] Update Venus::Process, prevent PPID in dyads</li>
+               <li>[update] Use Venus::Check types in all signatures</li>
+               <li>[update] Update Venus#async to return Venus::Future</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-13 11:00:19
+          Link: https://metacpan.org/release/JBAIER/Pass-OTP-1.6
+          Title: Pass-OTP-1.6
+            <Description<
+            [#[
+               <p>Perl implementation of HOTP / TOTP algorithms</p><p>Changes for 1.6 - 2023-09-13</p><ul><li>fix SHA384 and SHA512 blocksize (#1)</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-13 10:35:02
+          Link: https://metacpan.org/release/BOD/Image-Square-0.01_4
+          Title: Image-Square-0.01_4
+            <Description<
+            [#[
+               <p>Crop and resize an image to create a square image</p><p>Changes for 0.01_4</p><ul><li>Tests still fail on different builds of GD.  Now using PNG as input image and native GD format for output.</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-13 09:13:52
+          Link: https://metacpan.org/release/MRUEDA/Convert-Pheno-0.13
+          Title: Convert-Pheno-0.13
+            <Description<
+            [#[
+               <p>A module to interconvert common data models for phenotypic data</p><p>Changes for 0.13 - 2023-09-12T00:00:00Z</p><ul><li>Pushing new version after passing all tests</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-13 09:12:25
+          Link: https://metacpan.org/release/TONYC/Imager-zxing-1.001
+          Title: Imager-zxing-1.001
+            <Description<
+            [#[
+               <p>Barcode scanning with libzxing-cpp</p><p>Changes for 1.001</p><ul><li>re-work std::string handling to use the typemap</li>
+               <li>fix &quot;decoder&quot; -&gt; &quot;decode&quot; in the SYNOPSIS</li>
+               <li>support all Imager image layouts</li>
+               <li>require a recent enough ExtUtils::CppGuess and set the required C++ standard</li>
+               <li>allow the zxing-cpp package name for pkg-config, which seems to be what packagers used before upstream decided on &quot;zxing.pc&quot;. https://github.com/tonycoz/imager-zxing/issues/1</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-13 05:55:56
+          Link: https://metacpan.org/release/KIMOTO/SPVM-Sys-0.491
+          Title: SPVM-Sys-0.491
+            <Description<
+            [#[
+               <p>System Calls for File IO, User, Process, Signal, Socket</p><p>Changes for 0.491 - 2023-09-13</p><ul><li>New Features</li>
+               <li>Incompatible Changes</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-13 04:12:50
+          Link: https://metacpan.org/release/GRYPHON/Log-Dispatch-Email-Mailer-1.13
+          Title: Log-Dispatch-Email-Mailer-1.13
+            <Description<
+            [#[
+               <p>Log::Dispatch::Email subclass that sends mail using Email::Mailer</p><p>Changes for 1.13 - 2023-09-12T21:12:32-07:00</p><ul><li>Require exact v1.23 (resolves issue #5)</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-13 04:11:27
+          Link: https://metacpan.org/release/GRYPHON/exact-me-1.05
+          Title: exact-me-1.05
+            <Description<
+            [#[
+               <p>Original program path locations extension for exact</p><p>Changes for 1.05 - 2023-09-12T21:10:17-07:00</p><ul><li>Remove redundant strict (since it's provided by exact)</li>
+               <li>New import signature change required by exact v1.23</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-13 04:10:01
+          Link: https://metacpan.org/release/GRYPHON/exact-lib-1.04
+          Title: exact-lib-1.04
+            <Description<
+            [#[
+               <p>Compile-time @INC manipulation extension for exact</p><p>Changes for 1.04 - 2023-09-12T21:09:28-07:00</p><ul><li>Remove redundant strict (since it's provided by exact)</li>
+               <li>New import signature change required by exact v1.23</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-13 04:09:57
+          Link: https://metacpan.org/release/GRYPHON/exact-fun-1.01
+          Title: exact-fun-1.01
+            <Description<
+            [#[
+               <p>Functions and methods with parameter lists for exact</p><p>Changes for 1.01 - 2023-09-12T21:08:36-07:00</p><ul><li>Use Import::Into instead of eval to inject/import</li>
+               <li>New import signature change required by exact v1.23</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-13 04:08:39
+          Link: https://metacpan.org/release/GRYPHON/exact-conf-1.08
+          Title: exact-conf-1.08
+            <Description<
+            [#[
+               <p>Cascading merged application configuration extension for exact</p><p>Changes for 1.08 - 2023-09-12T21:07:37-07:00</p><ul><li>Remove redundant strict (since it's provided by exact)</li>
+               <li>New import signature change required by exact v1.23</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-13 04:07:18
+          Link: https://metacpan.org/release/GRYPHON/exact-cli-1.07
+          Title: exact-cli-1.07
+            <Description<
+            [#[
+               <p>Command-line interface helper utilities extension for exact</p><p>Changes for 1.07 - 2023-09-12T21:06:47-07:00</p><ul><li>Remove redundant strict (since it's provided by exact)</li>
+               <li>New import signature change required by exact v1.23</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-13 04:05:52
+          Link: https://metacpan.org/release/GRYPHON/exact-class-1.19
+          Title: exact-class-1.19
+            <Description<
+            [#[
+               <p>Simple class interface extension for exact</p><p>Changes for 1.19 - 2023-09-12T21:05:22-07:00</p><ul><li>New import signature change required by exact v1.23</li>
+               <li>Use Import::Into instead of eval to inject code</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-13 01:04:01
+          Link: https://metacpan.org/release/MBRADSHAW/Mail-BIMI-3.20230913
+          Title: Mail-BIMI-3.20230913
+            <Description<
+            [#[
+               <p>BIMI object</p><p>Changes for 3.20230913 - 2023-09-13</p><ul><li>Add policy.mark-type to Authentication-Results</li>
+               <li>Add policy.experimental to Authentication-Results</li>
+               <li>Add options to limit which mark types a MBP accepts</li>
+               <li>Add options to limit acceptance of experimental certificates</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-13 00:06:02
+          Link: https://metacpan.org/release/PERLANCAR/App-rimetadb-0.226
+          Title: App-rimetadb-0.226
+            <Description<
+            [#[
+               <p>Manage a Rinci metadata database</p><p>Changes for 0.226 - 2023-07-09</p><ul><li>No functional changes.</li>
+               <li>Remove the usage of smartmatch.</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-12 23:33:11
+          Link: https://metacpan.org/release/DRCLAW/constant-more-v0.3.0
+          Title: constant-more-v0.3.0
+            <Description<
+            [#[
+               <p>Constants and Enumerations. Assign constant values from the command line</p><p>Changes for v0.3.0 - 2023-09-13</p><ul><li>Features</li>
+               <li>Tests</li>
+               <li>POD</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-12 23:07:51
+          Link: https://metacpan.org/release/GRYPHON/exact-1.23
+          Title: exact-1.23
+            <Description<
+            [#[
+               <p>Perl pseudo pragma to enable strict, warnings, features, mro, filehandle methods</p><p>Changes for 1.23 - 2023-09-12T16:06:03-07:00</p><ul><li>Improve/fix import of packages into other packages (resolves issue #4)</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-12 22:14:53
+          Link: https://metacpan.org/release/JIMAVERA/ODF-MailMerge-1.000
+          Title: ODF-MailMerge-1.000
+            <Description<
+            [#[
+               <p>&quot;Mail Merge&quot; or just substitute tokens in ODF documents</p><p>Changes for 1.000</p><ul><li>ODF::MailMerge::Engine-&gt;new positional args eliminated; now use proto_elt =&gt; $table   # specify the object directly context =&gt; $context, proto_tag =&gt; &quot;tagstring&quot;  # search for it Modifier :die (&quot;Delete If Empty&quot;) replaces :delempty</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-12 21:49:07
+          Link: https://metacpan.org/release/SHANCOCK/Perl-Tidy-20230912
+          Title: Perl-Tidy-20230912
+            <Description<
+            [#[
+               indent and reformat perl scripts
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-12 21:45:10
+          Link: https://metacpan.org/release/BOD/Image-Square-0.01_3
+          Title: Image-Square-0.01_3
+            <Description<
+            [#[
+               Crop and resize an image to create a square image
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-12 19:38:33
+          Link: https://metacpan.org/release/TURNERJW/StreamFinder-2.19
+          Title: StreamFinder-2.19
+            <Description<
+            [#[
+               <p>Fetch actual raw streamable URLs from various radio-station, video &amp; podcast websites.</p><p>Changes for 2.19 - 2023-09-12</p><ul><li>StreamFinder::Youtube - 1) Fix failure to fetch artist, icon, etc. sometimes on embedded IFRAME urls (slight site changes) and first episode from some channels.  2) Add -youtube-site argument to specify a different default youtube site (default https://www.youtube.com). 3) Add ability to parse youtube channel URLs containing an at-sign, ie.: https://www.youtube.com/@channelID.</li>
+               <li>StreamFinder::Subsplash - Restore as EXPERIMENTAL, as this site seems to now work again, at least for audio streams on some sites.</li>
+               <li>StreamFinder::Anystream - doc. touchups.</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-12 19:00:33
+          Link: https://metacpan.org/release/AWNCORP/Venus-4.10
+          Title: Venus-4.10
+            <Description<
+            [#[
+               <p>OO Library for Perl 5</p><p>Changes for 4.10 - 2023-09-12</p><ul><li>[feature] Implement Venus::Assert#includes</li>
+               <li>[feature] Implement Venus::Future</li>
+               <li>[feature] Refactor Venus::Assert, Implement Venus::{Coercion,Constraint}</li>
+               <li>[feature] Implement Venus::Space#{patch,patched,unpatch}</li>
+               <li>[feature] Implement Venus::Sealed</li>
+               <li>[feature] Implement Venus::Atom</li>
+               <li>[feature] Implement Venus::Enum</li>
+               <li>[feature] Implement Venus::Role::Superable</li>
+               <li>[feature] Implement Venus::Role::Patchable</li>
+               <li>[feature] Implement Venus#clone</li>
+               <li>[feature] Implement Venus::Process#future</li>
+               <li>[feature] Implement Venus::Future#wait</li>
+               <li>[update] Refactor Venus::Test</li>
+               <li>[update] Add test and documentation for Venus::Process#is_dyadic</li>
+               <li>[update] Update Venus::Process#await, auto-reap processes</li>
+               <li>[update] Research CPANTS issue with Venus::Process</li>
+               <li>[update] Update Venus::Process, prevent PPID in dyads</li>
+               <li>[update] Use Venus::Check types in all signatures</li>
+               <li>[update] Update Venus#async to return Venus::Future</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-12 17:09:39
+          Link: https://metacpan.org/release/DERIV/Net-Async-Blockchain-0.003
+          Title: Net-Async-Blockchain-0.003
+            <Description<
+            [#[
+               <p>base for blockchain subscription clients.</p><p>Changes for 0.003 - 2023-09-12T17:08:09+00:00</p><ul><li>Improvements</li>
+               <li>Breaking changes</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-12 14:47:38
+          Link: https://metacpan.org/release/OALDERS/Open-This-0.000033
+          Title: Open-This-0.000033
+            <Description<
+            [#[
+               <p>Try to Do the Right Thing when opening files</p><p>Changes for 0.000033 - 2023-09-12T14:46:08Z</p><ul><li>Add support for IntellJ IDEA, VSCode, VSCodium and more. Also fix typo (GH#51) (mcneb10)</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-12 13:50:33
+          Link: https://metacpan.org/release/NLNETLABS/Net-DNS-SEC-1.22
+          Title: Net-DNS-SEC-1.22
+            <Description<
+            [#[
+               DNSSEC extensions to Net::DNS
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-12 09:35:41
+          Link: https://metacpan.org/release/MIKIHOSHI/WebService-Mailgun-0.16
+          Title: WebService-Mailgun-0.16
+            <Description<
+            [#[
+               <p>API client for Mailgun (https://mailgun.com/)</p><p>Changes for 0.16 - 2023-09-12T09:33:42Z</p><ul><li>fix document</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-12 09:29:10
+          Link: https://metacpan.org/release/MIKIHOSHI/WebService-Mailgun-0.15.1
+          Title: WebService-Mailgun-0.15.1
+            <Description<
+            [#[
+               <p>API client for Mailgun (https://mailgun.com/)</p><p>Changes for 0.15.1 - 2023-09-12T09:27:19Z</p><ul><li>fix document</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-12 09:16:10
+          Link: https://metacpan.org/release/MRUEDA/Convert-Pheno-0.12_4
+          Title: Convert-Pheno-0.12_4
+            <Description<
+            [#[
+               A module to interconvert common data models for phenotypic data
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-12 08:44:03
+          Link: https://metacpan.org/release/LICHTKIND/Graphics-Toolkit-Color-1.61
+          Title: Graphics-Toolkit-Color-1.61
+            <Description<
+            [#[
+               <p>color palette creation helper</p><p>Changes for 1.61 - 2023-09-12</p><ul><li>= fix tests</li>
+               <li>+ renamed complementary method =&gt; complement</li>
+               <li>- deprecated complementary, will be removed at 2.0</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-12 06:33:21
+          Link: https://metacpan.org/release/MERKYS/Graph-SSSR-0.1.0
+          Title: Graph-SSSR-0.1.0
+            <Description<
+            [#[
+               <p>Find Smallest Set of Smallest Rings in graphs</p><p>Changes for 0.1.0 - 2022-12-15</p><ul><li>Initial release.</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-12 03:59:54
+          Link: https://metacpan.org/release/DJZORT/Net-Proxmox-VE-0.38
+          Title: Net-Proxmox-VE-0.38
+            <Description<
+            [#[
+               <p>Pure perl API for Proxmox virtualisation</p><p>Changes for 0.38 - 2023-09-11</p><ul><li>fix/use correct parameter name for user in tests thanks to MartijnLivaart</li>
+               <li>Feat/check new arguments thanks to MartijnLivaart</li>
+               <li>Fix/test access directory thanks to MartijnLivaart via GH#27</li>
+               <li>feat: check if debug parameter propagates from new() thanks to MartijnLivaart via GH#29</li>
+               <li>Pod corrections thanks to poptix via GH#31</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-12 01:48:59
+          Link: https://metacpan.org/release/KIMOTO/SPVM-IO-0.208
+          Title: SPVM-IO-0.208
+            <Description<
+            [#[
+               <p>File IO, Socket, Select/Polling.</p><p>Changes for 0.208 - 2023-09-11</p><ul><li>Prerequirement Changes</li>
+               <li>Incompatibe Changes</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-12 00:05:49
+          Link: https://metacpan.org/release/PERLANCAR/Perinci-Access-Perl-0.899
+          Title: Perinci-Access-Perl-0.899
+            <Description<
+            [#[
+               <p>Access Perl module, functions, variables through Riap</p><p>Changes for 0.899 - 2023-07-09</p><ul><li>No functional changes.</li>
+               <li>Remove usage of smartmatch.</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-11 23:07:19
+          Link: https://metacpan.org/release/LICHTKIND/Graphics-Toolkit-Color-1.60
+          Title: Graphics-Toolkit-Color-1.60
+            <Description<
+            [#[
+               <p>color palette creation helper</p><p>Changes for 1.60 - 2023-09-11</p><ul><li>= API development</li>
+               <li>* added color spaces HSB HSW YIQ</li>
+               <li>+ output format array: ['rgb',1,2,3]</li>
+               <li>+ input and output format string: 'rgb: 1,2,3'</li>
+               <li>+ input and output format css_string: 'rgb(1,2,3)'</li>
+               <li>- deprecated getter method string</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-11 21:32:59
+          Link: https://metacpan.org/release/SKIM/PYX-GraphViz-0.05
+          Title: PYX-GraphViz-0.05
+            <Description<
+            [#[
+               <p>GraphViz output for PYX handling.</p><p>Changes for 0.05 - 2023-09-11T23:32:16+02:00</p><ul><li>Fix Makefile.PL which fails with no '.' in @INC.</li>
+               <li>Fix link to image in doc.</li>
+               <li>Improve LICENSE AND COPYRIGHT section in doc.</li>
+               <li>Improve SYNOPSIS section in doc.</li>
+               <li>Rename example file to better name.</li>
+               <li>Rewrite bugtracker to github.</li>
+               <li>Rewrite to new author github username.</li>
+               <li>Update Module::Install to 1.21 version.</li>
+               <li>Update copyright years.</li>
+               <li>Update my name to actual version.</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-11 21:13:51
+          Link: https://metacpan.org/release/SKIM/PYX-0.09
+          Title: PYX-0.09
+            <Description<
+            [#[
+               <p>A perl module for PYX handling.</p><p>Changes for 0.09 - 2023-09-11T23:12:41+02:00</p><ul><li>Common</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-11 19:34:24
+          Link: https://metacpan.org/release/RJBS/App-Cronjob-1.200014
+          Title: App-Cronjob-1.200014
+            <Description<
+            [#[
+               <p>wrap up programs to be run as cron jobs</p><p>Changes for 1.200014 - 2023-09-11T15:34:04-04:00</p><ul><li>fix documentation to add missing switches</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-11 18:38:50
+          Link: https://metacpan.org/release/PREACTION/Minion-Backend-mysql-1.002
+          Title: Minion-Backend-mysql-1.002
+            <Description<
+            [#[
+               <p>MySQL backend</p><p>Changes for 1.002 - 2023-09-11T13:37:53-05:00</p><ul><li>Fixed</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-11 18:34:53
+          Link: https://metacpan.org/release/SRI/Mojolicious-9.34
+          Title: Mojolicious-9.34
+            <Description<
+            [#[
+               <p>Real-time web framework</p><p>Changes for 9.34 - 2023-09-11</p><ul><li>Added support for serving static files with a prefix.</li>
+               <li>Deprecated Mojo::File::spurt in favor of Mojo::File::spew.</li>
+               <li>Added prefix attribute to Mojolicious::Static.</li>
+               <li>Added url_for_file method to Mojolicious::Controller.</li>
+               <li>Added file_path method to Mojolicious::Static.</li>
+               <li>Added spew method to Mojo::File. (genio)</li>
+               <li>Added encoding option to slurp method in Mojo::File. (genio)</li>
+               <li>Added url_for_asset and url_for_file helpers to Mojolicious::Plugins::DefaultHelpers.</li>
+               <li>Added favicon helper to Mojolicious::Plugin::TagHelpers.</li>
+               <li>Fixed support for module_true Perl feature in Mojolicious apps. (haarg)</li>
+               <li>Fixed a bug in Mojo::Promise where map could hang on false values after concurrency limit. (ilmari)</li>
+               <li>Fixed built-in templates to not require an internet connection. (hernan604)</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-11 17:14:12
+          Link: https://metacpan.org/release/LEONT/version-0.9930
+          Title: version-0.9930
+            <Description<
+            [#[
+               <p>Structured version objects</p><p>Changes for 0.9930</p><ul><li>Permit a colon after a vstring, thus allowing an attrlist to follow a version declaration on a 'class' statement (Perl5 #20891)</li>
+               <li>Simplify and fix w.r.t locale handling</li>
+               <li>Make tests not fail when path to dist includes &quot;panic&quot;</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-11 16:14:59
+          Link: https://metacpan.org/release/SKIM/PYX-Sort-0.04
+          Title: PYX-Sort-0.04
+            <Description<
+            [#[
+               <p>Processing PYX data or file and sort element attributes.</p><p>Changes for 0.04 - 2023-09-11T18:14:08+02:00</p><ul><li>Fix bugtracker.</li>
+               <li>Fix sense of example in doc.</li>
+               <li>Fix use lib '.' in Makefile.PL.</li>
+               <li>Improve LICENSE AND COPYRIGHT section in doc.</li>
+               <li>Improve SYNOPSIS section in doc.</li>
+               <li>Rename example to better name.</li>
+               <li>Update Module::Install to 1.21 version.</li>
+               <li>Update author github username.</li>
+               <li>Update author username.</li>
+               <li>Update copyright years.</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-11 15:29:26
+          Link: https://metacpan.org/release/RKAPL/EAI-Wrap-0.2
+          Title: EAI-Wrap-0.2
+            <Description<
+            [#[
+               framework for easy creation of Enterprise Application Integration tasks
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-11 15:25:17
+          Link: https://metacpan.org/release/PROCH/NBI-Slurm-0.6.1
+          Title: NBI-Slurm-0.6.1
+            <Description<
+            [#[
+               <p>NBI Slurm module</p><p>Changes for 0.6.1 - 2023-09-02</p><ul><li>Minor improvements in `make_image_from_bioconda` and `make_package`</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-11 15:16:08
+          Link: https://metacpan.org/release/PROCH/NBI-Slurm-0.6.0
+          Title: NBI-Slurm-0.6.0
+            <Description<
+            [#[
+               <p>NBI Slurm module</p><p>Changes for 0.6.0 - 2023-09-01</p><ul><li>Adding packaging tools: `make_image_from_bioconda` and `make_package`</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-11 15:00:49
+          Link: https://metacpan.org/release/CORION/Net-Async-OSC-0.01
+          Title: Net-Async-OSC-0.01
+            <Description<
+            [#[
+               <p>send/receive OSC asynchronously</p><p>Changes for 0.01 - 2023-09-11</p><ul><li>Released on an unsuspecting world</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-11 13:36:23
+          Link: https://metacpan.org/release/IDOPEREL/Svsh-1.003000
+          Title: Svsh-1.003000
+            <Description<
+            [#[
+               <p>Process supervision shell for daemontools/perp/s6/runit</p><p>Changes for 1.003000 - 2023-09-11T16:35:55+03:00</p><ul><li>Replace Getopt::Compact with core module Getopt::Long</li>
+               <li>Switch license to Apache 2.0</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-11 13:20:12
+          Link: https://metacpan.org/release/WYANT/Astro-App-Satpass2-0.051
+          Title: Astro-App-Satpass2-0.051
+            <Description<
+            [#[
+               <p>Predict satellite visibility using Astro::Coord::ECI</p><p>Changes for 0.051 - 2023-09-11</p><ul><li>Without DateTime, ParseTime::ISO8601 now accepts any zone. These are handled by setting $ENV{TZ} before the conversion and hoping for the best. The documentation warns that this is a shaky way to handle zones.</li>
+               <li>Make Warner-&gt;wail() stack dump if $Carp::Verbose true.</li>
+               <li>Add --almanac to pass(). This adds almanac data to appropriate passes. --ephemeris is more verbose, adding almanac data to all passes. This change involved refactoring event formatting to use sub-templates, rather than if-elsif-else chains.</li>
+               <li>Add 'none' as valid argument to FormatTime-&gt;round_time(). It is equivalent to specifying undef, i.e. no rounding.</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-11 11:14:37
+          Link: https://metacpan.org/release/MRSCOTTY/Connector-1.51
+          Title: Connector-1.51
+            <Description<
+            [#[
+               <p>a generic connection to a hierarchical-structured data set</p><p>Changes for 1.51 - 2023-09-11T11:13:04Z</p><ul></ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-11 09:30:18
+          Link: https://metacpan.org/release/NLNETLABS/Net-DNS-SEC-1.21_01
+          Title: Net-DNS-SEC-1.21_01
+            <Description<
+            [#[
+               DNSSEC extensions to Net::DNS
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-11 08:05:24
+          Link: https://metacpan.org/release/KIMOTO/SPVM-Sys-0.490
+          Title: SPVM-Sys-0.490
+            <Description<
+            [#[
+               <p>System Calls for File IO, User, Process, Signal, Socket</p><p>Changes for 0.490 - 2023-09-11</p><ul><li>Bug Fix</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-11 07:21:21
+          Link: https://metacpan.org/release/MRSCOTTY/Connector-1.50
+          Title: Connector-1.50
+            <Description<
+            [#[
+               <p>a generic connection to a hierarchical-structured data set</p><p>Changes for 1.50 - 2023-09-11T07:06:09Z</p><ul></ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-11 06:52:02
+          Link: https://metacpan.org/release/MBRADSHAW/Mail-Milter-Authentication-3.20230911
+          Title: Mail-Milter-Authentication-3.20230911
+            <Description<
+            [#[
+               <p>A Perl Mail Authentication Milter</p><p>Changes for 3.20230911 - 2023-09-11T06:18:44+00:00</p><ul><li>Core: Switch from deprecated method in Net::DNS In Net::DNS::Resolver, call the rdstring method rather than the deprecated rdstring method This change bumps the minimum version of Net::DNS required to 1.01</li>
+               <li>SPF: Add option to detect and optionally mitigate SPF upgrade problems.</li>
+               <li>Core: Add authentication_milter_log command with arex subcommand which can be used to process ARex JSON log format back into standard Authentication-Results: header lines</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-11 04:26:54
+          Link: https://metacpan.org/release/KIMOTO/SPVM-Sys-0.489
+          Title: SPVM-Sys-0.489
+            <Description<
+            [#[
+               <p>System Calls for File IO, User, Process, Signal, Socket</p><p>Changes for 0.489 - 2023-09-11</p><ul><li>New Features</li>
+               <li>Bug Fix</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-11 01:44:08
+          Link: https://metacpan.org/release/KIMOTO/SPVM-Sys-0.488
+          Title: SPVM-Sys-0.488
+            <Description<
+            [#[
+               <p>System Calls for File IO, User, Process, Signal, Socket</p><p>Changes for 0.488 - 2023-09-11</p><ul><li>Prerequirement Changes</li>
+               <li>Incompatible Changes</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+         <Item<
+          Date: 2023-09-11 01:37:35
+          Link: https://metacpan.org/release/JIMAVERA/ODF-MailMerge-0.003
+          Title: ODF-MailMerge-0.003
+            <Description<
+            [#[
+               <p>&quot;Mail Merge&quot; or just substitute tokens in ODF documents</p><p>Changes for 0.003</p><ul><li>(i.e. only if the row is being replicated).  Preened docs.</li>
+               </ul>
+            ]#]
+            >Description>
+         >Item>
+      >Brew>
+>>
diff --git a/runWebServer.sh b/runWebServer.sh
new file mode 100755 (executable)
index 0000000..d713784
--- /dev/null
@@ -0,0 +1,2 @@
+#!/bin/bash
+lighttpd -D -f lighttpd.conf
diff --git a/scripted_sample_log_data_file.cnf b/scripted_sample_log_data_file.cnf
new file mode 100644 (file)
index 0000000..0b40f5f
--- /dev/null
@@ -0,0 +1,23 @@
+!CNF2.2
+/**
+ A simple sample log file data entries file. In CNF format.
+**/
+
+<<CAT<>
+01|Unspecified `For quick uncategorized entries.
+09|Event       `Event that occurred, meeting, historically important.
+28|Personal    `Personal log of historical importance, diary type.
+32|Expense     `Significant yearly expense.
+35|Income      `Significant yearly income.
+>>
+
+################################################
+# CNF list type items are postfixed with '$$'
+# List is obtained like: $cnf->list('LOG')
+#
+<<LOG$$<2014-11-13 13:48:05`cat=9>
+TED - What your doctor won’t disclose http://youtu.be/oxYU5GNngnk
+>>
+
+<<LOG$$<2016-07-08 00:00:00`cat=32`amount=24.0`aflag=2>Gas Bottle Purchase>>
+<<LOG$$<2018-08-24 22:27:10`cat=1><Search 1927 - If I Could (1988)>>
diff --git a/startDevWebServer.sh b/startDevWebServer.sh
new file mode 100755 (executable)
index 0000000..1136e65
--- /dev/null
@@ -0,0 +1,9 @@
+#!/bin/bash
+
+DIR="/home/will/dev/LifeLog"
+
+if [ ! -d "$DIR/log" ]; then
+    mkdir "$DIR/log"
+fi
+cd $DIR
+thttpd -C ./thttpd.conf &
diff --git a/startLightHTTPServer.sh b/startLightHTTPServer.sh
new file mode 100755 (executable)
index 0000000..4d246e7
--- /dev/null
@@ -0,0 +1,4 @@
+#!/bin/bash
+
+#Starting here in console mode.
+sudo lighttpd -D -f  ~/dev/LifeLog/lighttpd.conf
\ No newline at end of file
diff --git a/stopDevWebServer.sh b/stopDevWebServer.sh
new file mode 100755 (executable)
index 0000000..67c527e
--- /dev/null
@@ -0,0 +1,4 @@
+#!/bin/bash
+PID=$(ps -C thttpd | grep thttpd | awk '{printf "%s", $1}')
+sudo kill -9 $PID
+
diff --git a/tash clear b/tash clear
new file mode 100644 (file)
index 0000000..2f70006
--- /dev/null
@@ -0,0 +1,218 @@
+GIT-STASH(1)                                                                                                                             Git Manual                                                                                                                             GIT-STASH(1)
+
+N\bNA\bAM\bME\bE
+       git-stash - Stash the changes in a dirty working directory away
+
+S\bSY\bYN\bNO\bOP\bPS\bSI\bIS\bS
+       _\bg_\bi_\bt _\bs_\bt_\ba_\bs_\bh list [<log-options>]
+       _\bg_\bi_\bt _\bs_\bt_\ba_\bs_\bh show [-u|--include-untracked|--only-untracked] [<diff-options>] [<stash>]
+       _\bg_\bi_\bt _\bs_\bt_\ba_\bs_\bh drop [-q|--quiet] [<stash>]
+       _\bg_\bi_\bt _\bs_\bt_\ba_\bs_\bh ( pop | apply ) [--index] [-q|--quiet] [<stash>]
+       _\bg_\bi_\bt _\bs_\bt_\ba_\bs_\bh branch <branchname> [<stash>]
+       _\bg_\bi_\bt _\bs_\bt_\ba_\bs_\bh [push [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet]
+                    [-u|--include-untracked] [-a|--all] [-m|--message <message>]
+                    [--pathspec-from-file=<file> [--pathspec-file-nul]]
+                    [--] [<pathspec>...]]
+       _\bg_\bi_\bt _\bs_\bt_\ba_\bs_\bh clear
+       _\bg_\bi_\bt _\bs_\bt_\ba_\bs_\bh create [<message>]
+       _\bg_\bi_\bt _\bs_\bt_\ba_\bs_\bh store [-m|--message <message>] [-q|--quiet] <commit>
+
+D\bDE\bES\bSC\bCR\bRI\bIP\bPT\bTI\bIO\bON\bN
+       Use g\bgi\bit\bt s\bst\bta\bas\bsh\bh when you want to record the current state of the working directory and the index, but want to go back to a clean working directory. The command saves your local modifications away and reverts the working directory to match the H\bHE\bEA\bAD\bD commit.
+
+       The modifications stashed away by this command can be listed with g\bgi\bit\bt s\bst\bta\bas\bsh\bh l\bli\bis\bst\bt, inspected with g\bgi\bit\bt s\bst\bta\bas\bsh\bh s\bsh\bho\bow\bw, and restored (potentially on top of a different commit) with g\bgi\bit\bt s\bst\bta\bas\bsh\bh a\bap\bpp\bpl\bly\by. Calling g\bgi\bit\bt s\bst\bta\bas\bsh\bh without any arguments is equivalent to g\bgi\bit\bt s\bst\bta\bas\bsh\bh p\bpu\bus\bsh\bh. A stash is by
+       default listed as "WIP on _\bb_\br_\ba_\bn_\bc_\bh_\bn_\ba_\bm_\be ...", but you can give a more descriptive message on the command line when you create one.
+
+       The latest stash you created is stored in r\bre\bef\bfs\bs/\b/s\bst\bta\bas\bsh\bh; older stashes are found in the reflog of this reference and can be named using the usual reflog syntax (e.g. s\bst\bta\bas\bsh\bh@\b@{\b{0\b0}\b} is the most recently created stash, s\bst\bta\bas\bsh\bh@\b@{\b{1\b1}\b} is the one before it, s\bst\bta\bas\bsh\bh@\b@{\b{2\b2.\b.h\bho\bou\bur\brs\bs.\b.a\bag\bgo\bo}\b} is also
+       possible). Stashes may also be referenced by specifying just the stash index (e.g. the integer n\bn is equivalent to s\bst\bta\bas\bsh\bh@\b@{\b{n\bn}\b}).
+
+C\bCO\bOM\bMM\bMA\bAN\bND\bDS\bS
+       push [-p|--patch] [-k|--[no-]keep-index] [-u|--include-untracked] [-a|--all] [-q|--quiet] [-m|--message <message>] [--pathspec-from-file=<file> [--pathspec-file-nul]] [--] [<pathspec>...]
+           Save your local modifications to a new _\bs_\bt_\ba_\bs_\bh _\be_\bn_\bt_\br_\by and roll them back to HEAD (in the working tree and in the index). The <message> part is optional and gives the description along with the stashed state.
+
+           For quickly making a snapshot, you can omit "push". In this mode, non-option arguments are not allowed to prevent a misspelled subcommand from making an unwanted stash entry. The two exceptions to this are s\bst\bta\bas\bsh\bh -\b-p\bp which acts as alias for s\bst\bta\bas\bsh\bh p\bpu\bus\bsh\bh -\b-p\bp and pathspec
+           elements, which are allowed after a double hyphen -\b--\b- for disambiguation.
+
+       save [-p|--patch] [-k|--[no-]keep-index] [-u|--include-untracked] [-a|--all] [-q|--quiet] [<message>]
+           This option is deprecated in favour of _\bg_\bi_\bt _\bs_\bt_\ba_\bs_\bh _\bp_\bu_\bs_\bh. It differs from "stash push" in that it cannot take pathspec. Instead, all non-option arguments are concatenated to form the stash message.
+
+       list [<log-options>]
+           List the stash entries that you currently have. Each _\bs_\bt_\ba_\bs_\bh _\be_\bn_\bt_\br_\by is listed with its name (e.g.  s\bst\bta\bas\bsh\bh@\b@{\b{0\b0}\b} is the latest entry, s\bst\bta\bas\bsh\bh@\b@{\b{1\b1}\b} is the one before, etc.), the name of the branch that was current when the entry was made, and a short description of the commit the
+           entry was based on.
+
+               stash@{0}: WIP on submit: 6ebd0e2... Update git-stash documentation
+               stash@{1}: On master: 9cc0589... Add git-stash
+
+           The command takes options applicable to the _\bg_\bi_\bt _\bl_\bo_\bg command to control what is shown and how. See g\bgi\bit\bt-\b-l\blo\bog\bg(1).
+
+       show [-u|--include-untracked|--only-untracked] [<diff-options>] [<stash>]
+           Show the changes recorded in the stash entry as a diff between the stashed contents and the commit back when the stash entry was first created. By default, the command shows the diffstat, but it will accept any format known to _\bg_\bi_\bt _\bd_\bi_\bf_\bf (e.g., g\bgi\bit\bt s\bst\bta\bas\bsh\bh s\bsh\bho\bow\bw -\b-p\bp s\bst\bta\bas\bsh\bh@\b@{\b{1\b1}\b} to
+           view the second most recent entry in patch form). If no <\b<d\bdi\bif\bff\bf-\b-o\bop\bpt\bti\bio\bon\bn>\b> is provided, the default behavior will be given by the s\bst\bta\bas\bsh\bh.\b.s\bsh\bho\bow\bwS\bSt\bta\bat\bt, and s\bst\bta\bas\bsh\bh.\b.s\bsh\bho\bow\bwP\bPa\bat\btc\bch\bh config variables. You can also use s\bst\bta\bas\bsh\bh.\b.s\bsh\bho\bow\bwI\bIn\bnc\bcl\blu\bud\bde\beU\bUn\bnt\btr\bra\bac\bck\bke\bed\bd to set whether -\b--\b-i\bin\bnc\bcl\blu\bud\bde\be-\b-u\bun\bnt\btr\bra\bac\bck\bke\bed\bd is enabled by
+           default.
+
+       pop [--index] [-q|--quiet] [<stash>]
+           Remove a single stashed state from the stash list and apply it on top of the current working tree state, i.e., do the inverse operation of g\bgi\bit\bt s\bst\bta\bas\bsh\bh p\bpu\bus\bsh\bh. The working directory must match the index.
+
+           Applying the state can fail with conflicts; in this case, it is not removed from the stash list. You need to resolve the conflicts by hand and call g\bgi\bit\bt s\bst\bta\bas\bsh\bh d\bdr\bro\bop\bp manually afterwards.
+
+       apply [--index] [-q|--quiet] [<stash>]
+           Like p\bpo\bop\bp, but do not remove the state from the stash list. Unlike p\bpo\bop\bp, <\b<s\bst\bta\bas\bsh\bh>\b> may be any commit that looks like a commit created by s\bst\bta\bas\bsh\bh p\bpu\bus\bsh\bh or s\bst\bta\bas\bsh\bh c\bcr\bre\bea\bat\bte\be.
+
+       branch <branchname> [<stash>]
+           Creates and checks out a new branch named <\b<b\bbr\bra\ban\bnc\bch\bhn\bna\bam\bme\be>\b> starting from the commit at which the <\b<s\bst\bta\bas\bsh\bh>\b> was originally created, applies the changes recorded in <\b<s\bst\bta\bas\bsh\bh>\b> to the new working tree and index. If that succeeds, and <\b<s\bst\bta\bas\bsh\bh>\b> is a reference of the form
+           s\bst\bta\bas\bsh\bh@\b@{\b{<\b<r\bre\bev\bvi\bis\bsi\bio\bon\bn>\b>}\b}, it then drops the <\b<s\bst\bta\bas\bsh\bh>\b>.
+
+           This is useful if the branch on which you ran g\bgi\bit\bt s\bst\bta\bas\bsh\bh p\bpu\bus\bsh\bh has changed enough that g\bgi\bit\bt s\bst\bta\bas\bsh\bh a\bap\bpp\bpl\bly\by fails due to conflicts. Since the stash entry is applied on top of the commit that was HEAD at the time g\bgi\bit\bt s\bst\bta\bas\bsh\bh was run, it restores the originally stashed state with no
+           conflicts.
+
+       clear
+           Remove all the stash entries. Note that those entries will then be subject to pruning, and may be impossible to recover (see _\bE_\bx_\ba_\bm_\bp_\bl_\be_\bs below for a possible strategy).
+
+       drop [-q|--quiet] [<stash>]
+           Remove a single stash entry from the list of stash entries.
+
+       create
+           Create a stash entry (which is a regular commit object) and return its object name, without storing it anywhere in the ref namespace. This is intended to be useful for scripts. It is probably not the command you want to use; see "push" above.
+
+       store
+           Store a given stash created via _\bg_\bi_\bt _\bs_\bt_\ba_\bs_\bh _\bc_\br_\be_\ba_\bt_\be (which is a dangling merge commit) in the stash ref, updating the stash reflog. This is intended to be useful for scripts. It is probably not the command you want to use; see "push" above.
+
+O\bOP\bPT\bTI\bIO\bON\bNS\bS
+       -a, --all
+           This option is only valid for p\bpu\bus\bsh\bh and s\bsa\bav\bve\be commands.
+
+           All ignored and untracked files are also stashed and then cleaned up with g\bgi\bit\bt c\bcl\ble\bea\ban\bn.
+
+       -u, --include-untracked, --no-include-untracked
+           When used with the p\bpu\bus\bsh\bh and s\bsa\bav\bve\be commands, all untracked files are also stashed and then cleaned up with g\bgi\bit\bt c\bcl\ble\bea\ban\bn.
+
+           When used with the s\bsh\bho\bow\bw command, show the untracked files in the stash entry as part of the diff.
+
+       --only-untracked
+           This option is only valid for the s\bsh\bho\bow\bw command.
+
+           Show only the untracked files in the stash entry as part of the diff.
+
+       --index
+           This option is only valid for p\bpo\bop\bp and a\bap\bpp\bpl\bly\by commands.
+
+           Tries to reinstate not only the working tree’s changes, but also the index’s ones. However, this can fail, when you have conflicts (which are stored in the index, where you therefore can no longer apply the changes as they were originally).
+
+       -k, --keep-index, --no-keep-index
+           This option is only valid for p\bpu\bus\bsh\bh and s\bsa\bav\bve\be commands.
+
+           All changes already added to the index are left intact.
+
+       -p, --patch
+           This option is only valid for p\bpu\bus\bsh\bh and s\bsa\bav\bve\be commands.
+
+           Interactively select hunks from the diff between HEAD and the working tree to be stashed. The stash entry is constructed such that its index state is the same as the index state of your repository, and its worktree contains only the changes you selected interactively. The
+           selected changes are then rolled back from your worktree. See the “Interactive Mode” section of g\bgi\bit\bt-\b-a\bad\bdd\bd(1) to learn how to operate the -\b--\b-p\bpa\bat\btc\bch\bh mode.
+
+           The -\b--\b-p\bpa\bat\btc\bch\bh option implies -\b--\b-k\bke\bee\bep\bp-\b-i\bin\bnd\bde\bex\bx. You can use -\b--\b-n\bno\bo-\b-k\bke\bee\bep\bp-\b-i\bin\bnd\bde\bex\bx to override this.
+
+       --pathspec-from-file=<file>
+           This option is only valid for p\bpu\bus\bsh\bh command.
+
+           Pathspec is passed in <\b<f\bfi\bil\ble\be>\b> instead of commandline args. If <\b<f\bfi\bil\ble\be>\b> is exactly -\b- then standard input is used. Pathspec elements are separated by LF or CR/LF. Pathspec elements can be quoted as explained for the configuration variable c\bco\bor\bre\be.\b.q\bqu\buo\bot\bte\beP\bPa\bat\bth\bh (see g\bgi\bit\bt-\b-c\bco\bon\bnf\bfi\big\bg(1)). See
+           also -\b--\b-p\bpa\bat\bth\bhs\bsp\bpe\bec\bc-\b-f\bfi\bil\ble\be-\b-n\bnu\bul\bl and global -\b--\b-l\bli\bit\bte\ber\bra\bal\bl-\b-p\bpa\bat\bth\bhs\bsp\bpe\bec\bcs\bs.
+
+       --pathspec-file-nul
+           This option is only valid for p\bpu\bus\bsh\bh command.
+
+           Only meaningful with -\b--\b-p\bpa\bat\bth\bhs\bsp\bpe\bec\bc-\b-f\bfr\bro\bom\bm-\b-f\bfi\bil\ble\be. Pathspec elements are separated with NUL character and all other characters are taken literally (including newlines and quotes).
+
+       -q, --quiet
+           This option is only valid for a\bap\bpp\bpl\bly\by, d\bdr\bro\bop\bp, p\bpo\bop\bp, p\bpu\bus\bsh\bh, s\bsa\bav\bve\be, s\bst\bto\bor\bre\be commands.
+
+           Quiet, suppress feedback messages.
+
+       --
+           This option is only valid for p\bpu\bus\bsh\bh command.
+
+           Separates pathspec from options for disambiguation purposes.
+
+       <pathspec>...
+           This option is only valid for p\bpu\bus\bsh\bh command.
+
+           The new stash entry records the modified states only for the files that match the pathspec. The index entries and working tree files are then rolled back to the state in HEAD only for these files, too, leaving files that do not match the pathspec intact.
+
+           For more details, see the _\bp_\ba_\bt_\bh_\bs_\bp_\be_\bc entry in g\bgi\bit\btg\bgl\blo\bos\bss\bsa\bar\bry\by(7).
+
+       <stash>
+           This option is only valid for a\bap\bpp\bpl\bly\by, b\bbr\bra\ban\bnc\bch\bh, d\bdr\bro\bop\bp, p\bpo\bop\bp, s\bsh\bho\bow\bw commands.
+
+           A reference of the form s\bst\bta\bas\bsh\bh@\b@{\b{<\b<r\bre\bev\bvi\bis\bsi\bio\bon\bn>\b>}\b}. When no <\b<s\bst\bta\bas\bsh\bh>\b> is given, the latest stash is assumed (that is, s\bst\bta\bas\bsh\bh@\b@{\b{0\b0}\b}).
+
+D\bDI\bIS\bSC\bCU\bUS\bSS\bSI\bIO\bON\bN
+       A stash entry is represented as a commit whose tree records the state of the working directory, and its first parent is the commit at H\bHE\bEA\bAD\bD when the entry was created. The tree of the second parent records the state of the index when the entry is made, and it is made a child of
+       the H\bHE\bEA\bAD\bD commit. The ancestry graph looks like this:
+
+                  .----W
+                 /    /
+           -----H----I
+
+       where H\bH is the H\bHE\bEA\bAD\bD commit, I\bI is a commit that records the state of the index, and W\bW is a commit that records the state of the working tree.
+
+E\bEX\bXA\bAM\bMP\bPL\bLE\bES\bS
+       Pulling into a dirty tree
+           When you are in the middle of something, you learn that there are upstream changes that are possibly relevant to what you are doing. When your local changes do not conflict with the changes in the upstream, a simple g\bgi\bit\bt p\bpu\bul\bll\bl will let you move forward.
+
+           However, there are cases in which your local changes do conflict with the upstream changes, and g\bgi\bit\bt p\bpu\bul\bll\bl refuses to overwrite your changes. In such a case, you can stash your changes away, perform a pull, and then unstash, like this:
+
+               $ git pull
+                ...
+               file foobar not up to date, cannot merge.
+               $ git stash
+               $ git pull
+               $ git stash pop
+
+       Interrupted workflow
+           When you are in the middle of something, your boss comes in and demands that you fix something immediately. Traditionally, you would make a commit to a temporary branch to store your changes away, and return to your original branch to make the emergency fix, like this:
+
+               # ... hack hack hack ...
+               $ git switch -c my_wip
+               $ git commit -a -m "WIP"
+               $ git switch master
+               $ edit emergency fix
+               $ git commit -a -m "Fix in a hurry"
+               $ git switch my_wip
+               $ git reset --soft HEAD^
+               # ... continue hacking ...
+
+           You can use _\bg_\bi_\bt _\bs_\bt_\ba_\bs_\bh to simplify the above, like this:
+
+               # ... hack hack hack ...
+               $ git stash
+               $ edit emergency fix
+               $ git commit -a -m "Fix in a hurry"
+               $ git stash pop
+               # ... continue hacking ...
+
+       Testing partial commits
+           You can use g\bgi\bit\bt s\bst\bta\bas\bsh\bh p\bpu\bus\bsh\bh -\b--\b-k\bke\bee\bep\bp-\b-i\bin\bnd\bde\bex\bx when you want to make two or more commits out of the changes in the work tree, and you want to test each change before committing:
+
+               # ... hack hack hack ...
+               $ git add --patch foo            # add just first part to the index
+               $ git stash push --keep-index    # save all other changes to the stash
+               $ edit/build/test first part
+               $ git commit -m 'First part'     # commit fully tested change
+               $ git stash pop                  # prepare to work on all other changes
+               # ... repeat above five steps until one commit remains ...
+               $ edit/build/test remaining parts
+               $ git commit foo -m 'Remaining parts'
+
+       Recovering stash entries that were cleared/dropped erroneously
+           If you mistakenly drop or clear stash entries, they cannot be recovered through the normal safety mechanisms. However, you can try the following incantation to get a list of stash entries that are still in your repository, but not reachable any more:
+
+               git fsck --unreachable |
+               grep commit | cut -d\  -f3 |
+               xargs git log --merges --no-walk --grep=WIP
+
+S\bSE\bEE\bE A\bAL\bLS\bSO\bO
+       g\bgi\bit\bt-\b-c\bch\bhe\bec\bck\bko\bou\but\bt(1), g\bgi\bit\bt-\b-c\bco\bom\bmm\bmi\bit\bt(1), g\bgi\bit\bt-\b-r\bre\bef\bfl\blo\bog\bg(1), g\bgi\bit\bt-\b-r\bre\bes\bse\bet\bt(1), g\bgi\bit\bt-\b-s\bsw\bwi\bit\btc\bch\bh(1)
+
+G\bGI\bIT\bT
+       Part of the g\bgi\bit\bt(1) suite
+
+Git 2.34.1                                                                                                                               02/08/2023                                                                                                                             GIT-STASH(1)
diff --git a/thttpd.conf b/thttpd.conf
new file mode 100644 (file)
index 0000000..927b654
--- /dev/null
@@ -0,0 +1,14 @@
+# This section overrides defaults
+dir=./htdocs
+user=will
+logfile=/home/will/dev/LifeLog/log/thttpd.log
+pidfile=/home/will/dev/LifeLog/log/thttpd.pid
+# This section _documents_ defaults in effect
+port=8080
+nosymlinkcheck # default = !chroot
+# novhost
+# nocgipat
+# nothrottles
+host=0.0.0.0
+charset=utf-8
+cgipat=**.cgi